From d6b85870903d00c1f84f8d879b25e9b197b1f0c6 Mon Sep 17 00:00:00 2001 From: wurstsalat Date: Fri, 27 Oct 2023 23:06:39 +0200 Subject: imprv: Settings: Allow to set step size for spin settings; bind setting value --- gajim/gtk/accounts.py | 6 +++--- gajim/gtk/preferences.py | 6 +++--- gajim/gtk/settings.py | 29 +++++++++++++++++++++++++---- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/gajim/gtk/accounts.py b/gajim/gtk/accounts.py index 580044cb7..5adab8813 100644 --- a/gajim/gtk/accounts.py +++ b/gajim/gtk/accounts.py @@ -1071,9 +1071,9 @@ class PriorityDialog(SettingsDialog): neg_priority = app.settings.get('enable_negative_priority') if neg_priority: - range_ = (-128, 127) + range_ = (-128, 127, 1) else: - range_ = (0, 127) + range_ = (0, 127, 1) settings = [ Setting(SettingKind.SWITCH, @@ -1127,7 +1127,7 @@ class CutstomHostnameDialog(SettingsDialog): SettingType.ACCOUNT_CONFIG, 'custom_port', bind='account::use_custom_host', - props={'range_': (0, 65535)}), + props={'range_': (0, 65535, 1)}), Setting(SettingKind.COMBO, _('Type'), diff --git a/gajim/gtk/preferences.py b/gajim/gtk/preferences.py index a7a71abfe..6264ecb56 100644 --- a/gajim/gtk/preferences.py +++ b/gajim/gtk/preferences.py @@ -419,7 +419,7 @@ class FilePreview(PreferenceBox): 'preview_size', desc=_('Size of preview images in pixels'), bind='enable_file_preview', - props={'range_': (100, 1000)}), + props={'range_': (100, 1000, 1)}), Setting(SettingKind.POPOVER, _('File Size Limit'), @@ -589,7 +589,7 @@ class AutoAwayDialog(SettingsDialog): SettingType.CONFIG, 'autoawaytime', desc=_('Minutes until your status gets changed'), - props={'range_': (1, 720)}, + props={'range_': (1, 720, 1)}, bind='autoaway'), Setting(SettingKind.ENTRY, @@ -617,7 +617,7 @@ class AutoExtendedAwayDialog(SettingsDialog): SettingType.CONFIG, 'autoxatime', desc=_('Minutes until your status gets changed'), - props={'range_': (1, 720)}, + props={'range_': (1, 720, 1)}, bind='autoxa'), Setting(SettingKind.ENTRY, diff --git a/gajim/gtk/settings.py b/gajim/gtk/settings.py index 715c8db1c..3dbc7b1a7 100644 --- a/gajim/gtk/settings.py +++ b/gajim/gtk/settings.py @@ -18,6 +18,7 @@ from __future__ import annotations from typing import Any from typing import cast +from typing import get_args import logging from collections.abc import Callable @@ -33,6 +34,7 @@ from gajim.common import passwords from gajim.common.i18n import _ from gajim.common.i18n import p_ from gajim.common.setting_values import AllSettingsT +from gajim.common.setting_values import FloatSettings from gajim.gtk.const import Setting from gajim.gtk.const import SettingKind @@ -562,14 +564,14 @@ class DialogSetting(GenericSetting): class SpinSetting(GenericSetting): - def __init__(self, *args: Any, range_: tuple[float, float]) -> None: + def __init__(self, *args: Any, range_: tuple[float, float, float]) -> None: GenericSetting.__init__(self, *args) - lower, upper = range_ + lower, upper, step = range_ adjustment = Gtk.Adjustment(value=0, lower=lower, upper=upper, - step_increment=1, + step_increment=step, page_increment=10, page_size=0) @@ -579,6 +581,9 @@ class SpinSetting(GenericSetting): self.spin.set_update_policy(Gtk.SpinButtonUpdatePolicy.IF_VALID) assert self.setting_value is not None + if isinstance(self.setting_value, float): + self.spin.set_digits(3) + self.spin.set_value(float(self.setting_value)) self.spin.set_halign(Gtk.Align.FILL) self.spin.set_valign(Gtk.Align.CENTER) @@ -586,13 +591,29 @@ class SpinSetting(GenericSetting): self.setting_box.pack_start(self.spin, True, True, 0) + assert isinstance(self.value, str) + app.settings.connect_signal(self.value, + self._on_setting_changed, + account=self.account, + jid=self.jid) + self.connect('destroy', self._on_destroy) + self.show_all() + def _on_setting_changed(self, value: float, *args: Any) -> None: + self.spin.set_value(value) + + def _on_destroy(self, *args: Any) -> None: + app.settings.disconnect_signals(self) + def on_row_activated(self) -> None: self.spin.grab_focus() def on_value_change(self, spin: Gtk.SpinButton, *args: Any) -> None: - value = spin.get_value_as_int() + if self.value in list(get_args(FloatSettings)): + value = spin.get_value() + else: + value = spin.get_value_as_int() self.set_value(value) -- cgit v1.2.3