meerk40t 0.9.2000__py2.py3-none-any.whl → 0.9.3001__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. meerk40t/balormk/balor_params.py +1 -43
  2. meerk40t/balormk/controller.py +1 -41
  3. meerk40t/balormk/device.py +16 -22
  4. meerk40t/balormk/driver.py +4 -4
  5. meerk40t/balormk/gui/balorconfig.py +2 -2
  6. meerk40t/balormk/gui/balorcontroller.py +13 -5
  7. meerk40t/balormk/gui/baloroperationproperties.py +0 -46
  8. meerk40t/balormk/gui/gui.py +17 -17
  9. meerk40t/camera/gui/camerapanel.py +18 -11
  10. meerk40t/core/cutcode/rastercut.py +3 -1
  11. meerk40t/core/cutplan.py +145 -14
  12. meerk40t/core/elements/clipboard.py +18 -9
  13. meerk40t/core/elements/element_treeops.py +320 -180
  14. meerk40t/core/elements/element_types.py +7 -2
  15. meerk40t/core/elements/elements.py +53 -27
  16. meerk40t/core/elements/geometry.py +8 -0
  17. meerk40t/core/elements/offset_clpr.py +129 -4
  18. meerk40t/core/elements/offset_mk.py +3 -1
  19. meerk40t/core/elements/shapes.py +28 -25
  20. meerk40t/core/laserjob.py +7 -0
  21. meerk40t/core/node/bootstrap.py +4 -0
  22. meerk40t/core/node/effect_hatch.py +85 -96
  23. meerk40t/core/node/effect_wobble.py +309 -0
  24. meerk40t/core/node/elem_image.py +49 -19
  25. meerk40t/core/node/elem_line.py +60 -0
  26. meerk40t/core/node/elem_rect.py +5 -3
  27. meerk40t/core/node/image_processed.py +766 -0
  28. meerk40t/core/node/image_raster.py +113 -0
  29. meerk40t/core/node/node.py +120 -1
  30. meerk40t/core/node/op_cut.py +2 -8
  31. meerk40t/core/node/op_dots.py +0 -8
  32. meerk40t/core/node/op_engrave.py +2 -18
  33. meerk40t/core/node/op_image.py +22 -35
  34. meerk40t/core/node/op_raster.py +0 -9
  35. meerk40t/core/planner.py +32 -2
  36. meerk40t/core/svg_io.py +699 -461
  37. meerk40t/core/treeop.py +191 -0
  38. meerk40t/core/undos.py +15 -1
  39. meerk40t/core/units.py +14 -4
  40. meerk40t/device/dummydevice.py +3 -2
  41. meerk40t/device/gui/defaultactions.py +43 -55
  42. meerk40t/device/gui/formatterpanel.py +58 -49
  43. meerk40t/device/gui/warningpanel.py +12 -12
  44. meerk40t/device/mixins.py +13 -0
  45. meerk40t/dxf/dxf_io.py +9 -5
  46. meerk40t/extra/ezd.py +28 -26
  47. meerk40t/extra/imageactions.py +300 -308
  48. meerk40t/extra/lbrn.py +19 -2
  49. meerk40t/fill/fills.py +6 -6
  50. meerk40t/fill/patternfill.py +1061 -1061
  51. meerk40t/fill/patterns.py +2 -6
  52. meerk40t/grbl/controller.py +168 -52
  53. meerk40t/grbl/device.py +23 -18
  54. meerk40t/grbl/driver.py +39 -0
  55. meerk40t/grbl/emulator.py +79 -19
  56. meerk40t/grbl/gcodejob.py +10 -0
  57. meerk40t/grbl/gui/grblconfiguration.py +2 -2
  58. meerk40t/grbl/gui/grblcontroller.py +24 -8
  59. meerk40t/grbl/gui/grblhardwareconfig.py +153 -0
  60. meerk40t/grbl/gui/gui.py +17 -14
  61. meerk40t/grbl/mock_connection.py +15 -34
  62. meerk40t/grbl/plugin.py +0 -4
  63. meerk40t/grbl/serial_connection.py +2 -1
  64. meerk40t/gui/about.py +8 -5
  65. meerk40t/gui/alignment.py +10 -6
  66. meerk40t/gui/basicops.py +27 -17
  67. meerk40t/gui/bufferview.py +2 -2
  68. meerk40t/gui/choicepropertypanel.py +101 -13
  69. meerk40t/gui/consolepanel.py +12 -9
  70. meerk40t/gui/devicepanel.py +38 -25
  71. meerk40t/gui/executejob.py +6 -4
  72. meerk40t/gui/help_assets/help_assets.py +13 -10
  73. meerk40t/gui/hersheymanager.py +8 -6
  74. meerk40t/gui/icons.py +1951 -3065
  75. meerk40t/gui/imagesplitter.py +14 -7
  76. meerk40t/gui/keymap.py +3 -3
  77. meerk40t/gui/laserpanel.py +151 -84
  78. meerk40t/gui/laserrender.py +61 -70
  79. meerk40t/gui/lasertoolpanel.py +8 -7
  80. meerk40t/gui/materialtest.py +3 -3
  81. meerk40t/gui/mkdebug.py +254 -1
  82. meerk40t/gui/navigationpanels.py +321 -180
  83. meerk40t/gui/notes.py +3 -3
  84. meerk40t/gui/opassignment.py +12 -12
  85. meerk40t/gui/operation_info.py +13 -13
  86. meerk40t/gui/plugin.py +5 -0
  87. meerk40t/gui/position.py +20 -18
  88. meerk40t/gui/preferences.py +21 -6
  89. meerk40t/gui/propertypanels/attributes.py +70 -22
  90. meerk40t/gui/propertypanels/blobproperty.py +2 -2
  91. meerk40t/gui/propertypanels/consoleproperty.py +2 -2
  92. meerk40t/gui/propertypanels/groupproperties.py +3 -3
  93. meerk40t/gui/propertypanels/hatchproperty.py +11 -18
  94. meerk40t/gui/propertypanels/imageproperty.py +4 -3
  95. meerk40t/gui/propertypanels/opbranchproperties.py +1 -1
  96. meerk40t/gui/propertypanels/pathproperty.py +2 -2
  97. meerk40t/gui/propertypanels/pointproperty.py +2 -2
  98. meerk40t/gui/propertypanels/propertywindow.py +4 -4
  99. meerk40t/gui/propertypanels/textproperty.py +3 -3
  100. meerk40t/gui/propertypanels/wobbleproperty.py +204 -0
  101. meerk40t/gui/ribbon.py +367 -259
  102. meerk40t/gui/scene/scene.py +31 -5
  103. meerk40t/gui/scenewidgets/elementswidget.py +12 -4
  104. meerk40t/gui/scenewidgets/gridwidget.py +2 -2
  105. meerk40t/gui/scenewidgets/laserpathwidget.py +7 -2
  106. meerk40t/gui/scenewidgets/machineoriginwidget.py +6 -2
  107. meerk40t/gui/scenewidgets/relocatewidget.py +1 -1
  108. meerk40t/gui/scenewidgets/reticlewidget.py +9 -0
  109. meerk40t/gui/scenewidgets/selectionwidget.py +12 -7
  110. meerk40t/gui/simpleui.py +95 -8
  111. meerk40t/gui/simulation.py +44 -36
  112. meerk40t/gui/spoolerpanel.py +124 -26
  113. meerk40t/gui/statusbarwidgets/defaultoperations.py +18 -6
  114. meerk40t/gui/statusbarwidgets/infowidget.py +2 -2
  115. meerk40t/gui/statusbarwidgets/opassignwidget.py +12 -12
  116. meerk40t/gui/statusbarwidgets/shapepropwidget.py +45 -18
  117. meerk40t/gui/statusbarwidgets/statusbar.py +11 -4
  118. meerk40t/gui/themes.py +78 -0
  119. meerk40t/gui/toolwidgets/toolcircle.py +2 -1
  120. meerk40t/gui/toolwidgets/toolellipse.py +2 -1
  121. meerk40t/gui/toolwidgets/toolimagecut.py +132 -0
  122. meerk40t/gui/toolwidgets/toolline.py +144 -0
  123. meerk40t/gui/toolwidgets/toolnodeedit.py +72 -145
  124. meerk40t/gui/toolwidgets/toolpoint.py +1 -1
  125. meerk40t/gui/toolwidgets/toolpolygon.py +8 -55
  126. meerk40t/gui/toolwidgets/toolrect.py +2 -1
  127. meerk40t/gui/usbconnect.py +2 -2
  128. meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +2 -2
  129. meerk40t/gui/utilitywidgets/harmonograph.py +7 -7
  130. meerk40t/gui/utilitywidgets/scalewidget.py +1 -1
  131. meerk40t/gui/wordlisteditor.py +33 -18
  132. meerk40t/gui/wxmeerk40t.py +166 -66
  133. meerk40t/gui/wxmmain.py +236 -157
  134. meerk40t/gui/wxmribbon.py +49 -25
  135. meerk40t/gui/wxmscene.py +49 -38
  136. meerk40t/gui/wxmtree.py +216 -85
  137. meerk40t/gui/wxutils.py +62 -4
  138. meerk40t/image/imagetools.py +443 -15
  139. meerk40t/internal_plugins.py +2 -10
  140. meerk40t/kernel/kernel.py +12 -4
  141. meerk40t/lihuiyu/controller.py +7 -7
  142. meerk40t/lihuiyu/device.py +3 -1
  143. meerk40t/lihuiyu/driver.py +3 -0
  144. meerk40t/lihuiyu/gui/gui.py +8 -8
  145. meerk40t/lihuiyu/gui/lhyaccelgui.py +2 -2
  146. meerk40t/lihuiyu/gui/lhycontrollergui.py +73 -27
  147. meerk40t/lihuiyu/gui/lhydrivergui.py +2 -2
  148. meerk40t/lihuiyu/gui/tcpcontroller.py +22 -9
  149. meerk40t/main.py +6 -1
  150. meerk40t/moshi/controller.py +5 -5
  151. meerk40t/moshi/device.py +5 -2
  152. meerk40t/moshi/driver.py +4 -0
  153. meerk40t/moshi/gui/gui.py +8 -8
  154. meerk40t/moshi/gui/moshicontrollergui.py +24 -8
  155. meerk40t/moshi/gui/moshidrivergui.py +2 -2
  156. meerk40t/newly/controller.py +2 -0
  157. meerk40t/newly/device.py +9 -2
  158. meerk40t/newly/driver.py +4 -0
  159. meerk40t/newly/gui/gui.py +16 -17
  160. meerk40t/newly/gui/newlyconfig.py +2 -2
  161. meerk40t/newly/gui/newlycontroller.py +13 -5
  162. meerk40t/rotary/gui/gui.py +2 -2
  163. meerk40t/rotary/gui/rotarysettings.py +2 -2
  164. meerk40t/ruida/device.py +3 -0
  165. meerk40t/ruida/driver.py +4 -0
  166. meerk40t/ruida/gui/gui.py +6 -6
  167. meerk40t/ruida/gui/ruidaconfig.py +2 -2
  168. meerk40t/ruida/gui/ruidacontroller.py +13 -5
  169. meerk40t/svgelements.py +9 -9
  170. meerk40t/tools/geomstr.py +849 -153
  171. meerk40t/tools/kerftest.py +8 -4
  172. meerk40t/tools/livinghinges.py +15 -8
  173. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/METADATA +21 -16
  174. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/RECORD +185 -177
  175. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/entry_points.txt +0 -1
  176. test/test_core_elements.py +8 -24
  177. test/test_file_svg.py +88 -0
  178. test/test_fill.py +9 -9
  179. test/test_geomstr.py +258 -8
  180. test/test_kernel.py +4 -0
  181. test/test_tools_rasterplotter.py +29 -0
  182. meerk40t/extra/embroider.py +0 -56
  183. meerk40t/extra/pathoptimize.py +0 -249
  184. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/LICENSE +0 -0
  185. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/WHEEL +0 -0
  186. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/top_level.txt +0 -0
  187. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/zip-safe +0 -0
