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
@@ -1,4 +1,5 @@
1
1
  import platform
2
+ from copy import copy
2
3
  from math import isinf
3
4
  from time import time
4
5
 
@@ -11,39 +12,39 @@ from meerk40t.gui.icons import (
11
12
  STD_ICON_SIZE,
12
13
  EmptyIcon,
13
14
  get_default_icon_size,
15
+ icon_circled_1,
14
16
  icon_corner1,
15
17
  icon_corner2,
16
18
  icon_corner3,
17
19
  icon_corner4,
18
- icons8_center_of_gravity_50,
19
- icons8_compress_50,
20
- icons8_constraint_50,
21
- icons8_delete_50,
20
+ icon_fence_closed,
21
+ icon_fence_open,
22
+ icons8_caret_down,
23
+ icons8_caret_left,
24
+ icons8_caret_right,
25
+ icons8_caret_up,
26
+ icons8_center_of_gravity,
27
+ icons8_compress,
28
+ icons8_delete,
22
29
  icons8_down,
23
- icons8_down_50,
24
- icons8_down_left_50,
25
- icons8_down_right_50,
26
- icons8_enlarge_50,
27
- icons8_expansion_50,
28
- icons8_home_filled_50,
29
- icons8_laser_beam_52,
30
+ icons8_down_left,
31
+ icons8_down_right,
32
+ icons8_enlarge,
33
+ icons8_home_filled,
34
+ icons8_laser_beam,
30
35
  icons8_left,
31
- icons8_left_50,
32
- icons8_level_1_50,
33
- icons8_lock_50,
34
- icons8_move_50,
35
- icons8_padlock_50,
36
- icons8_pentagon_50,
37
- icons8_pentagon_square_50,
36
+ icons8_lock,
37
+ icons8_move,
38
+ icons8_pentagon,
39
+ icons8_pentagon_squared,
38
40
  icons8_right,
39
- icons8_right_50,
40
- icons8_rotate_left_50,
41
- icons8_rotate_right_50,
42
- icons8_square_border_50,
43
- icons8_up_50,
44
- icons8_up_left_50,
45
- icons8_up_right_50,
46
- icons8up,
41
+ icons8_rotate_left,
42
+ icons8_rotate_right,
43
+ icons8_square_border,
44
+ icons8_unlock,
45
+ icons8_up,
46
+ icons8_up_left,
47
+ icons8_up_right,
47
48
  )
48
49
  from meerk40t.gui.mwindow import MWindow
49
50
  from meerk40t.gui.position import PositionPanel
@@ -55,7 +56,7 @@ _ = wx.GetTranslation
55
56
 
56
57
 
57
58
  def register_panel_navigation(window, context):
58
- panel = Drag(window, wx.ID_ANY, context=context)
59
+ dragpanel = Drag(window, wx.ID_ANY, context=context)
59
60
  iconsize = get_default_icon_size()
60
61
  if platform.system() == "Windows":
61
62
  dx = 24
@@ -76,12 +77,18 @@ def register_panel_navigation(window, context):
76
77
  .Hide()
77
78
  )
78
79
  pane.dock_proportion = 3 * iconsize + dx
79
- pane.control = panel
80
+ pane.control = dragpanel
81
+
82
+ def on_drag_resize(event):
83
+ panelsize = event.GetSize()
84
+ dragpanel.set_icons(dimension=panelsize)
85
+
86
+ dragpanel.Bind(wx.EVT_SIZE, on_drag_resize)
80
87
  pane.submenu = "_20_" + _("Navigation")
81
88
 
82
89
  window.on_pane_create(pane)
83
90
  context.register("pane/drag", pane)
84
- panel = Jog(window, wx.ID_ANY, context=context)
91
+ jogpanel = Jog(window, wx.ID_ANY, context=context)
85
92
  pane = (
86
93
  aui.AuiPaneInfo()
87
94
  .Right()
@@ -95,7 +102,13 @@ def register_panel_navigation(window, context):
95
102
  .CaptionVisible(not context.pane_lock)
96
103
  )
97
104
  pane.dock_proportion = 3 * iconsize + dx
98
- pane.control = panel
105
+ pane.control = jogpanel
106
+
107
+ def on_jog_resize(event):
108
+ panelsize = event.GetSize()
109
+ jogpanel.set_icons(dimension=panelsize)
110
+
111
+ jogpanel.Bind(wx.EVT_SIZE, on_jog_resize)
99
112
  pane.submenu = "_20_" + _("Navigation")
100
113
 
101
114
  window.on_pane_create(pane)
@@ -373,50 +386,29 @@ class TimerButtons:
373
386
 
374
387
 
375
388
  class Drag(wx.Panel):
