Imgorg.UploadQueue = Ext.extend(Ext.Panel,{
    swfu: '',
    autoRemove: false,
    uploaded: false,
    
    initComponent: function() {
        Ext.apply(this,{
            layout: 'fit',
            autoScroll: true,
            items: [{
                xtype: 'dataview',
                id: 'img-uploaddv',
                autoWidth: true,
                tpl: new Ext.XTemplate(
                    '',
                        '
', '
{name}
', '
', '
', '
{size:fileSize}
', '
', '
' ), store: new Ext.data.JsonStore({ root: '', id: 'id', fields: [ {name: 'creationdate', type: 'date'}, {name: 'modificationdate', type: 'date'}, 'filestatus','id','index','name','size','type','dbid' ] }), itemSelector: 'div.upload-file', selectedClass: 'upload-file-selected', singleSelect: true }], tbar:[{ text: 'Start Upload', handler: this.startUpload, scope: this, iconCls: 'start-upload' },{ text: 'Clear', handler: this.cancelUpload, scope: this, iconCls: 'cancel' },'-',{ text: 'Add to Album', handler: this.addAllAlbum, scope: this, iconCls: 'album-add' },{ text: 'Tag', handler: this.tagAll, scope: this, iconCls: 'tag' }, '->',{ xtype: 'checkbox', checked: this.autoRemove, listeners: { check: function(cb, checked) { this.autoRemove = checked; }, scope: this } },'Auto-Remove Uploaded'] }); Imgorg.UploadQueue.superclass.initComponent.call(this); this.progressBars = {}; Ext.ux.SwfuMgr.on('filequeued', this.addFile, this); Ext.ux.SwfuMgr.on('uploadprogress', this.updateProgress, this); Ext.ux.SwfuMgr.on('uploadsuccess', this.uploadSuccess, this); }, getDv: function() { if (!this.imgUplDv) { this.imgUplDv = this.getComponent('img-uploaddv'); } return this.imgUplDv; }, startUpload: function() { this.swfu.startUpload(); }, cancelUpload: function() { this.swfu.cancelUpload(); for (var pb in this.progressBars) { this.progressBars[pb].destroy(); } this.getDv().store.removeAll(); this.uploaded = false; }, addFile: function(swfu, file) { this.getDv().store.loadData([file], true); }, addAllAlbum: function(btn) { if (!this.uploaded) { Ext.Msg.alert('Warning', 'You must upload files before you can add them to an Album'); return; } var dv = this.getDv(); var recs = dv.getRecords(dv.getNodes()); if (!this.albumWin) { this.albumWin = new Imgorg.AlbumWin(); } this.albumWin.selectedRecords = recs; this.albumWin.show(btn.btnEl.dom); }, tagAll: function(btn) { if (!this.uploaded) { Ext.Msg.alert('Warning', 'You must upload files before you can Tag them'); return; } var dv = this.getDv(); var recs = dv.getRecords(dv.getNodes()); Imgorg.TagWin.selectedRecords = recs; Imgorg.TagWin.show(btn.btnEl.dom); }, updateProgress: function(swfu, file, complete, total) { if (this.progressBars[file.id]) { this.progressBars[file.id].updateProgress(file.percentUploaded/100,Math.round(file.percentUploaded)+'% Completed... '+Ext.util.Format.fileSize(file.currentSpeed)+'s'); } else { this.progressBars[file.id] = new Ext.ProgressBar({ text:'0% Completed...', renderTo: file.id+'-pb' }); } }, uploadSuccess: function(swfu, file, data) { var store = this.getDv().store; var rec = store.getById(file.id); if (this.progressBars[file.id]) { this.progressBars[file.id].updateProgress(1, '100% Completed...'); } if (this.autoRemove) { store.remove(rec); } var data = Ext.decode(Ext.util.Format.stripTags(data)); rec.data.dbid = data.result.res.id; this.uploaded = true; } }); Ext.reg('img-uploadqueue', Imgorg.UploadQueue); Ext.ux.SwfuManager = Ext.extend(Ext.util.Observable, { constructor: function(config) { Ext.ux.SwfuManager.superclass.constructor.call(this, config); this.addEvents( 'filequeued', 'uploadstart', 'uploadprogress', 'uploaderror', 'uploadsuccess' ); } }); Ext.ux.SwfuMgr = new Ext.ux.SwfuManager();