Ext.namespace('Zarafa.mail.settings'); /** * @class Zarafa.mail.settings.SettingsMailWidget * @extends Zarafa.settings.ui.SettingsWidget * @xtype zarafa.settingsmailwidget * * The {@link Zarafa.settings.ui.SettingsWidget widget} for configuring * the general mail options in the {@link Zarafa.mail.settings.SettingsMailCategory mail category}. */ Zarafa.mail.settings.SettingsMailWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, { /** * @constructor * @param {Object} config Configuration object */ constructor : function(config) { config = config || {}; var previewStore = { xtype : 'jsonstore', autoDestroy : true, fields : ['name', 'value'], data : [{ 'name' : _('Off'), 'value' : Zarafa.mail.data.ViewModes.NO_PREVIEW },{ 'name' : _('Right'), 'value' : Zarafa.mail.data.ViewModes.RIGHT_PREVIEW },{ 'name' : _('Bottom'), 'value' : Zarafa.mail.data.ViewModes.BOTTOM_PREVIEW }] }; Ext.applyIf(config, { title : _('General mail settings'), layout : 'form', items : [{ xtype : 'combo', name : 'zarafa/v1/state/contexts/mail/current_view_mode', ref : 'previewCombo', fieldLabel : _('Location of preview pane'), width : 200, store : previewStore, mode: 'local', triggerAction: 'all', displayField: 'name', valueField: 'value', lazyInit: false, forceSelection: true, editable: false, autoSelect: true, listeners : { select : this.onPreviewSelect, scope : this } },{ xtype : 'checkbox', name : 'zarafa/v1/contexts/mail/close_on_respond', ref : 'closeCheck', boxLabel : _('Close original message on reply or forward'), hideLabel : true, lazyInit : false, listeners : { check : this.onCheck, scope : this } }] }); // Display the popout settings only if supported. if (Zarafa.supportsPopOut()) { config.items.splice(1, 0, { xtype : 'displayfield', hideLabel : true, value : _('Open or compose a mail item in a') + ':' },{ xtype : 'radiogroup', name : 'zarafa/v1/main/base_content_layer', ref : 'openingMailField', columns : 1, hideLabel : true, items : [{ xtype : 'radio', name : 'openingMail', inputValue : 'tabs', boxLabel : _('WebApp tab') },{ xtype : 'radio', name : 'openingMail', inputValue : 'separateWindows', boxLabel : _('Browser window') }], listeners : { change : this.onRadioChange, scope : this } }); } Zarafa.mail.settings.SettingsMailWidget.superclass.constructor.call(this, config); }, /** * Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when * it has been called with {@link zarafa.settings.ui.SettingsCategory#update}. * This is used to load the latest version of the settings from the * {@link Zarafa.settings.SettingsModel} into the UI of this category. * @param {Zarafa.settings.SettingsModel} settingsModel The settings to load */ update : function(settingsModel) { this.model = settingsModel; var previewLocation = settingsModel.get(this.previewCombo.name); if(!Ext.isDefined(previewLocation)) { previewLocation = Zarafa.mail.data.ViewModes.RIGHT_PREVIEW; } this.previewCombo.setValue(previewLocation); this.closeCheck.setValue(settingsModel.get(this.closeCheck.name)); // There is popout settings only if supported. if (Zarafa.supportsPopOut()) { this.openingMailField.setValue(settingsModel.get(this.openingMailField.name)); } }, /** * Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when * it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}. * This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}. * @param {Zarafa.settings.SettingsModel} settingsModel The settings to update */ updateSettings : function(settingsModel) { settingsModel.set(this.previewCombo.name, this.previewCombo.getValue()); settingsModel.set(this.closeCheck.name, this.closeCheck.getValue()); // There is popout settings only if supported. if (Zarafa.supportsPopOut()) { settingsModel.set(this.openingMailField.name, this.openingMailField.getValue().inputValue); } }, /** * Event handler which is called when a selection has been made in the * Preview Panel type {@link Ext.form.ComboBox combobox}. * @param {Ext.form.ComboBox} field The field which fired the event * @param {Ext.data.Record} record The selected record */ onPreviewSelect : function(field, record) { if (this.model) { var set = record.get(field.valueField); // FIXME: The settings model should be able to detect if // a change was applied if (this.model.get(field.name) !== set) { this.model.set(field.name, set); } } }, /** * Event handler called when checkbox has been modified * * @param {Ext.form.CheckBox} checkbox Checkbox element from which the event originated * @param {Boolean} checked State of the checkbox * @private */ onCheck : function(checkbox, checked) { if(this.model) { // FIXME: The settings model should be able to detect if // a change was applied if (this.model.get(checkbox.name) !== checked) { this.model.set(checkbox.name, checked); } } }, /** * Event handler which is fired when a {@link Ext.form.Radio} in the * {@link Ext.form.RadioGroup} has been changed. This will set the value * selected by user in settingsModel. * @param {Ext.form.RadioGroup} group The radio group which fired the event * @param {Ext.form.Radio} radio The radio which was enabled * @private */ onRadioChange : function(group, radio) { if (this.model && (this.model.get(group.name) !== radio.inputValue)) { this.model.set(group.name, radio.inputValue); } } }); Ext.reg('zarafa.settingsmailwidget', Zarafa.mail.settings.SettingsMailWidget);