@qooxdoo/framework
Version:
The JS Framework for Coders
249 lines (206 loc) • 6 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
************************************************************************ */
qx.Class.define("qxl.demobrowser.demo.virtual.ComboBox",
{
extend : qx.application.Standalone,
members :
{
/**
* TODOC
*
* @return {void}
*/
main : function()
{
this.base(arguments);
// examlpe 1: default combo box with 30 text items
this._createDefaultExample();
// example 2: combo box with text and icons
this._createIconExample();
// example 3: wide combo box with a large list
this._createWideExample();
// example 4: combo combo box with HTML (rich) text
this._createHtmlExample();
},
/**
* Creates a default example.
* This means that a regular combobox will be created and filled with
* some templates.
*
* @return {void}
*/
_createDefaultExample : function()
{
// create and add the describing label
var label = new qx.ui.basic.Label("Default");
label.setFont("bold");
this.getRoot().add(label,
{
left : 20,
top : 20
});
// create a combo box
var comboBox = new qx.ui.form.VirtualComboBox();
//create a simple model
var rawData = [];
for (var i=1; i<401; i++)
{
rawData.push("2^ " + i + " = " + Math.pow(2, i));
}
var model = qx.data.marshal.Json.createModel(rawData);
comboBox.setModel(model);
comboBox.addListener("changeValue", function(e) {
this.debug("ChangeValue: " + e.getData());
});
// add the combobox to the documents root
this.getRoot().add(comboBox,
{
left : 20,
top : 40
});
},
/**
* Creates a icon example.
* This means that a combobox will be created and filled with
* some icons and text. in the textfield of the combo box is only
* the text displayed.
*
* @return {void}
*/
_createIconExample : function()
{
// create and add the describing label
var label = new qx.ui.basic.Label("With icons");
label.setFont("bold");
this.getRoot().add(label,
{
left : 160,
top : 20
});
// create a combo box
var comboBox = new qx.ui.form.VirtualComboBox();
// create the model
var rawData = [];
for (var i=1; i<31; i++)
{
rawData.push({
label : i + "'s Icon",
icon : "icon/16/places/folder.png"
});
}
var model = qx.data.marshal.Json.createModel(rawData);
comboBox.setModel(model);
comboBox.setLabelPath("label");
comboBox.setIconPath("icon");
// add the combobox to the documents root
this.getRoot().add(comboBox,
{
left : 160,
top : 40
});
},
/**
* Creates a HTML example.
* This means that a combobox will be created and filled with
* some text, that contain HTML tags and entities.
*
* @return {void}
*/
_createHtmlExample : function()
{
// create and add the describing label
var label = new qx.ui.basic.Label("With HTML (rich) text");
label.setFont("bold");
this.getRoot().add(label,
{
left : 300,
top : 20
});
// create a combo box
var comboBox = new qx.ui.form.VirtualComboBox().set({width: 200});
var items = ["... > (as literal HTML entity)",
"... > (as Richtext)",
"<b>Bold Text</b>",
"<u>Underlined Text</u>",
"<i>Italic Text</i>",
"HTML entities: « < & > »"];
// create the model
var model = qx.data.marshal.Json.createModel(items);
comboBox.setModel(model);
// Set the created list item's "rich" property
var delegate = {
configureItem : function(item)
{
item.setRich(true);
}
}
comboBox.setDelegate(delegate);
// Provide a formatting function to convert the displayed value back to
// plain text
comboBox.setDefaultFormat(function(data) {
if (data) {
data = qx.lang.String.stripTags(data);
data = qx.bom.String.unescape(data);
}
return data;
});
// add the combobox to the documents root
this.getRoot().add(comboBox,
{
left : 300,
top : 40
});
},
/**
* TODOC
*
* @return {void}
*/
_createWideExample : function()
{
// create and add the describing label
var label = new qx.ui.basic.Label("Sorted and filtered model");
label.setFont("bold");
this.getRoot().add(label,
{
left : 20,
top : 280
});
// create a combo box
var comboBox = new qx.ui.form.VirtualComboBox();
//create a simple model
var rawData = [];
for (var i=1; i<100; i++)
{
rawData.push("Item " + i);
}
var model = qx.data.marshal.Json.createModel(rawData);
comboBox.setModel(model);
var delegate = {
// Inverts the order
sorter : function(a, b) {
return a < b ? 1 : a > b ? -1 : 0;
},
// Remove even-numbered items
filter : function(item) {
var num = parseInt(/([0-9]+)/.exec(item)[1], 10);
return num % 2 ? true : false;
}
}
comboBox.setDelegate(delegate);
// add the combobox to the documents root
this.getRoot().add(comboBox,
{
left : 20,
top : 300
});
}
}
});