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/py/editwindow.py ADDED
@@ -0,0 +1,316 @@
1
+ """EditWindow class."""
2
+
3
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
4
+
5
+ import wx
6
+ from wx import stc
7
+
8
+ import keyword
9
+ import os
10
+ import sys
11
+ import time
12
+
13
+ from . import dispatcher
14
+ from .version import VERSION
15
+
16
+
17
+ def get_faces():
18
+
19
+ try:
20
+ is_dark = wx.SystemSettings.GetAppearance().IsDark()
21
+ except wx.PyNoAppError:
22
+ is_dark = False
23
+
24
+ if 'wxMSW' in wx.PlatformInfo:
25
+ # Safely evaluate IsDark() inside a try-except fallback block
26
+ return {
27
+ 'times' : 'Times New Roman',
28
+ 'mono' : 'Courier New',
29
+ 'helv' : 'Arial',
30
+ 'lucida' : 'Lucida Console',
31
+ 'other' : 'Comic Sans MS',
32
+ 'size' : 10,
33
+ 'lnsize' : 8,
34
+ 'backcol' : '#202020' if is_dark else '#FFFFFF',
35
+ 'calltipbg' : '#2D2D2D' if is_dark else '#FFFFB8',
36
+ 'calltipfg' : '#E0E0E0' if is_dark else '#404040',
37
+ }
38
+
39
+ elif 'wxGTK' in wx.PlatformInfo and ('gtk2' in wx.PlatformInfo or 'gtk3' in wx.PlatformInfo):
40
+ return {
41
+ 'times' : 'Serif',
42
+ 'mono' : 'Monospace',
43
+ 'helv' : 'Sans',
44
+ 'other' : 'new century schoolbook',
45
+ 'size' : 10,
46
+ 'lnsize' : 9,
47
+ 'backcol' : '#202020' if is_dark else '#FFFFFF',
48
+ 'calltipbg' : '#2D2D2D' if is_dark else '#FFFFB8',
49
+ 'calltipfg' : '#E0E0E0' if is_dark else '#404040',
50
+ }
51
+
52
+ elif 'wxMac' in wx.PlatformInfo:
53
+ return {
54
+ 'times' : 'Lucida Grande',
55
+ 'mono' : 'Monaco',
56
+ 'helv' : 'Geneva',
57
+ 'other' : 'new century schoolbook',
58
+ 'size' : 12,
59
+ 'lnsize' : 10,
60
+ 'backcol' : '#202020' if is_dark else '#FFFFFF',
61
+ 'calltipbg' : '#2D2D2D' if is_dark else '#FFFFB8',
62
+ 'calltipfg' : '#E0E0E0' if is_dark else '#404040',
63
+ }
64
+
65
+ else: # GTK1, etc.
66
+ return {
67
+ 'times' : 'Times',
68
+ 'mono' : 'Courier',
69
+ 'helv' : 'Helvetica',
70
+ 'other' : 'new century schoolbook',
71
+ 'size' : 12,
72
+ 'lnsize' : 10,
73
+ 'backcol' : '#FFFFFF',
74
+ 'calltipbg' : '#FFFFB8',
75
+ 'calltipfg' : '#404040',
76
+ }
77
+
78
+
79
+ class EditWindow(stc.StyledTextCtrl):
80
+ """EditWindow based on StyledTextCtrl."""
81
+
82
+
83
+ def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
84
+ size=wx.DefaultSize, style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
85
+ """Create EditWindow instance."""
86
+ self.FACES = get_faces()
87
+ stc.StyledTextCtrl.__init__(self, parent, id, pos, size, style)
88
+ self.__config()
89
+ self.Bind(stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
90
+ dispatcher.connect(receiver=self._fontsizer, signal='FontIncrease')
91
+ dispatcher.connect(receiver=self._fontsizer, signal='FontDecrease')
92
+ dispatcher.connect(receiver=self._fontsizer, signal='FontDefault')
93
+
94
+ def _fontsizer(self, signal):
95
+ """Receiver for Font* signals."""
96
+ if not self:
97
+ dispatcher.disconnect(receiver=self._fontsizer, signal='FontIncrease')
98
+ dispatcher.disconnect(receiver=self._fontsizer, signal='FontDecrease')
99
+ dispatcher.disconnect(receiver=self._fontsizer, signal='FontDefault')
100
+ return
101
+ size = self.GetZoom()
102
+ if signal == 'FontIncrease':
103
+ size += 1
104
+ elif signal == 'FontDecrease':
105
+ size -= 1
106
+ elif signal == 'FontDefault':
107
+ size = 0
108
+ self.SetZoom(size)
109
+
110
+
111
+ def __config(self):
112
+ self.setDisplayLineNumbers(False)
113
+
114
+ self.SetLexer(stc.STC_LEX_PYTHON)
115
+ self.SetKeyWords(0, ' '.join(keyword.kwlist))
116
+
117
+ self.setStyles(self.FACES)
118
+ self.SetViewWhiteSpace(False)
119
+ self.SetTabWidth(4)
120
+ self.SetUseTabs(False)
121
+ # Do we want to automatically pop up command completion options?
122
+ self.autoComplete = True
123
+ self.autoCompleteIncludeMagic = True
124
+ self.autoCompleteIncludeSingle = True
125
+ self.autoCompleteIncludeDouble = True
126
+ self.autoCompleteCaseInsensitive = True
127
+ self.AutoCompSetIgnoreCase(self.autoCompleteCaseInsensitive)
128
+ self.autoCompleteAutoHide = False
129
+ self.AutoCompSetAutoHide(self.autoCompleteAutoHide)
130
+ self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
131
+ # Do we want to automatically pop up command argument help?
132
+ self.autoCallTip = True
133
+ self.callTipInsert = True
134
+ self.CallTipSetBackground(self.FACES['calltipbg'])
135
+ self.CallTipSetForeground(self.FACES['calltipfg'])
136
+ self.SetWrapMode(False)
137
+ try:
138
+ self.SetEndAtLastLine(False)
139
+ except AttributeError:
140
+ pass
141
+
142
+ def setDisplayLineNumbers(self, state):
143
+ self.lineNumbers = state
144
+ if state:
145
+ self.SetMarginType(1, stc.STC_MARGIN_NUMBER)
146
+ self.SetMarginWidth(1, 40)
147
+ else:
148
+ # Leave a small margin so the feature hidden lines marker can be seen
149
+ self.SetMarginType(1, 0)
150
+ self.SetMarginWidth(1, 10)
151
+
152
+ def setStyles(self, faces):
153
+ """Configure font size, typeface and color for lexer."""
154
+
155
+ # Default style
156
+ self.StyleSetSpec(stc.STC_STYLE_DEFAULT,
157
+ "face:%(mono)s,size:%(size)d,back:%(backcol)s" % \
158
+ faces)
159
+
160
+ self.StyleClearAll()
161
+ self.SetSelForeground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT))
162
+ self.SetSelBackground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT))
163
+
164
+ # Built in styles
165
+ self.StyleSetSpec(stc.STC_STYLE_LINENUMBER,
166
+ "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % faces)
167
+ self.StyleSetSpec(stc.STC_STYLE_CONTROLCHAR,
168
+ "face:%(mono)s" % faces)
169
+ self.StyleSetSpec(stc.STC_STYLE_BRACELIGHT,
170
+ "fore:#0000FF,back:#FFFF88")
171
+ self.StyleSetSpec(stc.STC_STYLE_BRACEBAD,
172
+ "fore:#FF0000,back:#FFFF88")
173
+
174
+ # Python styles
175
+ self.StyleSetSpec(stc.STC_P_DEFAULT,
176
+ "face:%(mono)s" % faces)
177
+ self.StyleSetSpec(stc.STC_P_COMMENTLINE,
178
+ "fore:#007F00,face:%(mono)s" % faces)
179
+ self.StyleSetSpec(stc.STC_P_NUMBER,
180
+ "")
181
+ self.StyleSetSpec(stc.STC_P_STRING,
182
+ "fore:#7F007F,face:%(mono)s" % faces)
183
+ self.StyleSetSpec(stc.STC_P_CHARACTER,
184
+ "fore:#7F007F,face:%(mono)s" % faces)
185
+ self.StyleSetSpec(stc.STC_P_WORD,
186
+ "fore:#00007F,bold")
187
+ self.StyleSetSpec(stc.STC_P_TRIPLE,
188
+ "fore:#7F0000")
189
+ self.StyleSetSpec(stc.STC_P_TRIPLEDOUBLE,
190
+ "fore:#000033,back:#FFFFE8")
191
+ self.StyleSetSpec(stc.STC_P_CLASSNAME,
192
+ "fore:#0000FF,bold")
193
+ self.StyleSetSpec(stc.STC_P_DEFNAME,
194
+ "fore:#007F7F,bold")
195
+ self.StyleSetSpec(stc.STC_P_OPERATOR,
196
+ "")
197
+ self.StyleSetSpec(stc.STC_P_IDENTIFIER,
198
+ "")
199
+ self.StyleSetSpec(stc.STC_P_COMMENTBLOCK,
200
+ "fore:#7F7F7F")
201
+ self.StyleSetSpec(stc.STC_P_STRINGEOL,
202
+ "fore:#000000,face:%(mono)s,back:#E0C0E0,eol" % faces)
203
+
204
+ def OnUpdateUI(self, event):
205
+ """Check for matching braces."""
206
+ # If the auto-complete window is up let it do its thing.
207
+ if self.AutoCompActive() or self.CallTipActive():
208
+ return
209
+ braceAtCaret = -1
210
+ braceOpposite = -1
211
+ charBefore = None
212
+ caretPos = self.GetCurrentPos()
213
+ if caretPos > 0:
214
+ charBefore = self.GetCharAt(caretPos - 1)
215
+ styleBefore = self.GetStyleAt(caretPos - 1)
216
+
217
+ # Check before.
218
+ if charBefore and chr(charBefore) in '[]{}()' \
219
+ and styleBefore == stc.STC_P_OPERATOR:
220
+ braceAtCaret = caretPos - 1
221
+
222
+ # Check after.
223
+ if braceAtCaret < 0:
224
+ charAfter = self.GetCharAt(caretPos)
225
+ styleAfter = self.GetStyleAt(caretPos)
226
+ if charAfter and chr(charAfter) in '[]{}()' \
227
+ and styleAfter == stc.STC_P_OPERATOR:
228
+ braceAtCaret = caretPos
229
+
230
+ if braceAtCaret >= 0:
231
+ braceOpposite = self.BraceMatch(braceAtCaret)
232
+
233
+ if braceAtCaret != -1 and braceOpposite == -1:
234
+ self.BraceBadLight(braceAtCaret)
235
+ else:
236
+ self.BraceHighlight(braceAtCaret, braceOpposite)
237
+
238
+ def CanCopy(self):
239
+ """Return True if text is selected and can be copied."""
240
+ return self.GetSelectionStart() != self.GetSelectionEnd()
241
+
242
+ def CanCut(self):
243
+ """Return True if text is selected and can be cut."""
244
+ return self.CanCopy() and self.CanEdit()
245
+
246
+ def CanEdit(self):
247
+ """Return True if editing should succeed."""
248
+ return not self.GetReadOnly()
249
+
250
+ def CanPaste(self):
251
+ """Return True if pasting should succeed."""
252
+ return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
253
+
254
+
255
+ def GetLastPosition(self):
256
+ return self.GetLength()
257
+
258
+ def GetRange(self, start, end):
259
+ return self.GetTextRange(start, end)
260
+
261
+ def GetSelection(self):
262
+ return self.GetAnchor(), self.GetCurrentPos()
263
+
264
+ def ShowPosition(self, pos):
265
+ line = self.LineFromPosition(pos)
266
+ self.EnsureVisible(line) # Expand the line if folded.
267
+ self.GotoLine(line)
268
+
269
+ def DoFindNext(self, findData, findDlg=None):
270
+ backward = not (findData.GetFlags() & wx.FR_DOWN)
271
+ matchcase = findData.GetFlags() & wx.FR_MATCHCASE
272
+ wholeword = findData.GetFlags() & wx.FR_WHOLEWORD
273
+ findstring = findData.GetFindString().encode()
274
+ self.SetSearchFlags(0
275
+ | (wx.stc.STC_FIND_MATCHCASE if matchcase else 0)
276
+ | (wx.stc.STC_FIND_WHOLEWORD if wholeword else 0)
277
+ )
278
+ if backward:
279
+ self.TargetStart = self.GetAnchor() # backward anchor
280
+ self.TargetEnd = 0
281
+ else:
282
+ self.TargetStart = self.GetCurrentPos() # forward anchor
283
+ self.TargetEnd = self.TextLength
284
+ loc = self.SearchInTarget(findstring)
285
+
286
+ # if it wasn't found then restart at beginning
287
+ if loc == -1:
288
+ self.TargetStart = self.TextLength if backward else 0
289
+ loc = self.SearchInTarget(findstring)
290
+
291
+ # was it still not found?
292
+ if loc == -1:
293
+ dlg = wx.MessageDialog(self, 'Unable to find the search text.',
294
+ 'Not found!',
295
+ wx.OK | wx.ICON_INFORMATION)
296
+ dlg.ShowModal()
297
+ dlg.Destroy()
298
+ if findDlg:
299
+ if loc == -1:
300
+ wx.CallAfter(findDlg.SetFocus)
301
+ return
302
+ else:
303
+ findDlg.Close()
304
+
305
+ # show and select the found text
306
+ self.ShowPosition(loc)
307
+ self.SetSelection(loc, loc + len(findstring))
308
+
309
+ def SetSelection(self, from_, to_):
310
+ """Selects the text starting at the first position up to
311
+ (but not including) the character at the last position.
312
+ """
313
+ # (override) Patch for miss-insertion position when from_ > to_.
314
+ # Note: This is needed until the stc SetSelection bug is fixed.
315
+ self.SetAnchor(from_)
316
+ self.SetCurrentPos(to_)
wx/py/filling.py ADDED
@@ -0,0 +1,358 @@
1
+ """Filling is the gui tree control through which a user can navigate
2
+ the local namespace or any object."""
3
+
4
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
5
+
6
+ import wx
7
+
8
+ from . import dispatcher
9
+ from . import editwindow
10
+ from . import images
11
+ import inspect
12
+ from . import introspect
13
+ import types
14
+
15
+
16
+ COMMONTYPES = [getattr(types, t) for t in dir(types) \
17
+ if not t.startswith('_') \
18
+ and t not in ('ClassType', 'InstanceType', 'ModuleType')]
19
+
20
+ DOCTYPES = ('BuiltinFunctionType', 'BuiltinMethodType', 'ClassType',
21
+ 'FunctionType', 'GeneratorType', 'InstanceType',
22
+ 'LambdaType', 'MethodType', 'ModuleType',
23
+ 'UnboundMethodType', 'method-wrapper')
24
+
25
+ SIMPLETYPES = [getattr(types, t) for t in dir(types) \
26
+ if not t.startswith('_') and t not in DOCTYPES]
27
+
28
+ #del t
29
+
30
+ try:
31
+ COMMONTYPES.append(type(''.__repr__)) # Method-wrapper in version 2.2.x.
32
+ except AttributeError:
33
+ pass
34
+
35
+
36
+ class FillingTree(wx.TreeCtrl):
37
+ """FillingTree based on TreeCtrl."""
38
+
39
+ name = 'Filling Tree'
40
+
41
+ def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
42
+ size=wx.DefaultSize, style=wx.TR_DEFAULT_STYLE,
43
+ rootObject=None, rootLabel=None, rootIsNamespace=False,
44
+ static=False):
45
+ """Create FillingTree instance."""
46
+ wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
47
+ self.rootIsNamespace = rootIsNamespace
48
+ import __main__
49
+ if rootObject is None:
50
+ rootObject = __main__.__dict__
51
+ self.rootIsNamespace = True
52
+ if rootObject is __main__.__dict__ and rootLabel is None:
53
+ rootLabel = 'locals()'
54
+ if not rootLabel:
55
+ rootLabel = 'Ingredients'
56
+ self.item = self.root = self.AddRoot(rootLabel, -1, -1, rootObject)
57
+ self.SetItemHasChildren(self.root, self.objHasChildren(rootObject))
58
+ self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpanding, id=self.GetId())
59
+ self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=self.GetId())
60
+ self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=self.GetId())
61
+ self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnItemActivated, id=self.GetId())
62
+ if not static:
63
+ dispatcher.connect(receiver=self.push, signal='Interpreter.push')
64
+
65
+ def push(self, command, more):
66
+ """Receiver for Interpreter.push signal."""
67
+ if not self:
68
+ dispatcher.disconnect(receiver=self.push, signal='Interpreter.push')
69
+ return
70
+ self.display()
71
+
72
+ def OnItemExpanding(self, event):
73
+ """Add children to the item."""
74
+ busy = wx.BusyCursor()
75
+ item = event.GetItem()
76
+ if self.IsExpanded(item):
77
+ return
78
+ self.addChildren(item)
79
+ # self.SelectItem(item)
80
+
81
+ def OnItemCollapsed(self, event):
82
+ """Remove all children from the item."""
83
+ busy = wx.BusyCursor()
84
+ item = event.GetItem()
85
+ # self.CollapseAndReset(item)
86
+ # self.DeleteChildren(item)
87
+ # self.SelectItem(item)
88
+
89
+ def OnSelChanged(self, event):
90
+ """Display information about the item."""
91
+ busy = wx.BusyCursor()
92
+ self.item = event.GetItem()
93
+ self.display()
94
+
95
+ def OnItemActivated(self, event):
96
+ """Launch a DirFrame."""
97
+ item = event.GetItem()
98
+ text = self.getFullName(item)
99
+ obj = self.GetItemData(item)
100
+ frame = FillingFrame(parent=self, size=(600, 100), rootObject=obj,
101
+ rootLabel=text, rootIsNamespace=False)
102
+ frame.Show()
103
+
104
+ def objHasChildren(self, obj):
105
+ """Return true if object has children."""
106
+ if self.objGetChildren(obj):
107
+ return True
108
+ else:
109
+ return False
110
+
111
+ def objGetChildren(self, obj):
112
+ """Return dictionary with attributes or contents of object."""
113
+ busy = wx.BusyCursor()
114
+ otype = type(obj)
115
+ if (isinstance(obj, dict)
116
+ or 'BTrees' in str(otype)
117
+ and hasattr(obj, 'keys')):
118
+ return obj
119
+ d = {}
120
+ if isinstance(obj, (list, tuple)):
121
+ for n in range(len(obj)):
122
+ key = '[' + str(n) + ']'
123
+ d[key] = obj[n]
124
+ if otype not in COMMONTYPES:
125
+ for key in introspect.getAttributeNames(obj):
126
+ if wx.Platform == '__WXMSW__':
127
+ if key == 'DropTarget': # Windows bug fix.
128
+ continue
129
+ # Believe it or not, some attributes can disappear,
130
+ # such as the exc_traceback attribute of the sys
131
+ # module. So this is nested in a try block.
132
+ try:
133
+ d[key] = getattr(obj, key)
134
+ except Exception:
135
+ pass
136
+ return d
137
+
138
+ def addChildren(self, item):
139
+ self.DeleteChildren(item)
140
+ obj = self.GetItemData(item)
141
+ children = self.objGetChildren(obj)
142
+ if not children:
143
+ return
144
+ keys = sorted(children, key=lambda x: str(x).lower())
145
+ for key in keys:
146
+ itemtext = str(key)
147
+ # Show string dictionary items with single quotes, except
148
+ # for the first level of items, if they represent a
149
+ # namespace.
150
+ if isinstance(obj, dict) \
151
+ and isinstance(key, str) \
152
+ and (item != self.root
153
+ or (item == self.root and not self.rootIsNamespace)):
154
+ itemtext = repr(key)
155
+ child = children[key]
156
+ branch = self.AppendItem(parent=item, text=itemtext, data=child)
157
+ self.SetItemHasChildren(branch, self.objHasChildren(child))
158
+
159
+ def display(self):
160
+ item = self.item
161
+ if not item:
162
+ return
163
+ if self.IsExpanded(item):
164
+ self.addChildren(item)
165
+ self.setText('')
166
+ obj = self.GetItemData(item)
167
+ if wx.Platform == '__WXMSW__':
168
+ if obj is None: # Windows bug fix.
169
+ return
170
+ self.SetItemHasChildren(item, self.objHasChildren(obj))
171
+ otype = type(obj)
172
+ text = ''
173
+ text += self.getFullName(item)
174
+ text += '\n\nType: ' + str(otype)
175
+ try:
176
+ value = str(obj)
177
+ except Exception:
178
+ value = ''
179
+ if isinstance(obj, str):
180
+ value = repr(obj)
181
+ text += u'\n\nValue: ' + value
182
+ if otype not in SIMPLETYPES:
183
+ try:
184
+ text += '\n\nDocstring:\n\n"""' + \
185
+ inspect.getdoc(obj).strip() + '"""'
186
+ except Exception:
187
+ pass
188
+ if isinstance(obj, type):
189
+ try:
190
+ text += '\n\nClass Definition:\n\n' + \
191
+ inspect.getsource(obj.__class__)
192
+ except Exception:
193
+ pass
194
+ else:
195
+ try:
196
+ text += '\n\nSource Code:\n\n' + \
197
+ inspect.getsource(obj)
198
+ except Exception:
199
+ pass
200
+ self.setText(text)
201
+
202
+ def getFullName(self, item, partial=''):
203
+ """Return a syntactically proper name for item."""
204
+ name = self.GetItemText(item)
205
+ parent = None
206
+ obj = None
207
+ if item != self.root:
208
+ parent = self.GetItemParent(item)
209
+ obj = self.GetItemData(parent)
210
+ # Apply dictionary syntax to dictionary items, except the root
211
+ # and first level children of a namespace.
212
+ if ((isinstance(obj, dict)
213
+ or 'BTrees' in str(type(obj))
214
+ and hasattr(obj, 'keys'))
215
+ and ((item != self.root and parent != self.root)
216
+ or (parent == self.root and not self.rootIsNamespace))):
217
+ name = '[' + name + ']'
218
+ # Apply dot syntax to multipart names.
219
+ if partial:
220
+ if partial[0] == '[':
221
+ name += partial
222
+ else:
223
+ name += '.' + partial
224
+ # Repeat for everything but the root item
225
+ # and first level children of a namespace.
226
+ if (item != self.root and parent != self.root) \
227
+ or (parent == self.root and not self.rootIsNamespace):
228
+ name = self.getFullName(parent, partial=name)
229
+ return name
230
+
231
+ def setText(self, text):
232
+ """Display information about the current selection."""
233
+
234
+ # This method will likely be replaced by the enclosing app to
235
+ # do something more interesting, like write to a text control.
236
+ print(text)
237
+
238
+ def setStatusText(self, text):
239
+ """Display status information."""
240
+
241
+ # This method will likely be replaced by the enclosing app to
242
+ # do something more interesting, like write to a status bar.
243
+ print(text)
244
+
245
+
246
+ class FillingText(editwindow.EditWindow):
247
+ """FillingText based on StyledTextCtrl."""
248
+
249
+ name = 'Filling Text'
250
+
251
+ def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
252
+ size=wx.DefaultSize, style=wx.CLIP_CHILDREN,
253
+ static=False):
254
+ """Create FillingText instance."""
255
+ editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
256
+ # Configure various defaults and user preferences.
257
+ self.SetReadOnly(True)
258
+ self.SetWrapMode(True)
259
+ self.SetMarginWidth(1, 0)
260
+ if not static:
261
+ dispatcher.connect(receiver=self.push, signal='Interpreter.push')
262
+
263
+ def push(self, command, more):
264
+ """Receiver for Interpreter.push signal."""
265
+ if not self:
266
+ dispatcher.disconnect(receiver=self.push, signal='Interpreter.push')
267
+ return
268
+ self.Refresh()
269
+
270
+ def SetText(self, *args, **kwds):
271
+ self.SetReadOnly(False)
272
+ editwindow.EditWindow.SetText(self, *args, **kwds)
273
+ self.SetReadOnly(True)
274
+
275
+
276
+ class Filling(wx.SplitterWindow):
277
+ """Filling based on wxSplitterWindow."""
278
+
279
+ name = 'Filling'
280
+
281
+ def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
282
+ size=wx.DefaultSize, style=wx.SP_3D|wx.SP_LIVE_UPDATE,
283
+ name='Filling Window', rootObject=None,
284
+ rootLabel=None, rootIsNamespace=False, static=False):
285
+ """Create a Filling instance."""
286
+ wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name)
287
+
288
+ self.tree = FillingTree(parent=self, rootObject=rootObject,
289
+ rootLabel=rootLabel,
290
+ rootIsNamespace=rootIsNamespace,
291
+ static=static)
292
+ self.text = FillingText(parent=self, static=static)
293
+
294
+ wx.CallLater(25, self.SplitVertically, self.tree, self.text, 200)
295
+
296
+ self.SetMinimumPaneSize(1)
297
+
298
+ # Override the filling so that descriptions go to FillingText.
299
+ self.tree.setText = self.text.SetText
300
+
301
+ # Display the root item.
302
+ self.tree.SelectItem(self.tree.root)
303
+ self.tree.display()
304
+
305
+ self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged)
306
+
307
+ def OnChanged(self, event):
308
+ #this is important: do not evaluate this event=> otherwise,
309
+ # splitterwindow behaves strangely
310
+ #event.Skip()
311
+ pass
312
+
313
+ def LoadSettings(self, config):
314
+ pos = config.ReadInt('Sash/FillingPos', 200)
315
+ if not self.IsSplit():
316
+ self.SplitVertically(self.tree, self.text)
317
+ wx.CallLater(250, self.SetSashPosition, pos)
318
+ zoom = config.ReadInt('View/Zoom/Filling', -99)
319
+ if zoom != -99:
320
+ self.text.SetZoom(zoom)
321
+
322
+ def SaveSettings(self, config):
323
+ config.WriteInt('Sash/FillingPos', self.GetSashPosition())
324
+ config.WriteInt('View/Zoom/Filling', self.text.GetZoom())
325
+
326
+
327
+
328
+ class FillingFrame(wx.Frame):
329
+ """Frame containing the namespace tree component."""
330
+
331
+ name = 'Filling Frame'
332
+
333
+ def __init__(self, parent=None, id=-1, title='PyFilling',
334
+ pos=wx.DefaultPosition, size=(600, 400),
335
+ style=wx.DEFAULT_FRAME_STYLE, rootObject=None,
336
+ rootLabel=None, rootIsNamespace=False, static=False):
337
+ """Create FillingFrame instance."""
338
+ wx.Frame.__init__(self, parent, id, title, pos, size, style)
339
+ intro = 'PyFilling - The Tastiest Namespace Inspector'
340
+ self.CreateStatusBar()
341
+ self.SetStatusText(intro)
342
+ self.SetIcon(images.getPyIcon())
343
+ self.filling = Filling(parent=self, rootObject=rootObject,
344
+ rootLabel=rootLabel,
345
+ rootIsNamespace=rootIsNamespace,
346
+ static=static)
347
+ # Override so that status messages go to the status bar.
348
+ self.filling.tree.setStatusText = self.SetStatusText
349
+
350
+
351
+ class App(wx.App):
352
+ """PyFilling standalone application."""
353
+
354
+ def OnInit(self):
355
+ self.fillingFrame = FillingFrame()
356
+ self.fillingFrame.Show(True)
357
+ self.SetTopWindow(self.fillingFrame)
358
+ return True