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.
Files changed (472) hide show
  1. wx/WebView2Loader.dll +0 -0
  2. wx/__init__.py +22 -0
  3. wx/__init__.pyi +10 -0
  4. wx/__version__.py +9 -0
  5. wx/__version__.pyi +15 -0
  6. wx/_adv.cp315-win_amd64.pyd +0 -0
  7. wx/_aui.cp315-win_amd64.pyd +0 -0
  8. wx/_core.cp315-win_amd64.pyd +0 -0
  9. wx/_dataview.cp315-win_amd64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_amd64.pyd +0 -0
  11. wx/_grid.cp315-win_amd64.pyd +0 -0
  12. wx/_html.cp315-win_amd64.pyd +0 -0
  13. wx/_html2.cp315-win_amd64.pyd +0 -0
  14. wx/_media.cp315-win_amd64.pyd +0 -0
  15. wx/_msw.cp315-win_amd64.pyd +0 -0
  16. wx/_propgrid.cp315-win_amd64.pyd +0 -0
  17. wx/_ribbon.cp315-win_amd64.pyd +0 -0
  18. wx/_richtext.cp315-win_amd64.pyd +0 -0
  19. wx/_stc.cp315-win_amd64.pyd +0 -0
  20. wx/_xml.cp315-win_amd64.pyd +0 -0
  21. wx/_xrc.cp315-win_amd64.pyd +0 -0
  22. wx/adv.py +127 -0
  23. wx/adv.pyi +5931 -0
  24. wx/aui.py +70 -0
  25. wx/aui.pyi +4805 -0
  26. wx/core.py +3417 -0
  27. wx/core.pyi +62949 -0
  28. wx/dataview.py +176 -0
  29. wx/dataview.pyi +3828 -0
  30. wx/gizmos.py +18 -0
  31. wx/glcanvas.py +13 -0
  32. wx/glcanvas.pyi +544 -0
  33. wx/grid.py +237 -0
  34. wx/grid.pyi +5678 -0
  35. wx/html.py +38 -0
  36. wx/html.pyi +3283 -0
  37. wx/html2.py +46 -0
  38. wx/html2.pyi +1301 -0
  39. wx/include/wxPython/sip.h +1938 -0
  40. wx/include/wxPython/wxpy_api.h +418 -0
  41. wx/lib/CDate.py +201 -0
  42. wx/lib/ClickableHtmlWindow.py +57 -0
  43. wx/lib/__init__.py +0 -0
  44. wx/lib/activex.py +178 -0
  45. wx/lib/activexwrapper.py +153 -0
  46. wx/lib/agw/__init__.py +128 -0
  47. wx/lib/agw/advancedsplash.py +563 -0
  48. wx/lib/agw/aquabutton.py +1127 -0
  49. wx/lib/agw/artmanager.py +2110 -0
  50. wx/lib/agw/aui/__init__.py +295 -0
  51. wx/lib/agw/aui/aui_constants.py +2616 -0
  52. wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
  53. wx/lib/agw/aui/aui_utilities.py +648 -0
  54. wx/lib/agw/aui/auibar.py +4045 -0
  55. wx/lib/agw/aui/auibook.py +6288 -0
  56. wx/lib/agw/aui/dockart.py +1198 -0
  57. wx/lib/agw/aui/framemanager.py +10485 -0
  58. wx/lib/agw/aui/tabart.py +2749 -0
  59. wx/lib/agw/aui/tabmdi.py +679 -0
  60. wx/lib/agw/balloontip.py +1157 -0
  61. wx/lib/agw/buttonpanel.py +2787 -0
  62. wx/lib/agw/cubecolourdialog.py +3529 -0
  63. wx/lib/agw/customtreectrl.py +9908 -0
  64. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  65. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  66. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  67. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  68. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  69. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  70. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  71. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  72. wx/lib/agw/data/default_help_text.html +105 -0
  73. wx/lib/agw/flatmenu.py +7392 -0
  74. wx/lib/agw/flatnotebook.py +6669 -0
  75. wx/lib/agw/floatspin.py +1820 -0
  76. wx/lib/agw/fmcustomizedlg.py +535 -0
  77. wx/lib/agw/fmresources.py +407 -0
  78. wx/lib/agw/foldpanelbar.py +2282 -0
  79. wx/lib/agw/fourwaysplitter.py +1130 -0
  80. wx/lib/agw/genericmessagedialog.py +1549 -0
  81. wx/lib/agw/gradientbutton.py +731 -0
  82. wx/lib/agw/hyperlink.py +664 -0
  83. wx/lib/agw/hypertreelist.py +5756 -0
  84. wx/lib/agw/infobar.py +885 -0
  85. wx/lib/agw/knobctrl.py +944 -0
  86. wx/lib/agw/labelbook.py +3028 -0
  87. wx/lib/agw/multidirdialog.py +581 -0
  88. wx/lib/agw/peakmeter.py +1028 -0
  89. wx/lib/agw/persist/__init__.py +188 -0
  90. wx/lib/agw/persist/persist_constants.py +283 -0
  91. wx/lib/agw/persist/persist_handlers.py +2614 -0
  92. wx/lib/agw/persist/persistencemanager.py +863 -0
  93. wx/lib/agw/piectrl.py +1082 -0
  94. wx/lib/agw/pybusyinfo.py +399 -0
  95. wx/lib/agw/pycollapsiblepane.py +940 -0
  96. wx/lib/agw/pygauge.py +570 -0
  97. wx/lib/agw/pyprogress.py +916 -0
  98. wx/lib/agw/ribbon/__init__.py +198 -0
  99. wx/lib/agw/ribbon/art.py +219 -0
  100. wx/lib/agw/ribbon/art_aui.py +1283 -0
  101. wx/lib/agw/ribbon/art_default.py +81 -0
  102. wx/lib/agw/ribbon/art_internal.py +248 -0
  103. wx/lib/agw/ribbon/art_msw.py +2735 -0
  104. wx/lib/agw/ribbon/art_osx.py +52 -0
  105. wx/lib/agw/ribbon/bar.py +1259 -0
  106. wx/lib/agw/ribbon/buttonbar.py +1317 -0
  107. wx/lib/agw/ribbon/control.py +205 -0
  108. wx/lib/agw/ribbon/gallery.py +973 -0
  109. wx/lib/agw/ribbon/page.py +946 -0
  110. wx/lib/agw/ribbon/panel.py +1170 -0
  111. wx/lib/agw/ribbon/toolbar.py +1441 -0
  112. wx/lib/agw/rulerctrl.py +1885 -0
  113. wx/lib/agw/scrolledthumbnail.py +2116 -0
  114. wx/lib/agw/shapedbutton.py +1809 -0
  115. wx/lib/agw/shortcuteditor.py +2642 -0
  116. wx/lib/agw/speedmeter.py +1800 -0
  117. wx/lib/agw/supertooltip.py +1443 -0
  118. wx/lib/agw/thumbnailctrl.py +529 -0
  119. wx/lib/agw/toasterbox.py +1327 -0
  120. wx/lib/agw/ultimatelistctrl.py +13671 -0
  121. wx/lib/agw/xlsgrid.py +2111 -0
  122. wx/lib/agw/zoombar.py +1336 -0
  123. wx/lib/analogclock/__init__.py +140 -0
  124. wx/lib/analogclock/analogclock.py +630 -0
  125. wx/lib/analogclock/helpers.py +986 -0
  126. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  127. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  128. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  129. wx/lib/analogclock/setup.py +490 -0
  130. wx/lib/analogclock/styles.py +47 -0
  131. wx/lib/anchors.py +103 -0
  132. wx/lib/art/__init__.py +4 -0
  133. wx/lib/art/flagart.py +1583 -0
  134. wx/lib/art/img2pyartprov.py +56 -0
  135. wx/lib/busy.py +152 -0
  136. wx/lib/buttons.py +1140 -0
  137. wx/lib/calendar.py +1596 -0
  138. wx/lib/checkbox.py +837 -0
  139. wx/lib/colourchooser/__init__.py +36 -0
  140. wx/lib/colourchooser/canvas.py +145 -0
  141. wx/lib/colourchooser/intl.py +24 -0
  142. wx/lib/colourchooser/pycolourbox.py +89 -0
  143. wx/lib/colourchooser/pycolourchooser.py +626 -0
  144. wx/lib/colourchooser/pycolourslider.py +98 -0
  145. wx/lib/colourchooser/pypalette.py +208 -0
  146. wx/lib/colourdb.py +740 -0
  147. wx/lib/colourselect.py +385 -0
  148. wx/lib/colourutils.py +118 -0
  149. wx/lib/combotreebox.py +944 -0
  150. wx/lib/delayedresult.py +420 -0
  151. wx/lib/dialogs.py +510 -0
  152. wx/lib/docview.py +3210 -0
  153. wx/lib/dragscroller.py +79 -0
  154. wx/lib/editor/README.txt +77 -0
  155. wx/lib/editor/__init__.py +24 -0
  156. wx/lib/editor/editor.py +974 -0
  157. wx/lib/editor/images.py +15 -0
  158. wx/lib/editor/selection.py +44 -0
  159. wx/lib/embeddedimage.py +76 -0
  160. wx/lib/eventStack.py +136 -0
  161. wx/lib/eventwatcher.py +440 -0
  162. wx/lib/evtmgr.py +521 -0
  163. wx/lib/expando.py +393 -0
  164. wx/lib/fancytext.py +494 -0
  165. wx/lib/filebrowsebutton.py +461 -0
  166. wx/lib/flashwin.py +262 -0
  167. wx/lib/flashwin_old.py +651 -0
  168. wx/lib/floatcanvas/FCEvents.py +53 -0
  169. wx/lib/floatcanvas/FCObjects.py +2910 -0
  170. wx/lib/floatcanvas/FloatCanvas.py +1025 -0
  171. wx/lib/floatcanvas/GUIMode.py +396 -0
  172. wx/lib/floatcanvas/NavCanvas.py +162 -0
  173. wx/lib/floatcanvas/Resources.py +319 -0
  174. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  175. wx/lib/floatcanvas/Utilities/BBox.py +313 -0
  176. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  177. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  178. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  179. wx/lib/floatcanvas/__init__.py +124 -0
  180. wx/lib/foldmenu.py +89 -0
  181. wx/lib/gestures.py +310 -0
  182. wx/lib/gizmos/__init__.py +18 -0
  183. wx/lib/gizmos/dynamicsash.py +1202 -0
  184. wx/lib/gizmos/ledctrl.py +299 -0
  185. wx/lib/gizmos/treelistctrl.py +87 -0
  186. wx/lib/graphics.py +1942 -0
  187. wx/lib/gridmovers.py +516 -0
  188. wx/lib/iewin.py +249 -0
  189. wx/lib/iewin_old.py +894 -0
  190. wx/lib/imagebrowser.py +853 -0
  191. wx/lib/imageutils.py +163 -0
  192. wx/lib/infoframe.py +490 -0
  193. wx/lib/inspection.py +1254 -0
  194. wx/lib/intctrl.py +990 -0
  195. wx/lib/itemspicker.py +256 -0
  196. wx/lib/langlistctrl.py +480 -0
  197. wx/lib/layoutf.py +271 -0
  198. wx/lib/masked/__init__.py +27 -0
  199. wx/lib/masked/combobox.py +839 -0
  200. wx/lib/masked/ctrl.py +108 -0
  201. wx/lib/masked/ipaddrctrl.py +241 -0
  202. wx/lib/masked/maskededit.py +7262 -0
  203. wx/lib/masked/numctrl.py +2000 -0
  204. wx/lib/masked/textctrl.py +465 -0
  205. wx/lib/masked/timectrl.py +1465 -0
  206. wx/lib/mixins/__init__.py +17 -0
  207. wx/lib/mixins/grid.py +47 -0
  208. wx/lib/mixins/gridlabelrenderer.py +277 -0
  209. wx/lib/mixins/imagelist.py +77 -0
  210. wx/lib/mixins/inspection.py +184 -0
  211. wx/lib/mixins/listctrl.py +893 -0
  212. wx/lib/mixins/rubberband.py +403 -0
  213. wx/lib/mixins/treemixin.py +678 -0
  214. wx/lib/msgpanel.py +95 -0
  215. wx/lib/multisash.py +746 -0
  216. wx/lib/myole4ax.idl +178 -0
  217. wx/lib/myole4ax.tlb +0 -0
  218. wx/lib/newevent.py +229 -0
  219. wx/lib/newevent.pyi +25 -0
  220. wx/lib/nvdlg.py +156 -0
  221. wx/lib/ogl/__init__.py +13 -0
  222. wx/lib/ogl/basic.py +3989 -0
  223. wx/lib/ogl/bmpshape.py +86 -0
  224. wx/lib/ogl/canvas.py +467 -0
  225. wx/lib/ogl/composit.py +1576 -0
  226. wx/lib/ogl/diagram.py +230 -0
  227. wx/lib/ogl/divided.py +482 -0
  228. wx/lib/ogl/drawn.py +898 -0
  229. wx/lib/ogl/lines.py +1809 -0
  230. wx/lib/ogl/oglmisc.py +607 -0
  231. wx/lib/pdfviewer/__init__.py +113 -0
  232. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  233. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  234. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  235. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  236. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  237. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  238. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  239. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  240. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  241. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  242. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  243. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  244. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  245. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  246. wx/lib/pdfviewer/buttonpanel.py +285 -0
  247. wx/lib/pdfviewer/images.py +240 -0
  248. wx/lib/pdfviewer/viewer.py +1118 -0
  249. wx/lib/pdfwin.py +295 -0
  250. wx/lib/pdfwin_old.py +789 -0
  251. wx/lib/platebtn.py +789 -0
  252. wx/lib/plot/CHANGELOG.md +150 -0
  253. wx/lib/plot/README.md +16 -0
  254. wx/lib/plot/__init__.py +46 -0
  255. wx/lib/plot/__main__.py +5 -0
  256. wx/lib/plot/examples/__init__.py +0 -0
  257. wx/lib/plot/examples/demo.py +1010 -0
  258. wx/lib/plot/examples/simple_example.py +56 -0
  259. wx/lib/plot/plotcanvas.py +2985 -0
  260. wx/lib/plot/polyobjects.py +1524 -0
  261. wx/lib/plot/utils.py +334 -0
  262. wx/lib/popupctl.py +251 -0
  263. wx/lib/printout.py +1155 -0
  264. wx/lib/progressindicator.py +151 -0
  265. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  266. wx/lib/pubsub/README_WxPython.txt +22 -0
  267. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  268. wx/lib/pubsub/__init__.py +25 -0
  269. wx/lib/pubsub/core/__init__.py +92 -0
  270. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  271. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  272. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  273. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  274. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  275. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  276. wx/lib/pubsub/core/callables.py +198 -0
  277. wx/lib/pubsub/core/imp2.py +62 -0
  278. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  279. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  280. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  281. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  282. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  283. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  284. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
  285. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  286. wx/lib/pubsub/core/listener.py +40 -0
  287. wx/lib/pubsub/core/listenerbase.py +185 -0
  288. wx/lib/pubsub/core/notificationmgr.py +185 -0
  289. wx/lib/pubsub/core/publisherbase.py +189 -0
  290. wx/lib/pubsub/core/topicargspec.py +77 -0
  291. wx/lib/pubsub/core/topicdefnprovider.py +631 -0
  292. wx/lib/pubsub/core/topicexc.py +72 -0
  293. wx/lib/pubsub/core/topicmgr.py +454 -0
  294. wx/lib/pubsub/core/topicobj.py +472 -0
  295. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  296. wx/lib/pubsub/core/topicutils.py +119 -0
  297. wx/lib/pubsub/core/treeconfig.py +21 -0
  298. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  299. wx/lib/pubsub/core/weakmethod.py +102 -0
  300. wx/lib/pubsub/policies.py +24 -0
  301. wx/lib/pubsub/pub.py +199 -0
  302. wx/lib/pubsub/setuparg1.py +47 -0
  303. wx/lib/pubsub/setupkwargs.py +29 -0
  304. wx/lib/pubsub/utils/__init__.py +27 -0
  305. wx/lib/pubsub/utils/exchandling.py +100 -0
  306. wx/lib/pubsub/utils/misc.py +99 -0
  307. wx/lib/pubsub/utils/notification.py +331 -0
  308. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  309. wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
  310. wx/lib/pydocview.py +3300 -0
  311. wx/lib/rcsizer.py +227 -0
  312. wx/lib/resizewidget.py +357 -0
  313. wx/lib/scrolledpanel.py +243 -0
  314. wx/lib/sheet.py +350 -0
  315. wx/lib/sized_controls.py +691 -0
  316. wx/lib/softwareupdate.py +355 -0
  317. wx/lib/splitter.py +925 -0
  318. wx/lib/statbmp.py +199 -0
  319. wx/lib/stattext.py +321 -0
  320. wx/lib/throbber.py +424 -0
  321. wx/lib/ticker.py +306 -0
  322. wx/lib/ticker_xrc.py +48 -0
  323. wx/lib/utils.py +89 -0
  324. wx/lib/wordwrap.py +97 -0
  325. wx/lib/wxcairo/__init__.py +139 -0
  326. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  327. wx/lib/wxcairo/wx_pycairo.py +455 -0
  328. wx/lib/wxpTag.py +274 -0
  329. wx/libcairo-2.dll +0 -0
  330. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  376. wx/media.py +30 -0
  377. wx/media.pyi +272 -0
  378. wx/msw.py +16 -0
  379. wx/msw.pyi +91 -0
  380. wx/propgrid.py +498 -0
  381. wx/propgrid.pyi +7427 -0
  382. wx/py/CHANGES.txt +796 -0
  383. wx/py/Py.ico +0 -0
  384. wx/py/PyAlaCarte.py +34 -0
  385. wx/py/PyAlaMode.py +34 -0
  386. wx/py/PyAlaModeTest.py +33 -0
  387. wx/py/PyCrust.ico +0 -0
  388. wx/py/PyCrust.py +78 -0
  389. wx/py/PyCrust_16.png +0 -0
  390. wx/py/PyCrust_32.png +0 -0
  391. wx/py/PyFilling.py +35 -0
  392. wx/py/PyShell.py +78 -0
  393. wx/py/PySlices.ico +0 -0
  394. wx/py/PySlices.py +98 -0
  395. wx/py/PySlicesShell.py +94 -0
  396. wx/py/PySlices_16.png +0 -0
  397. wx/py/PySlices_32.png +0 -0
  398. wx/py/PyWrap.py +52 -0
  399. wx/py/README.txt +77 -0
  400. wx/py/__init__.py +20 -0
  401. wx/py/buffer.py +136 -0
  402. wx/py/crust.py +403 -0
  403. wx/py/crustslices.py +403 -0
  404. wx/py/dispatcher.py +259 -0
  405. wx/py/document.py +37 -0
  406. wx/py/editor.py +844 -0
  407. wx/py/editwindow.py +316 -0
  408. wx/py/filling.py +358 -0
  409. wx/py/frame.py +976 -0
  410. wx/py/images.py +212 -0
  411. wx/py/interpreter.py +161 -0
  412. wx/py/introspect.py +402 -0
  413. wx/py/magic.py +98 -0
  414. wx/py/parse.py +134 -0
  415. wx/py/path.py +36 -0
  416. wx/py/pseudo.py +99 -0
  417. wx/py/shell.py +1579 -0
  418. wx/py/sliceshell.py +3805 -0
  419. wx/py/tests/test_interpreter.py +71 -0
  420. wx/py/tests/test_introspect.py +810 -0
  421. wx/py/tests/test_pseudo.py +70 -0
  422. wx/py/tests/test_version.py +36 -0
  423. wx/py/tests/testall.py +22 -0
  424. wx/py/version.py +7 -0
  425. wx/py.typed +0 -0
  426. wx/ribbon.py +48 -0
  427. wx/ribbon.pyi +3099 -0
  428. wx/richtext.py +141 -0
  429. wx/richtext.pyi +13581 -0
  430. wx/siplib.cp315-win_amd64.pyd +0 -0
  431. wx/siplib.pyi +19 -0
  432. wx/stc.py +59 -0
  433. wx/stc.pyi +9918 -0
  434. wx/svg/__init__.py +363 -0
  435. wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
  436. wx/tools/__init__.py +18 -0
  437. wx/tools/dbg.py +268 -0
  438. wx/tools/genaxmodule.py +50 -0
  439. wx/tools/helpviewer.py +92 -0
  440. wx/tools/img2img.py +85 -0
  441. wx/tools/img2png.py +54 -0
  442. wx/tools/img2py.py +306 -0
  443. wx/tools/img2xpm.py +54 -0
  444. wx/tools/pywxrc.py +951 -0
  445. wx/tools/wxget.py +254 -0
  446. wx/tools/wxget_docs_demo.py +183 -0
  447. wx/wxbase334u_net_vc140_x64.dll +0 -0
  448. wx/wxbase334u_vc140_x64.dll +0 -0
  449. wx/wxbase334u_xml_vc140_x64.dll +0 -0
  450. wx/wxmsw334u_adv_vc140_x64.dll +0 -0
  451. wx/wxmsw334u_aui_vc140_x64.dll +0 -0
  452. wx/wxmsw334u_core_vc140_x64.dll +0 -0
  453. wx/wxmsw334u_gl_vc140_x64.dll +0 -0
  454. wx/wxmsw334u_html_vc140_x64.dll +0 -0
  455. wx/wxmsw334u_media_vc140_x64.dll +0 -0
  456. wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
  457. wx/wxmsw334u_qa_vc140_x64.dll +0 -0
  458. wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
  459. wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
  460. wx/wxmsw334u_stc_vc140_x64.dll +0 -0
  461. wx/wxmsw334u_webview_vc140_x64.dll +0 -0
  462. wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
  463. wx/xml.py +18 -0
  464. wx/xml.pyi +728 -0
  465. wx/xrc.py +68 -0
  466. wx/xrc.pyi +896 -0
  467. wxpython-4.3.2.dist-info/METADATA +71 -0
  468. wxpython-4.3.2.dist-info/RECORD +472 -0
  469. wxpython-4.3.2.dist-info/WHEEL +5 -0
  470. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  471. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  472. wxpython-4.3.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1232 @@
