|
|
- // Class for a Sugar select box
- enyo.kind({
- name: "Sugar.SelectBox",
- kind: enyo.Control,
- classes: "selectbox-border",
- published: { selected: -1, items: [], parentMargin: null },
- events: { onIndexChanged: "" },
- components: [
- {components: [
- {name: "icon", kind: "Sugar.Icon", size: 20, x: 6, y: 6, classes: "selectbox-icon"},
- {name: "text", content: "xxx", classes: "selectbox-text"},
- {name: "selectpopup", kind: "Sugar.Popup", classes: "selectbox-popup", showing: false}
- ], ontap:"showPopup"}
- ],
-
- // Constructor
- create: function() {
- this.inherited(arguments);
- this.timer = null;
- this.itemsChanged();
- this.selectedChanged();
- this.parentMarginChanged();
- },
-
- // Property changed
- itemsChanged: function() {
- if (this.items.length == 0)
- return;
- this.selected = 0;
- this.selectedChanged();
- },
- selectedChanged: function() {
- if (this.selected > this.items.length || this.selected < 0)
- return;
- this.$.icon.setIcon(this.items[this.selected].icon);
- this.$.text.setContent(this.items[this.selected].name);
- },
- parentMarginChanged: function() {
- },
-
- // Popup menu for item selection
- showPopup: function() {
- // Create popup
- if (this.items.length == 0)
- return;
- var clientrects = this.hasNode().getClientRects();
- var ctrlpos = clientrects[clientrects.length-1];
- if (this.parentMargin != null) {
- var nodepos = enyo.dom.calcNodePosition(this.parentMargin.hasNode());
- ctrlpos = { left: ctrlpos.left-nodepos.left, top: ctrlpos.top-nodepos.top };
- }
- this.$.selectpopup.setMargin({left: ctrlpos.left-mouse.position.x+5, top: ctrlpos.top-mouse.position.y-3});
- this.$.selectpopup.setHeader({
- icon: this.items[0].icon,
- name: this.items[0].name,
- action: enyo.bind(this, "setSelection"),
- data: [0]
- });
- var items = [];
- for (var i = 1 ; i < this.items.length ; i++)
- items.push({
- icon: this.items[i].icon,
- name: this.items[i].name,
- action: enyo.bind(this, "setSelection"),
- data: [i]
- });
- this.$.selectpopup.setItems(items);
- this.$.selectpopup.showPopup();
- this.$.selectpopup.showContent();
- this.timer = window.setInterval(enyo.bind(this, "hidePopup"), constant.timerPopupDuration);
- },
- hidePopup: function() {
- // Hide popup
- if (this.$.selectpopup.cursorIsInside())
- return false;
- window.clearInterval(this.timer);
- this.timer = null;
- this.$.selectpopup.hidePopup();
- return true;
- },
-
- // Set selection
- setSelection: function(index) {
- this.selected = index;
- this.selectedChanged();
- window.clearInterval(this.timer);
- this.timer = null;
- this.$.selectpopup.hidePopup();
- this.doIndexChanged();
- }
- });
|