X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/examples/portal/classes/PortalPanel.js diff --git a/examples/portal/classes/PortalPanel.js b/examples/portal/classes/PortalPanel.js new file mode 100644 index 00000000..37cd5529 --- /dev/null +++ b/examples/portal/classes/PortalPanel.js @@ -0,0 +1,64 @@ +/** + * @class Ext.app.PortalPanel + * @extends Ext.Panel + * A {@link Ext.Panel Panel} class used for providing drag-drop-enabled portal layouts. + */ +Ext.define('Ext.app.PortalPanel', { + extend: 'Ext.panel.Panel', + alias: 'widget.portalpanel', + cls: 'x-portal', + bodyCls: 'x-portal-body', + defaultType: 'portalcolumn', + componentLayout: 'body', + autoScroll: true, + + initComponent : function() { + var me = this; + + // Implement a Container beforeLayout call from the layout to this Container + this.layout = { + type : 'column' + }; + this.callParent(); + + this.addEvents({ + validatedrop: true, + beforedragover: true, + dragover: true, + beforedrop: true, + drop: true + }); + this.on('drop', this.doLayout, this); + }, + + // Set columnWidth, and set first and last column classes to allow exact CSS targeting. + beforeLayout: function() { + var items = this.layout.getLayoutItems(), + len = items.length, + i = 0, + item; + + for (; i < len; i++) { + item = items[i]; + item.columnWidth = 1 / len; + item.removeCls(['x-portal-column-first', 'x-portal-column-last']); + } + items[0].addCls('x-portal-column-first'); + items[len - 1].addCls('x-portal-column-last'); + return this.callParent(arguments); + }, + + // private + initEvents : function(){ + this.callParent(); + this.dd = Ext.create('Ext.app.PortalDropZone', this, this.dropConfig); + }, + + // private + beforeDestroy : function() { + if (this.dd) { + this.dd.unreg(); + } + Ext.app.PortalPanel.superclass.beforeDestroy.call(this); + } +});