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,581 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------------- #
|
|
2
|
+
# MULTIDIRDIALOG wxPython IMPLEMENTATION
|
|
3
|
+
#
|
|
4
|
+
# Andrea Gavana, @ 07 October 2008
|
|
5
|
+
# Latest Revision: 19 Dec 2012, 21.00 GMT
|
|
6
|
+
#
|
|
7
|
+
#
|
|
8
|
+
# TODO List
|
|
9
|
+
#
|
|
10
|
+
# 1) Implement an meaningful action for the "Make New Folder" button, but this
|
|
11
|
+
# requires a strong integration with Explorer, at least on Windows;
|
|
12
|
+
#
|
|
13
|
+
# 2) Be more user-friendly with special folders as the Desktop, My Documents etc...
|
|
14
|
+
#
|
|
15
|
+
#
|
|
16
|
+
# For all kind of problems, requests of enhancements and bug reports, please
|
|
17
|
+
# write to me at:
|
|
18
|
+
#
|
|
19
|
+
# andrea.gavana@gmail.com
|
|
20
|
+
# andrea.gavana@maerskoil.com
|
|
21
|
+
#
|
|
22
|
+
# Or, obviously, to the wxPython mailing list!!!
|
|
23
|
+
#
|
|
24
|
+
# Tags: phoenix-port, unittest, documented, py3-port
|
|
25
|
+
#
|
|
26
|
+
# End Of Comments
|
|
27
|
+
# --------------------------------------------------------------------------------- #
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
This class represents a possible replacement for :class:`DirDialog`, with the additional
|
|
31
|
+
ability of selecting multiple folders at once.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
Description
|
|
35
|
+
===========
|
|
36
|
+
|
|
37
|
+
This class represents a possible replacement for :class:`DirDialog`, with the additional
|
|
38
|
+
ability of selecting multiple folders at once. It may be useful when you wish to
|
|
39
|
+
present to the user a directory browser which allows multiple folder selections.
|
|
40
|
+
:class:`MultiDirDialog` sports the following features:
|
|
41
|
+
|
|
42
|
+
* Ability to select a single or multiple folders, depending on the style passed;
|
|
43
|
+
* More colourful and eye-catching buttons;
|
|
44
|
+
* Good old Python code :-D .
|
|
45
|
+
|
|
46
|
+
And a lot more. Check the demo for an almost complete review of the functionalities.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Usage
|
|
50
|
+
=====
|
|
51
|
+
|
|
52
|
+
Usage example::
|
|
53
|
+
|
|
54
|
+
import os
|
|
55
|
+
import wx
|
|
56
|
+
|
|
57
|
+
import wx.lib.agw.multidirdialog as MDD
|
|
58
|
+
|
|
59
|
+
# Our normal wxApp-derived class, as usual
|
|
60
|
+
app = wx.App(0)
|
|
61
|
+
|
|
62
|
+
dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(),
|
|
63
|
+
agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST)
|
|
64
|
+
|
|
65
|
+
if dlg.ShowModal() != wx.ID_OK:
|
|
66
|
+
print("You Cancelled The Dialog!")
|
|
67
|
+
dlg.Destroy()
|
|
68
|
+
return
|
|
69
|
+
|
|
70
|
+
paths = dlg.GetPaths()
|
|
71
|
+
for indx, path in enumerate(paths):
|
|
72
|
+
print("Path %d: %s"%(indx+1, path))
|
|
73
|
+
|
|
74
|
+
dlg.Destroy()
|
|
75
|
+
|
|
76
|
+
app.MainLoop()
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
Supported Platforms
|
|
81
|
+
===================
|
|
82
|
+
|
|
83
|
+
:class:`MultiDirDialog` has been tested on the following platforms:
|
|
84
|
+
* Windows (Windows XP).
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
Window Styles
|
|
88
|
+
=============
|
|
89
|
+
|
|
90
|
+
This class supports the following window styles:
|
|
91
|
+
|
|
92
|
+
===================== =========== ==================================================
|
|
93
|
+
Window Styles Hex Value Description
|
|
94
|
+
===================== =========== ==================================================
|
|
95
|
+
``DD_NEW_DIR_BUTTON`` 0x080 Enable/disable the "Make new folder" button
|
|
96
|
+
``DD_DIR_MUST_EXIST`` 0x200 The dialog will allow the user to choose only an existing folder. When this style is not given, a "Create new directory" button is added to the dialog (on Windows) or some other way is provided to the user to type the name of a new folder.
|
|
97
|
+
``DD_MULTIPLE`` 0x400 Allows the selection of multiple folders.
|
|
98
|
+
===================== =========== ==================================================
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
Events Processing
|
|
102
|
+
=================
|
|
103
|
+
|
|
104
|
+
`No custom events are available for this class.`
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
License And Version
|
|
108
|
+
===================
|
|
109
|
+
|
|
110
|
+
:class:`MultiDirDialog` is distributed under the wxPython license.
|
|
111
|
+
|
|
112
|
+
Latest Revision: Andrea Gavana @ 19 Dec 2012, 21.00 GMT
|
|
113
|
+
|
|
114
|
+
Version 0.4
|
|
115
|
+
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
import os
|
|
119
|
+
import wx
|
|
120
|
+
import wx.lib.buttons as buttons
|
|
121
|
+
|
|
122
|
+
from wx.lib.embeddedimage import PyEmbeddedImage
|
|
123
|
+
|
|
124
|
+
# MultiDirDialog styles
|
|
125
|
+
DD_MULTIPLE = 1024
|
|
126
|
+
""" Allows the selection of multiple folders. """
|
|
127
|
+
DD_DEFAULT_STYLE = wx.DD_DEFAULT_STYLE
|
|
128
|
+
""" Equivalent to a combination of ``wx.DEFAULT_DIALOG_STYLE`` and ``wx.RESIZE_BORDER``. """
|
|
129
|
+
DD_DIR_MUST_EXIST = wx.DD_DIR_MUST_EXIST
|
|
130
|
+
""" The dialog will allow the user to choose only an existing folder. When this style is not given, a "Create new directory" button is added to the dialog (on Windows) or some other way is provided to the user to type the name of a new folder. """
|
|
131
|
+
DD_NEW_DIR_BUTTON = 0x080
|
|
132
|
+
""" The `Make New Folder` button will be displayed. """
|
|
133
|
+
|
|
134
|
+
_ = wx.GetTranslation
|
|
135
|
+
|
|
136
|
+
_cancel = PyEmbeddedImage(
|
|
137
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAA1dJ"
|
|
138
|
+
"REFUOI11019oEwccB/Dv3eUuyZ2XpfljsmJ7JY01KZYWty6bdMwnp1X34JNS5sPAsmYruOnL"
|
|
139
|
+
"3kTGcPg6Bdkexqql4EPdBuKbVG0xLmpoWjbW0D+S1Jg24RJzuSR3l58PtpsI/l5/fB5+3x9f"
|
|
140
|
+
"AEDc7VauhMP3prq7q9+1t5/AW+aiLB+ZDocrU6HQk4tAFAC4s8Gg0uVyXTsZiw190Nsr6JnM"
|
|
141
|
+
"kZAkrd6rVtOv4wuyfLS/rW3y6Oioq2tgILiRyXy4v1yexU979yaKIyNEiQRRsUjG2Bjddrtr"
|
|
142
|
+
"532+k9v4B1kevu33l+vnzhFtbBAtL9OLS5douq9v0eZ1OPo8Xi8gSUClAls8jk+qVad148bP"
|
|
143
|
+
"33s8TcY0K32mOTV07JhsP3UKKJUAy8IORYF3584erodopaGqh7qzWYEJBgGGgW3fPrQ/eyY0"
|
|
144
|
+
"5uePewzjxIGDB0U5HgcsC1BV0MOH+GtiojF/9+433P1qNd1pGCvs5uawUijwbDAIWBZsAwPw"
|
|
145
|
+
"5nJsRyBgc8fjYLZwK5lE6uZN88Hc3LdfmeYVDgDu12oLXUSrxvPnw8r6uo3z+cAQwRGJQOzv"
|
|
146
|
+
"B0sEKhZhJRJI3rplJlKpM+OWdRkAuO2gZnQ93UO02CgUjr9bLHKCzweGZcGYJqhchp5I4NGd"
|
|
147
|
+
"O9bjpaUvxol+2Xa211/FAKolSa0XySSq+TzYYBAAYGkaUKnA5LgWA6hvmP//PKgokx9tbspq"
|
|
148
|
+
"Pg8NgL61c0gSJL8f73R04O9KRV9Mp0+PtlrX/zvhgigO749GJ4dKJVc9l0MTgAVAZBg4BQEk"
|
|
149
|
+
"SeCcTjAAOhWF5/3+w7FsdvkPogXuR7f7s/d6eycPqKqrubKC+hZ28DxydnurzHFWwG5niefB"
|
|
150
|
+
"CALYVgu7wmGe2toOfby2lrVFIpFrn9brcmNpCU0ALIAdooiMw9FI1etfkmGUbaY5EXY4JIth"
|
|
151
|
+
"YAIw1tcxODgoEcddZeua9rQqCGB5HgwA0e3GmsdjPtH1s1/Xar+ON5vTi6p6+qmm6U5JAksE"
|
|
152
|
+
"VhBQbzahl0p57n1Nm9kQxVhXINAucxzSLpeZLBTOxHX98nbAfxItxMrlVV4UD+/q7OTJ58Pc"
|
|
153
|
+
"7Ow/uVTq81c1FYTo76HQo5k9expXnc6xt9X5OsuOPIhGtZndu//9DYgBwEt1gHq0YITgmAAA"
|
|
154
|
+
"AABJRU5ErkJggg==")
|
|
155
|
+
|
|
156
|
+
#----------------------------------------------------------------------
|
|
157
|
+
_ok = PyEmbeddedImage(
|
|
158
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAjdJ"
|
|
159
|
+
"REFUOI2tksFLk3Ecxp+97975vmuve1dWuiUTNIy1JlsLpkZG0aXLbv0B0aVDUMfVQTp0jJpF"
|
|
160
|
+
"EHl5LxUZgZcuQjAID4KUyWwyEU3d9m7O5d733dze97dfB1siJSn1nJ/P5+ELX+Afwx6YuAMB"
|
|
161
|
+
"AVgwjcaBBdIovP2eyKMLPYNdM+7kNKZA9i3gR+ENCeF4Hx+8VigVBgrKWrXKGp/2JeCfwhsW"
|
|
162
|
+
"Q/HTQiCaVTOYUiZtDuoMQqefrc1S9+uOEGNSRzqd+4j72/c1l4OOQNwn+aOFWg5TdBJEIKbH"
|
|
163
|
+
"dI9zHLMt6H3lHrjScfU5x3DSmOXNrVUUxwFQ6S3vDdh9cZ/zTHSz8R0pMguGMKaRMuX5peQ9"
|
|
164
|
+
"ZULPW8+PnB286L78zH/M76/DwCYtjSTefaAOQZjpEDofn5J8UR0qViqLoCpLql+IXFzS72IC"
|
|
165
|
+
"eQCwssR2NFfOtNXsFZx09SLkDnfSlsYTluUy7a3Hz6mWMrLGKswiJaV0WS6Uyr9gAGC7It0L"
|
|
166
|
+
"WrWYm99K9VdcqugSD8Pd6nG6RNeJCq9ZstwqNL1CMl/z8npdiRkPd2AAYJcTy41FcSVZt+lK"
|
|
167
|
+
"na9FaLspCg4ehDew3qJgs6qStUxerhItlr+h74KB5iPNgVZuGkm6QpQWmy3i8AoiY7dA1XTy"
|
|
168
|
+
"LZuVGYHGZi8t/gbvCABgDFS7vpVEgSgS29bv5CR7XtmQjxxyxt77En+Edwt+Svpua3MbRT5T"
|
|
169
|
+
"a9QXPGL7gxc9L/eE98wwHWaG6JD1783/kB9qTvueLt8LjwAAAABJRU5ErkJggg==")
|
|
170
|
+
|
|
171
|
+
#----------------------------------------------------------------------
|
|
172
|
+
_cdrom = PyEmbeddedImage(
|
|
173
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAArRJ"
|
|
174
|
+
"REFUOI11kc9rm3Ucx1/f5/eTLV2aJ2vqVseGWzeYDAbCCq2THQqiuB3mP+DBQ3ss3rysILLb"
|
|
175
|
+
"2I5FhKHkNFmFHkrFoVDQDautI02ZWqGJ7WzWEkzy/M73u1NKbNj79Dl8Xi8+P+BQhoeHj09N"
|
|
176
|
+
"Td1aWlr6s1qtNjY3N/dLpdIvExMTHwPG4f7/ZWRk5M35+fmnqidSSqWUUlEUqdnZ2W+B3Kv4"
|
|
177
|
+
"wbm5uaeNRkO1220VRZEKw1D5vq/CMDwQTk9PfwVoffTk5ORMpVJR5XJZ1Wo1FYahCoJAtVot"
|
|
178
|
+
"laapSpJEBUGgNjY2VLFYvNblDkzj4+PvJ0kCgJSSvb09tv7eiuv/1tMgDGg2m+zu7mKaJmNj"
|
|
179
|
+
"Yx90uYOj5PP5k2ma4jgOuqbT/K/JvYd3n4+eOu9cH7s+lMiE/f19hBAUCoUzfYIkSYJ8Po+u"
|
|
180
|
+
"69i2TZIk3Hz3w1MqUtT36iRpgu/7ZDIZfN+P+1ZYXV39bWBgANd1OZo9ilfwuDB0gYunL+K4"
|
|
181
|
+
"Dq1WCyEEcRyztra22idYWFj4srxW9j3PQ0pJo9EADWzHxvM8juWO4doZln9c3llfX/+my+nd"
|
|
182
|
+
"IgzDrUpceeftS1ffcHSX+os6Ukosy8I0THJHBnn87Cduf/H5/dZO++s+AcA/V2sfbYa/nmFb"
|
|
183
|
+
"QwYamjJACWrbVVY2HvMDiyxXnvzMXyz2HRGw8ifJ+6N/sNi+QzE4jbd9Auu5g3Jh6OxrjGZP"
|
|
184
|
+
"4HgUgh6oV2B++tZngxOXr2AbBpZpYGomujIR0kTFOqmQ/P56NVfiQb8gm80640fey9nPLKI4"
|
|
185
|
+
"IkKhAKk6CDocHyqQcVyuFK8NlnhgAOnhCag36k6pdJ92u43ruliWhRACgWDmkxl27G2anVam"
|
|
186
|
+
"93uih9dv3Lh569y5s5fjuCMNQ6BpIIROp9NB13XQ0R599+j7lZUnd7rQS0kMSYjIJmZ4AAAA"
|
|
187
|
+
"AElFTkSuQmCC")
|
|
188
|
+
|
|
189
|
+
#----------------------------------------------------------------------
|
|
190
|
+
_computer = PyEmbeddedImage(
|
|
191
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAshJ"
|
|
192
|
+
"REFUOI1dk91PXGUQxn/ve979YkHXmhZ325oUa9Wlxg9q8caoCRde9Hb/Bv4KQ8J/AXdceFF6"
|
|
193
|
+
"YYJXNCYWE0xITAxt1cjXKpiYsnQpH3v2sOfMTC8WAZ2rmWSeZ56ZJ+MAzKwEXIHEQ5ELYedp"
|
|
194
|
+
"QpKcV8Vise2cOwwAnU63sdFsTx0cnpiJoipkqkiaIaa0Wh2etQ4tyxRVo1xy0eefXf0G+DoA"
|
|
195
|
+
"ZJlea/7VGRksF1B1iICIQwUyEb79boMfl/8khDy4wLVamdF3X33LzHwAUJQ47k82U1QVkX7e"
|
|
196
|
+
"3u+y2XyB9w7THkZGlnkUNYDw705HHeXgqIdZH6wqmCq/r7XZPzBCroRKSvDKrZsVIt/HnREc"
|
|
197
|
+
"x8bRcYaZoCKICCIZf2wcY65IFAIQeOdWhfdH30D1PwSeuOvYfS5wqkBEiOMeu3t6Oj2jXC4x"
|
|
198
|
+
"+l6NblfO7Al9OMSJp9V2YJwe0XhxIPSyHFEAH2Vcvz5AL4vY2z85RV1YodM1dp8bDodI34nj"
|
|
199
|
+
"Y4+LSkQuUCwYUcjz9z8ppYLiLipQlLiT0NpLCCEHOFQDIuCDxzRgTtnd6zt1+RL4KLqgQDP9"
|
|
200
|
+
"6oscI28mmPVwPiKKgoUw4CLvyLLURFKX9nqc9E4oBCUfsnMbvfff3/lgoHK50vLLPy3zbLcV"
|
|
201
|
+
"jdy48eHdjz75slAouidPnj7+7denj1wUpXc+HrPq1ZqrDlcfOec0AFQqlZ8bjcYvW1tbgyJy"
|
|
202
|
+
"d3x8/F6pOHBlsPyKS9MeWZq+liS9oZWVlYcP7j/4YWJiYn92djY9e4xGoxEBQ8Db09PTC5ub"
|
|
203
|
+
"m7a+vmZLS0u2uLhoq6urtr29bXNzc4+HhoY+BS6NjY3lgLNjMj8/Hy0sLBTb7fbtarV6r16v"
|
|
204
|
+
"387n86+LiHfOHTabzfW1tbWHuVxueXh4uDMzM5M55+yM4GJMTU35OI7LOzs7AyLiarVaUq/X"
|
|
205
|
+
"O5OTk+n/e18CKWqFGqiV9Q4AAAAASUVORK5CYII=")
|
|
206
|
+
|
|
207
|
+
#----------------------------------------------------------------------
|
|
208
|
+
_folder_close = PyEmbeddedImage(
|
|
209
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAcBJ"
|
|
210
|
+
"REFUOI2Nk0FrE1EQx3+zL7vbmFKRQkE/gyfpISL4WYJHsQfPvXkQe6go+AnEi6dcBBEkhYgS"
|
|
211
|
+
"oQfFeqo0VJRobaspm2R339sdD9u0IclC/zAwzLz5zbzhPeFUnU5HuYDq9brMBB+/+KQXVavV"
|
|
212
|
+
"+jBZWxk79zffl3Z9dO8GQbCAiAAEM4DvvyI21m4SpyCiaK6ogqqiwN2nWzxbu0W1WpuBn00w"
|
|
213
|
+
"ih3H/YwkcbgMnFOcU5K0yKdJTLVawzk3H3D8z9GPHKqKy3QGYK0Fiqkm5Y2do77l3ec+mQhD"
|
|
214
|
+
"q+eWFgXjzr1ebzgXgBG2u0O+7A/JRYhzCjttqJrTbDb3G43G7blXyEQIlkI+dmNiPK5dqeBE"
|
|
215
|
+
"sJoXO7CGdru9VbrEXDzCyyEisPPH8XOgrCwaFgysXl/lwcttLqWjmUd0BnCeh78UYgQQiJxy"
|
|
216
|
+
"cpJj8gxcUZdbVw5Q47FYM1REESBTSJ0htYZkVCxChXKAXxGWq4bAnAPiDAbWMPCFEbD7bfew"
|
|
217
|
+
"FPD34Hfa3TuKlmth4PsVycWTQYoeDp39EXnpVVh522pvTgPGI4V3Nt7E08lJvXr+ZP3g6+uH"
|
|
218
|
+
"ZYB5EsCn+DwhEAHJ9KH/LOgEF+oT+k8AAAAASUVORK5CYII=")
|
|
219
|
+
|
|
220
|
+
#----------------------------------------------------------------------
|
|
221
|
+
_folder_open = PyEmbeddedImage(
|
|
222
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAvdJ"
|
|
223
|
+
"REFUOI1tU01o23UYft7/75ekqXVJWsO6HaZWzDyIih4UCkJBGIroUATxWPEyLx6EDZzz5Dzr"
|
|
224
|
+
"xB3FkygoCA7ZR0A3g60zWdutbrZLTNOvJI1pmvyT/8fv4/WQFFzwgZf36zm8HzyEeyEAEAAD"
|
|
225
|
+
"gAexM/B6iEsDAwak4eZwzXk48/gTr7w5+04qlUoMkwEgnnnyuekPz372xbGXjr8GAKPp9OSL"
|
|
226
|
+
"L796/PQnn57/5Y/lv9q+tp3A8KEHM48BqcT4o888CwA49taJ04vFeqPta22s5Wtz+cL5r77/"
|
|
227
|
+
"YW3HdY213Pa1Xd5w+WK+Yr/NremzX17MLZVqrQu5m/MEgM6c+yb70btvzLR6RlmtEInGhKvg"
|
|
228
|
+
"lDcb2Nr1jR+yTSbvc6YeGHGOpOMYjZAlInEhm7sm3/7g8+/em319ZqPR061OV5Z3Amq4yhoW"
|
|
229
|
+
"eiI1JqYOJZ3JiTFxIMasNEMb0FbHU2OjI6LWaAdyYXHpTk8T1qpN+unmHo4emUT64LhzOCGd"
|
|
230
|
+
"iNM/T3VPoWZCsk6Eo8KBUobageev77Q6cnE++2O+2DwVeBCuZ3g8GYfraax4/a9FRP8ZQgDM"
|
|
231
|
+
"ISJSQAeKtN/tblabDal3ioW529XVp6fSmZqr+M62j0AzAYAjJKKOQlT2J2FmRIQBQE6n6QWl"
|
|
232
|
+
"zXpTAvAvfX3u16MnP85U29r+vNIT9a5BIi4BADEBjEQIsQgBzBBEDCK5sFT5Z+VWZUsCwFpp"
|
|
233
|
+
"9cr2bm+27QGtPUZUAnuDFYwBg4jAzIBmrZQlZlHZ5UTY9RwJAI3SQm61VPZk9P54CHCfvA/D"
|
|
234
|
+
"VimjtCUCRGiYAKJY2Eg6brEuARD83crq8o1C9KEXpgOC0caQ0YqtNk5oyQGYwm6LwvpK26tc"
|
|
235
|
+
"z7ul61ld//MytHdDDgSky7fmsgcPPz/t6Q4TWABA0Nwgv3Z7y/v7t5y/XrikGsWrAO4CsPvz"
|
|
236
|
+
"yf1k++7vl+mp2hkVdE2wkV/2y/NXe+uFK/Ba8wDqw8IaePvf4gE58cj7ELEZAKP/o859qd+D"
|
|
237
|
+
"fwFu65tDy5tMTAAAAABJRU5ErkJggg==")
|
|
238
|
+
|
|
239
|
+
#----------------------------------------------------------------------
|
|
240
|
+
_hd = PyEmbeddedImage(
|
|
241
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAxlJ"
|
|
242
|
+
"REFUOI11ks1vG1UUxc+b98YzyfM4gxzSpHHttCFRbQto7YQgxRKIRRYIZRepEkQVzYJ/gAUi"
|
|
243
|
+
"i/wlSLBhFSEWZMUiQkLCSmUk0o6rNiExcvNRR/Z0xh6P5/OxqFwlfNzVWZz7u0dXh+B/Zn19"
|
|
244
|
+
"Pd1qtQpxHBeiKCoKId4aHR39dGdnx7zsY0Oxurq6FIbhZ4yxwgeVcnHuVuaarmvwPB/nL9r4"
|
|
245
|
+
"/Y+neHrQ+BLA5mUAHYp8Pr8uSdLXD+7fu/nRh5XktckpKOoIONcwNzeP998r483x8bvKSPKb"
|
|
246
|
+
"/f19Z7gnDYUsyz+nUiksLi4ioWqIBcFfBw/R/LOK1nkTCVVDpVJJLpbvfPWfCQzDON/e3v7k"
|
|
247
|
+
"9szk9Z7VwUuzA4WnoaXS6LQ7CAYD2C/bODlr3c3O3Pq2Vqt1ryQghKDb7X7XPG9BH5/ExNQN"
|
|
248
|
+
"DPo9nJ2+wMxsEfr4JPhYGkEYqrIsb/4rAQBwzp+HUfRF5no6MX1jFlOZmxAihtVuYpSnYDyq"
|
|
249
|
+
"QdUm0O323i2Xy99Xq1XzCiCZTPqcp/K247192jxA4DmI4wDPT88xMZXF7NxtPDaeIZfLUdd1"
|
|
250
|
+
"39jd3f2RXAYIIcjS0tLHy8vLP42NjUGWZTDGIEkS4jiGruuglIIQAtd1o5OTk3fYZQAhRGia"
|
|
251
|
+
"Vi0Wi0/m5+fzhFzhAwBc14VlWbAsi5qmeZ/901AqlazDw8MfSqXSZiKRgOM4sG0bpmmi0+mg"
|
|
252
|
+
"3++DUtpWFOWR53m/vT6xtbUl1et1cnR0JDUajTsrKyu/+L4/4nleGIZhw/O8x0EQPLQs69fj"
|
|
253
|
+
"4+Mnuq73NjY2PLK2tkYNw6CmaTLP85jv+wnf99O5XO7zKIrMs7OzZ77vdwkhPiHEppSaiqLY"
|
|
254
|
+
"09PTjmEYASkUCgnbtqnruiwIAjkMQyWKIkUIoQohZACyEIK+ehEJCCEOY8zmnPey2azHisVi"
|
|
255
|
+
"ZBjGq15LkqCURmEY+nEc94UQVAgxLJuQJClkjAWqqvrpdDqo1WohrdfrotVqxbZtR47jRJzz"
|
|
256
|
+
"kDEWaJrmqao64Jy7nHNX1/V+JpNxFxYWBnt7e/7FxUUEAH8DenV0NY9j5foAAAAASUVORK5C"
|
|
257
|
+
"YII=")
|
|
258
|
+
|
|
259
|
+
#----------------------------------------------------------------------
|
|
260
|
+
_new = PyEmbeddedImage(
|
|
261
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAqpJ"
|
|
262
|
+
"REFUOI1t0c1rXGUUx/Hvc+/czGtmEk1NTCYWY1BERAJVRMW4cCEIunHTnYjgQrduRHDTrX+F"
|
|
263
|
+
"u+ZvEF2IRVCRRkpt1VSTmqQ1rzNz733uc855XDSRkfHsz+ec3zmO/6mrVz9vPjHTm52e6c23"
|
|
264
|
+
"mq2lmpPFVE/6qrYUcXMON+2y7NP5Zy9/Wxtv/Gx9vXb5ynsfLczPvZnV0kfT+uycq6WdmO/V"
|
|
265
|
+
"82GaNtsPucx5NAyqoDYD8B+gc2m53mk13pluZy9DgptK8b5kZ/sPkqzH4xdmiMUeopJU4jKA"
|
|
266
|
+
"ZBwYDo4j0cRUiDESo3B8uMfmjV85Hea4GIgmqIRExJoTwGFd1LBgKpgZJp4qP6YoSqIJ0c4A"
|
|
267
|
+
"DS5xNjURwfv7Fk28acC5Gi6MsGqIqUA0iIKZYKYuOEsngKOjFZMgXlVIkgBSIOIxOwMsoBIQ"
|
|
268
|
+
"FSwGNxFhY2MjqkpQC2jwiB+gUiEqBA1UVYlIhYgSQmBiAwAViaqCaSCGHJGKO+6EnYMf+ObH"
|
|
269
|
+
"67zYW2C50aXSB701wAEZ0HzjlbWLVfArKlOgHvTBNO1FwsIBh6OK1aLNQtImRmmdAy2gD3Sf"
|
|
270
|
+
"ear/em/+ybWg+0g+4Pt7f7IzOkVmhXovoJmwuXeXraMDsE7jHPBAClwog8yS9ZJQ3qUoCm76"
|
|
271
|
+
"Q/J+TqsraDPH0iF3yl2G96B2uvxvBDmL8fAoL6crVVxZEipBNDCo/qYq95HkmMoLeQVVaNKN"
|
|
272
|
+
"uPEjeqCd+9C9+VfOonkyNS5al/Yu3J4qOJ3bJamarBw8x5R0bt0oTr4eB7aAzbIIa8lop4hp"
|
|
273
|
+
"WSPJ9p+fX71tMf3p59+3Xy1j+kISUh5L+5tvP73+Qf+196+NAwp8d+u37ft+/5evWquLmrSa"
|
|
274
|
+
"17uN/vbSpbfylz5Z+bg7eoQsNtIv/daVD9/94tr52/8BSS2agPSymFoAAAAASUVORK5CYII=")
|
|
275
|
+
|
|
276
|
+
#----------------------------------------------------------------------
|
|
277
|
+
_removable = PyEmbeddedImage(
|
|
278
|
+
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAldJ"
|
|
279
|
+
"REFUOI2lkbFOXFcQhr+Zc+7uXRZvFi2GOFHiSInA7CLFCnaRCokij0DjyElFh9K6sfwQeQEX"
|
|
280
|
+
"rngAvwBNsCyniNCChCKFSCYOkWADd/fuvfeccUEgrCU3yS+NNNN88/8z8D8l14d+v38jTdv3"
|
|
281
|
+
"fD3tqEpdRJxE1AzDYYCFoswGg8HL5eXPDwH8dYBzzR8/aM9855x778ZQC2TZ+TEwB6ATAK8r"
|
|
282
|
+
"SZLgvefP316SZed47zl902fw+hXOOZxTfKKzz5//1Jpw8OSJaZIcfyFykeqPw1+QX7f5aOEb"
|
|
283
|
+
"pP+Iqv4p1YdfUlUF3omUbtwB/r5ysLa2cztNG+nl3P36W5qzPaZ2HzL67BH15ceMxxnjYkiM"
|
|
284
|
+
"FXOt5mSEznxn0aliZoSqRFXofNzjIHnA9M0F1HvG4yFVOQag0UhnJiIkkixEixTFiBgqQqg4"
|
|
285
|
+
"G/xFdfY7+eicNG0g6nBaQ6SiVivmJgDiZKEsc8CIoSLGQNqc4cbS9zSmpvEuQZ1D1CFS4BJ/"
|
|
286
|
+
"cwJQFKPFIRGwC6Aq6mp0Zm9hplQR1AzRSFUFLFhnAvBi5+e7z549Jc9zzGzy+WYYsHinS7N7"
|
|
287
|
+
"wnyyxNIn9+evAKurqx5ke3Pzh68smkRMMDCLglz2iHOJjeKJNXw7HB0dvwCQlZWV5ODgoFkU"
|
|
288
|
+
"RTOE0DSzGpCYmf9ngQfUzFREKqAQkaH3/qTb7b5xGxsb7O3tWVmWAPGyRCQApYgUIpKLyFBV"
|
|
289
|
+
"z1X1zHs/aLfbp/v7+4X8G9NkfX1dd3d3XZZlmue5izFKjFFU1er1emi1WqHX64Wtra0oIu8c"
|
|
290
|
+
"6j/qLUda/yKP2243AAAAAElFTkSuQmCC")
|
|
291
|
+
|
|
292
|
+
#----------------------------------------------------------------------
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
class MultiDirDialog(wx.Dialog):
|
|
296
|
+
"""
|
|
297
|
+
A different implementation of :class:`DirDialog` which allows multiple
|
|
298
|
+
folders to be selected at once.
|
|
299
|
+
"""
|
|
300
|
+
|
|
301
|
+
def __init__(self, parent, message=_("Choose one or more folders:"), title=_("Browse For Folders"),
|
|
302
|
+
defaultPath="", style=wx.DD_DEFAULT_STYLE, agwStyle=DD_MULTIPLE, pos=wx.DefaultPosition,
|
|
303
|
+
size=wx.DefaultSize, name="multidirdialog"):
|
|
304
|
+
"""
|
|
305
|
+
Default class constructor.
|
|
306
|
+
|
|
307
|
+
:param `parent`: the dialog parent widget;
|
|
308
|
+
:param `message`: the message to show on the dialog;
|
|
309
|
+
:param `title`: the dialog title;
|
|
310
|
+
:param `defaultPath`: the default path, or the empty string;
|
|
311
|
+
:param `style`: the underlying :class:`Dialog` window style;
|
|
312
|
+
:param `agwStyle`: the AGW-specific dialog style; this can be a combination of the
|
|
313
|
+
following bits:
|
|
314
|
+
|
|
315
|
+
===================== =========== ==================================================
|
|
316
|
+
Window Styles Hex Value Description
|
|
317
|
+
===================== =========== ==================================================
|
|
318
|
+
``DD_NEW_DIR_BUTTON`` 0x080 Enable/disable the "Make new folder" button
|
|
319
|
+
``DD_DIR_MUST_EXIST`` 0x200 The dialog will allow the user to choose only an existing folder. When this style is not given, a "Create new directory" button is added to the dialog (on Windows) or some other way is provided to the user to type the name of a new folder.
|
|
320
|
+
``DD_MULTIPLE`` 0x400 Allows the selection of multiple folders.
|
|
321
|
+
===================== =========== ==================================================
|
|
322
|
+
|
|
323
|
+
:param `pos`: the dialog position;
|
|
324
|
+
:param `size`: the dialog size;
|
|
325
|
+
:param `name`: the dialog name.
|
|
326
|
+
"""
|
|
327
|
+
|
|
328
|
+
wx.Dialog.__init__(self, parent, pos=pos, size=size, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, name=name)
|
|
329
|
+
|
|
330
|
+
self.agwStyle = agwStyle
|
|
331
|
+
|
|
332
|
+
self.dirCtrl = wx.GenericDirCtrl(self, size=(300, 300), style=wx.DIRCTRL_3D_INTERNAL|wx.DIRCTRL_DIR_ONLY)
|
|
333
|
+
self.folderText = wx.TextCtrl(self, -1, defaultPath, style=wx.TE_PROCESS_ENTER)
|
|
334
|
+
self.CreateButtons()
|
|
335
|
+
|
|
336
|
+
self.SetProperties(title)
|
|
337
|
+
# Setup the layout and frame properties
|
|
338
|
+
self.SetupDirCtrl(defaultPath)
|
|
339
|
+
self.LayoutItems(message)
|
|
340
|
+
self.BindEvents()
|
|
341
|
+
|
|
342
|
+
if parent and pos == wx.DefaultPosition:
|
|
343
|
+
self.CenterOnParent()
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def SetupDirCtrl(self, defaultPath):
|
|
347
|
+
"""
|
|
348
|
+
Setup the internal :class:`GenericDirCtrl` (icons, labels, etc...).
|
|
349
|
+
|
|
350
|
+
:param `defaultPath`: the default path for :class:`MultiDirDialog`, can be an
|
|
351
|
+
empty string.
|
|
352
|
+
"""
|
|
353
|
+
|
|
354
|
+
il = wx.ImageList(16, 16)
|
|
355
|
+
|
|
356
|
+
# Add images to list. You need to keep the same order in order for
|
|
357
|
+
# this to work!
|
|
358
|
+
|
|
359
|
+
# closed folder:
|
|
360
|
+
il.Add(_folder_close.GetBitmap())
|
|
361
|
+
|
|
362
|
+
# open folder:
|
|
363
|
+
il.Add(_folder_open.GetBitmap())
|
|
364
|
+
|
|
365
|
+
# root of filesystem (linux):
|
|
366
|
+
il.Add(_computer.GetBitmap())
|
|
367
|
+
|
|
368
|
+
# drive letter (windows):
|
|
369
|
+
il.Add(_hd.GetBitmap())
|
|
370
|
+
|
|
371
|
+
# cdrom drive:
|
|
372
|
+
il.Add(_cdrom.GetBitmap())
|
|
373
|
+
|
|
374
|
+
# removable drive on win98:
|
|
375
|
+
il.Add(_removable.GetBitmap())
|
|
376
|
+
|
|
377
|
+
# removable drive (floppy, flash, etc):
|
|
378
|
+
il.Add(_removable.GetBitmap())
|
|
379
|
+
|
|
380
|
+
# assign image list:
|
|
381
|
+
treeCtrl = self.dirCtrl.GetTreeCtrl()
|
|
382
|
+
treeCtrl.AssignImageList(il)
|
|
383
|
+
|
|
384
|
+
if self.agwStyle & DD_MULTIPLE:
|
|
385
|
+
treeCtrl.SetWindowStyle(treeCtrl.GetWindowStyle() | wx.TR_MULTIPLE)
|
|
386
|
+
|
|
387
|
+
if not defaultPath.strip():
|
|
388
|
+
return
|
|
389
|
+
|
|
390
|
+
# Set the wx.GenericDirCtrl default path
|
|
391
|
+
self.dirCtrl.ExpandPath(defaultPath)
|
|
392
|
+
self.dirCtrl.SetDefaultPath(defaultPath)
|
|
393
|
+
self.dirCtrl.SetPath(defaultPath)
|
|
394
|
+
|
|
395
|
+
self.folderText.SetValue(treeCtrl.GetItemText(treeCtrl.GetSelections()[0]))
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def SetProperties(self, title):
|
|
399
|
+
"""
|
|
400
|
+
Sets few properties for the dialog.
|
|
401
|
+
|
|
402
|
+
:param `title`: the dialog title.
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
self.SetTitle(title)
|
|
406
|
+
self.okButton.SetDefault()
|
|
407
|
+
|
|
408
|
+
if self.agwStyle & wx.DD_DIR_MUST_EXIST:
|
|
409
|
+
self.newButton.Enable(False)
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def LayoutItems(self, message):
|
|
413
|
+
""" Layout the widgets using sizers. """
|
|
414
|
+
|
|
415
|
+
mainSizer = wx.BoxSizer(wx.VERTICAL)
|
|
416
|
+
textSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
417
|
+
bottomSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
418
|
+
|
|
419
|
+
staticText = wx.StaticText(self, -1, message)
|
|
420
|
+
f = staticText.GetFont()
|
|
421
|
+
f.SetWeight(wx.FONTWEIGHT_BOLD)
|
|
422
|
+
staticText.SetFont(f)
|
|
423
|
+
|
|
424
|
+
# Add the main wx.GenericDirCtrl
|
|
425
|
+
mainSizer.Add(staticText, 0, wx.EXPAND|wx.ALL, 10)
|
|
426
|
+
mainSizer.Add(self.dirCtrl, 1, wx.EXPAND|wx.ALL, 10)
|
|
427
|
+
|
|
428
|
+
label = wx.StaticText(self, -1, _("Folder:"))
|
|
429
|
+
textSizer.Add(label, 0, wx.LEFT|wx.RIGHT, 10)
|
|
430
|
+
textSizer.Add(self.folderText, 1, wx.RIGHT|wx.EXPAND, 10)
|
|
431
|
+
mainSizer.Add(textSizer, 0, wx.EXPAND|wx.BOTTOM, 10)
|
|
432
|
+
|
|
433
|
+
# Add the fancy buttons
|
|
434
|
+
bottomSizer.Add(self.newButton, 0, wx.ALL, 10)
|
|
435
|
+
bottomSizer.Add((0, 0), 1, wx.EXPAND)
|
|
436
|
+
bottomSizer.Add(self.okButton, 0, wx.TOP|wx.BOTTOM, 10)
|
|
437
|
+
bottomSizer.Add(self.cancelButton, 0, wx.TOP|wx.BOTTOM|wx.RIGHT, 10)
|
|
438
|
+
mainSizer.Add(bottomSizer, 0, wx.EXPAND)
|
|
439
|
+
|
|
440
|
+
# Layout the dialog
|
|
441
|
+
self.SetSizer(mainSizer)
|
|
442
|
+
mainSizer.Layout()
|
|
443
|
+
mainSizer.Fit(self)
|
|
444
|
+
mainSizer.SetSizeHints(self)
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def GetPaths(self):
|
|
448
|
+
""" Returns the folders selected by the user, or the default path. """
|
|
449
|
+
return self.dirCtrl.GetPaths()
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def BindEvents(self):
|
|
453
|
+
""" Binds the events to specific methods. """
|
|
454
|
+
|
|
455
|
+
self.Bind(wx.EVT_BUTTON, self.OnOk, self.okButton)
|
|
456
|
+
self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelButton)
|
|
457
|
+
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
|
458
|
+
self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyUp)
|
|
459
|
+
self.dirCtrl.GetTreeCtrl().Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def CreateButtons(self):
|
|
463
|
+
""" Creates the ``OK``, ``Cancel`` and ``Make New Folder`` bitmap buttons. """
|
|
464
|
+
|
|
465
|
+
# Build a couple of fancy buttons
|
|
466
|
+
self.newButton = buttons.ThemedGenBitmapTextButton(self, wx.ID_NEW, _new.GetBitmap(),
|
|
467
|
+
_("Make New Folder"), size=(-1, 28))
|
|
468
|
+
self.okButton = buttons.ThemedGenBitmapTextButton(self, wx.ID_OK, _ok.GetBitmap(),
|
|
469
|
+
_("OK"), size=(-1, 28))
|
|
470
|
+
self.cancelButton = buttons.ThemedGenBitmapTextButton(self, wx.ID_CANCEL, _cancel.GetBitmap(),
|
|
471
|
+
_("Cancel"), size=(-1, 28))
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def OnOk(self, event):
|
|
475
|
+
"""
|
|
476
|
+
Handles the ``wx.EVT_BUTTON`` event for the dialog.
|
|
477
|
+
|
|
478
|
+
:param `event`: a :class:`CommandEvent` event to be processed.
|
|
479
|
+
|
|
480
|
+
:note: This method handles the ``OK`` button press.
|
|
481
|
+
"""
|
|
482
|
+
|
|
483
|
+
self.EndModal(wx.ID_OK)
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def OnCancel(self, event):
|
|
487
|
+
"""
|
|
488
|
+
Handles the ``wx.EVT_BUTTON`` event for the dialog.
|
|
489
|
+
|
|
490
|
+
:param `event`: a :class:`CommandEvent` event to be processed.
|
|
491
|
+
|
|
492
|
+
:note: This method handles the ``Cancel`` button press.
|
|
493
|
+
"""
|
|
494
|
+
|
|
495
|
+
self.OnClose(event)
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
def OnClose(self, event):
|
|
499
|
+
"""
|
|
500
|
+
Handles the ``wx.EVT_CLOSE`` event for the dialog.
|
|
501
|
+
|
|
502
|
+
:param `event`: a :class:`CloseEvent` event to be processed.
|
|
503
|
+
"""
|
|
504
|
+
|
|
505
|
+
self.EndModal(wx.ID_CANCEL)
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
def OnKeyUp(self, event):
|
|
509
|
+
"""
|
|
510
|
+
Handles the ``wx.EVT_CHAR_HOOK`` event for the dialog.
|
|
511
|
+
|
|
512
|
+
:param `event`: a :class:`KeyEvent` event to be processed.
|
|
513
|
+
"""
|
|
514
|
+
|
|
515
|
+
if event.GetKeyCode() == wx.WXK_ESCAPE:
|
|
516
|
+
# Close the dialog, no action
|
|
517
|
+
self.OnClose(event)
|
|
518
|
+
elif event.GetKeyCode() in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
|
|
519
|
+
# Close the dialog, the user wants to continue
|
|
520
|
+
self.OnOk(event)
|
|
521
|
+
|
|
522
|
+
event.Skip()
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
def OnSelChanged(self, event):
|
|
526
|
+
"""
|
|
527
|
+
Handles the ``wx.EVT_TREE_SEL_CHANGED`` event for the tree control associated
|
|
528
|
+
with :class:`MultiDirDialog`.
|
|
529
|
+
|
|
530
|
+
:param `event`: a :class:`TreeEvent` event to be processed.
|
|
531
|
+
"""
|
|
532
|
+
|
|
533
|
+
try:
|
|
534
|
+
if self.IsBeingDeleted():
|
|
535
|
+
# We are being destroyed...
|
|
536
|
+
event.Skip()
|
|
537
|
+
return
|
|
538
|
+
except RuntimeError:
|
|
539
|
+
# We are really being destroyed...
|
|
540
|
+
return
|
|
541
|
+
|
|
542
|
+
item = event.GetItem()
|
|
543
|
+
if not item.IsOk():
|
|
544
|
+
# Bad item?
|
|
545
|
+
event.Skip()
|
|
546
|
+
return
|
|
547
|
+
|
|
548
|
+
treeCtrl = self.dirCtrl.GetTreeCtrl()
|
|
549
|
+
text = treeCtrl.GetItemText(item)
|
|
550
|
+
# Set the item name into the text control
|
|
551
|
+
self.folderText.SetValue(text)
|
|
552
|
+
self.folderText.Refresh()
|
|
553
|
+
|
|
554
|
+
event.Skip()
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
if __name__ == '__main__':
|
|
559
|
+
|
|
560
|
+
import os, sys
|
|
561
|
+
import wx
|
|
562
|
+
|
|
563
|
+
# Our normal wxApp-derived class, as usual
|
|
564
|
+
app = wx.App(0)
|
|
565
|
+
|
|
566
|
+
dlg = MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(),
|
|
567
|
+
agwStyle=DD_MULTIPLE|DD_DIR_MUST_EXIST)
|
|
568
|
+
|
|
569
|
+
if dlg.ShowModal() != wx.ID_OK:
|
|
570
|
+
print("You Cancelled The Dialog!")
|
|
571
|
+
dlg.Destroy()
|
|
572
|
+
sys.exit()
|
|
573
|
+
|
|
574
|
+
paths = dlg.GetPaths()
|
|
575
|
+
for indx, path in enumerate(paths):
|
|
576
|
+
print(("Path %d: %s"%(indx+1, path)))
|
|
577
|
+
|
|
578
|
+
dlg.Destroy()
|
|
579
|
+
|
|
580
|
+
app.MainLoop()
|
|
581
|
+
|