widgets: init choice_entry widget

parent 5a0f58be
......@@ -144,7 +144,7 @@ class BaseSetting:
)
def _needs_range_map(self):
return "choice" in self.type or "list_dual" in self.type or self.type == "number"
return self.type in ("choice", "choice_entry", "list_dual", "number")
def _build_map_from_range(self, range_value):
if range_value is None:
......
from gi.repository import Gtk, Adw, Gio, GLib
from .BaseWidget import BaseWidget
class ChoiceEntryWidget(BaseWidget):
def create_row(self):
self.row = Adw.EntryRow(title=self.setting.name)
action_group = Gio.SimpleActionGroup()
select_action = Gio.SimpleAction.new("select", GLib.VariantType.new("s"))
select_action.connect("activate", self._on_menu_item_activated)
action_group.add_action(select_action)
self.menu = Gio.Menu()
self.popover_button = Gtk.MenuButton(
icon_name="pan-down-symbolic",
valign=Gtk.Align.CENTER,
tooltip_text=_("Select from list"),
menu_model=self.menu,
)
self.popover_button.add_css_class("flat")
self.popover_button.insert_action_group("choice", action_group)
if self.setting.default is not None:
self.reset_button = Gtk.Button(
icon_name="edit-undo-symbolic",
valign=Gtk.Align.CENTER,
tooltip_text=_("Restore Default"),
)
self.reset_button.add_css_class("flat")
self.reset_button.connect("clicked", self._on_reset_clicked)
self.row.add_prefix(self.reset_button)
self.row.add_suffix(self.popover_button)
self.row.connect("entry-activated", self._on_entry_activated)
return self.row
def update_display(self):
current_value = self.setting._get_backend_value()
self.row.set_text(str(current_value) if current_value is not None else "")
self._update_reset_visibility()
def on_map_updated(self):
self._rebuild_menu()
self._update_reset_visibility()
def _rebuild_menu(self):
self.menu.remove_all()
if not self.setting.map:
self.popover_button.set_sensitive(False)
return
self.popover_button.set_sensitive(True)
for label, value in self.setting.map.items():
item = Gio.MenuItem.new(str(label), None)
item.set_action_and_target_value(
"choice.select", GLib.Variant.new_string(str(value))
)
self.menu.append_item(item)
def _on_menu_item_activated(self, action, parameter):
value = parameter.get_string()
self.row.set_text(value)
self.setting._set_backend_value(value)
self._update_reset_visibility()
def _on_entry_activated(self, row):
new_value = row.get_text()
self.setting._set_backend_value(new_value)
self._update_reset_visibility()
def _on_reset_clicked(self, button):
default_value = self.setting.default
self.setting._set_backend_value(default_value)
self.row.set_text(str(default_value) if default_value is not None else "")
self._update_reset_visibility()
def _update_reset_visibility(self):
if self.setting.default is None:
return
current_value = self.setting._get_backend_value()
default_value = self.setting.default
self.reset_button.set_sensitive(current_value != default_value)
from .AvatarWidget import AvatarWidget
from .BooleanWidget import BooleanWidget
from .ChoiceWidget import ChoiceWidget
from .ChoiceEntryWidget import ChoiceEntryWidget
from .RadioChoiceWidget import RadioChoiceWidget
from .ThemeChooserWidget import ThemeChooserWidget
from .AccentColorWidget import AccentColorWidget
......@@ -16,6 +17,7 @@ from .InfoGraphMultiWidget import InfoGraphMultiWidget
from .DualListWidget import DualListWidget
from .ImageChooserWidget import ImageChooserWidget
from .DualImageChooserWidget import DualImageChooserWidget
from .FontWidget import FontWidget
import logging
logger = logging.getLogger(f"{__name__}")
......@@ -27,6 +29,7 @@ class WidgetFactory:
'image': ImageChooserWidget,
'image_dual': DualImageChooserWidget,
'choice': ChoiceWidget,
'choice_entry': ChoiceEntryWidget,
'choice_radio': RadioChoiceWidget,
'theme_chooser': ThemeChooserWidget,
'accent_color': AccentColorWidget,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment