Skip to content

Commit 1699f3b

Browse files
committed
settings: refactor plugin settings items into classes
1 parent b267c26 commit 1699f3b

File tree

1 file changed

+52
-43
lines changed

1 file changed

+52
-43
lines changed

safeeyes/ui/settings_dialog.py

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,49 @@ def on_properties_clicked(self, button):
445445
self.on_properties()
446446

447447

448+
class IntItem:
449+
def __init__(self, name, value, min_value, max_value):
450+
super().__init__()
451+
452+
builder = utility.create_gtk_builder(SETTINGS_ITEM_INT_GLADE)
453+
builder.get_object("lbl_name").set_label(_(name))
454+
self.spin_value = builder.get_object("spin_value")
455+
self.spin_value.set_range(min_value, max_value)
456+
self.spin_value.set_value(value)
457+
self.box = builder.get_object("box")
458+
459+
def get_value(self):
460+
return self.spin_value.get_value()
461+
462+
463+
class TextItem:
464+
def __init__(self, name, value):
465+
super().__init__()
466+
467+
builder = utility.create_gtk_builder(SETTINGS_ITEM_TEXT_GLADE)
468+
builder.get_object("lbl_name").set_label(_(name))
469+
self.txt_value = builder.get_object("txt_value")
470+
self.txt_value.set_text(value)
471+
self.box = builder.get_object("box")
472+
473+
def get_value(self):
474+
return self.txt_value.get_text()
475+
476+
477+
class BoolItem:
478+
def __init__(self, name, value):
479+
super().__init__()
480+
481+
builder = utility.create_gtk_builder(SETTINGS_ITEM_BOOL_GLADE)
482+
builder.get_object("lbl_name").set_label(_(name))
483+
self.switch_value = builder.get_object("switch_value")
484+
self.switch_value.set_active(value)
485+
self.box = builder.get_object("box")
486+
487+
def get_value(self):
488+
return self.switch_value.get_active()
489+
490+
448491
class PluginSettingsDialog:
449492
"""Builds a settings dialog based on the configuration of a plugin."""
450493

@@ -459,67 +502,33 @@ def __init__(self, parent, config):
459502
self.window.set_title(_("Plugin Settings"))
460503
for setting in config.get("settings"):
461504
if setting["type"].upper() == "INT":
462-
box = self.__load_int_item(
505+
box = IntItem(
463506
setting["label"],
464-
setting["id"],
465-
config["active_plugin_config"],
507+
config["active_plugin_config"][setting["id"]],
466508
setting.get("min", 0),
467509
setting.get("max", 120),
468510
)
469511
elif setting["type"].upper() == "TEXT":
470-
box = self.__load_text_item(
471-
setting["label"], setting["id"], config["active_plugin_config"]
512+
box = TextItem(
513+
setting["label"], config["active_plugin_config"][setting["id"]]
472514
)
473515
elif setting["type"].upper() == "BOOL":
474-
box = self.__load_bool_item(
475-
setting["label"], setting["id"], config["active_plugin_config"]
516+
box = BoolItem(
517+
setting["label"], config["active_plugin_config"][setting["id"]]
476518
)
477519
else:
478520
continue
479521

480-
box_settings.append(box)
522+
self.property_controls.append({"key": setting["id"], "box": box})
523+
box_settings.append(box.box)
481524

482525
self.window.connect("close-request", self.on_window_delete)
483526

484-
def __load_int_item(self, name, key, settings, min_value, max_value):
485-
"""Load the UI control for int property."""
486-
builder = utility.create_gtk_builder(SETTINGS_ITEM_INT_GLADE)
487-
builder.get_object("lbl_name").set_label(_(name))
488-
spin_value = builder.get_object("spin_value")
489-
spin_value.set_range(min_value, max_value)
490-
spin_value.set_value(settings[key])
491-
box = builder.get_object("box")
492-
box.set_visible(True)
493-
self.property_controls.append({"key": key, "value": spin_value.get_value})
494-
return box
495-
496-
def __load_text_item(self, name, key, settings):
497-
"""Load the UI control for text property."""
498-
builder = utility.create_gtk_builder(SETTINGS_ITEM_TEXT_GLADE)
499-
builder.get_object("lbl_name").set_label(_(name))
500-
txt_value = builder.get_object("txt_value")
501-
txt_value.set_text(settings[key])
502-
box = builder.get_object("box")
503-
box.set_visible(True)
504-
self.property_controls.append({"key": key, "value": txt_value.get_text})
505-
return box
506-
507-
def __load_bool_item(self, name, key, settings):
508-
"""Load the UI control for boolean property."""
509-
builder = utility.create_gtk_builder(SETTINGS_ITEM_BOOL_GLADE)
510-
builder.get_object("lbl_name").set_label(_(name))
511-
switch_value = builder.get_object("switch_value")
512-
switch_value.set_active(settings[key])
513-
box = builder.get_object("box")
514-
box.set_visible(True)
515-
self.property_controls.append({"key": key, "value": switch_value.get_active})
516-
return box
517-
518527
def on_window_delete(self, *args):
519528
"""Event handler for Properties dialog close action."""
520529
for property_control in self.property_controls:
521530
self.config["active_plugin_config"][property_control["key"]] = (
522-
property_control["value"]()
531+
property_control["box"].get_value()
523532
)
524533
self.window.destroy()
525534

0 commit comments

Comments
 (0)