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,974 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: wx.lib.editor.Editor
3
+ # Purpose: An intelligent text editor with colorization capabilities.
4
+ #
5
+ # Original
6
+ # Authors: Dirk Holtwic, Robin Dunn
7
+ #
8
+ # New
9
+ # Authors: Adam Feuer, Steve Howell
10
+ #
11
+ # History:
12
+ # This code used to support a fairly complex subclass that did
13
+ # syntax coloring and outliner collapse mode. Adam and Steve
14
+ # inherited the code, and added a lot of basic editor
15
+ # functionality that had not been there before, such as cut-and-paste.
16
+ #
17
+ #
18
+ # Created: 15-Dec-1999
19
+ # Copyright: (c) 1999-2016 by Dirk Holtwick, 1999
20
+ # Licence: wxWindows license
21
+ #----------------------------------------------------------------------
22
+ # 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
23
+ #
24
+ # o 2.5 compatibility update.
25
+ #
26
+ # 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
27
+ #
28
+ # o wxEditor -> Editor
29
+ #
30
+
31
+ import os
32
+ import time
33
+
34
+ import wx
35
+
36
+ from . import selection
37
+ from . import images
38
+
39
+ #----------------------------
40
+
41
+ def ForceBetween(min, val, max):
42
+ if val > max:
43
+ return max
44
+ if val < min:
45
+ return min
46
+ return val
47
+
48
+
49
+ def LineTrimmer(lineOfText):
50
+ if len(lineOfText) == 0:
51
+ return ""
52
+ elif lineOfText[-1] == '\r':
53
+ return lineOfText[:-1]
54
+ else:
55
+ return lineOfText
56
+
57
+ def LineSplitter(text):
58
+ return map (LineTrimmer, text.split('\n'))
59
+
60
+
61
+ #----------------------------
62
+
63
+ class Scroller:
64
+ def __init__(self, parent):
65
+ self.parent = parent
66
+ self.ow = 0
67
+ self.oh = 0
68
+ self.ox = 0
69
+ self.oy = 0
70
+
71
+ def SetScrollbars(self, fw, fh, w, h, x, y):
72
+ if (self.ow != w or self.oh != h or self.ox != x or self.oy != y):
73
+ self.parent.SetScrollbars(fw, fh, w, h, x, y)
74
+ self.ow = w
75
+ self.oh = h
76
+ self.ox = x
77
+ self.oy = y
78
+
79
+ #----------------------------------------------------------------------
80
+
81
+ class Editor(wx.ScrolledWindow):
82
+
83
+ def __init__(self, parent, id,
84
+ pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
85
+
86
+ wx.ScrolledWindow.__init__(self, parent, id,
87
+ pos, size,
88
+ style|wx.WANTS_CHARS)
89
+
90
+ self.isDrawing = False
91
+
92
+ self.InitCoords()
93
+ self.InitFonts()
94
+ self.SetColors()
95
+ self.MapEvents()
96
+ self.LoadImages()
97
+ self.InitDoubleBuffering()
98
+ self.InitScrolling()
99
+ self.SelectOff()
100
+ self.SetFocus()
101
+ self.SetText([""])
102
+ self.SpacesPerTab = 4
103
+
104
+ ##------------------ Init stuff
105
+
106
+ def InitCoords(self):
107
+ self.cx = 0
108
+ self.cy = 0
109
+ self.oldCx = 0
110
+ self.oldCy = 0
111
+ self.sx = 0
112
+ self.sy = 0
113
+ self.sw = 0
114
+ self.sh = 0
115
+ self.sco_x = 0
116
+ self.sco_y = 0
117
+
118
+ def MapEvents(self):
119
+ self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
120
+ self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
121
+ self.Bind(wx.EVT_MOTION, self.OnMotion)
122
+ self.Bind(wx.EVT_SCROLLWIN, self.OnScroll)
123
+ self.Bind(wx.EVT_CHAR, self.OnChar)
124
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
125
+ self.Bind(wx.EVT_SIZE, self.OnSize)
126
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
127
+ self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
128
+
129
+ ##------------------- Platform-specific stuff
130
+
131
+ def NiceFontForPlatform(self):
132
+ if wx.Platform == "__WXMSW__":
133
+ font = wx.Font(10, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
134
+ else:
135
+ font = wx.Font(12, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
136
+ return font
137
+
138
+ def UnixKeyHack(self, key):
139
+ #
140
+ # this will be obsolete when we get the new wxWindows patch
141
+ #
142
+ # 12/14/03 - jmg
143
+ #
144
+ # Which patch? I don't know if this is needed, but I don't know
145
+ # why it's here either. Play it safe; leave it in.
146
+ #
147
+ if key <= 26:
148
+ key += ord('a') - 1
149
+ return key
150
+
151
+ ##-------------------- UpdateView/Cursor code
152
+
153
+ def OnSize(self, event):
154
+ self.AdjustScrollbars()
155
+ self.SetFocus()
156
+
157
+ def SetCharDimensions(self):
158
+ # TODO: We need a code review on this. It appears that Linux
159
+ # improperly reports window dimensions when the scrollbar's there.
160
+ self.bw, self.bh = self.GetClientSize()
161
+
162
+ if wx.Platform == "__WXMSW__":
163
+ self.sh = int(self.bh / self.fh)
164
+ self.sw = int(self.bw / self.fw) - 1
165
+ else:
166
+ self.sh = int(self.bh / self.fh)
167
+ if self.LinesInFile() >= self.sh:
168
+ self.bw = self.bw - wx.SystemSettings.GetMetric(wx.SYS_VSCROLL_X)
169
+ self.sw = int(self.bw / self.fw) - 1
170
+
171
+ self.sw = int(self.bw / self.fw) - 1
172
+ if self.CalcMaxLineLen() >= self.sw:
173
+ self.bh = self.bh - wx.SystemSettings.GetMetric(wx.SYS_HSCROLL_Y)
174
+ self.sh = int(self.bh / self.fh)
175
+
176
+
177
+ def UpdateView(self, dc = None):
178
+ if dc is None:
179
+ dc = wx.ClientDC(self)
180
+ if dc.IsOk():
181
+ self.SetCharDimensions()
182
+ self.KeepCursorOnScreen()
183
+ self.DrawSimpleCursor(0,0, dc, True)
184
+ self.Draw(dc)
185
+
186
+ def OnPaint(self, event):
187
+ dc = wx.PaintDC(self)
188
+ if self.isDrawing:
189
+ return
190
+ self.isDrawing = True
191
+ self.UpdateView(dc)
192
+ wx.CallAfter(self.AdjustScrollbars)
193
+ self.isDrawing = False
194
+
195
+ def OnEraseBackground(self, evt):
196
+ pass
197
+
198
+ ##-------------------- Drawing code
199
+
200
+ def InitFonts(self):
201
+ dc = wx.ClientDC(self)
202
+ self.font = self.NiceFontForPlatform()
203
+ dc.SetFont(self.font)
204
+ self.fw = dc.GetCharWidth()
205
+ self.fh = dc.GetCharHeight()
206
+
207
+ def SetColors(self):
208
+ self.fgColor = wx.BLACK
209
+ self.bgColor = wx.WHITE
210
+ self.selectColor = wx.Colour(238, 220, 120) # r, g, b = emacsOrange
211
+
212
+ def InitDoubleBuffering(self):
213
+ pass
214
+
215
+ def DrawEditText(self, t, x, y, dc):
216
+ dc.DrawText(t, x * self.fw, y * self.fh)
217
+
218
+ def DrawLine(self, line, dc):
219
+ if self.IsLine(line):
220
+ l = line
221
+ t = self.lines[l]
222
+ dc.SetTextForeground(self.fgColor)
223
+ fragments = selection.Selection(
224
+ self.SelectBegin, self.SelectEnd,
225
+ self.sx, self.sw, line, t)
226
+ x = 0
227
+ for (data, selected) in fragments:
228
+ if selected:
229
+ dc.SetTextBackground(self.selectColor)
230
+ if x == 0 and len(data) == 0 and len(fragments) == 1:
231
+ data = ' '
232
+ else:
233
+ dc.SetTextBackground(self.bgColor)
234
+ self.DrawEditText(data, x, line - self.sy, dc)
235
+ x += len(data)
236
+
237
+ def Draw(self, odc=None):
238
+ if not odc:
239
+ odc = wx.ClientDC(self)
240
+
241
+ dc = wx.BufferedDC(odc)
242
+ if dc.IsOk():
243
+ dc.SetFont(self.font)
244
+ dc.SetBackgroundMode(wx.SOLID)
245
+ dc.SetTextBackground(self.bgColor)
246
+ dc.SetTextForeground(self.fgColor)
247
+ dc.SetBackground(wx.Brush(self.bgColor))
248
+ dc.Clear()
249
+ for line in range(self.sy, self.sy + self.sh):
250
+ self.DrawLine(line, dc)
251
+ if len(self.lines) < self.sh + self.sy:
252
+ self.DrawEofMarker(dc)
253
+ self.DrawCursor(dc)
254
+
255
+ ##------------------ eofMarker stuff
256
+
257
+ def LoadImages(self):
258
+ self.eofMarker = images.EofImage.GetBitmap()
259
+
260
+ def DrawEofMarker(self,dc):
261
+ x = 0
262
+ y = (len(self.lines) - self.sy) * self.fh
263
+ hasTransparency = 1
264
+ dc.DrawBitmap(self.eofMarker, x, y, hasTransparency)
265
+
266
+ ##------------------ cursor-related functions
267
+
268
+ def DrawCursor(self, dc = None):
269
+ if not dc:
270
+ dc = wx.ClientDC(self)
271
+
272
+ if (self.LinesInFile())<self.cy: #-1 ?
273
+ self.cy = self.LinesInFile()-1
274
+ s = self.lines[self.cy]
275
+
276
+ x = self.cx - self.sx
277
+ y = self.cy - self.sy
278
+ self.DrawSimpleCursor(x, y, dc)
279
+
280
+
281
+ def DrawSimpleCursor(self, xp, yp, dc = None, old=False):
282
+ if not dc:
283
+ dc = wx.ClientDC(self)
284
+
285
+ if old:
286
+ xp = self.sco_x
287
+ yp = self.sco_y
288
+
289
+ szx = self.fw
290
+ szy = self.fh
291
+ x = xp * szx
292
+ y = yp * szy
293
+ dc.Blit(x,y, szx,szy, dc, x,y, wx.XOR)
294
+ self.sco_x = xp
295
+ self.sco_y = yp
296
+
297
+ ##-------- Enforcing screen boundaries, cursor movement
298
+
299
+ def CalcMaxLineLen(self):
300
+ """get length of longest line on screen"""
301
+ maxlen = 0
302
+ for line in self.lines[self.sy:self.sy+self.sh]:
303
+ if len(line) >maxlen:
304
+ maxlen = len(line)
305
+ return maxlen
306
+
307
+ def KeepCursorOnScreen(self):
308
+ self.sy = ForceBetween(max(0, self.cy-self.sh), self.sy, self.cy)
309
+ self.sx = ForceBetween(max(0, self.cx-self.sw), self.sx, self.cx)
310
+ self.AdjustScrollbars()
311
+
312
+ def HorizBoundaries(self):
313
+ self.SetCharDimensions()
314
+ maxLineLen = self.CalcMaxLineLen()
315
+ self.sx = ForceBetween(0, self.sx, max(self.sw, maxLineLen - self.sw + 1))
316
+ self.cx = ForceBetween(self.sx, self.cx, self.sx + self.sw - 1)
317
+
318
+ def VertBoundaries(self):
319
+ self.SetCharDimensions()
320
+ self.sy = ForceBetween(0, self.sy, max(self.sh, self.LinesInFile() - self.sh + 1))
321
+ self.cy = ForceBetween(self.sy, self.cy, self.sy + self.sh - 1)
322
+
323
+ def cVert(self, num):
324
+ self.cy = self.cy + num
325
+ self.cy = ForceBetween(0, self.cy, self.LinesInFile() - 1)
326
+ self.sy = ForceBetween(self.cy - self.sh + 1, self.sy, self.cy)
327
+ self.cx = min(self.cx, self.CurrentLineLength())
328
+
329
+ def cHoriz(self, num):
330
+ self.cx = self.cx + num
331
+ self.cx = ForceBetween(0, self.cx, self.CurrentLineLength())
332
+ self.sx = ForceBetween(self.cx - self.sw + 1, self.sx, self.cx)
333
+
334
+ def AboveScreen(self, row):
335
+ return row < self.sy
336
+
337
+ def BelowScreen(self, row):
338
+ return row >= self.sy + self.sh
339
+
340
+ def LeftOfScreen(self, col):
341
+ return col < self.sx
342
+
343
+ def RightOfScreen(self, col):
344
+ return col >= self.sx + self.sw
345
+
346
+ ##----------------- data structure helper functions
347
+
348
+ def GetText(self):
349
+ return self.lines
350
+
351
+ def SetText(self, lines):
352
+ self.InitCoords()
353
+ self.lines = lines
354
+ self.UnTouchBuffer()
355
+ self.SelectOff()
356
+ self.AdjustScrollbars()
357
+ self.UpdateView(None)
358
+
359
+ def IsLine(self, lineNum):
360
+ return (0<=lineNum) and (lineNum<self.LinesInFile())
361
+
362
+ def GetTextLine(self, lineNum):
363
+ if self.IsLine(lineNum):
364
+ return self.lines[lineNum]
365
+ return ""
366
+
367
+ def SetTextLine(self, lineNum, text):
368
+ if self.IsLine(lineNum):
369
+ self.lines[lineNum] = text
370
+
371
+ def CurrentLineLength(self):
372
+ return len(self.lines[self.cy])
373
+
374
+ def LinesInFile(self):
375
+ return len(self.lines)
376
+
377
+ def UnTouchBuffer(self):
378
+ self.bufferTouched = False
379
+
380
+ def BufferWasTouched(self):
381
+ return self.bufferTouched
382
+
383
+ def TouchBuffer(self):
384
+ self.bufferTouched = True
385
+
386
+
387
+ ##-------------------------- Mouse scroll timing functions
388
+
389
+ def InitScrolling(self):
390
+ # we don't rely on the windows system to scroll for us; we just
391
+ # redraw the screen manually every time
392
+ self.EnableScrolling(False, False)
393
+ self.nextScrollTime = 0
394
+ self.SCROLLDELAY = 0.050 # seconds
395
+ self.scrollTimer = wx.Timer(self)
396
+ self.scroller = Scroller(self)
397
+
398
+ def CanScroll(self):
399
+ if time.time() > self.nextScrollTime:
400
+ self.nextScrollTime = time.time() + self.SCROLLDELAY
401
+ return True
402
+ else:
403
+ return False
404
+
405
+ def SetScrollTimer(self):
406
+ oneShot = True
407
+ self.scrollTimer.Start(1000*self.SCROLLDELAY/2, oneShot)
408
+ self.Bind(wx.EVT_TIMER, self.OnTimer)
409
+
410
+ def OnTimer(self, event):
411
+ screenX, screenY = wx.GetMousePosition()
412
+ x, y = self.ScreenToClient((screenX, screenY))
413
+ self.MouseToRow(y)
414
+ self.MouseToCol(x)
415
+ self.SelectUpdate()
416
+
417
+ ##-------------------------- Mouse off screen functions
418
+
419
+ def HandleAboveScreen(self, row):
420
+ self.SetScrollTimer()
421
+ if self.CanScroll():
422
+ row = self.sy - 1
423
+ row = max(0, row)
424
+ self.cy = row
425
+
426
+ def HandleBelowScreen(self, row):
427
+ self.SetScrollTimer()
428
+ if self.CanScroll():
429
+ row = self.sy + self.sh
430
+ row = min(row, self.LinesInFile() - 1)
431
+ self.cy = row
432
+
433
+ def HandleLeftOfScreen(self, col):
434
+ self.SetScrollTimer()
435
+ if self.CanScroll():
436
+ col = self.sx - 1
437
+ col = max(0,col)
438
+ self.cx = col
439
+
440
+ def HandleRightOfScreen(self, col):
441
+ self.SetScrollTimer()
442
+ if self.CanScroll():
443
+ col = self.sx + self.sw
444
+ col = min(col, self.CurrentLineLength())
445
+ self.cx = col
446
+
447
+ ##------------------------ mousing functions
448
+
449
+ def MouseToRow(self, mouseY):
450
+ row = self.sy + int(mouseY / self.fh)
451
+ if self.AboveScreen(row):
452
+ self.HandleAboveScreen(row)
453
+ elif self.BelowScreen(row):
454
+ self.HandleBelowScreen(row)
455
+ else:
456
+ self.cy = min(row, self.LinesInFile() - 1)
457
+
458
+ def MouseToCol(self, mouseX):
459
+ col = self.sx + int(mouseX / self.fw)
460
+ if self.LeftOfScreen(col):
461
+ self.HandleLeftOfScreen(col)
462
+ elif self.RightOfScreen(col):
463
+ self.HandleRightOfScreen(col)
464
+ else:
465
+ self.cx = min(col, self.CurrentLineLength())
466
+
467
+ def MouseToCursor(self, event):
468
+ self.MouseToRow(event.GetY())
469
+ self.MouseToCol(event.GetX())
470
+
471
+ def OnMotion(self, event):
472
+ if event.LeftIsDown() and self.HasCapture():
473
+ self.Selecting = True
474
+ self.MouseToCursor(event)
475
+ self.SelectUpdate()
476
+
477
+ def OnLeftDown(self, event):
478
+ self.MouseToCursor(event)
479
+ self.SelectBegin = (self.cy, self.cx)
480
+ self.SelectEnd = None
481
+ self.UpdateView()
482
+ self.CaptureMouse()
483
+ self.SetFocus()
484
+
485
+ def OnLeftUp(self, event):
486
+ if not self.HasCapture():
487
+ return
488
+
489
+ if self.SelectEnd is None:
490
+ self.OnClick()
491
+ else:
492
+ self.Selecting = False
493
+ self.SelectNotify(False, self.SelectBegin, self.SelectEnd)
494
+
495
+ self.ReleaseMouse()
496
+ self.scrollTimer.Stop()
497
+
498
+
499
+ #------------------------- Scrolling
500
+
501
+ def HorizScroll(self, event, eventType):
502
+ maxLineLen = self.CalcMaxLineLen()
503
+
504
+ if eventType == wx.wxEVT_SCROLLWIN_LINEUP:
505
+ self.sx -= 1
506
+ elif eventType == wx.wxEVT_SCROLLWIN_LINEDOWN:
507
+ self.sx += 1
508
+ elif eventType == wx.wxEVT_SCROLLWIN_PAGEUP:
509
+ self.sx -= self.sw
510
+ elif eventType == wx.wxEVT_SCROLLWIN_PAGEDOWN:
511
+ self.sx += self.sw
512
+ elif eventType == wx.wxEVT_SCROLLWIN_TOP:
513
+ self.sx = self.cx = 0
514
+ elif eventType == wx.wxEVT_SCROLLWIN_BOTTOM:
515
+ self.sx = maxLineLen - self.sw
516
+ self.cx = maxLineLen
517
+ else:
518
+ self.sx = event.GetPosition()
519
+
520
+ self.HorizBoundaries()
521
+
522
+ def VertScroll(self, event, eventType):
523
+ if eventType == wx.wxEVT_SCROLLWIN_LINEUP:
524
+ self.sy -= 1
525
+ elif eventType == wx.wxEVT_SCROLLWIN_LINEDOWN:
526
+ self.sy += 1
527
+ elif eventType == wx.wxEVT_SCROLLWIN_PAGEUP:
528
+ self.sy -= self.sh
529
+ elif eventType == wx.wxEVT_SCROLLWIN_PAGEDOWN:
530
+ self.sy += self.sh
531
+ elif eventType == wx.wxEVT_SCROLLWIN_TOP:
532
+ self.sy = self.cy = 0
533
+ elif eventType == wx.wxEVT_SCROLLWIN_BOTTOM:
534
+ self.sy = self.LinesInFile() - self.sh
535
+ self.cy = self.LinesInFile()
536
+ else:
537
+ self.sy = event.GetPosition()
538
+
539
+ self.VertBoundaries()
540
+
541
+ def OnScroll(self, event):
542
+ dir = event.GetOrientation()
543
+ eventType = event.GetEventType()
544
+ if dir == wx.HORIZONTAL:
545
+ self.HorizScroll(event, eventType)
546
+ else:
547
+ self.VertScroll(event, eventType)
548
+ self.UpdateView()
549
+
550
+
551
+ def AdjustScrollbars(self):
552
+ if self:
553
+ for i in range(2):
554
+ self.SetCharDimensions()
555
+ self.scroller.SetScrollbars(
556
+ self.fw, self.fh,
557
+ self.CalcMaxLineLen()+3, max(self.LinesInFile()+1, self.sh),
558
+ self.sx, self.sy)
559
+
560
+ #------------ backspace, delete, return
561
+
562
+ def BreakLine(self, event):
563
+ if self.IsLine(self.cy):
564
+ t = self.lines[self.cy]
565
+ self.lines = self.lines[:self.cy] + [t[:self.cx],t[self.cx:]] + self.lines[self.cy+1:]
566
+ self.cVert(1)
567
+ self.cx = 0
568
+ self.TouchBuffer()
569
+
570
+ def InsertChar(self,char):
571
+ if self.IsLine(self.cy):
572
+ t = self.lines[self.cy]
573
+ t = t[:self.cx] + char + t[self.cx:]
574
+ self.SetTextLine(self.cy, t)
575
+ self.cHoriz(1)
576
+ self.TouchBuffer()
577
+
578
+ def JoinLines(self):
579
+ t1 = self.lines[self.cy]
580
+ t2 = self.lines[self.cy+1]
581
+ self.cx = len(t1)
582
+ self.lines = self.lines[:self.cy] + [t1 + t2] + self.lines[self.cy+2:]
583
+ self.TouchBuffer()
584
+
585
+
586
+ def DeleteChar(self,x,y,oldtext):
587
+ newtext = oldtext[:x] + oldtext[x+1:]
588
+ self.SetTextLine(y, newtext)
589
+ self.TouchBuffer()
590
+
591
+
592
+ def BackSpace(self, event):
593
+ t = self.GetTextLine(self.cy)
594
+ if self.cx>0:
595
+ self.DeleteChar(self.cx-1,self.cy,t)
596
+ self.cHoriz(-1)
597
+ self.TouchBuffer()
598
+ elif self.cx == 0:
599
+ if self.cy > 0:
600
+ self.cy -= 1
601
+ self.JoinLines()
602
+ self.TouchBuffer()
603
+ else:
604
+ wx.Bell()
605
+
606
+ def Delete(self, event):
607
+ t = self.GetTextLine(self.cy)
608
+ if self.cx<len(t):
609
+ self.DeleteChar(self.cx,self.cy,t)
610
+ self.TouchBuffer()
611
+ else:
612
+ if self.cy < len(self.lines) - 1:
613
+ self.JoinLines()
614
+ self.TouchBuffer()
615
+
616
+ def Escape(self, event):
617
+ self.SelectOff()
618
+
619
+ def TabKey(self, event):
620
+ numSpaces = self.SpacesPerTab - (self.cx % self.SpacesPerTab)
621
+ self.SingleLineInsert(' ' * numSpaces)
622
+
623
+ ##----------- selection routines
624
+
625
+ def SelectUpdate(self):
626
+ self.SelectEnd = (self.cy, self.cx)
627
+ self.SelectNotify(self.Selecting, self.SelectBegin, self.SelectEnd)
628
+ self.UpdateView()
629
+
630
+ def NormalizedSelect(self):
631
+ (begin, end) = (self.SelectBegin, self.SelectEnd)
632
+ (bRow, bCol) = begin
633
+ (eRow, eCol) = end
634
+ if (bRow < eRow):
635
+ return (begin, end)
636
+ elif (eRow < bRow):
637
+ return (end, begin)
638
+ else:
639
+ if (bCol < eCol):
640
+ return (begin, end)
641
+ else:
642
+ return (end, begin)
643
+
644
+ def FindSelection(self):
645
+ if self.SelectEnd is None or self.SelectBegin is None:
646
+ wx.Bell()
647
+ return None
648
+ (begin, end) = self.NormalizedSelect()
649
+ (bRow, bCol) = begin
650
+ (eRow, eCol) = end
651
+ return (bRow, bCol, eRow, eCol)
652
+
653
+ def SelectOff(self):
654
+ self.SelectBegin = None
655
+ self.SelectEnd = None
656
+ self.Selecting = False
657
+ self.SelectNotify(False,None,None)
658
+
659
+ def CopySelection(self, event):
660
+ selection = self.FindSelection()
661
+ if selection is None:
662
+ return
663
+ (bRow, bCol, eRow, eCol) = selection
664
+
665
+ if bRow == eRow:
666
+ self.SingleLineCopy(bRow, bCol, eCol)
667
+ else:
668
+ self.MultipleLineCopy(bRow, bCol, eRow, eCol)
669
+
670
+ def OnCopySelection(self, event):
671
+ self.CopySelection(event)
672
+ self.SelectOff()
673
+
674
+ def CopyToClipboard(self, linesOfText):
675
+ do = wx.TextDataObject()
676
+ do.SetText(os.linesep.join(linesOfText))
677
+ wx.TheClipboard.Open()
678
+ wx.TheClipboard.SetData(do)
679
+ wx.TheClipboard.Close()
680
+
681
+ def SingleLineCopy(self, Row, bCol, eCol):
682
+ Line = self.GetTextLine(Row)
683
+ self.CopyToClipboard([Line[bCol:eCol]])
684
+
685
+ def MultipleLineCopy(self, bRow, bCol, eRow, eCol):
686
+ bLine = self.GetTextLine(bRow)[bCol:]
687
+ eLine = self.GetTextLine(eRow)[:eCol]
688
+ self.CopyToClipboard([bLine] + [l for l in self.lines[bRow + 1:eRow]] + [eLine])
689
+
690
+ def OnDeleteSelection(self, event):
691
+ selection = self.FindSelection()
692
+ if selection is None:
693
+ return
694
+ (bRow, bCol, eRow, eCol) = selection
695
+
696
+ if bRow == eRow:
697
+ self.SingleLineDelete(bRow, bCol, eCol)
698
+ else:
699
+ self.MultipleLineDelete(bRow, bCol, eRow, eCol)
700
+
701
+ self.TouchBuffer()
702
+
703
+ self.cy = bRow
704
+ self.cx = bCol
705
+ self.SelectOff()
706
+ self.UpdateView()
707
+
708
+
709
+ def SingleLineDelete(self, Row, bCol, eCol):
710
+ ModLine = self.GetTextLine(Row)
711
+ ModLine = ModLine[:bCol] + ModLine[eCol:]
712
+ self.SetTextLine(Row,ModLine)
713
+
714
+ def MultipleLineDelete(self, bRow, bCol, eRow, eCol):
715
+ bLine = self.GetTextLine(bRow)
716
+ eLine = self.GetTextLine(eRow)
717
+ ModLine = bLine[:bCol] + eLine[eCol:]
718
+ self.lines[bRow:eRow + 1] = [ModLine]
719
+
720
+ def OnPaste(self, event):
721
+ do = wx.TextDataObject()
722
+ wx.TheClipboard.Open()
723
+ success = wx.TheClipboard.GetData(do)
724
+ wx.TheClipboard.Close()
725
+ if success:
726
+ pastedLines = LineSplitter(do.GetText())
727
+ else:
728
+ wx.Bell()
729
+ return
730
+ if len(pastedLines) == 0:
731
+ wx.Bell()
732
+ return
733
+ elif len(pastedLines) == 1:
734
+ self.SingleLineInsert(pastedLines[0])
735
+ else:
736
+ self.MultipleLinePaste(pastedLines)
737
+
738
+ def SingleLineInsert(self, newText):
739
+ ModLine = self.GetTextLine(self.cy)
740
+ ModLine = ModLine[:self.cx] + newText + ModLine[self.cx:]
741
+ self.SetTextLine(self.cy, ModLine)
742
+ self.cHoriz(len(newText))
743
+ self.TouchBuffer()
744
+ self.UpdateView()
745
+
746
+ def MultipleLinePaste(self, pastedLines):
747
+ FirstLine = LastLine = self.GetTextLine(self.cy)
748
+ FirstLine = FirstLine[:self.cx] + pastedLines[0]
749
+ LastLine = pastedLines[-1] + LastLine[self.cx:]
750
+
751
+ NewSlice = [FirstLine]
752
+ NewSlice += [l for l in pastedLines[1:-1]]
753
+ NewSlice += [LastLine]
754
+ self.lines[self.cy:self.cy + 1] = NewSlice
755
+
756
+ self.cy = self.cy + len(pastedLines)-1
757
+ self.cx = len(pastedLines[-1])
758
+ self.TouchBuffer()
759
+ self.UpdateView()
760
+
761
+ def OnCutSelection(self,event):
762
+ self.CopySelection(event)
763
+ self.OnDeleteSelection(event)
764
+
765
+ #-------------- Keyboard movement implementations
766
+
767
+ def MoveDown(self, event):
768
+ self.cVert(+1)
769
+
770
+ def MoveUp(self, event):
771
+ self.cVert(-1)
772
+
773
+ def MoveLeft(self, event):
774
+ if self.cx == 0:
775
+ if self.cy == 0:
776
+ wx.Bell()
777
+ else:
778
+ self.cVert(-1)
779
+ self.cx = self.CurrentLineLength()
780
+ else:
781
+ self.cx -= 1
782
+
783
+ def MoveRight(self, event):
784
+ linelen = self.CurrentLineLength()
785
+ if self.cx == linelen:
786
+ if self.cy == len(self.lines) - 1:
787
+ wx.Bell()
788
+ else:
789
+ self.cx = 0
790
+ self.cVert(1)
791
+ else:
792
+ self.cx += 1
793
+
794
+
795
+ def MovePageDown(self, event):
796
+ self.cVert(self.sh)
797
+
798
+ def MovePageUp(self, event):
799
+ self.cVert(-self.sh)
800
+
801
+ def MoveHome(self, event):
802
+ self.cx = 0
803
+
804
+ def MoveEnd(self, event):
805
+ self.cx = self.CurrentLineLength()
806
+
807
+ def MoveStartOfFile(self, event):
808
+ self.cy = 0
809
+ self.cx = 0
810
+
811
+ def MoveEndOfFile(self, event):
812
+ self.cy = len(self.lines) - 1
813
+ self.cx = self.CurrentLineLength()
814
+
815
+ #-------------- Key handler mapping tables
816
+
817
+ def SetMoveSpecialFuncs(self, action):
818
+ action[wx.WXK_DOWN] = self.MoveDown
819
+ action[wx.WXK_UP] = self.MoveUp
820
+ action[wx.WXK_LEFT] = self.MoveLeft
821
+ action[wx.WXK_RIGHT] = self.MoveRight
822
+ action[wx.WXK_PAGEDOWN] = self.MovePageDown
823
+ action[wx.WXK_PAGEUP] = self.MovePageUp
824
+ action[wx.WXK_HOME] = self.MoveHome
825
+ action[wx.WXK_END] = self.MoveEnd
826
+
827
+ def SetMoveSpecialControlFuncs(self, action):
828
+ action[wx.WXK_HOME] = self.MoveStartOfFile
829
+ action[wx.WXK_END] = self.MoveEndOfFile
830
+
831
+ def SetAltFuncs(self, action):
832
+ # subclass implements
833
+ pass
834
+
835
+ def SetControlFuncs(self, action):
836
+ action['c'] = self.OnCopySelection
837
+ action['d'] = self.OnDeleteSelection
838
+ action['v'] = self.OnPaste
839
+ action['x'] = self.OnCutSelection
840
+
841
+ def SetSpecialControlFuncs(self, action):
842
+ action[wx.WXK_INSERT] = self.OnCopySelection
843
+
844
+ def SetShiftFuncs(self, action):
845
+ action[wx.WXK_DELETE] = self.OnCutSelection
846
+ action[wx.WXK_INSERT] = self.OnPaste
847
+
848
+ def SetSpecialFuncs(self, action):
849
+ action[wx.WXK_BACK] = self.BackSpace
850
+ action[wx.WXK_DELETE] = self.Delete
851
+ action[wx.WXK_RETURN] = self.BreakLine
852
+ action[wx.WXK_ESCAPE] = self.Escape
853
+ action[wx.WXK_TAB] = self.TabKey
854
+
855
+ ##-------------- Logic for key handlers
856
+
857
+
858
+ def Move(self, keySettingFunction, key, event):
859
+ action = {}
860
+ keySettingFunction(action)
861
+
862
+ if not key in action:
863
+ return False
864
+
865
+ if event.ShiftDown():
866
+ if not self.Selecting:
867
+ self.Selecting = True
868
+ self.SelectBegin = (self.cy, self.cx)
869
+ action[key](event)
870
+ self.SelectEnd = (self.cy, self.cx)
871
+ else:
872
+ action[key](event)
873
+ if self.Selecting:
874
+ self.Selecting = False
875
+
876
+ self.SelectNotify(self.Selecting, self.SelectBegin, self.SelectEnd)
877
+ self.UpdateView()
878
+ return True
879
+
880
+ def MoveSpecialKey(self, event, key):
881
+ return self.Move(self.SetMoveSpecialFuncs, key, event)
882
+
883
+ def MoveSpecialControlKey(self, event, key):
884
+ if not event.ControlDown():
885
+ return False
886
+ return self.Move(self.SetMoveSpecialControlFuncs, key, event)
887
+
888
+ def Dispatch(self, keySettingFunction, key, event):
889
+ action = {}
890
+ keySettingFunction(action)
891
+ if key in action:
892
+ action[key](event)
893
+ self.UpdateView()
894
+ return True
895
+ return False
896
+
897
+ def ModifierKey(self, key, event, modifierKeyDown, MappingFunc):
898
+ if not modifierKeyDown:
899
+ return False
900
+
901
+ key = self.UnixKeyHack(key)
902
+ try:
903
+ key = chr(key)
904
+ except Exception:
905
+ return False
906
+ if not self.Dispatch(MappingFunc, key, event):
907
+ wx.Bell()
908
+ return True
909
+
910
+ def ControlKey(self, event, key):
911
+ return self.ModifierKey(key, event, event.ControlDown(), self.SetControlFuncs)
912
+
913
+ def AltKey(self, event, key):
914
+ return self.ModifierKey(key, event, event.AltDown(), self.SetAltFuncs)
915
+
916
+ def SpecialControlKey(self, event, key):
917
+ if not event.ControlDown():
918
+ return False
919
+ if not self.Dispatch(self.SetSpecialControlFuncs, key, event):
920
+ wx.Bell()
921
+ return True
922
+
923
+ def ShiftKey(self, event, key):
924
+ if not event.ShiftDown():
925
+ return False
926
+ return self.Dispatch(self.SetShiftFuncs, key, event)
927
+
928
+ def NormalChar(self, event, key):
929
+ self.SelectOff()
930
+
931
+ # regular ascii
932
+ if not self.Dispatch(self.SetSpecialFuncs, key, event):
933
+ if (key>31) and (key<256):
934
+ self.InsertChar(chr(key))
935
+ else:
936
+ wx.Bell()
937
+ return
938
+ self.UpdateView()
939
+ self.AdjustScrollbars()
940
+
941
+ def OnChar(self, event):
942
+ key = event.GetKeyCode()
943
+ filters = [self.AltKey,
944
+ self.MoveSpecialControlKey,
945
+ self.ControlKey,
946
+ self.SpecialControlKey,
947
+ self.MoveSpecialKey,
948
+ self.ShiftKey,
949
+ self.NormalChar]
950
+ for filter in filters:
951
+ if filter(event,key):
952
+ break
953
+ return 0
954
+
955
+ #----------------------- Eliminate memory leaks
956
+
957
+ def OnDestroy(self, event):
958
+ self.mdc = None
959
+ self.odc = None
960
+ self.bgColor = None
961
+ self.fgColor = None
962
+ self.font = None
963
+ self.selectColor = None
964
+ self.scrollTimer = None
965
+ self.eofMarker = None
966
+
967
+ #-------------------- Abstract methods for subclasses
968
+
969
+ def OnClick(self):
970
+ pass
971
+
972
+ def SelectNotify(self, Selecting, SelectionBegin, SelectionEnd):
973
+ pass
974
+