meerk40t 0.9.3001__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/__init__.py +1 -1
- meerk40t/balormk/balor_params.py +167 -167
- meerk40t/balormk/clone_loader.py +457 -457
- meerk40t/balormk/controller.py +1566 -1512
- meerk40t/balormk/cylindermod.py +64 -0
- meerk40t/balormk/device.py +966 -1959
- meerk40t/balormk/driver.py +778 -591
- meerk40t/balormk/galvo_commands.py +1194 -0
- meerk40t/balormk/gui/balorconfig.py +237 -111
- meerk40t/balormk/gui/balorcontroller.py +191 -184
- meerk40t/balormk/gui/baloroperationproperties.py +116 -115
- meerk40t/balormk/gui/corscene.py +845 -0
- meerk40t/balormk/gui/gui.py +179 -147
- meerk40t/balormk/livelightjob.py +466 -382
- meerk40t/balormk/mock_connection.py +131 -109
- meerk40t/balormk/plugin.py +133 -135
- meerk40t/balormk/usb_connection.py +306 -301
- meerk40t/camera/__init__.py +1 -1
- meerk40t/camera/camera.py +514 -397
- meerk40t/camera/gui/camerapanel.py +1241 -1095
- meerk40t/camera/gui/gui.py +58 -58
- meerk40t/camera/plugin.py +441 -399
- meerk40t/ch341/__init__.py +27 -27
- meerk40t/ch341/ch341device.py +628 -628
- meerk40t/ch341/libusb.py +595 -589
- meerk40t/ch341/mock.py +171 -171
- meerk40t/ch341/windriver.py +157 -157
- meerk40t/constants.py +13 -0
- meerk40t/core/__init__.py +1 -1
- meerk40t/core/bindalias.py +550 -539
- meerk40t/core/core.py +47 -47
- meerk40t/core/cutcode/cubiccut.py +73 -73
- meerk40t/core/cutcode/cutcode.py +315 -312
- meerk40t/core/cutcode/cutgroup.py +141 -137
- meerk40t/core/cutcode/cutobject.py +192 -185
- meerk40t/core/cutcode/dwellcut.py +37 -37
- meerk40t/core/cutcode/gotocut.py +29 -29
- meerk40t/core/cutcode/homecut.py +29 -29
- meerk40t/core/cutcode/inputcut.py +34 -34
- meerk40t/core/cutcode/linecut.py +33 -33
- meerk40t/core/cutcode/outputcut.py +34 -34
- meerk40t/core/cutcode/plotcut.py +335 -335
- meerk40t/core/cutcode/quadcut.py +61 -61
- meerk40t/core/cutcode/rastercut.py +168 -148
- meerk40t/core/cutcode/waitcut.py +34 -34
- meerk40t/core/cutplan.py +1843 -1316
- meerk40t/core/drivers.py +330 -329
- meerk40t/core/elements/align.py +801 -669
- meerk40t/core/elements/branches.py +1858 -1507
- meerk40t/core/elements/clipboard.py +229 -219
- meerk40t/core/elements/element_treeops.py +4595 -2837
- meerk40t/core/elements/element_types.py +125 -105
- meerk40t/core/elements/elements.py +4315 -3617
- meerk40t/core/elements/files.py +117 -64
- meerk40t/core/elements/geometry.py +473 -224
- meerk40t/core/elements/grid.py +467 -316
- meerk40t/core/elements/materials.py +158 -94
- meerk40t/core/elements/notes.py +50 -38
- meerk40t/core/elements/offset_clpr.py +934 -912
- meerk40t/core/elements/offset_mk.py +963 -955
- meerk40t/core/elements/penbox.py +339 -267
- meerk40t/core/elements/placements.py +300 -83
- meerk40t/core/elements/render.py +785 -687
- meerk40t/core/elements/shapes.py +2618 -2092
- meerk40t/core/elements/testcases.py +105 -0
- meerk40t/core/elements/trace.py +651 -563
- meerk40t/core/elements/tree_commands.py +415 -409
- meerk40t/core/elements/undo_redo.py +116 -58
- meerk40t/core/elements/wordlist.py +319 -200
- meerk40t/core/exceptions.py +9 -9
- meerk40t/core/laserjob.py +220 -220
- meerk40t/core/logging.py +63 -63
- meerk40t/core/node/blobnode.py +83 -86
- meerk40t/core/node/bootstrap.py +105 -103
- meerk40t/core/node/branch_elems.py +40 -31
- meerk40t/core/node/branch_ops.py +45 -38
- meerk40t/core/node/branch_regmark.py +48 -41
- meerk40t/core/node/cutnode.py +29 -32
- meerk40t/core/node/effect_hatch.py +375 -257
- meerk40t/core/node/effect_warp.py +398 -0
- meerk40t/core/node/effect_wobble.py +441 -309
- meerk40t/core/node/elem_ellipse.py +404 -309
- meerk40t/core/node/elem_image.py +1082 -801
- meerk40t/core/node/elem_line.py +358 -292
- meerk40t/core/node/elem_path.py +259 -201
- meerk40t/core/node/elem_point.py +129 -102
- meerk40t/core/node/elem_polyline.py +310 -246
- meerk40t/core/node/elem_rect.py +376 -286
- meerk40t/core/node/elem_text.py +445 -418
- meerk40t/core/node/filenode.py +59 -40
- meerk40t/core/node/groupnode.py +138 -74
- meerk40t/core/node/image_processed.py +777 -766
- meerk40t/core/node/image_raster.py +156 -113
- meerk40t/core/node/layernode.py +31 -31
- meerk40t/core/node/mixins.py +135 -107
- meerk40t/core/node/node.py +1427 -1304
- meerk40t/core/node/nutils.py +117 -114
- meerk40t/core/node/op_cut.py +463 -335
- meerk40t/core/node/op_dots.py +296 -251
- meerk40t/core/node/op_engrave.py +414 -311
- meerk40t/core/node/op_image.py +755 -369
- meerk40t/core/node/op_raster.py +787 -522
- meerk40t/core/node/place_current.py +37 -40
- meerk40t/core/node/place_point.py +329 -126
- meerk40t/core/node/refnode.py +58 -47
- meerk40t/core/node/rootnode.py +225 -219
- meerk40t/core/node/util_console.py +48 -48
- meerk40t/core/node/util_goto.py +84 -65
- meerk40t/core/node/util_home.py +61 -61
- meerk40t/core/node/util_input.py +102 -102
- meerk40t/core/node/util_output.py +102 -102
- meerk40t/core/node/util_wait.py +65 -65
- meerk40t/core/parameters.py +709 -707
- meerk40t/core/planner.py +875 -785
- meerk40t/core/plotplanner.py +656 -652
- meerk40t/core/space.py +120 -113
- meerk40t/core/spoolers.py +706 -705
- meerk40t/core/svg_io.py +1836 -1549
- meerk40t/core/treeop.py +534 -445
- meerk40t/core/undos.py +278 -124
- meerk40t/core/units.py +784 -680
- meerk40t/core/view.py +393 -322
- meerk40t/core/webhelp.py +62 -62
- meerk40t/core/wordlist.py +513 -504
- meerk40t/cylinder/cylinder.py +247 -0
- meerk40t/cylinder/gui/cylindersettings.py +41 -0
- meerk40t/cylinder/gui/gui.py +24 -0
- meerk40t/device/__init__.py +1 -1
- meerk40t/device/basedevice.py +322 -123
- meerk40t/device/devicechoices.py +50 -0
- meerk40t/device/dummydevice.py +163 -128
- meerk40t/device/gui/defaultactions.py +618 -602
- meerk40t/device/gui/effectspanel.py +114 -0
- meerk40t/device/gui/formatterpanel.py +253 -290
- meerk40t/device/gui/warningpanel.py +337 -260
- meerk40t/device/mixins.py +13 -13
- meerk40t/dxf/__init__.py +1 -1
- meerk40t/dxf/dxf_io.py +766 -554
- meerk40t/dxf/plugin.py +47 -35
- meerk40t/external_plugins.py +79 -79
- meerk40t/external_plugins_build.py +28 -28
- meerk40t/extra/cag.py +112 -116
- meerk40t/extra/coolant.py +403 -0
- meerk40t/extra/encode_detect.py +204 -0
- meerk40t/extra/ezd.py +1165 -1165
- meerk40t/extra/hershey.py +834 -340
- meerk40t/extra/imageactions.py +322 -316
- meerk40t/extra/inkscape.py +628 -622
- meerk40t/extra/lbrn.py +424 -424
- meerk40t/extra/outerworld.py +283 -0
- meerk40t/extra/param_functions.py +1542 -1556
- meerk40t/extra/potrace.py +257 -253
- meerk40t/extra/serial_exchange.py +118 -0
- meerk40t/extra/updater.py +602 -453
- meerk40t/extra/vectrace.py +147 -146
- meerk40t/extra/winsleep.py +83 -83
- meerk40t/extra/xcs_reader.py +597 -0
- meerk40t/fill/fills.py +781 -335
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +614 -567
- meerk40t/grbl/control.py +87 -87
- meerk40t/grbl/controller.py +990 -903
- meerk40t/grbl/device.py +1084 -768
- meerk40t/grbl/driver.py +989 -771
- meerk40t/grbl/emulator.py +532 -497
- meerk40t/grbl/gcodejob.py +783 -767
- meerk40t/grbl/gui/grblconfiguration.py +373 -298
- meerk40t/grbl/gui/grblcontroller.py +485 -271
- meerk40t/grbl/gui/grblhardwareconfig.py +269 -153
- meerk40t/grbl/gui/grbloperationconfig.py +105 -0
- meerk40t/grbl/gui/gui.py +147 -116
- meerk40t/grbl/interpreter.py +44 -44
- meerk40t/grbl/loader.py +22 -22
- meerk40t/grbl/mock_connection.py +56 -56
- meerk40t/grbl/plugin.py +294 -264
- meerk40t/grbl/serial_connection.py +93 -88
- meerk40t/grbl/tcp_connection.py +81 -79
- meerk40t/grbl/ws_connection.py +112 -0
- meerk40t/gui/__init__.py +1 -1
- meerk40t/gui/about.py +2042 -296
- meerk40t/gui/alignment.py +1644 -1608
- meerk40t/gui/autoexec.py +199 -0
- meerk40t/gui/basicops.py +791 -670
- meerk40t/gui/bufferview.py +77 -71
- meerk40t/gui/busy.py +232 -133
- meerk40t/gui/choicepropertypanel.py +1662 -1469
- meerk40t/gui/consolepanel.py +706 -542
- meerk40t/gui/devicepanel.py +687 -581
- meerk40t/gui/dialogoptions.py +110 -107
- meerk40t/gui/executejob.py +316 -306
- meerk40t/gui/fonts.py +90 -90
- meerk40t/gui/functionwrapper.py +252 -0
- meerk40t/gui/gui_mixins.py +729 -0
- meerk40t/gui/guicolors.py +205 -182
- meerk40t/gui/help_assets/help_assets.py +218 -201
- meerk40t/gui/helper.py +154 -0
- meerk40t/gui/hersheymanager.py +1440 -846
- meerk40t/gui/icons.py +3422 -2747
- meerk40t/gui/imagesplitter.py +555 -508
- meerk40t/gui/keymap.py +354 -344
- meerk40t/gui/laserpanel.py +897 -806
- meerk40t/gui/laserrender.py +1470 -1232
- meerk40t/gui/lasertoolpanel.py +805 -793
- meerk40t/gui/magnetoptions.py +436 -0
- meerk40t/gui/materialmanager.py +2944 -0
- meerk40t/gui/materialtest.py +1722 -1694
- meerk40t/gui/mkdebug.py +646 -359
- meerk40t/gui/mwindow.py +163 -140
- meerk40t/gui/navigationpanels.py +2605 -2467
- meerk40t/gui/notes.py +143 -142
- meerk40t/gui/opassignment.py +414 -410
- meerk40t/gui/operation_info.py +310 -299
- meerk40t/gui/plugin.py +500 -328
- meerk40t/gui/position.py +714 -669
- meerk40t/gui/preferences.py +901 -650
- meerk40t/gui/propertypanels/attributes.py +1461 -1131
- meerk40t/gui/propertypanels/blobproperty.py +117 -114
- meerk40t/gui/propertypanels/consoleproperty.py +83 -80
- meerk40t/gui/propertypanels/gotoproperty.py +77 -0
- meerk40t/gui/propertypanels/groupproperties.py +223 -217
- meerk40t/gui/propertypanels/hatchproperty.py +489 -469
- meerk40t/gui/propertypanels/imageproperty.py +2244 -1384
- meerk40t/gui/propertypanels/inputproperty.py +59 -58
- meerk40t/gui/propertypanels/opbranchproperties.py +82 -80
- meerk40t/gui/propertypanels/operationpropertymain.py +1890 -1638
- meerk40t/gui/propertypanels/outputproperty.py +59 -58
- meerk40t/gui/propertypanels/pathproperty.py +389 -380
- meerk40t/gui/propertypanels/placementproperty.py +1214 -383
- meerk40t/gui/propertypanels/pointproperty.py +140 -136
- meerk40t/gui/propertypanels/propertywindow.py +313 -181
- meerk40t/gui/propertypanels/rasterwizardpanels.py +996 -912
- meerk40t/gui/propertypanels/regbranchproperties.py +76 -0
- meerk40t/gui/propertypanels/textproperty.py +770 -755
- meerk40t/gui/propertypanels/waitproperty.py +56 -55
- meerk40t/gui/propertypanels/warpproperty.py +121 -0
- meerk40t/gui/propertypanels/wobbleproperty.py +255 -204
- meerk40t/gui/ribbon.py +2471 -2210
- meerk40t/gui/scene/scene.py +1100 -1051
- meerk40t/gui/scene/sceneconst.py +22 -22
- meerk40t/gui/scene/scenepanel.py +439 -349
- meerk40t/gui/scene/scenespacewidget.py +365 -365
- meerk40t/gui/scene/widget.py +518 -505
- meerk40t/gui/scenewidgets/affinemover.py +215 -215
- meerk40t/gui/scenewidgets/attractionwidget.py +315 -309
- meerk40t/gui/scenewidgets/bedwidget.py +120 -97
- meerk40t/gui/scenewidgets/elementswidget.py +137 -107
- meerk40t/gui/scenewidgets/gridwidget.py +785 -745
- meerk40t/gui/scenewidgets/guidewidget.py +765 -765
- meerk40t/gui/scenewidgets/laserpathwidget.py +66 -66
- meerk40t/gui/scenewidgets/machineoriginwidget.py +86 -86
- meerk40t/gui/scenewidgets/nodeselector.py +28 -28
- meerk40t/gui/scenewidgets/rectselectwidget.py +592 -346
- meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
- meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
- meerk40t/gui/scenewidgets/selectionwidget.py +2958 -2756
- meerk40t/gui/simpleui.py +362 -333
- meerk40t/gui/simulation.py +2451 -2094
- meerk40t/gui/snapoptions.py +208 -203
- meerk40t/gui/spoolerpanel.py +1227 -1180
- meerk40t/gui/statusbarwidgets/defaultoperations.py +480 -353
- meerk40t/gui/statusbarwidgets/infowidget.py +520 -483
- meerk40t/gui/statusbarwidgets/opassignwidget.py +356 -355
- meerk40t/gui/statusbarwidgets/selectionwidget.py +172 -171
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +754 -236
- meerk40t/gui/statusbarwidgets/statusbar.py +272 -260
- meerk40t/gui/statusbarwidgets/statusbarwidget.py +268 -270
- meerk40t/gui/statusbarwidgets/strokewidget.py +267 -251
- meerk40t/gui/themes.py +200 -78
- meerk40t/gui/tips.py +590 -0
- meerk40t/gui/toolwidgets/circlebrush.py +35 -35
- meerk40t/gui/toolwidgets/toolcircle.py +248 -242
- meerk40t/gui/toolwidgets/toolcontainer.py +82 -77
- meerk40t/gui/toolwidgets/tooldraw.py +97 -90
- meerk40t/gui/toolwidgets/toolellipse.py +219 -212
- meerk40t/gui/toolwidgets/toolimagecut.py +25 -132
- meerk40t/gui/toolwidgets/toolline.py +39 -144
- meerk40t/gui/toolwidgets/toollinetext.py +79 -236
- meerk40t/gui/toolwidgets/toollinetext_inline.py +296 -0
- meerk40t/gui/toolwidgets/toolmeasure.py +163 -216
- meerk40t/gui/toolwidgets/toolnodeedit.py +2088 -2074
- meerk40t/gui/toolwidgets/toolnodemove.py +92 -94
- meerk40t/gui/toolwidgets/toolparameter.py +754 -668
- meerk40t/gui/toolwidgets/toolplacement.py +108 -108
- meerk40t/gui/toolwidgets/toolpoint.py +68 -59
- meerk40t/gui/toolwidgets/toolpointlistbuilder.py +294 -0
- meerk40t/gui/toolwidgets/toolpointmove.py +183 -0
- meerk40t/gui/toolwidgets/toolpolygon.py +288 -403
- meerk40t/gui/toolwidgets/toolpolyline.py +38 -196
- meerk40t/gui/toolwidgets/toolrect.py +211 -207
- meerk40t/gui/toolwidgets/toolrelocate.py +72 -72
- meerk40t/gui/toolwidgets/toolribbon.py +598 -113
- meerk40t/gui/toolwidgets/tooltabedit.py +546 -0
- meerk40t/gui/toolwidgets/tooltext.py +98 -89
- meerk40t/gui/toolwidgets/toolvector.py +213 -204
- meerk40t/gui/toolwidgets/toolwidget.py +39 -39
- meerk40t/gui/usbconnect.py +98 -91
- meerk40t/gui/utilitywidgets/buttonwidget.py +18 -18
- meerk40t/gui/utilitywidgets/checkboxwidget.py +90 -90
- meerk40t/gui/utilitywidgets/controlwidget.py +14 -14
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +343 -340
- meerk40t/gui/utilitywidgets/debugwidgets.py +148 -0
- meerk40t/gui/utilitywidgets/handlewidget.py +27 -27
- meerk40t/gui/utilitywidgets/harmonograph.py +450 -447
- meerk40t/gui/utilitywidgets/openclosewidget.py +40 -40
- meerk40t/gui/utilitywidgets/rotationwidget.py +54 -54
- meerk40t/gui/utilitywidgets/scalewidget.py +75 -75
- meerk40t/gui/utilitywidgets/seekbarwidget.py +183 -183
- meerk40t/gui/utilitywidgets/togglewidget.py +142 -142
- meerk40t/gui/utilitywidgets/toolbarwidget.py +8 -8
- meerk40t/gui/wordlisteditor.py +985 -931
- meerk40t/gui/wxmeerk40t.py +1447 -1169
- meerk40t/gui/wxmmain.py +5644 -4112
- meerk40t/gui/wxmribbon.py +1591 -1076
- meerk40t/gui/wxmscene.py +1631 -1453
- meerk40t/gui/wxmtree.py +2416 -2089
- meerk40t/gui/wxutils.py +1769 -1099
- meerk40t/gui/zmatrix.py +102 -102
- meerk40t/image/__init__.py +1 -1
- meerk40t/image/dither.py +429 -0
- meerk40t/image/imagetools.py +2793 -2269
- meerk40t/internal_plugins.py +150 -130
- meerk40t/kernel/__init__.py +63 -12
- meerk40t/kernel/channel.py +259 -212
- meerk40t/kernel/context.py +538 -538
- meerk40t/kernel/exceptions.py +41 -41
- meerk40t/kernel/functions.py +463 -414
- meerk40t/kernel/jobs.py +100 -100
- meerk40t/kernel/kernel.py +3828 -3571
- meerk40t/kernel/lifecycles.py +71 -71
- meerk40t/kernel/module.py +49 -49
- meerk40t/kernel/service.py +147 -147
- meerk40t/kernel/settings.py +383 -343
- meerk40t/lihuiyu/controller.py +883 -876
- meerk40t/lihuiyu/device.py +1181 -1069
- meerk40t/lihuiyu/driver.py +1466 -1372
- meerk40t/lihuiyu/gui/gui.py +127 -106
- meerk40t/lihuiyu/gui/lhyaccelgui.py +377 -363
- meerk40t/lihuiyu/gui/lhycontrollergui.py +741 -651
- meerk40t/lihuiyu/gui/lhydrivergui.py +470 -446
- meerk40t/lihuiyu/gui/lhyoperationproperties.py +238 -237
- meerk40t/lihuiyu/gui/tcpcontroller.py +226 -190
- meerk40t/lihuiyu/interpreter.py +53 -53
- meerk40t/lihuiyu/laserspeed.py +450 -450
- meerk40t/lihuiyu/loader.py +90 -90
- meerk40t/lihuiyu/parser.py +404 -404
- meerk40t/lihuiyu/plugin.py +101 -102
- meerk40t/lihuiyu/tcp_connection.py +111 -109
- meerk40t/main.py +231 -165
- meerk40t/moshi/builder.py +788 -781
- meerk40t/moshi/controller.py +505 -499
- meerk40t/moshi/device.py +495 -442
- meerk40t/moshi/driver.py +862 -696
- meerk40t/moshi/gui/gui.py +78 -76
- meerk40t/moshi/gui/moshicontrollergui.py +538 -522
- meerk40t/moshi/gui/moshidrivergui.py +87 -75
- meerk40t/moshi/plugin.py +43 -43
- meerk40t/network/console_server.py +140 -57
- meerk40t/network/kernelserver.py +10 -9
- meerk40t/network/tcp_server.py +142 -140
- meerk40t/network/udp_server.py +103 -77
- meerk40t/network/web_server.py +404 -0
- meerk40t/newly/controller.py +1158 -1144
- meerk40t/newly/device.py +874 -732
- meerk40t/newly/driver.py +540 -412
- meerk40t/newly/gui/gui.py +219 -188
- meerk40t/newly/gui/newlyconfig.py +116 -101
- meerk40t/newly/gui/newlycontroller.py +193 -186
- meerk40t/newly/gui/operationproperties.py +51 -51
- meerk40t/newly/mock_connection.py +82 -82
- meerk40t/newly/newly_params.py +56 -56
- meerk40t/newly/plugin.py +1214 -1246
- meerk40t/newly/usb_connection.py +322 -322
- meerk40t/rotary/gui/gui.py +52 -46
- meerk40t/rotary/gui/rotarysettings.py +240 -232
- meerk40t/rotary/rotary.py +202 -98
- meerk40t/ruida/control.py +291 -91
- meerk40t/ruida/controller.py +138 -1088
- meerk40t/ruida/device.py +676 -231
- meerk40t/ruida/driver.py +534 -472
- meerk40t/ruida/emulator.py +1494 -1491
- meerk40t/ruida/exceptions.py +4 -4
- meerk40t/ruida/gui/gui.py +71 -76
- meerk40t/ruida/gui/ruidaconfig.py +239 -72
- meerk40t/ruida/gui/ruidacontroller.py +187 -184
- meerk40t/ruida/gui/ruidaoperationproperties.py +48 -47
- meerk40t/ruida/loader.py +54 -52
- meerk40t/ruida/mock_connection.py +57 -109
- meerk40t/ruida/plugin.py +124 -87
- meerk40t/ruida/rdjob.py +2084 -945
- meerk40t/ruida/serial_connection.py +116 -0
- meerk40t/ruida/tcp_connection.py +146 -0
- meerk40t/ruida/udp_connection.py +73 -0
- meerk40t/svgelements.py +9671 -9669
- meerk40t/tools/driver_to_path.py +584 -579
- meerk40t/tools/geomstr.py +5583 -4680
- meerk40t/tools/jhfparser.py +357 -292
- meerk40t/tools/kerftest.py +904 -890
- meerk40t/tools/livinghinges.py +1168 -1033
- meerk40t/tools/pathtools.py +987 -949
- meerk40t/tools/pmatrix.py +234 -0
- meerk40t/tools/pointfinder.py +942 -942
- meerk40t/tools/polybool.py +941 -940
- meerk40t/tools/rasterplotter.py +1660 -547
- meerk40t/tools/shxparser.py +1047 -901
- meerk40t/tools/ttfparser.py +726 -446
- meerk40t/tools/zinglplotter.py +595 -593
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/LICENSE +21 -21
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/METADATA +150 -139
- meerk40t-0.9.7020.dist-info/RECORD +446 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/WHEEL +1 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/top_level.txt +0 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/zip-safe +1 -1
- meerk40t/balormk/elementlightjob.py +0 -159
- meerk40t-0.9.3001.dist-info/RECORD +0 -437
- test/bootstrap.py +0 -63
- test/test_cli.py +0 -12
- test/test_core_cutcode.py +0 -418
- test/test_core_elements.py +0 -144
- test/test_core_plotplanner.py +0 -397
- test/test_core_viewports.py +0 -312
- test/test_drivers_grbl.py +0 -108
- test/test_drivers_lihuiyu.py +0 -443
- test/test_drivers_newly.py +0 -113
- test/test_element_degenerate_points.py +0 -43
- test/test_elements_classify.py +0 -97
- test/test_elements_penbox.py +0 -22
- test/test_file_svg.py +0 -176
- test/test_fill.py +0 -155
- test/test_geomstr.py +0 -1523
- test/test_geomstr_nodes.py +0 -18
- test/test_imagetools_actualize.py +0 -306
- test/test_imagetools_wizard.py +0 -258
- test/test_kernel.py +0 -200
- test/test_laser_speeds.py +0 -3303
- test/test_length.py +0 -57
- test/test_lifecycle.py +0 -66
- test/test_operations.py +0 -251
- test/test_operations_hatch.py +0 -57
- test/test_ruida.py +0 -19
- test/test_spooler.py +0 -22
- test/test_tools_rasterplotter.py +0 -29
- test/test_wobble.py +0 -133
- test/test_zingl.py +0 -124
- {test → meerk40t/cylinder}/__init__.py +0 -0
- /meerk40t/{core/element_commands.py → cylinder/gui/__init__.py} +0 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/entry_points.txt +0 -0
@@ -1,270 +1,268 @@
|
|
1
|
-
import wx
|
2
|
-
|
3
|
-
|
4
|
-
class BasicHSizer:
|
5
|
-
"""
|
6
|
-
A mockup (although working) of a horizontal wx.BoxSizer
|
7
|
-
No nested functionality, just something simple - and which
|
8
|
-
you have fully under control... (required for a Linux environment)
|
9
|
-
"""
|
10
|
-
|
11
|
-
def __init__(self, *args):
|
12
|
-
self.windows = []
|
13
|
-
self.proportions = []
|
14
|
-
self.flags = []
|
15
|
-
self.activectrl = []
|
16
|
-
self.visible = False
|
17
|
-
self.x = 0
|
18
|
-
self.y = 0
|
19
|
-
self.width = 400
|
20
|
-
self.height = 25
|
21
|
-
self.start_x = 0
|
22
|
-
|
23
|
-
def PrependSpacer(self, newx):
|
24
|
-
if newx >= 0:
|
25
|
-
self.start_x = newx
|
26
|
-
|
27
|
-
def GetItemCount(self):
|
28
|
-
return len(self.windows)
|
29
|
-
|
30
|
-
def Add(self, window, proportion=0, flag=0, border=0):
|
31
|
-
min_size = window.GetMinSize()
|
32
|
-
if min_size[1] < 10 or min_size[0] < 10:
|
33
|
-
min_size[0] = max(min_size[0], 10)
|
34
|
-
min_size[1] = max(min_size[1], 10)
|
35
|
-
window.SetMinSize(min_size)
|
36
|
-
|
37
|
-
self.windows.append(window)
|
38
|
-
self.proportions.append(proportion)
|
39
|
-
self.flags.append(flag)
|
40
|
-
self.activectrl.append(True)
|
41
|
-
window.Show(False)
|
42
|
-
|
43
|
-
def SetActive(self, control, enableit=True):
|
44
|
-
cid = control.GetId()
|
45
|
-
for idx, wind in enumerate(self.windows):
|
46
|
-
if cid == wind.GetId():
|
47
|
-
self.activectrl[idx] = enableit
|
48
|
-
break
|
49
|
-
|
50
|
-
def Enable(self, enableit=True):
|
51
|
-
for wind in self.windows:
|
52
|
-
wind.Enable(enableit)
|
53
|
-
|
54
|
-
def ShowItems(self, showit=True):
|
55
|
-
self.visible = showit
|
56
|
-
for idx, wind in enumerate(self.windows):
|
57
|
-
flag = showit and self.activectrl[idx]
|
58
|
-
wind.Show(flag)
|
59
|
-
|
60
|
-
def Show(self, showit=True):
|
61
|
-
self.ShowItems(showit)
|
62
|
-
|
63
|
-
def Hide(self, hideit=True):
|
64
|
-
self.ShowItems(not hideit)
|
65
|
-
|
66
|
-
def Layout(self):
|
67
|
-
# Establish all required widths
|
68
|
-
slen = len(self.windows)
|
69
|
-
self.myx = [0] * slen
|
70
|
-
self.myy = [0] * slen
|
71
|
-
self.myw = [0] * slen
|
72
|
-
self.myh = [0] * slen
|
73
|
-
total_proportions = 0
|
74
|
-
availw = self.width - self.start_x
|
75
|
-
for idx, wind in enumerate(self.windows):
|
76
|
-
if not self.activectrl[idx]:
|
77
|
-
continue
|
78
|
-
min_size = wind.GetMinSize()
|
79
|
-
curr_size = wind.GetSize()
|
80
|
-
if self.flags[idx] == 0:
|
81
|
-
# don't touch the vertical value
|
82
|
-
new_h = curr_size[1]
|
83
|
-
else:
|
84
|
-
new_h = self.height - 2
|
85
|
-
if min_size[1] > 0 and min_size[1] > new_h:
|
86
|
-
new_h = min_size[1]
|
87
|
-
self.myh[idx] = new_h
|
88
|
-
self.myy[idx] = self.y + max(0, (self.height - new_h) / 2)
|
89
|
-
# print (f"Setting values for {type(wind).__name__}: HH={self.height}, YY={self.y}, h={new_h:.1f}, y={self.myy[idx]:.1f}" )
|
90
|
-
total_proportions += self.proportions[idx]
|
91
|
-
if self.proportions[idx] <= 0:
|
92
|
-
self.myw[idx] = max(curr_size[0], min_size[0])
|
93
|
-
availw -= self.myw[idx]
|
94
|
-
else:
|
95
|
-
self.myw[idx] = -1
|
96
|
-
# print(
|
97
|
-
# "Total proportions: %.1f, width=%.1f, remaining=%.1f"
|
98
|
-
# % (total_proportions, self.width, availw)
|
99
|
-
# )
|
100
|
-
# Now that we have established the minsize
|
101
|
-
# First iteration, check for maxSize
|
102
|
-
if total_proportions > 0:
|
103
|
-
for idx, wind in enumerate(self.windows):
|
104
|
-
if self.proportions[idx] > 0 and self.activectrl[idx]:
|
105
|
-
max_size = wind.GetMaxSize()
|
106
|
-
min_size = wind.GetMinSize()
|
107
|
-
if min_size[0] < 10:
|
108
|
-
min_size[0] = 10
|
109
|
-
testsize = max(
|
110
|
-
min_size[0], self.proportions[idx] * availw / total_proportions
|
111
|
-
)
|
112
|
-
if 0 < max_size[0] < testsize:
|
113
|
-
# too big
|
114
|
-
self.myw[idx] = max_size[0]
|
115
|
-
# Give remaining size back
|
116
|
-
total_proportions -= self.proportions[idx]
|
117
|
-
availw -= max_size[0]
|
118
|
-
# Second iteration, assign remaining space
|
119
|
-
if total_proportions > 0:
|
120
|
-
for idx, wind in enumerate(self.windows):
|
121
|
-
# Don't touch already assigned ones...
|
122
|
-
if (
|
123
|
-
self.proportions[idx] > 0
|
124
|
-
and self.activectrl[idx]
|
125
|
-
and self.myw[idx] < 0
|
126
|
-
):
|
127
|
-
min_size = wind.GetMinSize()
|
128
|
-
if min_size[0] < 10:
|
129
|
-
min_size[0] = 10
|
130
|
-
testsize = max(
|
131
|
-
min_size[0], self.proportions[idx] * availw / total_proportions
|
132
|
-
)
|
133
|
-
self.myw[idx] = testsize
|
134
|
-
|
135
|
-
# And now
|
136
|
-
newx = self.start_x + self.x
|
137
|
-
for idx, wind in enumerate(self.windows):
|
138
|
-
# print(f"{idx}, vis={self.activectrl[idx]}, x={newx}")
|
139
|
-
self.myx[idx] = newx
|
140
|
-
if self.visible is None:
|
141
|
-
self.visible = False
|
142
|
-
flag = self.visible and self.activectrl[idx]
|
143
|
-
|
144
|
-
# if self.myx[idx] > self.x + self.width or self.myx[idx] + self.myw[idx] > self.x + self.width:
|
145
|
-
if self.myx[idx] > self.x + self.width:
|
146
|
-
flag = False
|
147
|
-
else:
|
148
|
-
# cast everything to int, just to be on the safe side
|
149
|
-
rect = wx.Rect(
|
150
|
-
int(self.myx[idx]),
|
151
|
-
int(self.myy[idx]),
|
152
|
-
int(self.myw[idx]),
|
153
|
-
int(self.myh[idx]),
|
154
|
-
)
|
155
|
-
wind.SetRect(rect)
|
156
|
-
# flag = flag and True
|
157
|
-
wind.Show(flag)
|
158
|
-
if flag and self.activectrl[idx]:
|
159
|
-
newx += self.myw[idx]
|
160
|
-
|
161
|
-
def SetDimension(self, newx, newy, newwidth, newheight):
|
162
|
-
# print ("Set dimension called")
|
163
|
-
self.x = newx
|
164
|
-
self.y = newy
|
165
|
-
self.width = newwidth
|
166
|
-
self.height = newheight
|
167
|
-
self.Layout()
|
168
|
-
|
169
|
-
def Reparent(self, new_parent):
|
170
|
-
for wind in self.windows:
|
171
|
-
if wind is not None:
|
172
|
-
wind.Reparent(new_parent)
|
173
|
-
|
174
|
-
def ClearItems(self):
|
175
|
-
for wind in self.windows:
|
176
|
-
if wind is not None:
|
177
|
-
wind.Destroy()
|
178
|
-
self.windows = []
|
179
|
-
|
180
|
-
|
181
|
-
class StatusBarWidget(BasicHSizer):
|
182
|
-
# class StatusBarWidget(wx.BoxSizer):
|
183
|
-
"""
|
184
|
-
General class to be added to a CustomStatusBar,
|
185
|
-
defines some general routines that can be overloaded
|
186
|
-
by a concrete implementation
|
187
|
-
"""
|
188
|
-
|
189
|
-
def __init__(self, **kwargs):
|
190
|
-
super().__init__(wx.HORIZONTAL, **kwargs)
|
191
|
-
self.identifier = None
|
192
|
-
self.context = None
|
193
|
-
self.visible = None
|
194
|
-
self.active = None
|
195
|
-
self.panelidx = None
|
196
|
-
self.checked = False
|
197
|
-
self.startup = None
|
198
|
-
self.parent = None
|
199
|
-
|
200
|
-
def SetActive(self, control, enableit=True):
|
201
|
-
# Logic to use own hsizer or wx.BoxSizer
|
202
|
-
if hasattr(super(), "SetActive"):
|
203
|
-
super().SetActive(control, enableit)
|
204
|
-
else:
|
205
|
-
control.Show(enableit)
|
206
|
-
|
207
|
-
def RefreshItems(self, showit=True):
|
208
|
-
if hasattr(super(), "SetActive"):
|
209
|
-
self.ShowItems(showit)
|
210
|
-
else:
|
211
|
-
pass
|
212
|
-
|
213
|
-
def GenerateControls(self, parent, panelidx, identifier, context):
|
214
|
-
"""
|
215
|
-
Will be called within CustomStatusBar.
|
216
|
-
Copy this code to your implementation
|
217
|
-
"""
|
218
|
-
self.panelidx = panelidx
|
219
|
-
self.identifier = identifier
|
220
|
-
self.parent = parent
|
221
|
-
self.context = context
|
222
|
-
# COPY:
|
223
|
-
# super().GenerateControls(parent, panelidx, identifier, context)
|
224
|
-
# Now add your controls, make sure they are added with
|
225
|
-
# self.btn =
|
226
|
-
# self.add(self.btn, 1, wx.EXPAND, 0)
|
227
|
-
|
228
|
-
def StartPopulation(self):
|
229
|
-
"""
|
230
|
-
If you want to update controls with values, then you should
|
231
|
-
- encapsule things between StartPopulation and EndPopulation
|
232
|
-
- check for 'if not self.startup:' in your on_update_ routines
|
233
|
-
"""
|
234
|
-
self.startup = True
|
235
|
-
|
236
|
-
def EndPopulation(self):
|
237
|
-
self.startup = False
|
238
|
-
|
239
|
-
def Show(self, showit=True):
|
240
|
-
# print ("Called %s - show with %s" % (self.identifier, showit))
|
241
|
-
cnt = self.GetItemCount()
|
242
|
-
if cnt == 0:
|
243
|
-
return
|
244
|
-
if cnt == 1:
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
self.
|
269
|
-
self.activectrl = []
|
270
|
-
self.windows = []
|
1
|
+
import wx
|
2
|
+
|
3
|
+
|
4
|
+
class BasicHSizer:
|
5
|
+
"""
|
6
|
+
A mockup (although working) of a horizontal wx.BoxSizer
|
7
|
+
No nested functionality, just something simple - and which
|
8
|
+
you have fully under control... (required for a Linux environment)
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(self, *args, **kwargs):
|
12
|
+
self.windows = []
|
13
|
+
self.proportions = []
|
14
|
+
self.flags = []
|
15
|
+
self.activectrl = []
|
16
|
+
self.visible = False
|
17
|
+
self.x = 0
|
18
|
+
self.y = 0
|
19
|
+
self.width = 400
|
20
|
+
self.height = 25
|
21
|
+
self.start_x = 0
|
22
|
+
|
23
|
+
def PrependSpacer(self, newx):
|
24
|
+
if newx >= 0:
|
25
|
+
self.start_x = newx
|
26
|
+
|
27
|
+
def GetItemCount(self):
|
28
|
+
return len(self.windows)
|
29
|
+
|
30
|
+
def Add(self, window, proportion=0, flag=0, border=0):
|
31
|
+
min_size = window.GetMinSize()
|
32
|
+
if min_size[1] < 10 or min_size[0] < 10:
|
33
|
+
min_size[0] = max(min_size[0], 10)
|
34
|
+
min_size[1] = max(min_size[1], 10)
|
35
|
+
window.SetMinSize(min_size)
|
36
|
+
|
37
|
+
self.windows.append(window)
|
38
|
+
self.proportions.append(proportion)
|
39
|
+
self.flags.append(flag)
|
40
|
+
self.activectrl.append(True)
|
41
|
+
window.Show(False)
|
42
|
+
|
43
|
+
def SetActive(self, control, enableit=True):
|
44
|
+
cid = control.GetId()
|
45
|
+
for idx, wind in enumerate(self.windows):
|
46
|
+
if cid == wind.GetId():
|
47
|
+
self.activectrl[idx] = enableit
|
48
|
+
break
|
49
|
+
|
50
|
+
def Enable(self, enableit=True):
|
51
|
+
for wind in self.windows:
|
52
|
+
wind.Enable(enableit)
|
53
|
+
|
54
|
+
def ShowItems(self, showit=True):
|
55
|
+
self.visible = showit
|
56
|
+
for idx, wind in enumerate(self.windows):
|
57
|
+
flag = showit and self.activectrl[idx]
|
58
|
+
wind.Show(flag)
|
59
|
+
|
60
|
+
def Show(self, showit=True):
|
61
|
+
self.ShowItems(showit)
|
62
|
+
|
63
|
+
def Hide(self, hideit=True):
|
64
|
+
self.ShowItems(not hideit)
|
65
|
+
|
66
|
+
def Layout(self):
|
67
|
+
# Establish all required widths
|
68
|
+
slen = len(self.windows)
|
69
|
+
self.myx = [0] * slen
|
70
|
+
self.myy = [0] * slen
|
71
|
+
self.myw = [0] * slen
|
72
|
+
self.myh = [0] * slen
|
73
|
+
total_proportions = 0
|
74
|
+
availw = self.width - self.start_x
|
75
|
+
for idx, wind in enumerate(self.windows):
|
76
|
+
if not self.activectrl[idx]:
|
77
|
+
continue
|
78
|
+
min_size = wind.GetMinSize()
|
79
|
+
curr_size = wind.GetSize()
|
80
|
+
if self.flags[idx] == 0:
|
81
|
+
# don't touch the vertical value
|
82
|
+
new_h = curr_size[1]
|
83
|
+
else:
|
84
|
+
new_h = self.height - 2
|
85
|
+
if min_size[1] > 0 and min_size[1] > new_h:
|
86
|
+
new_h = min_size[1]
|
87
|
+
self.myh[idx] = new_h
|
88
|
+
self.myy[idx] = self.y + max(0, (self.height - new_h) / 2)
|
89
|
+
# print (f"Setting values for {type(wind).__name__}: HH={self.height}, YY={self.y}, h={new_h:.1f}, y={self.myy[idx]:.1f}" )
|
90
|
+
total_proportions += self.proportions[idx]
|
91
|
+
if self.proportions[idx] <= 0:
|
92
|
+
self.myw[idx] = max(curr_size[0], min_size[0])
|
93
|
+
availw -= self.myw[idx]
|
94
|
+
else:
|
95
|
+
self.myw[idx] = -1
|
96
|
+
# print(
|
97
|
+
# "Total proportions: %.1f, width=%.1f, remaining=%.1f"
|
98
|
+
# % (total_proportions, self.width, availw)
|
99
|
+
# )
|
100
|
+
# Now that we have established the minsize let's see what we have left
|
101
|
+
# First iteration, check for maxSize
|
102
|
+
if total_proportions > 0:
|
103
|
+
for idx, wind in enumerate(self.windows):
|
104
|
+
if self.proportions[idx] > 0 and self.activectrl[idx]:
|
105
|
+
max_size = wind.GetMaxSize()
|
106
|
+
min_size = wind.GetMinSize()
|
107
|
+
if min_size[0] < 10:
|
108
|
+
min_size[0] = 10
|
109
|
+
testsize = max(
|
110
|
+
min_size[0], self.proportions[idx] * availw / total_proportions
|
111
|
+
)
|
112
|
+
if 0 < max_size[0] < testsize:
|
113
|
+
# too big
|
114
|
+
self.myw[idx] = max_size[0]
|
115
|
+
# Give remaining size back
|
116
|
+
total_proportions -= self.proportions[idx]
|
117
|
+
availw -= max_size[0]
|
118
|
+
# Second iteration, assign remaining space
|
119
|
+
if total_proportions > 0:
|
120
|
+
for idx, wind in enumerate(self.windows):
|
121
|
+
# Don't touch already assigned ones...
|
122
|
+
if (
|
123
|
+
self.proportions[idx] > 0
|
124
|
+
and self.activectrl[idx]
|
125
|
+
and self.myw[idx] < 0
|
126
|
+
):
|
127
|
+
min_size = wind.GetMinSize()
|
128
|
+
if min_size[0] < 10:
|
129
|
+
min_size[0] = 10
|
130
|
+
testsize = max(
|
131
|
+
min_size[0], self.proportions[idx] * availw / total_proportions
|
132
|
+
)
|
133
|
+
self.myw[idx] = testsize
|
134
|
+
|
135
|
+
# And now let's move the windows...
|
136
|
+
newx = self.start_x + self.x
|
137
|
+
for idx, wind in enumerate(self.windows):
|
138
|
+
# print(f"{idx}, vis={self.activectrl[idx]}, x={newx}")
|
139
|
+
self.myx[idx] = newx
|
140
|
+
if self.visible is None:
|
141
|
+
self.visible = False
|
142
|
+
flag = self.visible and self.activectrl[idx]
|
143
|
+
|
144
|
+
# if self.myx[idx] > self.x + self.width or self.myx[idx] + self.myw[idx] > self.x + self.width:
|
145
|
+
if self.myx[idx] > self.x + self.width:
|
146
|
+
flag = False
|
147
|
+
else:
|
148
|
+
# cast everything to int, just to be on the safe side
|
149
|
+
rect = wx.Rect(
|
150
|
+
int(self.myx[idx]),
|
151
|
+
int(self.myy[idx]),
|
152
|
+
int(self.myw[idx]),
|
153
|
+
int(self.myh[idx]),
|
154
|
+
)
|
155
|
+
wind.SetRect(rect)
|
156
|
+
# flag = flag and True
|
157
|
+
wind.Show(flag)
|
158
|
+
if flag and self.activectrl[idx]:
|
159
|
+
newx += self.myw[idx]
|
160
|
+
|
161
|
+
def SetDimension(self, newx, newy, newwidth, newheight):
|
162
|
+
# print ("Set dimension called")
|
163
|
+
self.x = newx
|
164
|
+
self.y = newy
|
165
|
+
self.width = newwidth
|
166
|
+
self.height = newheight
|
167
|
+
self.Layout()
|
168
|
+
|
169
|
+
def Reparent(self, new_parent):
|
170
|
+
for wind in self.windows:
|
171
|
+
if wind is not None:
|
172
|
+
wind.Reparent(new_parent)
|
173
|
+
|
174
|
+
def ClearItems(self):
|
175
|
+
for wind in self.windows:
|
176
|
+
if wind is not None:
|
177
|
+
wind.Destroy()
|
178
|
+
self.windows = []
|
179
|
+
|
180
|
+
|
181
|
+
class StatusBarWidget(BasicHSizer):
|
182
|
+
# class StatusBarWidget(wx.BoxSizer):
|
183
|
+
"""
|
184
|
+
General class to be added to a CustomStatusBar,
|
185
|
+
defines some general routines that can be overloaded
|
186
|
+
by a concrete implementation
|
187
|
+
"""
|
188
|
+
|
189
|
+
def __init__(self, **kwargs):
|
190
|
+
super().__init__(wx.HORIZONTAL, **kwargs)
|
191
|
+
self.identifier = None
|
192
|
+
self.context = None
|
193
|
+
self.visible = None
|
194
|
+
self.active = None
|
195
|
+
self.panelidx = None
|
196
|
+
self.checked = False
|
197
|
+
self.startup = None
|
198
|
+
self.parent = None
|
199
|
+
|
200
|
+
def SetActive(self, control, enableit=True):
|
201
|
+
# Logic to use own hsizer or wx.BoxSizer
|
202
|
+
if hasattr(super(), "SetActive"):
|
203
|
+
super().SetActive(control, enableit)
|
204
|
+
else:
|
205
|
+
control.Show(enableit)
|
206
|
+
|
207
|
+
def RefreshItems(self, showit=True):
|
208
|
+
if hasattr(super(), "SetActive"):
|
209
|
+
self.ShowItems(showit)
|
210
|
+
else:
|
211
|
+
pass
|
212
|
+
|
213
|
+
def GenerateControls(self, parent, panelidx, identifier, context):
|
214
|
+
"""
|
215
|
+
Will be called within CustomStatusBar.
|
216
|
+
Copy this code to your implementation
|
217
|
+
"""
|
218
|
+
self.panelidx = panelidx
|
219
|
+
self.identifier = identifier
|
220
|
+
self.parent = parent
|
221
|
+
self.context = context
|
222
|
+
# COPY:
|
223
|
+
# super().GenerateControls(parent, panelidx, identifier, context)
|
224
|
+
# Now add your controls, make sure they are added with
|
225
|
+
# self.btn = wxButton(self.parent, wx.ID_ANY...)
|
226
|
+
# self.add(self.btn, 1, wx.EXPAND, 0)
|
227
|
+
|
228
|
+
def StartPopulation(self):
|
229
|
+
"""
|
230
|
+
If you want to update controls with values, then you should
|
231
|
+
- encapsule things between StartPopulation and EndPopulation
|
232
|
+
- check for 'if not self.startup:' in your on_update_ routines
|
233
|
+
"""
|
234
|
+
self.startup = True
|
235
|
+
|
236
|
+
def EndPopulation(self):
|
237
|
+
self.startup = False
|
238
|
+
|
239
|
+
def Show(self, showit=True):
|
240
|
+
# print ("Called %s - show with %s" % (self.identifier, showit))
|
241
|
+
cnt = self.GetItemCount()
|
242
|
+
if cnt == 0:
|
243
|
+
return
|
244
|
+
if cnt == 1:
|
245
|
+
self.PrependSpacer(5)
|
246
|
+
|
247
|
+
# Standard action to show or hide, can be redefined
|
248
|
+
if showit:
|
249
|
+
super().Show(True)
|
250
|
+
self.visible = True
|
251
|
+
else:
|
252
|
+
super().Hide(True)
|
253
|
+
self.visible = False
|
254
|
+
self.Layout()
|
255
|
+
|
256
|
+
def Reparent(self, parent):
|
257
|
+
# Needs to be done to ensure the boxsizer is aware of the parent window
|
258
|
+
self.parent = parent
|
259
|
+
super().Reparent(parent)
|
260
|
+
|
261
|
+
def Signal(self, signal, *args):
|
262
|
+
# needs to be done in the concrete implementation
|
263
|
+
return
|
264
|
+
|
265
|
+
def Clear(self):
|
266
|
+
self.ClearItems()
|
267
|
+
self.activectrl = []
|
268
|
+
self.windows = []
|