wxPython 4.3.2__cp315-cp315-win_arm64.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 (471) 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_arm64.pyd +0 -0
  7. wx/_aui.cp315-win_arm64.pyd +0 -0
  8. wx/_core.cp315-win_arm64.pyd +0 -0
  9. wx/_dataview.cp315-win_arm64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_arm64.pyd +0 -0
  11. wx/_grid.cp315-win_arm64.pyd +0 -0
  12. wx/_html.cp315-win_arm64.pyd +0 -0
  13. wx/_html2.cp315-win_arm64.pyd +0 -0
  14. wx/_media.cp315-win_arm64.pyd +0 -0
  15. wx/_msw.cp315-win_arm64.pyd +0 -0
  16. wx/_propgrid.cp315-win_arm64.pyd +0 -0
  17. wx/_ribbon.cp315-win_arm64.pyd +0 -0
  18. wx/_richtext.cp315-win_arm64.pyd +0 -0
  19. wx/_stc.cp315-win_arm64.pyd +0 -0
  20. wx/_xml.cp315-win_arm64.pyd +0 -0
  21. wx/_xrc.cp315-win_arm64.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/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  330. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/media.py +30 -0
  376. wx/media.pyi +272 -0
  377. wx/msw.py +16 -0
  378. wx/msw.pyi +91 -0
  379. wx/propgrid.py +498 -0
  380. wx/propgrid.pyi +7427 -0
  381. wx/py/CHANGES.txt +796 -0
  382. wx/py/Py.ico +0 -0
  383. wx/py/PyAlaCarte.py +34 -0
  384. wx/py/PyAlaMode.py +34 -0
  385. wx/py/PyAlaModeTest.py +33 -0
  386. wx/py/PyCrust.ico +0 -0
  387. wx/py/PyCrust.py +78 -0
  388. wx/py/PyCrust_16.png +0 -0
  389. wx/py/PyCrust_32.png +0 -0
  390. wx/py/PyFilling.py +35 -0
  391. wx/py/PyShell.py +78 -0
  392. wx/py/PySlices.ico +0 -0
  393. wx/py/PySlices.py +98 -0
  394. wx/py/PySlicesShell.py +94 -0
  395. wx/py/PySlices_16.png +0 -0
  396. wx/py/PySlices_32.png +0 -0
  397. wx/py/PyWrap.py +52 -0
  398. wx/py/README.txt +77 -0
  399. wx/py/__init__.py +20 -0
  400. wx/py/buffer.py +136 -0
  401. wx/py/crust.py +403 -0
  402. wx/py/crustslices.py +403 -0
  403. wx/py/dispatcher.py +259 -0
  404. wx/py/document.py +37 -0
  405. wx/py/editor.py +844 -0
  406. wx/py/editwindow.py +316 -0
  407. wx/py/filling.py +358 -0
  408. wx/py/frame.py +976 -0
  409. wx/py/images.py +212 -0
  410. wx/py/interpreter.py +161 -0
  411. wx/py/introspect.py +402 -0
  412. wx/py/magic.py +98 -0
  413. wx/py/parse.py +134 -0
  414. wx/py/path.py +36 -0
  415. wx/py/pseudo.py +99 -0
  416. wx/py/shell.py +1579 -0
  417. wx/py/sliceshell.py +3805 -0
  418. wx/py/tests/test_interpreter.py +71 -0
  419. wx/py/tests/test_introspect.py +810 -0
  420. wx/py/tests/test_pseudo.py +70 -0
  421. wx/py/tests/test_version.py +36 -0
  422. wx/py/tests/testall.py +22 -0
  423. wx/py/version.py +7 -0
  424. wx/py.typed +0 -0
  425. wx/ribbon.py +48 -0
  426. wx/ribbon.pyi +3099 -0
  427. wx/richtext.py +141 -0
  428. wx/richtext.pyi +13581 -0
  429. wx/siplib.cp315-win_arm64.pyd +0 -0
  430. wx/siplib.pyi +19 -0
  431. wx/stc.py +59 -0
  432. wx/stc.pyi +9918 -0
  433. wx/svg/__init__.py +363 -0
  434. wx/svg/_nanosvg.cp315-win_arm64.pyd +0 -0
  435. wx/tools/__init__.py +18 -0
  436. wx/tools/dbg.py +268 -0
  437. wx/tools/genaxmodule.py +50 -0
  438. wx/tools/helpviewer.py +92 -0
  439. wx/tools/img2img.py +85 -0
  440. wx/tools/img2png.py +54 -0
  441. wx/tools/img2py.py +306 -0
  442. wx/tools/img2xpm.py +54 -0
  443. wx/tools/pywxrc.py +951 -0
  444. wx/tools/wxget.py +254 -0
  445. wx/tools/wxget_docs_demo.py +183 -0
  446. wx/wxbase334u_net_vc140_arm64.dll +0 -0
  447. wx/wxbase334u_vc140_arm64.dll +0 -0
  448. wx/wxbase334u_xml_vc140_arm64.dll +0 -0
  449. wx/wxmsw334u_adv_vc140_arm64.dll +0 -0
  450. wx/wxmsw334u_aui_vc140_arm64.dll +0 -0
  451. wx/wxmsw334u_core_vc140_arm64.dll +0 -0
  452. wx/wxmsw334u_gl_vc140_arm64.dll +0 -0
  453. wx/wxmsw334u_html_vc140_arm64.dll +0 -0
  454. wx/wxmsw334u_media_vc140_arm64.dll +0 -0
  455. wx/wxmsw334u_propgrid_vc140_arm64.dll +0 -0
  456. wx/wxmsw334u_qa_vc140_arm64.dll +0 -0
  457. wx/wxmsw334u_ribbon_vc140_arm64.dll +0 -0
  458. wx/wxmsw334u_richtext_vc140_arm64.dll +0 -0
  459. wx/wxmsw334u_stc_vc140_arm64.dll +0 -0
  460. wx/wxmsw334u_webview_vc140_arm64.dll +0 -0
  461. wx/wxmsw334u_xrc_vc140_arm64.dll +0 -0
  462. wx/xml.py +18 -0
  463. wx/xml.pyi +728 -0
  464. wx/xrc.py +68 -0
  465. wx/xrc.pyi +896 -0
  466. wxpython-4.3.2.dist-info/METADATA +71 -0
  467. wxpython-4.3.2.dist-info/RECORD +471 -0
  468. wxpython-4.3.2.dist-info/WHEEL +5 -0
  469. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  470. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  471. wxpython-4.3.2.dist-info/top_level.txt +1 -0
