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,396 @@
1
+ #----------------------------------------------------------------------------
2
+ # Name: GUIMode.py
3
+ # Purpose:
4
+ #
5
+ # Author:
6
+ #
7
+ # Created:
8
+ # Version:
9
+ # Date:
10
+ # Licence:
11
+ # Tags: phoenix-port
12
+ #----------------------------------------------------------------------------
13
+ """
14
+
15
+ Module that holds the GUI modes used by FloatCanvas
16
+
17
+ Note that this can only be imported after a wx.App() has been created.
18
+
19
+ This approach was inspired by Christian Blouin, who also wrote the initial
20
+ version of the code.
21
+
22
+ """
23
+
24
+ import wx
25
+ import numpy as np
26
+
27
+ from . import FCEvents, Resources
28
+ from .Utilities import BBox
29
+
30
+
31
+ class Cursors(object):
32
+ """
33
+ Class to hold the standard Cursors
34
+
35
+ """
36
+ def __init__(self):
37
+ if "wxMac" in wx.PlatformInfo: # use 16X16 cursors for wxMac
38
+ self.HandCursor = wx.Cursor(Resources.getHand16Image())
39
+ self.GrabHandCursor = wx.Cursor(Resources.getGrabHand16Image())
40
+
41
+ img = Resources.getMagPlus16Image()
42
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_X, 6)
43
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_Y, 6)
44
+ self.MagPlusCursor = wx.Cursor(img)
45
+
46
+ img = Resources.getMagMinus16Image()
47
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_X, 6)
48
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_Y, 6)
49
+ self.MagMinusCursor = wx.Cursor(img)
50
+ else: # use 24X24 cursors for GTK and Windows
51
+ self.HandCursor = wx.Cursor(Resources.getHandImage())
52
+ self.GrabHandCursor = wx.Cursor(Resources.getGrabHandImage())
53
+
54
+ img = Resources.getMagPlusImage()
55
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_X, 9)
56
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_Y, 9)
57
+ self.MagPlusCursor = wx.Cursor(img)
58
+
59
+ img = Resources.getMagMinusImage()
60
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_X, 9)
61
+ img.SetOption(wx.IMAGE_OPTION_CUR_HOTSPOT_Y, 9)
62
+ self.MagMinusCursor = wx.Cursor(img)
63
+
64
+
65
+ class GUIBase(object):
66
+ """
67
+ Basic Mouse mode and baseclass for other GUImode.
68
+
69
+ This one does nothing with any event
70
+
71
+ """
72
+ def __init__(self, Canvas=None):
73
+ """
74
+ Default class constructor.
75
+
76
+ :param `Canvas`: the canvas the GUI mode is attached too
77
+
78
+ """
79
+ self.Canvas = Canvas # set the FloatCanvas for the mode
80
+ # it gets set when the Mode is set on the Canvas.
81
+ self.Cursors = Cursors()
82
+
83
+ Cursor = wx.NullCursor
84
+ def UnSet(self):
85
+ """
86
+ this method gets called by FloatCanvas when a new mode is being set
87
+ on the Canvas
88
+ """
89
+ pass
90
+ # Handlers
91
+ def OnLeftDown(self, event):
92
+ pass
93
+ def OnLeftUp(self, event):
94
+ pass
95
+ def OnLeftDouble(self, event):
96
+ pass
97
+ def OnRightDown(self, event):
98
+ pass
99
+ def OnRightUp(self, event):
100
+ pass
101
+ def OnRightDouble(self, event):
102
+ pass
103
+ def OnMiddleDown(self, event):
104
+ pass
105
+ def OnMiddleUp(self, event):
106
+ pass
107
+ def OnMiddleDouble(self, event):
108
+ pass
109
+ def OnWheel(self, event):
110
+ pass
111
+ def OnMove(self, event):
112
+ pass
113
+ def OnKeyDown(self, event):
114
+ pass
115
+ def OnKeyUp(self, event):
116
+ pass
117
+ def UpdateScreen(self):
118
+ """
119
+ Update gets called if the screen has been repainted in the middle of a zoom in
120
+ so the Rubber Band Box can get updated. Other GUIModes may require something similar
121
+ """
122
+ pass
123
+
124
+
125
+ ## some mix-ins for use with the other modes:
126
+ class ZoomWithMouseWheel():
127
+ def OnWheel(self, event):
128
+ point = event.Position
129
+ if event.GetWheelRotation() < 0:
130
+ self.Canvas.Zoom(0.9, point, centerCoords = "Pixel", keepPointInPlace=True)
131
+ else:
132
+ self.Canvas.Zoom(1.1, point, centerCoords = "Pixel", keepPointInPlace=True)
133
+
134
+
135
+ class GUIMouse(GUIBase):
136
+ """
137
+
138
+ Mouse mode checks for a hit test, and if nothing is hit,
139
+ raises a FloatCanvas mouse event for each event.
140
+
141
+ """
142
+
143
+ Cursor = wx.NullCursor
144
+
145
+ # Handlers
146
+ def OnLeftDown(self, event):
147
+ EventType = FCEvents.EVT_FC_LEFT_DOWN
148
+ if not self.Canvas.HitTest(event, EventType):
149
+ self.Canvas._RaiseMouseEvent(event, EventType)
150
+
151
+ def OnLeftUp(self, event):
152
+ EventType = FCEvents.EVT_FC_LEFT_UP
153
+ if not self.Canvas.HitTest(event, EventType):
154
+ self.Canvas._RaiseMouseEvent(event, EventType)
155
+
156
+ def OnLeftDouble(self, event):
157
+ EventType = FCEvents.EVT_FC_LEFT_DCLICK
158
+ if not self.Canvas.HitTest(event, EventType):
159
+ self.Canvas._RaiseMouseEvent(event, EventType)
160
+
161
+ def OnMiddleDown(self, event):
162
+ EventType = FCEvents.EVT_FC_MIDDLE_DOWN
163
+ if not self.Canvas.HitTest(event, EventType):
164
+ self.Canvas._RaiseMouseEvent(event, EventType)
165
+
166
+ def OnMiddleUp(self, event):
167
+ EventType = FCEvents.EVT_FC_MIDDLE_UP
168
+ if not self.Canvas.HitTest(event, EventType):
169
+ self.Canvas._RaiseMouseEvent(event, EventType)
170
+
171
+ def OnMiddleDouble(self, event):
172
+ EventType = FCEvents.EVT_FC_MIDDLE_DCLICK
173
+ if not self.Canvas.HitTest(event, EventType):
174
+ self.Canvas._RaiseMouseEvent(event, EventType)
175
+
176
+ def OnRightDown(self, event):
177
+ EventType = FCEvents.EVT_FC_RIGHT_DOWN
178
+ if not self.Canvas.HitTest(event, EventType):
179
+ self.Canvas._RaiseMouseEvent(event, EventType)
180
+
181
+ def OnRightUp(self, event):
182
+ EventType = FCEvents.EVT_FC_RIGHT_UP
183
+ if not self.Canvas.HitTest(event, EventType):
184
+ self.Canvas._RaiseMouseEvent(event, EventType)
185
+
186
+ def OnRightDouble(self, event):
187
+ EventType = FCEvents.EVT_FC_RIGHT_DCLICK
188
+ if not self.Canvas.HitTest(event, EventType):
189
+ self.Canvas._RaiseMouseEvent(event, EventType)
190
+
191
+ def OnWheel(self, event):
192
+ EventType = FCEvents.EVT_FC_MOUSEWHEEL
193
+ self.Canvas._RaiseMouseEvent(event, EventType)
194
+
195
+ def OnMove(self, event):
196
+ ## The Move event always gets raised, even if there is a hit-test
197
+ EventType = FCEvents.EVT_FC_MOTION
198
+ # process the object hit test for EVT_MOTION bindings
199
+ self.Canvas.HitTest(event, EventType)
200
+ # process enter and leave events
201
+ self.Canvas.MouseOverTest(event)
202
+ # then raise the event on the canvas
203
+ self.Canvas._RaiseMouseEvent(event, EventType)
204
+
205
+
206
+ class GUIMove(ZoomWithMouseWheel, GUIBase):
207
+ """
208
+ Mode that moves the image (pans).
209
+ It doesn't change any coordinates, it only changes what the viewport is
210
+ """
211
+ def __init__(self, canvas=None):
212
+ GUIBase.__init__(self, canvas)
213
+ self.Cursor = self.Cursors.HandCursor
214
+ self.GrabCursor = self.Cursors.GrabHandCursor
215
+ self.StartMove = None
216
+ self.MidMove = None
217
+ self.PrevMoveXY = None
218
+
219
+ ## timer to give a delay when moving so that buffers aren't re-built too many times.
220
+ self.MoveTimer = wx.PyTimer(self.OnMoveTimer)
221
+
222
+ def OnLeftDown(self, event):
223
+ self.Canvas.SetCursor(self.GrabCursor)
224
+ self.Canvas.CaptureMouse()
225
+ self.StartMove = np.array( event.GetPosition() )
226
+ self.MidMove = self.StartMove
227
+ self.PrevMoveXY = (0,0)
228
+
229
+ def OnLeftUp(self, event):
230
+ self.Canvas.SetCursor(self.Cursor)
231
+ if self.StartMove is not None:
232
+ self.EndMove = np.array(event.GetPosition())
233
+ DiffMove = self.MidMove-self.EndMove
234
+ self.Canvas.MoveImage(DiffMove, 'Pixel', ReDraw=True)
235
+
236
+ def OnMove(self, event):
237
+ # Always raise the Move event.
238
+ self.Canvas._RaiseMouseEvent(event, FCEvents.EVT_FC_MOTION)
239
+ if event.Dragging() and event.LeftIsDown() and not self.StartMove is None:
240
+ self.EndMove = np.array(event.GetPosition())
241
+ self.MoveImage(event)
242
+ DiffMove = self.MidMove-self.EndMove
243
+ self.Canvas.MoveImage(DiffMove, 'Pixel', ReDraw=False)# reset the canvas without re-drawing
244
+ self.MidMove = self.EndMove
245
+ self.MoveTimer.Start(30, oneShot=True)
246
+
247
+ def OnMoveTimer(self, event=None):
248
+ self.Canvas.Draw()
249
+
250
+ def UpdateScreen(self):
251
+ ## The screen has been re-drawn, so StartMove needs to be reset.
252
+ self.StartMove = self.MidMove
253
+
254
+ def MoveImage(self, event ):
255
+ #xy1 = N.array( event.GetPosition() )
256
+ xy1 = self.EndMove
257
+ wh = self.Canvas.PanelSize
258
+ xy_tl = xy1 - self.StartMove
259
+ dc = wx.ClientDC(self.Canvas)
260
+ x1,y1 = self.PrevMoveXY
261
+ x2,y2 = xy_tl
262
+ w,h = self.Canvas.PanelSize
263
+ ##fixme: This sure could be cleaner!
264
+ ## This is all to fill in the background with the background color
265
+ ## without flashing as the image moves.
266
+ if x2 > x1 and y2 > y1:
267
+ xa = xb = x1
268
+ ya = yb = y1
269
+ wa = w
270
+ ha = y2 - y1
271
+ wb = x2- x1
272
+ hb = h
273
+ elif x2 > x1 and y2 <= y1:
274
+ xa = x1
275
+ ya = y1
276
+ wa = x2 - x1
277
+ ha = h
278
+ xb = x1
279
+ yb = y2 + h
280
+ wb = w
281
+ hb = y1 - y2
282
+ elif x2 <= x1 and y2 > y1:
283
+ xa = x1
284
+ ya = y1
285
+ wa = w
286
+ ha = y2 - y1
287
+ xb = x2 + w
288
+ yb = y1
289
+ wb = x1 - x2
290
+ hb = h - y2 + y1
291
+ elif x2 <= x1 and y2 <= y1:
292
+ xa = x2 + w
293
+ ya = y1
294
+ wa = x1 - x2
295
+ ha = h
296
+ xb = x1
297
+ yb = y2 + h
298
+ wb = w
299
+ hb = y1 - y2
300
+
301
+ dc.SetPen(wx.TRANSPARENT_PEN)
302
+ dc.SetBrush(self.Canvas.BackgroundBrush)
303
+ dc.DrawRectangle(xa, ya, wa, ha)
304
+ dc.DrawRectangle(xb, yb, wb, hb)
305
+ self.PrevMoveXY = xy_tl
306
+ if self.Canvas._ForeDrawList:
307
+ dc.DrawBitmap(self.Canvas._ForegroundBuffer,xy_tl)
308
+ else:
309
+ dc.DrawBitmap(self.Canvas._Buffer,xy_tl)
310
+ #self.Canvas.Update()
311
+
312
+
313
+ class GUIZoomIn(ZoomWithMouseWheel, GUIBase):
314
+ """
315
+ Mode to zoom in.
316
+ """
317
+ def __init__(self, canvas=None):
318
+ GUIBase.__init__(self, canvas)
319
+ self.StartRBBox = None
320
+ self.PrevRBBox = None
321
+ self.Cursor = self.Cursors.MagPlusCursor
322
+
323
+ def OnLeftDown(self, event):
324
+ self.StartRBBox = np.array( event.GetPosition() )
325
+ self.PrevRBBox = None
326
+ self.Canvas.CaptureMouse()
327
+
328
+ def OnLeftUp(self, event):
329
+ if event.LeftUp() and not self.StartRBBox is None:
330
+ self.PrevRBBox = None
331
+ EndRBBox = event.GetPosition()
332
+ StartRBBox = self.StartRBBox
333
+ # if mouse has moved less that ten pixels, don't use the box.
334
+ if ( abs(StartRBBox[0] - EndRBBox[0]) > 10
335
+ and abs(StartRBBox[1] - EndRBBox[1]) > 10 ):
336
+ EndRBBox = self.Canvas.PixelToWorld(EndRBBox)
337
+ StartRBBox = self.Canvas.PixelToWorld(StartRBBox)
338
+ self.Canvas.ZoomToBB( BBox.fromPoints(np.r_[EndRBBox,StartRBBox]) )
339
+ else:
340
+ Center = self.Canvas.PixelToWorld(StartRBBox)
341
+ self.Canvas.Zoom(1.5,Center)
342
+ self.StartRBBox = None
343
+
344
+ def OnMove(self, event):
345
+ # Always raise the Move event.
346
+ self.Canvas._RaiseMouseEvent(event,FCEvents.EVT_FC_MOTION)
347
+ if event.Dragging() and event.LeftIsDown() and not (self.StartRBBox is None):
348
+ xy0 = self.StartRBBox
349
+ xy1 = np.array( event.GetPosition() )
350
+ wh = abs(xy1 - xy0)
351
+ wh[0] = max(wh[0], int(wh[1]*self.Canvas.AspectRatio))
352
+ wh[1] = int(wh[0] / self.Canvas.AspectRatio)
353
+ xy_c = (xy0 + xy1) / 2
354
+ dc = wx.ClientDC(self.Canvas)
355
+ dc.SetPen(wx.Pen('WHITE', 2, wx.SHORT_DASH))
356
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
357
+ dc.SetLogicalFunction(wx.XOR)
358
+ if self.PrevRBBox:
359
+ dc.DrawRectangle(*self.PrevRBBox)
360
+ self.PrevRBBox = ( xy_c - wh/2, wh )
361
+ dc.DrawRectangle( *self.PrevRBBox )
362
+
363
+ def UpdateScreen(self):
364
+ """
365
+ Update gets called if the screen has been repainted in the middle of a zoom in
366
+ so the Rubber Band Box can get updated
367
+ """
368
+ #if False:
369
+ if self.PrevRBBox is not None:
370
+ dc = wx.ClientDC(self.Canvas)
371
+ dc.SetPen(wx.Pen('WHITE', 2, wx.SHORT_DASH))
372
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
373
+ dc.SetLogicalFunction(wx.XOR)
374
+ dc.DrawRectangle(*self.PrevRBBox)
375
+
376
+ def OnRightDown(self, event):
377
+ self.Canvas.Zoom(1/1.5, event.GetPosition(), centerCoords="Pixel")
378
+
379
+
380
+ class GUIZoomOut(ZoomWithMouseWheel, GUIBase):
381
+ """
382
+ Mode to zoom out.
383
+ """
384
+ def __init__(self, Canvas=None):
385
+ GUIBase.__init__(self, Canvas)
386
+ self.Cursor = self.Cursors.MagMinusCursor
387
+
388
+ def OnLeftDown(self, event):
389
+ self.Canvas.Zoom(1/1.5, event.GetPosition(), centerCoords="Pixel")
390
+
391
+ def OnRightDown(self, event):
392
+ self.Canvas.Zoom(1.5, event.GetPosition(), centerCoords="Pixel")
393
+
394
+ def OnMove(self, event):
395
+ # Always raise the Move event.
396
+ self.Canvas._RaiseMouseEvent(event,FCEvents.EVT_FC_MOTION)
@@ -0,0 +1,162 @@
1
+ #----------------------------------------------------------------------------
2
+ # Name: NavCanvas.py
3
+ # Purpose: Combines FloatCanvas with Navigation controls
4
+ #
5
+ # Author:
6
+ #
7
+ # Created:
8
+ # Version:
9
+ # Date:
10
+ # Licence:
11
+ # Tags: phoenix-port, unittest, documented, py3-port
12
+ #----------------------------------------------------------------------------
13
+ """
14
+ Combines :class:`~lib.floatcanvas.FloatCanvas.FloatCanvas` with Navigation
15
+ controls onto a :class:`Panel`
16
+
17
+
18
+ In the following very simple sample ``self`` is a frame, but it could be another
19
+ container type control::
20
+
21
+ from wx.lib.floatcanvas import NavCanvas, FloatCanvas
22
+
23
+ #Add the Canvas
24
+ self.Canvas = NavCanvas.NavCanvas(self, -1,
25
+ size=(500, 500),
26
+ ProjectionFun=None,
27
+ Debug=0,
28
+ BackgroundColor="White",
29
+ ).Canvas
30
+
31
+ # add a circle
32
+ cir = FloatCanvas.Circle((10, 10), 100)
33
+ self.Canvas.AddObject(cir)
34
+
35
+ # add a rectangle
36
+ rect = FloatCanvas.Rectangle((110, 10), (100, 100), FillColor='Red')
37
+ self.Canvas.AddObject(rect)
38
+
39
+ self.Canvas.Draw()
40
+
41
+
42
+ Many samples are available in the `wxPhoenix/samples/floatcanvas` folder.
43
+
44
+
45
+ """
46
+
47
+ import wx
48
+ from . import FloatCanvas, Resources, GUIMode
49
+
50
+ class NavCanvas(wx.Panel):
51
+ """
52
+ :class:`~lib.floatcanvas.NavCanvas.NavCanvas` encloses a
53
+ :class:`~lib.floatcanvas.FloatCanvas.FloatCanvas` in a :class:`Panel` and
54
+ adds a Navigation toolbar.
55
+
56
+ """
57
+
58
+ def __init__(self,
59
+ parent,
60
+ id = wx.ID_ANY,
61
+ size = wx.DefaultSize,
62
+ **kwargs):
63
+ """
64
+ Default class constructor.
65
+
66
+ :param wx.Window `parent`: parent window. Must not be ``None``;
67
+ :param integer `id`: window identifier. A value of -1 indicates a default value;
68
+ :param `size`: a tuple or :class:`wx.Size`
69
+ :param `**kwargs`: will be passed on to :class:`~lib.floatcanvas.FloatCanvas.FloatCanvas`
70
+ """
71
+ wx.Panel.__init__(self, parent, id, size=size)
72
+
73
+ self.Modes = [("Pointer", GUIMode.GUIMouse(), Resources.getPointerBitmap()),
74
+ ("Zoom In", GUIMode.GUIZoomIn(), Resources.getMagPlusBitmap()),
75
+ ("Zoom Out", GUIMode.GUIZoomOut(), Resources.getMagMinusBitmap()),
76
+ ("Pan", GUIMode.GUIMove(), Resources.getHandBitmap()),
77
+ ]
78
+
79
+ self.BuildToolbar()
80
+ ## Create the vertical sizer for the toolbar and Panel
81
+ box = wx.BoxSizer(wx.VERTICAL)
82
+ box.Add(self.ToolBar, 0, wx.ALL | wx.ALIGN_LEFT | wx.GROW, 4)
83
+
84
+ self.Canvas = FloatCanvas.FloatCanvas(self, **kwargs)
85
+ box.Add(self.Canvas, 1, wx.GROW)
86
+
87
+ self.SetSizerAndFit(box)
88
+
89
+ # default to first mode
90
+ #self.ToolBar.ToggleTool(self.PointerTool.GetId(), True)
91
+ self.Canvas.SetMode(self.Modes[0][1])
92
+
93
+ return None
94
+
95
+ def BuildToolbar(self):
96
+ """
97
+ Build the default tool bar, can be over-ridden in a subclass to add
98
+ extra tools etc.
99
+ """
100
+ tb = wx.ToolBar(self)
101
+ self.ToolBar = tb
102
+ tb.SetToolBitmapSize((24,24))
103
+ self.AddToolbarModeButtons(tb, self.Modes)
104
+ self.AddToolbarZoomButton(tb)
105
+ tb.Realize()
106
+ ## fixme: remove this when the bug is fixed!
107
+ #wx.CallAfter(self.HideShowHack) # this required on wxPython 2.8.3 on OS-X
108
+
109
+ def AddToolbarModeButtons(self, tb, Modes):
110
+ """
111
+ Add the mode buttons to the tool bar.
112
+
113
+ :param ToolBar `tb`: the toolbar instance
114
+ :param list `Modes`: a list of modes to add, out of the box valid modes
115
+ are subclassed from :class:`~lib.floatcanvas.GUIMode.GUIBase` or modes
116
+ can also be user defined.
117
+
118
+ """
119
+ self.ModesDict = {}
120
+ for Mode in Modes:
121
+ tool = tb.AddTool(wx.ID_ANY, label=Mode[0],
122
+ shortHelp=Mode[0],
123
+ bitmap=wx.BitmapBundle(Mode[2]),
124
+ kind=wx.ITEM_RADIO)
125
+ self.Bind(wx.EVT_TOOL, self.SetMode, tool)
126
+ self.ModesDict[tool.GetId()]=Mode[1]
127
+ #self.ZoomOutTool = tb.AddRadioTool(wx.ID_ANY, bitmap=Resources.getMagMinusBitmap(), shortHelp = "Zoom Out")
128
+ #self.Bind(wx.EVT_TOOL, lambda evt : self.SetMode(Mode=self.GUIZoomOut), self.ZoomOutTool)
129
+
130
+ def AddToolbarZoomButton(self, tb):
131
+ """
132
+ Add the zoom button to the tool bar.
133
+
134
+ :param ToolBar `tb`: the toolbar instance
135
+
136
+ """
137
+ tb.AddSeparator()
138
+
139
+ self.ZoomButton = wx.Button(tb, label="Zoom To Fit")
140
+ tb.AddControl(self.ZoomButton)
141
+ self.ZoomButton.Bind(wx.EVT_BUTTON, self.ZoomToFit)
142
+
143
+
144
+ def HideShowHack(self):
145
+ ##fixme: remove this when the bug is fixed!
146
+ """
147
+ Hack to hide and show button on toolbar to get around OS-X bug on
148
+ wxPython2.8 on OS-X
149
+ """
150
+ self.ZoomButton.Hide()
151
+ self.ZoomButton.Show()
152
+
153
+ def SetMode(self, event):
154
+ """Event handler to set the mode."""
155
+ Mode = self.ModesDict[event.GetId()]
156
+ self.Canvas.SetMode(Mode)
157
+
158
+ def ZoomToFit(self, event):
159
+ """Event handler to zoom to fit."""
160
+ self.Canvas.ZoomToBB()
161
+ self.Canvas.SetFocus() # Otherwise the focus stays on the Button, and wheel events are lost.
162
+