widgets: init choice_entry widget

parent 5a0f58be
...@@ -144,7 +144,7 @@ class BaseSetting: ...@@ -144,7 +144,7 @@ class BaseSetting:
) )
def _needs_range_map(self): 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): def _build_map_from_range(self, range_value):
if range_value is None: 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 .AvatarWidget import AvatarWidget
from .BooleanWidget import BooleanWidget from .BooleanWidget import BooleanWidget
from .ChoiceWidget import ChoiceWidget from .ChoiceWidget import ChoiceWidget
from .ChoiceEntryWidget import ChoiceEntryWidget
from .RadioChoiceWidget import RadioChoiceWidget from .RadioChoiceWidget import RadioChoiceWidget
from .ThemeChooserWidget import ThemeChooserWidget from .ThemeChooserWidget import ThemeChooserWidget
from .AccentColorWidget import AccentColorWidget from .AccentColorWidget import AccentColorWidget
...@@ -16,6 +17,7 @@ from .InfoGraphMultiWidget import InfoGraphMultiWidget ...@@ -16,6 +17,7 @@ from .InfoGraphMultiWidget import InfoGraphMultiWidget
from .DualListWidget import DualListWidget from .DualListWidget import DualListWidget
from .ImageChooserWidget import ImageChooserWidget from .ImageChooserWidget import ImageChooserWidget
from .DualImageChooserWidget import DualImageChooserWidget from .DualImageChooserWidget import DualImageChooserWidget
from .FontWidget import FontWidget
import logging import logging
logger = logging.getLogger(f"{__name__}") logger = logging.getLogger(f"{__name__}")
...@@ -27,6 +29,7 @@ class WidgetFactory: ...@@ -27,6 +29,7 @@ class WidgetFactory:
'image': ImageChooserWidget, 'image': ImageChooserWidget,
'image_dual': DualImageChooserWidget, 'image_dual': DualImageChooserWidget,
'choice': ChoiceWidget, 'choice': ChoiceWidget,
'choice_entry': ChoiceEntryWidget,
'choice_radio': RadioChoiceWidget, 'choice_radio': RadioChoiceWidget,
'theme_chooser': ThemeChooserWidget, 'theme_chooser': ThemeChooserWidget,
'accent_color': AccentColorWidget, '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