Imgorg.ImageDv = Ext.extend(Ext.DataView,{
    tpl: new Ext.XTemplate(
        '',
        '
', '
', '{filename:ellipsis(15)}
', '
' ), initComponent: function() { Ext.apply(this, { itemSelector: 'div.thumb-wrap', style: 'overflow:auto', multiSelect: true, overClass: 'x-view-over', emptyText: 'No images to display', plugins: [new Ext.DataView.DragSelector({ dragSafe: true }), new Ext.DataView.LabelEditor({ allowBlank: false, alignment: 'c-c', dataIndex: 'filename' })], store: new Ext.data.DirectStore({ directFn: Imgorg.ss.Images.load, root: '', fields: ['filename', 'url', 'id', 'size'] }) }); this.addEvents('viewitem'); Imgorg.ImageDv.superclass.initComponent.call(this); this.on({// hacks to force the labeleditor to stop editing when we get a click elsewhere click: function() { this.plugins[1].completeEdit(); }, containerclick: function(dv, e) { this.plugins[1].completeEdit(); }, contextmenu: this.onContextMenu, containercontextmenu: this.onContextMenu, scope: this }); this.store.on('update', this.syncRename, this); }, afterRender: function() { Imgorg.ImageDv.superclass.afterRender.call(this); this.el.unselectable(); // messy if they can select the text of the file names }, onContextMenu: function(e, node) { e.stopEvent(); if(!this.contMenu) { this.contMenu = new Ext.menu.Menu({ items: [{ text: 'View in Tab(s)', handler: function() { this.fireEvent('viewitem', this, node); }, scope: this },{ text: 'Add to Album', handler: this.selectAlbum, scope: this },{ text: 'Tag', handler: this.tag, scope: this },{ text: 'Remove', handler: this.removeImages, scope: this }] }); } this.currentNode = node; this.contMenu.showAt(e.getXY()); }, selectAlbum: function() { if (!this.albumWin) { this.albumWin = new Imgorg.AlbumWin(); } this.albumWin.selectedRecords = this.getSelectedRecords(); this.albumWin.show(this.currentNode); }, tag: function() { Imgorg.TagWin.selectedRecords = this.getSelectedRecords(); Imgorg.TagWin.show(this.currentNode); }, syncRename: function(store, rec, op) { if (op == 'edit') { Imgorg.ss.Images.rename({image: rec.data.id, name: rec.data.filename, url: rec.data.url}); } }, removeImages: function() { var recs = this.getSelectedRecords(); var imageIds = []; for (var i = 0;i < recs.length;i++) { imageIds.push(recs[i].data.id); this.store.remove(recs[i]); } Imgorg.ss.Images.remove({images: imageIds}); } }); Ext.reg('img-dv', Imgorg.ImageDv);