wx/py/frame.py ADDED
@@ -0,0 +1,976 @@
1
+ """Base frame with menu."""
2
+
3
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
4
+
5
+ import wx
6
+ import os
7
+ from .version import VERSION
8
+ from . import editwindow
9
+ from . import dispatcher
10
+
11
+ ID_NEW = wx.ID_NEW
12
+ ID_OPEN = wx.ID_OPEN
13
+ ID_REVERT = wx.ID_REVERT
14
+ ID_CLOSE = wx.ID_CLOSE
15
+ ID_SAVE = wx.ID_SAVE
16
+ ID_SAVEAS = wx.ID_SAVEAS
17
+ ID_PRINT = wx.ID_PRINT
18
+ ID_EXIT = wx.ID_EXIT
19
+ ID_UNDO = wx.ID_UNDO
20
+ ID_REDO = wx.ID_REDO
21
+ ID_CUT = wx.ID_CUT
22
+ ID_COPY = wx.ID_COPY
23
+ ID_PASTE = wx.ID_PASTE
24
+ ID_CLEAR = wx.ID_CLEAR
25
+ ID_SELECTALL = wx.ID_SELECTALL
26
+ ID_EMPTYBUFFER = wx.NewIdRef()
27
+ ID_ABOUT = wx.ID_ABOUT
28
+ ID_HELP = wx.NewIdRef()
29
+ ID_AUTOCOMP_SHOW = wx.NewIdRef()
30
+ ID_AUTOCOMP_MAGIC = wx.NewIdRef()
31
+ ID_AUTOCOMP_SINGLE = wx.NewIdRef()
32
+ ID_AUTOCOMP_DOUBLE = wx.NewIdRef()
33
+ ID_CALLTIPS_SHOW = wx.NewIdRef()
34
+ ID_CALLTIPS_INSERT = wx.NewIdRef()
35
+ ID_COPY_PLUS = wx.NewIdRef()
36
+ ID_NAMESPACE = wx.NewIdRef()
37
+ ID_PASTE_PLUS = wx.NewIdRef()
38
+ ID_WRAP = wx.NewIdRef()
39
+ ID_TOGGLE_MAXIMIZE = wx.NewIdRef()
40
+ ID_SHOW_LINENUMBERS = wx.NewIdRef()
41
+ ID_ENABLESHELLMODE = wx.NewIdRef()
42
+ ID_ENABLEAUTOSYMPY = wx.NewIdRef()
43
+ ID_AUTO_SAVESETTINGS = wx.NewIdRef()
44
+ ID_SAVEACOPY = wx.NewIdRef()
45
+ ID_SAVEHISTORY = wx.NewIdRef()
46
+ ID_SAVEHISTORYNOW = wx.NewIdRef()
47
+ ID_CLEARHISTORY = wx.NewIdRef()
48
+ ID_SAVESETTINGS = wx.NewIdRef()
49
+ ID_DELSETTINGSFILE = wx.NewIdRef()
50
+ ID_EDITSTARTUPSCRIPT = wx.NewIdRef()
51
+ ID_EXECSTARTUPSCRIPT = wx.NewIdRef()
52
+ ID_SHOWPYSLICESTUTORIAL = wx.NewIdRef()
53
+ ID_FIND = wx.ID_FIND
54
+ ID_FINDNEXT = wx.NewIdRef()
55
+ ID_FINDPREVIOUS = wx.NewIdRef()
56
+ ID_SHOWTOOLS = wx.NewIdRef()
57
+ ID_HIDEFOLDINGMARGIN = wx.NewIdRef()
58
+
59
+
60
+
61
+ class Frame(wx.Frame):
62
+ """Frame with standard menu items."""
63
+
64
+
65
+ def __init__(self, parent=None, id=-1, title='Editor',
66
+ pos=wx.DefaultPosition, size=wx.DefaultSize,
67
+ style=wx.DEFAULT_FRAME_STYLE,shellName='PyCrust'):
68
+ """Create a Frame instance."""
69
+ wx.Frame.__init__(self, parent, id, title, pos, size, style)
70
+ self.CreateStatusBar()
71
+ self.SetStatusText('Frame')
72
+ self.shellName=shellName
73
+ from . import images
74
+ self.SetIcon(images.getPyIcon(shellName=shellName))
75
+ self.__createMenus()
76
+
77
+ self.iconized = False
78
+ self.findDlg = None
79
+ self.findData = wx.FindReplaceData()
80
+ self.findData.SetFlags(wx.FR_DOWN)
81
+
82
+ self.Bind(wx.EVT_CLOSE, self.OnClose)
83
+ self.Bind(wx.EVT_ICONIZE, self.OnIconize)
84
+
85
+
86
+ def OnIconize(self, event):
87
+ """Event handler for Iconize."""
88
+ self.iconized = event.IsIconized()
89
+
90
+
91
+ def OnClose(self, event):
92
+ """Event handler for closing."""
93
+ self.Destroy()
94
+
95
+
96
+ def __createMenus(self):
97
+ # File Menu
98
+ m = self.fileMenu = wx.Menu()
99
+ m.Append(ID_NEW, '&New \tCtrl+N',
100
+ 'New file')
101
+ m.Append(ID_OPEN, '&Open... \tCtrl+O',
102
+ 'Open file')
103
+ m.AppendSeparator()
104
+ m.Append(ID_REVERT, '&Revert \tCtrl+R',
105
+ 'Revert to last saved version')
106
+ m.Append(ID_CLOSE, '&Close \tCtrl+W',
107
+ 'Close file')
108
+ m.AppendSeparator()
109
+ m.Append(ID_SAVE, '&Save... \tCtrl+S',
110
+ 'Save file')
111
+ m.Append(ID_SAVEAS, 'Save &As \tCtrl+Shift+S',
112
+ 'Save file with new name')
113
+ if self.shellName in ['PySlices','SymPySlices']:
114
+ m.Append(ID_SAVEACOPY, 'Save A Cop&y',
115
+ 'Save a copy of the file without changing the current file')
116
+ m.AppendSeparator()
117
+ m.Append(ID_PRINT, '&Print... \tCtrl+P',
118
+ 'Print file')
119
+ m.AppendSeparator()
120
+ m.Append(ID_NAMESPACE, '&Update Namespace \tCtrl+Shift+N',
121
+ 'Update namespace for autocompletion and calltips')
122
+ m.AppendSeparator()
123
+ m.Append(ID_EXIT, 'E&xit\tCtrl+Q', 'Exit Program')
124
+
125
+ # Edit
126
+ m = self.editMenu = wx.Menu()
127
+ m.Append(ID_UNDO, '&Undo \tCtrl+Z',
128
+ 'Undo the last action')
129
+ m.Append(ID_REDO, '&Redo \tCtrl+Y',
130
+ 'Redo the last undone action')
131
+ m.AppendSeparator()
132
+ m.Append(ID_CUT, 'Cu&t \tCtrl+X',
133
+ 'Cut the selection')
134
+ m.Append(ID_COPY, '&Copy \tCtrl+C',
135
+ 'Copy the selection')
136
+ m.Append(ID_COPY_PLUS, 'Cop&y Plus \tCtrl+Shift+C',
137
+ 'Copy the selection - retaining prompts')
138
+ m.Append(ID_PASTE, '&Paste \tCtrl+V', 'Paste from clipboard')
139
+ m.Append(ID_PASTE_PLUS, 'Past&e Plus \tCtrl+Shift+V',
140
+ 'Paste and run commands')
141
+ m.AppendSeparator()
142
+ m.Append(ID_CLEAR, 'Cle&ar',
143
+ 'Delete the selection')
144
+ m.Append(ID_SELECTALL, 'Select A&ll \tCtrl+A',
145
+ 'Select all text')
146
+ m.AppendSeparator()
147
+ m.Append(ID_EMPTYBUFFER, 'E&mpty Buffer...',
148
+ 'Delete all the contents of the edit buffer')
149
+ m.Append(ID_FIND, '&Find Text... \tCtrl+F',
150
+ 'Search for text in the edit buffer')
151
+ m.Append(ID_FINDNEXT, 'Find &Next \tCtrl+G',
152
+ 'Find next instance of the search text')
153
+ m.Append(ID_FINDPREVIOUS, 'Find Pre&vious \tCtrl+Shift+G',
154
+ 'Find previous instance of the search text')
155
+
156
+ # View
157
+ m = self.viewMenu = wx.Menu()
158
+ m.Append(ID_WRAP, '&Wrap Lines\tCtrl+Shift+W',
159
+ 'Wrap lines at right edge', wx.ITEM_CHECK)
160
+ m.Append(ID_SHOW_LINENUMBERS, '&Show Line Numbers\tCtrl+Shift+L',
161
+ 'Show Line Numbers', wx.ITEM_CHECK)
162
+ m.Append(ID_TOGGLE_MAXIMIZE, '&Toggle Maximize\tF11',
163
+ 'Maximize/Restore Application')
164
+ if hasattr(self, 'ToggleTools'):
165
+ m.Append(ID_SHOWTOOLS,
166
+ 'Show &Tools\tF4',
167
+ 'Show the filling and other tools', wx.ITEM_CHECK)
168
+ if self.shellName==['PySlices','SymPySlices']:
169
+ m.Append(ID_HIDEFOLDINGMARGIN,
170
+ '&Hide Folding Margin',
171
+ 'Hide Folding Margin', wx.ITEM_CHECK)
172
+
173
+ # Options
174
+ m = self.autocompMenu = wx.Menu()
175
+ m.Append(ID_AUTOCOMP_SHOW, 'Show &Auto Completion\tCtrl+Shift+A',
176
+ 'Show auto completion list', wx.ITEM_CHECK)
177
+ m.Append(ID_AUTOCOMP_MAGIC, 'Include &Magic Attributes\tCtrl+Shift+M',
178
+ 'Include attributes visible to __getattr__ and __setattr__',
179
+ wx.ITEM_CHECK)
180
+ m.Append(ID_AUTOCOMP_SINGLE, 'Include Single &Underscores\tCtrl+Shift+U',
181
+ 'Include attributes prefixed by a single underscore', wx.ITEM_CHECK)
182
+ m.Append(ID_AUTOCOMP_DOUBLE, 'Include &Double Underscores\tCtrl+Shift+D',
183
+ 'Include attributes prefixed by a double underscore', wx.ITEM_CHECK)
184
+ m = self.calltipsMenu = wx.Menu()
185
+ m.Append(ID_CALLTIPS_SHOW, 'Show Call &Tips\tCtrl+Shift+T',
186
+ 'Show call tips with argument signature and docstring', wx.ITEM_CHECK)
187
+ m.Append(ID_CALLTIPS_INSERT, '&Insert Call Tips\tCtrl+Shift+I',
188
+ '&Insert Call Tips', wx.ITEM_CHECK)
189
+
190
+ m = self.optionsMenu = wx.Menu()
191
+ m.AppendSubMenu(self.autocompMenu, '&Auto Completion',
192
+ 'Auto Completion Options')
193
+ m.AppendSubMenu(self.calltipsMenu, '&Call Tips', 'Call Tip Options')
194
+
195
+ m.AppendSeparator()
196
+
197
+ self.historyMenu = wx.Menu()
198
+ self.historyMenu.Append(ID_SAVEHISTORY, '&Autosave History',
199
+ 'Automatically save history on close', wx.ITEM_CHECK)
200
+ self.historyMenu.Append(ID_SAVEHISTORYNOW, '&Save History Now',
201
+ 'Save history')
202
+ self.historyMenu.Append(ID_CLEARHISTORY, '&Clear History ',
203
+ 'Clear history')
204
+ m.AppendSubMenu(self.historyMenu, "&History", "History Options")
205
+
206
+ self.startupMenu = wx.Menu()
207
+ self.startupMenu.Append(ID_EXECSTARTUPSCRIPT,
208
+ 'E&xecute Startup Script',
209
+ 'Execute Startup Script', wx.ITEM_CHECK)
210
+ self.startupMenu.Append(ID_EDITSTARTUPSCRIPT,
211
+ '&Edit Startup Script...',
212
+ 'Edit Startup Script')
213
+ if self.shellName in ['PySlices','SymPySlices']:
214
+ self.startupMenu.Append(ID_SHOWPYSLICESTUTORIAL,
215
+ '&Show PySlices Tutorial',
216
+ 'Show PySlices Tutorial', wx.ITEM_CHECK)
217
+ m.AppendSubMenu(self.startupMenu, '&Startup', 'Startup Options')
218
+
219
+ self.settingsMenu = wx.Menu()
220
+ if self.shellName in ['PySlices','SymPySlices']:
221
+ self.settingsMenu.Append(ID_ENABLESHELLMODE,
222
+ '&Enable Shell Mode',
223
+ 'Enable Shell Mode', wx.ITEM_CHECK)
224
+ if self.shellName == 'SymPySlices':
225
+ self.settingsMenu.Append(ID_ENABLEAUTOSYMPY,
226
+ '&Enable "Auto-Sympy" Conversions for Undefined Variables',
227
+ 'Enable "Auto-Sympy" Conversions', wx.ITEM_CHECK)
228
+ self.settingsMenu.Append(ID_AUTO_SAVESETTINGS,
229
+ '&Auto Save Settings',
230
+ 'Automatically save settings on close', wx.ITEM_CHECK)
231
+ self.settingsMenu.Append(ID_SAVESETTINGS,
232
+ '&Save Settings',
233
+ 'Save settings now')
234
+ self.settingsMenu.Append(ID_DELSETTINGSFILE,
235
+ '&Revert to default',
236
+ 'Revert to the default settings')
237
+ m.AppendSubMenu(self.settingsMenu, '&Settings', 'Settings Options')
238
+
239
+ m = self.helpMenu = wx.Menu()
240
+ m.Append(ID_HELP, '&Help\tF1', 'Help!')
241
+ m.AppendSeparator()
242
+ m.Append(ID_ABOUT, '&About...', 'About this program')
243
+
244
+ b = self.menuBar = wx.MenuBar()
245
+ b.Append(self.fileMenu, '&File')
246
+ b.Append(self.editMenu, '&Edit')
247
+ b.Append(self.viewMenu, '&View')
248
+ b.Append(self.optionsMenu, '&Options')
249
+ b.Append(self.helpMenu, '&Help')
250
+ self.SetMenuBar(b)
251
+
252
+ self.Bind(wx.EVT_MENU, self.OnFileNew, id=ID_NEW)
253
+ self.Bind(wx.EVT_MENU, self.OnFileOpen, id=ID_OPEN)
254
+ self.Bind(wx.EVT_MENU, self.OnFileRevert, id=ID_REVERT)
255
+ self.Bind(wx.EVT_MENU, self.OnFileClose, id=ID_CLOSE)
256
+ self.Bind(wx.EVT_MENU, self.OnFileSave, id=ID_SAVE)
257
+ self.Bind(wx.EVT_MENU, self.OnFileSaveAs, id=ID_SAVEAS)
258
+ self.Bind(wx.EVT_MENU, self.OnFileSaveACopy, id=ID_SAVEACOPY)
259
+ self.Bind(wx.EVT_MENU, self.OnFileUpdateNamespace, id=ID_NAMESPACE)
260
+ self.Bind(wx.EVT_MENU, self.OnFilePrint, id=ID_PRINT)
261
+ self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)
262
+ self.Bind(wx.EVT_MENU, self.OnUndo, id=ID_UNDO)
263
+ self.Bind(wx.EVT_MENU, self.OnRedo, id=ID_REDO)
264
+ self.Bind(wx.EVT_MENU, self.OnCut, id=ID_CUT)
265
+ self.Bind(wx.EVT_MENU, self.OnCopy, id=ID_COPY)
266
+ self.Bind(wx.EVT_MENU, self.OnCopyPlus, id=ID_COPY_PLUS)
267
+ self.Bind(wx.EVT_MENU, self.OnPaste, id=ID_PASTE)
268
+ self.Bind(wx.EVT_MENU, self.OnPastePlus, id=ID_PASTE_PLUS)
269
+ self.Bind(wx.EVT_MENU, self.OnClear, id=ID_CLEAR)
270
+ self.Bind(wx.EVT_MENU, self.OnSelectAll, id=ID_SELECTALL)
271
+ self.Bind(wx.EVT_MENU, self.OnEmptyBuffer, id=ID_EMPTYBUFFER)
272
+ self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT)
273
+ self.Bind(wx.EVT_MENU, self.OnHelp, id=ID_HELP)
274
+ self.Bind(wx.EVT_MENU, self.OnAutoCompleteShow, id=ID_AUTOCOMP_SHOW)
275
+ self.Bind(wx.EVT_MENU, self.OnAutoCompleteMagic, id=ID_AUTOCOMP_MAGIC)
276
+ self.Bind(wx.EVT_MENU, self.OnAutoCompleteSingle, id=ID_AUTOCOMP_SINGLE)
277
+ self.Bind(wx.EVT_MENU, self.OnAutoCompleteDouble, id=ID_AUTOCOMP_DOUBLE)
278
+ self.Bind(wx.EVT_MENU, self.OnCallTipsShow, id=ID_CALLTIPS_SHOW)
279
+ self.Bind(wx.EVT_MENU, self.OnCallTipsInsert, id=ID_CALLTIPS_INSERT)
280
+ self.Bind(wx.EVT_MENU, self.OnWrap, id=ID_WRAP)
281
+ self.Bind(wx.EVT_MENU, self.OnToggleMaximize, id=ID_TOGGLE_MAXIMIZE)
282
+ self.Bind(wx.EVT_MENU, self.OnShowLineNumbers, id=ID_SHOW_LINENUMBERS)
283
+ self.Bind(wx.EVT_MENU, self.OnEnableShellMode, id=ID_ENABLESHELLMODE)
284
+ self.Bind(wx.EVT_MENU, self.OnEnableAutoSympy, id=ID_ENABLEAUTOSYMPY)
285
+ self.Bind(wx.EVT_MENU, self.OnAutoSaveSettings, id=ID_AUTO_SAVESETTINGS)
286
+ self.Bind(wx.EVT_MENU, self.OnSaveHistory, id=ID_SAVEHISTORY)
287
+ self.Bind(wx.EVT_MENU, self.OnSaveHistoryNow, id=ID_SAVEHISTORYNOW)
288
+ self.Bind(wx.EVT_MENU, self.OnClearHistory, id=ID_CLEARHISTORY)
289
+ self.Bind(wx.EVT_MENU, self.OnSaveSettings, id=ID_SAVESETTINGS)
290
+ self.Bind(wx.EVT_MENU, self.OnDelSettingsFile, id=ID_DELSETTINGSFILE)
291
+ self.Bind(wx.EVT_MENU, self.OnEditStartupScript, id=ID_EDITSTARTUPSCRIPT)
292
+ self.Bind(wx.EVT_MENU, self.OnExecStartupScript, id=ID_EXECSTARTUPSCRIPT)
293
+ self.Bind(wx.EVT_MENU, self.OnShowPySlicesTutorial, id=ID_SHOWPYSLICESTUTORIAL)
294
+ self.Bind(wx.EVT_MENU, self.OnFindText, id=ID_FIND)
295
+ self.Bind(wx.EVT_MENU, self.OnFindNext, id=ID_FINDNEXT)
296
+ self.Bind(wx.EVT_MENU, self.OnFindPrevious, id=ID_FINDPREVIOUS)
297
+ self.Bind(wx.EVT_MENU, self.OnToggleTools, id=ID_SHOWTOOLS)
298
+ self.Bind(wx.EVT_MENU, self.OnHideFoldingMargin, id=ID_HIDEFOLDINGMARGIN)
299
+
300
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NEW)
301
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_OPEN)
302
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_REVERT)
303
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CLOSE)
304
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVE)
305
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEAS)
306
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NAMESPACE)
307
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PRINT)
308
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_UNDO)
309
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_REDO)
310
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CUT)
311
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_COPY)
312
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_COPY_PLUS)
313
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PASTE)
314
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PASTE_PLUS)
315
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CLEAR)
316
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SELECTALL)
317
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EMPTYBUFFER)
318
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_SHOW)
319
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_MAGIC)
320
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_SINGLE)
321
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_DOUBLE)
322
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CALLTIPS_SHOW)
323
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CALLTIPS_INSERT)
324
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_WRAP)
325
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SHOW_LINENUMBERS)
326
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_ENABLESHELLMODE)
327
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_ENABLEAUTOSYMPY)
328
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTO_SAVESETTINGS)
329
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVESETTINGS)
330
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_DELSETTINGSFILE)
331
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EXECSTARTUPSCRIPT)
332
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SHOWPYSLICESTUTORIAL)
333
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEHISTORY)
334
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEHISTORYNOW)
335
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CLEARHISTORY)
336
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EDITSTARTUPSCRIPT)
337
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FIND)
338
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FINDNEXT)
339
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FINDPREVIOUS)
340
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SHOWTOOLS)
341
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_HIDEFOLDINGMARGIN)
342
+
343
+ self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
344
+ self.Bind(wx.EVT_FIND, self.OnFindNext)
345
+ self.Bind(wx.EVT_FIND_NEXT, self.OnFindNext)
346
+ self.Bind(wx.EVT_FIND_CLOSE, self.OnFindClose)
347
+
348
+
349
+
350
+ def OnShowLineNumbers(self, event):
351
+ win = wx.Window.FindFocus()
352
+ if hasattr(win, 'lineNumbers'):
353
+ win.lineNumbers = event.IsChecked()
354
+ win.setDisplayLineNumbers(win.lineNumbers)
355
+
356
+ def OnToggleMaximize(self, event):
357
+ self.Maximize(not self.IsMaximized())
358
+
359
+ def OnFileNew(self, event):
360
+ self.bufferNew()
361
+
362
+ def OnFileOpen(self, event):
363
+ self.bufferOpen()
364
+
365
+ def OnFileRevert(self, event):
366
+ self.bufferRevert()
367
+
368
+ def OnFileClose(self, event):
369
+ self.bufferClose()
370
+
371
+ def OnFileSave(self, event):
372
+ self.bufferSave()
373
+
374
+ def OnFileSaveAs(self, event):
375
+ self.bufferSaveAs()
376
+
377
+ def OnFileSaveACopy(self, event):
378
+ self.bufferSaveACopy()
379
+
380
+ def OnFileUpdateNamespace(self, event):
381
+ self.updateNamespace()
382
+
383
+ def OnFilePrint(self, event):
384
+ self.bufferPrint()
385
+
386
+ def OnExit(self, event):
387
+ self.Close(False)
388
+
389
+ def OnUndo(self, event):
390
+ win = wx.Window.FindFocus()
391
+ win.Undo()
392
+
393
+ def OnRedo(self, event):
394
+ win = wx.Window.FindFocus()
395
+ win.Redo()
396
+
397
+ def OnCut(self, event):
398
+ win = wx.Window.FindFocus()
399
+ win.Cut()
400
+
401
+ def OnCopy(self, event):
402
+ win = wx.Window.FindFocus()
403
+ win.Copy()
404
+
405
+ def OnCopyPlus(self, event):
406
+ win = wx.Window.FindFocus()
407
+ win.CopyWithPrompts()
408
+
409
+ def OnPaste(self, event):
410
+ win = wx.Window.FindFocus()
411
+ win.Paste()
412
+
413
+ def OnPastePlus(self, event):
414
+ win = wx.Window.FindFocus()
415
+ win.PasteAndRun()
416
+
417
+ def OnClear(self, event):
418
+ win = wx.Window.FindFocus()
419
+ win.Clear()
420
+
421
+ def OnEmptyBuffer(self, event):
422
+ win = wx.Window.FindFocus()
423
+ d = wx.MessageDialog(self,
424
+ "Are you sure you want to clear the edit buffer,\n"
425
+ "deleting all the text?",
426
+ "Empty Buffer", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
427
+ answer = d.ShowModal()
428
+ d.Destroy()
429
+ if (answer == wx.ID_OK):
430
+ win.ClearAll()
431
+ if hasattr(win,'prompt'):
432
+ win.prompt()
433
+
434
+ def OnSelectAll(self, event):
435
+ win = wx.Window.FindFocus()
436
+ win.SelectAll()
437
+
438
+ def OnAbout(self, event):
439
+ """Display an About window."""
440
+ title = 'About'
441
+ text = 'Your message here.'
442
+ dialog = wx.MessageDialog(self, text, title,
443
+ wx.OK | wx.ICON_INFORMATION)
444
+ dialog.ShowModal()
445
+ dialog.Destroy()
446
+
447
+ def OnHelp(self, event):
448
+ """Display a Help window."""
449
+ title = 'Help'
450
+ text = "Type 'shell.help()' in the shell window."
451
+ dialog = wx.MessageDialog(self, text, title,
452
+ wx.OK | wx.ICON_INFORMATION)
453
+ dialog.ShowModal()
454
+ dialog.Destroy()
455
+
456
+ def OnAutoCompleteShow(self, event):
457
+ win = wx.Window.FindFocus()
458
+ win.autoComplete = event.IsChecked()
459
+
460
+ def OnAutoCompleteMagic(self, event):
461
+ win = wx.Window.FindFocus()
462
+ win.autoCompleteIncludeMagic = event.IsChecked()
463
+
464
+ def OnAutoCompleteSingle(self, event):
465
+ win = wx.Window.FindFocus()
466
+ win.autoCompleteIncludeSingle = event.IsChecked()
467
+
468
+ def OnAutoCompleteDouble(self, event):
469
+ win = wx.Window.FindFocus()
470
+ win.autoCompleteIncludeDouble = event.IsChecked()
471
+
472
+ def OnCallTipsShow(self, event):
473
+ win = wx.Window.FindFocus()
474
+ win.autoCallTip = event.IsChecked()
475
+
476
+ def OnCallTipsInsert(self, event):
477
+ win = wx.Window.FindFocus()
478
+ win.callTipInsert = event.IsChecked()
479
+
480
+ def OnWrap(self, event):
481
+ win = wx.Window.FindFocus()
482
+ win.SetWrapMode(event.IsChecked())
483
+ wx.CallLater(1, self.shell.EnsureCaretVisible)
484
+
485
+ def OnSaveHistory(self, event):
486
+ self.autoSaveHistory = event.IsChecked()
487
+
488
+ def OnSaveHistoryNow(self, event):
489
+ self.SaveHistory()
490
+
491
+ def OnClearHistory(self, event):
492
+ self.shell.clearHistory()
493
+
494
+ def OnEnableShellMode(self, event):
495
+ self.enableShellMode = event.IsChecked()
496
+
497
+ def OnEnableAutoSympy(self, event):
498
+ self.enableAutoSympy = event.IsChecked()
499
+
500
+ def OnHideFoldingMargin(self, event):
501
+ self.hideFoldingMargin = event.IsChecked()
502
+
503
+ def OnAutoSaveSettings(self, event):
504
+ self.autoSaveSettings = event.IsChecked()
505
+
506
+ def OnSaveSettings(self, event):
507
+ self.DoSaveSettings()
508
+
509
+ def OnDelSettingsFile(self, event):
510
+ if self.config is not None:
511
+ d = wx.MessageDialog(
512
+ self, "Do you want to revert to the default settings?\n" +
513
+ "A restart is needed for the change to take effect",
514
+ "Warning", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
515
+ answer = d.ShowModal()
516
+ d.Destroy()
517
+ if (answer == wx.ID_OK):
518
+ self.config.DeleteAll()
519
+ self.LoadSettings()
520
+
521
+
522
+ def OnEditStartupScript(self, event):
523
+ if hasattr(self, 'EditStartupScript'):
524
+ self.EditStartupScript()
525
+
526
+ def OnExecStartupScript(self, event):
527
+ self.execStartupScript = event.IsChecked()
528
+ self.SaveSettings(force=True)
529
+
530
+ def OnShowPySlicesTutorial(self,event):
531
+ self.showPySlicesTutorial = event.IsChecked()
532
+ self.SaveSettings(force=True)
533
+
534
+ def OnFindText(self, event):
535
+ if self.findDlg is not None:
536
+ return
537
+ win = wx.Window.FindFocus()
538
+ if self.shellName == 'PyCrust':
539
+ self.findDlg = wx.FindReplaceDialog(win, self.findData, "Find")
540
+ else:
541
+ self.findDlg = wx.FindReplaceDialog(win, self.findData, "Find & Replace",
542
+ wx.FR_REPLACEDIALOG)
543
+ self.findDlg.Show()
544
+
545
+ def OnFindNext(self, event, backward=False):
546
+ if not self.findData.GetFindString():
547
+ self.OnFindText(event)
548
+ return
549
+ if isinstance(event, wx.FindDialogEvent):
550
+ win = self.findDlg.GetParent()
551
+ else:
552
+ win = wx.Window.FindFocus()
553
+ if backward:
554
+ self.findData.Flags &= ~wx.FR_DOWN
555
+ else:
556
+ self.findData.Flags |= wx.FR_DOWN
557
+ win.DoFindNext(self.findData, self.findDlg)
558
+ if self.findDlg is not None:
559
+ self.OnFindClose(None)
560
+
561
+ def OnFindPrevious(self, event):
562
+ self.OnFindNext(event, backward=True)
563
+
564
+ def OnFindClose(self, event):
565
+ self.findDlg.Destroy()
566
+ self.findDlg = None
567
+
568
+ def OnToggleTools(self, event):
569
+ self.ToggleTools()
570
+
571
+
572
+ def OnUpdateMenu(self, event):
573
+ """Update menu items based on current status and context."""
574
+ win = wx.Window.FindFocus()
575
+ id = event.GetId()
576
+ event.Enable(True)
577
+ try:
578
+ if id == ID_NEW:
579
+ event.Enable(hasattr(self, 'bufferNew'))
580
+ elif id == ID_OPEN:
581
+ event.Enable(hasattr(self, 'bufferOpen'))
582
+ elif id == ID_REVERT:
583
+ event.Enable(hasattr(self, 'bufferRevert')
584
+ and self.hasBuffer())
585
+ elif id == ID_CLOSE:
586
+ event.Enable(hasattr(self, 'bufferClose')
587
+ and self.hasBuffer())
588
+ elif id == ID_SAVE:
589
+ event.Enable(hasattr(self, 'bufferSave')
590
+ and self.bufferHasChanged())
591
+ elif id == ID_SAVEAS:
592
+ event.Enable(hasattr(self, 'bufferSaveAs')
593
+ and self.hasBuffer())
594
+ elif id == ID_SAVEACOPY:
595
+ event.Enable(hasattr(self, 'bufferSaveACopy')
596
+ and self.hasBuffer())
597
+ elif id == ID_NAMESPACE:
598
+ event.Enable(hasattr(self, 'updateNamespace')
599
+ and self.hasBuffer())
600
+ elif id == ID_PRINT:
601
+ event.Enable(hasattr(self, 'bufferPrint')
602
+ and self.hasBuffer())
603
+ elif id == ID_UNDO:
604
+ event.Enable(win.CanUndo())
605
+ elif id == ID_REDO:
606
+ event.Enable(win.CanRedo())
607
+ elif id == ID_CUT:
608
+ event.Enable(win.CanCut())
609
+ elif id == ID_COPY:
610
+ event.Enable(win.CanCopy())
611
+ elif id == ID_COPY_PLUS:
612
+ event.Enable(win.CanCopy() and hasattr(win, 'CopyWithPrompts'))
613
+ elif id == ID_PASTE:
614
+ event.Enable(win.CanPaste())
615
+ elif id == ID_PASTE_PLUS:
616
+ event.Enable(win.CanPaste() and hasattr(win, 'PasteAndRun'))
617
+ elif id == ID_CLEAR:
618
+ event.Enable(win.CanCut())
619
+ elif id == ID_SELECTALL:
620
+ event.Enable(hasattr(win, 'SelectAll'))
621
+ elif id == ID_EMPTYBUFFER:
622
+ event.Enable(hasattr(win, 'ClearAll') and not win.GetReadOnly())
623
+ elif id == ID_AUTOCOMP_SHOW:
624
+ event.Check(win.autoComplete)
625
+ elif id == ID_AUTOCOMP_MAGIC:
626
+ event.Check(win.autoCompleteIncludeMagic)
627
+ elif id == ID_AUTOCOMP_SINGLE:
628
+ event.Check(win.autoCompleteIncludeSingle)
629
+ elif id == ID_AUTOCOMP_DOUBLE:
630
+ event.Check(win.autoCompleteIncludeDouble)
631
+ elif id == ID_CALLTIPS_SHOW:
632
+ event.Check(win.autoCallTip)
633
+ elif id == ID_CALLTIPS_INSERT:
634
+ event.Check(win.callTipInsert)
635
+ elif id == ID_WRAP:
636
+ event.Check(win.GetWrapMode())
637
+
638
+ elif id == ID_SHOW_LINENUMBERS:
639
+ event.Check(win.lineNumbers)
640
+ elif id == ID_ENABLESHELLMODE:
641
+ event.Check(self.enableShellMode)
642
+ event.Enable(self.config is not None)
643
+ elif id == ID_ENABLEAUTOSYMPY:
644
+ event.Check(self.enableAutoSympy)
645
+ event.Enable(self.config is not None)
646
+ elif id == ID_AUTO_SAVESETTINGS:
647
+ event.Check(self.autoSaveSettings)
648
+ event.Enable(self.config is not None)
649
+ elif id == ID_SAVESETTINGS:
650
+ event.Enable(self.config is not None and
651
+ hasattr(self, 'DoSaveSettings'))
652
+ elif id == ID_DELSETTINGSFILE:
653
+ event.Enable(self.config is not None)
654
+
655
+ elif id == ID_EXECSTARTUPSCRIPT:
656
+ event.Check(self.execStartupScript)
657
+ event.Enable(self.config is not None)
658
+
659
+ elif id == ID_SHOWPYSLICESTUTORIAL:
660
+ event.Check(self.showPySlicesTutorial)
661
+ event.Enable(self.config is not None)
662
+
663
+ elif id == ID_SAVEHISTORY:
664
+ event.Check(self.autoSaveHistory)
665
+ event.Enable(self.dataDir is not None)
666
+ elif id == ID_SAVEHISTORYNOW:
667
+ event.Enable(self.dataDir is not None and
668
+ hasattr(self, 'SaveHistory'))
669
+ elif id == ID_CLEARHISTORY:
670
+ event.Enable(self.dataDir is not None)
671
+
672
+ elif id == ID_EDITSTARTUPSCRIPT:
673
+ event.Enable(hasattr(self, 'EditStartupScript'))
674
+ event.Enable(self.dataDir is not None)
675
+
676
+ elif id == ID_FIND:
677
+ event.Enable(hasattr(win, 'DoFindNext'))
678
+ elif id == ID_FINDNEXT:
679
+ event.Enable(hasattr(win, 'DoFindNext'))
680
+ elif id == ID_FINDPREVIOUS:
681
+ event.Enable(hasattr(win, 'DoFindNext'))
682
+
683
+ elif id == ID_SHOWTOOLS:
684
+ event.Check(self.ToolsShown())
685
+
686
+ elif id == ID_HIDEFOLDINGMARGIN:
687
+ event.Check(self.hideFoldingMargin)
688
+ event.Enable(self.config is not None)
689
+
690
+ else:
691
+ event.Enable(False)
692
+ except AttributeError:
693
+ # This menu option is not supported in the current context.
694
+ event.Enable(False)
695
+
696
+
697
+ def OnActivate(self, event):
698
+ """
699
+ Event Handler for losing the focus of the Frame. Should close
700
+ Autocomplete listbox, if shown.
701
+ """
702
+ if not event.GetActive():
703
+ # If autocomplete active, cancel it. Otherwise, the
704
+ # autocomplete list will stay visible on top of the
705
+ # z-order after switching to another application
706
+ win = wx.Window.FindFocus()
707
+ if hasattr(win, 'AutoCompActive') and win.AutoCompActive():
708
+ win.AutoCompCancel()
709
+ event.Skip()
710
+
711
+
712
+
713
+ def LoadSettings(self, config):
714
+ """Called by derived classes to load settings specific to the Frame"""
715
+ pos = wx.Point(config.ReadInt('Window/PosX', -1),
716
+ config.ReadInt('Window/PosY', -1))
717
+
718
+ size = wx.Size(config.ReadInt('Window/Width', -1),
719
+ config.ReadInt('Window/Height', -1))
720
+
721
+ self.SetSize(size)
722
+ self.Move(pos)
723
+
724
+
725
+ def SaveSettings(self, config):
726
+ """Called by derived classes to save Frame settings to a wx.Config object"""
727
+
728
+ # TODO: track position/size so we can save it even if the
729
+ # frame is maximized or iconized.
730
+ if not self.iconized and not self.IsMaximized():
731
+ w, h = self.GetSize()
732
+ config.WriteInt('Window/Width', w)
733
+ config.WriteInt('Window/Height', h)
734
+
735
+ px, py = self.GetPosition()
736
+ config.WriteInt('Window/PosX', px)
737
+ config.WriteInt('Window/PosY', py)
738
+
739
+
740
+
741
+
742
+ class ShellFrameMixin:
743
+ """
744
+ A mix-in class for frames that will have a Shell or a Crust window
745
+ and that want to add history, startupScript and other common
746
+ functionality.
747
+ """
748
+ def __init__(self, config, dataDir):
749
+ self.config = config
750
+ self.dataDir = dataDir
751
+ self.startupScript = os.environ.get('PYTHONSTARTUP')
752
+ if not self.startupScript and self.dataDir:
753
+ self.startupScript = os.path.join(self.dataDir, 'startup')
754
+
755
+ self.autoSaveSettings = False
756
+ self.autoSaveHistory = False
757
+
758
+ # We need this one before we have a chance to load the settings...
759
+ self.execStartupScript = True
760
+ self.showPySlicesTutorial = True
761
+ self.enableShellMode = False
762
+ self.enableAutoSympy = True
763
+ self.hideFoldingMargin = False
764
+ if self.config:
765
+ self.execStartupScript = \
766
+ self.config.ReadBool('Options/ExecStartupScript', True)
767
+ self.showPySlicesTutorial = \
768
+ self.config.ReadBool('Options/ShowPySlicesTutorial', True)
769
+ self.enableShellMode = \
770
+ self.config.ReadBool('Options/EnableShellMode', False)
771
+ self.enableAutoSympy = \
772
+ self.config.ReadBool('Options/EnableAutoSympy', True)
773
+ self.hideFoldingMargin = \
774
+ self.config.ReadBool('Options/HideFoldingMargin', True)
775
+
776
+ def OnHelp(self, event):
777
+ """Display a Help window."""
778
+ import wx.lib.dialogs
779
+ title = 'Help on key bindings'
780
+
781
+ text = wx.py.shell.HELP_TEXT
782
+
783
+ dlg = wx.lib.dialogs.ScrolledMessageDialog(self, text, title,
784
+ size = ((700, 540)))
785
+ fnt = wx.Font(10, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
786
+ dlg.GetChildren()[0].SetFont(fnt)
787
+ dlg.GetChildren()[0].SetInsertionPoint(0)
788
+ dlg.ShowModal()
789
+ dlg.Destroy()
790
+
791
+
792
+ def LoadSettings(self):
793
+ if self.config is not None:
794
+ self.autoSaveSettings = \
795
+ self.config.ReadBool('Options/AutoSaveSettings', False)
796
+ self.execStartupScript = \
797
+ self.config.ReadBool('Options/ExecStartupScript', True)
798
+ self.autoSaveHistory = \
799
+ self.config.ReadBool('Options/AutoSaveHistory', False)
800
+
801
+ self.showPySlicesTutorial = \
802
+ self.config.ReadBool('Options/ShowPySlicesTutorial', True)
803
+ self.enableShellMode = \
804
+ self.config.ReadBool('Options/EnableShellMode', False)
805
+ self.enableAutoSympy = \
806
+ self.config.ReadBool('Options/EnableAutoSympy', True)
807
+ self.hideFoldingMargin = \
808
+ self.config.ReadBool('Options/HideFoldingMargin', True)
809
+
810
+ self.LoadHistory()
811
+
812
+
813
+ def SaveSettings(self, force=False):
814
+ if self.config is not None:
815
+ # always save these
816
+ self.config.WriteBool('Options/AutoSaveSettings',
817
+ self.autoSaveSettings)
818
+
819
+ if self.autoSaveSettings or force:
820
+ self.config.WriteBool('Options/AutoSaveHistory',
821
+ self.autoSaveHistory)
822
+ self.config.WriteBool('Options/ExecStartupScript',
823
+ self.execStartupScript)
824
+ self.config.WriteBool('Options/ShowPySlicesTutorial',
825
+ self.showPySlicesTutorial)
826
+ self.config.WriteBool('Options/EnableShellMode',
827
+ self.enableShellMode)
828
+ self.config.WriteBool('Options/EnableAutoSympy',
829
+ self.enableAutoSympy)
830
+ self.config.WriteBool('Options/HideFoldingMargin',
831
+ self.hideFoldingMargin)
832
+ if self.autoSaveHistory:
833
+ self.SaveHistory()
834
+
835
+
836
+
837
+ def SaveHistory(self):
838
+ if self.dataDir:
839
+ try:
840
+ enc = 'utf-8'
841
+ hist = b'\x00\n'.join([h.encode(enc)
842
+ for h in self.shell.history])
843
+ name = os.path.join(self.dataDir, 'history')
844
+ with open(name, 'wb') as f:
845
+ f.write(hist)
846
+ except:
847
+ d = wx.MessageDialog(self, "Error saving history file.",
848
+ "Error", wx.ICON_EXCLAMATION|wx.OK)
849
+ d.ShowModal()
850
+ d.Destroy()
851
+ raise
852
+
853
+ def LoadHistory(self):
854
+ if self.dataDir:
855
+ name = os.path.join(self.dataDir, 'history')
856
+ if os.path.exists(name):
857
+ try:
858
+ with open(name, 'rb') as f:
859
+ hist = f.read()
860
+
861
+ enc = 'utf-8'
862
+ hist = [h.decode(enc) for h in hist.split(b'\x00\n')]
863
+ self.shell.history = hist
864
+ dispatcher.send(signal="Shell.loadHistory",
865
+ history=self.shell.history)
866
+ except:
867
+ import traceback
868
+ traceback.print_exc()
869
+
870
+ d = wx.MessageDialog(self, "Error loading history file.",
871
+ "Error", wx.ICON_EXCLAMATION|wx.OK)
872
+ d.ShowModal()
873
+ d.Destroy()
874
+
875
+
876
+ def bufferHasChanged(self):
877
+ # the shell buffers can always be saved
878
+ return True
879
+
880
+ def bufferSave(self):
881
+ import time
882
+ appname = wx.GetApp().GetAppName()
883
+ default = appname + '-' + time.strftime("%Y%m%d-%H%M.py")
884
+ fileName = wx.FileSelector("Save File As", "Saving",
885
+ default_filename=default,
886
+ default_extension="py",
887
+ wildcard="*.py",
888
+ flags = wx.SAVE | wx.OVERWRITE_PROMPT)
889
+ if not fileName:
890
+ return
891
+
892
+ text = self.shell.GetText()
893
+
894
+ ## This isn't working currently...
895
+ ## d = wx.MessageDialog(self,u'Save source code only?\n' + \
896
+ ## 'Answering yes will only save lines starting with >>> and ...',
897
+ ## u'Question', wx.YES_NO | wx.ICON_QUESTION)
898
+ ## yes_no = d.ShowModal()
899
+ ## if yes_no == wx.ID_YES:
900
+ ## m = re.findall('^[>\.]{3,3} (.*)\r', text, re.MULTILINE | re.LOCALE)
901
+ ## text = '\n'.join(m)
902
+ ## d.Destroy()
903
+
904
+ try:
905
+ with open(fileName, "w") as f:
906
+ f.write(text)
907
+ except:
908
+ d = wx.MessageDialog(self, u'Error saving session',u'Error',
909
+ wx.OK | wx.ICON_ERROR)
910
+ d.ShowModal()
911
+ d.Destroy()
912
+
913
+
914
+ def EditStartupScript(self):
915
+ if os.path.exists(self.startupScript):
916
+ import io
917
+ # Use newline=None to translate \n \r \r\n to \n on read. The
918
+ # old-style mode='U' is deprecated.
919
+ with io.open(self.startupScript, 'r', newline=None, encoding='utf-8') as fid:
920
+ text = fid.read()
921
+ else:
922
+ text = ''
923
+
924
+ dlg = EditStartupScriptDialog(self, self.startupScript, text)
925
+ if dlg.ShowModal() == wx.ID_OK:
926
+ text = dlg.GetText()
927
+ try:
928
+ with open(self.startupScript, 'wb') as f:
929
+ f.write(text.encode('utf-8'))
930
+ except:
931
+ d = wx.MessageDialog(self, "Error saving startup file.",
932
+ "Error", wx.ICON_EXCLAMATION|wx.OK)
933
+ d.ShowModal()
934
+ d.Destroy()
935
+
936
+
937
+
938
+ class EditStartupScriptDialog(wx.Dialog):
939
+ def __init__(self, parent, fileName, text):
940
+ wx.Dialog.__init__(self, parent, size=(425,350),
941
+ title="Edit Startup Script",
942
+ style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
943
+
944
+ pst = wx.StaticText(self, -1, "Path:")
945
+ ptx = wx.TextCtrl(self, -1, fileName, style=wx.TE_READONLY)
946
+ self.editor = editwindow.EditWindow(self)
947
+ self.editor.SetText(text)
948
+ wx.CallAfter(self.editor.SetFocus)
949
+
950
+ ok = wx.Button(self, wx.ID_OK)
951
+ cancel = wx.Button(self, wx.ID_CANCEL)
952
+
953
+ mainSizer = wx.BoxSizer(wx.VERTICAL)
954
+
955
+ pthSizer = wx.BoxSizer(wx.HORIZONTAL)
956
+ pthSizer.Add(pst, flag=wx.ALIGN_CENTER_VERTICAL)
957
+ pthSizer.Add((5,5))
958
+ pthSizer.Add(ptx, 1)
959
+ mainSizer.Add(pthSizer, 0, wx.EXPAND|wx.ALL, 10)
960
+
961
+ mainSizer.Add(self.editor, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 10)
962
+
963
+ btnSizer = wx.BoxSizer(wx.HORIZONTAL)
964
+ btnSizer.Add((5,5), 1)
965
+ btnSizer.Add(ok)
966
+ btnSizer.Add((5,5), 1)
967
+ btnSizer.Add(cancel)
968
+ btnSizer.Add((5,5), 1)
969
+ mainSizer.Add(btnSizer, 0, wx.EXPAND|wx.ALL, 10)
970
+
971
+ self.SetSizer(mainSizer)
972
+ self.Layout()
973
+
974
+
975
+ def GetText(self):
976
+ return self.editor.GetText()