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
wx/lib/multisash.py ADDED
@@ -0,0 +1,746 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: multisash
3
+ # Purpose: Multi Sash control
4
+ #
5
+ # Author: Gerrit van Dyk
6
+ #
7
+ # Created: 2002/11/20
8
+ # Version: 0.1
9
+ # License: wxWindows license
10
+ #----------------------------------------------------------------------
11
+ # 12/09/2003 - Jeff Grimmett (grimmtooth@softhome.net)
12
+ #
13
+ # o 2.5 compatibility update.
14
+ #
15
+ # 12/20/2003 - Jeff Grimmett (grimmtooth@softhome.net)
16
+ #
17
+ # o wxMultiSash -> MultiSash
18
+ # o wxMultiSplit -> MultiSplit
19
+ # o wxMultiViewLeaf -> MultiViewLeaf
20
+ #
21
+
22
+ import wx
23
+
24
+ MV_HOR = 0
25
+ MV_VER = not MV_HOR
26
+
27
+ SH_SIZE = 5
28
+ CR_SIZE = SH_SIZE * 3
29
+
30
+ #----------------------------------------------------------------------
31
+
32
+ class MultiSash(wx.Window):
33
+ def __init__(self, *_args,**_kwargs):
34
+ wx.Window.__init__(self, *_args, **_kwargs)
35
+ self._defChild = EmptyChild
36
+ self.child = MultiSplit(self,self,(0,0),self.GetSize())
37
+ self.Bind(wx.EVT_SIZE,self.OnMultiSize)
38
+
39
+ def SetDefaultChildClass(self,childCls):
40
+ self._defChild = childCls
41
+ self.child.DefaultChildChanged()
42
+
43
+ def OnMultiSize(self,evt):
44
+ self.child.SetSize(self.GetSize())
45
+
46
+ def UnSelect(self):
47
+ self.child.UnSelect()
48
+
49
+ def Clear(self):
50
+ old = self.child
51
+ self.child = MultiSplit(self,self,(0,0),self.GetSize())
52
+ old.Destroy()
53
+ self.child.OnSize(None)
54
+
55
+ def GetSaveData(self):
56
+ saveData = {}
57
+ saveData['_defChild_class'] = self._defChild.__name__
58
+ saveData['_defChild_mod'] = self._defChild.__module__
59
+ saveData['child'] = self.child.GetSaveData()
60
+ return saveData
61
+
62
+ def SetSaveData(self,data):
63
+ mod = data['_defChild_mod']
64
+ dChild = mod + '.' + data['_defChild_class']
65
+ exec('import %s' % mod)
66
+ self._defChild = eval(dChild)
67
+ old = self.child
68
+ self.child = MultiSplit(self,self,wx.Point(0,0),self.GetSize())
69
+ self.child.SetSaveData(data['child'])
70
+ old.Destroy()
71
+ self.OnMultiSize(None)
72
+ self.child.OnSize(None)
73
+
74
+
75
+ #----------------------------------------------------------------------
76
+
77
+
78
+ class MultiSplit(wx.Window):
79
+ def __init__(self,multiView,parent,pos,size,view1 = None):
80
+ wx.Window.__init__(self,id = -1,parent = parent,pos = pos,size = size,
81
+ style = wx.CLIP_CHILDREN)
82
+ self.multiView = multiView
83
+ self.view2 = None
84
+ if view1:
85
+ self.view1 = view1
86
+ self.view1.Reparent(self)
87
+ self.view1.Move(0,0)
88
+ else:
89
+ self.view1 = MultiViewLeaf(self.multiView,self,
90
+ (0,0),self.GetSize())
91
+ self.direction = None
92
+
93
+ self.Bind(wx.EVT_SIZE,self.OnSize)
94
+
95
+ def GetSaveData(self):
96
+ saveData = {}
97
+ if self.view1:
98
+ saveData['view1'] = self.view1.GetSaveData()
99
+ if isinstance(self.view1,MultiSplit):
100
+ saveData['view1IsSplit'] = 1
101
+ if self.view2:
102
+ saveData['view2'] = self.view2.GetSaveData()
103
+ if isinstance(self.view2,MultiSplit):
104
+ saveData['view2IsSplit'] = 1
105
+ saveData['direction'] = self.direction
106
+ v1,v2 = self.GetPosition()
107
+ saveData['x'] = v1
108
+ saveData['y'] = v2
109
+ v1,v2 = self.GetSize()
110
+ saveData['w'] = v1
111
+ saveData['h'] = v2
112
+ return saveData
113
+
114
+ def SetSaveData(self,data):
115
+ self.direction = data['direction']
116
+ self.SetSize(int(data['x']), int(data['y']), int(data['w']), int(data['h']))
117
+ v1Data = data.get('view1',None)
118
+ if v1Data:
119
+ isSplit = data.get('view1IsSplit',None)
120
+ old = self.view1
121
+ if isSplit:
122
+ self.view1 = MultiSplit(self.multiView,self,
123
+ (0,0),self.GetSize())
124
+ else:
125
+ self.view1 = MultiViewLeaf(self.multiView,self,
126
+ (0,0),self.GetSize())
127
+ self.view1.SetSaveData(v1Data)
128
+ if old:
129
+ old.Destroy()
130
+ v2Data = data.get('view2',None)
131
+ if v2Data:
132
+ isSplit = data.get('view2IsSplit',None)
133
+ old = self.view2
134
+ if isSplit:
135
+ self.view2 = MultiSplit(self.multiView,self,
136
+ (0,0),self.GetSize())
137
+ else:
138
+ self.view2 = MultiViewLeaf(self.multiView,self,
139
+ (0,0),self.GetSize())
140
+ self.view2.SetSaveData(v2Data)
141
+ if old:
142
+ old.Destroy()
143
+ if self.view1:
144
+ self.view1.OnSize(None)
145
+ if self.view2:
146
+ self.view2.OnSize(None)
147
+
148
+ def UnSelect(self):
149
+ if self.view1:
150
+ self.view1.UnSelect()
151
+ if self.view2:
152
+ self.view2.UnSelect()
153
+
154
+ def DefaultChildChanged(self):
155
+ if not self.view2:
156
+ self.view1.DefaultChildChanged()
157
+
158
+ def AddLeaf(self,direction,caller,pos):
159
+ if self.view2:
160
+ if caller == self.view1:
161
+ self.view1 = MultiSplit(self.multiView,self,
162
+ caller.GetPosition(),
163
+ caller.GetSize(),
164
+ caller)
165
+ self.view1.AddLeaf(direction,caller,pos)
166
+ else:
167
+ self.view2 = MultiSplit(self.multiView,self,
168
+ caller.GetPosition(),
169
+ caller.GetSize(),
170
+ caller)
171
+ self.view2.AddLeaf(direction,caller,pos)
172
+ else:
173
+ self.direction = direction
174
+ w,h = self.GetSize()
175
+ if direction == MV_HOR:
176
+ x,y = (pos,0)
177
+ w1,h1 = (w-pos,h)
178
+ w2,h2 = (pos,h)
179
+ else:
180
+ x,y = (0,pos)
181
+ w1,h1 = (w,h-pos)
182
+ w2,h2 = (w,pos)
183
+ self.view2 = MultiViewLeaf(self.multiView, self, (x,y), (w1,h1))
184
+ self.view1.SetSize((w2,h2))
185
+ self.view2.OnSize(None)
186
+
187
+ def DestroyLeaf(self,caller):
188
+ if not self.view2: # We will only have 2 windows if
189
+ return # we need to destroy any
190
+ parent = self.GetParent() # Another splitview
191
+ if parent == self.multiView: # We'r at the root
192
+ if caller == self.view1:
193
+ old = self.view1
194
+ self.view1 = self.view2
195
+ self.view2 = None
196
+ old.Destroy()
197
+ else:
198
+ self.view2.Destroy()
199
+ self.view2 = None
200
+ self.view1.SetSize(self.GetSize())
201
+ self.view1.Move(self.GetPosition())
202
+ else:
203
+ w,h = self.GetSize()
204
+ x,y = self.GetPosition()
205
+ if caller == self.view1:
206
+ if self == parent.view1:
207
+ parent.view1 = self.view2
208
+ else:
209
+ parent.view2 = self.view2
210
+ self.view2.Reparent(parent)
211
+ self.view2.SetSize(x,y,w,h)
212
+ else:
213
+ if self == parent.view1:
214
+ parent.view1 = self.view1
215
+ else:
216
+ parent.view2 = self.view1
217
+ self.view1.Reparent(parent)
218
+ self.view1.SetSize(x,y,w,h)
219
+ self.view1 = None
220
+ self.view2 = None
221
+ self.Destroy()
222
+
223
+ def CanSize(self,side,view):
224
+ if self.SizeTarget(side,view):
225
+ return True
226
+ return False
227
+
228
+ def SizeTarget(self,side,view):
229
+ if self.direction == side and self.view2 and view == self.view1:
230
+ return self
231
+ parent = self.GetParent()
232
+ if parent != self.multiView:
233
+ return parent.SizeTarget(side,self)
234
+ return None
235
+
236
+ def SizeLeaf(self,leaf,pos,side):
237
+ if self.direction != side:
238
+ return
239
+ if not (self.view1 and self.view2):
240
+ return
241
+ if pos < 10: return
242
+ w,h = self.GetSize()
243
+ if side == MV_HOR:
244
+ if pos > w - 10: return
245
+ else:
246
+ if pos > h - 10: return
247
+ if side == MV_HOR:
248
+ self.view1.SetSize(0,0,pos,h)
249
+ self.view2.SetSize(pos,0,w-pos,h)
250
+ else:
251
+ self.view1.SetSize(0,0,w,pos)
252
+ self.view2.SetSize(0,pos,w,h-pos)
253
+
254
+ def OnSize(self,evt):
255
+ if not self.view2:
256
+ self.view1.SetSize(self.GetSize())
257
+ self.view1.OnSize(None)
258
+ return
259
+ v1w,v1h = self.view1.GetSize()
260
+ v2w,v2h = self.view2.GetSize()
261
+ v1x,v1y = self.view1.GetPosition()
262
+ v2x,v2y = self.view2.GetPosition()
263
+ w,h = self.GetSize()
264
+
265
+ if v1x != v2x:
266
+ ratio = float(w) / float((v1w + v2w))
267
+ v1w *= ratio
268
+ v2w = w - v1w
269
+ v2x = v1w
270
+ else:
271
+ v1w = v2w = w
272
+
273
+ if v1y != v2y:
274
+ ratio = float(h) / float((v1h + v2h))
275
+ v1h *= ratio
276
+ v2h = h - v1h
277
+ v2y = v1h
278
+ else:
279
+ v1h = v2h = h
280
+
281
+ self.view1.SetSize(int(v1x), int(v1y), int(v1w), int(v1h))
282
+ self.view2.SetSize(int(v2x), int(v2y), int(v2w), int(v2h))
283
+ self.view1.OnSize(None)
284
+ self.view2.OnSize(None)
285
+
286
+
287
+ #----------------------------------------------------------------------
288
+
289
+
290
+ class MultiViewLeaf(wx.Window):
291
+ def __init__(self,multiView,parent,pos,size):
292
+ wx.Window.__init__(self,id = -1,parent = parent,pos = pos,size = size,
293
+ style = wx.CLIP_CHILDREN)
294
+ self.multiView = multiView
295
+
296
+ self.sizerHor = MultiSizer(self,MV_HOR)
297
+ self.sizerVer = MultiSizer(self,MV_VER)
298
+ self.creatorHor = MultiCreator(self,MV_HOR)
299
+ self.creatorVer = MultiCreator(self,MV_VER)
300
+ self.detail = MultiClient(self,multiView._defChild)
301
+ self.closer = MultiCloser(self)
302
+
303
+ self.Bind(wx.EVT_SIZE,self.OnSize)
304
+
305
+ self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE))
306
+
307
+
308
+ def GetSaveData(self):
309
+ saveData = {}
310
+ saveData['detailClass_class'] = self.detail.child.__class__.__name__
311
+ saveData['detailClass_mod'] = self.detail.child.__module__
312
+ if hasattr(self.detail.child,'GetSaveData'):
313
+ attr = getattr(self.detail.child,'GetSaveData')
314
+ if callable(attr):
315
+ dData = attr()
316
+ if dData:
317
+ saveData['detail'] = dData
318
+ v1,v2 = self.GetPosition()
319
+ saveData['x'] = v1
320
+ saveData['y'] = v2
321
+ v1,v2 = self.GetSize()
322
+ saveData['w'] = v1
323
+ saveData['h'] = v2
324
+ return saveData
325
+
326
+ def SetSaveData(self,data):
327
+ mod = data['detailClass_mod']
328
+ dChild = mod + '.' + data['detailClass_class']
329
+ exec('import %s' % mod)
330
+ detClass = eval(dChild)
331
+ self.SetSize(data['x'],data['y'],data['w'],data['h'])
332
+ old = self.detail
333
+ self.detail = MultiClient(self,detClass)
334
+ dData = data.get('detail',None)
335
+ if dData:
336
+ if hasattr(self.detail.child,'SetSaveData'):
337
+ attr = getattr(self.detail.child,'SetSaveData')
338
+ if callable(attr):
339
+ attr(dData)
340
+ old.Destroy()
341
+ self.detail.OnSize(None)
342
+
343
+ def UnSelect(self):
344
+ self.detail.UnSelect()
345
+
346
+ def DefaultChildChanged(self):
347
+ self.detail.SetNewChildCls(self.multiView._defChild)
348
+
349
+ def AddLeaf(self,direction,pos):
350
+ if pos < 10: return
351
+ w,h = self.GetSize()
352
+ if direction == MV_VER:
353
+ if pos > h - 10: return
354
+ else:
355
+ if pos > w - 10: return
356
+ self.GetParent().AddLeaf(direction,self,pos)
357
+
358
+ def DestroyLeaf(self):
359
+ self.GetParent().DestroyLeaf(self)
360
+
361
+ def SizeTarget(self,side):
362
+ return self.GetParent().SizeTarget(side,self)
363
+
364
+ def CanSize(self,side):
365
+ return self.GetParent().CanSize(side,self)
366
+
367
+ def OnSize(self,evt):
368
+ def doresize():
369
+ try:
370
+ self.sizerHor.OnSize(evt)
371
+ self.sizerVer.OnSize(evt)
372
+ self.creatorHor.OnSize(evt)
373
+ self.creatorVer.OnSize(evt)
374
+ self.detail.OnSize(evt)
375
+ self.closer.OnSize(evt)
376
+ except:
377
+ pass
378
+ wx.CallAfter(doresize)
379
+
380
+ #----------------------------------------------------------------------
381
+
382
+
383
+ class MultiClient(wx.Window):
384
+ def __init__(self,parent,childCls):
385
+ w,h = self.CalcSize(parent)
386
+ wx.Window.__init__(self,id = -1,parent = parent,
387
+ pos = (0,0),
388
+ size = (w,h),
389
+ style = wx.CLIP_CHILDREN | wx.SUNKEN_BORDER)
390
+ self.child = childCls(self)
391
+ self.child.Move(2,2)
392
+ self.normalColour = self.GetBackgroundColour()
393
+ self.selected = False
394
+
395
+ self.Bind(wx.EVT_SET_FOCUS,self.OnSetFocus)
396
+ self.Bind(wx.EVT_CHILD_FOCUS,self.OnChildFocus)
397
+
398
+ def UnSelect(self):
399
+ if self.selected:
400
+ self.selected = False
401
+ self.SetBackgroundColour(self.normalColour)
402
+ self.Refresh()
403
+
404
+ def Select(self):
405
+ self.GetParent().multiView.UnSelect()
406
+ self.selected = True
407
+ self.SetBackgroundColour(wx.YELLOW)
408
+ self.Refresh()
409
+
410
+ def CalcSize(self,parent):
411
+ w,h = parent.GetSize()
412
+ w -= SH_SIZE
413
+ h -= SH_SIZE
414
+ return (w,h)
415
+
416
+ def OnSize(self,evt):
417
+ w,h = self.CalcSize(self.GetParent())
418
+ self.SetSize(0,0,w,h)
419
+ w,h = self.GetClientSize()
420
+ self.child.SetSize((w-4,h-4))
421
+
422
+ def SetNewChildCls(self,childCls):
423
+ if self.child:
424
+ self.child.Destroy()
425
+ self.child = None
426
+ self.child = childCls(self)
427
+ self.child.Move(2,2)
428
+
429
+ def OnSetFocus(self,evt):
430
+ self.Select()
431
+
432
+ def OnChildFocus(self,evt):
433
+ self.OnSetFocus(evt)
434
+ ## from Funcs import FindFocusedChild
435
+ ## child = FindFocusedChild(self)
436
+ ## child.Bind(wx.EVT_KILL_FOCUS,self.OnChildKillFocus)
437
+
438
+
439
+ #----------------------------------------------------------------------
440
+
441
+
442
+ class MultiSizer(wx.Window):
443
+ def __init__(self,parent,side):
444
+ self.side = side
445
+ x,y,w,h = self.CalcSizePos(parent)
446
+ wx.Window.__init__(self,id = -1,parent = parent,
447
+ pos = (x,y),
448
+ size = (w,h),
449
+ style = wx.CLIP_CHILDREN)
450
+
451
+ self.px = None # Previous X
452
+ self.py = None # Previous Y
453
+ self.isDrag = False # In Dragging
454
+ self.dragTarget = None # View being sized
455
+
456
+ self.Bind(wx.EVT_LEAVE_WINDOW,self.OnLeave)
457
+ self.Bind(wx.EVT_ENTER_WINDOW,self.OnEnter)
458
+ self.Bind(wx.EVT_MOTION,self.OnMouseMove)
459
+ self.Bind(wx.EVT_LEFT_DOWN,self.OnPress)
460
+ self.Bind(wx.EVT_LEFT_UP,self.OnRelease)
461
+
462
+ self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE))
463
+
464
+
465
+ def CalcSizePos(self,parent):
466
+ pw,ph = parent.GetSize()
467
+ if self.side == MV_HOR:
468
+ x = CR_SIZE + 2
469
+ y = ph - SH_SIZE
470
+ w = pw - CR_SIZE - SH_SIZE - 2
471
+ h = SH_SIZE
472
+ else:
473
+ x = pw - SH_SIZE
474
+ y = CR_SIZE + 2 + SH_SIZE
475
+ w = SH_SIZE
476
+ h = ph - CR_SIZE - SH_SIZE - 4 - SH_SIZE # For Closer
477
+ return (x,y,w,h)
478
+
479
+ def OnSize(self,evt):
480
+ x,y,w,h = self.CalcSizePos(self.GetParent())
481
+ self.SetSize(x,y,w,h)
482
+
483
+ def OnLeave(self,evt):
484
+ self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
485
+
486
+ def OnEnter(self,evt):
487
+ if not self.GetParent().CanSize(not self.side):
488
+ return
489
+ if self.side == MV_HOR:
490
+ self.SetCursor(wx.Cursor(wx.CURSOR_SIZENS))
491
+ else:
492
+ self.SetCursor(wx.Cursor(wx.CURSOR_SIZEWE))
493
+
494
+ def OnMouseMove(self,evt):
495
+ if self.isDrag:
496
+ DrawSash(self.dragTarget,self.px,self.py,self.side)
497
+ self.px,self.py = self.ClientToScreen((evt.x, evt.y))
498
+ self.px,self.py = self.dragTarget.ScreenToClient((self.px,self.py))
499
+ DrawSash(self.dragTarget,self.px,self.py,self.side)
500
+ else:
501
+ evt.Skip()
502
+
503
+ def OnPress(self,evt):
504
+ self.dragTarget = self.GetParent().SizeTarget(not self.side)
505
+ if self.dragTarget:
506
+ self.isDrag = True
507
+ self.px,self.py = self.ClientToScreen((evt.x, evt.y))
508
+ self.px,self.py = self.dragTarget.ScreenToClient((self.px,self.py))
509
+ DrawSash(self.dragTarget,self.px,self.py,self.side)
510
+ self.CaptureMouse()
511
+ else:
512
+ evt.Skip()
513
+
514
+ def OnRelease(self,evt):
515
+ if self.isDrag:
516
+ DrawSash(self.dragTarget,self.px,self.py,self.side)
517
+ self.ReleaseMouse()
518
+ self.isDrag = False
519
+ if self.side == MV_HOR:
520
+ self.dragTarget.SizeLeaf(self.GetParent(),
521
+ self.py,not self.side)
522
+ else:
523
+ self.dragTarget.SizeLeaf(self.GetParent(),
524
+ self.px,not self.side)
525
+ self.dragTarget = None
526
+ else:
527
+ evt.Skip()
528
+
529
+ #----------------------------------------------------------------------
530
+
531
+
532
+ class MultiCreator(wx.Window):
533
+ def __init__(self,parent,side):
534
+ self.side = side
535
+ x,y,w,h = self.CalcSizePos(parent)
536
+ wx.Window.__init__(self,id = -1,parent = parent,
537
+ pos = (x,y),
538
+ size = (w,h),
539
+ style = wx.CLIP_CHILDREN)
540
+
541
+ self.px = None # Previous X
542
+ self.py = None # Previous Y
543
+ self.isDrag = False # In Dragging
544
+
545
+ self.Bind(wx.EVT_LEAVE_WINDOW,self.OnLeave)
546
+ self.Bind(wx.EVT_ENTER_WINDOW,self.OnEnter)
547
+ self.Bind(wx.EVT_MOTION,self.OnMouseMove)
548
+ self.Bind(wx.EVT_LEFT_DOWN,self.OnPress)
549
+ self.Bind(wx.EVT_LEFT_UP,self.OnRelease)
550
+ self.Bind(wx.EVT_PAINT,self.OnPaint)
551
+
552
+ def CalcSizePos(self,parent):
553
+ pw,ph = parent.GetSize()
554
+ if self.side == MV_HOR:
555
+ x = 2
556
+ y = ph - SH_SIZE
557
+ w = CR_SIZE
558
+ h = SH_SIZE
559
+ else:
560
+ x = pw - SH_SIZE
561
+ y = 4 + SH_SIZE # Make provision for closer
562
+ w = SH_SIZE
563
+ h = CR_SIZE
564
+ return (x,y,w,h)
565
+
566
+ def OnSize(self,evt):
567
+ x,y,w,h = self.CalcSizePos(self.GetParent())
568
+ self.SetSize(x,y,w,h)
569
+
570
+ def OnLeave(self,evt):
571
+ self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
572
+
573
+ def OnEnter(self,evt):
574
+ if self.side == MV_HOR:
575
+ self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
576
+ else:
577
+ self.SetCursor(wx.Cursor(wx.CURSOR_POINT_LEFT))
578
+
579
+ def OnMouseMove(self,evt):
580
+ if self.isDrag:
581
+ parent = self.GetParent()
582
+ DrawSash(parent,self.px,self.py,self.side)
583
+ self.px,self.py = self.ClientToScreen((evt.x, evt.y))
584
+ self.px,self.py = parent.ScreenToClient((self.px,self.py))
585
+ DrawSash(parent,self.px,self.py,self.side)
586
+ else:
587
+ evt.Skip()
588
+
589
+ def OnPress(self,evt):
590
+ self.isDrag = True
591
+ parent = self.GetParent()
592
+ self.px,self.py = self.ClientToScreen((evt.x, evt.y))
593
+ self.px,self.py = parent.ScreenToClient((self.px,self.py))
594
+ DrawSash(parent,self.px,self.py,self.side)
595
+ self.CaptureMouse()
596
+
597
+ def OnRelease(self,evt):
598
+ if self.isDrag:
599
+ parent = self.GetParent()
600
+ DrawSash(parent,self.px,self.py,self.side)
601
+ self.ReleaseMouse()
602
+ self.isDrag = False
603
+
604
+ if self.side == MV_HOR:
605
+ parent.AddLeaf(MV_VER,self.py)
606
+ else:
607
+ parent.AddLeaf(MV_HOR,self.px)
608
+ else:
609
+ evt.Skip()
610
+
611
+ def OnPaint(self,evt):
612
+ dc = wx.PaintDC(self)
613
+ dc.SetBackground(wx.Brush(self.GetBackgroundColour(),wx.BRUSHSTYLE_SOLID))
614
+ dc.Clear()
615
+
616
+ highlight = wx.Pen(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNHIGHLIGHT), 1, wx.PENSTYLE_SOLID)
617
+ shadow = wx.Pen(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNSHADOW), 1, wx.PENSTYLE_SOLID)
618
+ black = wx.Pen(wx.BLACK,1,wx.PENSTYLE_SOLID)
619
+ w,h = self.GetSize()
620
+ w -= 1
621
+ h -= 1
622
+
623
+ # Draw outline
624
+ dc.SetPen(highlight)
625
+ dc.DrawLine(0,0, 0,h)
626
+ dc.DrawLine(0,0, w,0)
627
+ dc.SetPen(black)
628
+ dc.DrawLine(0,h, w+1,h)
629
+ dc.DrawLine(w,0, w,h)
630
+ dc.SetPen(shadow)
631
+ dc.DrawLine(w-1,2, w-1,h)
632
+
633
+ #----------------------------------------------------------------------
634
+
635
+
636
+ class MultiCloser(wx.Window):
637
+ def __init__(self,parent):
638
+ x,y,w,h = self.CalcSizePos(parent)
639
+ wx.Window.__init__(self,id = -1,parent = parent,
640
+ pos = (x,y),
641
+ size = (w,h),
642
+ style = wx.CLIP_CHILDREN)
643
+
644
+ self.down = False
645
+ self.entered = False
646
+
647
+ self.Bind(wx.EVT_LEFT_DOWN,self.OnPress)
648
+ self.Bind(wx.EVT_LEFT_UP,self.OnRelease)
649
+ self.Bind(wx.EVT_PAINT,self.OnPaint)
650
+ self.Bind(wx.EVT_LEAVE_WINDOW,self.OnLeave)
651
+ self.Bind(wx.EVT_ENTER_WINDOW,self.OnEnter)
652
+
653
+ def OnLeave(self,evt):
654
+ self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
655
+ self.entered = False
656
+
657
+ def OnEnter(self,evt):
658
+ self.SetCursor(wx.Cursor(wx.CURSOR_BULLSEYE))
659
+ self.entered = True
660
+
661
+ def OnPress(self,evt):
662
+ self.down = True
663
+ evt.Skip()
664
+
665
+ def OnRelease(self,evt):
666
+ if self.down and self.entered:
667
+ self.GetParent().DestroyLeaf()
668
+ else:
669
+ evt.Skip()
670
+ self.down = False
671
+
672
+ def OnPaint(self,evt):
673
+ dc = wx.PaintDC(self)
674
+ dc.SetBackground(wx.Brush(wx.RED,wx.BRUSHSTYLE_SOLID))
675
+ dc.Clear()
676
+
677
+ def CalcSizePos(self,parent):
678
+ pw,ph = parent.GetSize()
679
+ x = pw - SH_SIZE
680
+ w = SH_SIZE
681
+ h = SH_SIZE + 2
682
+ y = 1
683
+ return (x,y,w,h)
684
+
685
+ def OnSize(self,evt):
686
+ x,y,w,h = self.CalcSizePos(self.GetParent())
687
+ self.SetSize(x,y,w,h)
688
+
689
+
690
+ #----------------------------------------------------------------------
691
+
692
+
693
+ class EmptyChild(wx.Window):
694
+ def __init__(self,parent):
695
+ wx.Window.__init__(self,parent,-1, style = wx.CLIP_CHILDREN)
696
+
697
+
698
+ #----------------------------------------------------------------------
699
+
700
+ # TODO: Switch to wx.Overlay instead of screen DC
701
+
702
+ def DrawSash(win,x,y,direction):
703
+ dc = wx.ScreenDC()
704
+ dc.StartDrawingOnTop(win)
705
+ bmp = wx.Bitmap(8,8)
706
+ bdc = wx.MemoryDC()
707
+ bdc.SelectObject(bmp)
708
+ bdc.DrawRectangle(-1,-1, 10,10)
709
+ for i in range(8):
710
+ for j in range(8):
711
+ if ((i + j) & 1):
712
+ bdc.DrawPoint(i,j)
713
+
714
+ brush = wx.BLACK_BRUSH
715
+ brush.SetStipple(bmp)
716
+
717
+ dc.SetBrush(brush)
718
+ dc.SetLogicalFunction(wx.XOR)
719
+
720
+ body_w,body_h = win.GetClientSize()
721
+
722
+ if y < 0:
723
+ y = 0
724
+ if y > body_h:
725
+ y = body_h
726
+ if x < 0:
727
+ x = 0
728
+ if x > body_w:
729
+ x = body_w
730
+
731
+ if direction == MV_HOR:
732
+ x = 0
733
+ else:
734
+ y = 0
735
+
736
+ x,y = win.ClientToScreen((x,y))
737
+
738
+ w = body_w
739
+ h = body_h
740
+
741
+ if direction == MV_HOR:
742
+ dc.DrawRectangle(x,y-2, w,4)
743
+ else:
744
+ dc.DrawRectangle(x-2,y, 4,h)
745
+
746
+ dc.EndDrawingOnTop()