wxPython 4.3.2__cp315-cp315-win_amd64.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.
- wx/WebView2Loader.dll +0 -0
- wx/__init__.py +22 -0
- wx/__init__.pyi +10 -0
- wx/__version__.py +9 -0
- wx/__version__.pyi +15 -0
- wx/_adv.cp315-win_amd64.pyd +0 -0
- wx/_aui.cp315-win_amd64.pyd +0 -0
- wx/_core.cp315-win_amd64.pyd +0 -0
- wx/_dataview.cp315-win_amd64.pyd +0 -0
- wx/_glcanvas.cp315-win_amd64.pyd +0 -0
- wx/_grid.cp315-win_amd64.pyd +0 -0
- wx/_html.cp315-win_amd64.pyd +0 -0
- wx/_html2.cp315-win_amd64.pyd +0 -0
- wx/_media.cp315-win_amd64.pyd +0 -0
- wx/_msw.cp315-win_amd64.pyd +0 -0
- wx/_propgrid.cp315-win_amd64.pyd +0 -0
- wx/_ribbon.cp315-win_amd64.pyd +0 -0
- wx/_richtext.cp315-win_amd64.pyd +0 -0
- wx/_stc.cp315-win_amd64.pyd +0 -0
- wx/_xml.cp315-win_amd64.pyd +0 -0
- wx/_xrc.cp315-win_amd64.pyd +0 -0
- wx/adv.py +127 -0
- wx/adv.pyi +5931 -0
- wx/aui.py +70 -0
- wx/aui.pyi +4805 -0
- wx/core.py +3417 -0
- wx/core.pyi +62949 -0
- wx/dataview.py +176 -0
- wx/dataview.pyi +3828 -0
- wx/gizmos.py +18 -0
- wx/glcanvas.py +13 -0
- wx/glcanvas.pyi +544 -0
- wx/grid.py +237 -0
- wx/grid.pyi +5678 -0
- wx/html.py +38 -0
- wx/html.pyi +3283 -0
- wx/html2.py +46 -0
- wx/html2.pyi +1301 -0
- wx/include/wxPython/sip.h +1938 -0
- wx/include/wxPython/wxpy_api.h +418 -0
- wx/lib/CDate.py +201 -0
- wx/lib/ClickableHtmlWindow.py +57 -0
- wx/lib/__init__.py +0 -0
- wx/lib/activex.py +178 -0
- wx/lib/activexwrapper.py +153 -0
- wx/lib/agw/__init__.py +128 -0
- wx/lib/agw/advancedsplash.py +563 -0
- wx/lib/agw/aquabutton.py +1127 -0
- wx/lib/agw/artmanager.py +2110 -0
- wx/lib/agw/aui/__init__.py +295 -0
- wx/lib/agw/aui/aui_constants.py +2616 -0
- wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
- wx/lib/agw/aui/aui_utilities.py +648 -0
- wx/lib/agw/aui/auibar.py +4045 -0
- wx/lib/agw/aui/auibook.py +6288 -0
- wx/lib/agw/aui/dockart.py +1198 -0
- wx/lib/agw/aui/framemanager.py +10485 -0
- wx/lib/agw/aui/tabart.py +2749 -0
- wx/lib/agw/aui/tabmdi.py +679 -0
- wx/lib/agw/balloontip.py +1157 -0
- wx/lib/agw/buttonpanel.py +2787 -0
- wx/lib/agw/cubecolourdialog.py +3529 -0
- wx/lib/agw/customtreectrl.py +9908 -0
- wx/lib/agw/data/ShortcutEditor_1.png +0 -0
- wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
- wx/lib/agw/data/default_help_text.html +105 -0
- wx/lib/agw/flatmenu.py +7392 -0
- wx/lib/agw/flatnotebook.py +6669 -0
- wx/lib/agw/floatspin.py +1820 -0
- wx/lib/agw/fmcustomizedlg.py +535 -0
- wx/lib/agw/fmresources.py +407 -0
- wx/lib/agw/foldpanelbar.py +2282 -0
- wx/lib/agw/fourwaysplitter.py +1130 -0
- wx/lib/agw/genericmessagedialog.py +1549 -0
- wx/lib/agw/gradientbutton.py +731 -0
- wx/lib/agw/hyperlink.py +664 -0
- wx/lib/agw/hypertreelist.py +5756 -0
- wx/lib/agw/infobar.py +885 -0
- wx/lib/agw/knobctrl.py +944 -0
- wx/lib/agw/labelbook.py +3028 -0
- wx/lib/agw/multidirdialog.py +581 -0
- wx/lib/agw/peakmeter.py +1028 -0
- wx/lib/agw/persist/__init__.py +188 -0
- wx/lib/agw/persist/persist_constants.py +283 -0
- wx/lib/agw/persist/persist_handlers.py +2614 -0
- wx/lib/agw/persist/persistencemanager.py +863 -0
- wx/lib/agw/piectrl.py +1082 -0
- wx/lib/agw/pybusyinfo.py +399 -0
- wx/lib/agw/pycollapsiblepane.py +940 -0
- wx/lib/agw/pygauge.py +570 -0
- wx/lib/agw/pyprogress.py +916 -0
- wx/lib/agw/ribbon/__init__.py +198 -0
- wx/lib/agw/ribbon/art.py +219 -0
- wx/lib/agw/ribbon/art_aui.py +1283 -0
- wx/lib/agw/ribbon/art_default.py +81 -0
- wx/lib/agw/ribbon/art_internal.py +248 -0
- wx/lib/agw/ribbon/art_msw.py +2735 -0
- wx/lib/agw/ribbon/art_osx.py +52 -0
- wx/lib/agw/ribbon/bar.py +1259 -0
- wx/lib/agw/ribbon/buttonbar.py +1317 -0
- wx/lib/agw/ribbon/control.py +205 -0
- wx/lib/agw/ribbon/gallery.py +973 -0
- wx/lib/agw/ribbon/page.py +946 -0
- wx/lib/agw/ribbon/panel.py +1170 -0
- wx/lib/agw/ribbon/toolbar.py +1441 -0
- wx/lib/agw/rulerctrl.py +1885 -0
- wx/lib/agw/scrolledthumbnail.py +2116 -0
- wx/lib/agw/shapedbutton.py +1809 -0
- wx/lib/agw/shortcuteditor.py +2642 -0
- wx/lib/agw/speedmeter.py +1800 -0
- wx/lib/agw/supertooltip.py +1443 -0
- wx/lib/agw/thumbnailctrl.py +529 -0
- wx/lib/agw/toasterbox.py +1327 -0
- wx/lib/agw/ultimatelistctrl.py +13671 -0
- wx/lib/agw/xlsgrid.py +2111 -0
- wx/lib/agw/zoombar.py +1336 -0
- wx/lib/analogclock/__init__.py +140 -0
- wx/lib/analogclock/analogclock.py +630 -0
- wx/lib/analogclock/helpers.py +986 -0
- wx/lib/analogclock/lib_setup/__init__.py +0 -0
- wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
- wx/lib/analogclock/lib_setup/fontselect.py +57 -0
- wx/lib/analogclock/setup.py +490 -0
- wx/lib/analogclock/styles.py +47 -0
- wx/lib/anchors.py +103 -0
- wx/lib/art/__init__.py +4 -0
- wx/lib/art/flagart.py +1583 -0
- wx/lib/art/img2pyartprov.py +56 -0
- wx/lib/busy.py +152 -0
- wx/lib/buttons.py +1140 -0
- wx/lib/calendar.py +1596 -0
- wx/lib/checkbox.py +837 -0
- wx/lib/colourchooser/__init__.py +36 -0
- wx/lib/colourchooser/canvas.py +145 -0
- wx/lib/colourchooser/intl.py +24 -0
- wx/lib/colourchooser/pycolourbox.py +89 -0
- wx/lib/colourchooser/pycolourchooser.py +626 -0
- wx/lib/colourchooser/pycolourslider.py +98 -0
- wx/lib/colourchooser/pypalette.py +208 -0
- wx/lib/colourdb.py +740 -0
- wx/lib/colourselect.py +385 -0
- wx/lib/colourutils.py +118 -0
- wx/lib/combotreebox.py +944 -0
- wx/lib/delayedresult.py +420 -0
- wx/lib/dialogs.py +510 -0
- wx/lib/docview.py +3210 -0
- wx/lib/dragscroller.py +79 -0
- wx/lib/editor/README.txt +77 -0
- wx/lib/editor/__init__.py +24 -0
- wx/lib/editor/editor.py +974 -0
- wx/lib/editor/images.py +15 -0
- wx/lib/editor/selection.py +44 -0
- wx/lib/embeddedimage.py +76 -0
- wx/lib/eventStack.py +136 -0
- wx/lib/eventwatcher.py +440 -0
- wx/lib/evtmgr.py +521 -0
- wx/lib/expando.py +393 -0
- wx/lib/fancytext.py +494 -0
- wx/lib/filebrowsebutton.py +461 -0
- wx/lib/flashwin.py +262 -0
- wx/lib/flashwin_old.py +651 -0
- wx/lib/floatcanvas/FCEvents.py +53 -0
- wx/lib/floatcanvas/FCObjects.py +2910 -0
- wx/lib/floatcanvas/FloatCanvas.py +1025 -0
- wx/lib/floatcanvas/GUIMode.py +396 -0
- wx/lib/floatcanvas/NavCanvas.py +162 -0
- wx/lib/floatcanvas/Resources.py +319 -0
- wx/lib/floatcanvas/ScreenShot.py +1788 -0
- wx/lib/floatcanvas/Utilities/BBox.py +313 -0
- wx/lib/floatcanvas/Utilities/Colors.py +137 -0
- wx/lib/floatcanvas/Utilities/GUI.py +91 -0
- wx/lib/floatcanvas/Utilities/__init__.py +7 -0
- wx/lib/floatcanvas/__init__.py +124 -0
- wx/lib/foldmenu.py +89 -0
- wx/lib/gestures.py +310 -0
- wx/lib/gizmos/__init__.py +18 -0
- wx/lib/gizmos/dynamicsash.py +1202 -0
- wx/lib/gizmos/ledctrl.py +299 -0
- wx/lib/gizmos/treelistctrl.py +87 -0
- wx/lib/graphics.py +1942 -0
- wx/lib/gridmovers.py +516 -0
- wx/lib/iewin.py +249 -0
- wx/lib/iewin_old.py +894 -0
- wx/lib/imagebrowser.py +853 -0
- wx/lib/imageutils.py +163 -0
- wx/lib/infoframe.py +490 -0
- wx/lib/inspection.py +1254 -0
- wx/lib/intctrl.py +990 -0
- wx/lib/itemspicker.py +256 -0
- wx/lib/langlistctrl.py +480 -0
- wx/lib/layoutf.py +271 -0
- wx/lib/masked/__init__.py +27 -0
- wx/lib/masked/combobox.py +839 -0
- wx/lib/masked/ctrl.py +108 -0
- wx/lib/masked/ipaddrctrl.py +241 -0
- wx/lib/masked/maskededit.py +7262 -0
- wx/lib/masked/numctrl.py +2000 -0
- wx/lib/masked/textctrl.py +465 -0
- wx/lib/masked/timectrl.py +1465 -0
- wx/lib/mixins/__init__.py +17 -0
- wx/lib/mixins/grid.py +47 -0
- wx/lib/mixins/gridlabelrenderer.py +277 -0
- wx/lib/mixins/imagelist.py +77 -0
- wx/lib/mixins/inspection.py +184 -0
- wx/lib/mixins/listctrl.py +893 -0
- wx/lib/mixins/rubberband.py +403 -0
- wx/lib/mixins/treemixin.py +678 -0
- wx/lib/msgpanel.py +95 -0
- wx/lib/multisash.py +746 -0
- wx/lib/myole4ax.idl +178 -0
- wx/lib/myole4ax.tlb +0 -0
- wx/lib/newevent.py +229 -0
- wx/lib/newevent.pyi +25 -0
- wx/lib/nvdlg.py +156 -0
- wx/lib/ogl/__init__.py +13 -0
- wx/lib/ogl/basic.py +3989 -0
- wx/lib/ogl/bmpshape.py +86 -0
- wx/lib/ogl/canvas.py +467 -0
- wx/lib/ogl/composit.py +1576 -0
- wx/lib/ogl/diagram.py +230 -0
- wx/lib/ogl/divided.py +482 -0
- wx/lib/ogl/drawn.py +898 -0
- wx/lib/ogl/lines.py +1809 -0
- wx/lib/ogl/oglmisc.py +607 -0
- wx/lib/pdfviewer/__init__.py +113 -0
- wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
- wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
- wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
- wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
- wx/lib/pdfviewer/bitmaps/Save.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
- wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
- wx/lib/pdfviewer/buttonpanel.py +285 -0
- wx/lib/pdfviewer/images.py +240 -0
- wx/lib/pdfviewer/viewer.py +1118 -0
- wx/lib/pdfwin.py +295 -0
- wx/lib/pdfwin_old.py +789 -0
- wx/lib/platebtn.py +789 -0
- wx/lib/plot/CHANGELOG.md +150 -0
- wx/lib/plot/README.md +16 -0
- wx/lib/plot/__init__.py +46 -0
- wx/lib/plot/__main__.py +5 -0
- wx/lib/plot/examples/__init__.py +0 -0
- wx/lib/plot/examples/demo.py +1010 -0
- wx/lib/plot/examples/simple_example.py +56 -0
- wx/lib/plot/plotcanvas.py +2985 -0
- wx/lib/plot/polyobjects.py +1524 -0
- wx/lib/plot/utils.py +334 -0
- wx/lib/popupctl.py +251 -0
- wx/lib/printout.py +1155 -0
- wx/lib/progressindicator.py +151 -0
- wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
- wx/lib/pubsub/README_WxPython.txt +22 -0
- wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
- wx/lib/pubsub/__init__.py +25 -0
- wx/lib/pubsub/core/__init__.py +92 -0
- wx/lib/pubsub/core/arg1/__init__.py +16 -0
- wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
- wx/lib/pubsub/core/arg1/publisher.py +40 -0
- wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
- wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
- wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
- wx/lib/pubsub/core/callables.py +198 -0
- wx/lib/pubsub/core/imp2.py +62 -0
- wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
- wx/lib/pubsub/core/kwargs/__init__.py +16 -0
- wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
- wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
- wx/lib/pubsub/core/kwargs/publisher.py +77 -0
- wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
- wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
- wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
- wx/lib/pubsub/core/listener.py +40 -0
- wx/lib/pubsub/core/listenerbase.py +185 -0
- wx/lib/pubsub/core/notificationmgr.py +185 -0
- wx/lib/pubsub/core/publisherbase.py +189 -0
- wx/lib/pubsub/core/topicargspec.py +77 -0
- wx/lib/pubsub/core/topicdefnprovider.py +631 -0
- wx/lib/pubsub/core/topicexc.py +72 -0
- wx/lib/pubsub/core/topicmgr.py +454 -0
- wx/lib/pubsub/core/topicobj.py +472 -0
- wx/lib/pubsub/core/topictreetraverser.py +143 -0
- wx/lib/pubsub/core/topicutils.py +119 -0
- wx/lib/pubsub/core/treeconfig.py +21 -0
- wx/lib/pubsub/core/validatedefnargs.py +29 -0
- wx/lib/pubsub/core/weakmethod.py +102 -0
- wx/lib/pubsub/policies.py +24 -0
- wx/lib/pubsub/pub.py +199 -0
- wx/lib/pubsub/setuparg1.py +47 -0
- wx/lib/pubsub/setupkwargs.py +29 -0
- wx/lib/pubsub/utils/__init__.py +27 -0
- wx/lib/pubsub/utils/exchandling.py +100 -0
- wx/lib/pubsub/utils/misc.py +99 -0
- wx/lib/pubsub/utils/notification.py +331 -0
- wx/lib/pubsub/utils/topictreeprinter.py +195 -0
- wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
- wx/lib/pydocview.py +3300 -0
- wx/lib/rcsizer.py +227 -0
- wx/lib/resizewidget.py +357 -0
- wx/lib/scrolledpanel.py +243 -0
- wx/lib/sheet.py +350 -0
- wx/lib/sized_controls.py +691 -0
- wx/lib/softwareupdate.py +355 -0
- wx/lib/splitter.py +925 -0
- wx/lib/statbmp.py +199 -0
- wx/lib/stattext.py +321 -0
- wx/lib/throbber.py +424 -0
- wx/lib/ticker.py +306 -0
- wx/lib/ticker_xrc.py +48 -0
- wx/lib/utils.py +89 -0
- wx/lib/wordwrap.py +97 -0
- wx/lib/wxcairo/__init__.py +139 -0
- wx/lib/wxcairo/wx_cairocffi.py +200 -0
- wx/lib/wxcairo/wx_pycairo.py +455 -0
- wx/lib/wxpTag.py +274 -0
- wx/libcairo-2.dll +0 -0
- wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
- wx/media.py +30 -0
- wx/media.pyi +272 -0
- wx/msw.py +16 -0
- wx/msw.pyi +91 -0
- wx/propgrid.py +498 -0
- wx/propgrid.pyi +7427 -0
- wx/py/CHANGES.txt +796 -0
- wx/py/Py.ico +0 -0
- wx/py/PyAlaCarte.py +34 -0
- wx/py/PyAlaMode.py +34 -0
- wx/py/PyAlaModeTest.py +33 -0
- wx/py/PyCrust.ico +0 -0
- wx/py/PyCrust.py +78 -0
- wx/py/PyCrust_16.png +0 -0
- wx/py/PyCrust_32.png +0 -0
- wx/py/PyFilling.py +35 -0
- wx/py/PyShell.py +78 -0
- wx/py/PySlices.ico +0 -0
- wx/py/PySlices.py +98 -0
- wx/py/PySlicesShell.py +94 -0
- wx/py/PySlices_16.png +0 -0
- wx/py/PySlices_32.png +0 -0
- wx/py/PyWrap.py +52 -0
- wx/py/README.txt +77 -0
- wx/py/__init__.py +20 -0
- wx/py/buffer.py +136 -0
- wx/py/crust.py +403 -0
- wx/py/crustslices.py +403 -0
- wx/py/dispatcher.py +259 -0
- wx/py/document.py +37 -0
- wx/py/editor.py +844 -0
- wx/py/editwindow.py +316 -0
- wx/py/filling.py +358 -0
- wx/py/frame.py +976 -0
- wx/py/images.py +212 -0
- wx/py/interpreter.py +161 -0
- wx/py/introspect.py +402 -0
- wx/py/magic.py +98 -0
- wx/py/parse.py +134 -0
- wx/py/path.py +36 -0
- wx/py/pseudo.py +99 -0
- wx/py/shell.py +1579 -0
- wx/py/sliceshell.py +3805 -0
- wx/py/tests/test_interpreter.py +71 -0
- wx/py/tests/test_introspect.py +810 -0
- wx/py/tests/test_pseudo.py +70 -0
- wx/py/tests/test_version.py +36 -0
- wx/py/tests/testall.py +22 -0
- wx/py/version.py +7 -0
- wx/py.typed +0 -0
- wx/ribbon.py +48 -0
- wx/ribbon.pyi +3099 -0
- wx/richtext.py +141 -0
- wx/richtext.pyi +13581 -0
- wx/siplib.cp315-win_amd64.pyd +0 -0
- wx/siplib.pyi +19 -0
- wx/stc.py +59 -0
- wx/stc.pyi +9918 -0
- wx/svg/__init__.py +363 -0
- wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
- wx/tools/__init__.py +18 -0
- wx/tools/dbg.py +268 -0
- wx/tools/genaxmodule.py +50 -0
- wx/tools/helpviewer.py +92 -0
- wx/tools/img2img.py +85 -0
- wx/tools/img2png.py +54 -0
- wx/tools/img2py.py +306 -0
- wx/tools/img2xpm.py +54 -0
- wx/tools/pywxrc.py +951 -0
- wx/tools/wxget.py +254 -0
- wx/tools/wxget_docs_demo.py +183 -0
- wx/wxbase334u_net_vc140_x64.dll +0 -0
- wx/wxbase334u_vc140_x64.dll +0 -0
- wx/wxbase334u_xml_vc140_x64.dll +0 -0
- wx/wxmsw334u_adv_vc140_x64.dll +0 -0
- wx/wxmsw334u_aui_vc140_x64.dll +0 -0
- wx/wxmsw334u_core_vc140_x64.dll +0 -0
- wx/wxmsw334u_gl_vc140_x64.dll +0 -0
- wx/wxmsw334u_html_vc140_x64.dll +0 -0
- wx/wxmsw334u_media_vc140_x64.dll +0 -0
- wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
- wx/wxmsw334u_qa_vc140_x64.dll +0 -0
- wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
- wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
- wx/wxmsw334u_stc_vc140_x64.dll +0 -0
- wx/wxmsw334u_webview_vc140_x64.dll +0 -0
- wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
- wx/xml.py +18 -0
- wx/xml.pyi +728 -0
- wx/xrc.py +68 -0
- wx/xrc.pyi +896 -0
- wxpython-4.3.2.dist-info/METADATA +71 -0
- wxpython-4.3.2.dist-info/RECORD +472 -0
- wxpython-4.3.2.dist-info/WHEEL +5 -0
- wxpython-4.3.2.dist-info/entry_points.txt +13 -0
- wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
- wxpython-4.3.2.dist-info/top_level.txt +1 -0
wx/lib/ogl/diagram.py
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#----------------------------------------------------------------------------
|
|
3
|
+
# Name: diagram.py
|
|
4
|
+
# Purpose: Diagram class
|
|
5
|
+
#
|
|
6
|
+
# Author: Pierre Hjälm (from C++ original by Julian Smart)
|
|
7
|
+
#
|
|
8
|
+
# Created: 2004-05-08
|
|
9
|
+
# Copyright: (c) 2004 Pierre Hjälm - 1998 Julian Smart
|
|
10
|
+
# Licence: wxWindows license
|
|
11
|
+
# Tags: phoenix-port, unittest, py3-port, documented
|
|
12
|
+
#----------------------------------------------------------------------------
|
|
13
|
+
"""
|
|
14
|
+
The :class:`~lib.ogl.diagram.Diagram` class.
|
|
15
|
+
"""
|
|
16
|
+
import wx
|
|
17
|
+
|
|
18
|
+
DEFAULT_MOUSE_TOLERANCE = 3
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Diagram(object):
|
|
22
|
+
"""
|
|
23
|
+
The :class:`Diagram` encapsulates an entire diagram, with methods for
|
|
24
|
+
drawing. A diagram has an associated :class:`ShapeCanvas`.
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
def __init__(self):
|
|
28
|
+
"""
|
|
29
|
+
Default class constructor.
|
|
30
|
+
"""
|
|
31
|
+
self._diagramCanvas = None
|
|
32
|
+
self._quickEditMode = False
|
|
33
|
+
self._snapToGrid = True
|
|
34
|
+
self._gridSpacing = 5.0
|
|
35
|
+
self._shapeList = []
|
|
36
|
+
self._mouseTolerance = DEFAULT_MOUSE_TOLERANCE
|
|
37
|
+
|
|
38
|
+
def Redraw(self, dc):
|
|
39
|
+
"""Redraw the shapes in the diagram on the specified device context."""
|
|
40
|
+
if self._shapeList:
|
|
41
|
+
for object in self._shapeList:
|
|
42
|
+
object.Draw(dc)
|
|
43
|
+
|
|
44
|
+
def Clear(self, dc):
|
|
45
|
+
"""Clear the specified device context."""
|
|
46
|
+
dc.Clear()
|
|
47
|
+
|
|
48
|
+
def AddShape(self, object, addAfter = None):
|
|
49
|
+
"""
|
|
50
|
+
Add a shape to the diagram. If addAfter is not None, the shape
|
|
51
|
+
will be added after addAfter.
|
|
52
|
+
|
|
53
|
+
:param `object`: an instance of :class:`~lib.ogl.Shape`
|
|
54
|
+
:param `addAfter`: an instance of :class:`~lib.ogl.Shape`
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
if not object in self._shapeList:
|
|
58
|
+
if addAfter:
|
|
59
|
+
self._shapeList.insert(self._shapeList.index(addAfter) + 1, object)
|
|
60
|
+
else:
|
|
61
|
+
self._shapeList.append(object)
|
|
62
|
+
|
|
63
|
+
object.SetCanvas(self.GetCanvas())
|
|
64
|
+
|
|
65
|
+
def InsertShape(self, object):
|
|
66
|
+
"""
|
|
67
|
+
Insert a shape at the front of the shape list.
|
|
68
|
+
|
|
69
|
+
:param `object`: an instance of :class:`~lib.ogl.Shape`
|
|
70
|
+
|
|
71
|
+
"""
|
|
72
|
+
self._shapeList.insert(0, object)
|
|
73
|
+
|
|
74
|
+
def RemoveShape(self, object):
|
|
75
|
+
"""
|
|
76
|
+
Remove the shape from the diagram (non-recursively) but do not
|
|
77
|
+
delete it.
|
|
78
|
+
|
|
79
|
+
:param `object`: an instance of :class:`~lib.ogl.Shape`
|
|
80
|
+
|
|
81
|
+
"""
|
|
82
|
+
if object in self._shapeList:
|
|
83
|
+
self._shapeList.remove(object)
|
|
84
|
+
|
|
85
|
+
def RemoveAllShapes(self):
|
|
86
|
+
"""Remove all shapes from the diagram but do not delete the shapes."""
|
|
87
|
+
self._shapeList = []
|
|
88
|
+
|
|
89
|
+
def DeleteAllShapes(self):
|
|
90
|
+
"""Remove and delete all shapes in the diagram."""
|
|
91
|
+
for shape in self._shapeList[:]:
|
|
92
|
+
if not shape.GetParent():
|
|
93
|
+
self.RemoveShape(shape)
|
|
94
|
+
shape.Delete()
|
|
95
|
+
|
|
96
|
+
def ShowAll(self, show):
|
|
97
|
+
"""Call Show for each shape in the diagram.
|
|
98
|
+
|
|
99
|
+
:param `show`: True or False
|
|
100
|
+
|
|
101
|
+
"""
|
|
102
|
+
for shape in self._shapeList:
|
|
103
|
+
shape.Show(show)
|
|
104
|
+
|
|
105
|
+
def DrawOutline(self, dc, x1, y1, x2, y2):
|
|
106
|
+
"""
|
|
107
|
+
Draw an outline rectangle on the current device context.
|
|
108
|
+
|
|
109
|
+
:param `dc`: the :class:`wx.MemoryDC` device context
|
|
110
|
+
:param `x1`: the x1 position
|
|
111
|
+
:param `y2`: the y2 position
|
|
112
|
+
:param `x1`: the x1 position
|
|
113
|
+
:param `y2`: the y2 position
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
dc.SetPen(wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT))
|
|
117
|
+
dc.SetBrush(wx.TRANSPARENT_BRUSH)
|
|
118
|
+
|
|
119
|
+
dc.DrawLines([[int(x1), int(y1)], [int(x2), int(y1)], [int(x2), int(y2)], [int(x1), int(y2)], [int(x1), int(y1)]])
|
|
120
|
+
|
|
121
|
+
def RecentreAll(self, dc):
|
|
122
|
+
"""Recentre all the text that should be centred.
|
|
123
|
+
|
|
124
|
+
:param `dc`: the :class:`wx.MemoryDC` device context
|
|
125
|
+
|
|
126
|
+
"""
|
|
127
|
+
for shape in self._shapeList:
|
|
128
|
+
shape.Recentre(dc)
|
|
129
|
+
|
|
130
|
+
def SetCanvas(self, canvas):
|
|
131
|
+
"""
|
|
132
|
+
Set the canvas associated with this diagram.
|
|
133
|
+
|
|
134
|
+
:param `canvas`: an instance of :class:`~lib.ogl.Canvas`
|
|
135
|
+
|
|
136
|
+
"""
|
|
137
|
+
self._diagramCanvas = canvas
|
|
138
|
+
|
|
139
|
+
def GetCanvas(self):
|
|
140
|
+
"""Return the shape canvas associated with this diagram."""
|
|
141
|
+
return self._diagramCanvas
|
|
142
|
+
|
|
143
|
+
def FindShape(self, id):
|
|
144
|
+
"""
|
|
145
|
+
Return the shape for the given identifier.
|
|
146
|
+
|
|
147
|
+
:param `id`: the shape id to find
|
|
148
|
+
|
|
149
|
+
"""
|
|
150
|
+
for shape in self._shapeList:
|
|
151
|
+
if shape.GetId() == id:
|
|
152
|
+
return shape
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
def Snap(self, x, y):
|
|
156
|
+
"""
|
|
157
|
+
'Snaps' the coordinate to the nearest grid position, if
|
|
158
|
+
snap-to-grid is on.
|
|
159
|
+
|
|
160
|
+
:param `x`: the x position
|
|
161
|
+
:param `y`: the y position
|
|
162
|
+
|
|
163
|
+
"""
|
|
164
|
+
if self._snapToGrid:
|
|
165
|
+
return self._gridSpacing * int(x / self._gridSpacing + 0.5), self._gridSpacing * int(y / self._gridSpacing + 0.5)
|
|
166
|
+
return x, y
|
|
167
|
+
|
|
168
|
+
def SetGridSpacing(self, spacing):
|
|
169
|
+
"""
|
|
170
|
+
Sets grid spacing.
|
|
171
|
+
|
|
172
|
+
:param `spacing`: the spacing
|
|
173
|
+
|
|
174
|
+
"""
|
|
175
|
+
self._gridSpacing = spacing
|
|
176
|
+
|
|
177
|
+
def SetSnapToGrid(self, snap):
|
|
178
|
+
"""
|
|
179
|
+
Sets snap-to-grid mode.
|
|
180
|
+
|
|
181
|
+
:param `snap`: `True` to snap to grid or `False` not to snap
|
|
182
|
+
|
|
183
|
+
"""
|
|
184
|
+
self._snapToGrid = snap
|
|
185
|
+
|
|
186
|
+
def GetGridSpacing(self):
|
|
187
|
+
"""Return the grid spacing."""
|
|
188
|
+
return self._gridSpacing
|
|
189
|
+
|
|
190
|
+
def GetSnapToGrid(self):
|
|
191
|
+
"""Return snap-to-grid mode."""
|
|
192
|
+
return self._snapToGrid
|
|
193
|
+
|
|
194
|
+
def SetQuickEditMode(self, mode):
|
|
195
|
+
"""
|
|
196
|
+
Set quick-edit-mode on of off.
|
|
197
|
+
|
|
198
|
+
In this mode, refreshes are minimized, but the diagram may need
|
|
199
|
+
manual refreshing occasionally.
|
|
200
|
+
|
|
201
|
+
:param `mode`: `True` to quick edit or `False` for normal edit
|
|
202
|
+
|
|
203
|
+
"""
|
|
204
|
+
self._quickEditMode = mode
|
|
205
|
+
|
|
206
|
+
def GetQuickEditMode(self):
|
|
207
|
+
"""Return quick edit mode."""
|
|
208
|
+
return self._quickEditMode
|
|
209
|
+
|
|
210
|
+
def SetMouseTolerance(self, tolerance):
|
|
211
|
+
"""Set the tolerance within which a mouse move is ignored.
|
|
212
|
+
|
|
213
|
+
The default is 3 pixels.
|
|
214
|
+
|
|
215
|
+
:param `tolerance`: the tolerance level
|
|
216
|
+
|
|
217
|
+
"""
|
|
218
|
+
self._mouseTolerance = tolerance
|
|
219
|
+
|
|
220
|
+
def GetMouseTolerance(self):
|
|
221
|
+
"""Return the tolerance within which a mouse move is ignored."""
|
|
222
|
+
return self._mouseTolerance
|
|
223
|
+
|
|
224
|
+
def GetShapeList(self):
|
|
225
|
+
"""Return the internal shape list."""
|
|
226
|
+
return self._shapeList
|
|
227
|
+
|
|
228
|
+
def GetCount(self):
|
|
229
|
+
"""Return the number of shapes in the diagram."""
|
|
230
|
+
return len(self._shapeList)
|
wx/lib/ogl/divided.py
ADDED
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#----------------------------------------------------------------------------
|
|
3
|
+
# Name: divided.py
|
|
4
|
+
# Purpose: DividedShape class
|
|
5
|
+
#
|
|
6
|
+
# Author: Pierre Hjälm (from C++ original by Julian Smart)
|
|
7
|
+
#
|
|
8
|
+
# Created: 2004-05-08
|
|
9
|
+
# Copyright: (c) 2004 Pierre Hjälm - 1998 Julian Smart
|
|
10
|
+
# Licence: wxWindows license
|
|
11
|
+
# Tags: phoenix-port, unittest, py3-port, documented
|
|
12
|
+
#----------------------------------------------------------------------------
|
|
13
|
+
"""
|
|
14
|
+
The :class:`~lib.ogl.divided.DividedShape` class.
|
|
15
|
+
"""
|
|
16
|
+
import sys
|
|
17
|
+
import wx
|
|
18
|
+
|
|
19
|
+
from .basic import ControlPoint, RectangleShape, Shape
|
|
20
|
+
from .oglmisc import *
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DividedShapeControlPoint(ControlPoint):
|
|
24
|
+
"""The class:`DividedShapeControlPoint` class."""
|
|
25
|
+
def __init__(self, the_canvas, object, region, size, the_m_xoffset, the_m_yoffset, the_type):
|
|
26
|
+
"""
|
|
27
|
+
Default class constructor.
|
|
28
|
+
|
|
29
|
+
:param `theCanvas`: a :class:`~lib.ogl.Canvas`
|
|
30
|
+
:param `object`: not used ???
|
|
31
|
+
:param `region`: an instance of :class:`~lib.ogl.ShapeRegion`
|
|
32
|
+
:param float `size`: the size
|
|
33
|
+
:param float `the_m_xoffset`: the the_m_xoffset position ???
|
|
34
|
+
:param float `the_m_yoffset`: the the_m_yoffset position ???
|
|
35
|
+
:param int `the_type`: one of the following types
|
|
36
|
+
|
|
37
|
+
======================================== ==================================
|
|
38
|
+
Control point type Description
|
|
39
|
+
======================================== ==================================
|
|
40
|
+
`CONTROL_POINT_VERTICAL` Vertical
|
|
41
|
+
`CONTROL_POINT_HORIZONTAL` Horizontal
|
|
42
|
+
`CONTROL_POINT_DIAGONAL` Diagonal
|
|
43
|
+
======================================== ==================================
|
|
44
|
+
|
|
45
|
+
"""
|
|
46
|
+
ControlPoint.__init__(self, the_canvas, object, size, the_m_xoffset, the_m_yoffset, the_type)
|
|
47
|
+
self.regionId = region
|
|
48
|
+
|
|
49
|
+
def OnDragLeft(self, draw, x, y, keys = 0, attachment = 0):
|
|
50
|
+
"""The drag left handler."""
|
|
51
|
+
dc = wx.MemoryDC()
|
|
52
|
+
dc.SelectObject(self.GetCanvas().GetBuffer())
|
|
53
|
+
self.GetCanvas().PrepareDC(dc)
|
|
54
|
+
dc.SetLogicalFunction(OGLRBLF)
|
|
55
|
+
|
|
56
|
+
dottedPen = wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT)
|
|
57
|
+
dc.SetPen(dottedPen)
|
|
58
|
+
dc.SetBrush(wx.TRANSPARENT_BRUSH)
|
|
59
|
+
|
|
60
|
+
dividedObject = self._shape
|
|
61
|
+
x1 = dividedObject.GetX() - dividedObject.GetWidth() / 2.0
|
|
62
|
+
y1 = y
|
|
63
|
+
x2 = dividedObject.GetX() + dividedObject.GetWidth() / 2.0
|
|
64
|
+
y2 = y
|
|
65
|
+
|
|
66
|
+
dc.DrawLine(x1, y1, x2, y2)
|
|
67
|
+
|
|
68
|
+
def OnBeginDragLeft(self, x, y, keys = 0, attachment = 0):
|
|
69
|
+
"""The begin drag left handler."""
|
|
70
|
+
dc = wx.MemoryDC()
|
|
71
|
+
dc.SelectObject(self.GetCanvas().GetBuffer())
|
|
72
|
+
self.GetCanvas().PrepareDC(dc)
|
|
73
|
+
dc.SetLogicalFunction(OGLRBLF)
|
|
74
|
+
|
|
75
|
+
dottedPen = wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT)
|
|
76
|
+
dc.SetPen(dottedPen)
|
|
77
|
+
dc.SetBrush(wx.TRANSPARENT_BRUSH)
|
|
78
|
+
|
|
79
|
+
dividedObject = self._shape
|
|
80
|
+
|
|
81
|
+
x1 = dividedObject.GetX() - dividedObject.GetWidth() / 2.0
|
|
82
|
+
y1 = y
|
|
83
|
+
x2 = dividedObject.GetX() + dividedObject.GetWidth() / 2.0
|
|
84
|
+
y2 = y
|
|
85
|
+
|
|
86
|
+
dc.DrawLine(x1, y1, x2, y2)
|
|
87
|
+
self._canvas.CaptureMouse()
|
|
88
|
+
|
|
89
|
+
def OnEndDragLeft(self, x, y, keys = 0, attachment = 0):
|
|
90
|
+
"""The end drag left handler."""
|
|
91
|
+
dc = wx.MemoryDC()
|
|
92
|
+
dc.SelectObject(self.GetCanvas().GetBuffer())
|
|
93
|
+
self.GetCanvas().PrepareDC(dc)
|
|
94
|
+
|
|
95
|
+
dividedObject = self._shape
|
|
96
|
+
if not dividedObject.GetRegions()[self.regionId]:
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
thisRegion = dividedObject.GetRegions()[self.regionId]
|
|
100
|
+
nextRegion = None
|
|
101
|
+
|
|
102
|
+
dc.SetLogicalFunction(wx.COPY)
|
|
103
|
+
|
|
104
|
+
if self._canvas.HasCapture():
|
|
105
|
+
self._canvas.ReleaseMouse()
|
|
106
|
+
|
|
107
|
+
# Find the old top and bottom of this region,
|
|
108
|
+
# and calculate the new proportion for this region
|
|
109
|
+
# if legal.
|
|
110
|
+
currentY = dividedObject.GetY() - dividedObject.GetHeight() / 2.0
|
|
111
|
+
maxY = dividedObject.GetY() + dividedObject.GetHeight() / 2.0
|
|
112
|
+
|
|
113
|
+
# Save values
|
|
114
|
+
theRegionTop = 0
|
|
115
|
+
nextRegionBottom = 0
|
|
116
|
+
|
|
117
|
+
for i in range(len(dividedObject.GetRegions())):
|
|
118
|
+
region = dividedObject.GetRegions()[i]
|
|
119
|
+
proportion = region._regionProportionY
|
|
120
|
+
yy = currentY + dividedObject.GetHeight() * proportion
|
|
121
|
+
actualY = min(maxY, yy)
|
|
122
|
+
|
|
123
|
+
if region == thisRegion:
|
|
124
|
+
thisRegionTop = currentY
|
|
125
|
+
|
|
126
|
+
if i + 1 < len(dividedObject.GetRegions()):
|
|
127
|
+
nextRegion = dividedObject.GetRegions()[i + 1]
|
|
128
|
+
if region == nextRegion:
|
|
129
|
+
nextRegionBottom = actualY
|
|
130
|
+
|
|
131
|
+
currentY = actualY
|
|
132
|
+
|
|
133
|
+
if not nextRegion:
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
# Check that we haven't gone above this region or below
|
|
137
|
+
# next region.
|
|
138
|
+
if y <= thisRegionTop or y >= nextRegionBottom:
|
|
139
|
+
return
|
|
140
|
+
|
|
141
|
+
dividedObject.EraseLinks(dc)
|
|
142
|
+
|
|
143
|
+
# Now calculate the new proportions of this region and the next region
|
|
144
|
+
thisProportion = float(y - thisRegionTop) / dividedObject.GetHeight()
|
|
145
|
+
nextProportion = float(nextRegionBottom - y) / dividedObject.GetHeight()
|
|
146
|
+
|
|
147
|
+
thisRegion.SetProportions(0, thisProportion)
|
|
148
|
+
nextRegion.SetProportions(0, nextProportion)
|
|
149
|
+
self._yoffset = y - dividedObject.GetY()
|
|
150
|
+
|
|
151
|
+
# Now reformat text
|
|
152
|
+
for i, region in enumerate(dividedObject.GetRegions()):
|
|
153
|
+
if region.GetText():
|
|
154
|
+
s = region.GetText()
|
|
155
|
+
dividedObject.FormatText(dc, s, i)
|
|
156
|
+
|
|
157
|
+
dividedObject.SetRegionSizes()
|
|
158
|
+
dividedObject.Draw(dc)
|
|
159
|
+
dividedObject.GetEventHandler().OnMoveLinks(dc)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class DividedShape(RectangleShape):
|
|
163
|
+
"""
|
|
164
|
+
A :class:`DividedShape` is a rectangle with a number of vertical divisions.
|
|
165
|
+
Each division may have its text formatted with independent characteristics,
|
|
166
|
+
and the size of each division relative to the whole image may be specified.
|
|
167
|
+
"""
|
|
168
|
+
def __init__(self, w, h):
|
|
169
|
+
"""
|
|
170
|
+
Default class constructor.
|
|
171
|
+
|
|
172
|
+
:param `w`: width of rectangle
|
|
173
|
+
:param `h`: height of rectangle
|
|
174
|
+
|
|
175
|
+
"""
|
|
176
|
+
RectangleShape.__init__(self, w, h)
|
|
177
|
+
self.ClearRegions()
|
|
178
|
+
|
|
179
|
+
def OnDraw(self, dc):
|
|
180
|
+
"""The draw handler."""
|
|
181
|
+
RectangleShape.OnDraw(self, dc)
|
|
182
|
+
|
|
183
|
+
def OnDrawContents(self, dc):
|
|
184
|
+
"""The draw contents handler."""
|
|
185
|
+
if self.GetRegions():
|
|
186
|
+
defaultProportion = 1.0 / len(self.GetRegions())
|
|
187
|
+
else:
|
|
188
|
+
defaultProportion = 0.0
|
|
189
|
+
currentY = self._ypos - self._height / 2.0
|
|
190
|
+
maxY = self._ypos + self._height / 2.0
|
|
191
|
+
|
|
192
|
+
leftX = self._xpos - self._width / 2.0
|
|
193
|
+
rightX = self._xpos + self._width / 2.0
|
|
194
|
+
|
|
195
|
+
if self._pen:
|
|
196
|
+
dc.SetPen(self._pen)
|
|
197
|
+
|
|
198
|
+
dc.SetTextForeground(self._textColour)
|
|
199
|
+
|
|
200
|
+
# For efficiency, don't do this under X - doesn't make
|
|
201
|
+
# any visible difference for our purposes.
|
|
202
|
+
if sys.platform[:3] == "win":
|
|
203
|
+
dc.SetTextBackground(self._brush.GetColour())
|
|
204
|
+
|
|
205
|
+
if self.GetDisableLabel():
|
|
206
|
+
return
|
|
207
|
+
|
|
208
|
+
xMargin = 2
|
|
209
|
+
yMargin = 2
|
|
210
|
+
|
|
211
|
+
dc.SetBackgroundMode(wx.TRANSPARENT)
|
|
212
|
+
|
|
213
|
+
for region in self.GetRegions():
|
|
214
|
+
dc.SetFont(region.GetFont())
|
|
215
|
+
dc.SetTextForeground(region.GetActualColourObject())
|
|
216
|
+
|
|
217
|
+
if region._regionProportionY < 0:
|
|
218
|
+
proportion = defaultProportion
|
|
219
|
+
else:
|
|
220
|
+
proportion = region._regionProportionY
|
|
221
|
+
|
|
222
|
+
y = currentY + self._height * proportion
|
|
223
|
+
actualY = min(maxY, y)
|
|
224
|
+
|
|
225
|
+
centreX = self._xpos
|
|
226
|
+
centreY = currentY + (actualY - currentY) / 2.0
|
|
227
|
+
|
|
228
|
+
DrawFormattedText(dc, region._formattedText, centreX, centreY, self._width - 2 * xMargin, actualY - currentY - 2 * yMargin, region._formatMode)
|
|
229
|
+
|
|
230
|
+
if y <= maxY and region != self.GetRegions()[-1]:
|
|
231
|
+
regionPen = region.GetActualPen()
|
|
232
|
+
if regionPen:
|
|
233
|
+
dc.SetPen(regionPen)
|
|
234
|
+
dc.DrawLine(int(leftX), int(y), int(rightX), int(y))
|
|
235
|
+
|
|
236
|
+
currentY = actualY
|
|
237
|
+
|
|
238
|
+
def SetSize(self, w, h, recursive = True):
|
|
239
|
+
"""
|
|
240
|
+
Set the size.
|
|
241
|
+
|
|
242
|
+
:param `w`: width of rectangle
|
|
243
|
+
:param `h`: height of rectangle
|
|
244
|
+
:param `recursive`: not implemented
|
|
245
|
+
|
|
246
|
+
"""
|
|
247
|
+
self.SetAttachmentSize(w, h)
|
|
248
|
+
self._width = w
|
|
249
|
+
self._height = h
|
|
250
|
+
self.SetRegionSizes()
|
|
251
|
+
|
|
252
|
+
def SetRegionSizes(self):
|
|
253
|
+
"""
|
|
254
|
+
Set all region sizes according to proportions and this object
|
|
255
|
+
total size.
|
|
256
|
+
"""
|
|
257
|
+
if not self.GetRegions():
|
|
258
|
+
return
|
|
259
|
+
|
|
260
|
+
if self.GetRegions():
|
|
261
|
+
defaultProportion = 1.0 / len(self.GetRegions())
|
|
262
|
+
else:
|
|
263
|
+
defaultProportion = 0.0
|
|
264
|
+
currentY = self._ypos - self._height / 2.0
|
|
265
|
+
maxY = self._ypos + self._height / 2.0
|
|
266
|
+
|
|
267
|
+
for region in self.GetRegions():
|
|
268
|
+
if region._regionProportionY <= 0:
|
|
269
|
+
proportion = defaultProportion
|
|
270
|
+
else:
|
|
271
|
+
proportion = region._regionProportionY
|
|
272
|
+
|
|
273
|
+
sizeY = proportion * self._height
|
|
274
|
+
y = currentY + sizeY
|
|
275
|
+
actualY = min(maxY, y)
|
|
276
|
+
|
|
277
|
+
centreY = currentY + (actualY - currentY) / 2.0
|
|
278
|
+
|
|
279
|
+
region.SetSize(self._width, sizeY)
|
|
280
|
+
region.SetPosition(0, centreY - self._ypos)
|
|
281
|
+
|
|
282
|
+
currentY = actualY
|
|
283
|
+
|
|
284
|
+
def GetAttachmentPosition(self, attachment, nth = 0, no_arcs = 1, line = None):
|
|
285
|
+
"""
|
|
286
|
+
Get the attachment position.
|
|
287
|
+
|
|
288
|
+
Attachment points correspond to regions in the divided box.
|
|
289
|
+
|
|
290
|
+
:param `attachment`: the attachment ???
|
|
291
|
+
:param `nth`: get nth attachment ???
|
|
292
|
+
:param `no_arcs`: ???
|
|
293
|
+
:param `line`: ???
|
|
294
|
+
|
|
295
|
+
"""
|
|
296
|
+
totalNumberAttachments = len(self.GetRegions()) * 2 + 2
|
|
297
|
+
if self.GetAttachmentMode() == ATTACHMENT_MODE_NONE or attachment >= totalNumberAttachments:
|
|
298
|
+
return Shape.GetAttachmentPosition(self, attachment, nth, no_arcs)
|
|
299
|
+
|
|
300
|
+
n = len(self.GetRegions())
|
|
301
|
+
isEnd = line and line.IsEnd(self)
|
|
302
|
+
|
|
303
|
+
left = self._xpos - self._width / 2.0
|
|
304
|
+
right = self._xpos + self._width / 2.0
|
|
305
|
+
top = self._ypos - self._height / 2.0
|
|
306
|
+
bottom = self._ypos + self._height / 2.0
|
|
307
|
+
|
|
308
|
+
# Zero is top, n + 1 is bottom
|
|
309
|
+
if attachment == 0:
|
|
310
|
+
y = top
|
|
311
|
+
if self._spaceAttachments:
|
|
312
|
+
if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
|
|
313
|
+
# Align line according to the next handle along
|
|
314
|
+
point = line.GetNextControlPoint(self)
|
|
315
|
+
if point[0] < left:
|
|
316
|
+
x = left
|
|
317
|
+
elif point[0] > right:
|
|
318
|
+
x = right
|
|
319
|
+
else:
|
|
320
|
+
x = point[0]
|
|
321
|
+
else:
|
|
322
|
+
x = left + (nth + 1) * self._width / (no_arcs + 1.0)
|
|
323
|
+
else:
|
|
324
|
+
x = self._xpos
|
|
325
|
+
elif attachment == n + 1:
|
|
326
|
+
y = bottom
|
|
327
|
+
if self._spaceAttachments:
|
|
328
|
+
if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
|
|
329
|
+
# Align line according to the next handle along
|
|
330
|
+
point = line.GetNextControlPoint(self)
|
|
331
|
+
if point[0] < left:
|
|
332
|
+
x = left
|
|
333
|
+
elif point[0] > right:
|
|
334
|
+
x = right
|
|
335
|
+
else:
|
|
336
|
+
x = point[0]
|
|
337
|
+
else:
|
|
338
|
+
x = left + (nth + 1) * self._width / (no_arcs + 1.0)
|
|
339
|
+
else:
|
|
340
|
+
x = self._xpos
|
|
341
|
+
else: # Left or right
|
|
342
|
+
isLeft = not attachment < (n + 1)
|
|
343
|
+
if isLeft:
|
|
344
|
+
i = totalNumberAttachments - attachment - 1
|
|
345
|
+
else:
|
|
346
|
+
i = attachment - 1
|
|
347
|
+
|
|
348
|
+
region = self.GetRegions()[i]
|
|
349
|
+
if region:
|
|
350
|
+
if isLeft:
|
|
351
|
+
x = left
|
|
352
|
+
else:
|
|
353
|
+
x = right
|
|
354
|
+
|
|
355
|
+
# Calculate top and bottom of region
|
|
356
|
+
top = self._ypos + region._y - region._height / 2.0
|
|
357
|
+
bottom = self._ypos + region._y + region._height / 2.0
|
|
358
|
+
|
|
359
|
+
# Assuming we can trust the absolute size and
|
|
360
|
+
# position of these regions
|
|
361
|
+
if self._spaceAttachments:
|
|
362
|
+
if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
|
|
363
|
+
# Align line according to the next handle along
|
|
364
|
+
point = line.GetNextControlPoint(self)
|
|
365
|
+
if point[1] < bottom:
|
|
366
|
+
y = bottom
|
|
367
|
+
elif point[1] > top:
|
|
368
|
+
y = top
|
|
369
|
+
else:
|
|
370
|
+
y = point[1]
|
|
371
|
+
else:
|
|
372
|
+
y = top + (nth + 1) * region._height / (no_arcs + 1.0)
|
|
373
|
+
else:
|
|
374
|
+
y = self._ypos + region._y
|
|
375
|
+
else:
|
|
376
|
+
return False
|
|
377
|
+
return x, y
|
|
378
|
+
|
|
379
|
+
def GetNumberOfAttachments(self):
|
|
380
|
+
"""
|
|
381
|
+
Get the number of attachments.
|
|
382
|
+
|
|
383
|
+
There are two attachments for each region (left and right),
|
|
384
|
+
plus one on the top and one on the bottom.
|
|
385
|
+
"""
|
|
386
|
+
n = len(self.GetRegions()) * 2 + 2
|
|
387
|
+
|
|
388
|
+
maxN = n - 1
|
|
389
|
+
for point in self._attachmentPoints:
|
|
390
|
+
if point._id > maxN:
|
|
391
|
+
maxN = point._id
|
|
392
|
+
|
|
393
|
+
return maxN + 1
|
|
394
|
+
|
|
395
|
+
def AttachmentIsValid(self, attachment):
|
|
396
|
+
"""
|
|
397
|
+
Is the attachment valid?
|
|
398
|
+
|
|
399
|
+
:param `attachment`: the attachment
|
|
400
|
+
|
|
401
|
+
"""
|
|
402
|
+
totalNumberAttachments = len(self.GetRegions()) * 2 + 2
|
|
403
|
+
if attachment >= totalNumberAttachments:
|
|
404
|
+
return Shape.AttachmentIsValid(self, attachment)
|
|
405
|
+
else:
|
|
406
|
+
return attachment >= 0
|
|
407
|
+
|
|
408
|
+
def MakeControlPoints(self):
|
|
409
|
+
"""
|
|
410
|
+
Make the control points.
|
|
411
|
+
"""
|
|
412
|
+
RectangleShape.MakeControlPoints(self)
|
|
413
|
+
self.MakeMandatoryControlPoints()
|
|
414
|
+
|
|
415
|
+
def MakeMandatoryControlPoints(self):
|
|
416
|
+
"""
|
|
417
|
+
Make the mandatory control points.
|
|
418
|
+
"""
|
|
419
|
+
currentY = self.GetY() - self._height / 2.0
|
|
420
|
+
maxY = self.GetY() + self._height / 2.0
|
|
421
|
+
|
|
422
|
+
for i, region in enumerate(self.GetRegions()):
|
|
423
|
+
proportion = region._regionProportionY
|
|
424
|
+
|
|
425
|
+
y = currentY + self._height * proportion
|
|
426
|
+
actualY = min(maxY, y)
|
|
427
|
+
|
|
428
|
+
if region != self.GetRegions()[-1]:
|
|
429
|
+
controlPoint = DividedShapeControlPoint(self._canvas, self, i, CONTROL_POINT_SIZE, 0, actualY - self.GetY(), 0)
|
|
430
|
+
self._canvas.AddShape(controlPoint)
|
|
431
|
+
self._controlPoints.append(controlPoint)
|
|
432
|
+
|
|
433
|
+
currentY = actualY
|
|
434
|
+
|
|
435
|
+
def ResetControlPoints(self):
|
|
436
|
+
"""
|
|
437
|
+
Reset the control points.
|
|
438
|
+
|
|
439
|
+
:note: May only have the region handles, (n - 1) of them
|
|
440
|
+
|
|
441
|
+
"""
|
|
442
|
+
|
|
443
|
+
if len(self._controlPoints) > len(self.GetRegions()) - 1:
|
|
444
|
+
RectangleShape.ResetControlPoints(self)
|
|
445
|
+
|
|
446
|
+
self.ResetMandatoryControlPoints()
|
|
447
|
+
|
|
448
|
+
def ResetMandatoryControlPoints(self):
|
|
449
|
+
"""
|
|
450
|
+
Reset the mandatory control points.
|
|
451
|
+
"""
|
|
452
|
+
currentY = self.GetY() - self._height / 2.0
|
|
453
|
+
maxY = self.GetY() + self._height / 2.0
|
|
454
|
+
|
|
455
|
+
i = 0
|
|
456
|
+
for controlPoint in self._controlPoints:
|
|
457
|
+
if isinstance(controlPoint, DividedShapeControlPoint):
|
|
458
|
+
region = self.GetRegions()[i]
|
|
459
|
+
proportion = region._regionProportionY
|
|
460
|
+
|
|
461
|
+
y = currentY + self._height * proportion
|
|
462
|
+
actualY = min(maxY, y)
|
|
463
|
+
|
|
464
|
+
controlPoint._xoffset = 0
|
|
465
|
+
controlPoint._yoffset = actualY - self.GetY()
|
|
466
|
+
|
|
467
|
+
currentY = actualY
|
|
468
|
+
|
|
469
|
+
i += 1
|
|
470
|
+
|
|
471
|
+
def EditRegions(self):
|
|
472
|
+
"""
|
|
473
|
+
Edit the region colours and styles. Not implemented.
|
|
474
|
+
"""
|
|
475
|
+
print("EditRegions() is unimplemented")
|
|
476
|
+
|
|
477
|
+
def OnRightClick(self, x, y, keys = 0, attachment = 0):
|
|
478
|
+
"""The right click handler."""
|
|
479
|
+
if keys & KEY_CTRL:
|
|
480
|
+
self.EditRegions()
|
|
481
|
+
else:
|
|
482
|
+
RectangleShape.OnRightClick(self, x, y, keys, attachment)
|