From 90d3fcf69c7ccd16928aa26c6fa288aafcb2e05d Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:44:28 +0100 Subject: [PATCH] add meander preview images (#2113) --- lib/extensions/params.py | 41 +++++++++++++++--------------- lib/stitch_plan/lock_stitch.py | 5 ++-- lib/tiles.py | 9 ++++++- lib/utils/param.py | 5 ++-- tiles/N3-11a/preview.png | Bin 0 -> 15694 bytes tiles/N3-12/preview.png | Bin 0 -> 12572 bytes tiles/N3-16a/preview.png | Bin 0 -> 15986 bytes tiles/N3-17/preview.png | Bin 0 -> 14762 bytes tiles/N3-18-modified/preview.png | Bin 0 -> 16343 bytes tiles/N3-18/preview.png | Bin 0 -> 15602 bytes tiles/N3-20/preview.png | Bin 0 -> 11433 bytes tiles/N3-23b/preview.png | Bin 0 -> 18481 bytes tiles/N3-25c/preview.png | Bin 0 -> 16851 bytes tiles/N3-26b/preview.png | Bin 0 -> 26654 bytes tiles/N3-27/preview.png | Bin 0 -> 17830 bytes tiles/N3-30a/preview.png | Bin 0 -> 16693 bytes tiles/N3-51b/preview.png | Bin 0 -> 10231 bytes tiles/N3-57f-modified/preview.png | Bin 0 -> 14489 bytes tiles/N3-58b/preview.png | Bin 0 -> 22611 bytes tiles/N3-6/preview.png | Bin 0 -> 12720 bytes tiles/N3-7/preview.png | Bin 0 -> 9298 bytes tiles/N3-8a-modified/preview.png | Bin 0 -> 9876 bytes tiles/N3-8a/preview.png | Bin 0 -> 12988 bytes tiles/N3-8b/preview.png | Bin 0 -> 18962 bytes tiles/N4-13b/preview.png | Bin 0 -> 21472 bytes tiles/N4-13c/preview.png | Bin 0 -> 22119 bytes tiles/N4-13d/preview.png | Bin 0 -> 21026 bytes tiles/N4-13e/preview.png | Bin 0 -> 20369 bytes tiles/N4-13f/preview.png | Bin 0 -> 19672 bytes tiles/N4-16a/preview.png | Bin 0 -> 17458 bytes tiles/N4-19/preview.png | Bin 0 -> 21369 bytes tiles/N4-20/preview.png | Bin 0 -> 19015 bytes tiles/N4-21c/preview.png | Bin 0 -> 11803 bytes tiles/N4-22/preview.png | Bin 0 -> 16658 bytes tiles/N4-23a/preview.png | Bin 0 -> 16997 bytes tiles/N4-23c/preview.png | Bin 0 -> 18881 bytes tiles/N4-27/preview.png | Bin 0 -> 21490 bytes tiles/N4-29e/preview.png | Bin 0 -> 23965 bytes tiles/N4-29f/preview.png | Bin 0 -> 21173 bytes tiles/N4-31/preview.png | Bin 0 -> 17696 bytes tiles/N4-38/preview.png | Bin 0 -> 15281 bytes tiles/N4-42e/preview.png | Bin 0 -> 15469 bytes tiles/N4-44/preview.png | Bin 0 -> 21193 bytes tiles/N4-52/preview.png | Bin 0 -> 9979 bytes tiles/N4-54d/preview.png | Bin 0 -> 18475 bytes tiles/N4-5a-2/preview.png | Bin 0 -> 14809 bytes tiles/N4-5a/preview.png | Bin 0 -> 19599 bytes tiles/N4-82/preview.png | Bin 0 -> 13335 bytes tiles/N4-85d/preview.png | Bin 0 -> 17783 bytes tiles/N5-1e1/preview.png | Bin 0 -> 16940 bytes tiles/N5-1q2/preview.png | Bin 0 -> 15905 bytes tiles/N5-1t/preview.png | Bin 0 -> 14647 bytes tiles/N6-1/preview.png | Bin 0 -> 16944 bytes tiles/N6-2/preview.png | Bin 0 -> 16069 bytes tiles/N6-5b/preview.png | Bin 0 -> 13762 bytes tiles/N6-6a/preview.png | Bin 0 -> 16475 bytes tiles/N6-6c/preview.png | Bin 0 -> 17835 bytes tiles/NC5-11a/preview.png | Bin 0 -> 17329 bytes tiles/NC5-20a/preview.png | Bin 0 -> 15644 bytes tiles/P3-1/preview.png | Bin 0 -> 11898 bytes tiles/P3-12/preview.png | Bin 0 -> 12225 bytes tiles/P4-1/preview.png | Bin 0 -> 13828 bytes tiles/P4-10/preview.png | Bin 0 -> 43195 bytes tiles/P4-15/preview.png | Bin 0 -> 10691 bytes tiles/P4-19/preview.png | Bin 0 -> 16607 bytes tiles/P4-23/preview.png | Bin 0 -> 14725 bytes tiles/P4-24/preview.png | Bin 0 -> 16140 bytes tiles/P4-25/preview.png | Bin 0 -> 14541 bytes tiles/P4-43-modified/preview.png | Bin 0 -> 18770 bytes tiles/P4-43/preview.png | Bin 0 -> 22231 bytes tiles/P4-47/preview.png | Bin 0 -> 21876 bytes tiles/P5-10_11/preview.png | Bin 0 -> 15845 bytes tiles/P5-19/preview.png | Bin 0 -> 18232 bytes tiles/P5-23_24/preview.png | Bin 0 -> 20318 bytes tiles/P5-4/preview.png | Bin 0 -> 13139 bytes tiles/P6-6_11/preview.png | Bin 0 -> 18411 bytes tiles/diamond-square/preview.png | Bin 0 -> 10684 bytes tiles/hexagon/preview.png | Bin 0 -> 13561 bytes tiles/weird-one/preview.png | Bin 0 -> 20408 bytes 79 files changed, 34 insertions(+), 26 deletions(-) create mode 100644 tiles/N3-11a/preview.png create mode 100644 tiles/N3-12/preview.png create mode 100644 tiles/N3-16a/preview.png create mode 100644 tiles/N3-17/preview.png create mode 100644 tiles/N3-18-modified/preview.png create mode 100644 tiles/N3-18/preview.png create mode 100644 tiles/N3-20/preview.png create mode 100644 tiles/N3-23b/preview.png create mode 100644 tiles/N3-25c/preview.png create mode 100644 tiles/N3-26b/preview.png create mode 100644 tiles/N3-27/preview.png create mode 100644 tiles/N3-30a/preview.png create mode 100644 tiles/N3-51b/preview.png create mode 100644 tiles/N3-57f-modified/preview.png create mode 100644 tiles/N3-58b/preview.png create mode 100644 tiles/N3-6/preview.png create mode 100644 tiles/N3-7/preview.png create mode 100644 tiles/N3-8a-modified/preview.png create mode 100644 tiles/N3-8a/preview.png create mode 100644 tiles/N3-8b/preview.png create mode 100644 tiles/N4-13b/preview.png create mode 100644 tiles/N4-13c/preview.png create mode 100644 tiles/N4-13d/preview.png create mode 100644 tiles/N4-13e/preview.png create mode 100644 tiles/N4-13f/preview.png create mode 100644 tiles/N4-16a/preview.png create mode 100644 tiles/N4-19/preview.png create mode 100644 tiles/N4-20/preview.png create mode 100644 tiles/N4-21c/preview.png create mode 100644 tiles/N4-22/preview.png create mode 100644 tiles/N4-23a/preview.png create mode 100644 tiles/N4-23c/preview.png create mode 100644 tiles/N4-27/preview.png create mode 100644 tiles/N4-29e/preview.png create mode 100644 tiles/N4-29f/preview.png create mode 100644 tiles/N4-31/preview.png create mode 100644 tiles/N4-38/preview.png create mode 100644 tiles/N4-42e/preview.png create mode 100644 tiles/N4-44/preview.png create mode 100644 tiles/N4-52/preview.png create mode 100644 tiles/N4-54d/preview.png create mode 100644 tiles/N4-5a-2/preview.png create mode 100644 tiles/N4-5a/preview.png create mode 100644 tiles/N4-82/preview.png create mode 100644 tiles/N4-85d/preview.png create mode 100644 tiles/N5-1e1/preview.png create mode 100644 tiles/N5-1q2/preview.png create mode 100644 tiles/N5-1t/preview.png create mode 100644 tiles/N6-1/preview.png create mode 100644 tiles/N6-2/preview.png create mode 100644 tiles/N6-5b/preview.png create mode 100644 tiles/N6-6a/preview.png create mode 100644 tiles/N6-6c/preview.png create mode 100644 tiles/NC5-11a/preview.png create mode 100644 tiles/NC5-20a/preview.png create mode 100644 tiles/P3-1/preview.png create mode 100644 tiles/P3-12/preview.png create mode 100644 tiles/P4-1/preview.png create mode 100644 tiles/P4-10/preview.png create mode 100644 tiles/P4-15/preview.png create mode 100644 tiles/P4-19/preview.png create mode 100644 tiles/P4-23/preview.png create mode 100644 tiles/P4-24/preview.png create mode 100644 tiles/P4-25/preview.png create mode 100644 tiles/P4-43-modified/preview.png create mode 100644 tiles/P4-43/preview.png create mode 100644 tiles/P4-47/preview.png create mode 100644 tiles/P5-10_11/preview.png create mode 100644 tiles/P5-19/preview.png create mode 100644 tiles/P5-23_24/preview.png create mode 100644 tiles/P5-4/preview.png create mode 100644 tiles/P6-6_11/preview.png create mode 100644 tiles/diamond-square/preview.png create mode 100644 tiles/hexagon/preview.png create mode 100644 tiles/weird-one/preview.png diff --git a/lib/extensions/params.py b/lib/extensions/params.py index 4b6780eed..6c0f12c56 100644 --- a/lib/extensions/params.py +++ b/lib/extensions/params.py @@ -78,8 +78,7 @@ class ParamsTab(ScrolledPanel): self.param_change_indicators = {} self.settings_grid = wx.FlexGridSizer(rows=0, cols=4, hgap=10, vgap=15) - self.settings_grid.AddGrowableCol(1, 2) - self.settings_grid.SetFlexibleDirection(wx.HORIZONTAL) + self.settings_grid.AddGrowableCol(2, 1) self.pencil_icon = wx.Image(os.path.join(get_resource_dir( "icons"), "pencil_20x20.png")).ConvertToBitmap() @@ -348,24 +347,21 @@ class ParamsTab(ScrolledPanel): # just to add space around the settings box = wx.BoxSizer(wx.VERTICAL) - summary_box = wx.StaticBox( - self, wx.ID_ANY, label=_("Inkscape objects")) + summary_box = wx.StaticBox(self, wx.ID_ANY, label=_("Inkscape objects")) sizer = wx.StaticBoxSizer(summary_box, wx.HORIZONTAL) self.description = wx.StaticText(self) self.update_description() self.description.SetLabel(self.description_text) self.description_container = box self.Bind(wx.EVT_SIZE, self.resized) - sizer.Add(self.description, proportion=0, - flag=wx.EXPAND | wx.ALL, border=5) + sizer.Add(self.description, proportion=0, flag=wx.EXPAND | wx.ALL, border=5) box.Add(sizer, proportion=0, flag=wx.ALL, border=5) if self.toggle: toggle_sizer = wx.BoxSizer(wx.HORIZONTAL) toggle_sizer.Add(self.create_change_indicator( self.toggle.name), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=5) - toggle_sizer.Add(self.toggle_checkbox, proportion=0, - flag=wx.ALIGN_CENTER_VERTICAL) + toggle_sizer.Add(self.toggle_checkbox, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL) box.Add(toggle_sizer, proportion=0, flag=wx.BOTTOM, border=10) for param in self.params: @@ -378,11 +374,9 @@ class ParamsTab(ScrolledPanel): description.Hide() for item in param.select_items: self.choice_widgets[item].extend([col1, description]) - # else: - self.settings_grid.Add( - col1, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL) - self.settings_grid.Add(description, proportion=1, flag=wx.EXPAND | - wx.RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=5) + + self.settings_grid.Add(col1, flag=wx.ALIGN_CENTER_VERTICAL) + self.settings_grid.Add(description, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=5) if param.type == 'boolean': if len(param.values) > 1: @@ -402,11 +396,18 @@ class ParamsTab(ScrolledPanel): self.dict_of_choices[param.name] = { "param": param, "widget": input, "last_initialized_choice": 1} elif param.type == 'combo': - input = wx.ComboBox(self, wx.ID_ANY, choices=[], style=wx.CB_READONLY) + input = wx.adv.BitmapComboBox(self, wx.ID_ANY, choices=[], style=wx.CB_READONLY) for option in param.options: - input.Append(option.name, option) + if option.preview_image: + image = wx.Image(option.preview_image) + image.Rescale(60, 60, quality=wx.IMAGE_QUALITY_HIGH) + image = wx.Bitmap(image) + else: + image = wx.NullBitmap + input.Append(option.name, image, option) if not param.options: input.Append(_('No options available'), ParamOption('not_available')) + value = self.get_combo_value_index(param.values[0], param.options) input.SetSelection(value) input.Bind(wx.EVT_COMBOBOX, self.changed) @@ -437,15 +438,13 @@ class ParamsTab(ScrolledPanel): col4.Hide() for item in param.select_items: self.choice_widgets[item].extend([input, col4]) - # else: - self.settings_grid.Add( - input, proportion=1, flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND | wx.LEFT, border=40) - self.settings_grid.Add( - col4, proportion=1, flag=wx.ALIGN_CENTER_VERTICAL) + + self.settings_grid.Add(input, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.EXPAND, border=40) + self.settings_grid.Add(col4, flag=wx.ALIGN_CENTER_VERTICAL) self.inputs_to_params = {v: k for k, v in self.param_inputs.items()} - box.Add(self.settings_grid, proportion=1, flag=wx.ALL, border=10) + box.Add(self.settings_grid, proportion=1, flag=wx.ALL | wx.EXPAND, border=10) self.SetSizer(box) self.update_choice_widgets() diff --git a/lib/stitch_plan/lock_stitch.py b/lib/stitch_plan/lock_stitch.py index fec756538..4e1d347be 100644 --- a/lib/stitch_plan/lock_stitch.py +++ b/lib/stitch_plan/lock_stitch.py @@ -11,13 +11,14 @@ from .stitch import Stitch class LockStitchDefinition: - def __init__(self, lock_id=None, name=None, path=None): + def __init__(self, lock_id=None, name=None, path=None, preview_image=None): self.id: str = lock_id self.name: str = name self._path: str = path + self.preview_image: str = None def __repr__(self): - return "LockStitchDefinition(%s, %s, %s)" % (self.id, self.name, self.path) + return "LockStitchDefinition(%s, %s, %s, %s)" % (self.id, self.name, self._path, self.preview_image) def stitches(self): raise NotImplementedError(f"{self.__class__.__name__} must implement stitches()") diff --git a/lib/tiles.py b/lib/tiles.py index 683804a6c..686d5a6df 100644 --- a/lib/tiles.py +++ b/lib/tiles.py @@ -21,6 +21,7 @@ class Tile: def _load_tile(self, tile_path): self.tile_svg = inkex.load_svg(os.path.join(tile_path, "tile.svg")) + self.preview_image = self._load_preview(tile_path) self._load_metadata(tile_path) self.tile = None self.width = None @@ -32,10 +33,16 @@ class Tile: return self.name < other.name def __repr__(self): - return f"Tile({self.name}, {self.id})" + return f"Tile({self.name}, {self.id}, {self.preview_image})" __str__ = __repr__ + def _load_preview(self, tile_path): + image_path = os.path.join(tile_path, "preview.png") + if os.path.isfile(image_path): + return image_path + return None + def _load_metadata(self, tile_path): with open(os.path.join(tile_path, "tile.json"), "rb") as tile_json: tile_metadata = json.load(tile_json) diff --git a/lib/utils/param.py b/lib/utils/param.py index c7dfdab04..19a369e1a 100644 --- a/lib/utils/param.py +++ b/lib/utils/param.py @@ -1,8 +1,9 @@ class ParamOption: - def __init__(self, param_id=None, name=None, legacy=None): + def __init__(self, param_id=None, name=None, legacy=None, preview_image=None): self.id: str = param_id self.name: str = name self.legacy: int = legacy + self.preview_image: str = None def __repr__(self): - return "ParamOption(%s, %s, %s)" % (self.id, self.name, self.legacy) + return "ParamOption(%s, %s, %s, %s)" % (self.id, self.name, self.legacy, self.preview_image) diff --git a/tiles/N3-11a/preview.png b/tiles/N3-11a/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a593b8604db1d41688a42433930220f9f210df8e GIT binary patch literal 15694 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 Jt*Bw({{Z15^$h?3 literal 0 HcmV?d00001 diff --git a/tiles/N3-12/preview.png b/tiles/N3-12/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8152c49935c900ae686dec5c03681d4b50b96d GIT binary patch literal 12572 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 literal 0 HcmV?d00001 diff --git a/tiles/N3-16a/preview.png b/tiles/N3-16a/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c813e1621a47bf76516b98c8a6a895cd66486f95 GIT binary patch literal 15986 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