summaryrefslogtreecommitdiff
path: root/lib/extensions/params.py
diff options
context:
space:
mode:
authorAndreas <v.andreas.1@web.de>2021-10-21 16:24:40 +0200
committerKaalleen <reni@allenka.de>2022-05-04 18:55:40 +0200
commit0fcf8bb97ced8df552cd0283b4ea009b6ca42623 (patch)
tree9fbb5053db31a15ec140ed95f7b2634e987fe12d /lib/extensions/params.py
parentea66eb8685524881ad34d412a8bbaeb482e5a9cf (diff)
added tangential and guided fill
Diffstat (limited to 'lib/extensions/params.py')
-rw-r--r--lib/extensions/params.py81
1 files changed, 72 insertions, 9 deletions
diff --git a/lib/extensions/params.py b/lib/extensions/params.py
index c96b9691..8021d5d7 100644
--- a/lib/extensions/params.py
+++ b/lib/extensions/params.py
@@ -7,15 +7,15 @@
import os
import sys
-from collections import defaultdict
+from collections import defaultdict,namedtuple
from copy import copy
-from itertools import groupby
+from itertools import groupby,zip_longest
import wx
from wx.lib.scrolledpanel import ScrolledPanel
from ..commands import is_command, is_command_symbol
-from ..elements import (AutoFill, Clone, EmbroideryElement, Fill, Polyline,
+from ..elements import (AutoFill, Clone, EmbroideryElement, Polyline,
SatinColumn, Stroke)
from ..elements.clone import is_clone
from ..gui import PresetsPanel, SimulatorPreview, WarningPanel
@@ -25,6 +25,14 @@ from ..utils import get_resource_dir
from .base import InkstitchExtension
+#ChoiceWidgets = namedtuple("ChoiceWidgets", "param widget last_initialized_choice")
+
+
+
+def grouper(iterable_obj, count, fillvalue=None):
+ args = [iter(iterable_obj)] * count
+ return zip_longest(*args, fillvalue=fillvalue)
+
class ParamsTab(ScrolledPanel):
def __init__(self, *args, **kwargs):
self.params = kwargs.pop('params', [])
@@ -38,6 +46,8 @@ class ParamsTab(ScrolledPanel):
self.dependent_tabs = []
self.parent_tab = None
self.param_inputs = {}
+ self.choice_widgets = defaultdict(list)
+ self.dict_of_choices = {}
self.paired_tab = None
self.disable_notify_pair = False
@@ -113,6 +123,19 @@ class ParamsTab(ScrolledPanel):
if event:
event.Skip()
+ def update_choice_state(self, event=None):
+ input = event.GetEventObject()
+ selection = input.GetSelection()
+
+ param = self.inputs_to_params[input]
+
+ self.update_choice_widgets((param, selection))
+ self.settings_grid.Layout()
+ self.Layout()
+
+ if event:
+ event.Skip()
+
def pair_changed(self, value):
# print self.name, "pair_changed", value
new_value = not value
@@ -245,7 +268,30 @@ class ParamsTab(ScrolledPanel):
# end wxGlade
pass
- def __do_layout(self):
+ #choice tuple is None or contains ("choice widget param name", "actual selection")
+ def update_choice_widgets(self, choice_tuple = None):
+ if choice_tuple == None: #update all choices
+ for choice in self.dict_of_choices.values():
+ self.update_choice_widgets((choice["param"].name, choice["widget"].GetSelection()))
+ else:
+ choice = self.dict_of_choices[choice_tuple[0]]
+ last_selection = choice["last_initialized_choice"]
+ current_selection = choice["widget"].GetSelection()
+ if last_selection != -1 and last_selection != current_selection: #Hide the old widgets
+ for widget in self.choice_widgets[(choice["param"].name, last_selection)]:
+ widget.Hide()
+ #self.settings_grid.Detach(widget)
+
+ #choice_index = self.settings_grid.GetChildren().index(self.settings_grid.GetItem(choice["widget"])) #TODO: is there a better way to get the index in the sizer?
+ for widgets in grouper(self.choice_widgets[choice_tuple], 4):
+ widgets[0].Show(True)
+ widgets[1].Show(True)
+ widgets[2].Show(True)
+ widgets[3].Show(True)
+ choice["last_initialized_choice"] = current_selection
+
+ def __do_layout(self, only_settings_grid=False):
+
# just to add space around the settings
box = wx.BoxSizer(wx.VERTICAL)
@@ -266,14 +312,20 @@ class ParamsTab(ScrolledPanel):
box.Add(toggle_sizer, proportion=0, flag=wx.BOTTOM, border=10)
for param in self.params:
- self.settings_grid.Add(self.create_change_indicator(param.name), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-
+ col1 = self.create_change_indicator(param.name)
description = wx.StaticText(self, label=param.description)
description.SetToolTip(param.tooltip)
+
+ if param.select_items != None:
+ col1.Hide()
+ 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)
if param.type == 'boolean':
-
if len(param.values) > 1:
input = wx.CheckBox(self, style=wx.CHK_3STATE)
input.Set3StateValue(wx.CHK_UNDETERMINED)
@@ -287,6 +339,8 @@ class ParamsTab(ScrolledPanel):
input = wx.Choice(self, wx.ID_ANY, choices=param.options)
input.SetSelection(int(param.values[0]))
input.Bind(wx.EVT_CHOICE, self.changed)
+ input.Bind(wx.EVT_CHOICE, self.update_choice_state)
+ self.dict_of_choices[param.name] = {"param": param, "widget": input, "last_initialized_choice": 1}
elif len(param.values) > 1:
input = wx.ComboBox(self, wx.ID_ANY, choices=sorted(str(value) for value in param.values), style=wx.CB_DROPDOWN)
input.Bind(wx.EVT_COMBOBOX, self.changed)
@@ -298,13 +352,22 @@ class ParamsTab(ScrolledPanel):
self.param_inputs[param.name] = input
+ col4 = wx.StaticText(self, label=param.unit or "")
+
+ if param.select_items != None:
+ input.Hide()
+ 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(wx.StaticText(self, label=param.unit or ""), proportion=1, flag=wx.ALIGN_CENTER_VERTICAL)
+ self.settings_grid.Add(col4, proportion=1, 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)
self.SetSizer(box)
+ self.update_choice_widgets()
self.Layout()
@@ -521,7 +584,7 @@ class Params(InkstitchExtension):
else:
if element.get_style("fill", 'black') and not element.get_style("fill-opacity", 1) == "0":
classes.append(AutoFill)
- classes.append(Fill)
+ #classes.append(Fill)
if element.get_style("stroke") is not None:
classes.append(Stroke)
if element.get_style("stroke-dasharray") is None: