Commit f7cdfca4 authored by Roman Alifanov's avatar Roman Alifanov

widgets: use AdwEntryRow for Entry and FileChooser

parent 6881d13f
......@@ -23,6 +23,11 @@ class BaseWidget:
reveal_child=False,
halign=Gtk.Align.END
)
self.reset_revealer.set_visible(False)
self.reset_revealer.connect("notify::reveal-child", self._on_reveal_changed)
def _on_reveal_changed(self, revealer, pspec):
revealer.set_visible(revealer.get_reveal_child())
def update_display(self):
raise NotImplementedError("update_display method should be implemented in the subclass")
......
......@@ -4,33 +4,19 @@ from .BaseWidget import BaseWidget
class EntryWidget(BaseWidget):
def create_row(self):
self.row = Adw.ActionRow(title=self.setting.name)
self.row = Adw.EntryRow(title=self.setting.name)
self.row.add_prefix(self.reset_revealer)
self.row.connect("entry-activated", self._on_text_changed)
self.entry = Gtk.Entry()
self.entry.set_halign(Gtk.Align.CENTER)
self.entry.connect("activate", self._on_text_changed)
control_box = Gtk.Box(
orientation=Gtk.Orientation.HORIZONTAL,
spacing=6,
margin_start=12,
valign=Gtk.Align.CENTER,
halign=Gtk.Align.CENTER,
)
control_box.append(self.reset_revealer)
control_box.append(self.entry)
self.row.add_suffix(control_box)
return self.row
def update_display(self):
current_value = self.setting._get_backend_value()
self.entry.set_text(str(current_value) if current_value is not None else "")
self.row.set_text(str(current_value) if current_value is not None else "")
self._update_reset_visibility()
def _on_text_changed(self, entry):
new_value = entry.get_text()
def _on_text_changed(self, row):
new_value = row.get_text()
self.setting._set_backend_value(new_value)
......@@ -40,11 +26,11 @@ class EntryWidget(BaseWidget):
default_value = self.setting.default
self.setting._set_backend_value(default_value)
self.entry.set_text(str(default_value) if default_value is not None else "")
self.row.set_text(str(default_value) if default_value is not None else "")
self._update_reset_visibility()
def _update_reset_visibility(self):
current_value = self.entry.get_text()
current_value = self.row.get_text()
default_value = str(self.setting.default) if self.setting.default is not None else ""
has_default = self.setting.default is not None
......
......@@ -11,48 +11,35 @@ class FileChooser(BaseWidget):
self.multiple_mode = self.setting.map.get('multiple', False)
self.folder_mode = 'folder' in self.setting.map.get('extensions', [])
row = Adw.ActionRow(
title=self.setting.name,
subtitle=self.setting.help,
subtitle_selectable=True
)
self.row = row
control_box = Gtk.Box(
spacing=6,
margin_end=12,
halign=Gtk.Align.END
self.select_button = Gtk.Button.new_from_icon_name(
icon_name="folder-open-symbolic"
)
control_box.append(self.reset_revealer)
self.select_button.set_valign(Gtk.Align.CENTER)
self.select_button.add_css_class("flat")
self.select_button.connect("clicked", self._on_button_clicked)
if not self.multiple_mode and not self.folder_mode:
self.entry = Gtk.Entry(
placeholder_text="Enter path or click to browse",
hexpand=True,
valign=Gtk.Align.CENTER,
halign=Gtk.Align.END,
)
self.entry_handler_id = self.entry.connect("activate", self._on_entry_changed)
control_box.append(self.entry)
self.row = Adw.EntryRow(title=self.setting.name)
self.row.add_prefix(self.reset_revealer)
self.row.add_suffix(self.select_button)
self.row.connect("entry-activated", self._on_entry_changed)
else:
self.row = Adw.ActionRow(
title=self.setting.name,
subtitle=self.setting.help,
subtitle_selectable=True
)
self.row.set_activatable_widget(self.select_button)
self.info_label = Gtk.Label(
label="No selection" if self.folder_mode else "No files selected",
valign=Gtk.Align.CENTER,
css_classes=["dim-label"]
)
control_box.append(self.info_label)
self.select_button = Gtk.Button.new_from_icon_name(
icon_name="folder-open-symbolic"
)
self.select_button.set_valign(Gtk.Align.CENTER)
row.set_activatable_widget(self.select_button)
self.select_button.connect("clicked", self._on_button_clicked)
control_box.append(self.select_button)
row.add_suffix(control_box)
self.row.add_prefix(self.reset_revealer)
self.row.add_suffix(self.info_label)
self.row.add_suffix(self.select_button)
self.update_display()
......@@ -211,17 +198,15 @@ class FileChooser(BaseWidget):
self.info_label.set_label(f"{count} files selected" if count else "No files selected")
def _update_single_file_display(self, current):
with self.entry.handler_block(self.entry_handler_id):
self.entry.set_text(current or "")
if current:
file = Gio.File.new_for_path(current)
self.entry.set_tooltip_text(file.get_parse_name())
else:
self.entry.set_tooltip_text(None)
self.row.set_text(current or "")
if current:
file = Gio.File.new_for_path(current)
self.row.set_tooltip_text(file.get_parse_name())
else:
self.row.set_tooltip_text(None)
def _on_entry_changed(self, entry):
if not self.folder_mode and not self.multiple_mode:
path = entry.get_text().strip()
self.setting._set_backend_value(path)
def _on_entry_changed(self, row):
path = row.get_text().strip()
self.setting._set_backend_value(path)
self._update_reset_visibility()
self._update_reset_visibility()
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