summaryrefslogtreecommitdiff
path: root/lib/gui/edit_json/settings_panel.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gui/edit_json/settings_panel.py')
-rw-r--r--lib/gui/edit_json/settings_panel.py276
1 files changed, 276 insertions, 0 deletions
diff --git a/lib/gui/edit_json/settings_panel.py b/lib/gui/edit_json/settings_panel.py
new file mode 100644
index 00000000..d600153b
--- /dev/null
+++ b/lib/gui/edit_json/settings_panel.py
@@ -0,0 +1,276 @@
+# Authors: see git history
+#
+# Copyright (c) 2024 Authors
+# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+
+import wx
+
+from ...i18n import _
+from ...lettering.categories import FONT_CATEGORIES
+from .editable_list import EditableListCtrl
+
+
+class SettingsPanel(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent()
+ wx.Panel.__init__(self, parent)
+ # settings
+ settings_sizer = wx.BoxSizer(wx.VERTICAL)
+
+ self.font_chooser = wx.adv.BitmapComboBox(self, wx.ID_ANY, style=wx.CB_READONLY | wx.CB_SORT, size=(600, 40))
+ self.font_chooser.Bind(wx.EVT_COMBOBOX, self.parent.on_font_changed)
+
+ text_before_label = wx.StaticText(self, label=_("Text before"))
+ text_before = wx.TextCtrl(self)
+ text_before.Bind(wx.EVT_TEXT, self.parent.on_text_before_changed)
+ text_after_label = wx.StaticText(self, label=_("Text after"))
+ text_after = wx.TextCtrl(self)
+ text_after.Bind(wx.EVT_TEXT, self.parent.on_text_after_changed)
+ grid_text_sizer = wx.FlexGridSizer(2, 2, 10, 10)
+ grid_text_sizer.AddGrowableCol(1)
+ grid_text_sizer.AddMany([
+ (text_before_label, 1, wx.ALL, 0),
+ (text_before, 1, wx.EXPAND, 0),
+ (text_after_label, 1, wx.ALL, 0),
+ (text_after, 1, wx.EXPAND, 0)
+ ])
+
+ notebook_sizer = wx.BoxSizer(wx.VERTICAL)
+ self.notebook = wx.Notebook(self, wx.ID_ANY)
+ notebook_sizer.Add(self.notebook, 1, wx.EXPAND, 0)
+ self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.parent.update_preview)
+
+ self.font_info = FontInfo(self.notebook)
+ self.notebook.AddPage(self.font_info, _("Font Info"))
+
+ self.font_settings = FontSettings(self.notebook)
+ self.notebook.AddPage(self.font_settings, _("Font Settings"))
+
+ self.font_kerning = GeneralKerning(self.notebook)
+ self.notebook.AddPage(self.font_kerning, _("General Kerning"))
+
+ glyph_list = KerningPairs(self.notebook)
+ self.notebook.AddPage(glyph_list, _("Horizontal advance"))
+ self.glyph_list = glyph_list.kerning_list
+
+ kerning_pairs = KerningPairs(self.notebook)
+ self.notebook.AddPage(kerning_pairs, _("Kerning pairs"))
+ self.kerning_list = kerning_pairs.kerning_list
+
+ apply_sizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.cancel_button = wx.Button(self, label=_("Cancel"))
+ self.cancel_button.Bind(wx.EVT_BUTTON, self.parent.cancel)
+ self.apply_button = wx.Button(self, label=_("Apply"))
+ self.apply_button.Bind(wx.EVT_BUTTON, self.parent.apply)
+ apply_sizer.Add(self.cancel_button, 0, wx.RIGHT | wx.BOTTOM, 5)
+ apply_sizer.Add(self.apply_button, 0, wx.RIGHT | wx.BOTTOM, 10)
+
+ settings_sizer.Add(self.font_chooser, 0, wx.ALL | wx.EXPAND, 10)
+ settings_sizer.Add(grid_text_sizer, 0, wx.ALL | wx.EXPAND, 10)
+ settings_sizer.Add(notebook_sizer, 2, wx.ALL | wx.EXPAND, 10)
+ settings_sizer.Add(apply_sizer, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
+
+ self.SetSizer(settings_sizer)
+
+
+class FontInfo(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent().parent
+ wx.Panel.__init__(self, parent)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ grid_sizer = wx.FlexGridSizer(20, 2, 10, 10)
+ grid_sizer.AddGrowableCol(1)
+
+ name_label = wx.StaticText(self, label=_("Name"))
+ self.name = wx.TextCtrl(self)
+ self.name.Bind(
+ wx.EVT_TEXT,
+ lambda event: self.parent.on_font_meta_value_changed("name", False, event)
+ )
+
+ description_label = wx.StaticText(self, label=_("Description"))
+ self.description = wx.TextCtrl(self, size=wx.Size(10, 100), style=wx.TE_MULTILINE)
+ self.description.Bind(
+ wx.EVT_TEXT,
+ lambda event: self.parent.on_font_meta_value_changed("description", False, event)
+ )
+
+ keywords_label = wx.StaticText(self, label=_("Keywords"))
+ self.keywords = wx.ListBox(
+ self,
+ size=wx.Size(10, 400),
+ choices=[cat.name for cat in FONT_CATEGORIES],
+ style=wx.CB_SORT | wx.LB_EXTENDED
+ )
+ self.keywords.Bind(wx.EVT_LISTBOX, self.parent.on_keyword_changed)
+
+ grid_sizer.AddMany([
+ (name_label, 0, wx.ALL, 0),
+ (self.name, 0, wx.ALL | wx.EXPAND, 0),
+ (description_label, 0, wx.ALL, 0),
+ (self.description, 1, wx.ALL | wx.EXPAND, 0),
+ (keywords_label, 0, wx.ALL, 0),
+ (self.keywords, 1, wx.ALL | wx.EXPAND, 0)
+ ])
+
+ sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 10)
+ self.SetSizer(sizer)
+
+
+class FontSettings(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent().parent
+ wx.Panel.__init__(self, parent)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ grid_sizer = wx.FlexGridSizer(20, 2, 10, 10)
+ grid_sizer.AddGrowableCol(1)
+
+ default_glyph_label = wx.StaticText(self, label=_("Default glyph"))
+ self.default_glyph = wx.TextCtrl(self)
+ self.default_glyph.Bind(
+ wx.EVT_TEXT,
+ lambda event: self.parent.on_font_meta_value_changed("default_glyph", True, event)
+ )
+
+ auto_satin_label = wx.StaticText(self, label=_("AutoSatin"))
+ self.auto_satin = wx.CheckBox(self)
+ self.auto_satin.Bind(
+ wx.EVT_CHECKBOX,
+ lambda event: self.parent.on_font_meta_value_changed("auto_satin", False, event)
+ )
+
+ letter_case_label = wx.StaticText(self, label=_("Letter case"))
+ self.letter_case = wx.Choice(self, choices=[_("None"), _("Upper"), _("Lower")])
+ self.letter_case.Bind(wx.EVT_CHOICE, self.parent.on_letter_case_change)
+
+ reversible_label = wx.StaticText(self, label=_("Reversible"))
+ self.reversible = wx.CheckBox(self)
+ self.reversible.Bind(
+ wx.EVT_CHECKBOX,
+ lambda event: self.parent.on_font_meta_value_changed("reversible", False, event)
+ )
+
+ sortable_label = wx.StaticText(self, label=_("Sortable"))
+ self.sortable = wx.CheckBox(self)
+ self.sortable.Bind(
+ wx.EVT_CHECKBOX,
+ lambda event: self.parent.on_font_meta_value_changed("sortable", False, event)
+ )
+
+ combine_indices_label = wx.StaticText(self, label=_("Combine Indices"))
+ self.combine_at_sort_indices = wx.TextCtrl(self)
+ self.combine_at_sort_indices.Bind(wx.EVT_TEXT, self.parent.on_combine_indices_changed)
+
+ grid_sizer.AddMany([
+ (default_glyph_label, 0, wx.ALL, 0),
+ (self.default_glyph, 1, wx.ALL | wx.EXPAND, 0),
+ (auto_satin_label, 0, wx.ALL, 0),
+ (self.auto_satin, 1, wx.ALL | wx.EXPAND, 0),
+ (letter_case_label, 0, wx.ALL, 0),
+ (self.letter_case, 1, wx.ALL | wx.EXPAND, 0),
+ (reversible_label, 0, wx.ALL, 0),
+ (self.reversible, 1, wx.ALL | wx.EXPAND, 0),
+ (sortable_label, 0, wx.ALL, 0),
+ (self.sortable, 1, wx.ALL | wx.EXPAND, 0),
+ (combine_indices_label, 0, wx.ALL, 0),
+ (self.combine_at_sort_indices, 1, wx.ALL | wx.EXPAND, 0)
+ ])
+ sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 10)
+ self.SetSizer(sizer)
+
+
+class GeneralKerning(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent().parent
+ wx.Panel.__init__(self, parent)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ grid_sizer = wx.FlexGridSizer(20, 2, 10, 10)
+ grid_sizer.AddGrowableCol(1)
+
+ size_label = wx.StaticText(self, label=_("Size"))
+ self.size = wx.SpinCtrlDouble(self, min=0, max=10000, inc=0.1, initial=50, style=wx.SP_WRAP)
+ self.size.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("size", True, event)
+ )
+ min_scale_label = wx.StaticText(self, label=_("Min Scale"))
+ self.min_scale = wx.SpinCtrlDouble(self, min=0, max=100, inc=0.1, initial=1, style=wx.SP_WRAP)
+ self.min_scale.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("min_scale", True, event)
+ )
+ max_scale_label = wx.StaticText(self, label=_("Max Scale"))
+ self.max_scale = wx.SpinCtrlDouble(self, min=0, max=100, inc=0.1, initial=1, style=wx.SP_WRAP)
+ self.max_scale.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("max_scale", True, event)
+ )
+ leading_label = wx.StaticText(self, label=_("Leading"))
+ self.leading = wx.SpinCtrlDouble(self, min=0, max=10000, inc=1, initial=0, style=wx.SP_WRAP)
+ self.leading.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("leading", False, event)
+ )
+ horiz_adv_x_default_label = wx.StaticText(self, label=_("Horizontal advance x"))
+ self.horiz_adv_x_default = wx.SpinCtrlDouble(self, min=0, max=10000, inc=0.1, initial=50, style=wx.SP_WRAP)
+ self.horiz_adv_x_default.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("horiz_adv_x_default", True, event)
+ )
+ horiz_adv_x_space_label = wx.StaticText(self, label=_("Horizontal advance x space"))
+ self.horiz_adv_x_space = wx.SpinCtrlDouble(self, min=0, max=10000, inc=0.1, initial=50, style=wx.SP_WRAP)
+ self.horiz_adv_x_space.Bind(
+ wx.EVT_SPINCTRLDOUBLE,
+ lambda event: self.parent.on_font_meta_value_changed("horiz_adv_x_space", True, event)
+ )
+
+ grid_sizer.AddMany([
+ (size_label, 0, wx.ALL, 0),
+ (self.size, 1, wx.ALL | wx.EXPAND, 0),
+ (min_scale_label, 0, wx.ALL, 0),
+ (self.min_scale, 1, wx.ALL | wx.EXPAND, 0),
+ (max_scale_label, 0, wx.ALL, 0),
+ (self.max_scale, 1, wx.ALL | wx.EXPAND, 0),
+ (leading_label, 0, wx.ALL, 0),
+ (self.leading, 1, wx.ALL | wx.EXPAND, 0),
+ (horiz_adv_x_default_label, 0, wx.ALL, 0),
+ (self.horiz_adv_x_default, 1, wx.ALL | wx.EXPAND, 0),
+ (horiz_adv_x_space_label, 0, wx.ALL, 0),
+ (self.horiz_adv_x_space, 1, wx.ALL | wx.EXPAND, 0)
+ ])
+
+ sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 10)
+ self.SetSizer(sizer)
+
+
+class GlyphList(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent().parent
+ wx.Panel.__init__(self, parent)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+
+ self.glyph_list = EditableListCtrl(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
+ self.glyph_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.parent.on_kerning_list_select)
+ self.glyph_list.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.parent.on_kerning_update)
+
+ sizer.Add(self.glyph_list, 1, wx.EXPAND, 0)
+ self.SetSizer(sizer)
+
+
+class KerningPairs(wx.Panel):
+ def __init__(self, parent):
+ self.parent = parent.GetParent().parent
+ wx.Panel.__init__(self, parent)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+
+ self.kerning_list = EditableListCtrl(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
+ self.kerning_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.parent.on_kerning_list_select)
+ self.kerning_list.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.parent.on_kerning_update)
+
+ sizer.Add(self.kerning_list, 1, wx.EXPAND, 0)
+ self.SetSizer(sizer)