summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/extensions/element_info.py6
-rw-r--r--lib/extensions/lettering.py7
-rw-r--r--lib/extensions/satin_multicolor.py8
-rw-r--r--lib/extensions/tartan.py10
-rw-r--r--lib/gui/abort_message.py66
5 files changed, 92 insertions, 5 deletions
diff --git a/lib/extensions/element_info.py b/lib/extensions/element_info.py
index 846bba17..2f3de736 100644
--- a/lib/extensions/element_info.py
+++ b/lib/extensions/element_info.py
@@ -4,6 +4,7 @@
# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
from ..elements import FillStitch, SatinColumn, Stroke
+from ..gui.abort_message import AbortMessageApp
from ..gui.element_info import ElementInfoApp
from ..i18n import _
from ..stitch_plan import stitch_groups_to_stitch_plan
@@ -15,6 +16,11 @@ class ElementInfo(InkstitchExtension):
def effect(self):
if not self.svg.selection or not self.get_elements():
+ app = AbortMessageApp(
+ _("Please select at least one element."),
+ _("https://inkstitch.org/docs/troubleshoot/#element-info")
+ )
+ app.MainLoop()
return
self.metadata = self.get_inkstitch_metadata()
diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py
index 76821902..918c6001 100644
--- a/lib/extensions/lettering.py
+++ b/lib/extensions/lettering.py
@@ -9,6 +9,7 @@ import inkex
import wx
import wx.adv
+from ..gui.abort_message import AbortMessageApp
from ..gui.lettering import LetteringPanel
from ..gui.simulator import SplitSimulatorWindow
from ..i18n import _
@@ -41,7 +42,11 @@ class Lettering(CommandsExtension):
groups.add(group)
if len(groups) > 1:
- inkex.errormsg(_("Please select only one block of text."))
+ app = AbortMessageApp(
+ _("Please select only one block of text."),
+ _("https://inkstitch.org/docs/lettering/#lettering-tool")
+ )
+ app.MainLoop()
sys.exit(1)
elif len(groups) == 0:
return self.create_group()
diff --git a/lib/extensions/satin_multicolor.py b/lib/extensions/satin_multicolor.py
index a6c1983e..ad2178bb 100644
--- a/lib/extensions/satin_multicolor.py
+++ b/lib/extensions/satin_multicolor.py
@@ -7,9 +7,9 @@ import sys
import wx
import wx.adv
-from inkex import errormsg
from ..elements import SatinColumn
+from ..gui.abort_message import AbortMessageApp
from ..gui.satin_multicolor import MultiColorSatinPanel
from ..gui.simulator import SplitSimulatorWindow
from ..i18n import _
@@ -30,7 +30,11 @@ class SatinMulticolor(InkstitchExtension):
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."))
+ app = AbortMessageApp(
+ _("Please select at least one satin column."),
+ _("https://inkstitch.org/docs/satin-tools/#multicolor-satin")
+ )
+ app.MainLoop()
return
metadata = self.get_inkstitch_metadata()
diff --git a/lib/extensions/tartan.py b/lib/extensions/tartan.py
index 3acb659c..c5962499 100644
--- a/lib/extensions/tartan.py
+++ b/lib/extensions/tartan.py
@@ -7,8 +7,8 @@ import sys
import wx
import wx.adv
-from inkex import errormsg
+from ..gui.abort_message import AbortMessageApp
from ..gui.simulator import SplitSimulatorWindow
from ..gui.tartan import TartanMainPanel
from ..i18n import _
@@ -59,9 +59,15 @@ class Tartan(InkstitchExtension):
def effect(self):
self.get_tartan_elements()
+
if not self.elements:
- errormsg(_("To create a tartan pattern please select at least one element with a fill color."))
+ app = AbortMessageApp(
+ _("To create a tartan pattern please select at least one element with a fill color."),
+ _("https://inkstitch.org/docs/fill-tools/#tartan")
+ )
+ app.MainLoop()
return
+
metadata = self.get_inkstitch_metadata()
background_color = get_pagecolor(self.svg.namedview)
diff --git a/lib/gui/abort_message.py b/lib/gui/abort_message.py
new file mode 100644
index 00000000..6bec17b7
--- /dev/null
+++ b/lib/gui/abort_message.py
@@ -0,0 +1,66 @@
+# 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
+import wx.adv
+
+from ..i18n import _
+
+
+class AbortMessageFrame(wx.Frame):
+
+ def __init__(self, *args, **kwargs):
+ message = kwargs.pop("message")
+ url = kwargs.pop("url")
+ wx.Frame.__init__(self, None, wx.ID_ANY, "Ink/Stitch", *args, **kwargs)
+
+ self.SetWindowStyle(wx.FRAME_FLOAT_ON_PARENT | wx.DEFAULT_FRAME_STYLE)
+
+ main_panel = wx.Panel(self, wx.ID_ANY)
+
+ main_sizer = wx.BoxSizer(wx.VERTICAL)
+
+ help_text = wx.StaticText(
+ main_panel,
+ wx.ID_ANY,
+ message,
+ style=wx.ALIGN_LEFT
+ )
+ help_text.Wrap(500)
+ main_sizer.Add(help_text, 0, wx.ALL, 10)
+
+ if url is not None:
+ main_sizer.Add((10, 10), 0, 0, 0)
+ main_sizer.Add(wx.StaticLine(main_panel), 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10)
+
+ website_info = wx.StaticText(main_panel, wx.ID_ANY, _("More information on our website:"))
+ main_sizer.Add(website_info, 0, wx.ALL, 10)
+
+ website_link = wx.adv.HyperlinkCtrl(
+ main_panel,
+ wx.ID_ANY,
+ url,
+ url
+ )
+ main_sizer.Add(website_link, 0, wx.ALL, 10)
+ main_sizer.Add((20, 20), 0, 0, 0)
+
+ main_panel.SetSizer(main_sizer)
+ self.SetSizeHints(main_sizer.CalcMin())
+
+ self.Layout()
+
+
+class AbortMessageApp(wx.App):
+ def __init__(self, message, url=None):
+ self.message = message
+ self.url = url
+ super().__init__()
+
+ def OnInit(self):
+ self.frame = AbortMessageFrame(message=self.message, url=self.url)
+ self.SetTopWindow(self.frame)
+ self.frame.Show()
+ return True