Ext.namespace('Zarafa.mail.dialogs');
* @class Zarafa.mail.dialogs.MailFlagsMenu
* @extends Zarafa.core.ui.menu.ConditionalMenu
* @xtype zarafa.mailflagsmenu
*
* Extend {@link Zarafa.core.ui.menu.ConditionalMenu ConditionalMenu} to create the
* {@link Zarafa.core.ui.menu.ConditionalItems ConditionalItems} for all possible
* mail flags.
*/
Zarafa.mail.dialogs.MailFlagsMenu = Ext.extend(Zarafa.core.ui.menu.ConditionalMenu, {
* @cfg {Boolean} colorsOnly Only add the color flags to the menu
*/
colorsOnly : false,
* @constructor
* @param {Object} config Configuration object
*/
constructor : function(config)
{
config = config || {};
Ext.applyIf(config, {
xtype: 'zarafa.mailflagsmenu',
items: Zarafa.mail.dialogs.MailFlagsMenu.createMailFlagButtons(config.colorsOnly || false)
});
Zarafa.mail.dialogs.MailFlagsMenu.superclass.constructor.call(this, config);
}
});
* @static
* Create a {@link Zarafa.mail.dialogs.MailFlagsButton menubutton} containing a submenu.
* The button itself will contain the default action, and the submenu will contain
* all possible buttons.
* @param {Boolean} colorsOnly Only add the color flags to the menu
* @return {Zarafa.mail.dialogs.MailFlagsButton} The button containing the submenu
*/
Zarafa.mail.dialogs.MailFlagsMenu.createMailFlagSubmenu = function(colorsOnly)
{
var items = Zarafa.mail.dialogs.MailFlagsMenu.createMailFlagButtons(colorsOnly);
return {
xtype: 'zarafa.flagbutton',
text: _('Set Flag'),
overflowText: _('Set Flag'),
iconCls : items[0].iconCls,
flagStatus: items[0].flagStatus,
flagColor: items[0].flagColor,
beforeShow : Zarafa.mail.dialogs.MailFlagsMenu.onMenuItemBeforeShow,
menu: {
xtype: 'zarafa.conditionalmenu',
items: items
}
};
};
* @static
* Handler function that will be called before showing the flags menu,
* it will check if loaded record is faulty then will hide this menu.
*
* @param {Zarafa.core.ui.menu.ConditionalItem} item The item to enable/disable
* @param {Zarafa.core.data.IPMRecord[]} records The records which must be checked
* to see if the item must be enabled or disabled.
*/
Zarafa.mail.dialogs.MailFlagsMenu.onMenuItemBeforeShow = function(item, records)
{
Ext.each(records, function(record) {
if(record.isFaultyMessage()) {
// hide menu item and break the loop
item.setVisible(false);
return false;
}
}, this);
};
* @static
* Create array of {@link Zarafa.mail.dialogs.MailFlagsButton FlagButton} for
* all available {@link Zarafa.mail.data.MailFlags MailFlags}
* @param {Boolean} colorsOnly Only add the color flags to the menu
* @return {Zarafa.mail.dialogs.MailFlagsButton} The array of color buttons.
*/
Zarafa.mail.dialogs.MailFlagsMenu.createMailFlagButtons = function(colorsOnly)
{
var items = Zarafa.mail.dialogs.MailFlagsMenu.createColorMailFlagButtons();
if (colorsOnly === false) {
items.push({ xtype: 'menuseparator' });
items.push(Zarafa.mail.dialogs.MailFlagsMenu.createStateMailFlagButtons());
}
return items;
};
* @static
* Create array of {@link Zarafa.mail.dialogs.MailFlagsButton FlagButton} for each
* possible color {@link Zarafa.mail.data.MailFlags MailFlags}.
* @return {Zarafa.mail.dialogs.MailFlagsButton} The array of color buttons.
*/
Zarafa.mail.dialogs.MailFlagsMenu.createColorMailFlagButtons = function()
{
return Zarafa.mail.dialogs.MailFlagsMenu.convertMailFlagToButton(Zarafa.mail.data.MailFlags.colors);
};
* @static
* Create array of {@link Zarafa.mail.dialogs.MailFlagsButton FlagButton} for each
* possible state {@link Zarafa.mail.data.MailFlags MailFlags}.
* @return {Zarafa.mail.dialogs.MailFlagsButton} The array of state buttons.
*/
Zarafa.mail.dialogs.MailFlagsMenu.createStateMailFlagButtons = function()
{
return Zarafa.mail.dialogs.MailFlagsMenu.convertMailFlagToButton(Zarafa.mail.data.MailFlags.state);
};
* @static
* Convert objects from the {@link Zarafa.mail.data.MailFlags MailFlags} enumeration
* into {@link Zarafa.mail.dialogs.MailFlagsButton FlagButton} objects.
*
* @param {Zarafa.mail.data.MailFlags[]} flags The array of
* {@link Zarafa.mail.data.MailFlags MailFlags} which must be converted.
* @return {Zarafa.mail.dialogs.MailFlagsButton} The array of converted buttons.
*/
Zarafa.mail.dialogs.MailFlagsMenu.convertMailFlagToButton = function(flags)
{
var buttons = [];
Ext.each(flags, function(flag) {
buttons.push({
xtype: 'zarafa.flagbutton',
text: flag.name,
iconCls: flag.iconCls,
flagStatus: flag.flagStatus,
flagColor: flag.flagColor,
beforeShow : Zarafa.mail.dialogs.MailFlagsMenu.onMenuItemBeforeShow
});
}, this);
return buttons;
};
Ext.reg('zarafa.mailflagsmenu', Zarafa.mail.dialogs.MailFlagsMenu);