@@ -5,7 +5,7 @@ from PIL import Image
5
5
  from meerk40t.core.node.elem_path import PathNode
6
6
  from meerk40t.core.units import UNITS_PER_INCH
7
7
 
8
- # from meerk40t.gui.icons import icons8_image_50
8
+ # from meerk40t.gui.icons import icons8_image
9
9
  # from meerk40t.gui.mwindow import MWindow
10
10
  from meerk40t.gui.propertypanels.attributes import (
11
11
  IdPanel,
@@ -1260,8 +1260,9 @@ class ImagePropertyPanel(ScrolledPanel):
1260
1260
  # end wxGlade
1261
1261
 
1262
1262
  def node_update(self):
1263
- self.context.elements.emphasized()
1263
+ self.node.set_dirty_bounds()
1264
1264
  self.node.update(self.context)
1265
+ self.context.elements.emphasized()
1265
1266
  self.context.signal("element_property_update", self.node)
1266
1267
 
1267
1268
  def on_text_dpi(self):
@@ -1365,7 +1366,7 @@ class ImagePropertyPanel(ScrolledPanel):
1365
1366
  # self.add_module_delegate(panel)
1366
1367
  # # begin wxGlade: ImageProperty.__set_properties
1367
1368
  # _icon = wx.NullIcon
1368
- # _icon.CopyFromBitmap(icons8_image_50.GetBitmap())
1369
+ # _icon.CopyFromBitmap(icons8_image.GetBitmap())
1369
1370
  # self.SetIcon(_icon)
1370
1371
  # self.SetTitle(_("Image Properties"))
1371
1372
  # main_sizer.Add(notebook_main, 1, wx.EXPAND, 0)
@@ -38,7 +38,7 @@ class OpBranchPanel(wx.Panel):
38
38
  "default": 1,
39
39
  "type": int,
40
40
  "conditional": (self.operation, "loop_enabled"),
41
- "label": _("Loop"),
41
+ "label": _("Loops"),
42
42
  "trailing": _("times"),
43
43
  "tip": _("How many times should the operation job loop"),
44
44
  },
