meerk40t 0.9.7010__py2.py3-none-any.whl → 0.9.7020__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/galvo_commands.py +1 -2
- meerk40t/core/elements/branches.py +18 -4
- meerk40t/core/elements/element_treeops.py +34 -0
- meerk40t/core/elements/elements.py +49 -63
- meerk40t/core/elements/offset_clpr.py +4 -3
- meerk40t/core/elements/shapes.py +1 -1
- meerk40t/core/elements/testcases.py +105 -0
- meerk40t/core/node/op_cut.py +9 -8
- meerk40t/core/node/op_dots.py +8 -8
- meerk40t/core/node/op_engrave.py +7 -7
- meerk40t/core/node/op_raster.py +8 -8
- meerk40t/extra/encode_detect.py +8 -2
- meerk40t/extra/hershey.py +2 -3
- meerk40t/extra/inkscape.py +3 -5
- meerk40t/extra/outerworld.py +2 -3
- meerk40t/extra/param_functions.py +1 -1
- meerk40t/grbl/device.py +4 -1
- meerk40t/grbl/gui/grblcontroller.py +2 -2
- meerk40t/gui/busy.py +75 -13
- meerk40t/gui/choicepropertypanel.py +364 -375
- meerk40t/gui/consolepanel.py +3 -3
- meerk40t/gui/hersheymanager.py +13 -3
- meerk40t/gui/laserpanel.py +12 -7
- meerk40t/gui/materialmanager.py +33 -6
- meerk40t/gui/plugin.py +9 -3
- meerk40t/gui/propertypanels/operationpropertymain.py +1 -1
- meerk40t/gui/ribbon.py +4 -1
- meerk40t/gui/scene/widget.py +1 -1
- meerk40t/gui/scenewidgets/rectselectwidget.py +19 -16
- meerk40t/gui/scenewidgets/selectionwidget.py +26 -20
- meerk40t/gui/simpleui.py +13 -8
- meerk40t/gui/simulation.py +22 -2
- meerk40t/gui/spoolerpanel.py +2 -2
- meerk40t/gui/tips.py +2 -3
- meerk40t/gui/toolwidgets/toolmeasure.py +4 -1
- meerk40t/gui/wxmeerk40t.py +6 -3
- meerk40t/gui/wxmmain.py +72 -6
- meerk40t/gui/wxmscene.py +2 -6
- meerk40t/gui/wxmtree.py +17 -11
- meerk40t/gui/wxutils.py +1 -1
- meerk40t/image/imagetools.py +20 -5
- meerk40t/kernel/kernel.py +21 -2
- meerk40t/main.py +1 -1
- meerk40t/network/console_server.py +52 -14
- meerk40t/network/web_server.py +15 -1
- meerk40t/ruida/device.py +5 -1
- meerk40t/tools/polybool.py +2 -1
- meerk40t/tools/shxparser.py +92 -34
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/METADATA +1 -1
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/RECORD +55 -54
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/LICENSE +0 -0
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/WHEEL +0 -0
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/entry_points.txt +0 -0
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/top_level.txt +0 -0
- {meerk40t-0.9.7010.dist-info → meerk40t-0.9.7020.dist-info}/zip-safe +0 -0
@@ -139,6 +139,366 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
139
139
|
# we need to create an independent copy of the lookup, otherwise
|
140
140
|
# any amendments to choices like injector will affect the original
|
141
141
|
standardhelp = ""
|
142
|
+
|
143
|
+
def on_combo_text(param, ctrl, obj, dtype, addsig):
|
144
|
+
def select(event=None):
|
145
|
+
v = dtype(ctrl.GetValue())
|
146
|
+
current_value = getattr(obj, param)
|
147
|
+
if current_value != v:
|
148
|
+
setattr(obj, param, v)
|
149
|
+
self.context.signal(param, v, obj)
|
150
|
+
for _sig in addsig:
|
151
|
+
self.context.signal(_sig)
|
152
|
+
|
153
|
+
return select
|
154
|
+
|
155
|
+
def on_button(param, obj, addsig):
|
156
|
+
def check(event=None):
|
157
|
+
# We just set it to True to kick it off
|
158
|
+
setattr(obj, param, True)
|
159
|
+
# We don't signal ourselves...
|
160
|
+
self.context.signal(param, True, obj)
|
161
|
+
for _sig in addsig:
|
162
|
+
self.context.signal(_sig)
|
163
|
+
|
164
|
+
return check
|
165
|
+
|
166
|
+
def on_checkbox_check(param, ctrl, obj, addsig):
|
167
|
+
def check(event=None):
|
168
|
+
v = ctrl.GetValue()
|
169
|
+
current_value = getattr(obj, param)
|
170
|
+
if current_value != bool(v):
|
171
|
+
setattr(obj, param, bool(v))
|
172
|
+
self.context.signal(param, v, obj)
|
173
|
+
for _sig in addsig:
|
174
|
+
self.context.signal(_sig)
|
175
|
+
|
176
|
+
return check
|
177
|
+
|
178
|
+
def on_checkbox_bitcheck(param, ctrl, obj, bit, addsig, enable_ctrl=None):
|
179
|
+
def check(event=None):
|
180
|
+
v = ctrl.GetValue()
|
181
|
+
if enable_ctrl is not None:
|
182
|
+
enable_ctrl.Enable(v)
|
183
|
+
current = getattr(obj, param)
|
184
|
+
if v:
|
185
|
+
current |= 1 << bit
|
186
|
+
else:
|
187
|
+
current = ~((~current) | (1 << bit))
|
188
|
+
current_value = getattr(obj, param)
|
189
|
+
if current_value != current:
|
190
|
+
setattr(obj, param, current)
|
191
|
+
self.context.signal(param, v, obj)
|
192
|
+
for _sig in addsig:
|
193
|
+
self.context.signal(_sig)
|
194
|
+
|
195
|
+
return check
|
196
|
+
|
197
|
+
def on_generic_multi(param, ctrl, obj, dtype, addsig):
|
198
|
+
def text():
|
199
|
+
v = ctrl.GetValue()
|
200
|
+
try:
|
201
|
+
dtype_v = dtype(v)
|
202
|
+
current_value = getattr(obj, param)
|
203
|
+
if current_value != dtype_v:
|
204
|
+
setattr(obj, param, dtype_v)
|
205
|
+
self.context.signal(param, dtype_v, obj)
|
206
|
+
for _sig in addsig:
|
207
|
+
self.context.signal(_sig)
|
208
|
+
except ValueError:
|
209
|
+
# cannot cast to data_type, pass
|
210
|
+
pass
|
211
|
+
|
212
|
+
return text
|
213
|
+
|
214
|
+
def on_button_filename(param, ctrl, obj, wildcard, addsig):
|
215
|
+
def click(event=None):
|
216
|
+
with wx.FileDialog(
|
217
|
+
self,
|
218
|
+
label,
|
219
|
+
wildcard=wildcard if wildcard else "*",
|
220
|
+
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_PREVIEW,
|
221
|
+
) as fileDialog:
|
222
|
+
if fileDialog.ShowModal() == wx.ID_CANCEL:
|
223
|
+
return # the user changed their mind
|
224
|
+
pathname = str(fileDialog.GetPath())
|
225
|
+
ctrl.SetValue(pathname)
|
226
|
+
self.Layout()
|
227
|
+
current_value = getattr(obj, param)
|
228
|
+
if current_value != pathname:
|
229
|
+
try:
|
230
|
+
setattr(obj, param, pathname)
|
231
|
+
self.context.signal(param, pathname, obj)
|
232
|
+
for _sig in addsig:
|
233
|
+
self.context.signal(_sig)
|
234
|
+
except ValueError:
|
235
|
+
# cannot cast to data_type, pass
|
236
|
+
pass
|
237
|
+
|
238
|
+
return click
|
239
|
+
|
240
|
+
def on_file_text(param, ctrl, obj, dtype, addsig):
|
241
|
+
def filetext():
|
242
|
+
v = ctrl.GetValue()
|
243
|
+
try:
|
244
|
+
dtype_v = dtype(v)
|
245
|
+
current_value = getattr(obj, param)
|
246
|
+
if current_value != dtype_v:
|
247
|
+
setattr(obj, param, dtype_v)
|
248
|
+
self.context.signal(param, dtype_v, obj)
|
249
|
+
for _sig in addsig:
|
250
|
+
self.context.signal(_sig)
|
251
|
+
except ValueError:
|
252
|
+
# cannot cast to data_type, pass
|
253
|
+
pass
|
254
|
+
|
255
|
+
return filetext
|
256
|
+
|
257
|
+
def on_slider(param, ctrl, obj, dtype, addsig):
|
258
|
+
def select(event=None):
|
259
|
+
v = dtype(ctrl.GetValue())
|
260
|
+
current_value = getattr(obj, param)
|
261
|
+
if current_value != v:
|
262
|
+
setattr(obj, param, v)
|
263
|
+
self.context.signal(param, v, obj)
|
264
|
+
for _sig in addsig:
|
265
|
+
self.context.signal(_sig)
|
266
|
+
|
267
|
+
return select
|
268
|
+
|
269
|
+
def on_radio_select(param, ctrl, obj, dtype, addsig):
|
270
|
+
def select(event=None):
|
271
|
+
if dtype == int:
|
272
|
+
v = dtype(ctrl.GetSelection())
|
273
|
+
else:
|
274
|
+
v = dtype(ctrl.GetLabel())
|
275
|
+
current_value = getattr(obj, param)
|
276
|
+
if current_value != v:
|
277
|
+
setattr(obj, param, v)
|
278
|
+
self.context.signal(param, v, obj)
|
279
|
+
for _sig in addsig:
|
280
|
+
self.context.signal(_sig)
|
281
|
+
|
282
|
+
return select
|
283
|
+
|
284
|
+
def on_combosmall_option(param, ctrl, obj, dtype, addsig, choice_list):
|
285
|
+
def select(event=None):
|
286
|
+
cl = choice_list[ctrl.GetSelection()]
|
287
|
+
v = dtype(cl)
|
288
|
+
current_value = getattr(obj, param)
|
289
|
+
if current_value != v:
|
290
|
+
setattr(obj, param, v)
|
291
|
+
self.context.signal(param, v, obj)
|
292
|
+
for _sig in addsig:
|
293
|
+
self.context.signal(_sig)
|
294
|
+
|
295
|
+
return select
|
296
|
+
|
297
|
+
def on_combosmall_text(param, ctrl, obj, dtype, addsig):
|
298
|
+
def select(event=None):
|
299
|
+
v = dtype(ctrl.GetValue())
|
300
|
+
current_value = getattr(obj, param)
|
301
|
+
if current_value != v:
|
302
|
+
# print (f"Setting it to {v}")
|
303
|
+
setattr(obj, param, v)
|
304
|
+
self.context.signal(param, v, obj)
|
305
|
+
for _sig in addsig:
|
306
|
+
self.context.signal(_sig)
|
307
|
+
|
308
|
+
return select
|
309
|
+
|
310
|
+
def on_button_color(param, ctrl, obj, addsig):
|
311
|
+
def click(event=None):
|
312
|
+
color_data = wx.ColourData()
|
313
|
+
color_data.SetColour(wx.Colour(swizzlecolor(ctrl.color)))
|
314
|
+
dlg = wx.ColourDialog(self, color_data)
|
315
|
+
if dlg.ShowModal() == wx.ID_OK:
|
316
|
+
color_data = dlg.GetColourData()
|
317
|
+
data = Color(
|
318
|
+
swizzlecolor(color_data.GetColour().GetRGB()), 1.0
|
319
|
+
)
|
320
|
+
set_color(ctrl, data)
|
321
|
+
try:
|
322
|
+
data_v = data.hexa
|
323
|
+
current_value = getattr(obj, param)
|
324
|
+
if current_value != data_v:
|
325
|
+
setattr(obj, param, data_v)
|
326
|
+
self.context.signal(param, data_v, obj)
|
327
|
+
for _sig in addsig:
|
328
|
+
self.context.signal(_sig)
|
329
|
+
except ValueError:
|
330
|
+
# cannot cast to data_type, pass
|
331
|
+
pass
|
332
|
+
|
333
|
+
return click
|
334
|
+
|
335
|
+
def on_angle_text(param, ctrl, obj, dtype, addsig):
|
336
|
+
def text():
|
337
|
+
try:
|
338
|
+
v = Angle(ctrl.GetValue(), digits=5)
|
339
|
+
data_v = str(v)
|
340
|
+
current_value = str(getattr(obj, param))
|
341
|
+
if current_value != data_v:
|
342
|
+
setattr(obj, param, data_v)
|
343
|
+
self.context.signal(param, data_v, obj)
|
344
|
+
for _sig in addsig:
|
345
|
+
self.context.signal(_sig)
|
346
|
+
except ValueError:
|
347
|
+
# cannot cast to data_type, pass
|
348
|
+
pass
|
349
|
+
|
350
|
+
return text
|
351
|
+
|
352
|
+
def on_chart_start(columns, param, ctrl, local_obj):
|
353
|
+
def chart_start(event=None):
|
354
|
+
for column in columns:
|
355
|
+
if column.get("editable", False):
|
356
|
+
event.Allow()
|
357
|
+
else:
|
358
|
+
event.Veto()
|
359
|
+
|
360
|
+
return chart_start
|
361
|
+
|
362
|
+
def on_chart_stop(columns, param, ctrl, local_obj):
|
363
|
+
def chart_stop(event=None):
|
364
|
+
row_id = event.GetIndex() # Get the current row
|
365
|
+
col_id = event.GetColumn() # Get the current column
|
366
|
+
new_data = event.GetLabel() # Get the changed data
|
367
|
+
ctrl.SetItem(row_id, col_id, new_data)
|
368
|
+
column = columns[col_id]
|
369
|
+
c_attr = column.get("attr")
|
370
|
+
c_type = column.get("type")
|
371
|
+
values = getattr(local_obj, param)
|
372
|
+
if isinstance(values[row_id], dict):
|
373
|
+
values[row_id][c_attr] = c_type(new_data)
|
374
|
+
self.context.signal(param, values, row_id, param)
|
375
|
+
elif isinstance(values[row_id], str):
|
376
|
+
values[row_id] = c_type(new_data)
|
377
|
+
self.context.signal(param, values, row_id)
|
378
|
+
else:
|
379
|
+
values[row_id][col_id] = c_type(new_data)
|
380
|
+
self.context.signal(param, values, row_id)
|
381
|
+
|
382
|
+
return chart_stop
|
383
|
+
|
384
|
+
def on_chart_contextmenu(
|
385
|
+
columns, param, ctrl, local_obj, allow_del, allow_dup, default
|
386
|
+
):
|
387
|
+
def chart_menu(event=None):
|
388
|
+
# row_id = event.GetIndex() # Get the current row
|
389
|
+
|
390
|
+
x, y = event.GetPosition()
|
391
|
+
row_id, flags = ctrl.HitTest((x, y))
|
392
|
+
if row_id < 0:
|
393
|
+
l_allow_del = False
|
394
|
+
l_allow_dup = False
|
395
|
+
else:
|
396
|
+
l_allow_del = allow_del
|
397
|
+
l_allow_dup = allow_dup
|
398
|
+
menu = wx.Menu()
|
399
|
+
if l_allow_del:
|
400
|
+
|
401
|
+
def on_delete(event):
|
402
|
+
values = getattr(local_obj, param)
|
403
|
+
# try:
|
404
|
+
values.pop(row_id)
|
405
|
+
self.context.signal(param, values, 0, param)
|
406
|
+
fill_ctrl(ctrl, local_obj, param, columns)
|
407
|
+
# except IndexError:
|
408
|
+
# pass
|
409
|
+
|
410
|
+
menuitem = menu.Append(
|
411
|
+
wx.ID_ANY, _("Delete this entry"), ""
|
412
|
+
)
|
413
|
+
self.Bind(
|
414
|
+
wx.EVT_MENU,
|
415
|
+
on_delete,
|
416
|
+
id=menuitem.GetId(),
|
417
|
+
)
|
418
|
+
if l_allow_dup:
|
419
|
+
|
420
|
+
def on_duplicate(event):
|
421
|
+
values = getattr(local_obj, param)
|
422
|
+
if isinstance(values[row_id], dict):
|
423
|
+
newentry = dict()
|
424
|
+
for key, content in values[row_id].items():
|
425
|
+
newentry[key] = content
|
426
|
+
else:
|
427
|
+
newentry = copy(values[row_id])
|
428
|
+
values.append(newentry)
|
429
|
+
self.context.signal(param, values, 0, param)
|
430
|
+
# except IndexError:
|
431
|
+
# pass
|
432
|
+
fill_ctrl(ctrl, local_obj, param, columns)
|
433
|
+
|
434
|
+
menuitem = menu.Append(
|
435
|
+
wx.ID_ANY, _("Duplicate this entry"), ""
|
436
|
+
)
|
437
|
+
self.Bind(
|
438
|
+
wx.EVT_MENU,
|
439
|
+
on_duplicate,
|
440
|
+
id=menuitem.GetId(),
|
441
|
+
)
|
442
|
+
|
443
|
+
def on_default(event):
|
444
|
+
values = getattr(local_obj, param)
|
445
|
+
values.clear()
|
446
|
+
for e in default:
|
447
|
+
values.append(e)
|
448
|
+
|
449
|
+
self.context.signal(param, values, 0, param)
|
450
|
+
fill_ctrl(ctrl, local_obj, param, columns)
|
451
|
+
# except IndexError:
|
452
|
+
# pass
|
453
|
+
|
454
|
+
menuitem = menu.Append(wx.ID_ANY, _("Restore defaults"), "")
|
455
|
+
self.Bind(
|
456
|
+
wx.EVT_MENU,
|
457
|
+
on_default,
|
458
|
+
id=menuitem.GetId(),
|
459
|
+
)
|
460
|
+
|
461
|
+
if menu.MenuItemCount != 0:
|
462
|
+
self.PopupMenu(menu)
|
463
|
+
menu.Destroy()
|
464
|
+
|
465
|
+
return chart_menu
|
466
|
+
|
467
|
+
def on_generic_text(param, ctrl, obj, dtype, addsig):
|
468
|
+
def text():
|
469
|
+
v = ctrl.GetValue()
|
470
|
+
try:
|
471
|
+
dtype_v = dtype(v)
|
472
|
+
current_value = getattr(obj, param)
|
473
|
+
if current_value != dtype_v:
|
474
|
+
setattr(obj, param, dtype_v)
|
475
|
+
self.context.signal(param, dtype_v, obj)
|
476
|
+
for _sig in addsig:
|
477
|
+
self.context.signal(_sig)
|
478
|
+
except ValueError:
|
479
|
+
# cannot cast to data_type, pass
|
480
|
+
pass
|
481
|
+
|
482
|
+
return text
|
483
|
+
|
484
|
+
def on_length_text(param, ctrl, obj, dtype, addsig):
|
485
|
+
def text():
|
486
|
+
try:
|
487
|
+
v = Length(ctrl.GetValue())
|
488
|
+
data_v = v.preferred_length
|
489
|
+
current_value = getattr(obj, param)
|
490
|
+
if str(current_value) != str(data_v):
|
491
|
+
setattr(obj, param, data_v)
|
492
|
+
self.context.signal(param, data_v, obj)
|
493
|
+
for _sig in addsig:
|
494
|
+
self.context.signal(_sig)
|
495
|
+
except ValueError:
|
496
|
+
# cannot cast to data_type, pass
|
497
|
+
pass
|
498
|
+
|
499
|
+
return text
|
500
|
+
|
501
|
+
|
142
502
|
for choice in choices:
|
143
503
|
if isinstance(choice, dict):
|
144
504
|
if "help" not in choice:
|
@@ -425,16 +785,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
425
785
|
wants_listener = False
|
426
786
|
control = wxButton(self, label=label)
|
427
787
|
|
428
|
-
def on_button(param, obj, addsig):
|
429
|
-
def check(event=None):
|
430
|
-
# We just set it to True to kick it off
|
431
|
-
setattr(obj, param, True)
|
432
|
-
# We don't signal ourselves...
|
433
|
-
self.context.signal(param, True, obj)
|
434
|
-
for _sig in addsig:
|
435
|
-
self.context.signal(_sig)
|
436
|
-
|
437
|
-
return check
|
438
788
|
|
439
789
|
control.Bind(
|
440
790
|
wx.EVT_BUTTON,
|
@@ -449,17 +799,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
449
799
|
control.SetValue(data)
|
450
800
|
control.SetMinSize(dip_size(self, -1, 23))
|
451
801
|
|
452
|
-
def on_checkbox_check(param, ctrl, obj, addsig):
|
453
|
-
def check(event=None):
|
454
|
-
v = ctrl.GetValue()
|
455
|
-
current_value = getattr(obj, param)
|
456
|
-
if current_value != bool(v):
|
457
|
-
setattr(obj, param, bool(v))
|
458
|
-
self.context.signal(param, v, obj)
|
459
|
-
for _sig in addsig:
|
460
|
-
self.context.signal(_sig)
|
461
|
-
|
462
|
-
return check
|
463
802
|
|
464
803
|
control.Bind(
|
465
804
|
wx.EVT_CHECKBOX,
|
@@ -485,22 +824,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
485
824
|
control_sizer.Add(control, 1, wx.EXPAND, 0)
|
486
825
|
current_sizer.Add(control_sizer, expansion_flag * weight, wx.EXPAND, 0)
|
487
826
|
|
488
|
-
def on_generic_multi(param, ctrl, obj, dtype, addsig):
|
489
|
-
def text():
|
490
|
-
v = ctrl.GetValue()
|
491
|
-
try:
|
492
|
-
dtype_v = dtype(v)
|
493
|
-
current_value = getattr(obj, param)
|
494
|
-
if current_value != dtype_v:
|
495
|
-
setattr(obj, param, dtype_v)
|
496
|
-
self.context.signal(param, dtype_v, obj)
|
497
|
-
for _sig in addsig:
|
498
|
-
self.context.signal(_sig)
|
499
|
-
except ValueError:
|
500
|
-
# cannot cast to data_type, pass
|
501
|
-
pass
|
502
|
-
|
503
|
-
return text
|
504
827
|
|
505
828
|
control.SetActionRoutine(
|
506
829
|
on_generic_multi(attr, control, obj, data_type, additional_signal)
|
@@ -520,48 +843,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
520
843
|
# filename = _("No File")
|
521
844
|
control.SetValue(filename)
|
522
845
|
|
523
|
-
def on_button_filename(param, ctrl, obj, wildcard, addsig):
|
524
|
-
def click(event=None):
|
525
|
-
with wx.FileDialog(
|
526
|
-
self,
|
527
|
-
label,
|
528
|
-
wildcard=wildcard if wildcard else "*",
|
529
|
-
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_PREVIEW,
|
530
|
-
) as fileDialog:
|
531
|
-
if fileDialog.ShowModal() == wx.ID_CANCEL:
|
532
|
-
return # the user changed their mind
|
533
|
-
pathname = str(fileDialog.GetPath())
|
534
|
-
ctrl.SetValue(pathname)
|
535
|
-
self.Layout()
|
536
|
-
current_value = getattr(obj, param)
|
537
|
-
if current_value != pathname:
|
538
|
-
try:
|
539
|
-
setattr(obj, param, pathname)
|
540
|
-
self.context.signal(param, pathname, obj)
|
541
|
-
for _sig in addsig:
|
542
|
-
self.context.signal(_sig)
|
543
|
-
except ValueError:
|
544
|
-
# cannot cast to data_type, pass
|
545
|
-
pass
|
546
|
-
|
547
|
-
return click
|
548
|
-
|
549
|
-
def on_file_text(param, ctrl, obj, dtype, addsig):
|
550
|
-
def filetext():
|
551
|
-
v = ctrl.GetValue()
|
552
|
-
try:
|
553
|
-
dtype_v = dtype(v)
|
554
|
-
current_value = getattr(obj, param)
|
555
|
-
if current_value != dtype_v:
|
556
|
-
setattr(obj, param, dtype_v)
|
557
|
-
self.context.signal(param, dtype_v, obj)
|
558
|
-
for _sig in addsig:
|
559
|
-
self.context.signal(_sig)
|
560
|
-
except ValueError:
|
561
|
-
# cannot cast to data_type, pass
|
562
|
-
pass
|
563
|
-
|
564
|
-
return filetext
|
565
846
|
|
566
847
|
control.SetActionRoutine(
|
567
848
|
on_file_text(attr, control, obj, data_type, additional_signal)
|
@@ -608,17 +889,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
608
889
|
style=wx.SL_HORIZONTAL | wx.SL_VALUE_LABEL,
|
609
890
|
)
|
610
891
|
|
611
|
-
def on_slider(param, ctrl, obj, dtype, addsig):
|
612
|
-
def select(event=None):
|
613
|
-
v = dtype(ctrl.GetValue())
|
614
|
-
current_value = getattr(obj, param)
|
615
|
-
if current_value != v:
|
616
|
-
setattr(obj, param, v)
|
617
|
-
self.context.signal(param, v, obj)
|
618
|
-
for _sig in addsig:
|
619
|
-
self.context.signal(_sig)
|
620
|
-
|
621
|
-
return select
|
622
892
|
|
623
893
|
if ctrl_width > 0:
|
624
894
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
@@ -658,17 +928,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
658
928
|
if least is not None:
|
659
929
|
control.SetValue(least)
|
660
930
|
|
661
|
-
def on_combo_text(param, ctrl, obj, dtype, addsig):
|
662
|
-
def select(event=None):
|
663
|
-
v = dtype(ctrl.GetValue())
|
664
|
-
current_value = getattr(obj, param)
|
665
|
-
if current_value != v:
|
666
|
-
setattr(obj, param, v)
|
667
|
-
self.context.signal(param, v, obj)
|
668
|
-
for _sig in addsig:
|
669
|
-
self.context.signal(_sig)
|
670
|
-
|
671
|
-
return select
|
672
931
|
|
673
932
|
if ctrl_width > 0:
|
674
933
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
@@ -698,20 +957,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
698
957
|
else:
|
699
958
|
control.SetSelection(int(data))
|
700
959
|
|
701
|
-
def on_radio_select(param, ctrl, obj, dtype, addsig):
|
702
|
-
def select(event=None):
|
703
|
-
if dtype == int:
|
704
|
-
v = dtype(ctrl.GetSelection())
|
705
|
-
else:
|
706
|
-
v = dtype(ctrl.GetLabel())
|
707
|
-
current_value = getattr(obj, param)
|
708
|
-
if current_value != v:
|
709
|
-
setattr(obj, param, v)
|
710
|
-
self.context.signal(param, v, obj)
|
711
|
-
for _sig in addsig:
|
712
|
-
self.context.signal(_sig)
|
713
|
-
|
714
|
-
return select
|
715
960
|
|
716
961
|
if ctrl_width > 0:
|
717
962
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
@@ -734,11 +979,12 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
734
979
|
data = c.get("default")
|
735
980
|
display_list.insert(0, str(data))
|
736
981
|
choice_list.insert(0, str(data))
|
982
|
+
cb_style = wx.CB_DROPDOWN | wx.CB_READONLY
|
737
983
|
control = wxComboBox(
|
738
984
|
self,
|
739
985
|
wx.ID_ANY,
|
740
986
|
choices=display_list,
|
741
|
-
style=
|
987
|
+
style=cb_style,
|
742
988
|
)
|
743
989
|
control.SetSelection(index)
|
744
990
|
|
@@ -749,18 +995,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
749
995
|
# print ("Choices: %s" % choice_list)
|
750
996
|
# print ("To set: %s" % str(data))
|
751
997
|
|
752
|
-
def on_combosmall_option(param, ctrl, obj, dtype, addsig, choice_list):
|
753
|
-
def select(event=None):
|
754
|
-
cl = choice_list[ctrl.GetSelection()]
|
755
|
-
v = dtype(cl)
|
756
|
-
current_value = getattr(obj, param)
|
757
|
-
if current_value != v:
|
758
|
-
setattr(obj, param, v)
|
759
|
-
self.context.signal(param, v, obj)
|
760
|
-
for _sig in addsig:
|
761
|
-
self.context.signal(_sig)
|
762
|
-
|
763
|
-
return select
|
764
998
|
|
765
999
|
if label != "":
|
766
1000
|
# Try to center it vertically to the controls extent
|
@@ -779,9 +1013,7 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
779
1013
|
elif data_type in (str, int, float) and data_style == "combosmall":
|
780
1014
|
control_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
781
1015
|
exclusive = c.get("exclusive", True)
|
782
|
-
cb_style = wx.CB_DROPDOWN
|
783
|
-
if exclusive:
|
784
|
-
cb_style = cb_style | wx.CB_READONLY
|
1016
|
+
cb_style = wx.CB_DROPDOWN | wx.CB_READONLY if exclusive else wx.CB_DROPDOWN
|
785
1017
|
|
786
1018
|
choice_list = list(map(str, c.get("choices", [c.get("default")])))
|
787
1019
|
control = wxComboBox(
|
@@ -811,18 +1043,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
811
1043
|
if least is not None:
|
812
1044
|
control.SetValue(least)
|
813
1045
|
|
814
|
-
def on_combosmall_text(param, ctrl, obj, dtype, addsig):
|
815
|
-
def select(event=None):
|
816
|
-
v = dtype(ctrl.GetValue())
|
817
|
-
current_value = getattr(obj, param)
|
818
|
-
if current_value != v:
|
819
|
-
# print (f"Setting it to {v}")
|
820
|
-
setattr(obj, param, v)
|
821
|
-
self.context.signal(param, v, obj)
|
822
|
-
for _sig in addsig:
|
823
|
-
self.context.signal(_sig)
|
824
|
-
|
825
|
-
return select
|
826
1046
|
|
827
1047
|
if label != "":
|
828
1048
|
# Try to center it vertically to the controls extent
|
@@ -863,24 +1083,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
863
1083
|
else:
|
864
1084
|
control_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
865
1085
|
|
866
|
-
def on_checkbox_check(param, ctrl, obj, bit, addsig, enable_ctrl=None):
|
867
|
-
def check(event=None):
|
868
|
-
v = ctrl.GetValue()
|
869
|
-
if enable_ctrl is not None:
|
870
|
-
enable_ctrl.Enable(v)
|
871
|
-
current = getattr(obj, param)
|
872
|
-
if v:
|
873
|
-
current |= 1 << bit
|
874
|
-
else:
|
875
|
-
current = ~((~current) | (1 << bit))
|
876
|
-
current_value = getattr(obj, param)
|
877
|
-
if current_value != current:
|
878
|
-
setattr(obj, param, current)
|
879
|
-
self.context.signal(param, v, obj)
|
880
|
-
for _sig in addsig:
|
881
|
-
self.context.signal(_sig)
|
882
|
-
|
883
|
-
return check
|
884
1086
|
|
885
1087
|
bit_sizer = wx.BoxSizer(wx.VERTICAL)
|
886
1088
|
label_text = wxStaticText(
|
@@ -926,7 +1128,7 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
926
1128
|
mask_ctrl.SetValue(bool((mask_bits >> b) & 1))
|
927
1129
|
mask_ctrl.Bind(
|
928
1130
|
wx.EVT_CHECKBOX,
|
929
|
-
|
1131
|
+
on_checkbox_bitcheck(
|
930
1132
|
mask,
|
931
1133
|
mask_ctrl,
|
932
1134
|
obj,
|
@@ -957,31 +1159,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
957
1159
|
ctrl.SetForegroundColour(wx.WHITE)
|
958
1160
|
ctrl.color = color
|
959
1161
|
|
960
|
-
def on_button_color(param, ctrl, obj, addsig):
|
961
|
-
def click(event=None):
|
962
|
-
color_data = wx.ColourData()
|
963
|
-
color_data.SetColour(wx.Colour(swizzlecolor(ctrl.color)))
|
964
|
-
dlg = wx.ColourDialog(self, color_data)
|
965
|
-
if dlg.ShowModal() == wx.ID_OK:
|
966
|
-
color_data = dlg.GetColourData()
|
967
|
-
data = Color(
|
968
|
-
swizzlecolor(color_data.GetColour().GetRGB()), 1.0
|
969
|
-
)
|
970
|
-
set_color(ctrl, data)
|
971
|
-
try:
|
972
|
-
data_v = data.hexa
|
973
|
-
current_value = getattr(obj, param)
|
974
|
-
if current_value != data_v:
|
975
|
-
setattr(obj, param, data_v)
|
976
|
-
self.context.signal(param, data_v, obj)
|
977
|
-
for _sig in addsig:
|
978
|
-
self.context.signal(_sig)
|
979
|
-
except ValueError:
|
980
|
-
# cannot cast to data_type, pass
|
981
|
-
pass
|
982
|
-
|
983
|
-
return click
|
984
|
-
|
985
1162
|
datastr = data
|
986
1163
|
data = Color(datastr)
|
987
1164
|
set_color(control, data)
|
@@ -1050,42 +1227,12 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1050
1227
|
|
1051
1228
|
fill_ctrl(chart, obj, attr, l_columns)
|
1052
1229
|
|
1053
|
-
def on_chart_start(columns, param, ctrl, local_obj):
|
1054
|
-
def chart_start(event=None):
|
1055
|
-
for column in columns:
|
1056
|
-
if column.get("editable", False):
|
1057
|
-
event.Allow()
|
1058
|
-
else:
|
1059
|
-
event.Veto()
|
1060
|
-
|
1061
|
-
return chart_start
|
1062
1230
|
|
1063
1231
|
chart.Bind(
|
1064
1232
|
wx.EVT_LIST_BEGIN_LABEL_EDIT,
|
1065
1233
|
on_chart_start(l_columns, attr, chart, obj),
|
1066
1234
|
)
|
1067
1235
|
|
1068
|
-
def on_chart_stop(columns, param, ctrl, local_obj):
|
1069
|
-
def chart_stop(event=None):
|
1070
|
-
row_id = event.GetIndex() # Get the current row
|
1071
|
-
col_id = event.GetColumn() # Get the current column
|
1072
|
-
new_data = event.GetLabel() # Get the changed data
|
1073
|
-
ctrl.SetItem(row_id, col_id, new_data)
|
1074
|
-
column = columns[col_id]
|
1075
|
-
c_attr = column.get("attr")
|
1076
|
-
c_type = column.get("type")
|
1077
|
-
values = getattr(local_obj, param)
|
1078
|
-
if isinstance(values[row_id], dict):
|
1079
|
-
values[row_id][c_attr] = c_type(new_data)
|
1080
|
-
self.context.signal(param, values, row_id, param)
|
1081
|
-
elif isinstance(values[row_id], str):
|
1082
|
-
values[row_id] = c_type(new_data)
|
1083
|
-
self.context.signal(param, values, row_id)
|
1084
|
-
else:
|
1085
|
-
values[row_id][col_id] = c_type(new_data)
|
1086
|
-
self.context.signal(param, values, row_id)
|
1087
|
-
|
1088
|
-
return chart_stop
|
1089
1236
|
|
1090
1237
|
chart.Bind(
|
1091
1238
|
wx.EVT_LIST_END_LABEL_EDIT,
|
@@ -1095,89 +1242,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1095
1242
|
allow_deletion = c.get("allow_deletion", False)
|
1096
1243
|
allow_duplication = c.get("allow_duplication", False)
|
1097
1244
|
|
1098
|
-
def on_chart_contextmenu(
|
1099
|
-
columns, param, ctrl, local_obj, allow_del, allow_dup, default
|
1100
|
-
):
|
1101
|
-
def chart_menu(event=None):
|
1102
|
-
# row_id = event.GetIndex() # Get the current row
|
1103
|
-
|
1104
|
-
x, y = event.GetPosition()
|
1105
|
-
row_id, flags = ctrl.HitTest((x, y))
|
1106
|
-
if row_id < 0:
|
1107
|
-
l_allow_del = False
|
1108
|
-
l_allow_dup = False
|
1109
|
-
else:
|
1110
|
-
l_allow_del = allow_del
|
1111
|
-
l_allow_dup = allow_dup
|
1112
|
-
menu = wx.Menu()
|
1113
|
-
if l_allow_del:
|
1114
|
-
|
1115
|
-
def on_delete(event):
|
1116
|
-
values = getattr(local_obj, param)
|
1117
|
-
# try:
|
1118
|
-
values.pop(row_id)
|
1119
|
-
self.context.signal(param, values, 0, param)
|
1120
|
-
fill_ctrl(ctrl, local_obj, param, columns)
|
1121
|
-
# except IndexError:
|
1122
|
-
# pass
|
1123
|
-
|
1124
|
-
menuitem = menu.Append(
|
1125
|
-
wx.ID_ANY, _("Delete this entry"), ""
|
1126
|
-
)
|
1127
|
-
self.Bind(
|
1128
|
-
wx.EVT_MENU,
|
1129
|
-
on_delete,
|
1130
|
-
id=menuitem.GetId(),
|
1131
|
-
)
|
1132
|
-
if l_allow_dup:
|
1133
|
-
|
1134
|
-
def on_duplicate(event):
|
1135
|
-
values = getattr(local_obj, param)
|
1136
|
-
if isinstance(values[row_id], dict):
|
1137
|
-
newentry = dict()
|
1138
|
-
for key, content in values[row_id].items():
|
1139
|
-
newentry[key] = content
|
1140
|
-
else:
|
1141
|
-
newentry = copy(values[row_id])
|
1142
|
-
values.append(newentry)
|
1143
|
-
self.context.signal(param, values, 0, param)
|
1144
|
-
# except IndexError:
|
1145
|
-
# pass
|
1146
|
-
fill_ctrl(ctrl, local_obj, param, columns)
|
1147
|
-
|
1148
|
-
menuitem = menu.Append(
|
1149
|
-
wx.ID_ANY, _("Duplicate this entry"), ""
|
1150
|
-
)
|
1151
|
-
self.Bind(
|
1152
|
-
wx.EVT_MENU,
|
1153
|
-
on_duplicate,
|
1154
|
-
id=menuitem.GetId(),
|
1155
|
-
)
|
1156
|
-
|
1157
|
-
def on_default(event):
|
1158
|
-
values = getattr(local_obj, param)
|
1159
|
-
values.clear()
|
1160
|
-
for e in default:
|
1161
|
-
values.append(e)
|
1162
|
-
|
1163
|
-
self.context.signal(param, values, 0, param)
|
1164
|
-
fill_ctrl(ctrl, obj, param, columns)
|
1165
|
-
# except IndexError:
|
1166
|
-
# pass
|
1167
|
-
|
1168
|
-
menuitem = menu.Append(wx.ID_ANY, _("Restore defaults"), "")
|
1169
|
-
self.Bind(
|
1170
|
-
wx.EVT_MENU,
|
1171
|
-
on_default,
|
1172
|
-
id=menuitem.GetId(),
|
1173
|
-
)
|
1174
|
-
|
1175
|
-
if menu.MenuItemCount != 0:
|
1176
|
-
self.PopupMenu(menu)
|
1177
|
-
menu.Destroy()
|
1178
|
-
|
1179
|
-
return chart_menu
|
1180
|
-
|
1181
1245
|
default = c.get("default", [])
|
1182
1246
|
# chart.Bind(
|
1183
1247
|
# wx.EVT_LIST_ITEM_RIGHT_CLICK,
|
@@ -1265,22 +1329,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1265
1329
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
1266
1330
|
control_sizer.Add(control, 1, wx.EXPAND, 0)
|
1267
1331
|
|
1268
|
-
def on_generic_text(param, ctrl, obj, dtype, addsig):
|
1269
|
-
def text():
|
1270
|
-
v = ctrl.GetValue()
|
1271
|
-
try:
|
1272
|
-
dtype_v = dtype(v)
|
1273
|
-
current_value = getattr(obj, param)
|
1274
|
-
if current_value != dtype_v:
|
1275
|
-
setattr(obj, param, dtype_v)
|
1276
|
-
self.context.signal(param, dtype_v, obj)
|
1277
|
-
for _sig in addsig:
|
1278
|
-
self.context.signal(_sig)
|
1279
|
-
except ValueError:
|
1280
|
-
# cannot cast to data_type, pass
|
1281
|
-
pass
|
1282
|
-
|
1283
|
-
return text
|
1284
1332
|
|
1285
1333
|
control.SetActionRoutine(
|
1286
1334
|
on_generic_text(attr, control, obj, data_type, additional_signal)
|
@@ -1319,23 +1367,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1319
1367
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
1320
1368
|
control_sizer.Add(control, 1, wx.EXPAND, 0)
|
1321
1369
|
|
1322
|
-
def on_length_text(param, ctrl, obj, dtype, addsig):
|
1323
|
-
def text():
|
1324
|
-
try:
|
1325
|
-
v = Length(ctrl.GetValue())
|
1326
|
-
data_v = v.preferred_length
|
1327
|
-
current_value = getattr(obj, param)
|
1328
|
-
if str(current_value) != str(data_v):
|
1329
|
-
setattr(obj, param, data_v)
|
1330
|
-
self.context.signal(param, data_v, obj)
|
1331
|
-
for _sig in addsig:
|
1332
|
-
self.context.signal(_sig)
|
1333
|
-
except ValueError:
|
1334
|
-
# cannot cast to data_type, pass
|
1335
|
-
pass
|
1336
|
-
|
1337
|
-
return text
|
1338
|
-
|
1339
1370
|
control.SetActionRoutine(
|
1340
1371
|
on_length_text(attr, control, obj, data_type, additional_signal)
|
1341
1372
|
)
|
@@ -1360,23 +1391,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1360
1391
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|
1361
1392
|
control_sizer.Add(control, 1, wx.EXPAND, 0)
|
1362
1393
|
|
1363
|
-
def on_angle_text(param, ctrl, obj, dtype, addsig):
|
1364
|
-
def text():
|
1365
|
-
try:
|
1366
|
-
v = Angle(ctrl.GetValue(), digits=5)
|
1367
|
-
data_v = str(v)
|
1368
|
-
current_value = str(getattr(obj, param))
|
1369
|
-
if current_value != data_v:
|
1370
|
-
setattr(obj, param, data_v)
|
1371
|
-
self.context.signal(param, data_v, obj)
|
1372
|
-
for _sig in addsig:
|
1373
|
-
self.context.signal(_sig)
|
1374
|
-
except ValueError:
|
1375
|
-
# cannot cast to data_type, pass
|
1376
|
-
pass
|
1377
|
-
|
1378
|
-
return text
|
1379
|
-
|
1380
1394
|
control.SetActionRoutine(
|
1381
1395
|
on_angle_text(attr, control, obj, data_type, additional_signal)
|
1382
1396
|
)
|
@@ -1402,31 +1416,6 @@ class ChoicePropertyPanel(ScrolledPanel):
|
|
1402
1416
|
ctrl.SetForegroundColour(wx.WHITE)
|
1403
1417
|
ctrl.color = color
|
1404
1418
|
|
1405
|
-
def on_button_color(param, ctrl, obj, addsig):
|
1406
|
-
def click(event=None):
|
1407
|
-
color_data = wx.ColourData()
|
1408
|
-
color_data.SetColour(wx.Colour(swizzlecolor(ctrl.color)))
|
1409
|
-
dlg = wx.ColourDialog(self, color_data)
|
1410
|
-
if dlg.ShowModal() == wx.ID_OK:
|
1411
|
-
color_data = dlg.GetColourData()
|
1412
|
-
data = Color(
|
1413
|
-
swizzlecolor(color_data.GetColour().GetRGB()), 1.0
|
1414
|
-
)
|
1415
|
-
set_color(ctrl, data)
|
1416
|
-
try:
|
1417
|
-
data_v = data_type(data)
|
1418
|
-
current_value = getattr(obj, param)
|
1419
|
-
if current_value != data_v:
|
1420
|
-
setattr(obj, param, data_v)
|
1421
|
-
self.context.signal(param, data_v, obj)
|
1422
|
-
for _sig in addsig:
|
1423
|
-
self.context.signal(_sig)
|
1424
|
-
except ValueError:
|
1425
|
-
# cannot cast to data_type, pass
|
1426
|
-
pass
|
1427
|
-
|
1428
|
-
return click
|
1429
|
-
|
1430
1419
|
set_color(control, data)
|
1431
1420
|
if ctrl_width > 0:
|
1432
1421
|
control.SetMaxSize(dip_size(self, ctrl_width, -1))
|