/** @constructor */
hui.ui.Toolbar = function(options) {
this.element = hui.get(options.element);
this.name = options.name;
hui.ui.extend(this);
};
hui.ui.Toolbar.create = function(options) {
options = options || {};
var element = options.element = hui.build('div.hui_toolbar');
if (options.labels===false) {
hui.cls.add(element,'hui_toolbar-nolabels');
}
if (options.variant) {
hui.cls.add(element,'hui_toolbar-'+options.variant);
}
return new hui.ui.Toolbar(options);
};
hui.ui.Toolbar.prototype = {
add : function(widget) {
this.element.appendChild(widget.getElement());
},
addDivider : function() {
this.element.appendChild(hui.build('span.hui_toolbar_divider'));
},
setSelection : function(key) {
var desc = hui.ui.getDescendants(this);
for (var i=0; i < desc.length; i++) {
var widget = desc[i];
if (widget.setSelected) {
widget.setSelected(widget.key==key);
}
}
},
getByKey : function(key) {
var desc = hui.ui.getDescendants(this);
for (var i=0; i < desc.length; i++) {
var widget = desc[i];
if (widget.key==key) {
return widget;
}
}
}
};
/////////////////////// Icon ///////////////////
/** @constructor */
hui.ui.Toolbar.Icon = function(options) {
this.options = options;
this.element = hui.get(options.element);
this.name = options.name;
this.key = options.key;
this.enabled = !hui.cls.has(this.element,'hui_toolbar_icon_disabled');
this.element.tabIndex=this.enabled ? 0 : -1;
this.icon = hui.get.firstByClass(this.element,'hui_icon');
hui.ui.extend(this);
if (options.listener) {
this.listen(options.listener);
}
this._attach();
};
hui.ui.Toolbar.Icon.create = function(options) {
var element = options.element = hui.build('a.hui_toolbar_icon');
var icon = hui.build('span.hui_icon',{parent: element});
hui.ui.setIconImage(icon, options.icon, 32);
if (options.overlay) {
hui.build('span.hui_icon_overlay',{parent:icon,style:'background-image: url('+hui.ui.getIconUrl('overlay/'+options.overlay,32)+')'});
}
hui.build('span.hui_toolbar_icon_text',{text:options.title || options.text, parent:element});
return new hui.ui.Toolbar.Icon(options);
};
hui.ui.Toolbar.Icon.prototype = {
_attach : function() {
var self = this;
this.element.onclick = function() {
self._click();
};
},
/** Sets wether the icon should be enabled */
setEnabled : function(enabled) {
this.enabled = enabled;
this.element.tabIndex=enabled ? 0 : -1;
hui.cls.set(this.element,'hui_toolbar_icon_disabled',!this.enabled);
},
/** Disables the icon */
disable : function() {
this.setEnabled(false);
},
/** Enables the icon */
enable : function() {
this.setEnabled(true);
},
setOverlay : function(overlay) {
var node = hui.get.firstByClass(this.element,'hui_icon_overlay');
if (node && !overlay) {
node.style.backgroundImage = '';
} else if (node && overlay) {
node.style.backgroundImage = "url('"+hui.ui.getIconUrl('overlay/'+overlay,32)+"')";
} else if (overlay) {
var parent = hui.get.firstByClass(this.element,'hui_icon');
hui.build('span',{'class':'hui_icon_overlay',parent:parent,style:'background-image: url('+hui.ui.getIconUrl('overlay/'+overlay,32)+')'});
}
},
setBadge : function(value) {
var node = hui.get.firstByClass(this.element,'hui_icon_badge');
if (!node && !hui.isBlank(value)) {
node = hui.build('span',{'class':'hui_icon_badge',parent:hui.get.firstByClass(this.element,'hui_icon'),text:value});
} else if (hui.isBlank(value) && node) {
hui.dom.remove(node);
} else if (node) {
hui.dom.setText(node,value);
}
},
setLabel : function(label) {
var e = hui.get.firstByClass(this.element,'hui_toolbar_icon_text');
hui.dom.setText(e,label);
},
setIcon : function(icon) {
var e = hui.get.firstByClass(this.element,'hui_icon');
hui.ui.setIconImage(e, icon, 32);
},
/** Sets wether the icon should be selected */
setSelected : function(selected) {
if (selected) {
this.element.blur();
}
hui.cls.set(this.element,'hui_toolbar_icon_selected',selected);
},
/** @private */
_click : function() {
if (this.enabled) {
if (this.options.confirm) {
hui.ui.confirmOverlay({
widget : this,
text : this.options.confirm.text,
okText : this.options.confirm.okText,
cancelText : this.options.confirm.cancelText,
onOk : this._fireClick.bind(this)
});
} else {
this._fireClick();
}
}
},
_fireClick : function() {
this.fire('toolbarIconWasClicked'); // TODO deprecated
this.fire('click');
}
};
//////////////////////// More ///////////////////////
/** @constructor */
hui.ui.Toolbar.More = function(options) {
this.element = hui.get(options.element);
this.name = options.name;
this.button = hui.get.firstByClass(this.element,'hui_toolbar_more_toggle');
hui.listen(this.button,'click',this.toggle.bind(this));
hui.ui.extend(this);
};
hui.ui.Toolbar.More.prototype = {
toggle : function() {
hui.cls.toggle(this.element,'hui_is_expanded');
}
};