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.
- meerk40t/balormk/balor_params.py +1 -43
- meerk40t/balormk/controller.py +1 -41
- meerk40t/balormk/device.py +16 -22
- meerk40t/balormk/driver.py +4 -4
- meerk40t/balormk/gui/balorconfig.py +2 -2
- meerk40t/balormk/gui/balorcontroller.py +13 -5
- meerk40t/balormk/gui/baloroperationproperties.py +0 -46
- meerk40t/balormk/gui/gui.py +17 -17
- meerk40t/camera/gui/camerapanel.py +18 -11
- meerk40t/core/cutcode/rastercut.py +3 -1
- meerk40t/core/cutplan.py +145 -14
- meerk40t/core/elements/clipboard.py +18 -9
- meerk40t/core/elements/element_treeops.py +320 -180
- meerk40t/core/elements/element_types.py +7 -2
- meerk40t/core/elements/elements.py +53 -27
- meerk40t/core/elements/geometry.py +8 -0
- meerk40t/core/elements/offset_clpr.py +129 -4
- meerk40t/core/elements/offset_mk.py +3 -1
- meerk40t/core/elements/shapes.py +28 -25
- meerk40t/core/laserjob.py +7 -0
- meerk40t/core/node/bootstrap.py +4 -0
- meerk40t/core/node/effect_hatch.py +85 -96
- meerk40t/core/node/effect_wobble.py +309 -0
- meerk40t/core/node/elem_image.py +49 -19
- meerk40t/core/node/elem_line.py +60 -0
- meerk40t/core/node/elem_rect.py +5 -3
- meerk40t/core/node/image_processed.py +766 -0
- meerk40t/core/node/image_raster.py +113 -0
- meerk40t/core/node/node.py +120 -1
- meerk40t/core/node/op_cut.py +2 -8
- meerk40t/core/node/op_dots.py +0 -8
- meerk40t/core/node/op_engrave.py +2 -18
- meerk40t/core/node/op_image.py +22 -35
- meerk40t/core/node/op_raster.py +0 -9
- meerk40t/core/planner.py +32 -2
- meerk40t/core/svg_io.py +699 -461
- meerk40t/core/treeop.py +191 -0
- meerk40t/core/undos.py +15 -1
- meerk40t/core/units.py +14 -4
- meerk40t/device/dummydevice.py +3 -2
- meerk40t/device/gui/defaultactions.py +43 -55
- meerk40t/device/gui/formatterpanel.py +58 -49
- meerk40t/device/gui/warningpanel.py +12 -12
- meerk40t/device/mixins.py +13 -0
- meerk40t/dxf/dxf_io.py +9 -5
- meerk40t/extra/ezd.py +28 -26
- meerk40t/extra/imageactions.py +300 -308
- meerk40t/extra/lbrn.py +19 -2
- meerk40t/fill/fills.py +6 -6
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +2 -6
- meerk40t/grbl/controller.py +168 -52
- meerk40t/grbl/device.py +23 -18
- meerk40t/grbl/driver.py +39 -0
- meerk40t/grbl/emulator.py +79 -19
- meerk40t/grbl/gcodejob.py +10 -0
- meerk40t/grbl/gui/grblconfiguration.py +2 -2
- meerk40t/grbl/gui/grblcontroller.py +24 -8
- meerk40t/grbl/gui/grblhardwareconfig.py +153 -0
- meerk40t/grbl/gui/gui.py +17 -14
- meerk40t/grbl/mock_connection.py +15 -34
- meerk40t/grbl/plugin.py +0 -4
- meerk40t/grbl/serial_connection.py +2 -1
- meerk40t/gui/about.py +8 -5
- meerk40t/gui/alignment.py +10 -6
- meerk40t/gui/basicops.py +27 -17
- meerk40t/gui/bufferview.py +2 -2
- meerk40t/gui/choicepropertypanel.py +101 -13
- meerk40t/gui/consolepanel.py +12 -9
- meerk40t/gui/devicepanel.py +38 -25
- meerk40t/gui/executejob.py +6 -4
- meerk40t/gui/help_assets/help_assets.py +13 -10
- meerk40t/gui/hersheymanager.py +8 -6
- meerk40t/gui/icons.py +1951 -3065
- meerk40t/gui/imagesplitter.py +14 -7
- meerk40t/gui/keymap.py +3 -3
- meerk40t/gui/laserpanel.py +151 -84
- meerk40t/gui/laserrender.py +61 -70
- meerk40t/gui/lasertoolpanel.py +8 -7
- meerk40t/gui/materialtest.py +3 -3
- meerk40t/gui/mkdebug.py +254 -1
- meerk40t/gui/navigationpanels.py +321 -180
- meerk40t/gui/notes.py +3 -3
- meerk40t/gui/opassignment.py +12 -12
- meerk40t/gui/operation_info.py +13 -13
- meerk40t/gui/plugin.py +5 -0
- meerk40t/gui/position.py +20 -18
- meerk40t/gui/preferences.py +21 -6
- meerk40t/gui/propertypanels/attributes.py +70 -22
- meerk40t/gui/propertypanels/blobproperty.py +2 -2
- meerk40t/gui/propertypanels/consoleproperty.py +2 -2
- meerk40t/gui/propertypanels/groupproperties.py +3 -3
- meerk40t/gui/propertypanels/hatchproperty.py +11 -18
- meerk40t/gui/propertypanels/imageproperty.py +4 -3
- meerk40t/gui/propertypanels/opbranchproperties.py +1 -1
- meerk40t/gui/propertypanels/pathproperty.py +2 -2
- meerk40t/gui/propertypanels/pointproperty.py +2 -2
- meerk40t/gui/propertypanels/propertywindow.py +4 -4
- meerk40t/gui/propertypanels/textproperty.py +3 -3
- meerk40t/gui/propertypanels/wobbleproperty.py +204 -0
- meerk40t/gui/ribbon.py +367 -259
- meerk40t/gui/scene/scene.py +31 -5
- meerk40t/gui/scenewidgets/elementswidget.py +12 -4
- meerk40t/gui/scenewidgets/gridwidget.py +2 -2
- meerk40t/gui/scenewidgets/laserpathwidget.py +7 -2
- meerk40t/gui/scenewidgets/machineoriginwidget.py +6 -2
- meerk40t/gui/scenewidgets/relocatewidget.py +1 -1
- meerk40t/gui/scenewidgets/reticlewidget.py +9 -0
- meerk40t/gui/scenewidgets/selectionwidget.py +12 -7
- meerk40t/gui/simpleui.py +95 -8
- meerk40t/gui/simulation.py +44 -36
- meerk40t/gui/spoolerpanel.py +124 -26
- meerk40t/gui/statusbarwidgets/defaultoperations.py +18 -6
- meerk40t/gui/statusbarwidgets/infowidget.py +2 -2
- meerk40t/gui/statusbarwidgets/opassignwidget.py +12 -12
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +45 -18
- meerk40t/gui/statusbarwidgets/statusbar.py +11 -4
- meerk40t/gui/themes.py +78 -0
- meerk40t/gui/toolwidgets/toolcircle.py +2 -1
- meerk40t/gui/toolwidgets/toolellipse.py +2 -1
- meerk40t/gui/toolwidgets/toolimagecut.py +132 -0
- meerk40t/gui/toolwidgets/toolline.py +144 -0
- meerk40t/gui/toolwidgets/toolnodeedit.py +72 -145
- meerk40t/gui/toolwidgets/toolpoint.py +1 -1
- meerk40t/gui/toolwidgets/toolpolygon.py +8 -55
- meerk40t/gui/toolwidgets/toolrect.py +2 -1
- meerk40t/gui/usbconnect.py +2 -2
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +2 -2
- meerk40t/gui/utilitywidgets/harmonograph.py +7 -7
- meerk40t/gui/utilitywidgets/scalewidget.py +1 -1
- meerk40t/gui/wordlisteditor.py +33 -18
- meerk40t/gui/wxmeerk40t.py +166 -66
- meerk40t/gui/wxmmain.py +236 -157
- meerk40t/gui/wxmribbon.py +49 -25
- meerk40t/gui/wxmscene.py +49 -38
- meerk40t/gui/wxmtree.py +216 -85
- meerk40t/gui/wxutils.py +62 -4
- meerk40t/image/imagetools.py +443 -15
- meerk40t/internal_plugins.py +2 -10
- meerk40t/kernel/kernel.py +12 -4
- meerk40t/lihuiyu/controller.py +7 -7
- meerk40t/lihuiyu/device.py +3 -1
- meerk40t/lihuiyu/driver.py +3 -0
- meerk40t/lihuiyu/gui/gui.py +8 -8
- meerk40t/lihuiyu/gui/lhyaccelgui.py +2 -2
- meerk40t/lihuiyu/gui/lhycontrollergui.py +73 -27
- meerk40t/lihuiyu/gui/lhydrivergui.py +2 -2
- meerk40t/lihuiyu/gui/tcpcontroller.py +22 -9
- meerk40t/main.py +6 -1
- meerk40t/moshi/controller.py +5 -5
- meerk40t/moshi/device.py +5 -2
- meerk40t/moshi/driver.py +4 -0
- meerk40t/moshi/gui/gui.py +8 -8
- meerk40t/moshi/gui/moshicontrollergui.py +24 -8
- meerk40t/moshi/gui/moshidrivergui.py +2 -2
- meerk40t/newly/controller.py +2 -0
- meerk40t/newly/device.py +9 -2
- meerk40t/newly/driver.py +4 -0
- meerk40t/newly/gui/gui.py +16 -17
- meerk40t/newly/gui/newlyconfig.py +2 -2
- meerk40t/newly/gui/newlycontroller.py +13 -5
- meerk40t/rotary/gui/gui.py +2 -2
- meerk40t/rotary/gui/rotarysettings.py +2 -2
- meerk40t/ruida/device.py +3 -0
- meerk40t/ruida/driver.py +4 -0
- meerk40t/ruida/gui/gui.py +6 -6
- meerk40t/ruida/gui/ruidaconfig.py +2 -2
- meerk40t/ruida/gui/ruidacontroller.py +13 -5
- meerk40t/svgelements.py +9 -9
- meerk40t/tools/geomstr.py +849 -153
- meerk40t/tools/kerftest.py +8 -4
- meerk40t/tools/livinghinges.py +15 -8
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/METADATA +21 -16
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/RECORD +185 -177
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/entry_points.txt +0 -1
- test/test_core_elements.py +8 -24
- test/test_file_svg.py +88 -0
- test/test_fill.py +9 -9
- test/test_geomstr.py +258 -8
- test/test_kernel.py +4 -0
- test/test_tools_rasterplotter.py +29 -0
- meerk40t/extra/embroider.py +0 -56
- meerk40t/extra/pathoptimize.py +0 -249
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/LICENSE +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/WHEEL +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/top_level.txt +0 -0
- {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
|
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.
|
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(
|
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)
|
@@ -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
|
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(
|
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
|
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(
|
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
|
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(
|
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":
|
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":
|
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,
|
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,
|
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(
|
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()
|