Module: deluge Branch: master Commit: 85c0725f83b27978fcb78cdd18d3521b088c5f11
Author: Damien Churchill <[email protected]> Date: Sun Apr 25 20:14:33 2010 +0100 add a method to get the current states in the filter --- deluge/plugins/label/label/data/label.js | 65 ++++++++++++++++++++++++++-- deluge/ui/web/js/deluge-all/FilterPanel.js | 13 +++++- deluge/ui/web/js/deluge-all/Sidebar.js | 4 +- 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/deluge/plugins/label/label/data/label.js b/deluge/plugins/label/label/data/label.js index 49a0259..cca4b47 100644 --- a/deluge/plugins/label/label/data/label.js +++ b/deluge/plugins/label/label/data/label.js @@ -78,7 +78,9 @@ Deluge.ux.AddLabelWindow = Ext.extend(Ext.Window, { deluge.client.label.add(label, { success: function() { deluge.ui.update(); - } + this.fireEvent('labeladded', label); + }, + scope: this }); this.hide(); }, @@ -181,7 +183,39 @@ Deluge.plugins.LabelPlugin = Ext.extend(Deluge.Plugin, { onEnable: function() { deluge.sidebar.on('filtercreate', this.onFilterCreate, this); + deluge.sidebar.on('afterfiltercreate', this.onAfterFilterCreate, this); Deluge.FilterPanel.templates.label = '<div class="x-deluge-filter x-deluge-{filter:lowercase}"><tpl if="filter">{filter}</tpl><tpl if="!filter">no label</tpl> ({count})</div>'; + + deluge.menus.torrent.add({ + xtype: 'menuseparator' + }); + + this.torrentMenu = new Ext.menu.Menu({ + items: [{ + text: _('No Label'), + label: '', + handler: this.onTorrentMenuClick, + scope: this + }] + }); + deluge.menus.torrent.add({ + text: _('Label'), + menu: this.torrentMenu + }) + }, + + onAfterFilterCreate: function(sidebar, filter) { + if (filter.filter != 'label') return; + + Ext.each(filter.getStates(), function(state) { + if (!state) return; + this.torrentMenu.addMenuItem({ + text: state, + label: state, + handler: this.onTorrentMenuClick, + scope: this + }); + }, this); }, onFilterCreate: function(sidebar, filter) { @@ -193,10 +227,22 @@ Deluge.plugins.LabelPlugin = Ext.extend(Deluge.Plugin, { }, onLabelAddClick: function() { - if (!this.addWindow) this.addWindow = new Deluge.ux.AddLabelWindow(); + if (!this.addWindow) { + this.addWindow = new Deluge.ux.AddLabelWindow(); + this.addWindow.on('labeladded', this.onLabelAdded, this); + } this.addWindow.show(); }, + onLabelAdded: function(label) { + this.torrentMenu.addMenuItem({ + text: label, + label: label, + handler: this.onTorrentMenuClick, + scope: this + }); + }, + onLabelContextMenu: function(dv, i, node, e) { e.preventDefault(); if (!this.labelMenu) this.createMenu(); @@ -224,11 +270,22 @@ Deluge.plugins.LabelPlugin = Ext.extend(Deluge.Plugin, { }, onLabelRemoveClick: function() { - deluge.client.label.remove(this.filter.getFilter(), { + var state = this.filter.getFilter(); + deluge.client.label.remove(state, { success: function() { deluge.ui.update(); - } + this.torrentMenu.items.each(function(item) { + if (item.text != state) return; + this.torrentMenu.remove(item); + var i = item; + }, this); + }, + scope: this }); + }, + + onTorrentMenuClick: function(item, e) { + alert(item.label); } }); Deluge.registerPlugin('Label', Deluge.plugins.LabelPlugin); diff --git a/deluge/ui/web/js/deluge-all/FilterPanel.js b/deluge/ui/web/js/deluge-all/FilterPanel.js index 09c2153..70e479a 100644 --- a/deluge/ui/web/js/deluge-all/FilterPanel.js +++ b/deluge/ui/web/js/deluge-all/FilterPanel.js @@ -98,6 +98,17 @@ Deluge.FilterPanel = Ext.extend(Ext.Panel, { }, /** + * Return the current states in the filter + */ + getStates: function() { + var states = []; + this.list.getStore().each(function(r) { + states.push(r.get('filter')); + }); + return states; + }, + + /** * Return the Store for the ListView of the FilterPanel * @returns {Ext.data.Store} the ListView store */ @@ -130,7 +141,7 @@ Deluge.FilterPanel = Ext.extend(Ext.Panel, { count: s[1] }); record.id = s[0]; - store.insert(i, [record]); + store.insert(i, record); } record.beginEdit(); record.set('filter', s[0]); diff --git a/deluge/ui/web/js/deluge-all/Sidebar.js b/deluge/ui/web/js/deluge-all/Sidebar.js index ac86fa0..8751491 100644 --- a/deluge/ui/web/js/deluge-all/Sidebar.js +++ b/deluge/ui/web/js/deluge-all/Sidebar.js @@ -77,12 +77,14 @@ Deluge.Sidebar = Ext.extend(Ext.Panel, { panel.on('selectionchange', function(view, nodes) { deluge.ui.update(); }); - panel.updateStates(states); this.add(panel); this.doLayout(); this.panels[filter] = panel; this.fireEvent('filtercreate', this, panel); + + panel.updateStates(states); + this.fireEvent('afterfiltercreate', this, panel); }, getFilters: function() { -- You received this message because you are subscribed to the Google Groups "deluge-commit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/deluge-commit?hl=en.
