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
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#----------------------------------------------------------------------------
|
|
3
|
+
# Name: aui_utilities.py
|
|
4
|
+
# Purpose:
|
|
5
|
+
#
|
|
6
|
+
# Author: Andrea Gavana <andrea.gavana@gmail.com>
|
|
7
|
+
#
|
|
8
|
+
# Created:
|
|
9
|
+
# Version:
|
|
10
|
+
# Date: 31 March 2009
|
|
11
|
+
# Licence: wxWindows license
|
|
12
|
+
# Tags: phoenix-port, unittest, documented, py3-port
|
|
13
|
+
#----------------------------------------------------------------------------
|
|
14
|
+
"""
|
|
15
|
+
This module contains some common functions used by :mod:`lib.agw.aui` to
|
|
16
|
+
manipulate colours, bitmaps, text, gradient shadings and custom dragging images
|
|
17
|
+
for :class:`~wx.lib.agw.aui.auibook.AuiNotebook` tabs.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
|
|
21
|
+
__date__ = "31 March 2009"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
import wx
|
|
25
|
+
|
|
26
|
+
from .aui_constants import *
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def BlendColour(fg, bg, alpha):
|
|
30
|
+
"""
|
|
31
|
+
Blends the two colour component `fg` and `bg` into one colour component, adding
|
|
32
|
+
an optional alpha channel.
|
|
33
|
+
|
|
34
|
+
:param wx.Colour `fg`: the first colour component;
|
|
35
|
+
:param wx.Colour `bg`: the second colour component;
|
|
36
|
+
:param integer `alpha`: an optional transparency value.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
result = bg + (alpha*(fg - bg))
|
|
40
|
+
|
|
41
|
+
if result < 0.0:
|
|
42
|
+
result = 0.0
|
|
43
|
+
if result > 255:
|
|
44
|
+
result = 255
|
|
45
|
+
|
|
46
|
+
return result
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def StepColour(c, ialpha):
|
|
50
|
+
"""
|
|
51
|
+
Darken/lighten the input colour `c`.
|
|
52
|
+
|
|
53
|
+
:param wx.Colour `c`: a colour to darken/lighten;
|
|
54
|
+
:param integer `ialpha`: a transparency value.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
if ialpha == 100:
|
|
58
|
+
return c
|
|
59
|
+
|
|
60
|
+
r, g, b, a = c.Red(), c.Green(), c.Blue(), c.Alpha()
|
|
61
|
+
|
|
62
|
+
# ialpha is 0..200 where 0 is completely black
|
|
63
|
+
# and 200 is completely white and 100 is the same
|
|
64
|
+
# convert that to normal alpha 0.0 - 1.0
|
|
65
|
+
ialpha = min(ialpha, 200)
|
|
66
|
+
ialpha = max(ialpha, 0)
|
|
67
|
+
alpha = (ialpha - 100.0)/100.0
|
|
68
|
+
|
|
69
|
+
if ialpha > 100:
|
|
70
|
+
|
|
71
|
+
# blend with white
|
|
72
|
+
bg = 255
|
|
73
|
+
alpha = 1.0 - alpha # 0 = transparent fg 1 = opaque fg
|
|
74
|
+
|
|
75
|
+
else:
|
|
76
|
+
|
|
77
|
+
# blend with black
|
|
78
|
+
bg = 0
|
|
79
|
+
alpha = 1.0 + alpha # 0 = transparent fg 1 = opaque fg
|
|
80
|
+
|
|
81
|
+
r = BlendColour(r, bg, alpha)
|
|
82
|
+
g = BlendColour(g, bg, alpha)
|
|
83
|
+
b = BlendColour(b, bg, alpha)
|
|
84
|
+
|
|
85
|
+
return wx.Colour(int(r), int(g), int(b), int(a))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def LightContrastColour(c):
|
|
89
|
+
"""
|
|
90
|
+
Creates a new, lighter colour based on the input colour `c`.
|
|
91
|
+
|
|
92
|
+
:param wx.Colour `c`: the input colour to analyze.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
amount = 120
|
|
96
|
+
|
|
97
|
+
# if the colour is especially dark, then
|
|
98
|
+
# make the contrast even lighter
|
|
99
|
+
if c.Red() < 128 and c.Green() < 128 and c.Blue() < 128:
|
|
100
|
+
amount = 160
|
|
101
|
+
|
|
102
|
+
return StepColour(c, amount)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def ChopText(dc, text, max_size):
|
|
106
|
+
"""
|
|
107
|
+
Chops the input `text` if its size does not fit in `max_size`, by cutting the
|
|
108
|
+
text and adding ellipsis at the end.
|
|
109
|
+
|
|
110
|
+
:param `dc`: a :class:`wx.DC` device context;
|
|
111
|
+
:param string `text`: the text to chop;
|
|
112
|
+
:param integer `max_size`: the maximum size in which the text should fit.
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
# first check if the text fits with no problems
|
|
116
|
+
x, y, dummy = dc.GetFullMultiLineTextExtent(text)
|
|
117
|
+
|
|
118
|
+
if x <= max_size:
|
|
119
|
+
return text
|
|
120
|
+
|
|
121
|
+
textLen = len(text)
|
|
122
|
+
last_good_length = 0
|
|
123
|
+
|
|
124
|
+
for i in range(textLen, -1, -1):
|
|
125
|
+
s = text[0:i]
|
|
126
|
+
s += "..."
|
|
127
|
+
|
|
128
|
+
x, y = dc.GetTextExtent(s)
|
|
129
|
+
last_good_length = i
|
|
130
|
+
|
|
131
|
+
if x < max_size:
|
|
132
|
+
break
|
|
133
|
+
|
|
134
|
+
ret = text[0:last_good_length] + "..."
|
|
135
|
+
return ret
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def BitmapFromBits(bits, w, h, colour):
|
|
139
|
+
"""
|
|
140
|
+
A utility function that creates a masked bitmap from raw bits (XBM format).
|
|
141
|
+
|
|
142
|
+
:param string `bits`: the raw bits of the bitmap;
|
|
143
|
+
:param integer `w`: the bitmap width;
|
|
144
|
+
:param integer `h`: the bitmap height;
|
|
145
|
+
:param wx.Colour `colour`: the colour which will replace all white pixels in the
|
|
146
|
+
raw bitmap.
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
img = wx.Bitmap(bits, w, h).ConvertToImage()
|
|
150
|
+
img.Replace(0, 0, 0, 123, 123, 123)
|
|
151
|
+
img.Replace(255, 255, 255, colour.Red(), colour.Green(), colour.Blue())
|
|
152
|
+
img.SetMaskColour(123, 123, 123)
|
|
153
|
+
return wx.Bitmap(img)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def IndentPressedBitmap(rect, button_state):
|
|
157
|
+
"""
|
|
158
|
+
Indents the input rectangle `rect` based on the value of `button_state`.
|
|
159
|
+
|
|
160
|
+
:param wx.Rect `rect`: the button bitmap rectangle;
|
|
161
|
+
:param integer `button_state`: the button state.
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
if button_state == AUI_BUTTON_STATE_PRESSED:
|
|
165
|
+
rect.x += 1
|
|
166
|
+
rect.y += 1
|
|
167
|
+
|
|
168
|
+
return rect
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def GetBaseColour():
|
|
172
|
+
"""
|
|
173
|
+
Returns the face shading colour on push buttons/backgrounds,
|
|
174
|
+
mimicking as closely as possible the platform UI colours.
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
base_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
|
|
178
|
+
|
|
179
|
+
# the base_colour is too pale to use as our base colour,
|
|
180
|
+
# so darken it a bit
|
|
181
|
+
if ((255-base_colour.Red()) +
|
|
182
|
+
(255-base_colour.Green()) +
|
|
183
|
+
(255-base_colour.Blue()) < 60):
|
|
184
|
+
|
|
185
|
+
base_colour = StepColour(base_colour, 92)
|
|
186
|
+
|
|
187
|
+
return base_colour
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def MakeDisabledBitmap(bitmap):
|
|
191
|
+
"""
|
|
192
|
+
Convert the given image (in place) to a grayed-out version, appropriate for a 'disabled' appearance.
|
|
193
|
+
|
|
194
|
+
:param wx.Bitmap `bitmap`: the bitmap to gray-out.
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
return bitmap.ConvertToDisabled()
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def Clip(a, b, c):
|
|
201
|
+
"""
|
|
202
|
+
Clips the value in `a` based on the extremes `b` and `c`.
|
|
203
|
+
|
|
204
|
+
:param `a`: the value to analyze;
|
|
205
|
+
:param `b`: a minimum value;
|
|
206
|
+
:param `c`: a maximum value.
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
return ((a < b and [b]) or [(a > c and [c] or [a])[0]])[0]
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def LightColour(colour, percent):
|
|
213
|
+
"""
|
|
214
|
+
Brighten input `colour` by `percent`.
|
|
215
|
+
|
|
216
|
+
:param wx.Colour `colour`: the colour to be brightened;
|
|
217
|
+
:param integer `percent`: brightening percentage.
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
end_colour = wx.WHITE
|
|
221
|
+
|
|
222
|
+
rd = end_colour.Red() - colour.Red()
|
|
223
|
+
gd = end_colour.Green() - colour.Green()
|
|
224
|
+
bd = end_colour.Blue() - colour.Blue()
|
|
225
|
+
|
|
226
|
+
high = 100
|
|
227
|
+
|
|
228
|
+
# We take the percent way of the colour from colour -. white
|
|
229
|
+
i = percent
|
|
230
|
+
r = colour.Red() + ((i*rd*100)/high)/100
|
|
231
|
+
g = colour.Green() + ((i*gd*100)/high)/100
|
|
232
|
+
b = colour.Blue() + ((i*bd*100)/high)/100
|
|
233
|
+
a = colour.Alpha()
|
|
234
|
+
return wx.Colour(int(r), int(g), int(b), int(a))
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def PaneCreateStippleBitmap():
|
|
238
|
+
"""
|
|
239
|
+
Creates a stipple bitmap to be used in a :class:`wx.Brush`.
|
|
240
|
+
|
|
241
|
+
This is used to draw sash resize hints.
|
|
242
|
+
"""
|
|
243
|
+
|
|
244
|
+
data = [0, 0, 0, 192, 192, 192, 192, 192, 192, 0, 0, 0]
|
|
245
|
+
img = wx.Image(2, 2)
|
|
246
|
+
counter = 0
|
|
247
|
+
|
|
248
|
+
for ii in range(2):
|
|
249
|
+
for jj in range(2):
|
|
250
|
+
img.SetRGB(ii, jj, data[counter], data[counter+1], data[counter+2])
|
|
251
|
+
counter = counter + 3
|
|
252
|
+
|
|
253
|
+
return img.ConvertToBitmap()
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def DrawMACCloseButton(colour, backColour=None):
|
|
257
|
+
"""
|
|
258
|
+
Draws the wxMAC tab close button using :class:`GraphicsContext`.
|
|
259
|
+
|
|
260
|
+
:param wx.Colour `colour`: the colour to use to draw the circle;
|
|
261
|
+
:param wx.Colour `backColour`: the optional background colour for the circle.
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
bmp = wx.Bitmap.FromRGBA(16, 16)
|
|
265
|
+
dc = wx.MemoryDC()
|
|
266
|
+
dc.SelectObject(bmp)
|
|
267
|
+
|
|
268
|
+
gc = wx.GraphicsContext.Create(dc)
|
|
269
|
+
gc.SetBrush(wx.Brush(colour))
|
|
270
|
+
path = gc.CreatePath()
|
|
271
|
+
path.AddCircle(6.5, 7, 6.5)
|
|
272
|
+
path.CloseSubpath()
|
|
273
|
+
gc.FillPath(path)
|
|
274
|
+
|
|
275
|
+
path = gc.CreatePath()
|
|
276
|
+
if backColour is not None:
|
|
277
|
+
pen = wx.Pen(backColour, 2)
|
|
278
|
+
else:
|
|
279
|
+
pen = wx.Pen("white", 2)
|
|
280
|
+
|
|
281
|
+
pen.SetCap(wx.CAP_BUTT)
|
|
282
|
+
pen.SetJoin(wx.JOIN_BEVEL)
|
|
283
|
+
gc.SetPen(pen)
|
|
284
|
+
path.MoveToPoint(3.5, 4)
|
|
285
|
+
path.AddLineToPoint(9.5, 10)
|
|
286
|
+
path.MoveToPoint(3.5, 10)
|
|
287
|
+
path.AddLineToPoint(9.5, 4)
|
|
288
|
+
path.CloseSubpath()
|
|
289
|
+
gc.DrawPath(path)
|
|
290
|
+
|
|
291
|
+
dc.SelectObject(wx.NullBitmap)
|
|
292
|
+
return bmp
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def DarkenBitmap(bmp, caption_colour, new_colour):
|
|
296
|
+
"""
|
|
297
|
+
Darkens the input bitmap on wxMAC using the input colour.
|
|
298
|
+
|
|
299
|
+
:param wx.Bitmap `bmp`: the bitmap to be manipulated;
|
|
300
|
+
:param wx.Colour `caption_colour`: the colour of the pane caption;
|
|
301
|
+
:param wx.Colour `new_colour`: the colour used to darken the bitmap.
|
|
302
|
+
"""
|
|
303
|
+
|
|
304
|
+
image = bmp.ConvertToImage()
|
|
305
|
+
red = caption_colour.Red()/new_colour.Red()
|
|
306
|
+
green = caption_colour.Green()/new_colour.Green()
|
|
307
|
+
blue = caption_colour.Blue()/new_colour.Blue()
|
|
308
|
+
image = image.AdjustChannels(red, green, blue)
|
|
309
|
+
return image.ConvertToBitmap()
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def DrawGradientRectangle(dc, rect, start_colour, end_colour, direction, offset=0, length=0):
|
|
313
|
+
"""
|
|
314
|
+
Draws a gradient-shaded rectangle.
|
|
315
|
+
|
|
316
|
+
:param `dc`: a :class:`wx.DC` device context;
|
|
317
|
+
:param wx.Rect `rect`: the rectangle in which to draw the gradient;
|
|
318
|
+
:param wx.Colour `start_colour`: the first colour of the gradient;
|
|
319
|
+
:param wx.Colour `end_colour`: the second colour of the gradient;
|
|
320
|
+
:param integer `direction`: the gradient direction (horizontal or vertical).
|
|
321
|
+
"""
|
|
322
|
+
|
|
323
|
+
if direction == AUI_GRADIENT_VERTICAL:
|
|
324
|
+
dc.GradientFillLinear(rect, start_colour, end_colour, wx.SOUTH)
|
|
325
|
+
else:
|
|
326
|
+
dc.GradientFillLinear(rect, start_colour, end_colour, wx.EAST)
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
def FindFocusDescendant(ancestor):
|
|
330
|
+
"""
|
|
331
|
+
Find a window with the focus, that is also a descendant of the given window.
|
|
332
|
+
This is used to determine the window to initially send commands to.
|
|
333
|
+
|
|
334
|
+
:param wx.Window `ancestor`: the window to check for ancestry.
|
|
335
|
+
"""
|
|
336
|
+
|
|
337
|
+
# Process events starting with the window with the focus, if any.
|
|
338
|
+
focusWin = wx.Window.FindFocus()
|
|
339
|
+
win = focusWin
|
|
340
|
+
|
|
341
|
+
# Check if this is a descendant of this frame.
|
|
342
|
+
# If not, win will be set to NULL.
|
|
343
|
+
while win:
|
|
344
|
+
if win == ancestor:
|
|
345
|
+
break
|
|
346
|
+
else:
|
|
347
|
+
win = win.GetParent()
|
|
348
|
+
|
|
349
|
+
if win is None:
|
|
350
|
+
focusWin = None
|
|
351
|
+
|
|
352
|
+
return focusWin
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def GetLabelSize(dc, label, vertical):
|
|
356
|
+
"""
|
|
357
|
+
Returns the :class:`~wx.lib.agw.aui.auibar.AuiToolBar` item label size.
|
|
358
|
+
|
|
359
|
+
:param string `label`: the toolbar tool label;
|
|
360
|
+
:param bool `vertical`: whether the toolbar tool orientation is vertical or not.
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
text_width = text_height = 0
|
|
364
|
+
|
|
365
|
+
# get the text height
|
|
366
|
+
dummy, text_height = dc.GetTextExtent("ABCDHgj")
|
|
367
|
+
# get the text width
|
|
368
|
+
if label.strip():
|
|
369
|
+
text_width, dummy = dc.GetTextExtent(label)
|
|
370
|
+
|
|
371
|
+
if vertical:
|
|
372
|
+
tmp = text_height
|
|
373
|
+
text_height = text_width
|
|
374
|
+
text_width = tmp
|
|
375
|
+
|
|
376
|
+
return wx.Size(text_width, text_height)
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
#---------------------------------------------------------------------------
|
|
380
|
+
# TabDragImage implementation
|
|
381
|
+
# This class handles the creation of a custom image when dragging
|
|
382
|
+
# AuiNotebook tabs
|
|
383
|
+
#---------------------------------------------------------------------------
|
|
384
|
+
|
|
385
|
+
class TabDragImage(wx.DragImage):
|
|
386
|
+
"""
|
|
387
|
+
This class handles the creation of a custom image in case of drag and drop of a notebook tab.
|
|
388
|
+
"""
|
|
389
|
+
|
|
390
|
+
def __init__(self, notebook, page, button_state, tabArt):
|
|
391
|
+
"""
|
|
392
|
+
Default class constructor.
|
|
393
|
+
|
|
394
|
+
For internal use: do not call it in your code!
|
|
395
|
+
|
|
396
|
+
:param `notebook`: an instance of :class:`~wx.lib.agw.aui.auibook.AuiNotebook`;
|
|
397
|
+
:param `page`: the dragged :class:`~wx.lib.agw.aui.auibook.AuiNotebookPage` page;
|
|
398
|
+
:param integer `button_state`: the state of the close button on the tab;
|
|
399
|
+
:param `tabArt`: an instance of :class:`~wx.lib.agw.aui.tabart.AuiDefaultTabArt` or one of its derivations.
|
|
400
|
+
"""
|
|
401
|
+
|
|
402
|
+
self._backgroundColour = wx.Colour("pink")
|
|
403
|
+
self._bitmap = self.CreateBitmap(notebook, page, button_state, tabArt)
|
|
404
|
+
wx.DragImage.__init__(self, self._bitmap)
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def CreateBitmap(self, notebook, page, button_state, tabArt):
|
|
408
|
+
"""
|
|
409
|
+
Actually creates the drag and drop bitmap.
|
|
410
|
+
|
|
411
|
+
:param `notebook`: an instance of :class:`~wx.lib.agw.aui.auibook.AuiNotebook`;
|
|
412
|
+
:param `page`: the dragged :class:`~wx.lib.agw.aui.auibook.AuiNotebookPage` page;
|
|
413
|
+
:param integer `button_state`: the state of the close button on the tab;
|
|
414
|
+
:param `tabArt`: an instance of :class:`~wx.lib.agw.aui.tabart.AuiDefaultTabArt` or one of its derivations.
|
|
415
|
+
"""
|
|
416
|
+
|
|
417
|
+
control = page.control
|
|
418
|
+
memory = wx.MemoryDC(wx.Bitmap(1, 1))
|
|
419
|
+
|
|
420
|
+
tab_size, x_extent = tabArt.GetTabSize(memory, notebook, page.caption, page.bitmap, page.active,
|
|
421
|
+
button_state, control)
|
|
422
|
+
|
|
423
|
+
tab_width, tab_height = tab_size
|
|
424
|
+
rect = wx.Rect(0, 0, tab_width, tab_height)
|
|
425
|
+
|
|
426
|
+
bitmap = wx.Bitmap(tab_width+1, tab_height+1)
|
|
427
|
+
memory.SelectObject(bitmap)
|
|
428
|
+
|
|
429
|
+
if wx.Platform == "__WXMAC__":
|
|
430
|
+
memory.SetBackground(wx.TRANSPARENT_BRUSH)
|
|
431
|
+
else:
|
|
432
|
+
memory.SetBackground(wx.Brush(self._backgroundColour))
|
|
433
|
+
|
|
434
|
+
memory.SetBackgroundMode(wx.TRANSPARENT)
|
|
435
|
+
memory.Clear()
|
|
436
|
+
|
|
437
|
+
paint_control = wx.Platform != "__WXMAC__"
|
|
438
|
+
tabArt.DrawTab(memory, notebook, page, rect, button_state, paint_control=paint_control)
|
|
439
|
+
|
|
440
|
+
memory.SetBrush(wx.TRANSPARENT_BRUSH)
|
|
441
|
+
memory.SetPen(wx.BLACK_PEN)
|
|
442
|
+
memory.DrawRoundedRectangle(0, 0, tab_width+1, tab_height+1, 2)
|
|
443
|
+
|
|
444
|
+
memory.SelectObject(wx.NullBitmap)
|
|
445
|
+
|
|
446
|
+
# Gtk and Windows unfortunately don't do so well with transparent
|
|
447
|
+
# drawing so this hack corrects the image to have a transparent
|
|
448
|
+
# background.
|
|
449
|
+
if wx.Platform != '__WXMAC__':
|
|
450
|
+
timg = bitmap.ConvertToImage()
|
|
451
|
+
if not timg.HasAlpha():
|
|
452
|
+
timg.InitAlpha()
|
|
453
|
+
## for y in range(timg.GetHeight()):
|
|
454
|
+
## for x in range(timg.GetWidth()):
|
|
455
|
+
## pix = wx.Colour(timg.GetRed(x, y),
|
|
456
|
+
## timg.GetGreen(x, y),
|
|
457
|
+
## timg.GetBlue(x, y))
|
|
458
|
+
## if pix == self._backgroundColour:
|
|
459
|
+
## timg.SetAlpha(x, y, 0)
|
|
460
|
+
# local opt list comprehension
|
|
461
|
+
wxColour = wx.Colour
|
|
462
|
+
GetRed = timg.GetRed
|
|
463
|
+
GetGreen = timg.GetGreen
|
|
464
|
+
GetBlue = timg.GetBlue
|
|
465
|
+
SetAlpha = timg.SetAlpha
|
|
466
|
+
_backgroundColour = self._backgroundColour
|
|
467
|
+
[SetAlpha(x, y, 0)
|
|
468
|
+
for x in range(timg.GetWidth())
|
|
469
|
+
for y in range(timg.GetHeight())
|
|
470
|
+
if wxColour(GetRed(x, y), GetGreen(x, y), GetBlue(x, y)) == _backgroundColour]
|
|
471
|
+
bitmap = timg.ConvertToBitmap()
|
|
472
|
+
return bitmap
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
def GetDockingImage(direction, useAero, center):
|
|
476
|
+
"""
|
|
477
|
+
Returns the correct name of the docking bitmap depending on the input parameters.
|
|
478
|
+
|
|
479
|
+
:param bool `useAero`: whether :class:`~wx.lib.agw.aui.framemanager.AuiManager` is using
|
|
480
|
+
Aero-style or Whidbey-style docking images or not;
|
|
481
|
+
:param bool `center`: whether we are looking for the center diamond-shaped bitmap or not.
|
|
482
|
+
"""
|
|
483
|
+
|
|
484
|
+
suffix = (center and [""] or ["_single"])[0]
|
|
485
|
+
prefix = ""
|
|
486
|
+
if useAero == 2:
|
|
487
|
+
# Whidbey docking guides
|
|
488
|
+
prefix = "whidbey_"
|
|
489
|
+
elif useAero == 1:
|
|
490
|
+
# Aero docking style
|
|
491
|
+
prefix = "aero_"
|
|
492
|
+
|
|
493
|
+
if direction == wx.TOP:
|
|
494
|
+
bmp_unfocus = eval("%sup%s"%(prefix, suffix)).GetBitmap()
|
|
495
|
+
bmp_focus = eval("%sup_focus%s"%(prefix, suffix)).GetBitmap()
|
|
496
|
+
elif direction == wx.BOTTOM:
|
|
497
|
+
bmp_unfocus = eval("%sdown%s"%(prefix, suffix)).GetBitmap()
|
|
498
|
+
bmp_focus = eval("%sdown_focus%s"%(prefix, suffix)).GetBitmap()
|
|
499
|
+
elif direction == wx.LEFT:
|
|
500
|
+
bmp_unfocus = eval("%sleft%s"%(prefix, suffix)).GetBitmap()
|
|
501
|
+
bmp_focus = eval("%sleft_focus%s"%(prefix, suffix)).GetBitmap()
|
|
502
|
+
elif direction == wx.RIGHT:
|
|
503
|
+
bmp_unfocus = eval("%sright%s"%(prefix, suffix)).GetBitmap()
|
|
504
|
+
bmp_focus = eval("%sright_focus%s"%(prefix, suffix)).GetBitmap()
|
|
505
|
+
else:
|
|
506
|
+
bmp_unfocus = eval("%stab%s"%(prefix, suffix)).GetBitmap()
|
|
507
|
+
bmp_focus = eval("%stab_focus%s"%(prefix, suffix)).GetBitmap()
|
|
508
|
+
|
|
509
|
+
return bmp_unfocus, bmp_focus
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
def TakeScreenShot(rect):
|
|
513
|
+
"""
|
|
514
|
+
Takes a screenshot of the screen at given position and size (`rect`).
|
|
515
|
+
|
|
516
|
+
:param wx.Rect `rect`: the screen rectangle for which we want to take a screenshot.
|
|
517
|
+
"""
|
|
518
|
+
|
|
519
|
+
# Create a DC for the whole screen area
|
|
520
|
+
dcScreen = wx.ScreenDC()
|
|
521
|
+
|
|
522
|
+
# Create a Bitmap that will later on hold the screenshot image
|
|
523
|
+
# Note that the Bitmap must have a size big enough to hold the screenshot
|
|
524
|
+
# -1 means using the current default colour depth
|
|
525
|
+
bmp = wx.Bitmap(rect.width, rect.height)
|
|
526
|
+
|
|
527
|
+
# Create a memory DC that will be used for actually taking the screenshot
|
|
528
|
+
memDC = wx.MemoryDC()
|
|
529
|
+
|
|
530
|
+
# Tell the memory DC to use our Bitmap
|
|
531
|
+
# all drawing action on the memory DC will go to the Bitmap now
|
|
532
|
+
memDC.SelectObject(bmp)
|
|
533
|
+
|
|
534
|
+
# Blit (in this case copy) the actual screen on the memory DC
|
|
535
|
+
# and thus the Bitmap
|
|
536
|
+
memDC.Blit( 0, # Copy to this X coordinate
|
|
537
|
+
0, # Copy to this Y coordinate
|
|
538
|
+
rect.width, # Copy this width
|
|
539
|
+
rect.height, # Copy this height
|
|
540
|
+
dcScreen, # From where do we copy?
|
|
541
|
+
rect.x, # What's the X offset in the original DC?
|
|
542
|
+
rect.y # What's the Y offset in the original DC?
|
|
543
|
+
)
|
|
544
|
+
|
|
545
|
+
# Select the Bitmap out of the memory DC by selecting a new
|
|
546
|
+
# uninitialized Bitmap
|
|
547
|
+
memDC.SelectObject(wx.NullBitmap)
|
|
548
|
+
|
|
549
|
+
return bmp
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
def RescaleScreenShot(bmp, thumbnail_size=200):
|
|
553
|
+
"""
|
|
554
|
+
Rescales a bitmap to be `thumbnail_size` pixels wide (or tall) at maximum.
|
|
555
|
+
|
|
556
|
+
:param wx.Bitmap `bmp`: the bitmap to rescale;
|
|
557
|
+
:param integer `thumbnail_size`: the maximum size of every page thumbnail.
|
|
558
|
+
"""
|
|
559
|
+
|
|
560
|
+
bmpW, bmpH = bmp.GetWidth(), bmp.GetHeight()
|
|
561
|
+
img = bmp.ConvertToImage()
|
|
562
|
+
|
|
563
|
+
newW, newH = bmpW, bmpH
|
|
564
|
+
|
|
565
|
+
if bmpW > bmpH:
|
|
566
|
+
if bmpW > thumbnail_size:
|
|
567
|
+
ratio = bmpW/thumbnail_size
|
|
568
|
+
newW, newH = int(bmpW//ratio), int(bmpH//ratio)
|
|
569
|
+
img.Rescale(newW, newH, wx.IMAGE_QUALITY_HIGH)
|
|
570
|
+
else:
|
|
571
|
+
if bmpH > thumbnail_size:
|
|
572
|
+
ratio = bmpH/thumbnail_size
|
|
573
|
+
newW, newH = int(bmpW//ratio), int(bmpH//ratio)
|
|
574
|
+
img.Rescale(newW, newH, wx.IMAGE_QUALITY_HIGH)
|
|
575
|
+
|
|
576
|
+
newBmp = img.ConvertToBitmap()
|
|
577
|
+
otherBmp = wx.Bitmap(newW+5, newH+5)
|
|
578
|
+
|
|
579
|
+
memDC = wx.MemoryDC()
|
|
580
|
+
memDC.SelectObject(otherBmp)
|
|
581
|
+
memDC.SetBackground(wx.WHITE_BRUSH)
|
|
582
|
+
memDC.Clear()
|
|
583
|
+
|
|
584
|
+
memDC.SetPen(wx.TRANSPARENT_PEN)
|
|
585
|
+
|
|
586
|
+
pos = 0
|
|
587
|
+
for i in range(5, 0, -1):
|
|
588
|
+
brush = wx.Brush(wx.Colour(50*i, 50*i, 50*i))
|
|
589
|
+
memDC.SetBrush(brush)
|
|
590
|
+
memDC.DrawRoundedRectangle(0, 0, newW+5-pos, newH+5-pos, 2)
|
|
591
|
+
pos += 1
|
|
592
|
+
|
|
593
|
+
memDC.DrawBitmap(newBmp, 0, 0, True)
|
|
594
|
+
|
|
595
|
+
# Select the Bitmap out of the memory DC by selecting a new
|
|
596
|
+
# uninitialized Bitmap
|
|
597
|
+
memDC.SelectObject(wx.NullBitmap)
|
|
598
|
+
|
|
599
|
+
return otherBmp
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
def GetSlidingPoints(rect, size, direction):
|
|
603
|
+
"""
|
|
604
|
+
Returns the point at which the sliding in and out of a minimized pane begins.
|
|
605
|
+
|
|
606
|
+
:param wx.Rect `rect`: the :class:`~wx.lib.agw.aui.auibar.AuiToolBar` tool screen rectangle;
|
|
607
|
+
:param wx.Size `size`: the pane window size;
|
|
608
|
+
:param integer `direction`: the pane docking direction.
|
|
609
|
+
"""
|
|
610
|
+
|
|
611
|
+
if direction == AUI_DOCK_LEFT:
|
|
612
|
+
startX, startY = rect.x + rect.width + 2, rect.y
|
|
613
|
+
elif direction == AUI_DOCK_TOP:
|
|
614
|
+
startX, startY = rect.x, rect.y + rect.height + 2
|
|
615
|
+
elif direction == AUI_DOCK_RIGHT:
|
|
616
|
+
startX, startY = rect.x - size.x - 2, rect.y
|
|
617
|
+
elif direction == AUI_DOCK_BOTTOM:
|
|
618
|
+
startX, startY = rect.x, rect.y - size.y - 2
|
|
619
|
+
else:
|
|
620
|
+
raise Exception("How did we get here?")
|
|
621
|
+
|
|
622
|
+
caption_height = wx.SystemSettings.GetMetric(wx.SYS_CAPTION_Y)
|
|
623
|
+
frame_border_x = wx.SystemSettings.GetMetric(wx.SYS_FRAMESIZE_X)
|
|
624
|
+
frame_border_y = wx.SystemSettings.GetMetric(wx.SYS_FRAMESIZE_Y)
|
|
625
|
+
|
|
626
|
+
stopX = size.x + caption_height + frame_border_x
|
|
627
|
+
stopY = size.x + frame_border_y
|
|
628
|
+
|
|
629
|
+
return startX, startY, stopX, stopY
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
def CopyAttributes(newArt, oldArt):
|
|
633
|
+
"""
|
|
634
|
+
Copies pens, brushes, colours and fonts from the old tab art to the new one.
|
|
635
|
+
|
|
636
|
+
:param `newArt`: the new instance of :class:`~wx.lib.agw.aui.tabart.AuiDefaultTabArt`;
|
|
637
|
+
:param `oldArt`: the old instance of :class:`~wx.lib.agw.aui.tabart.AuiDefaultTabArt`.
|
|
638
|
+
"""
|
|
639
|
+
|
|
640
|
+
attrs = dir(oldArt)
|
|
641
|
+
|
|
642
|
+
for attr in attrs:
|
|
643
|
+
if attr.startswith("_") and (attr.endswith("_colour") or attr.endswith("_font") or \
|
|
644
|
+
attr.endswith("_font") or attr.endswith("_brush") or \
|
|
645
|
+
attr.endswith("Pen") or attr.endswith("_pen")):
|
|
646
|
+
setattr(newArt, attr, getattr(oldArt, attr))
|
|
647
|
+
|
|
648
|
+
return newArt
|