@@ -4,7 +4,7 @@ import wx
4
4
 
5
5
  from meerk40t.core.node.node import Node
6
6
  from meerk40t.core.units import UNITS_PER_INCH, Length
7
- from meerk40t.gui.icons import icons8_vector_50
7
+ from meerk40t.gui.icons import icons8_vector
8
8
  from meerk40t.gui.mwindow import MWindow
9
9
  from meerk40t.gui.propertypanels.attributes import (
10
10
  ColorPanel,
@@ -365,7 +365,7 @@ class PathProperty(MWindow):
365
365
  self.panel = PathPropertyPanel(self, wx.ID_ANY, context=self.context, node=node)
366
366
  self.add_module_delegate(self.panel)
367
367
  _icon = wx.NullIcon
368
- _icon.CopyFromBitmap(icons8_vector_50.GetBitmap())
368
+ _icon.CopyFromBitmap(icons8_vector.GetBitmap())
369
369
  self.SetIcon(_icon)
370
370
  # begin wxGlade: PathProperty.__set_properties
371
371
  self.SetTitle(_("Path Properties"))
@@ -2,7 +2,7 @@ import wx
2
2
 
3
3
  from meerk40t.gui.wxutils import ScrolledPanel
4
4
 
5
- from ..icons import icons8_vector_50
5
+ from ..icons import icons8_vector
6
6
  from ..mwindow import MWindow
7
7
  from .attributes import ColorPanel, IdPanel, PositionSizePanel, PreventChangePanel
8
8
 
@@ -121,7 +121,7 @@ class PointProperty(MWindow):
121
121
  )
