From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- deluge/ui/web/js/deluge-all/StatusbarMenu.js | 79 ++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 deluge/ui/web/js/deluge-all/StatusbarMenu.js (limited to 'deluge/ui/web/js/deluge-all/StatusbarMenu.js') diff --git a/deluge/ui/web/js/deluge-all/StatusbarMenu.js b/deluge/ui/web/js/deluge-all/StatusbarMenu.js new file mode 100644 index 0000000..1365c9c --- /dev/null +++ b/deluge/ui/web/js/deluge-all/StatusbarMenu.js @@ -0,0 +1,79 @@ +/** + * Deluge.StatusbarMenu.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with + * the additional special exception to link portions of this program with the OpenSSL library. + * See LICENSE for more details. + */ +Ext.ns('Deluge'); + +/** + * Menu that handles setting the statusbar limits correctly. + * @class Deluge.StatusbarMenu + * @extends Ext.menu.Menu + */ +Deluge.StatusbarMenu = Ext.extend(Ext.menu.Menu, { + initComponent: function () { + Deluge.StatusbarMenu.superclass.initComponent.call(this); + this.otherWin = new Deluge.OtherLimitWindow( + this.initialConfig.otherWin || {} + ); + + this.items.each(function (item) { + if (item.getXType() != 'menucheckitem') return; + if (item.value == 'other') { + item.on('click', this.onOtherClicked, this); + } else { + item.on('checkchange', this.onLimitChanged, this); + } + }, this); + }, + + setValue: function (value) { + var beenSet = false; + // set the new value + this.value = value = value == 0 ? -1 : value; + + var other = null; + // uncheck all items + this.items.each(function (item) { + if (item.setChecked) { + item.suspendEvents(); + if (item.value == value) { + item.setChecked(true); + beenSet = true; + } else { + item.setChecked(false); + } + item.resumeEvents(); + } + + if (item.value == 'other') other = item; + }); + + if (beenSet) return; + + other.suspendEvents(); + other.setChecked(true); + other.resumeEvents(); + }, + + onLimitChanged: function (item, checked) { + if (!checked || item.value == 'other') return; // We do not care about unchecked or other. + var config = {}; + config[item.group] = item.value; + deluge.client.core.set_config(config, { + success: function () { + deluge.ui.update(); + }, + }); + }, + + onOtherClicked: function (item, e) { + this.otherWin.group = item.group; + this.otherWin.setValue(this.value); + this.otherWin.show(); + }, +}); -- cgit v1.2.3