1
+ # -*- coding: utf-8 -*-
2
+ #----------------------------------------------------------------------------
3
+ # Name: aui_switcherdialog.py
4
+ # Purpose:
5
+ #
6
+ # Author:
7
+ #
8
+ # Created:
9
+ # Version:
10
+ # Date:
11
+ # Licence: wxWindows license
12
+ # Tags: phoenix-port, documented, py3-port
13
+ #----------------------------------------------------------------------------
14
+ """
15
+ Description
16
+ ===========
17
+
18
+ The idea of `SwitcherDialog` is to make it easier to implement keyboard
19
+ navigation in AUI and other applications that have multiple panes and
20
+ tabs.
21
+
22
+ A key combination with a modifier (such as ``Ctrl`` + ``Tab``) shows the
23
+ dialog, and the user holds down the modifier whilst navigating with
24
+ ``Tab`` and arrow keys before releasing the modifier to dismiss the dialog
25
+ and activate the selected pane.
26
+
27
+ The switcher dialog is a multi-column menu with no scrolling, implemented
28
+ by the :class:`MultiColumnListCtrl` class. You can have headings for your items
29
+ for logical grouping, and you can force a column break if you need to.
30
+
31
+ The modifier used for invoking and dismissing the dialog can be customised,
32
+ as can the colours, number of rows, and the key used for cycling through
33
+ the items. So you can use different keys on different platforms if
34
+ required (especially since ``Ctrl`` + ``Tab`` is reserved on some platforms).
35
+
36
+ Items are shown as names and optional 16x16 images.
37
+
38
+
39
+ Base Functionalities
40
+ ====================
41
+
42
+ To use the dialog, you set up the items in a `SwitcherItems` object,
43
+ before passing this to the `SwitcherDialog` instance.
44
+
45
+ Call :meth:`SwitcherItems.AddItem` and optionally :meth:`SwitcherItems.AddGroup`
46
+ to add items and headings. These functions take a label (to be displayed to the user),
47
+ an identifying name, an integer id, and a bitmap. The name and id are purely for
48
+ application-defined identification. You may also set a description to be displayed
49
+ when each item is selected; and you can set a window pointer for convenience when
50
+ activating the desired window after the dialog returns.
51
+
52
+ Have created the dialog, you call :meth:`~Dialog.ShowModal`, and if the return value is
53
+ ``wx.ID_OK``, retrieve the selection from the dialog and activate the pane.
54
+
55
+ The sample code below shows a generic method of finding panes and notebook
56
+ tabs within the current :class:`~wx.lib.agw.aui.framemanager.AuiManager`, and using the pane name or notebook
57
+ tab position to display the pane.
58
+
59
+ The only other code to add is a menu item with the desired accelerator,
60
+ whose modifier matches the one you pass to :meth:`SwitcherDialog.SetModifierKey`
61
+ (the default being ``wx.WXK_CONTROL``).
62
+
63
+
64
+ Usage
65
+ =====
66
+
67
+ Menu item::
68
+
69
+ if wx.Platform == "__WXMAC__":
70
+ switcherAccel = "Alt+Tab"
71
+ elif wx.Platform == "__WXGTK__":
72
+ switcherAccel = "Ctrl+/"
73
+ else:
74
+ switcherAccel = "Ctrl+Tab"
75
+
76
+ view_menu.Append(ID_SwitchPane, _("S&witch Window...") + "\t" + switcherAccel)
77
+
78
+
79
+ Event handler::
80
+
81
+ def OnSwitchPane(self, event):
82
+
83
+ items = SwitcherItems()
84
+ items.SetRowCount(12)
85
+
86
+ # Add the main windows and toolbars, in two separate columns
87
+ # We'll use the item 'id' to store the notebook selection, or -1 if not a page
88
+
89
+ for k in range(2):
90
+ if k == 0:
91
+ items.AddGroup(_("Main Windows"), "mainwindows")
92
+ else:
93
+ items.AddGroup(_("Toolbars"), "toolbars").BreakColumn()
94
+
95
+ for pane in self._mgr.GetAllPanes():
96
+ name = pane.name
97
+ caption = pane.caption
98
+
99
+ toolbar = isinstance(info.window, wx.ToolBar) or isinstance(info.window, aui.AuiToolBar)
100
+ if caption and (toolBar and k == 1) or (not toolBar and k == 0):
101
+ items.AddItem(caption, name, -1).SetWindow(pane.window)
102
+
103
+ # Now add the wxAuiNotebook pages
104
+
105
+ items.AddGroup(_("Notebook Pages"), "pages").BreakColumn()
106
+
107
+ for pane in self._mgr.GetAllPanes():
108
+ nb = pane.window
109
+ if isinstance(nb, aui.AuiNotebook):
110
+ for j in range(nb.GetPageCount()):
111
+
112
+ name = nb.GetPageText(j)
113
+ win = nb.GetPage(j)
114
+
115
+ items.AddItem(name, name, j, nb.GetPageBitmap(j)).SetWindow(win)
116
+
117
+ # Select the focused window
118
+
119
+ idx = items.GetIndexForFocus()
120
+ if idx != wx.NOT_FOUND:
121
+ items.SetSelection(idx)
122
+
123
+ if wx.Platform == "__WXMAC__":
124
+ items.SetBackgroundColour(wx.WHITE)
125
+
126
+ # Show the switcher dialog
127
+
128
+ dlg = SwitcherDialog(items, wx.GetApp().GetTopWindow())
129
+
130
+ # In GTK+ we can't use Ctrl+Tab; we use Ctrl+/ instead and tell the switcher
131
+ # to treat / in the same was as tab (i.e. cycle through the names)
132
+
133
+ if wx.Platform == "__WXGTK__":
134
+ dlg.SetExtraNavigationKey(wxT('/'))
135
+
136
+ if wx.Platform == "__WXMAC__":
137
+ dlg.SetBackgroundColour(wx.WHITE)
138
+ dlg.SetModifierKey(wx.WXK_ALT)
139
+
140
+ ans = dlg.ShowModal()
141
+
142
+ if ans == wx.ID_OK and dlg.GetSelection() != -1:
143
+ item = items.GetItem(dlg.GetSelection())
144
+
145
+ if item.GetId() == -1:
146
+ info = self._mgr.GetPane(item.GetName())
147
+ info.Show()
148
+ self._mgr.Update()
149
+ info.window.SetFocus()
150
+
151
+ else:
152
+ nb = item.GetWindow().GetParent()
153
+ win = item.GetWindow();
154
+ if isinstance(nb, aui.AuiNotebook):
155
+ nb.SetSelection(item.GetId())
156
+ win.SetFocus()
157
+
158
+
159
+ """
160
+
161
+ import sys
162
+ import wx
163
+
164
+ from . import auibook
165
+ from .aui_utilities import FindFocusDescendant
166
+ from .aui_constants import SWITCHER_TEXT_MARGIN_X, SWITCHER_TEXT_MARGIN_Y
167
+
168
+ if sys.version_info >= (3, 11):
169
+ from typing import Self
170
+ else:
171
+ from typing_extensions import Self
172
+
173
+ # Define a translation function
174
+ _ = wx.GetTranslation
175
+
176
+
177
+ class SwitcherItem(object):
178
+ """ An object containing information about one item. """
179
+
180
+ def __init__(self, item=None):
181
+ """ Default class constructor. """
182
+
183
+ self._id = 0
184
+ self._isGroup = False
185
+ self._breakColumn = False
186
+ self._rowPos = 0
187
+ self._colPos = 0
188
+ self._window = None
189
+ self._description = ""
190
+
191
+ self._textColour = wx.NullColour
192
+ self._bitmap = wx.NullBitmap
193
+ self._font = wx.NullFont
194
+
195
+ if item:
196
+ self.Copy(item)
197
+
198
+
199
+ def Copy(self, item):
200
+ """
201
+ Copy operator between 2 :class:`SwitcherItem` instances.
202
+
203
+ :param `item`: another instance of :class:`SwitcherItem`.
204
+ """
205
+
206
+ self._id = item._id
207
+ self._name = item._name
208
+ self._title = item._title
209
+ self._isGroup = item._isGroup
210
+ self._breakColumn = item._breakColumn
211
+ self._rect = item._rect
212
+ self._font = item._font
213
+ self._textColour = item._textColour
214
+ self._bitmap = item._bitmap
215
+ self._description = item._description
216
+ self._rowPos = item._rowPos
217
+ self._colPos = item._colPos
218
+ self._window = item._window
219
+
220
+
221
+ def SetTitle(self, title) -> Self:
222
+
223
+ self._title = title
224
+ return self
225
+
226
+
227
+ def GetTitle(self):
228
+
229
+ return self._title
230
+
231
+
232
+ def SetName(self, name) -> Self:
233
+
234
+ self._name = name
235
+ return self
236
+
237
+
238
+ def GetName(self):
239
+
240
+ return self._name
241
+
242
+
243
+ def SetDescription(self, descr) -> Self:
244
+
245
+ self._description = descr
246
+ return self
247
+
248
+
249
+ def GetDescription(self):
250
+
251
+ return self._description
252
+
253
+
254
+ def SetId(self, id) -> Self:
255
+
256
+ self._id = id
257
+ return self
258
+
259
+
260
+ def GetId(self):
261
+
262
+ return self._id
263
+
264
+
265
+ def SetIsGroup(self, isGroup) -> Self:
266
+
267
+ self._isGroup = isGroup
268
+ return self
269
+
270
+
271
+ def GetIsGroup(self):
272
+
273
+ return self._isGroup
274
+
275
+
276
+ def BreakColumn(self, breakCol=True) -> Self:
277
+
278
+ self._breakColumn = breakCol
279
+ return self
280
+
281
+
282
+ def GetBreakColumn(self):
283
+
284
+ return self._breakColumn
285
+
286
+
287
+ def SetRect(self, rect) -> Self:
288
+
289
+ self._rect = rect
290
+ return self
291
+
292
+
293
+ def GetRect(self):
294
+
295
+ return self._rect
296
+
297
+
298
+ def SetTextColour(self, colour) -> Self:
299
+
300
+ self._textColour = colour
301
+ return self
302
+
303
+
304
+ def GetTextColour(self):
305
+
306
+ return self._textColour
307
+
308
+
309
+ def SetFont(self, font) -> Self:
310
+
311
+ self._font = font
312
+ return self
313
+
314
+
315
+ def GetFont(self):
316
+
317
+ return self._font
318
+
319
+
320
+ def SetBitmap(self, bitmap) -> Self:
321
+
322
+ self._bitmap = bitmap
323
+ return self
324
+
325
+
326
+ def GetBitmap(self):
327
+
328
+ return self._bitmap
329
+
330
+
331
+ def SetRowPos(self, pos) -> Self:
332
+
333
+ self._rowPos = pos
334
+ return self
335
+
336
+
337
+ def GetRowPos(self):
338
+
339
+ return self._rowPos
340
+
341
+
342
+ def SetColPos(self, pos) -> Self:
343
+
344
+ self._colPos = pos
345
+ return self
346
+
347
+
348
+ def GetColPos(self):
349
+
350
+ return self._colPos
351
+
352
+
353
+ def SetWindow(self, win) -> Self:
354
+
355
+ self._window = win
356
+ return self
357
+
358
+
359
+ def GetWindow(self):
360
+
361
+ return self._window
362
+
363
+
364
+ class SwitcherItems(object):
365
+ """ An object containing switcher items. """
366
+
367
+ def __init__(self, items=None):
368
+ """ Default class constructor. """
369
+
370
+ self._selection = -1
371
+ self._rowCount = 10
372
+ self._columnCount = 0
373
+
374
+ self._backgroundColour = wx.NullColour
375
+ self._textColour = wx.NullColour
376
+ self._selectionColour = wx.NullColour
377
+ self._selectionOutlineColour = wx.NullColour
378
+ self._itemFont = wx.NullFont
379
+
380
+ self._items = []
381
+
382
+ if wx.Platform == "__WXMSW__":
383
+ # If on Windows XP/Vista, use more appropriate colours
384
+ self.SetSelectionOutlineColour(wx.Colour(49, 106, 197))
385
+ self.SetSelectionColour(wx.Colour(193, 210, 238))
386
+
387
+ if items:
388
+ self.Copy(items)
389
+
390
+
391
+ def Copy(self, items):
392
+ """
393
+ Copy operator between 2 :class:`SwitcherItems`.
394
+
395
+ :param `items`: another instance of :class:`SwitcherItems`.
396
+ """
397
+
398
+ self.Clear()
399
+
400
+ for item in items._items:
401
+ self._items.append(item)
402
+
403
+ self._selection = items._selection
404
+ self._rowCount = items._rowCount
405
+ self._columnCount = items._columnCount
406
+
407
+ self._backgroundColour = items._backgroundColour
408
+ self._textColour = items._textColour
409
+ self._selectionColour = items._selectionColour
410
+ self._selectionOutlineColour = items._selectionOutlineColour
411
+ self._itemFont = items._itemFont
412
+
413
+
414
+ def AddItem(self, titleOrItem, name=None, id=0, bitmap=wx.NullBitmap):
415
+
416
+ if isinstance(titleOrItem, SwitcherItem):
417
+ self._items.append(titleOrItem)
418
+ return self._items[-1]
419
+
420
+ item = SwitcherItem()
421
+ item.SetTitle(titleOrItem)
422
+ item.SetName(name)
423
+ item.SetId(id)
424
+ item.SetBitmap(bitmap)
425
+
426
+ self._items.append(item)
427
+ return self._items[-1]
428
+
429
+
430
+ def AddGroup(self, title, name, id=0, bitmap=wx.NullBitmap):
431
+
432
+ item = self.AddItem(title, name, id, bitmap)
433
+ item.SetIsGroup(True)
434
+
435
+ return item
436
+
437
+
438
+ def Clear(self):
439
+
440
+ self._items = []
441
+
442
+
443
+ def FindItemByName(self, name):
444
+
445
+ for i in range(len(self._items)):
446
+ if self._items[i].GetName() == name:
447
+ return i
448
+
449
+ return wx.NOT_FOUND
450
+
451
+
452
+ def FindItemById(self, id):
453
+
454
+ for i in range(len(self._items)):
455
+ if self._items[i].GetId() == id:
456
+ return i
457
+
458
+ return wx.NOT_FOUND
459
+
460
+
461
+ def SetSelection(self, sel):
462
+
463
+ self._selection = sel
464
+
465
+
466
+ def SetSelectionByName(self, name):
467
+
468
+ idx = self.FindItemByName(name)
469
+ if idx != wx.NOT_FOUND:
470
+ self.SetSelection(idx)
471
+
472
+
473
+ def GetSelection(self):
474
+
475
+ return self._selection
476
+
477
+
478
+ def GetItem(self, i):
479
+
480
+ return self._items[i]
481
+
482
+
483
+ def GetItemCount(self):
484
+
485
+ return len(self._items)
486
+
487
+
488
+ def SetRowCount(self, rows):
489
+
490
+ self._rowCount = rows
491
+
492
+
493
+ def GetRowCount(self):
494
+
495
+ return self._rowCount
496
+
497
+
498
+ def SetColumnCount(self, cols):
499
+
500
+ self._columnCount = cols
501
+
502
+
503
+ def GetColumnCount(self):
504
+
505
+ return self._columnCount
506
+
507
+
508
+ def SetBackgroundColour(self, colour):
509
+
510
+ self._backgroundColour = colour
511
+
512
+
513
+ def GetBackgroundColour(self):
514
+
515
+ return self._backgroundColour
516
+
517
+
518
+ def SetTextColour(self, colour):
519
+
520
+ self._textColour = colour
521
+
522
+
523
+ def GetTextColour(self):
524
+
525
+ return self._textColour
526
+
527
+
528
+ def SetSelectionColour(self, colour):
529
+
530
+ self._selectionColour = colour
531
+
532
+
533
+ def GetSelectionColour(self):
534
+
535
+ return self._selectionColour
536
+
537
+
538
+ def SetSelectionOutlineColour(self, colour):
539
+
540
+ self._selectionOutlineColour = colour
541
+
542
+
543
+ def GetSelectionOutlineColour(self):
544
+
545
+ return self._selectionOutlineColour
546
+
547
+
548
+ def SetItemFont(self, font):
549
+
550
+ self._itemFont = font
551
+
552
+
553
+ def GetItemFont(self):
554
+
555
+ return self._itemFont
556
+
557
+
558
+ def PaintItems(self, dc, win):
559
+
560
+ backgroundColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
561
+ standardTextColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
562
+ selectionColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)
563
+ selectionOutlineColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
564
+ standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
565
+ groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
566
+ groupFont.SetWeight(wx.FONTWEIGHT_BOLD)
567
+
568
+ if self.GetBackgroundColour().IsOk():
569
+ backgroundColour = self.GetBackgroundColour()
570
+
571
+ if self.GetTextColour().IsOk():
572
+ standardTextColour = self.GetTextColour()
573
+
574
+ if self.GetSelectionColour().IsOk():
575
+ selectionColour = self.GetSelectionColour()
576
+
577
+ if self.GetSelectionOutlineColour().IsOk():
578
+ selectionOutlineColour = self.GetSelectionOutlineColour()
579
+
580
+ if self.GetItemFont().IsOk():
581
+
582
+ standardFont = self.GetItemFont()
583
+ groupFont = wx.Font(standardFont.GetPointSize(), standardFont.GetFamily(), standardFont.GetStyle(),
584
+ wx.FONTWEIGHT_BOLD, standardFont.GetUnderlined(), standardFont.GetFaceName())
585
+
586
+ textMarginX = SWITCHER_TEXT_MARGIN_X
587
+
588
+ dc.SetLogicalFunction(wx.COPY)
589
+ dc.SetBrush(wx.Brush(backgroundColour))
590
+ dc.SetPen(wx.TRANSPARENT_PEN)
591
+ dc.DrawRectangle(win.GetClientRect())
592
+ dc.SetBackgroundMode(wx.TRANSPARENT)
593
+
594
+ for i in range(len(self._items)):
595
+ item = self._items[i]
596
+ if i == self._selection:
597
+ dc.SetPen(wx.Pen(selectionOutlineColour))
598
+ dc.SetBrush(wx.Brush(selectionColour))
599
+ dc.DrawRectangle(item.GetRect())
600
+
601
+ clippingRect = wx.Rect(*item.GetRect())
602
+ clippingRect.Deflate(1, 1)
603
+
604
+ dc.SetClippingRegion(clippingRect)
605
+
606
+ if item.GetTextColour().IsOk():
607
+ dc.SetTextForeground(item.GetTextColour())
608
+ else:
609
+ dc.SetTextForeground(standardTextColour)
610
+
611
+ if item.GetFont().IsOk():
612
+ dc.SetFont(item.GetFont())
613
+ else:
614
+ if item.GetIsGroup():
615
+ dc.SetFont(groupFont)
616
+ else:
617
+ dc.SetFont(standardFont)
618
+
619
+ w, h = dc.GetTextExtent(item.GetTitle())
620
+ x = item.GetRect().x
621
+
622
+ x += textMarginX
623
+
624
+ if not item.GetIsGroup():
625
+ if item.GetBitmap().IsOk() and item.GetBitmap().GetWidth() <= 16 \
626
+ and item.GetBitmap().GetHeight() <= 16:
627
+ x -= textMarginX
628
+ dc.DrawBitmap(item.GetBitmap(), x, item.GetRect().y + \
629
+ (item.GetRect().height - item.GetBitmap().GetHeight())//2,
630
+ True)
631
+ x += 16 + textMarginX
632
+ #x += textMarginX
633
+
634
+ y = item.GetRect().y + (item.GetRect().height - h)//2
635
+ dc.DrawText(item.GetTitle(), x, y)
636
+ dc.DestroyClippingRegion()
637
+
638
+
639
+ def CalculateItemSize(self, dc):
640
+
641
+ # Start off allowing for an icon
642
+ sz = wx.Size(150, 16)
643
+ standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
644
+ groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
645
+ groupFont.SetWeight(wx.FONTWEIGHT_BOLD)
646
+
647
+ textMarginX = SWITCHER_TEXT_MARGIN_X
648
+ textMarginY = SWITCHER_TEXT_MARGIN_Y
649
+ maxWidth = 300
650
+ maxHeight = 40
651
+
652
+ if self.GetItemFont().IsOk():
653
+ standardFont = self.GetItemFont()
654
+
655
+ for item in self._items:
656
+ if item.GetFont().IsOk():
657
+ dc.SetFont(item.GetFont())
658
+ else:
659
+ if item.GetIsGroup():
660
+ dc.SetFont(groupFont)
661
+ else:
662
+ dc.SetFont(standardFont)
663
+
664
+ w, h = dc.GetTextExtent(item.GetTitle())
665
+ w += 16 + 2*textMarginX
666
+
667
+ if w > sz.x:
668
+ sz.x = min(w, maxWidth)
669
+ if h > sz.y:
670
+ sz.y = min(h, maxHeight)
671
+
672
+ if sz == wx.Size(16, 16):
673
+ sz = wx.Size(100, 25)
674
+ else:
675
+ sz.x += textMarginX*2
676
+ sz.y += textMarginY*2
677
+
678
+ return sz
679
+
680
+
681
+ def GetIndexForFocus(self):
682
+
683
+ for i, item in enumerate(self._items):
684
+ if item.GetWindow():
685
+
686
+ if FindFocusDescendant(item.GetWindow()):
687
+ return i
688
+
689
+ return wx.NOT_FOUND
690
+
691
+
692
+ class MultiColumnListCtrl(wx.Control):
693
+ """ A control for displaying several columns (not scrollable). """
694
+
695
+ def __init__(self, parent, aui_manager, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
696
+ style=0, validator=wx.DefaultValidator, name="MultiColumnListCtrl"):
697
+
698
+ wx.Control.__init__(self, parent, id, pos, size, style, validator, name)
699
+
700
+ self._overallSize = wx.Size(200, 100)
701
+ self._modifierKey = wx.WXK_CONTROL
702
+ self._extraNavigationKey = 0
703
+ self._aui_manager = aui_manager
704
+
705
+ self.SetInitialSize(size)
706
+ self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
707
+
708
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
709
+ self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
710
+ self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouseEvent)
711
+ self.Bind(wx.EVT_CHAR, self.OnChar)
712
+ self.Bind(wx.EVT_KEY_DOWN, self.OnKey)
713
+ self.Bind(wx.EVT_KEY_UP, self.OnKey)
714
+
715
+
716
+ def __del__(self):
717
+
718
+ self._aui_manager.HideHint()
719
+
720
+
721
+ def DoGetBestSize(self):
722
+
723
+ return self._overallSize
724
+
725
+
726
+ def OnEraseBackground(self, event):
727
+
728
+ pass
729
+
730
+
731
+ def OnPaint(self, event):
732
+
733
+ dc = wx.AutoBufferedPaintDC(self)
734
+ rect = self.GetClientRect()
735
+
736
+ if self._items.GetColumnCount() == 0:
737
+ self.CalculateLayout(dc)
738
+
739
+ if self._items.GetColumnCount() == 0:
740
+ return
741
+
742
+ self._items.PaintItems(dc, self)
743
+
744
+
745
+ def OnMouseEvent(self, event):
746
+
747
+ if event.LeftDown():
748
+ self.SetFocus()
749
+
750
+
751
+ def OnChar(self, event):
752
+
753
+ event.Skip()
754
+
755
+
756
+ def OnKey(self, event):
757
+
758
+ if event.GetEventType() == wx.wxEVT_KEY_UP:
759
+ if event.GetKeyCode() == self.GetModifierKey():
760
+ topLevel = wx.GetTopLevelParent(self)
761
+ closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
762
+ closeEvent.SetEventObject(topLevel)
763
+ closeEvent.SetCanVeto(False)
764
+
765
+ topLevel.GetEventHandler().ProcessEvent(closeEvent)
766
+ return
767
+
768
+ event.Skip()
769
+ return
770
+
771
+ keyCode = event.GetKeyCode()
772
+
773
+ if keyCode in [wx.WXK_ESCAPE, wx.WXK_RETURN]:
774
+ if keyCode == wx.WXK_ESCAPE:
775
+ self._items.SetSelection(-1)
776
+
777
+ topLevel = wx.GetTopLevelParent(self)
778
+ closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
779
+ closeEvent.SetEventObject(topLevel)
780
+ closeEvent.SetCanVeto(False)
781
+
782
+ topLevel.GetEventHandler().ProcessEvent(closeEvent)
783
+ return
784
+
785
+ elif keyCode in [wx.WXK_TAB, self.GetExtraNavigationKey()]:
786
+ if event.ShiftDown():
787
+
788
+ self._items.SetSelection(self._items.GetSelection() - 1)
789
+ if self._items.GetSelection() < 0:
790
+ self._items.SetSelection(self._items.GetItemCount() - 1)
791
+
792
+ self.AdvanceToNextSelectableItem(-1)
793
+
794
+ else:
795
+
796
+ self._items.SetSelection(self._items.GetSelection() + 1)
797
+ if self._items.GetSelection() >= self._items.GetItemCount():
798
+ self._items.SetSelection(0)
799
+
800
+ self.AdvanceToNextSelectableItem(1)
801
+
802
+ self.GenerateSelectionEvent()
803
+ self.Refresh()
804
+
805
+ elif keyCode in [wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN]:
806
+ self._items.SetSelection(self._items.GetSelection() + 1)
807
+ if self._items.GetSelection() >= self._items.GetItemCount():
808
+ self._items.SetSelection(0)
809
+
810
+ self.AdvanceToNextSelectableItem(1)
811
+ self.GenerateSelectionEvent()
812
+ self.Refresh()
813
+
814
+ elif keyCode in [wx.WXK_UP, wx.WXK_NUMPAD_UP]:
815
+ self._items.SetSelection(self._items.GetSelection() - 1)
816
+ if self._items.GetSelection() < 0:
817
+ self._items.SetSelection(self._items.GetItemCount() - 1)
818
+
819
+ self.AdvanceToNextSelectableItem(-1)
820
+ self.GenerateSelectionEvent()
821
+ self.Refresh()
822
+
823
+ elif keyCode in [wx.WXK_HOME, wx.WXK_NUMPAD_HOME]:
824
+ self._items.SetSelection(0)
825
+ self.AdvanceToNextSelectableItem(1)
826
+ self.GenerateSelectionEvent()
827
+ self.Refresh()
828
+
829
+ elif keyCode in [wx.WXK_END, wx.WXK_NUMPAD_END]:
830
+ self._items.SetSelection(self._items.GetItemCount() - 1)
831
+ self.AdvanceToNextSelectableItem(-1)
832
+ self.GenerateSelectionEvent()
833
+ self.Refresh()
834
+
835
+ elif keyCode in [wx.WXK_LEFT, wx.WXK_NUMPAD_LEFT]:
836
+ item = self._items.GetItem(self._items.GetSelection())
837
+
838
+ row = item.GetRowPos()
839
+ newCol = item.GetColPos() - 1
840
+ if newCol < 0:
841
+ newCol = self._items.GetColumnCount() - 1
842
+
843
+ # Find the first item from the end whose row matches and whose column is equal or lower
844
+ for i in range(self._items.GetItemCount()-1, -1, -1):
845
+ item2 = self._items.GetItem(i)
846
+ if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
847
+ self._items.SetSelection(i)
848
+ break
849
+
850
+ self.AdvanceToNextSelectableItem(-1)
851
+ self.GenerateSelectionEvent()
852
+ self.Refresh()
853
+
854
+ elif keyCode in [wx.WXK_RIGHT, wx.WXK_NUMPAD_RIGHT]:
855
+ item = self._items.GetItem(self._items.GetSelection())
856
+
857
+ row = item.GetRowPos()
858
+ newCol = item.GetColPos() + 1
859
+ if newCol >= self._items.GetColumnCount():
860
+ newCol = 0
861
+
862
+ # Find the first item from the end whose row matches and whose column is equal or lower
863
+ for i in range(self._items.GetItemCount()-1, -1, -1):
864
+ item2 = self._items.GetItem(i)
865
+ if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
866
+ self._items.SetSelection(i)
867
+ break
868
+
869
+ self.AdvanceToNextSelectableItem(1)
870
+ self.GenerateSelectionEvent()
871
+ self.Refresh()
872
+
873
+ else:
874
+ event.Skip()
875
+
876
+
877
+ def AdvanceToNextSelectableItem(self, direction):
878
+
879
+ if self._items.GetItemCount() < 2:
880
+ return
881
+
882
+ if self._items.GetSelection() == -1:
883
+ self._items.SetSelection(0)
884
+
885
+ oldSel = self._items.GetSelection()
886
+
887
+ while 1:
888
+
889
+ if self._items.GetItem(self._items.GetSelection()).GetIsGroup():
890
+
891
+ self._items.SetSelection(self._items.GetSelection() + direction)
892
+ if self._items.GetSelection() == -1:
893
+ self._items.SetSelection(self._items.GetItemCount()-1)
894
+ elif self._items.GetSelection() == self._items.GetItemCount():
895
+ self._items.SetSelection(0)
896
+ if self._items.GetSelection() == oldSel:
897
+ break
898
+
899
+ else:
900
+ break
901
+
902
+ self.SetTransparency()
903
+ selection = self._items.GetItem(self._items.GetSelection()).GetWindow()
904
+ pane = self._aui_manager.GetPane(selection)
905
+
906
+ if not pane.IsOk():
907
+ if isinstance(selection.GetParent(), auibook.AuiNotebook):
908
+ self.SetTransparency(selection)
909
+ self._aui_manager.ShowHint(selection.GetScreenRect())
910
+ wx.CallAfter(self.SetFocus)
911
+ self.SetFocus()
912
+ return
913
+ else:
914
+ self._aui_manager.HideHint()
915
+ return
916
+ if not pane.IsShown():
917
+ self._aui_manager.HideHint()
918
+ return
919
+
920
+ self.SetTransparency(selection)
921
+ self._aui_manager.ShowHint(selection.GetScreenRect())
922
+ # NOTE: this is odd but it is the only way for the focus to
923
+ # work correctly on wxMac...
924
+ wx.CallAfter(self.SetFocus)
925
+ self.SetFocus()
926
+
927
+
928
+ def SetTransparency(self, selection=None):
929
+
930
+ if not self.GetParent().CanSetTransparent():
931
+ return
932
+
933
+ if selection is not None:
934
+ intersects = False
935
+ if selection.GetScreenRect().Intersects(self.GetParent().GetScreenRect()):
936
+ intersects = True
937
+ self.GetParent().SetTransparent(200)
938
+ return
939
+
940
+ self.GetParent().SetTransparent(255)
941
+
942
+
943
+ def GenerateSelectionEvent(self):
944
+
945
+ event = wx.CommandEvent(wx.wxEVT_COMMAND_LISTBOX_SELECTED, self.GetId())
946
+ event.SetEventObject(self)
947
+ event.SetInt(self._items.GetSelection())
948
+ self.GetEventHandler().ProcessEvent(event)
949
+
950
+
951
+ def CalculateLayout(self, dc=None):
952
+
953
+ if dc is None:
954
+ dc = wx.ClientDC(self)
955
+
956
+ if self._items.GetSelection() == -1:
957
+ self._items.SetSelection(0)
958
+
959
+ columnCount = 1
960
+
961
+ # Spacing between edge of window or between columns
962
+ xMargin = 4
963
+ yMargin = 4
964
+
965
+ # Inter-row spacing
966
+ rowSpacing = 2
967
+
968
+ itemSize = self._items.CalculateItemSize(dc)
969
+ self._overallSize = wx.Size(350, 200)
970
+
971
+ currentRow = 0
972
+ x = xMargin
973
+ y = yMargin
974
+
975
+ breaking = False
976
+ i = 0
977
+
978
+ while 1:
979
+
980
+ oldOverallSize = self._overallSize
981
+ item = self._items.GetItem(i)
982
+
983
+ item.SetRect(wx.Rect(x, y, itemSize.x, itemSize.y))
984
+ item.SetColPos(columnCount-1)
985
+ item.SetRowPos(currentRow)
986
+
987
+ if item.GetRect().GetBottom() > self._overallSize.y:
988
+ self._overallSize.y = item.GetRect().GetBottom() + yMargin
989
+
990
+ if item.GetRect().GetRight() > self._overallSize.x:
991
+ self._overallSize.x = item.GetRect().GetRight() + xMargin
992
+
993
+ currentRow += 1
994
+
995
+ y += rowSpacing + itemSize.y
996
+ stopBreaking = breaking
997
+
998
+ if currentRow > self._items.GetRowCount() or (item.GetBreakColumn() and not breaking and currentRow != 1):
999
+ currentRow = 0
1000
+ columnCount += 1
1001
+ x += xMargin + itemSize.x
1002
+ y = yMargin
1003
+
1004
+ # Make sure we don't orphan a group
1005
+ if item.GetIsGroup() or (item.GetBreakColumn() and not breaking):
1006
+ self._overallSize = oldOverallSize
1007
+
1008
+ if item.GetBreakColumn():
1009
+ breaking = True
1010
+
1011
+ # Repeat the last item, in the next column
1012
+ i -= 1
1013
+
1014
+ if stopBreaking:
1015
+ breaking = False
1016
+
1017
+ i += 1
1018
+
1019
+ if i >= self._items.GetItemCount():
1020
+ break
1021
+
1022
+ self._items.SetColumnCount(columnCount)
1023
+ self.InvalidateBestSize()
1024
+
1025
+
1026
+ def SetItems(self, items):
1027
+
1028
+ self._items = items
1029
+
1030
+
1031
+ def GetItems(self):
1032
+
1033
+ return self._items
1034
+
1035
+
1036
+ def SetExtraNavigationKey(self, keyCode):
1037
+ """
1038
+ Set an extra key that can be used to cycle through items,
1039
+ in case not using the ``Ctrl`` + ``Tab`` combination.
1040
+ """
1041
+
1042
+ self._extraNavigationKey = keyCode
1043
+
1044
+
1045
+ def GetExtraNavigationKey(self):
1046
+
1047
+ return self._extraNavigationKey
1048
+
1049
+
1050
+ def SetModifierKey(self, modifierKey):
1051
+ """
1052
+ Set the modifier used to invoke the dialog, and therefore to test for release.
1053
+ """
1054
+
1055
+ self._modifierKey = modifierKey
1056
+
1057
+
1058
+ def GetModifierKey(self):
1059
+
1060
+ return self._modifierKey
1061
+
1062
+
1063
+
1064
+ class SwitcherDialog(wx.Dialog):
1065
+ """
1066
+ SwitcherDialog shows a :class:`Dialog` with a list of panes and tabs for the user to choose.
1067
+ ``Ctrl`` + ``Tab`` cycles through them.
1068
+ """
1069
+
1070
+ def __init__(self, items, parent, aui_manager, id=wx.ID_ANY, title=_("Pane Switcher"), pos=wx.DefaultPosition,
1071
+ size=wx.DefaultSize, style=wx.STAY_ON_TOP|wx.DIALOG_NO_PARENT|wx.BORDER_SIMPLE):
1072
+ """ Default class constructor. """
1073
+
1074
+ self._switcherBorderStyle = (style & wx.BORDER_MASK)
1075
+ if self._switcherBorderStyle == wx.BORDER_NONE:
1076
+ self._switcherBorderStyle = wx.BORDER_SIMPLE
1077
+
1078
+ style &= wx.BORDER_MASK
1079
+ style |= wx.BORDER_NONE
1080
+
1081
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
1082
+
1083
+ self._listCtrl = MultiColumnListCtrl(self, aui_manager,
1084
+ style=wx.WANTS_CHARS|wx.NO_BORDER)
1085
+ self._listCtrl.SetItems(items)
1086
+ self._listCtrl.CalculateLayout()
1087
+
1088
+ self._descriptionCtrl = wx.html.HtmlWindow(self, size=(-1, 100), style=wx.BORDER_NONE)
1089
+ self._descriptionCtrl.SetBackgroundColour(self.GetBackgroundColour())
1090
+
1091
+ if wx.Platform == "__WXGTK__":
1092
+ fontSize = 11
1093
+ self._descriptionCtrl.SetStandardFonts(fontSize)
1094
+
1095
+ sizer = wx.BoxSizer(wx.VERTICAL)
1096
+ self.SetSizer(sizer)
1097
+ sizer.Add(self._listCtrl, 1, wx.ALL|wx.EXPAND, 10)
1098
+ sizer.Add(self._descriptionCtrl, 0, wx.ALL|wx.EXPAND, 10)
1099
+ sizer.SetSizeHints(self)
1100
+
1101
+ self._listCtrl.SetFocus()
1102
+
1103
+ self.Centre(wx.BOTH)
1104
+
1105
+ if self._listCtrl.GetItems().GetSelection() == -1:
1106
+ self._listCtrl.GetItems().SetSelection(0)
1107
+
1108
+ self._listCtrl.AdvanceToNextSelectableItem(1)
1109
+
1110
+ self.ShowDescription(self._listCtrl.GetItems().GetSelection())
1111
+
1112
+ self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
1113
+ self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
1114
+ self.Bind(wx.EVT_LISTBOX, self.OnSelectItem)
1115
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
1116
+
1117
+ # Attributes
1118
+ self._closing = False
1119
+ if wx.Platform == "__WXMSW__":
1120
+ self._borderColour = wx.Colour(49, 106, 197)
1121
+ else:
1122
+ self._borderColour = wx.BLACK
1123
+
1124
+ self._aui_manager = aui_manager
1125
+
1126
+
1127
+ def OnCloseWindow(self, event):
1128
+
1129
+ if self._closing:
1130
+ return
1131
+
1132
+ if self.IsModal():
1133
+ self._closing = True
1134
+
1135
+ if self.GetSelection() == -1:
1136
+ self.EndModal(wx.ID_CANCEL)
1137
+ else:
1138
+ self.EndModal(wx.ID_OK)
1139
+
1140
+ self._aui_manager.HideHint()
1141
+
1142
+
1143
+ def GetSelection(self):
1144
+
1145
+ return self._listCtrl.GetItems().GetSelection()
1146
+
1147
+
1148
+ def OnActivate(self, event):
1149
+
1150
+ if not event.GetActive():
1151
+ if not self._closing:
1152
+ self._closing = True
1153
+ self.EndModal(wx.ID_CANCEL)
1154
+
1155
+
1156
+ def OnPaint(self, event):
1157
+
1158
+ dc = wx.PaintDC(self)
1159
+
1160
+ if self._switcherBorderStyle == wx.BORDER_SIMPLE:
1161
+
1162
+ dc.SetPen(wx.Pen(self._borderColour))
1163
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
1164
+
1165
+ rect = self.GetClientRect()
1166
+ dc.DrawRectangle(rect)
1167
+
1168
+ # Draw border around the HTML control
1169
+ rect = wx.Rect(*self._descriptionCtrl.GetRect())
1170
+ rect.Inflate(1, 1)
1171
+ dc.DrawRectangle(rect)
1172
+
1173
+
1174
+ def OnSelectItem(self, event):
1175
+
1176
+ self.ShowDescription(event.GetSelection())
1177
+
1178
+
1179
+ # Convert a colour to a 6-digit hex string
1180
+ def ColourToHexString(self, col):
1181
+
1182
+ hx = '%02x%02x%02x%02x' % tuple([int(c) for c in col])
1183
+ return hx
1184
+
1185
+
1186
+ def ShowDescription(self, i):
1187
+
1188
+ item = self._listCtrl.GetItems().GetItem(i)
1189
+ colour = self._listCtrl.GetItems().GetBackgroundColour()
1190
+
1191
+ if not colour.IsOk():
1192
+ colour = self.GetBackgroundColour()
1193
+
1194
+ backgroundColourHex = self.ColourToHexString(colour)
1195
+ html = _("<body bgcolor=\"#") + backgroundColourHex + _("\"><b>") + item.GetTitle() + _("</b>")
1196
+
1197
+ if item.GetDescription():
1198
+ html += _("<p>")
1199
+ html += item.GetDescription()
1200
+
1201
+ html += _("</body>")
1202
+ self._descriptionCtrl.SetPage(html)
1203
+
1204
+
1205
+ def SetExtraNavigationKey(self, keyCode):
1206
+
1207
+ self._extraNavigationKey = keyCode
1208
+ if self._listCtrl:
1209
+ self._listCtrl.SetExtraNavigationKey(keyCode)
1210
+
1211
+
1212
+ def GetExtraNavigationKey(self):
1213
+
1214
+ return self._extraNavigationKey
1215
+
1216
+
1217
+ def SetModifierKey(self, modifierKey):
1218
+
1219
+ self._modifierKey = modifierKey
1220
+ if self._listCtrl:
1221
+ self._listCtrl.SetModifierKey(modifierKey)
1222
+
1223
+
1224
+ def GetModifierKey(self):
1225
+
1226
+ return self._modifierKey
1227
+
1228
+
1229
+ def SetBorderColour(self, colour):
1230
+
1231
+ self._borderColour = colour
1232
+