/**
* This mixin is applied to panels that want to manage a Pin state and corresponding tool.
*/
Ext.define('Ext.panel.Pinnable', {
extend: 'Ext.Mixin',
mixinId: 'pinnable',
pinnable: true,
pinnedTip: 'Unpin this item',
unpinnedTip: 'Pin this item',
initPinnable: function() {
var me = this,
pinned = me.isPinned();
me.addTool(me.pinTool = Ext.widget({
xtype: 'tool',
type: pinned ? 'unpin' : 'pin',
callback: 'togglePin',
scope: me,
tooltip: pinned ? me.pinnedTip : me.unpinnedTip
}));
},
isPinned: function() {
return !this.floating;
},
setPinned: function(pinned) {
var me = this,
args;
if (pinned !== me.isPinned()) {
args = [me, pinned];
if (me.fireEventArgs('beforepinchange', args) !== false) {
me.updatePinned(pinned);
me.fireEventArgs('pinchange', args);
}
}
},
togglePin: function() {
this.setPinned(!this.isPinned());
},
updatePinned: function(pinned) {
var me = this,
tool = me.pinTool;
tool.setTooltip(pinned ? me.pinnedTip : me.unpinnedTip);
tool.setType(pinned ? 'unpin' : 'pin');
}
});