122
122
  self.add_module_delegate(self.panel)
123
123
  _icon = wx.NullIcon
124
- _icon.CopyFromBitmap(icons8_vector_50.GetBitmap())
124
+ _icon.CopyFromBitmap(icons8_vector.GetBitmap())
125
125
  self.SetIcon(_icon)
126
126
  # begin wxGlade: PointProperty.__set_properties
127
127
  self.SetTitle(_("Point Properties"))
@@ -2,7 +2,7 @@ import wx
2
2
  from wx import aui
3
3
 
4
4
  from ...kernel import signal_listener
5
- from ..icons import icons8_computer_support_50
5
+ from ..icons import icons8_computer_support
6
6
  from ..mwindow import MWindow
7
7
 
8
8
  _ = wx.GetTranslation
@@ -13,7 +13,7 @@ class PropertyWindow(MWindow):
13
13
  super().__init__(598, 429, *args, **kwds)
14
14
 
15
15
  _icon = wx.NullIcon
16
- _icon.CopyFromBitmap(icons8_computer_support_50.GetBitmap())
16
+ _icon.CopyFromBitmap(icons8_computer_support.GetBitmap())
17
17
  self.SetIcon(_icon)
18
18
  # begin wxGlade: Navigation.__set_properties
19
19
  self.SetTitle(_("Properties"))
