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.

Reply via email to