Ext.namespace('Zarafa.calendar.ui'); /** * @class Zarafa.calendar.ui.CalendarMainPanel * @extends Zarafa.common.ui.ContextMainPanel * @xtype zarafa.calendarmainpanel * * This class will be containing all the views that will be created for calendar folder */ Zarafa.calendar.ui.CalendarMainPanel = Ext.extend(Zarafa.common.ui.ContextMainPanel, { // Insertion points for this class /** * @insert context.calendar.toolbar.item * * Insertion point for populating calendar context's toolbar. * This item is only visible when this context is active. * @param {Zarafa.calendar.CalendarMainPanel} panel This panel */ /** * @insert context.calendar.toolbar.paging * * Insertion point for populating calendar context's toolbar with extra * pagination buttons. This can be used to replace the default {@link Ext.PagingToolbar} * with an alternative. Note that by default all paging toolbars will be visible, and * hiding a particular toolbar is the responsibility of the new pagers. * @param {Zarafa.calendar.CalendarMainPanel} panel This panel */ /** * @insert context.calendar.views * Insertion point for adding views within the main panel of calendar context. * This insertion point should be used in combination with 'main.maintoolbar.view.calendar' * insertion point, and also view should set its store in the config object, the reference of * {@link Zarafa.calendar.CalendarContext CalendarContext} is passed as parameter of this * insertion point. * @param {Zarafa.calendar.ui.CalendarMainPanel} mainpanel This mainpanel * @param {Zarafa.calendar.CalendarContext} context The context for this panel */ /** * The main panel in which the various views are located. * @property * @type Zarafa.core.ui.SwitchViewContentContainer */ viewPanel : undefined, /** * @constructor * @param {Object} config Configuration object */ constructor : function(config) { config = config || {}; config = Ext.applyIf(config, { xtype : 'zarafa.calendarmainpanel', layout: 'fit', items: [{ xtype: 'zarafa.switchviewcontentcontainer', ref: 'viewPanel', layout : 'card', lazyItems : this.initViews(config.context) }], tbar : { xtype: 'zarafa.calendarpaneltoolbar', defaultTitle : _('Calendar'), paging : container.populateInsertionPoint('context.calendar.toolbar.paging', this), items : container.populateInsertionPoint('context.calendar.toolbar.item', this), context : config.context, model : config.context.getModel() } }); Zarafa.calendar.ui.CalendarMainPanel.superclass.constructor.call(this, config); }, /** * Function will initialize all views associated with contact context * it will also get views added through 3rd party plugins and add it here * @param {Zarafa.calendar.CalendarContext} context The calendar context * @return {Array} array of config objects of different views * @private */ initViews : function(context) { // add the standard available views var allViews = [{ xtype : 'zarafa.calendarblockpanel', id : 'calendar_blocks', context : context },{ xtype : 'zarafa.calendargrid', id : 'calendar_grid', context : context }]; var additionalViewItems = container.populateInsertionPoint('context.calendar.views', this, context); allViews = allViews.concat(additionalViewItems); return allViews; }, /** * Function called by Extjs when the panel has been {@link #render rendered}. * At this time all events can be registered. * @private */ initEvents : function() { if (Ext.isDefined(this.context)) { this.mon(this.context, 'viewchange', this.onViewChange, this); this.onViewChange(this.context, this.context.getCurrentView()); } }, /** * Event handler which is fired when the currently active view inside the {@link #context} * has been updated. This will update the call * {@link #viewPanel}#{@link Zarafa.core.ui.SwitchViewContentContainer#switchView} * to make the requested view active. * * @param {Zarafa.core.Context} context The context which fired the event * @param {Zarafa.calendar.data.Views} viewId The ID of the selected view * @private */ onViewChange : function(context, viewId) { switch (viewId) { case Zarafa.calendar.data.Views.BLOCKS: /* falls through */ default: this.viewPanel.switchView('calendar_blocks'); break; case Zarafa.calendar.data.Views.LIST: case Zarafa.calendar.data.Views.SEARCH: this.viewPanel.switchView('calendar_grid'); break; } } }); Ext.reg('zarafa.calendarmainpanel', Zarafa.calendar.ui.CalendarMainPanel);