@@ -151,7 +151,7 @@ class PropertyWindow(MWindow):
151
151
  "button/preparation/Properties",
152
152
  {
153
153
  "label": _("Property Window"),
154
- "icon": icons8_computer_support_50,
154
+ "icon": icons8_computer_support,
155
155
  "tip": _("Opens Properties Window"),
156
156
  "action": lambda v: kernel.console("window toggle Properties\n"),
157
157
  "priority": 2,
@@ -161,7 +161,7 @@ class PropertyWindow(MWindow):
161
161
  "button/properties/Properties",
162
162
  {
163
163
  "label": _("Property Window"),
164
- "icon": icons8_computer_support_50,
164
+ "icon": icons8_computer_support,
165
165
  "tip": _("Opens Properties Window"),
166
166
  "action": lambda v: kernel.console("window toggle Properties\n"),
167
167
  },
@@ -7,7 +7,7 @@ from meerk40t.gui.laserrender import LaserRender
7
7
  from meerk40t.gui.wxutils import ScrolledPanel, StaticBoxSizer, dip_size
8
8
 
9
9
  from ...svgelements import Color
10
- from ..icons import STD_ICON_SIZE, icons8_choose_font_50, icons8_text_50
10
+ from ..icons import STD_ICON_SIZE, icons8_choose_font, icons8_text
11
11
  from ..laserrender import swizzlecolor
12
12
  from ..mwindow import MWindow
13
13
  from .attributes import ColorPanel, IdPanel, PositionSizePanel, PreventChangePanel
@@ -191,7 +191,7 @@ class TextPropertyPanel(ScrolledPanel):
191
191
  )
192
192
  )
193
193
  self.button_choose_font = wx.BitmapButton(
194
- self, wx.ID_ANY, icons8_choose_font_50.GetBitmap(resize=STD_ICON_SIZE / 2)
194
+ self, wx.ID_ANY, icons8_choose_font.GetBitmap(resize=STD_ICON_SIZE / 2)
195
195
  )