376
- def __init__(self, *args, context=None, icon_size=None, **kwds):
389
+ def __init__(self, *args, context=None, **kwds):
377
390
  # begin wxGlade: Drag.__init__
378
391
  kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
379
392
  wx.Panel.__init__(self, *args, **kwds)
380
393
  self.context = context
381
- self.button_align_corner_top_left = wx.BitmapButton(
382
- self, wx.ID_ANY, icon_corner1.GetBitmap(resize=icon_size)
383
- )
384
- self.button_align_drag_up = wx.BitmapButton(
385
- self, wx.ID_ANY, icons8up.GetBitmap(resize=icon_size)
386
- )
387
- self.button_align_corner_top_right = wx.BitmapButton(
388
- self, wx.ID_ANY, icon_corner2.GetBitmap(resize=icon_size)
389
- )
390
- self.button_align_drag_left = wx.BitmapButton(
391
- self, wx.ID_ANY, icons8_left.GetBitmap(resize=icon_size)
392
- )
393
- self.button_align_center = wx.BitmapButton(
394
- self, wx.ID_ANY, icons8_square_border_50.GetBitmap(resize=icon_size)
395
- )
396
- self.button_align_drag_right = wx.BitmapButton(
397
- self, wx.ID_ANY, icons8_right.GetBitmap(resize=icon_size)
398
- )
399
- self.button_align_corner_bottom_left = wx.BitmapButton(
400
- self, wx.ID_ANY, icon_corner4.GetBitmap(resize=icon_size)
401
- )
402
- self.button_align_drag_down = wx.BitmapButton(
403
- self, wx.ID_ANY, icons8_down.GetBitmap(resize=icon_size)
404
- )
405
- self.button_align_corner_bottom_right = wx.BitmapButton(
406
- self, wx.ID_ANY, icon_corner3.GetBitmap(resize=icon_size)
407
- )
408
- self.button_align_first_position = wx.BitmapButton(
409
- self, wx.ID_ANY, icons8_level_1_50.GetBitmap(resize=icon_size)
410
- )
411
- self.button_align_trace_hull = wx.BitmapButton(
412
- self, wx.ID_ANY, icons8_pentagon_50.GetBitmap(resize=icon_size)
413
- )
414
- self.button_align_trace_quick = wx.BitmapButton(
415
- self, wx.ID_ANY, icons8_pentagon_square_50.GetBitmap(resize=icon_size)
416
- )
394
+ self.icon_size = None
395
+ self.resolution = 5
396
+ self.button_align_corner_top_left = wx.BitmapButton(self, wx.ID_ANY)
397
+ self.button_align_drag_up = wx.BitmapButton(self, wx.ID_ANY)
398
+ self.button_align_corner_top_right = wx.BitmapButton(self, wx.ID_ANY)
399
+ self.button_align_drag_left = wx.BitmapButton(self, wx.ID_ANY)
400
+ self.button_align_center = wx.BitmapButton(self, wx.ID_ANY)
401
+ self.button_align_drag_right = wx.BitmapButton(self, wx.ID_ANY)
402
+ self.button_align_corner_bottom_left = wx.BitmapButton(self, wx.ID_ANY)
403
+ self.button_align_drag_down = wx.BitmapButton(self, wx.ID_ANY)
404
+ self.button_align_corner_bottom_right = wx.BitmapButton(self, wx.ID_ANY)
405
+ self.button_align_first_position = wx.BitmapButton(self, wx.ID_ANY)
406
+ self.button_align_trace_hull = wx.BitmapButton(self, wx.ID_ANY)
407
+ self.button_align_trace_quick = wx.BitmapButton(self, wx.ID_ANY)
417
408
  self.bg_color = self.button_align_corner_top_left.BackgroundColour
418
409
  self.__set_properties()
419
410
  self.__do_layout()
411
+ # self.set_icons(iconsize=25)
420
412
 
421
413
  self.timer = TimerButtons(self)
422
414
  self.timer.add_button(self.button_align_drag_left, self.drag_left)
@@ -474,6 +466,9 @@ class Drag(wx.Panel):
474
466
  wx.EVT_RIGHT_DOWN, self.on_button_lock_br
475
467
  )
476
468
  self.button_align_center.Bind(wx.EVT_RIGHT_DOWN, self.on_button_lock_center)
469
+ self.button_align_first_position.Bind(
470
+ wx.EVT_BUTTON, self.on_button_align_first_position
471
+ )
477
472
 
478
473
  # end wxGlade
479
474
  self.elements = None
@@ -553,6 +548,7 @@ class Drag(wx.Panel):
553
548
 
554
549
  def __do_layout(self):
