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
meerk40t/gui/scene/widget.py
CHANGED
@@ -1,505 +1,518 @@
|
|
1
|
-
from math import isinf, isnan
|
2
|
-
|
3
|
-
import wx
|
4
|
-
|
5
|
-
from meerk40t.gui.scene.sceneconst import (
|
6
|
-
BUFFER,
|
7
|
-
HITCHAIN_DELEGATE,
|
8
|
-
ORIENTATION_ABSOLUTE,
|
9
|
-
ORIENTATION_CENTERED,
|
10
|
-
ORIENTATION_DIM_MASK,
|
11
|
-
ORIENTATION_GRID,
|
12
|
-
ORIENTATION_HORIZONTAL,
|
13
|
-
ORIENTATION_MODE_MASK,
|
14
|
-
ORIENTATION_NO_BUFFER,
|
15
|
-
ORIENTATION_RELATIVE,
|
16
|
-
ORIENTATION_VERTICAL,
|
17
|
-
RESPONSE_CHAIN,
|
18
|
-
)
|
19
|
-
from meerk40t.gui.zmatrix import ZMatrix
|
20
|
-
from meerk40t.svgelements import Matrix
|
21
|
-
|
22
|
-
|
23
|
-
class Widget(list):
|
24
|
-
"""
|
25
|
-
Widgets are drawable, interaction objects within the scene. They have their own space, matrix, orientation, and
|
26
|
-
processing of events.
|
27
|
-
"""
|
28
|
-
|
29
|
-
def __init__(
|
30
|
-
self,
|
31
|
-
scene,
|
32
|
-
left: float = None,
|
33
|
-
top: float = None,
|
34
|
-
right: float = None,
|
35
|
-
bottom: float = None,
|
36
|
-
all: bool = False,
|
37
|
-
visible: bool = True,
|
38
|
-
):
|
39
|
-
"""
|
40
|
-
All produces a widget of infinite space rather than finite space.
|
41
|
-
"""
|
42
|
-
assert scene.__class__.__name__ == "Scene"
|
43
|
-
list.__init__(self)
|
44
|
-
self.matrix = Matrix()
|
45
|
-
self.scene = scene
|
46
|
-
self.parent = None
|
47
|
-
self.properties = ORIENTATION_RELATIVE
|
48
|
-
self.visible = True
|
49
|
-
# If this property is set, then it won't be counted as topmost in the hitchain...
|
50
|
-
self.transparent = False
|
51
|
-
if all:
|
52
|
-
# contains all points
|
53
|
-
self.left = -float("inf")
|
54
|
-
self.top = -float("inf")
|
55
|
-
self.right = float("inf")
|
56
|
-
self.bottom = float("inf")
|
57
|
-
else:
|
58
|
-
# contains no points
|
59
|
-
self.left = float("inf")
|
60
|
-
self.top = float("inf")
|
61
|
-
self.right = -float("inf")
|
62
|
-
self.bottom = -float("inf")
|
63
|
-
if left is not None:
|
64
|
-
self.left = left
|
65
|
-
if right is not None:
|
66
|
-
self.right = right
|
67
|
-
if top is not None:
|
68
|
-
self.top = top
|
69
|
-
if bottom is not None:
|
70
|
-
self.bottom = bottom
|
71
|
-
if visible is not None:
|
72
|
-
self.visible = visible
|
73
|
-
|
74
|
-
def __str__(self):
|
75
|
-
return f"{type(self).__name__}({self.left}, {self.top}, {self.right}, {self.bottom})"
|
76
|
-
|
77
|
-
def __repr__(self):
|
78
|
-
return f"{type(self).__name__}({self.left}, {self.top}, {self.right}, {self.bottom})"
|
79
|
-
|
80
|
-
def hit(self):
|
81
|
-
"""
|
82
|
-
Default hit state delegates to child-widgets within the current object.
|
83
|
-
"""
|
84
|
-
return HITCHAIN_DELEGATE
|
85
|
-
|
86
|
-
def draw(self, gc):
|
87
|
-
"""
|
88
|
-
Widget.draw() routine which concat's the widgets matrix and call the process_draw() function.
|
89
|
-
"""
|
90
|
-
|
91
|
-
if
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
def
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
def
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
self.
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
"""
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
def
|
231
|
-
"""
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
"""
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
"""
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
to
|
312
|
-
"""
|
313
|
-
if y is None:
|
314
|
-
y = x.y
|
315
|
-
x = x.x
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
self.
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
self
|
392
|
-
widget
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
"""
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
def
|
414
|
-
"""
|
415
|
-
|
416
|
-
"""
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
self.
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
self.
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
self.
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
self.
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
self.
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
def
|
462
|
-
"""
|
463
|
-
|
464
|
-
"""
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
1
|
+
from math import isinf, isnan
|
2
|
+
|
3
|
+
import wx
|
4
|
+
|
5
|
+
from meerk40t.gui.scene.sceneconst import (
|
6
|
+
BUFFER,
|
7
|
+
HITCHAIN_DELEGATE,
|
8
|
+
ORIENTATION_ABSOLUTE,
|
9
|
+
ORIENTATION_CENTERED,
|
10
|
+
ORIENTATION_DIM_MASK,
|
11
|
+
ORIENTATION_GRID,
|
12
|
+
ORIENTATION_HORIZONTAL,
|
13
|
+
ORIENTATION_MODE_MASK,
|
14
|
+
ORIENTATION_NO_BUFFER,
|
15
|
+
ORIENTATION_RELATIVE,
|
16
|
+
ORIENTATION_VERTICAL,
|
17
|
+
RESPONSE_CHAIN,
|
18
|
+
)
|
19
|
+
from meerk40t.gui.zmatrix import ZMatrix
|
20
|
+
from meerk40t.svgelements import Matrix
|
21
|
+
|
22
|
+
|
23
|
+
class Widget(list):
|
24
|
+
"""
|
25
|
+
Widgets are drawable, interaction objects within the scene. They have their own space, matrix, orientation, and
|
26
|
+
processing of events.
|
27
|
+
"""
|
28
|
+
|
29
|
+
def __init__(
|
30
|
+
self,
|
31
|
+
scene,
|
32
|
+
left: float = None,
|
33
|
+
top: float = None,
|
34
|
+
right: float = None,
|
35
|
+
bottom: float = None,
|
36
|
+
all: bool = False,
|
37
|
+
visible: bool = True,
|
38
|
+
):
|
39
|
+
"""
|
40
|
+
All produces a widget of infinite space rather than finite space.
|
41
|
+
"""
|
42
|
+
assert scene.__class__.__name__ == "Scene"
|
43
|
+
list.__init__(self)
|
44
|
+
self.matrix = Matrix()
|
45
|
+
self.scene = scene
|
46
|
+
self.parent = None
|
47
|
+
self.properties = ORIENTATION_RELATIVE
|
48
|
+
self.visible = True
|
49
|
+
# If this property is set, then it won't be counted as topmost in the hitchain...
|
50
|
+
self.transparent = False
|
51
|
+
if all:
|
52
|
+
# contains all points
|
53
|
+
self.left = -float("inf")
|
54
|
+
self.top = -float("inf")
|
55
|
+
self.right = float("inf")
|
56
|
+
self.bottom = float("inf")
|
57
|
+
else:
|
58
|
+
# contains no points
|
59
|
+
self.left = float("inf")
|
60
|
+
self.top = float("inf")
|
61
|
+
self.right = -float("inf")
|
62
|
+
self.bottom = -float("inf")
|
63
|
+
if left is not None:
|
64
|
+
self.left = left
|
65
|
+
if right is not None:
|
66
|
+
self.right = right
|
67
|
+
if top is not None:
|
68
|
+
self.top = top
|
69
|
+
if bottom is not None:
|
70
|
+
self.bottom = bottom
|
71
|
+
if visible is not None:
|
72
|
+
self.visible = visible
|
73
|
+
|
74
|
+
def __str__(self):
|
75
|
+
return f"{type(self).__name__}({self.left}, {self.top}, {self.right}, {self.bottom})"
|
76
|
+
|
77
|
+
def __repr__(self):
|
78
|
+
return f"{type(self).__name__}({self.left}, {self.top}, {self.right}, {self.bottom})"
|
79
|
+
|
80
|
+
def hit(self):
|
81
|
+
"""
|
82
|
+
Default hit state delegates to child-widgets within the current object.
|
83
|
+
"""
|
84
|
+
return HITCHAIN_DELEGATE
|
85
|
+
|
86
|
+
def draw(self, gc):
|
87
|
+
"""
|
88
|
+
Widget.draw() routine which concat's the widgets matrix and call the process_draw() function.
|
89
|
+
"""
|
90
|
+
## Adding some debug messages to understand the Darwin crashes
|
91
|
+
# Concat if this is a thing.
|
92
|
+
if not self.visible:
|
93
|
+
return
|
94
|
+
matrix = self.matrix
|
95
|
+
gc.PushState()
|
96
|
+
try:
|
97
|
+
if matrix is not None and not matrix.is_identity():
|
98
|
+
gc.ConcatTransform(wx.GraphicsContext.CreateMatrix(gc, ZMatrix(matrix)))
|
99
|
+
except Exception as e:
|
100
|
+
print (f"Could not concat gc transformation [{e}]")
|
101
|
+
gc.PopState()
|
102
|
+
return
|
103
|
+
|
104
|
+
try:
|
105
|
+
self.process_draw(gc)
|
106
|
+
except OSError as e:
|
107
|
+
print (f"Could not process draw [{e}]")
|
108
|
+
for i in range(len(self) - 1, -1, -1):
|
109
|
+
widget = self[i]
|
110
|
+
if widget is not None:
|
111
|
+
try:
|
112
|
+
widget.draw(gc)
|
113
|
+
except Exception as e:
|
114
|
+
print (f"Could not draw widget #{i} {type(widget).__name__} [{e}]")
|
115
|
+
gc.PopState()
|
116
|
+
|
117
|
+
def process_draw(self, gc):
|
118
|
+
"""
|
119
|
+
Overloaded function by derived widgets to process the drawing of this widget.
|
120
|
+
"""
|
121
|
+
pass
|
122
|
+
|
123
|
+
def contains(self, x, y=None):
|
124
|
+
"""
|
125
|
+
Query whether the current point is contained within the current widget.
|
126
|
+
"""
|
127
|
+
if y is None:
|
128
|
+
y = x.y
|
129
|
+
x = x.x
|
130
|
+
return (
|
131
|
+
self.visible
|
132
|
+
and self.left <= x <= self.right
|
133
|
+
and self.top <= y <= self.bottom
|
134
|
+
)
|
135
|
+
|
136
|
+
def event(
|
137
|
+
self,
|
138
|
+
window_pos=None,
|
139
|
+
space_pos=None,
|
140
|
+
event_type=None,
|
141
|
+
nearest_snap=None,
|
142
|
+
**kwargs,
|
143
|
+
):
|
144
|
+
"""
|
145
|
+
Default event which simply chains the event to the next hittable object.
|
146
|
+
"""
|
147
|
+
return RESPONSE_CHAIN
|
148
|
+
|
149
|
+
def notify_added_to_parent(self, parent):
|
150
|
+
"""
|
151
|
+
Widget notify that calls scene notify.
|
152
|
+
"""
|
153
|
+
self.scene.notify_added_to_parent(parent)
|
154
|
+
|
155
|
+
def notify_added_child(self, child):
|
156
|
+
"""
|
157
|
+
Widget notify that calls scene notify.
|
158
|
+
"""
|
159
|
+
self.scene.notify_added_child(child)
|
160
|
+
|
161
|
+
def notify_removed_from_parent(self, parent):
|
162
|
+
"""
|
163
|
+
Widget notify that calls scene notify.
|
164
|
+
"""
|
165
|
+
self.scene.notify_removed_from_parent(parent)
|
166
|
+
|
167
|
+
def notify_removed_child(self, child):
|
168
|
+
"""
|
169
|
+
Widget notify that calls scene notify.
|
170
|
+
"""
|
171
|
+
self.scene.notify_removed_child(child)
|
172
|
+
|
173
|
+
def notify_moved_child(self, child):
|
174
|
+
"""
|
175
|
+
Widget notify that calls scene notify.
|
176
|
+
"""
|
177
|
+
self.scene.notify_moved_child(child)
|
178
|
+
|
179
|
+
def translate(self, dx, dy):
|
180
|
+
"""
|
181
|
+
Move the current widget and all child widgets.
|
182
|
+
"""
|
183
|
+
if dx == 0 and dy == 0:
|
184
|
+
return
|
185
|
+
if isnan(dx) or isnan(dy) or isinf(dx) or isinf(dy):
|
186
|
+
return
|
187
|
+
self.translate_loop(dx, dy)
|
188
|
+
|
189
|
+
def translate_loop(self, dx, dy):
|
190
|
+
"""
|
191
|
+
Loop the translation call to all child objects.
|
192
|
+
"""
|
193
|
+
if self.properties & ORIENTATION_ABSOLUTE != 0:
|
194
|
+
return # Do not translate absolute oriented widgets.
|
195
|
+
self.translate_self(dx, dy)
|
196
|
+
for w in self:
|
197
|
+
w.translate_loop(dx, dy)
|
198
|
+
|
199
|
+
def translate_self(self, dx, dy):
|
200
|
+
"""
|
201
|
+
Perform the local translation of the current widget
|
202
|
+
"""
|
203
|
+
self.left += dx
|
204
|
+
self.right += dx
|
205
|
+
self.top += dy
|
206
|
+
self.bottom += dy
|
207
|
+
if self.parent is not None:
|
208
|
+
self.notify_moved_child(self)
|
209
|
+
|
210
|
+
def union_children_bounds(self, bounds=None):
|
211
|
+
"""
|
212
|
+
Find the bounds of the current widget and all child widgets.
|
213
|
+
"""
|
214
|
+
if bounds is None:
|
215
|
+
bounds = [self.left, self.top, self.right, self.bottom]
|
216
|
+
else:
|
217
|
+
if bounds[0] > self.left:
|
218
|
+
bounds[0] = self.left
|
219
|
+
if bounds[1] > self.top:
|
220
|
+
bounds[1] = self.top
|
221
|
+
if bounds[2] < self.right:
|
222
|
+
bounds[2] = self.left
|
223
|
+
if bounds[3] < self.bottom:
|
224
|
+
bounds[3] = self.bottom
|
225
|
+
for w in self:
|
226
|
+
w.union_children_bounds(bounds)
|
227
|
+
return bounds
|
228
|
+
|
229
|
+
@property
|
230
|
+
def height(self):
|
231
|
+
"""
|
232
|
+
Height of the current widget.
|
233
|
+
"""
|
234
|
+
return self.bottom - self.top
|
235
|
+
|
236
|
+
@property
|
237
|
+
def width(self):
|
238
|
+
"""
|
239
|
+
Width of the current widget.
|
240
|
+
"""
|
241
|
+
return self.right - self.left
|
242
|
+
|
243
|
+
def layout_by_orientation(self, widget, last, properties):
|
244
|
+
"""
|
245
|
+
Perform specific layout based on the properties given.
|
246
|
+
ORIENTATION_ABSOLUTE places the widget exactly in the scene.
|
247
|
+
ORIENTATION_NO_BUFFER nullifies any buffer between objects being laid out.
|
248
|
+
ORIENTATION_RELATIVE lays out the added widget relative to the parent.
|
249
|
+
ORIENTATION_GRID lays out the added widget in a DIM_MASK grid.
|
250
|
+
ORIENTATION_VERTICAL lays the added widget below the reference widget.
|
251
|
+
ORIENTATION_HORIZONTAL lays the added widget to the right of the reference widget.
|
252
|
+
ORIENTATION_CENTERED lays out the added widget and within the parent and all child centered.
|
253
|
+
"""
|
254
|
+
if properties & ORIENTATION_ABSOLUTE != 0:
|
255
|
+
return
|
256
|
+
if properties & ORIENTATION_NO_BUFFER != 0:
|
257
|
+
buffer = 0
|
258
|
+
else:
|
259
|
+
buffer = BUFFER
|
260
|
+
if (properties & ORIENTATION_MODE_MASK) == ORIENTATION_RELATIVE:
|
261
|
+
widget.translate(self.left, self.top)
|
262
|
+
return
|
263
|
+
elif last is None: # orientation = origin
|
264
|
+
widget.translate(self.left - widget.left, self.top - widget.top)
|
265
|
+
elif (properties & ORIENTATION_GRID) != 0:
|
266
|
+
dim = properties & ORIENTATION_DIM_MASK
|
267
|
+
if (properties & ORIENTATION_VERTICAL) != 0:
|
268
|
+
if dim == 0: # Vertical
|
269
|
+
if self.height >= last.bottom - self.top + widget.height:
|
270
|
+
# add to line
|
271
|
+
widget.translate(
|
272
|
+
last.left - widget.left, last.bottom - widget.top
|
273
|
+
)
|
274
|
+
else:
|
275
|
+
# line return
|
276
|
+
widget.translate(
|
277
|
+
last.right - widget.left + buffer, self.top - widget.top
|
278
|
+
)
|
279
|
+
else:
|
280
|
+
if dim == 0: # Horizontal
|
281
|
+
if self.width >= last.right - self.left + widget.width:
|
282
|
+
# add to line
|
283
|
+
widget.translate(
|
284
|
+
last.right - widget.left + buffer, last.top - widget.top
|
285
|
+
)
|
286
|
+
else:
|
287
|
+
# line return
|
288
|
+
widget.translate(
|
289
|
+
self.left - widget.left, last.bottom - widget.top + buffer
|
290
|
+
)
|
291
|
+
elif (properties & ORIENTATION_HORIZONTAL) != 0:
|
292
|
+
widget.translate(last.right - widget.left + buffer, last.top - widget.top)
|
293
|
+
elif (properties & ORIENTATION_VERTICAL) != 0:
|
294
|
+
widget.translate(last.left - widget.left, last.bottom - widget.top + buffer)
|
295
|
+
if properties & ORIENTATION_CENTERED:
|
296
|
+
self.center_children()
|
297
|
+
|
298
|
+
def center_children(self):
|
299
|
+
"""
|
300
|
+
Centers the children of the current widget within the current widget.
|
301
|
+
"""
|
302
|
+
child_bounds = self.union_children_bounds()
|
303
|
+
dx = self.left - (child_bounds[0] + child_bounds[2]) / 2.0
|
304
|
+
dy = self.top - (child_bounds[1] + child_bounds[3]) / 2.0
|
305
|
+
if dx != 0 and dy != 0:
|
306
|
+
for w in self:
|
307
|
+
w.translate_loop(dx, dy)
|
308
|
+
|
309
|
+
def center_widget(self, x, y=None):
|
310
|
+
"""
|
311
|
+
Moves the current widget to center within the bounds of the children.
|
312
|
+
"""
|
313
|
+
if y is None:
|
314
|
+
y = x.y
|
315
|
+
x = x.x
|
316
|
+
child_bounds = self.union_children_bounds()
|
317
|
+
cx = (child_bounds[0] + child_bounds[2]) / 2.0
|
318
|
+
cy = (child_bounds[1] + child_bounds[3]) / 2.0
|
319
|
+
self.translate(x - cx, y - cy)
|
320
|
+
|
321
|
+
def set_position(self, x, y=None):
|
322
|
+
"""
|
323
|
+
Sets the absolute position of this widget by moving it from its current position
|
324
|
+
to given position.
|
325
|
+
"""
|
326
|
+
if y is None:
|
327
|
+
y = x.y
|
328
|
+
x = x.x
|
329
|
+
dx = x - self.left
|
330
|
+
dy = y - self.top
|
331
|
+
self.translate(dx, dy)
|
332
|
+
|
333
|
+
def add_widget(self, index=-1, widget=None, properties=None):
|
334
|
+
"""
|
335
|
+
Add a widget to the current widget.
|
336
|
+
|
337
|
+
Adds at the particular index according to the properties.
|
338
|
+
|
339
|
+
The properties can be used to trigger particular layouts or properties for the added widget.
|
340
|
+
"""
|
341
|
+
with self.scene.scene_lock:
|
342
|
+
if properties is None:
|
343
|
+
properties = self.properties
|
344
|
+
if len(self) == 0:
|
345
|
+
last = self
|
346
|
+
else:
|
347
|
+
last = self[-1]
|
348
|
+
|
349
|
+
if 0 <= index < len(self):
|
350
|
+
self.insert(index, widget)
|
351
|
+
else:
|
352
|
+
self.append(widget)
|
353
|
+
widget.parent = self
|
354
|
+
self.layout_by_orientation(widget, last, properties)
|
355
|
+
self.notify_added_to_parent(self)
|
356
|
+
self.notify_added_child(widget)
|
357
|
+
|
358
|
+
def remove_all_widgets(self):
|
359
|
+
"""
|
360
|
+
Remove all widgets from the current widget.
|
361
|
+
"""
|
362
|
+
with self.scene.scene_lock:
|
363
|
+
for w in self:
|
364
|
+
if w is None:
|
365
|
+
continue
|
366
|
+
w.parent = None
|
367
|
+
w.notify_removed_from_parent(self)
|
368
|
+
self.notify_removed_child(w)
|
369
|
+
self.clear()
|
370
|
+
try:
|
371
|
+
self.scene.notify_tree_changed()
|
372
|
+
except AttributeError:
|
373
|
+
pass
|
374
|
+
|
375
|
+
def remove_widget(self, widget=None):
|
376
|
+
"""
|
377
|
+
Remove the given widget from being a child of the current widget.
|
378
|
+
"""
|
379
|
+
if widget is None:
|
380
|
+
return
|
381
|
+
with self.scene.scene_lock:
|
382
|
+
if isinstance(widget, Widget):
|
383
|
+
for i, w in enumerate(self):
|
384
|
+
if w is widget:
|
385
|
+
del self[i]
|
386
|
+
elif isinstance(widget, int):
|
387
|
+
index = widget
|
388
|
+
widget = self[index]
|
389
|
+
del self[index]
|
390
|
+
widget.parent = None
|
391
|
+
widget.notify_removed_from_parent(self)
|
392
|
+
self.notify_removed_child(widget)
|
393
|
+
try:
|
394
|
+
self.scene.notify_tree_changed()
|
395
|
+
except AttributeError:
|
396
|
+
pass
|
397
|
+
|
398
|
+
def set_widget(self, index, widget):
|
399
|
+
"""
|
400
|
+
Sets the given widget at the index to replace the child currently at the position of that widget.
|
401
|
+
"""
|
402
|
+
with self.scene.scene_lock:
|
403
|
+
w = self[index]
|
404
|
+
self[index] = widget
|
405
|
+
widget.parent = self
|
406
|
+
widget.notify_added_to_parent(self)
|
407
|
+
self.notify_removed_child(w)
|
408
|
+
try:
|
409
|
+
self.scene.notify_tree_changed()
|
410
|
+
except AttributeError:
|
411
|
+
pass
|
412
|
+
|
413
|
+
def on_matrix_change(self):
|
414
|
+
"""
|
415
|
+
Notification of a changed matrix.
|
416
|
+
"""
|
417
|
+
pass
|
418
|
+
|
419
|
+
def scene_matrix_reset(self):
|
420
|
+
"""
|
421
|
+
Resets the scene matrix.
|
422
|
+
"""
|
423
|
+
self.matrix.reset()
|
424
|
+
self.on_matrix_change()
|
425
|
+
|
426
|
+
def scene_post_scale(self, sx, sy=None, ax=0, ay=0):
|
427
|
+
"""
|
428
|
+
Adds a post_scale to the matrix.
|
429
|
+
"""
|
430
|
+
self.matrix.post_scale(sx, sy, ax, ay)
|
431
|
+
self.on_matrix_change()
|
432
|
+
|
433
|
+
def scene_post_pan(self, px, py):
|
434
|
+
"""
|
435
|
+
Adds a post_pan to the matrix.
|
436
|
+
"""
|
437
|
+
self.matrix.post_translate(px, py)
|
438
|
+
self.on_matrix_change()
|
439
|
+
|
440
|
+
def scene_post_rotate(self, angle, rx=0, ry=0):
|
441
|
+
"""
|
442
|
+
Adds a post_rotate to the matrix.
|
443
|
+
"""
|
444
|
+
self.matrix.post_rotate(angle, rx, ry)
|
445
|
+
self.on_matrix_change()
|
446
|
+
|
447
|
+
def scene_pre_scale(self, sx, sy=None, ax=0, ay=0):
|
448
|
+
"""
|
449
|
+
Adds a pre_scale to the matrix()
|
450
|
+
"""
|
451
|
+
self.matrix.pre_scale(sx, sy, ax, ay)
|
452
|
+
self.on_matrix_change()
|
453
|
+
|
454
|
+
def scene_pre_pan(self, px, py):
|
455
|
+
"""
|
456
|
+
Adds a pre_pan to the matrix()
|
457
|
+
"""
|
458
|
+
self.matrix.pre_translate(px, py)
|
459
|
+
self.on_matrix_change()
|
460
|
+
|
461
|
+
def scene_pre_rotate(self, angle, rx=0, ry=0):
|
462
|
+
"""
|
463
|
+
Adds a pre_rotate to the matrix()
|
464
|
+
"""
|
465
|
+
self.matrix.pre_rotate(angle, rx, ry)
|
466
|
+
self.on_matrix_change()
|
467
|
+
|
468
|
+
def get_scale_x(self):
|
469
|
+
"""
|
470
|
+
Gets the scale_x of the current matrix
|
471
|
+
"""
|
472
|
+
return self.matrix.value_scale_x()
|
473
|
+
|
474
|
+
def get_scale_y(self):
|
475
|
+
"""
|
476
|
+
Gets the scale_y of the current matrix
|
477
|
+
"""
|
478
|
+
return self.matrix.value_scale_y()
|
479
|
+
|
480
|
+
def get_skew_x(self):
|
481
|
+
"""
|
482
|
+
Gets the skew_x of the current matrix()
|
483
|
+
"""
|
484
|
+
return self.matrix.value_skew_x()
|
485
|
+
|
486
|
+
def get_skew_y(self):
|
487
|
+
"""
|
488
|
+
Gets the skew_y of the current matrix()
|
489
|
+
"""
|
490
|
+
return self.matrix.value_skew_y()
|
491
|
+
|
492
|
+
def get_translate_x(self):
|
493
|
+
"""
|
494
|
+
Gets the translate_x of the current matrix()
|
495
|
+
"""
|
496
|
+
return self.matrix.value_trans_x()
|
497
|
+
|
498
|
+
def get_translate_y(self):
|
499
|
+
"""
|
500
|
+
Gets the translate_y of the current matrix()
|
501
|
+
"""
|
502
|
+
return self.matrix.value_trans_y()
|
503
|
+
|
504
|
+
def show(self, flag=None):
|
505
|
+
"""
|
506
|
+
This does not automatically display the widget (yet)
|
507
|
+
"""
|
508
|
+
if flag is None:
|
509
|
+
flag = True
|
510
|
+
self.visible = flag
|
511
|
+
|
512
|
+
def hide(self, flag=None):
|
513
|
+
"""
|
514
|
+
This does not automatically display the widget (yet)
|
515
|
+
"""
|
516
|
+
if flag is None:
|
517
|
+
flag = True
|
518
|
+
self.visible = not flag
|