summaryrefslogtreecommitdiff
path: root/lib/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'lib/extensions')
-rw-r--r--lib/extensions/__init__.py2
-rw-r--r--lib/extensions/satin_multicolor.py56
2 files changed, 58 insertions, 0 deletions
diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py
index 7674fba5..86c75395 100644
--- a/lib/extensions/__init__.py
+++ b/lib/extensions/__init__.py
@@ -48,6 +48,7 @@ from .preferences import Preferences
from .print_pdf import Print
from .remove_embroidery_settings import RemoveEmbroiderySettings
from .reorder import Reorder
+from .satin_multicolor import SatinMulticolor
from .select_elements import SelectElements
from .selection_to_guide_line import SelectionToGuideLine
from .selection_to_pattern import SelectionToPattern
@@ -108,6 +109,7 @@ __all__ = extensions = [ApplyPalette,
Print,
RemoveEmbroiderySettings,
Reorder,
+ SatinMulticolor,
SelectElements,
SelectionToGuideLine,
SelectionToPattern,
diff --git a/lib/extensions/satin_multicolor.py b/lib/extensions/satin_multicolor.py
new file mode 100644
index 00000000..5657bdbf
--- /dev/null
+++ b/lib/extensions/satin_multicolor.py
@@ -0,0 +1,56 @@
+# Authors: see git history
+#
+# Copyright (c) 2023 Authors
+# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+
+import sys
+
+import wx
+import wx.adv
+from inkex import errormsg
+
+from ..elements import SatinColumn
+from ..gui import MultiColorSatinPanel
+from ..gui.simulator import SplitSimulatorWindow
+from ..i18n import _
+from ..utils.svg_data import get_pagecolor
+from .base import InkstitchExtension
+
+
+class SatinMulticolor(InkstitchExtension):
+ def __init__(self, *args, **kwargs):
+ self.elements = set()
+ self.cancelled = False
+ InkstitchExtension.__init__(self, *args, **kwargs)
+
+ def cancel(self):
+ self.cancelled = True
+
+ def effect(self):
+ self.get_elements()
+ satins = [element for element in self.elements if isinstance(element, SatinColumn)]
+ if not satins:
+ errormsg(_("Please select at least one satin column."))
+ return
+
+ metadata = self.get_inkstitch_metadata()
+ background_color = get_pagecolor(self.svg.namedview)
+
+ app = wx.App()
+ frame = SplitSimulatorWindow(
+ title=_("Ink/Stitch Multicolor Satin"),
+ panel_class=MultiColorSatinPanel,
+ elements=satins,
+ on_cancel=self.cancel,
+ metadata=metadata,
+ background_color=background_color,
+ target_duration=1
+ )
+
+ frame.Show()
+ app.MainLoop()
+
+ if self.cancelled:
+ # This prevents the superclass from outputting the SVG, because we
+ # may have modified the DOM.
+ sys.exit(0)