diff --git a/deluge/ui/web/js/deluge-all/ConnectionManager.js b/deluge/ui/web/js/deluge-all/ConnectionManager.js
index 7df7f6ac2..d02ee9d4d 100644
--- a/deluge/ui/web/js/deluge-all/ConnectionManager.js
+++ b/deluge/ui/web/js/deluge-all/ConnectionManager.js
@@ -52,76 +52,60 @@ Ext.define('Deluge.ConnectionManager', {
deluge.events.on('login', this.onLogin, this);
deluge.events.on('logout', this.onLogout, this);
- //this.addButton(_('Close'), this.onClose, this);
- //this.addButton(_('Connect'), this.onConnect, this);
+ this.addDocked({
+ xtype: 'toolbar',
+ dock: 'bottom',
+ defaultType: 'button',
+ items: [
+ '->',
+ {text: _('Close'), handler: this.onClose, scope: this},
+ {text: _('Connect'), handler: this.onConnect, scope: this}
+ ]
+ });
- this.list = new Ext.list.ListView({
- store: new Ext.data.ArrayStore({
- fields: [
- {name: 'status', mapping: 3},
- {name: 'host', mapping: 1},
- {name: 'port', mapping: 2},
- {name: 'version', mapping: 4}
- ],
- id: 0
+ this.grid = this.add({
+ xtype: 'grid',
+ autoScroll: true,
+ store: new Ext.data.Store({
+ model: 'Deluge.data.Host',
+ proxy: {
+ type: 'memory',
+ reader: {
+ type: 'json',
+ root: 'hosts'
+ }
+ }
}),
columns: [{
header: _('Status'),
- width: .24,
+ width: 70,
sortable: true,
dataIndex: 'status'
}, {
- id:'host',
+ xtype: 'templatecolumn',
+ flex: 1,
header: _('Host'),
- width: .51,
sortable: true,
- tpl: '{host}:{port}',
- dataIndex: 'host'
+ tpl: '{host}:{port}'
}, {
+ xtype: 'templatecolumn',
header: _('Version'),
- width: .25,
+ width: 70,
sortable: true,
- tpl: '{version}',
- dataIndex: 'version'
+ tpl: '{version}'
}],
singleSelect: true,
listeners: {
'selectionchange': {fn: this.onSelectionChanged, scope: this}
- }
+ },
+ bbar: [
+ {xtype: 'button', text: _('Add'), iconCls: 'icon-add', handler: this.onAddClick, scope: this},
+ {xtype: 'button', text: _('Remove'), iconCls: 'icon-remove', handler: this.onRemoveClick, scope: this},
+ '->',
+ {xtype: 'button', text: _('Stop Daemon'), iconCls: 'icon-error', handler: this.onStopClick, scope: this}
+ ]
});
- this.panel = this.add({
- autoScroll: true,
- items: [this.list],
- bbar: new Ext.Toolbar({
- buttons: [
- {
- id: 'cm-add',
- cls: 'x-btn-text-icon',
- text: _('Add'),
- iconCls: 'icon-add',
- handler: this.onAddClick,
- scope: this
- }, {
- id: 'cm-remove',
- cls: 'x-btn-text-icon',
- text: _('Remove'),
- iconCls: 'icon-remove',
- handler: this.onRemoveClick,
- disabled: true,
- scope: this
- }, '->', {
- id: 'cm-stop',
- cls: 'x-btn-text-icon',
- text: _('Stop Daemon'),
- iconCls: 'icon-error',
- handler: this.onStopClick,
- disabled: true,
- scope: this
- }
- ]
- })
- });
this.update = this.update.bind(this);
},
@@ -158,7 +142,7 @@ Ext.define('Deluge.ConnectionManager', {
},
update: function() {
- this.list.getStore().each(function(r) {
+ this.grid.getStore().each(function(r) {
deluge.client.web.get_host_status(r.id, {
success: this.onGetHostStatus,
scope: this
@@ -220,7 +204,7 @@ Ext.define('Deluge.ConnectionManager', {
// private
onConnect: function(e) {
- var selected = this.list.getSelectedRecords()[0];
+ var selected = this.grid.getSelectedRecords()[0];
if (!selected) return;
if (selected.get('status') == _('Connected')) {
@@ -247,7 +231,7 @@ Ext.define('Deluge.ConnectionManager', {
// private
onGetHosts: function(hosts) {
- this.list.getStore().loadData(hosts);
+ this.grid.getStore().loadData(hosts);
Ext.each(hosts, function(host) {
deluge.client.web.get_host_status(host[0], {
success: this.onGetHostStatus,
@@ -258,11 +242,11 @@ Ext.define('Deluge.ConnectionManager', {
// private
onGetHostStatus: function(host) {
- var record = this.list.getStore().getById(host[0]);
+ var record = this.grid.getStore().getById(host[0]);
record.set('status', host[3])
record.set('version', host[4])
record.commit();
- if (this.list.getSelectedRecords()[0] == record) this.updateButtons(record);
+ if (this.grid.getSelectedRecords()[0] == record) this.updateButtons(record);
},
// private
@@ -299,7 +283,7 @@ Ext.define('Deluge.ConnectionManager', {
// private
onRemoveClick: function(button) {
- var connection = this.list.getSelectedRecords()[0];
+ var connection = this.grid.getSelectedRecords()[0];
if (!connection) return;
deluge.client.web.remove_host(connection.id, {
@@ -314,7 +298,7 @@ Ext.define('Deluge.ConnectionManager', {
iconCls: 'x-deluge-icon-error'
});
} else {
- this.list.getStore().remove(connection);
+ this.grid.getStore().remove(connection);
}
},
scope: this
@@ -327,7 +311,7 @@ Ext.define('Deluge.ConnectionManager', {
this.removeHostButton.enable();
this.stopHostButton.enable();
this.stopHostButton.setText(_('Stop Daemon'));
- this.updateButtons(this.list.getRecord(selections[0]));
+ this.updateButtons(this.grid.getRecord(selections[0]));
} else {
this.removeHostButton.disable();
this.stopHostButton.disable();
@@ -338,7 +322,7 @@ Ext.define('Deluge.ConnectionManager', {
// private
onShow: function() {
if (!this.addHostButton) {
- var bbar = this.panel.getDockedItems()[0];
+ var bbar = this.grid.getDockedItems()[0];
this.addHostButton = bbar.items.get('cm-add');
this.removeHostButton = bbar.items.get('cm-remove');
this.stopHostButton = bbar.items.get('cm-stop');
@@ -350,7 +334,7 @@ Ext.define('Deluge.ConnectionManager', {
// private
onStopClick: function(button, e) {
- var connection = this.list.getSelectedRecords()[0];
+ var connection = this.grid.getSelectedRecords()[0];
if (!connection) return;
if (connection.get('status') == 'Offline') {
diff --git a/deluge/ui/web/js/deluge-all/data/HostRecord.js b/deluge/ui/web/js/deluge-all/data/HostRecord.js
new file mode 100644
index 000000000..b49215ca8
--- /dev/null
+++ b/deluge/ui/web/js/deluge-all/data/HostRecord.js
@@ -0,0 +1,53 @@
+/*!
+ * Deluge.data.Host.js
+ *
+ * Copyright (c) Damien Churchill 2011
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the OpenSSL
+ * library.
+ * You must obey the GNU General Public License in all respects for all of
+ * the code used other than OpenSSL. If you modify file(s) with this
+ * exception, you may extend this exception to your version of the file(s),
+ * but you are not obligated to do so. If you do not wish to do so, delete
+ * this exception statement from your version. If you delete this exception
+ * statement from all source files in the program, then also delete it here.
+ */
+
+/**
+ * Deluge.data.Host
+ *
+ * @author Damien Churchill
+ * @version 1.4
+ *
+ * @class Deluge.data.Host
+ * @extends Ext.data.Model
+ * @constructor
+ * @param {Object} data The peer data
+ */
+Ext.define('Deluge.data.Host', {
+ extend: 'Ext.data.Model',
+ fields: [
+ {name: 'id', type: 'string'},
+ {name: 'host', type: 'string'},
+ {name: 'port', type: 'int'},
+ {name: 'status', type: 'string'},
+ {name: 'version', type: 'string'}
+ ]
+});