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();
- }
- }
- });
|