diff --git a/deluge/ui/web/css/deluge.css b/deluge/ui/web/css/deluge.css
index e23d3756b..f4a0b1092 100644
--- a/deluge/ui/web/css/deluge.css
+++ b/deluge/ui/web/css/deluge.css
@@ -154,6 +154,7 @@ input {
height: 16px;
line-height: 16px;
padding: 2px;
+ cursor: pointer;
}
.x-deluge-filters .x-deluge-filter {
diff --git a/deluge/ui/web/js/deluge-bars.js b/deluge/ui/web/js/deluge-bars.js
index 5393cd676..98c8ecd14 100644
--- a/deluge/ui/web/js/deluge-bars.js
+++ b/deluge/ui/web/js/deluge-bars.js
@@ -335,6 +335,7 @@ Deluge.SideBar = {
onRender: function(bar) {
this.Bar = bar;
Deluge.Events.on("disconnect", this.onDisconnect);
+ this.selected = null;
},
onDisconnect: function() {
@@ -354,8 +355,26 @@ Deluge.SideBar = {
return String.format('
{0} ({1})
', value, r.data['count'], lname, image);
},
+ getFilters: function() {
+ var filters = {}
+ if (!this.selected) {
+ return filters;
+ }
+ if (!this.selected.filter || !this.selected.panel) {
+ return filters;
+ }
+ var filterType = this.selected.panel.store.id;
+ if (filterType == "state" && this.selected.filter == "All") {
+ return filters;
+ }
+
+ filters[filterType] = this.selected.filter;
+ return filters;
+ },
+
update: function(filters) {
- $each(filters, function(states, filter) {
+ filters = new Hash(filters);
+ filters.each(function(states, filter) {
if (this.panels.has(filter)) {
this.updateFilter(filter, states);
} else {
@@ -365,7 +384,7 @@ Deluge.SideBar = {
// Perform a cleanup of fitlers that aren't enabled
$each(this.panels.getKeys(), function(filter) {
- if (!fitlers.has(filter)) {
+ if (!filters.has(filter)) {
// We need to remove the panel
}
});
@@ -398,6 +417,12 @@ Deluge.SideBar = {
{id: 'filter', sortable: false, renderer: this.renderer, dataIndex: 'filter'}
],
stripeRows: false,
+ selModel: new Ext.grid.RowSelectionModel({
+ singleSelect: true,
+ listeners: {
+ 'rowselect': this.onSelect.bindWithEvent(this)
+ }
+ }),
hideHeaders: true,
autoExpandColumn: 'filter',
deferredRender: false,
@@ -408,11 +433,36 @@ Deluge.SideBar = {
this.Bar.add(panel);
this.Bar.doLayout();
+ if (!this.selected) {
+ panel.getSelectionModel().selectFirstRow();
+ this.selected = {
+ row: 0,
+ filter: states[0][0],
+ panel: panel
+ }
+ }
+
this.panels[filter] = panel;
},
+ onSelect: function(selModel, rowIndex, record) {
+ if (!this.selected) needsUpdate = true;
+ else if (this.selected.row != rowIndex) needsUpdate = true;
+ else needsUpdate = false;
+ this.selected = {
+ row: rowIndex,
+ filter: record.get('filter'),
+ panel: this.panels[record.store.id]
+ }
+
+ if (needsUpdate) Deluge.Ui.update();
+ },
+
updateFilter: function(filter, states) {
this.panels[filter].store.loadData(states);
+ if (this.selected && this.selected.panel == this.panels[filter]) {
+ this.panels[filter].getSelectionModel().selectRow(this.selected.row);
+ }
}
};
diff --git a/deluge/ui/web/js/deluge-ui.js b/deluge/ui/web/js/deluge-ui.js
index e7798d824..9a04a8acd 100644
--- a/deluge/ui/web/js/deluge-ui.js
+++ b/deluge/ui/web/js/deluge-ui.js
@@ -52,7 +52,8 @@ Deluge.Ui = {
},
update: function() {
- Deluge.Client.web.update_ui(Deluge.Keys.Grid, {}, {
+ var filters = Deluge.SideBar.getFilters();
+ Deluge.Client.web.update_ui(Deluge.Keys.Grid, filters, {
onSuccess: this.onUpdate.bindWithEvent(this),
onFailure: this.onUpdateError.bindWithEvent(this)
});