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);
},
});