diff --git a/Merger.js b/Merger.js index a99f2fc..e4ff4b4 100644 --- a/Merger.js +++ b/Merger.js @@ -567,20 +567,22 @@ return a; } c.merge = function (def) { - var settings = {}; - for (var key in def) { - var mdata = def[key]; - if (typeof mdata == "function") - c[key] = def[key]; - else { + var settings = {}, obj, key, mdata; + for (key in def) { + mdata = def[key]; + if (typeof mdata == "function") { + if (this[key]) + def[key].super=this[key].bind(this); + this[key] = def[key]; + } else { var fname = "set" + key[0].toUpperCase() + key.substring(1); - var fnc = c[fname]; + var fnc = this[fname]; settings[key] = { f: (fnc && typeof fnc == "function") ? fnc.bind(this) : null, d: mdata }; } } - for (var key in settings) { + for (key in settings) { var o = settings[key]; if (o.f) o.f(o.d); @@ -983,12 +985,43 @@ } /** + * DropDown control creation + */ + function dropdown(id, def, listMode) { + if (listMode) + def.size=2; + var c = control(listMode ? "list" : "dropdown", id, core.mkDefinition({ + setItems: function (items) { + this.clear(); + this.addAll(items); + }, + clear: function () { + while (this.options.length > 0) + this.remove(this.options.length - 1); + }, + add: function (item) { + if (!(item instanceof Option)) { + if (typeof item == "object") + item = new Option(item.value, item.key); + else + item = new Option(item, item); + } + this.add.super(item); + }, + addAll: function (items) { + var i; + for (i in items) + this.add(items[i]); + } + }, def), core.mkTag("select")); + return c; + } + + /** * List control creation */ function list(id, def) { - var c = control("list", id, def); - c.style.border = "1px solid red"; - return c; + return dropdown(id, def, true) } /** @@ -1081,6 +1114,7 @@ ui: { window: window, dialog: dialog, + dropdown: dropdown, list: list, label: label, html: html, diff --git a/MergerTester.js b/MergerTester.js index f001839..5c56fa8 100644 --- a/MergerTester.js +++ b/MergerTester.js @@ -45,7 +45,7 @@ ], windows: [merger.ui.window("controls", { title: "Control Dialog", - width: 200, + width: 400, height: 200, content: [merger.ui.picture("Iico", { src: "https://cdn1.iconfinder.com/static/e9bcefc0c5591114fcd0b4b0aff67962/assets/img/extended-library/icon.svg", @@ -56,29 +56,42 @@ }), merger.ui.label("Linfo", { top: 20, - left: 40, - width: 200 - 37, - height: 32, - text: "Control samples dialog.", + left: 55, + width: 95, + height: 25, + text: "Control samples.", }), merger.ui.textbox("sample_textbox", { - top: 40, + top: 55, left: 0, - width: 200, + width: 150, text: "Textbox", }), merger.ui.checkbox("sample_checkbox", { - top: 60, + top: 75, left: 0, }), merger.ui.label("sample_checkbox_label", { - top: 60, + top: 75, left: 20, text: "Checkbox", }), + merger.ui.dropdown("sample_dropdown", { + top: 95, + left: 0, + width: 150, + items: [{ key: "clRed", value: "Red" }, { key: "clBlue", value: "Blue" }, { key: "clGreen", value: "Green" }], + }), + merger.ui.list("sample_list", { + top: 120, + left: 0, + width: 150, + height: 80, + items: [{ key: "clRed", value: "Red" }, { key: "clBlue", value: "Blue" }, { key: "clGreen", value: "Green" }], + }), merger.ui.button("Bok", { top: 200 - 20, - left: 200 - 35, + left: 400 - 35, width: 35, height: 20, text: "Ok", @@ -99,6 +112,6 @@ onLoad: function () { }, onAbout: function () { - merger.dialogs.messageBox(this, "MergerTester (C)2017 XWolf Override.
Merger desktop is a framework that mimiks a classic desktop on a webpage.", "About merger", null, this.icon, 100); + merger.dialogs.messageBox(this, "MergerTester (C)2017 XWolf Override.
Merger desktop is a framework that mimiks a classic desktop over a webpage.", "About merger", null, this.icon, 100); }, });