| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | /** * @class Ext.chooser.Window * @extends Ext.window.Window * @author Ed Spencer *  * This is a simple subclass of the built-in Ext.window.Window class. Although it weighs in at 100+ lines, most of this * is just configuration. This Window class uses a border layout and creates a DataView in the central region and an * information panel in the east. It also sets up a toolbar to enable sorting and filtering of the items in the  * DataView. We add a few simple methods to the class at the bottom, see the comments inline for details. */Ext.define('Ext.chooser.Window', {    extend: 'Ext.window.Window',    uses: [        'Ext.layout.container.Border',        'Ext.form.field.Text',        'Ext.form.field.ComboBox',        'Ext.toolbar.TextItem'    ],        height: 400,    width : 600,    title : 'Choose an Image',    closeAction: 'hide',    layout: 'border',    // modal: true,    border: false,    bodyBorder: false,        /**     * initComponent is a great place to put any code that needs to be run when a new instance of a component is     * created. Here we just specify the items that will go into our Window, plus the Buttons that we want to appear     * at the bottom. Finally we call the superclass initComponent.     */    initComponent: function() {        this.items = [            {                xtype: 'panel',                region: 'center',                autoScroll: true,                                items: {                    xtype: 'iconbrowser',                    id: 'img-chooser-view',                    listeners: {                        scope: this,                        selectionchange: this.onIconSelect,                        itemdblclick: this.fireImageSelected                    }                },                                tbar: [                    {                        xtype: 'textfield',                        name : 'filter',                        fieldLabel: 'Filter',                        labelAlign: 'right',                        labelWidth: 35,                        listeners: {                            scope : this,                            buffer: 50,                            change: this.filter                        }                    },                    ' ',                    {                        xtype: 'combo',                        fieldLabel: 'Sort By',                        labelAlign: 'right',                        labelWidth: 45,                        valueField: 'field',                        displayField: 'label',                        value: 'Type',                        editable: false,                        store: Ext.create('Ext.data.Store', {                            fields: ['field', 'label'],                            sorters: 'type',                            proxy : {                                type: 'memory',                                data  : [{label: 'Name', field: 'name'}, {label: 'Type', field: 'type'}]                            }                        }),                        listeners: {                            scope : this,                            select: this.sort                        }                    }                ]            },            {                xtype: 'infopanel',                region: 'east',                split: true            }        ];                this.buttons = [            {                text: 'OK',                scope: this,                handler: this.fireImageSelected            },            {                text: 'Cancel',                scope: this,                handler: function() {                    this.hide();                }            }        ];                this.callParent(arguments);                /**         * Specifies a new event that this component will fire when the user selects an item. The event is fired by the         * fireImageSelected function below. Other components can listen to this event and take action when it is fired         */        this.addEvents(            /**             * @event selected             * Fired whenever the user selects an image by double clicked it or clicking the window's OK button             * @param {Ext.data.Model} image The image that was selected             */            'selected'        );    },        /**     * @private     * Called whenever the user types in the Filter textfield. Filters the DataView's store     */    filter: function(field, newValue) {        var store = this.down('iconbrowser').store,            dataview = this.down('dataview');                store.suspendEvents();        store.clearFilter();        dataview.getSelectionModel().clearSelections();        store.resumeEvents();        store.filter({            property: 'name',            anyMatch: true,            value   : newValue        });    },        /**     * @private     * Called whenever the user changes the sort field using the top toolbar's combobox     */    sort: function() {        var field = this.down('combobox').getValue();                this.down('dataview').store.sort(field);    },        /**     * Called whenever the user clicks on an item in the DataView. This tells the info panel in the east region to     * display the details of the image that was clicked on     */    onIconSelect: function(dataview, selections) {        var selected = selections[0];                if (selected) {            this.down('infopanel').loadRecord(selected);        }    },        /**     * Fires the 'selected' event, informing other components that an image has been selected     */    fireImageSelected: function() {        var selectedImage = this.down('iconbrowser').selModel.getSelection()[0];                if (selectedImage) {            this.fireEvent('selected', selectedImage);            this.hide();        }    }});
 |