widgets: init font widget

parent 31139b63
from gi.repository import Gtk, Adw, Pango
from .BaseWidget import BaseWidget
class FontWidget(BaseWidget):
def create_row(self):
self.row = Adw.ActionRow(title=self.setting.name)
self.row.add_css_class("property")
self.font_dialog = Gtk.FontDialog()
self.font_desc = None
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)
arrow_icon = Gtk.Image(
icon_name="go-next-symbolic",
valign=Gtk.Align.CENTER
)
self.row.add_suffix(arrow_icon)
self.row.set_activatable(True)
self.row.connect("activated", self._on_row_activated)
return self.row
def update_display(self):
current_value = self.setting._get_backend_value()
if current_value:
self.font_desc = Pango.FontDescription.from_string(current_value)
else:
self.font_desc = None
self._update_subtitle()
self._update_reset_visibility()
def _update_subtitle(self):
if not self.font_desc:
self.row.set_subtitle(_("None"))
return
self.row.set_subtitle(self.font_desc.to_string())
def _on_row_activated(self, row):
self.font_dialog.choose_font(
row.get_root(), self.font_desc, None, self._on_font_selected
)
def _on_font_selected(self, dialog, result):
try:
font_desc = dialog.choose_font_finish(result)
if font_desc:
self.setting._set_backend_value(font_desc.to_string())
self.font_desc = font_desc.copy()
self._update_subtitle()
self._update_reset_visibility()
except Exception as e:
self.logger.debug(f"Font selection cancelled: {e}")
def _on_reset_clicked(self, button):
default_value = self.setting.default
if default_value is not None:
self.setting._set_backend_value(default_value)
self.update_display()
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)
...@@ -43,6 +43,7 @@ class WidgetFactory: ...@@ -43,6 +43,7 @@ class WidgetFactory:
'info_graph_large': InfoGraphLargeWidget, 'info_graph_large': InfoGraphLargeWidget,
'info_graph_multi': InfoGraphMultiWidget, 'info_graph_multi': InfoGraphMultiWidget,
'list_dual': DualListWidget, 'list_dual': DualListWidget,
'font': FontWidget,
} }
@staticmethod @staticmethod
......
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