555
550
  # begin wxGlade: Drag.__do_layout
551
+ self.navigation_sizer = wx.BoxSizer(wx.VERTICAL)
556
552
  align_sizer = wx.FlexGridSizer(4, 3, 0, 0)
557
553
  align_sizer.Add(self.button_align_corner_top_left, 0, 0, 0)
558
554
  align_sizer.Add(self.button_align_drag_up, 0, 0, 0)
@@ -566,11 +562,67 @@ class Drag(wx.Panel):
566
562
  align_sizer.Add(self.button_align_first_position, 0, 0, 0)
567
563
  align_sizer.Add(self.button_align_trace_hull, 0, 0, 0)
568
564
  align_sizer.Add(self.button_align_trace_quick, 0, 0, 0)
569
- self.SetSizer(align_sizer)
570
- align_sizer.Fit(self)
565
+ self.navigation_sizer.Add(align_sizer, 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
566
+ self.SetSizer(self.navigation_sizer)
567
+ self.navigation_sizer.Fit(self)
571
568
  self.Layout()
572
569
  # end wxGlade
573
570
 
571
+ def set_icons(self, iconsize=None, dimension=None):
572
+ if iconsize is None and dimension is not None:
573
+ dim_x = int(dimension[0] / 3) - 8
574
+ dim_y = int(dimension[1] / 4) - 8
575
+ iconsize = max(15, min(dim_x, dim_y))
576
+ self.icon_size = iconsize
577
+ self.button_align_corner_top_left.SetBitmap(
578
+ icon_corner1.GetBitmap(resize=self.icon_size, resolution=self.resolution)
579
+ )
580
+ self.button_align_drag_up.SetBitmap(
581
+ icons8_caret_up.GetBitmap(resize=self.icon_size, resolution=self.resolution)
582
+ )
583
+ self.button_align_corner_top_right.SetBitmap(
584
+ icon_corner2.GetBitmap(resize=self.icon_size, resolution=self.resolution)
585
+ )
586
+ self.button_align_drag_left.SetBitmap(
587
+ icons8_caret_left.GetBitmap(
588
+ resize=self.icon_size, resolution=self.resolution
589
+ )
590
+ )
591
+ self.button_align_center.SetBitmap(
592
+ icons8_square_border.GetBitmap(
593
+ resize=self.icon_size, resolution=self.resolution
594
+ )
595
+ )
596
+ self.button_align_drag_right.SetBitmap(
597
+ icons8_caret_right.GetBitmap(
598
+ resize=self.icon_size, resolution=self.resolution
599
+ )
600
+ )
601
+ self.button_align_corner_bottom_left.SetBitmap(
602
+ icon_corner4.GetBitmap(resize=self.icon_size, resolution=self.resolution)
603
+ )
604
+ self.button_align_drag_down.SetBitmap(
605
+ icons8_caret_down.GetBitmap(
606
+ resize=self.icon_size, resolution=self.resolution
607
+ )
608
+ )
609
+ self.button_align_corner_bottom_right.SetBitmap(
610
+ icon_corner3.GetBitmap(resize=self.icon_size, resolution=self.resolution)
611
+ )
612
+ self.button_align_first_position.SetBitmap(
613
+ icon_circled_1.GetBitmap(resize=self.icon_size, resolution=self.resolution)
614
+ )
615
+ self.button_align_trace_hull.SetBitmap(
616
+ icons8_pentagon.GetBitmap(resize=self.icon_size, resolution=self.resolution)
617
+ )
618
+ self.button_align_trace_quick.SetBitmap(
619
+ icons8_pentagon_squared.GetBitmap(
620
+ resize=self.icon_size, resolution=self.resolution
621
+ )
622
+ )
623
+ self.navigation_sizer.Layout()
624
+ self.Layout()
625
+
574
626
  @property
575
627
  def lockmode(self):
576
628
  return self._current_lockmode
@@ -723,22 +775,38 @@ class Drag(wx.Panel):
723
775
  self.context(f"move_relative {nx} {ny}\ntranslate {nx} {ny}\n")
724
776
 
725
777
  def on_button_align_first_position(self, event=None):
778
+ first_node = None
726
779
  elements = self.context.elements
727
780
  e = list(elements.elems(emphasized=True))
728
- first_node = e[0]
729
- if first_node.type == "elem path":
730
- try:
731
- pos = first_node.path.first_point * first_node.matrix
732
- except (IndexError, AttributeError):
733
- return
781
+ if len(e) == 0:
782
+ for n in elements.elems():
783
+ first_node = n
784
+ break
785
+ else:
786
+ first_node = e[0]
787
+ if first_node is None:
788
+ return
789
+ if hasattr(first_node, "as_geometry"):
790
+ g = first_node.as_geometry()
791
+ pt = g.first_point
792
+ pos = (pt.real, pt.imag)
793
+ # try:
794
+ # g = first_node.as_geometry()
795
+ # pos = g.first_point
796
+ # except (IndexError, AttributeError):
797
+ # return
734
798
  elif first_node.type == "elem image":
735
- try:
736
- pos = (
737
- first_node.matrix.value_trans_x(),
738
- first_node.matrix.value_trans_y(),
739
- )
740
- except (IndexError, AttributeError):
741
- return
799
+ pos = (
800
+ first_node.matrix.value_trans_x(),
801
+ first_node.matrix.value_trans_y(),
802
+ )
803
+ # try:
804
+ # pos = (
805
+ # first_node.matrix.value_trans_x(),
806
+ # first_node.matrix.value_trans_y(),
807
+ # )
808
+ # except (IndexError, AttributeError):
809
+ # return
742
810
  else:
743
811
  return
744
812
  self.context(
@@ -820,7 +888,7 @@ class Drag(wx.Panel):
820
888
 
821
889
 
822
890
  class Jog(wx.Panel):
823
- def __init__(self, *args, context=None, icon_size=None, **kwds):
891
+ def __init__(self, *args, context=None, **kwds):
824
892
  # begin wxGlade: Jog.__init__
825
893
  kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
826
894
 
@@ -829,42 +897,20 @@ class Jog(wx.Panel):
829
897
  context.setting(float, "button_repeat", 0.5)
830
898
  context.setting(bool, "button_accelerate", True)
831
899
  context.setting(str, "jog_amount", "10mm")
832
- self.button_navigate_up_left = wx.BitmapButton(
833
- self, wx.ID_ANY, icons8_up_left_50.GetBitmap(resize=icon_size)
834
- )
835
- self.button_navigate_up = wx.BitmapButton(
836
- self, wx.ID_ANY, icons8_up_50.GetBitmap(resize=icon_size)
837
- )
838
- self.button_navigate_up_right = wx.BitmapButton(
839
- self, wx.ID_ANY, icons8_up_right_50.GetBitmap(resize=icon_size)
840
- )
841
- self.button_navigate_left = wx.BitmapButton(
842
- self, wx.ID_ANY, icons8_left_50.GetBitmap(resize=icon_size)
843
- )
844
- self.button_navigate_home = wx.BitmapButton(
845
- self, wx.ID_ANY, icons8_home_filled_50.GetBitmap(resize=icon_size)
846
- )
847
- self.button_navigate_right = wx.BitmapButton(
848
- self, wx.ID_ANY, icons8_right_50.GetBitmap(resize=icon_size)
849
- )
850
- self.button_navigate_down_left = wx.BitmapButton(
851
- self, wx.ID_ANY, icons8_down_left_50.GetBitmap(resize=icon_size)
852
- )
853
- self.button_navigate_down = wx.BitmapButton(
854
- self, wx.ID_ANY, icons8_down_50.GetBitmap(resize=icon_size)
855
- )
856
- self.button_navigate_down_right = wx.BitmapButton(
857
- self, wx.ID_ANY, icons8_down_right_50.GetBitmap(resize=icon_size)
858
- )
859
- self.button_navigate_unlock = wx.BitmapButton(
860
- self, wx.ID_ANY, icons8_padlock_50.GetBitmap(resize=icon_size)
861
- )
862
- self.button_navigate_lock = wx.BitmapButton(
863
- self, wx.ID_ANY, icons8_lock_50.GetBitmap(resize=icon_size)
864
- )
865
- self.button_confine = wx.BitmapButton(
866
- self, wx.ID_ANY, icons8_constraint_50.GetBitmap(resize=icon_size)
867
- )
900
+ self.icon_size = None
901
+ self.resolution = 5
902
+ self.button_navigate_up_left = wx.BitmapButton(self, wx.ID_ANY)
903
+ self.button_navigate_up = wx.BitmapButton(self, wx.ID_ANY)
904
+ self.button_navigate_up_right = wx.BitmapButton(self, wx.ID_ANY)
905
+ self.button_navigate_left = wx.BitmapButton(self, wx.ID_ANY)
906
+ self.button_navigate_home = wx.BitmapButton(self, wx.ID_ANY)
907
+ self.button_navigate_right = wx.BitmapButton(self, wx.ID_ANY)
908
+ self.button_navigate_down_left = wx.BitmapButton(self, wx.ID_ANY)
909
+ self.button_navigate_down = wx.BitmapButton(self, wx.ID_ANY)
910
+ self.button_navigate_down_right = wx.BitmapButton(self, wx.ID_ANY)
911
+ self.button_navigate_unlock = wx.BitmapButton(self, wx.ID_ANY)
912
+ self.button_navigate_lock = wx.BitmapButton(self, wx.ID_ANY)
913
+ self.button_confine = wx.BitmapButton(self, wx.ID_ANY)
868
914
  self.__set_properties()
869
915
  self.__do_layout()
870
916
 
@@ -943,23 +989,77 @@ class Jog(wx.Panel):
943
989
 
944
990
  def __do_layout(self):
945
991
  # begin wxGlade: Jog.__do_layout
946
- navigation_sizer = wx.FlexGridSizer(4, 3, 0, 0)
947
- navigation_sizer.Add(self.button_navigate_up_left, 0, 0, 0)
948
- navigation_sizer.Add(self.button_navigate_up, 0, 0, 0)
949
- navigation_sizer.Add(self.button_navigate_up_right, 0, 0, 0)
950
- navigation_sizer.Add(self.button_navigate_left, 0, 0, 0)
951
- navigation_sizer.Add(self.button_navigate_home, 0, 0, 0)
952
- navigation_sizer.Add(self.button_navigate_right, 0, 0, 0)
953
- navigation_sizer.Add(self.button_navigate_down_left, 0, 0, 0)
954
- navigation_sizer.Add(self.button_navigate_down, 0, 0, 0)
955
- navigation_sizer.Add(self.button_navigate_down_right, 0, 0, 0)
956
- navigation_sizer.Add(self.button_navigate_unlock, 0, 0, 0)
957
- navigation_sizer.Add(self.button_confine, 0, 0, 0)
958
- navigation_sizer.Add(self.button_navigate_lock, 0, 0, 0)
959
- self.SetSizer(navigation_sizer)
960
- navigation_sizer.Fit(self)
992
+ self.navigation_sizer = wx.BoxSizer(wx.VERTICAL)
993
+ button_sizer = wx.FlexGridSizer(4, 3, 0, 0)
994
+ button_sizer.Add(self.button_navigate_up_left, 0, 0, 0)
995
+ button_sizer.Add(self.button_navigate_up, 0, 0, 0)
996
+ button_sizer.Add(self.button_navigate_up_right, 0, 0, 0)
997
+ button_sizer.Add(self.button_navigate_left, 0, 0, 0)
998
+ button_sizer.Add(self.button_navigate_home, 0, 0, 0)
999
+ button_sizer.Add(self.button_navigate_right, 0, 0, 0)
1000
+ button_sizer.Add(self.button_navigate_down_left, 0, 0, 0)
1001
+ button_sizer.Add(self.button_navigate_down, 0, 0, 0)
1002
+ button_sizer.Add(self.button_navigate_down_right, 0, 0, 0)
1003
+ button_sizer.Add(self.button_navigate_unlock, 0, 0, 0)
1004
+ button_sizer.Add(self.button_confine, 0, 0, 0)
1005
+ button_sizer.Add(self.button_navigate_lock, 0, 0, 0)
1006
+ self.navigation_sizer.Add(button_sizer, 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
1007
+ self.SetSizer(self.navigation_sizer)
1008
+ self.navigation_sizer.Fit(self)
1009
+ self.Layout()
1010
+
1011
+ def set_icons(self, iconsize=None, dimension=None):
1012
+ if iconsize is None and dimension is not None:
1013
+ dim_x = int(dimension[0] / 3) - 8
1014
+ dim_y = int(dimension[1] / 4) - 8
1015
+ iconsize = max(15, min(dim_x, dim_y))
1016
+ self.icon_size = iconsize
1017
+ self.button_navigate_up_left.SetBitmap(
1018
+ icons8_up_left.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1019
+ )
1020
+ self.button_navigate_up.SetBitmap(
1021
+ icons8_up.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1022
+ )
1023
+ self.button_navigate_up_right.SetBitmap(
1024
+ icons8_up_right.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1025
+ )
1026
+ self.button_navigate_left.SetBitmap(
1027
+ icons8_left.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1028
+ )
1029
+ self.button_navigate_home.SetBitmap(
1030
+ icons8_home_filled.GetBitmap(
1031
+ resize=self.icon_size, resolution=self.resolution
1032
+ )
1033
+ )
1034
+ self.button_navigate_right.SetBitmap(
1035
+ icons8_right.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1036
+ )
1037
+ self.button_navigate_down_left.SetBitmap(
1038
+ icons8_down_left.GetBitmap(
1039
+ resize=self.icon_size, resolution=self.resolution
1040
+ )
1041
+ )
1042
+ self.button_navigate_down.SetBitmap(
1043
+ icons8_down.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1044
+ )
1045
+ self.button_navigate_down_right.SetBitmap(
1046
+ icons8_down_right.GetBitmap(
1047
+ resize=self.icon_size, resolution=self.resolution
1048
+ )
1049
+ )
1050
+ self.button_navigate_unlock.SetBitmap(
1051
+ icons8_unlock.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1052
+ )
1053
+ self.button_navigate_lock.SetBitmap(
1054
+ icons8_lock.GetBitmap(resize=self.icon_size, resolution=self.resolution)
1055
+ )
1056
+ self.button_confine.SetBitmap(
1057
+ icon_fence_closed.GetBitmap(
1058
+ resize=self.icon_size, resolution=self.resolution
1059
+ )
1060
+ )
1061
+ self.navigation_sizer.Layout()
961
1062
  self.Layout()
962
- # end wxGlade
963
1063
 
964
1064
  def jog_left(self):
965
1065
  p1 = f"-{self.context.jog_amount}"
@@ -1017,13 +1117,21 @@ class Jog(wx.Panel):
1017
1117
 
1018
1118
  _confined = value
1019
1119
  if value == 0:
1020
- self.button_confine.SetBitmap(icons8_expansion_50.GetBitmap())
1120
+ self.button_confine.SetBitmap(
1121
+ icon_fence_open.GetBitmap(
1122
+ resize=self.icon_size, resolution=self.resolution
1123
+ )
1124
+ )
1021
1125
  self.button_confine.SetToolTip(
1022
1126
  _("Caution: allow laser movement outside bed size")
1023
1127
  )
1024
1128
  # self.context("confine 0")
1025
1129
  else:
1026
- self.button_confine.SetBitmap(icons8_constraint_50.GetBitmap())
1130
+ self.button_confine.SetBitmap(
1131
+ icon_fence_closed.GetBitmap(
1132
+ resize=self.icon_size, resolution=self.resolution
1133
+ )
1134
+ )
1027
1135
  self.button_confine.SetToolTip(_("Limit laser movement to bed size"))
1028
1136
  # self.context("confine 1")
1029
1137
 
@@ -1116,8 +1224,9 @@ class MovePanel(wx.Panel):
1116
1224
  kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
1117
1225
  wx.Panel.__init__(self, *args, **kwds)
1118
1226
  self.context = context
1227
+ iconsize = 0.5 * get_default_icon_size()
1119
1228
  self.button_navigate_move_to = wx.BitmapButton(
1120
- self, wx.ID_ANY, icons8_center_of_gravity_50.GetBitmap(resize=32)
1229
+ self, wx.ID_ANY, icons8_center_of_gravity.GetBitmap(resize=iconsize)
1121
1230
  )
1122
1231
  units = self.context.units_name
1123
1232
  if units in ("inch", "inches"):
@@ -1370,8 +1479,9 @@ class PulsePanel(wx.Panel):
1370
1479
  kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
1371
1480
  wx.Panel.__init__(self, *args, **kwds)
1372
1481
  self.context = context
1482
+ iconsize = 0.5 * get_default_icon_size()
1373
1483
  self.button_navigate_pulse = wx.BitmapButton(
1374
- self, wx.ID_ANY, icons8_laser_beam_52.GetBitmap(resize=32)
1484
+ self, wx.ID_ANY, icons8_laser_beam.GetBitmap(resize=iconsize)
1375
1485
  )
1376
1486
  self.spin_pulse_duration = wx.SpinCtrl(
1377
1487
  self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER, value="50", min=1, max=1000
@@ -1437,7 +1547,7 @@ class PulsePanel(wx.Panel):
1437
1547
  # self, wx.ID_ANY, _("Object Dimensions"), wx.HORIZONTAL
1438
1548
  # )
1439
1549
  # self.button_navigate_resize = wx.BitmapButton(
1440
- # self, wx.ID_ANY, icons8_compress_50.GetBitmap(resize=32)
1550
+ # self, wx.ID_ANY, icons8_compress.GetBitmap(resize=32)
1441
1551
  # )
1442
1552
  # self.label_9 = wx.StaticText(self, wx.ID_ANY, _("Width:"))
1443
1553
  # self.label_10 = wx.StaticText(self, wx.ID_ANY, _("Height:"))
@@ -1459,8 +1569,8 @@ class PulsePanel(wx.Panel):
1459
1569
  # nonzero=True,
1460
1570
  # )
1461
1571
  # self.btn_lock_ratio = wx.ToggleButton(self, wx.ID_ANY, "")
1462
- # self.bitmap_locked = icons8_lock_50.GetBitmap(resize=STD_ICON_SIZE/2, use_theme=False)
1463
- # self.bitmap_unlocked = icons8_padlock_50.GetBitmap(resize=STD_ICON_SIZE/2, use_theme=False)
1572
+ # self.bitmap_locked = icons8_lock.GetBitmap(resize=STD_ICON_SIZE/2, use_theme=False)
1573
+ # self.bitmap_unlocked = icons8_unlock.GetBitmap(resize=STD_ICON_SIZE/2, use_theme=False)
1464
1574
 
1465
1575
  # # No change of fields during input
1466
1576
  # # self.text_height.execute_action_on_change = False
@@ -1672,33 +1782,17 @@ class Transform(wx.Panel):
1672
1782
  kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL
1673
1783
  wx.Panel.__init__(self, *args, **kwds)
1674
1784
  self.context = context
1675
- self.button_scale_down = wx.BitmapButton(
1676
- self, wx.ID_ANY, icons8_compress_50.GetBitmap()
1677
- )
1678
- self.button_translate_up = wx.BitmapButton(
1679
- self, wx.ID_ANY, icons8_up_50.GetBitmap()
1680
- )
1681
- self.button_scale_up = wx.BitmapButton(
1682
- self, wx.ID_ANY, icons8_enlarge_50.GetBitmap()
1683
- )
1684
- self.button_translate_left = wx.BitmapButton(
1685
- self, wx.ID_ANY, icons8_left_50.GetBitmap()
1686
- )
1687
- self.button_reset = wx.BitmapButton(
1688
- self, wx.ID_ANY, icons8_delete_50.GetBitmap()
1689
- )
1690
- self.button_translate_right = wx.BitmapButton(
1691
- self, wx.ID_ANY, icons8_right_50.GetBitmap()
1692
- )
1693
- self.button_rotate_ccw = wx.BitmapButton(
1694
- self, wx.ID_ANY, icons8_rotate_left_50.GetBitmap()
1695
- )
1696
- self.button_translate_down = wx.BitmapButton(
1697
- self, wx.ID_ANY, icons8_down_50.GetBitmap()
1698
- )
1699
- self.button_rotate_cw = wx.BitmapButton(
1700
- self, wx.ID_ANY, icons8_rotate_right_50.GetBitmap()
1701
- )
1785
+ self.icon_size = None
1786
+ self.resolution = 5
1787
+ self.button_scale_down = wx.BitmapButton(self, wx.ID_ANY)
1788
+ self.button_translate_up = wx.BitmapButton(self, wx.ID_ANY)
1789
+ self.button_scale_up = wx.BitmapButton(self, wx.ID_ANY)
1790
+ self.button_translate_left = wx.BitmapButton(self, wx.ID_ANY)
1791
+ self.button_reset = wx.BitmapButton(self, wx.ID_ANY)
1792
+ self.button_translate_right = wx.BitmapButton(self, wx.ID_ANY)
1793
+ self.button_rotate_ccw = wx.BitmapButton(self, wx.ID_ANY)
1794
+ self.button_translate_down = wx.BitmapButton(self, wx.ID_ANY)
1795
+ self.button_rotate_cw = wx.BitmapButton(self, wx.ID_ANY)
1702
1796
  self.text_a = TextCtrl(
1703
1797
  self,
1704
1798
  wx.ID_ANY,
@@ -1912,6 +2006,45 @@ class Transform(wx.Panel):
1912
2006
  self.Layout()
1913
2007
  # end wxGlade
1914
2008
 
2009
+ def set_icons(self, iconsize=None, dimension=None):
2010
+ if iconsize is None and dimension is not None:
2011
+ dim_x = int(dimension[0] / 3) - 8
2012
+ dim_y = int(dimension[1] / 4) - 8
2013
+ iconsize = max(15, min(dim_x, dim_y))
2014
+ self.icon_size = iconsize
2015
+ self.button_scale_down.SetBitmap(
2016
+ icons8_compress.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2017
+ )
2018
+ self.button_translate_up.SetBitmap(
2019
+ icons8_up.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2020
+ )
2021
+ self.button_scale_up.SetBitmap(
2022
+ icons8_enlarge.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2023
+ )
2024
+ self.button_translate_left.SetBitmap(
2025
+ icons8_left.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2026
+ )
2027
+ self.button_reset.SetBitmap(
2028
+ icons8_delete.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2029
+ )
2030
+ self.button_translate_right.SetBitmap(
2031
+ icons8_right.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2032
+ )
2033
+ self.button_rotate_ccw.SetBitmap(
2034
+ icons8_rotate_left.GetBitmap(
2035
+ resize=self.icon_size, resolution=self.resolution
2036
+ )
2037
+ )
2038
+ self.button_translate_down.SetBitmap(
2039
+ icons8_down.GetBitmap(resize=self.icon_size, resolution=self.resolution)
2040
+ )
2041
+ self.button_rotate_cw.SetBitmap(
2042
+ icons8_rotate_right.GetBitmap(
2043
+ resize=self.icon_size, resolution=self.resolution
2044
+ )
2045
+ )
2046
+ self.Layout()
2047
+
1915
2048
  def pane_show(self, *args):
1916
2049
  self.context.listen("emphasized", self.on_emphasized_elements_changed)
1917
2050
  self.context.listen("modified", self.on_modified_element)
@@ -2235,15 +2368,15 @@ class NavigationPanel(wx.Panel):
2235
2368
  jogdistancepanel = JogDistancePanel(self, wx.ID_ANY, context=self.context)
2236
2369
  main_sizer.Add(jogdistancepanel, 0, wx.EXPAND, 0)
2237
2370
 
2238
- navigationpanel = Jog(self, wx.ID_ANY, context=self.context)
2239
- main_panels_sizer.Add(navigationpanel, 1, wx.EXPAND, 0)
2371
+ jogpanel = Jog(self, wx.ID_ANY, context=self.context)
2372
+ main_panels_sizer.Add(jogpanel, 1, wx.EXPAND, 0)
2240
2373
 
2241
- alignpanel = Drag(self, wx.ID_ANY, context=self.context)
2242
- main_panels_sizer.Add(alignpanel, 1, wx.EXPAND, 0)
2374
+ dragpanel = Drag(self, wx.ID_ANY, context=self.context)
2375
+ main_panels_sizer.Add(dragpanel, 1, wx.EXPAND, 0)
2243
2376
 
2244
2377
  transformpanel = Transform(self, wx.ID_ANY, context=self.context)
2245
2378
 
2246
- main_panels_sizer.Add(transformpanel, 0, 0, 0)
2379
+ main_panels_sizer.Add(transformpanel, 1, wx.EXPAND, 0)
2247
2380
  main_sizer.Add(main_panels_sizer, 0, wx.EXPAND, 0)
2248
2381
 
2249
2382
  short_pulse = PulsePanel(self, wx.ID_ANY, context=self.context)
@@ -2260,14 +2393,22 @@ class NavigationPanel(wx.Panel):
2260
2393
  self.Layout()
2261
2394
  self.panels = [
2262
2395
  jogdistancepanel,
2263
- navigationpanel,
2264
- alignpanel,
2396
+ jogpanel,
2397
+ dragpanel,
2265
2398
  transformpanel,
2266
2399
  short_pulse,
2267
2400
  move_panel,
2268
2401
  size_panel,
2269
2402
  ]
2270
- # end wxGlade
2403
+ self.Bind(wx.EVT_SIZE, self.on_resize)
2404
+
2405
+ def on_resize(self, event):
2406
+ wb_size = event.GetSize()
2407
+ panel_size = (wb_size[0] / 3, wb_size[1])
2408
+ for panel in self.panels:
2409
+ if hasattr(panel, "set_icons"):
2410
+ panel.set_icons(dimension=panel_size)
2411
+ self.Layout()
2271
2412
 
2272
2413
  def pane_show(self):
2273
2414
  for p in self.panels:
@@ -2290,13 +2431,13 @@ class Navigation(MWindow):
2290
2431
 
2291
2432
  self.panel = NavigationPanel(self, wx.ID_ANY, context=self.context)
2292
2433
  self.add_module_delegate(self.panel)
2293
- iconsize = get_default_icon_size()
2434
+ iconsize = int(0.75 * get_default_icon_size())
2294
2435
  minw = (3 + 3 + 3) * iconsize + 150
2295
2436
  minh = (4 + 1) * iconsize + 170
2296
2437
  super().SetSizeHints(minW=minw, minH=minh)
2297
2438
 
2298
2439
  _icon = wx.NullIcon
2299
- _icon.CopyFromBitmap(icons8_move_50.GetBitmap())
2440
+ _icon.CopyFromBitmap(icons8_move.GetBitmap())
2300
2441
  self.SetIcon(_icon)
2301
2442
  # begin wxGlade: Navigation.__set_properties
2302
2443
  self.SetTitle(_("Navigation"))
@@ -2308,7 +2449,7 @@ class Navigation(MWindow):
2308
2449
  "button/preparation/Navigation",
2309
2450
  {
2310
2451
  "label": _("Navigation"),
2311
- "icon": icons8_move_50,
2452
+ "icon": icons8_move,
2312
2453
  "tip": _("Opens Navigation Window"),
2313
2454
  "action": lambda v: kernel.console("window toggle Navigation\n"),
2314
2455
  "priority": 1,