196
196
  self.panel_id = IdPanel(
197
197
  self, id=wx.ID_ANY, context=self.context, node=self.node
@@ -734,7 +734,7 @@ class TextProperty(MWindow):
734
734
  self.panel = TextPropertyPanel(self, wx.ID_ANY, context=self.context, node=node)
735
735
  self.add_module_delegate(self.panel)
736
736
  _icon = wx.NullIcon
737
- _icon.CopyFromBitmap(icons8_text_50.GetBitmap())
737
+ _icon.CopyFromBitmap(icons8_text.GetBitmap())
738
738
  self.SetIcon(_icon)
739
739
  # begin wxGlade: TextProperty.__set_properties
740
740
  self.SetTitle(_("Text Properties"))
@@ -0,0 +1,204 @@
1
+ import wx
2
+
3
+ from meerk40t.gui.wxutils import ScrolledPanel, StaticBoxSizer
4
+
5
+ from ...core.units import Length
6
+ from ..wxutils import TextCtrl, set_ctrl_value
7
+ from .attributes import ColorPanel, IdPanel
8
+
9
+ _ = wx.GetTranslation
10
+
11
+
12
+ class WobblePropertyPanel(ScrolledPanel):
13
+ def __init__(self, *args, context=None, node=None, **kwds):
14
+ # super().__init__(parent)
15
+ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
16
+ ScrolledPanel.__init__(self, *args, **kwds)
17
+ self.context = context
18
+ self.context.setting(
19
+ bool, "_auto_classify", self.context.elements.classify_on_color
20
+ )
21
+ self.node = node
22
+
23
+ self.operation = node
24
+
25
+ self.choices = [
26
+ {
27
+ "attr": "loop_continuous",
28
+ "object": self.operation,
29
+ "default": False,
30
+ "type": bool,
31
+ "label": _("Loop Continuously"),
32
+ "tip": _("Operation job will run forever in a loop"),
33
+ },
34
+ {
35
+ "attr": "loop_enabled",
36
+ "object": self.operation,
37
+ "default": False,
38
+ "type": bool,
39
+ "label": _("Loop Parameter"),
40
+ "tip": _("Operation job should run set number of times"),
41
+ },
42
+ {
43
+ "attr": "loop_n",
44
+ "object": self.operation,
45
+ "default": 1,
46
+ "type": int,
47
+ "conditional": (self.operation, "loop_enabled"),
48
+ "label": _("Loop"),
49
+ "trailing": _("times"),
50
+ "tip": _("How many times should the operation job loop"),
51
+ },
52
+ ]
53
+ # self.panel = ChoicePropertyPanel(
54
+ # self, wx.ID_ANY, context=context, choices=self.choices
55
+ # )
56
+
57
+ main_sizer = StaticBoxSizer(self, wx.ID_ANY, _("Wobble:"), wx.VERTICAL)
58
+
59
+ # `Id` at top in all cases...
60
+ panel_id = IdPanel(self, id=wx.ID_ANY, context=self.context, node=self.node)
61
+ main_sizer.Add(panel_id, 1, wx.EXPAND, 0)
62
+
63
+ panel_stroke = ColorPanel(
64
+ self,
65
+ id=wx.ID_ANY,
66
+ context=self.context,
67
+ label="Stroke:",
68
+ attribute="stroke",
69
+ callback=self.callback_color,
70
+ node=self.node,
71
+ )
72
+ main_sizer.Add(panel_stroke, 1, wx.EXPAND, 0)
73
+
74
+ sizer_radius = StaticBoxSizer(
75
+ self, wx.ID_ANY, _("Wobble Radius:"), wx.HORIZONTAL
76
+ )
77
+ main_sizer.Add(sizer_radius, 0, wx.EXPAND, 0)
78
+
79
+ self.text_radius = TextCtrl(
80
+ self,
81
+ wx.ID_ANY,
82
+ str(node.wobble_radius),
83
+ limited=True,
84
+ check="length",
85
+ style=wx.TE_PROCESS_ENTER,
86
+ )
87
+ sizer_radius.Add(self.text_radius, 1, wx.ALIGN_CENTER_VERTICAL, 0)
88
+
89
+ sizer_interval = StaticBoxSizer(
90
+ self, wx.ID_ANY, _("Wobble Interval:"), wx.HORIZONTAL
91
+ )
92
+ main_sizer.Add(sizer_interval, 0, wx.EXPAND, 0)
93
+
94
+ self.text_interval = TextCtrl(
95
+ self,
96
+ wx.ID_ANY,
97
+ str(node.wobble_interval),
98
+ limited=True,
99
+ check="length",
100
+ style=wx.TE_PROCESS_ENTER,
101
+ )
102
+ sizer_interval.Add(self.text_interval, 1, wx.ALIGN_CENTER_VERTICAL, 0)
103
+
104
+ sizer_fill = StaticBoxSizer(self, wx.ID_ANY, _("Fill Style"), wx.VERTICAL)
105
+ main_sizer.Add(sizer_fill, 6, wx.EXPAND, 0)
106
+
107
+ self.fills = list(self.context.match("wobble", suffix=True))
108
+ self.combo_fill_style = wx.ComboBox(
109
+ self, wx.ID_ANY, choices=self.fills, style=wx.CB_DROPDOWN | wx.CB_READONLY
110
+ )
111
+ sizer_fill.Add(self.combo_fill_style, 0, wx.EXPAND, 0)
112
+
113
+ self.check_classify = wx.CheckBox(
114
+ self, wx.ID_ANY, _("Immediately classify after colour change")
115
+ )
116
+ self.check_classify.SetValue(self.context._auto_classify)
117
+ main_sizer.Add(self.check_classify, 1, wx.EXPAND, 0)
118
+
119
+ self.SetSizer(main_sizer)
120
+
121
+ self.text_radius.SetActionRoutine(self.on_text_radius)
122
+ self.text_interval.SetActionRoutine(self.on_text_interval)
123
+
124
+ self.check_classify.Bind(wx.EVT_CHECKBOX, self.on_check_classify)
125
+
126
+ self.Bind(wx.EVT_COMBOBOX, self.on_combo_fill, self.combo_fill_style)
127
+
128
+ self.Layout()
129
+
130
+ def pane_hide(self):
131
+ pass
132
+
133
+ def pane_show(self):
134
+ pass
135
+
136
+ @staticmethod
137
+ def accepts(node):
138
+ return node.type in ("effect wobble",)
139
+
140
+ def set_widgets(self, node):
141
+ self.node = node
142
+ if self.node is None or not self.accepts(node):
143
+ self.Hide()
144
+ return
145
+ i = 0
146
+ for ht in self.fills:
147
+ if ht == self.node.wobble_type:
148
+ break
149
+ i += 1
150
+ if i == len(self.fills):
151
+ i = 0
152
+ self.combo_fill_style.SetSelection(i)
153
+ set_ctrl_value(self.text_interval, str(self.node.wobble_interval))
154
+ set_ctrl_value(self.text_radius, str(self.node.wobble_radius))
155
+ try:
156
+ h_angle = float(self.node.wobble_speed)
157
+ # self.slider_angle.SetValue(int(h_angle))
158
+ except ValueError:
159
+ pass
160
+ self.Show()
161
+
162
+ def on_check_classify(self, event):
163
+ self.context._auto_classify = self.check_classify.GetValue()
164
+
165
+ def update_label(self):
166
+ return
167
+
168
+ def callback_color(self):
169
+ self.node.altered()
170
+ self.update_label()
171
+ self.Refresh()
172
+ if self.check_classify.GetValue():
173
+ mynode = self.node
174
+ wasemph = self.node.emphasized
175
+ self.context("declassify\nclassify\n")
176
+ self.context.elements.signal("tree_changed")
177
+ self.context.elements.signal("element_property_update", self.node)
178
+ mynode.emphasized = wasemph
179
+ self.set_widgets(mynode)
180
+
181
+ def on_text_radius(self):
182
+ try:
183
+ dist = Length(self.text_radius.GetValue()).length_mm
184
+ if dist == self.node.radius:
185
+ return
186
+ self.node.radius = dist
187
+ self.node.modified()
188
+ except ValueError:
189
+ pass
190
+
191
+ def on_text_interval(self):
192
+ try:
193
+ dist = Length(self.text_interval.GetValue()).length_mm
194
+ if dist == self.node.interval:
195
+ return
196
+ self.node.interval = dist
197
+ self.node.modified()
198
+ except ValueError:
199
+ pass
200
+
201
+ def on_combo_fill(self, event): # wxGlade: HatchSettingsPanel.<event_handler>
202
+ wobble_type = self.fills[int(self.combo_fill_style.GetSelection())]
203
+ self.node.wobble_type = wobble_type
204
+ self.node.modified()