wxPython-zombie 3.1.5.8__cp313-cp313-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 (1175) hide show
  1. wx/__init__.py +22 -0
  2. wx/__version__.py +9 -0
  3. wx/_adv.cp313-win_amd64.pyd +0 -0
  4. wx/_aui.cp313-win_amd64.pyd +0 -0
  5. wx/_core.cp313-win_amd64.pyd +0 -0
  6. wx/_dataview.cp313-win_amd64.pyd +0 -0
  7. wx/_glcanvas.cp313-win_amd64.pyd +0 -0
  8. wx/_grid.cp313-win_amd64.pyd +0 -0
  9. wx/_html.cp313-win_amd64.pyd +0 -0
  10. wx/_html2.cp313-win_amd64.pyd +0 -0
  11. wx/_media.cp313-win_amd64.pyd +0 -0
  12. wx/_msw.cp313-win_amd64.pyd +0 -0
  13. wx/_propgrid.cp313-win_amd64.pyd +0 -0
  14. wx/_ribbon.cp313-win_amd64.pyd +0 -0
  15. wx/_richtext.cp313-win_amd64.pyd +0 -0
  16. wx/_stc.cp313-win_amd64.pyd +0 -0
  17. wx/_xml.cp313-win_amd64.pyd +0 -0
  18. wx/_xrc.cp313-win_amd64.pyd +0 -0
  19. wx/adv.py +124 -0
  20. wx/adv.pyi +5182 -0
  21. wx/aui.py +77 -0
  22. wx/aui.pyi +3655 -0
  23. wx/core.py +3540 -0
  24. wx/core.pyi +50592 -0
  25. wx/dataview.py +173 -0
  26. wx/dataview.pyi +3491 -0
  27. wx/demo/AUI_DockingWindowMgr.py +1154 -0
  28. wx/demo/AUI_MDI.py +117 -0
  29. wx/demo/AUI_Notebook.py +58 -0
  30. wx/demo/About.py +75 -0
  31. wx/demo/AboutBox.py +75 -0
  32. wx/demo/ActiveXWrapper_Acrobat.py +132 -0
  33. wx/demo/ActiveXWrapper_IE.py +187 -0
  34. wx/demo/ActiveX_FlashWindow.py +107 -0
  35. wx/demo/ActiveX_IEHtmlWindow.py +242 -0
  36. wx/demo/ActiveX_PDFWindow.py +204 -0
  37. wx/demo/ActivityIndicator.py +80 -0
  38. wx/demo/AddPrivateFont.py +116 -0
  39. wx/demo/AdjustChannels.py +178 -0
  40. wx/demo/AlphaDrawing.py +77 -0
  41. wx/demo/AnalogClock.py +144 -0
  42. wx/demo/AnimationCtrl.py +104 -0
  43. wx/demo/ArtProvider.py +893 -0
  44. wx/demo/BannerWindow.py +1 -0
  45. wx/demo/BitmapButton.py +87 -0
  46. wx/demo/BitmapComboBox.py +63 -0
  47. wx/demo/BitmapFromBuffer.py +140 -0
  48. wx/demo/Button.py +77 -0
  49. wx/demo/Cairo.py +197 -0
  50. wx/demo/Cairo_Snippets.py +135 -0
  51. wx/demo/Calendar.py +660 -0
  52. wx/demo/CalendarCtrl.py +122 -0
  53. wx/demo/CheckBox.py +74 -0
  54. wx/demo/CheckListBox.py +79 -0
  55. wx/demo/CheckListCtrl.py +99 -0
  56. wx/demo/Choice.py +55 -0
  57. wx/demo/Choicebook.py +80 -0
  58. wx/demo/CollapsibleHeaderCtrl.py +85 -0
  59. wx/demo/CollapsiblePane.py +126 -0
  60. wx/demo/ColorPanel.py +19 -0
  61. wx/demo/ColourDB.py +203 -0
  62. wx/demo/ColourDialog.py +76 -0
  63. wx/demo/ColourSelect.py +119 -0
  64. wx/demo/ComboBox.py +111 -0
  65. wx/demo/ComboCtrl.py +153 -0
  66. wx/demo/ComboTreeBox.py +71 -0
  67. wx/demo/CommandLinkButton.py +50 -0
  68. wx/demo/ContextHelp.py +112 -0
  69. wx/demo/Cursor.py +336 -0
  70. wx/demo/CustomDragAndDrop.py +353 -0
  71. wx/demo/DVC_CustomRenderer.py +204 -0
  72. wx/demo/DVC_DataViewModel.py +365 -0
  73. wx/demo/DVC_IndexListModel.py +257 -0
  74. wx/demo/DVC_ListCtrl.py +69 -0
  75. wx/demo/DVC_TreeCtrl.py +76 -0
  76. wx/demo/DatePickerCtrl.py +68 -0
  77. wx/demo/DelayedResult.py +239 -0
  78. wx/demo/Dialog.py +169 -0
  79. wx/demo/DialogUnits.py +128 -0
  80. wx/demo/DirDialog.py +58 -0
  81. wx/demo/DragAndDrop.py +265 -0
  82. wx/demo/DragImage.py +316 -0
  83. wx/demo/DragScroller.py +59 -0
  84. wx/demo/DrawXXXList.py +436 -0
  85. wx/demo/DynamicSashWindow.py +177 -0
  86. wx/demo/EditableListBox.py +101 -0
  87. wx/demo/Editor.py +70 -0
  88. wx/demo/EventManager.py +291 -0
  89. wx/demo/ExpandoTextCtrl.py +164 -0
  90. wx/demo/FancyText.py +83 -0
  91. wx/demo/FileBrowseButton.py +100 -0
  92. wx/demo/FileCtrl.py +97 -0
  93. wx/demo/FileDialog.py +144 -0
  94. wx/demo/FileHistory.py +140 -0
  95. wx/demo/FindReplaceDialog.py +123 -0
  96. wx/demo/FloatCanvas.py +1959 -0
  97. wx/demo/FontDialog.py +142 -0
  98. wx/demo/FontEnumerator.py +82 -0
  99. wx/demo/Frame.py +85 -0
  100. wx/demo/GLCanvas.py +371 -0
  101. wx/demo/Gauge.py +66 -0
  102. wx/demo/GenericButtons.py +185 -0
  103. wx/demo/GenericCheckBox.py +65 -0
  104. wx/demo/GenericDirCtrl.py +74 -0
  105. wx/demo/GetMouseState.py +159 -0
  106. wx/demo/GraphicsContext.py +236 -0
  107. wx/demo/GraphicsGradient.py +281 -0
  108. wx/demo/Grid.py +95 -0
  109. wx/demo/GridBagSizer.py +170 -0
  110. wx/demo/GridCustEditor.py +247 -0
  111. wx/demo/GridCustTable.py +170 -0
  112. wx/demo/GridDragAndDrop.py +102 -0
  113. wx/demo/GridDragable.py +206 -0
  114. wx/demo/GridEnterHandler.py +66 -0
  115. wx/demo/GridHugeTable.py +89 -0
  116. wx/demo/GridLabelRenderer.py +114 -0
  117. wx/demo/GridSimple.py +270 -0
  118. wx/demo/GridStdEdRend.py +186 -0
  119. wx/demo/Grid_MegaExample.py +490 -0
  120. wx/demo/HTML2_WebView.py +183 -0
  121. wx/demo/HtmlWindow.py +232 -0
  122. wx/demo/I18N.py +237 -0
  123. wx/demo/Image.py +338 -0
  124. wx/demo/ImageAlpha.py +87 -0
  125. wx/demo/ImageBrowser.py +70 -0
  126. wx/demo/ImageFromStream.py +49 -0
  127. wx/demo/Img2PyArtProvider.py +99 -0
  128. wx/demo/InfoBar.py +127 -0
  129. wx/demo/IntCtrl.py +343 -0
  130. wx/demo/ItemsPicker.py +108 -0
  131. wx/demo/Joystick.py +1083 -0
  132. wx/demo/KeyEvents.py +428 -0
  133. wx/demo/LEDNumberCtrl.py +121 -0
  134. wx/demo/LayoutAnchors.py +258 -0
  135. wx/demo/LayoutConstraints.py +149 -0
  136. wx/demo/Layoutf.py +69 -0
  137. wx/demo/ListBox.py +164 -0
  138. wx/demo/ListCtrl.py +538 -0
  139. wx/demo/ListCtrl_edit.py +155 -0
  140. wx/demo/ListCtrl_virtual.py +145 -0
  141. wx/demo/Listbook.py +104 -0
  142. wx/demo/MDIDemo.py +86 -0
  143. wx/demo/MDISashDemo.py +152 -0
  144. wx/demo/MDIWindows.py +66 -0
  145. wx/demo/Main.py +2768 -0
  146. wx/demo/Mask.py +137 -0
  147. wx/demo/MaskedEditControls.py +648 -0
  148. wx/demo/MaskedNumCtrl.py +359 -0
  149. wx/demo/MediaCtrl.py +190 -0
  150. wx/demo/Menu.py +322 -0
  151. wx/demo/MessageDialog.py +54 -0
  152. wx/demo/MimeTypesManager.py +354 -0
  153. wx/demo/MiniFrame.py +67 -0
  154. wx/demo/MouseGestures.py +198 -0
  155. wx/demo/MultiChoiceDialog.py +59 -0
  156. wx/demo/MultiSash.py +95 -0
  157. wx/demo/MultiSplitterWindow.py +168 -0
  158. wx/demo/MultipleChoiceDialog.py +101 -0
  159. wx/demo/Notebook.py +134 -0
  160. wx/demo/NotificationMessage.py +61 -0
  161. wx/demo/OGL.py +433 -0
  162. wx/demo/Overlay.py +209 -0
  163. wx/demo/OwnerDrawnComboBox.py +152 -0
  164. wx/demo/PDFViewer.py +109 -0
  165. wx/demo/PageSetupDialog.py +70 -0
  166. wx/demo/PenAndBrushStyles.py +208 -0
  167. wx/demo/Pickers.py +120 -0
  168. wx/demo/PlateButton.py +430 -0
  169. wx/demo/PopupControl.py +99 -0
  170. wx/demo/PopupMenu.py +156 -0
  171. wx/demo/PopupWindow.py +227 -0
  172. wx/demo/PrintDialog.py +60 -0
  173. wx/demo/PrintFramework.py +227 -0
  174. wx/demo/Process.py +168 -0
  175. wx/demo/ProgressDialog.py +87 -0
  176. wx/demo/PropertyGrid.py +1045 -0
  177. wx/demo/PropertySheetDialog.py +231 -0
  178. wx/demo/PseudoDC.py +350 -0
  179. wx/demo/PyColourChooser.py +60 -0
  180. wx/demo/PyCrust.py +21 -0
  181. wx/demo/PyPlot.py +83 -0
  182. wx/demo/PyShell.py +22 -0
  183. wx/demo/PythonEvents.py +109 -0
  184. wx/demo/README.txt +7 -0
  185. wx/demo/RadioBox.py +67 -0
  186. wx/demo/RadioButton.py +127 -0
  187. wx/demo/RawBitmapAccess.py +208 -0
  188. wx/demo/RearrangeDialog.py +160 -0
  189. wx/demo/RendererNative.py +170 -0
  190. wx/demo/ResizeWidget.py +76 -0
  191. wx/demo/RichMessageDialog.py +85 -0
  192. wx/demo/RichTextCtrl.py +732 -0
  193. wx/demo/RichToolTip.py +145 -0
  194. wx/demo/SVGImage_Bitmap.py +130 -0
  195. wx/demo/SVGImage_Render.py +138 -0
  196. wx/demo/SashWindow.py +151 -0
  197. wx/demo/ScrolledMessageDialog.py +52 -0
  198. wx/demo/ScrolledPanel.py +124 -0
  199. wx/demo/ScrolledWindow.py +260 -0
  200. wx/demo/SearchCtrl.py +115 -0
  201. wx/demo/ShapedWindow.py +145 -0
  202. wx/demo/Simplebook.py +202 -0
  203. wx/demo/SingleChoiceDialog.py +56 -0
  204. wx/demo/SizedControls.py +433 -0
  205. wx/demo/Sizers.py +609 -0
  206. wx/demo/Slider.py +52 -0
  207. wx/demo/Sound.py +95 -0
  208. wx/demo/SpinButton.py +63 -0
  209. wx/demo/SpinCtrl.py +56 -0
  210. wx/demo/SpinCtrlDouble.py +42 -0
  211. wx/demo/SplitTree.py +146 -0
  212. wx/demo/SplitterWindow.py +62 -0
  213. wx/demo/StandardPaths.py +113 -0
  214. wx/demo/StaticBitmap.py +55 -0
  215. wx/demo/StaticBox.py +62 -0
  216. wx/demo/StaticText.py +69 -0
  217. wx/demo/StatusBar.py +144 -0
  218. wx/demo/StockButtons.py +113 -0
  219. wx/demo/StyledTextCtrl_1.py +303 -0
  220. wx/demo/StyledTextCtrl_2.py +410 -0
  221. wx/demo/SystemSettings.py +333 -0
  222. wx/demo/TablePrint.py +215 -0
  223. wx/demo/TestTable.txt +38 -0
  224. wx/demo/TextCtrl.py +187 -0
  225. wx/demo/TextEntryDialog.py +57 -0
  226. wx/demo/Threads.py +258 -0
  227. wx/demo/Throbber.py +250 -0
  228. wx/demo/Ticker.py +147 -0
  229. wx/demo/TimeCtrl.py +240 -0
  230. wx/demo/TimePickerCtrl.py +60 -0
  231. wx/demo/Timer.py +275 -0
  232. wx/demo/ToggleButton.py +54 -0
  233. wx/demo/ToolBar.py +249 -0
  234. wx/demo/ToolTip.py +71 -0
  235. wx/demo/Toolbook.py +111 -0
  236. wx/demo/TreeCtrl.py +199 -0
  237. wx/demo/TreeListCtrl.py +121 -0
  238. wx/demo/TreeMixin.py +269 -0
  239. wx/demo/Treebook.py +117 -0
  240. wx/demo/UIActionSimulator.py +151 -0
  241. wx/demo/URLDragAndDrop.py +130 -0
  242. wx/demo/Unicode.py +146 -0
  243. wx/demo/VListBox.py +176 -0
  244. wx/demo/Validator.py +237 -0
  245. wx/demo/Wizard.py +248 -0
  246. wx/demo/WrapSizer.py +115 -0
  247. wx/demo/XmlResource.py +80 -0
  248. wx/demo/XmlResourceHandler.py +199 -0
  249. wx/demo/XmlResourceSubclass.py +119 -0
  250. wx/demo/__init__.py +9 -0
  251. wx/demo/agw/AGWInfoBar.py +175 -0
  252. wx/demo/agw/AUI.py +3058 -0
  253. wx/demo/agw/AdvancedSplash.py +59 -0
  254. wx/demo/agw/AquaButton.py +146 -0
  255. wx/demo/agw/BalloonTip.py +378 -0
  256. wx/demo/agw/ButtonPanel.py +890 -0
  257. wx/demo/agw/CubeColourDialog.py +83 -0
  258. wx/demo/agw/CustomTreeCtrl.py +2167 -0
  259. wx/demo/agw/Example1 +67 -0
  260. wx/demo/agw/Example2 +49 -0
  261. wx/demo/agw/FlatMenu.py +876 -0
  262. wx/demo/agw/FlatNotebook.py +994 -0
  263. wx/demo/agw/FloatSpin.py +475 -0
  264. wx/demo/agw/FoldPanelBar.py +953 -0
  265. wx/demo/agw/FourWaySplitter.py +300 -0
  266. wx/demo/agw/GenericMessageDialog.py +207 -0
  267. wx/demo/agw/GradientButton.py +156 -0
  268. wx/demo/agw/HyperLinkCtrl.py +144 -0
  269. wx/demo/agw/HyperTreeList.py +2660 -0
  270. wx/demo/agw/KnobCtrl.py +186 -0
  271. wx/demo/agw/LabelBook.py +567 -0
  272. wx/demo/agw/MacLargeDemo.py +360 -0
  273. wx/demo/agw/MultiDirDialog.py +117 -0
  274. wx/demo/agw/PeakMeter.py +194 -0
  275. wx/demo/agw/PersistentControls.py +589 -0
  276. wx/demo/agw/PieCtrl.py +206 -0
  277. wx/demo/agw/PyBusyInfo.py +64 -0
  278. wx/demo/agw/PyCollapsiblePane.py +308 -0
  279. wx/demo/agw/PyGauge.py +162 -0
  280. wx/demo/agw/PyProgress.py +155 -0
  281. wx/demo/agw/RibbonBar.py +925 -0
  282. wx/demo/agw/RulerCtrl.py +454 -0
  283. wx/demo/agw/ScrolledThumbnail.py +128 -0
  284. wx/demo/agw/ShapedButton.py +603 -0
  285. wx/demo/agw/ShortcutEditor.py +397 -0
  286. wx/demo/agw/SpeedMeter.py +668 -0
  287. wx/demo/agw/SuperToolTip.py +396 -0
  288. wx/demo/agw/ThumbDemoConfig.py +603 -0
  289. wx/demo/agw/ThumbnailCtrl.py +149 -0
  290. wx/demo/agw/ToasterBox.py +410 -0
  291. wx/demo/agw/UltimateListCtrl.py +80 -0
  292. wx/demo/agw/UltimateListIconDemo.py +908 -0
  293. wx/demo/agw/UltimateListListDemo.py +124 -0
  294. wx/demo/agw/UltimateReportDemo.py +1146 -0
  295. wx/demo/agw/UltimateVirtualDemo.py +207 -0
  296. wx/demo/agw/Windows7Explorer_Contents.py +368 -0
  297. wx/demo/agw/XLSGrid.py +238 -0
  298. wx/demo/agw/ZoomBar.py +230 -0
  299. wx/demo/agw/__demo__.py +183 -0
  300. wx/demo/agw/bitmaps/Explorer96.png +0 -0
  301. wx/demo/agw/bitmaps/Explorer96Flip40.png +0 -0
  302. wx/demo/agw/bitmaps/Folder96.png +0 -0
  303. wx/demo/agw/bitmaps/Folder96Flip40.png +0 -0
  304. wx/demo/agw/bitmaps/Monitor96.png +0 -0
  305. wx/demo/agw/bitmaps/Monitor96Flip40.png +0 -0
  306. wx/demo/agw/bitmaps/Music96.png +0 -0
  307. wx/demo/agw/bitmaps/Music96Flip40.png +0 -0
  308. wx/demo/agw/bitmaps/Photo96.png +0 -0
  309. wx/demo/agw/bitmaps/Photo96Flip40.png +0 -0
  310. wx/demo/agw/bitmaps/Search96.png +0 -0
  311. wx/demo/agw/bitmaps/Search96Flip40.png +0 -0
  312. wx/demo/agw/bitmaps/Wizard96.png +0 -0
  313. wx/demo/agw/bitmaps/Wizard96Flip40.png +0 -0
  314. wx/demo/agw/bitmaps/advancedsplash.png +0 -0
  315. wx/demo/agw/bitmaps/aquabutton.png +0 -0
  316. wx/demo/agw/bitmaps/aquachecked.ico +0 -0
  317. wx/demo/agw/bitmaps/aquaflagged.ico +0 -0
  318. wx/demo/agw/bitmaps/aquanotchecked.ico +0 -0
  319. wx/demo/agw/bitmaps/aquanotflagged.ico +0 -0
  320. wx/demo/agw/bitmaps/canada.gif +0 -0
  321. wx/demo/agw/bitmaps/checked.ico +0 -0
  322. wx/demo/agw/bitmaps/columns.png +0 -0
  323. wx/demo/agw/bitmaps/contexthelp-16.png +0 -0
  324. wx/demo/agw/bitmaps/contexthelp.png +0 -0
  325. wx/demo/agw/bitmaps/copy.png +0 -0
  326. wx/demo/agw/bitmaps/cut.png +0 -0
  327. wx/demo/agw/bitmaps/editcopy.png +0 -0
  328. wx/demo/agw/bitmaps/editcut.png +0 -0
  329. wx/demo/agw/bitmaps/editpaste.png +0 -0
  330. wx/demo/agw/bitmaps/empty_icon.png +0 -0
  331. wx/demo/agw/bitmaps/exit-16.png +0 -0
  332. wx/demo/agw/bitmaps/exit.ico +0 -0
  333. wx/demo/agw/bitmaps/ffwd.png +0 -0
  334. wx/demo/agw/bitmaps/ffwddisabled.png +0 -0
  335. wx/demo/agw/bitmaps/field-16.png +0 -0
  336. wx/demo/agw/bitmaps/filenew.png +0 -0
  337. wx/demo/agw/bitmaps/fileopen.png +0 -0
  338. wx/demo/agw/bitmaps/filesave.png +0 -0
  339. wx/demo/agw/bitmaps/flagged.ico +0 -0
  340. wx/demo/agw/bitmaps/folder.png +0 -0
  341. wx/demo/agw/bitmaps/folder_new.png +0 -0
  342. wx/demo/agw/bitmaps/ghost.png +0 -0
  343. wx/demo/agw/bitmaps/gradientbutton.png +0 -0
  344. wx/demo/agw/bitmaps/help-16.png +0 -0
  345. wx/demo/agw/bitmaps/help.ico +0 -0
  346. wx/demo/agw/bitmaps/italy.gif +0 -0
  347. wx/demo/agw/bitmaps/lbadd.png +0 -0
  348. wx/demo/agw/bitmaps/lbcharge.png +0 -0
  349. wx/demo/agw/bitmaps/lbdecrypted.png +0 -0
  350. wx/demo/agw/bitmaps/lbnews.png +0 -0
  351. wx/demo/agw/bitmaps/lbroll.png +0 -0
  352. wx/demo/agw/bitmaps/minus1.ico +0 -0
  353. wx/demo/agw/bitmaps/minus2.ico +0 -0
  354. wx/demo/agw/bitmaps/minus3.ico +0 -0
  355. wx/demo/agw/bitmaps/minus4.ico +0 -0
  356. wx/demo/agw/bitmaps/minus5.ico +0 -0
  357. wx/demo/agw/bitmaps/month-16.png +0 -0
  358. wx/demo/agw/bitmaps/new_file.png +0 -0
  359. wx/demo/agw/bitmaps/new_folder.png +0 -0
  360. wx/demo/agw/bitmaps/notchecked.ico +0 -0
  361. wx/demo/agw/bitmaps/notflagged.ico +0 -0
  362. wx/demo/agw/bitmaps/ok-16.png +0 -0
  363. wx/demo/agw/bitmaps/open_folder.png +0 -0
  364. wx/demo/agw/bitmaps/paste.png +0 -0
  365. wx/demo/agw/bitmaps/pause.png +0 -0
  366. wx/demo/agw/bitmaps/pausedisabled.png +0 -0
  367. wx/demo/agw/bitmaps/play.png +0 -0
  368. wx/demo/agw/bitmaps/playdisabled.png +0 -0
  369. wx/demo/agw/bitmaps/plus1.ico +0 -0
  370. wx/demo/agw/bitmaps/plus2.ico +0 -0
  371. wx/demo/agw/bitmaps/plus3.ico +0 -0
  372. wx/demo/agw/bitmaps/plus4.ico +0 -0
  373. wx/demo/agw/bitmaps/plus5.ico +0 -0
  374. wx/demo/agw/bitmaps/record.png +0 -0
  375. wx/demo/agw/bitmaps/recorddisabled.png +0 -0
  376. wx/demo/agw/bitmaps/recording.gif +0 -0
  377. wx/demo/agw/bitmaps/rewind.png +0 -0
  378. wx/demo/agw/bitmaps/rewinddisabled.png +0 -0
  379. wx/demo/agw/bitmaps/round.png +0 -0
  380. wx/demo/agw/bitmaps/save.png +0 -0
  381. wx/demo/agw/bitmaps/separator.gif +0 -0
  382. wx/demo/agw/bitmaps/separatorflip.png +0 -0
  383. wx/demo/agw/bitmaps/smfuel.ico +0 -0
  384. wx/demo/agw/bitmaps/smpi.ico +0 -0
  385. wx/demo/agw/bitmaps/smtemp.ico +0 -0
  386. wx/demo/agw/bitmaps/stop.png +0 -0
  387. wx/demo/agw/bitmaps/stopdisabled.png +0 -0
  388. wx/demo/agw/bitmaps/sttbutton.png +0 -0
  389. wx/demo/agw/bitmaps/sttfont.png +0 -0
  390. wx/demo/agw/bitmaps/sttheader.png +0 -0
  391. wx/demo/agw/bitmaps/stthelp.png +0 -0
  392. wx/demo/agw/bitmaps/view1.png +0 -0
  393. wx/demo/agw/bitmaps/view2.png +0 -0
  394. wx/demo/agw/bitmaps/view_choose.png +0 -0
  395. wx/demo/agw/bitmaps/view_detailed.png +0 -0
  396. wx/demo/agw/bitmaps/view_icon.png +0 -0
  397. wx/demo/agw/bitmaps/view_multicolumn.png +0 -0
  398. wx/demo/agw/bitmaps/viewmag-16.png +0 -0
  399. wx/demo/agw/bitmaps/viewmag-m-16.png +0 -0
  400. wx/demo/agw/bitmaps/viewmag-p-16.png +0 -0
  401. wx/demo/agw/bitmaps/viewmagfit-16.png +0 -0
  402. wx/demo/agw/data/Example_1.xls +0 -0
  403. wx/demo/agw/images.py +6714 -0
  404. wx/demo/bitmaps/AG00028_.gif +0 -0
  405. wx/demo/bitmaps/AG00039_.gif +0 -0
  406. wx/demo/bitmaps/AG00178_.gif +0 -0
  407. wx/demo/bitmaps/AG00183_.gif +0 -0
  408. wx/demo/bitmaps/AG00185_.gif +0 -0
  409. wx/demo/bitmaps/BD13656_.gif +0 -0
  410. wx/demo/bitmaps/advancedsplash.png +0 -0
  411. wx/demo/bitmaps/aquabutton.png +0 -0
  412. wx/demo/bitmaps/aquachecked.ico +0 -0
  413. wx/demo/bitmaps/aquaflagged.ico +0 -0
  414. wx/demo/bitmaps/aquanotchecked.ico +0 -0
  415. wx/demo/bitmaps/aquanotflagged.ico +0 -0
  416. wx/demo/bitmaps/canada.gif +0 -0
  417. wx/demo/bitmaps/checked.ico +0 -0
  418. wx/demo/bitmaps/columns.png +0 -0
  419. wx/demo/bitmaps/contexthelp-16.png +0 -0
  420. wx/demo/bitmaps/contexthelp.png +0 -0
  421. wx/demo/bitmaps/copy.png +0 -0
  422. wx/demo/bitmaps/cropshot24x20.png +0 -0
  423. wx/demo/bitmaps/cut.png +0 -0
  424. wx/demo/bitmaps/editcopy.png +0 -0
  425. wx/demo/bitmaps/editcut.png +0 -0
  426. wx/demo/bitmaps/editpaste.png +0 -0
  427. wx/demo/bitmaps/exit-16.png +0 -0
  428. wx/demo/bitmaps/exit.ico +0 -0
  429. wx/demo/bitmaps/ffwd.png +0 -0
  430. wx/demo/bitmaps/ffwddisabled.png +0 -0
  431. wx/demo/bitmaps/field-16.png +0 -0
  432. wx/demo/bitmaps/filenew.png +0 -0
  433. wx/demo/bitmaps/fileopen.png +0 -0
  434. wx/demo/bitmaps/filesave.png +0 -0
  435. wx/demo/bitmaps/flagged.ico +0 -0
  436. wx/demo/bitmaps/folder_new.png +0 -0
  437. wx/demo/bitmaps/ghost.png +0 -0
  438. wx/demo/bitmaps/gradientbutton.png +0 -0
  439. wx/demo/bitmaps/help-16.png +0 -0
  440. wx/demo/bitmaps/help.ico +0 -0
  441. wx/demo/bitmaps/honeycomb300.png +0 -0
  442. wx/demo/bitmaps/image.bmp +0 -0
  443. wx/demo/bitmaps/image.gif +0 -0
  444. wx/demo/bitmaps/image.ico +0 -0
  445. wx/demo/bitmaps/image.jpg +0 -0
  446. wx/demo/bitmaps/image.png +0 -0
  447. wx/demo/bitmaps/image.tif +0 -0
  448. wx/demo/bitmaps/italy.gif +0 -0
  449. wx/demo/bitmaps/lbadd.png +0 -0
  450. wx/demo/bitmaps/lbcharge.png +0 -0
  451. wx/demo/bitmaps/lbdecrypted.png +0 -0
  452. wx/demo/bitmaps/lbnews.png +0 -0
  453. wx/demo/bitmaps/lbroll.png +0 -0
  454. wx/demo/bitmaps/minus1.ico +0 -0
  455. wx/demo/bitmaps/minus2.ico +0 -0
  456. wx/demo/bitmaps/minus3.ico +0 -0
  457. wx/demo/bitmaps/minus4.ico +0 -0
  458. wx/demo/bitmaps/minus5.ico +0 -0
  459. wx/demo/bitmaps/month-16.png +0 -0
  460. wx/demo/bitmaps/new_file.png +0 -0
  461. wx/demo/bitmaps/new_folder.png +0 -0
  462. wx/demo/bitmaps/notchecked.ico +0 -0
  463. wx/demo/bitmaps/notflagged.ico +0 -0
  464. wx/demo/bitmaps/ok-16.png +0 -0
  465. wx/demo/bitmaps/open_folder.png +0 -0
  466. wx/demo/bitmaps/paste.png +0 -0
  467. wx/demo/bitmaps/pause.png +0 -0
  468. wx/demo/bitmaps/pausedisabled.png +0 -0
  469. wx/demo/bitmaps/phoenix_title.png +0 -0
  470. wx/demo/bitmaps/phoenix_top.png +0 -0
  471. wx/demo/bitmaps/play.png +0 -0
  472. wx/demo/bitmaps/playdisabled.png +0 -0
  473. wx/demo/bitmaps/plus1.ico +0 -0
  474. wx/demo/bitmaps/plus2.ico +0 -0
  475. wx/demo/bitmaps/plus3.ico +0 -0
  476. wx/demo/bitmaps/plus4.ico +0 -0
  477. wx/demo/bitmaps/plus5.ico +0 -0
  478. wx/demo/bitmaps/record.png +0 -0
  479. wx/demo/bitmaps/recorddisabled.png +0 -0
  480. wx/demo/bitmaps/rewind.png +0 -0
  481. wx/demo/bitmaps/rewinddisabled.png +0 -0
  482. wx/demo/bitmaps/round.png +0 -0
  483. wx/demo/bitmaps/save.png +0 -0
  484. wx/demo/bitmaps/smfuel.ico +0 -0
  485. wx/demo/bitmaps/smpi.ico +0 -0
  486. wx/demo/bitmaps/smtemp.ico +0 -0
  487. wx/demo/bitmaps/snakey_render.png +0 -0
  488. wx/demo/bitmaps/splash.png +0 -0
  489. wx/demo/bitmaps/stop.png +0 -0
  490. wx/demo/bitmaps/stopdisabled.png +0 -0
  491. wx/demo/bitmaps/sttbutton.png +0 -0
  492. wx/demo/bitmaps/sttfont.png +0 -0
  493. wx/demo/bitmaps/sttheader.png +0 -0
  494. wx/demo/bitmaps/stthelp.png +0 -0
  495. wx/demo/bitmaps/toucan.png +0 -0
  496. wx/demo/bitmaps/view1.png +0 -0
  497. wx/demo/bitmaps/view2.png +0 -0
  498. wx/demo/bitmaps/view_choose.png +0 -0
  499. wx/demo/bitmaps/view_detailed.png +0 -0
  500. wx/demo/bitmaps/view_icon.png +0 -0
  501. wx/demo/bitmaps/view_multicolumn.png +0 -0
  502. wx/demo/bitmaps/viewmag-16.png +0 -0
  503. wx/demo/bitmaps/viewmag-m-16.png +0 -0
  504. wx/demo/bitmaps/viewmag-p-16.png +0 -0
  505. wx/demo/bitmaps/viewmagfit-16.png +0 -0
  506. wx/demo/bmp_source/001.png +0 -0
  507. wx/demo/bmp_source/002.png +0 -0
  508. wx/demo/bmp_source/003.png +0 -0
  509. wx/demo/bmp_source/004.png +0 -0
  510. wx/demo/bmp_source/005.png +0 -0
  511. wx/demo/bmp_source/006.png +0 -0
  512. wx/demo/bmp_source/007.png +0 -0
  513. wx/demo/bmp_source/008.png +0 -0
  514. wx/demo/bmp_source/009.png +0 -0
  515. wx/demo/bmp_source/010.png +0 -0
  516. wx/demo/bmp_source/011.png +0 -0
  517. wx/demo/bmp_source/012.png +0 -0
  518. wx/demo/bmp_source/013.png +0 -0
  519. wx/demo/bmp_source/014.png +0 -0
  520. wx/demo/bmp_source/015.png +0 -0
  521. wx/demo/bmp_source/016.png +0 -0
  522. wx/demo/bmp_source/017.png +0 -0
  523. wx/demo/bmp_source/018.png +0 -0
  524. wx/demo/bmp_source/019.png +0 -0
  525. wx/demo/bmp_source/020.png +0 -0
  526. wx/demo/bmp_source/021.png +0 -0
  527. wx/demo/bmp_source/022.png +0 -0
  528. wx/demo/bmp_source/023.png +0 -0
  529. wx/demo/bmp_source/024.png +0 -0
  530. wx/demo/bmp_source/025.png +0 -0
  531. wx/demo/bmp_source/026.png +0 -0
  532. wx/demo/bmp_source/027.png +0 -0
  533. wx/demo/bmp_source/028.png +0 -0
  534. wx/demo/bmp_source/029.png +0 -0
  535. wx/demo/bmp_source/030.png +0 -0
  536. wx/demo/bmp_source/DbDec.bmp +0 -0
  537. wx/demo/bmp_source/DbInc.bmp +0 -0
  538. wx/demo/bmp_source/Dec.bmp +0 -0
  539. wx/demo/bmp_source/FRM_0.png +0 -0
  540. wx/demo/bmp_source/FRM_1.png +0 -0
  541. wx/demo/bmp_source/FRM_2.png +0 -0
  542. wx/demo/bmp_source/FRM_3.png +0 -0
  543. wx/demo/bmp_source/FRM_4.png +0 -0
  544. wx/demo/bmp_source/FRM_5.png +0 -0
  545. wx/demo/bmp_source/FRM_6.png +0 -0
  546. wx/demo/bmp_source/FRM_7.png +0 -0
  547. wx/demo/bmp_source/FRM_8.png +0 -0
  548. wx/demo/bmp_source/GridBG.gif +0 -0
  549. wx/demo/bmp_source/Inc.bmp +0 -0
  550. wx/demo/bmp_source/LB01.png +0 -0
  551. wx/demo/bmp_source/LB02.png +0 -0
  552. wx/demo/bmp_source/LB03.png +0 -0
  553. wx/demo/bmp_source/LB04.png +0 -0
  554. wx/demo/bmp_source/LB05.png +0 -0
  555. wx/demo/bmp_source/LB06.png +0 -0
  556. wx/demo/bmp_source/LB07.png +0 -0
  557. wx/demo/bmp_source/LB08.png +0 -0
  558. wx/demo/bmp_source/LB09.png +0 -0
  559. wx/demo/bmp_source/LB10.png +0 -0
  560. wx/demo/bmp_source/LB11.png +0 -0
  561. wx/demo/bmp_source/LB12.png +0 -0
  562. wx/demo/bmp_source/Pt.bmp +0 -0
  563. wx/demo/bmp_source/Vippi.png +0 -0
  564. wx/demo/bmp_source/backgrnd.png +0 -0
  565. wx/demo/bmp_source/book.png +0 -0
  566. wx/demo/bmp_source/book_blue.png +0 -0
  567. wx/demo/bmp_source/book_green.png +0 -0
  568. wx/demo/bmp_source/book_red.png +0 -0
  569. wx/demo/bmp_source/bp_btn1.png +0 -0
  570. wx/demo/bmp_source/bp_btn2.png +0 -0
  571. wx/demo/bmp_source/bp_btn3.png +0 -0
  572. wx/demo/bmp_source/bp_btn4.png +0 -0
  573. wx/demo/bmp_source/bulb1.bmp +0 -0
  574. wx/demo/bmp_source/bulb2.bmp +0 -0
  575. wx/demo/bmp_source/carrot.png +0 -0
  576. wx/demo/bmp_source/clipboard.png +0 -0
  577. wx/demo/bmp_source/code.png +0 -0
  578. wx/demo/bmp_source/core.png +0 -0
  579. wx/demo/bmp_source/custom.png +0 -0
  580. wx/demo/bmp_source/customcontrol.png +0 -0
  581. wx/demo/bmp_source/deletedocs.png +0 -0
  582. wx/demo/bmp_source/deleteperspective.png +0 -0
  583. wx/demo/bmp_source/demo.png +0 -0
  584. wx/demo/bmp_source/dialog.png +0 -0
  585. wx/demo/bmp_source/exit.png +0 -0
  586. wx/demo/bmp_source/expansion.png +0 -0
  587. wx/demo/bmp_source/find.png +0 -0
  588. wx/demo/bmp_source/findnext.png +0 -0
  589. wx/demo/bmp_source/floatcanvas.png +0 -0
  590. wx/demo/bmp_source/frame.png +0 -0
  591. wx/demo/bmp_source/images.png +0 -0
  592. wx/demo/bmp_source/inspect.png +0 -0
  593. wx/demo/bmp_source/layout.png +0 -0
  594. wx/demo/bmp_source/logo.png +0 -0
  595. wx/demo/bmp_source/miscellaneous.png +0 -0
  596. wx/demo/bmp_source/modifiedexists.png +0 -0
  597. wx/demo/bmp_source/mondrian.ico +0 -0
  598. wx/demo/bmp_source/morecontrols.png +0 -0
  599. wx/demo/bmp_source/moredialog.png +0 -0
  600. wx/demo/bmp_source/noicon.png +0 -0
  601. wx/demo/bmp_source/overview.png +0 -0
  602. wx/demo/bmp_source/pencil.png +0 -0
  603. wx/demo/bmp_source/pointy.png +0 -0
  604. wx/demo/bmp_source/process.png +0 -0
  605. wx/demo/bmp_source/pyshell.png +0 -0
  606. wx/demo/bmp_source/recent.png +0 -0
  607. wx/demo/bmp_source/rest.png +0 -0
  608. wx/demo/bmp_source/robin.jpg +0 -0
  609. wx/demo/bmp_source/rt_alignleft.xpm +24 -0
  610. wx/demo/bmp_source/rt_alignright.xpm +24 -0
  611. wx/demo/bmp_source/rt_bold.xpm +24 -0
  612. wx/demo/bmp_source/rt_centre.xpm +24 -0
  613. wx/demo/bmp_source/rt_colour.xpm +59 -0
  614. wx/demo/bmp_source/rt_copy.xpm +44 -0
  615. wx/demo/bmp_source/rt_cut.xpm +46 -0
  616. wx/demo/bmp_source/rt_font.xpm +25 -0
  617. wx/demo/bmp_source/rt_idea.xpm +47 -0
  618. wx/demo/bmp_source/rt_indentless.xpm +25 -0
  619. wx/demo/bmp_source/rt_indentmore.xpm +25 -0
  620. wx/demo/bmp_source/rt_italic.xpm +25 -0
  621. wx/demo/bmp_source/rt_open.xpm +57 -0
  622. wx/demo/bmp_source/rt_paste.xpm +46 -0
  623. wx/demo/bmp_source/rt_redo.xpm +58 -0
  624. wx/demo/bmp_source/rt_sample.xpm +44 -0
  625. wx/demo/bmp_source/rt_save.xpm +42 -0
  626. wx/demo/bmp_source/rt_smiley.xpm +42 -0
  627. wx/demo/bmp_source/rt_underline.xpm +25 -0
  628. wx/demo/bmp_source/rt_undo.xpm +58 -0
  629. wx/demo/bmp_source/rt_zebra.xpm +409 -0
  630. wx/demo/bmp_source/saveperspective.png +0 -0
  631. wx/demo/bmp_source/sm_down.bmp +0 -0
  632. wx/demo/bmp_source/sm_up.bmp +0 -0
  633. wx/demo/bmp_source/smiles2.bmp +0 -0
  634. wx/demo/bmp_source/test2.bmp +0 -0
  635. wx/demo/bmp_source/testmask.bmp +0 -0
  636. wx/demo/bmp_source/teststar.png +0 -0
  637. wx/demo/bmp_source/thekid.png +0 -0
  638. wx/demo/bmp_source/tog1.bmp +0 -0
  639. wx/demo/bmp_source/tog2.bmp +0 -0
  640. wx/demo/bmp_source/wiztest1.bmp +0 -0
  641. wx/demo/bmp_source/wiztest2.bmp +0 -0
  642. wx/demo/bmp_source/wxpdemo.ico +0 -0
  643. wx/demo/cursors/paperairplane_arrow_blue.cur +0 -0
  644. wx/demo/cursors/paperairplane_arrow_blue_fadeout80.cur +0 -0
  645. wx/demo/cursors/paperairplane_arrow_colorshift.ani +0 -0
  646. wx/demo/cursors/paperairplane_arrow_dark.cur +0 -0
  647. wx/demo/cursors/paperairplane_arrow_grey.cur +0 -0
  648. wx/demo/cursors/paperairplane_arrow_red.cur +0 -0
  649. wx/demo/cursors/paperairplane_arrow_white.cur +0 -0
  650. wx/demo/cursors/paperairplane_arrow_white24.png +0 -0
  651. wx/demo/data/0-tiger.svg +725 -0
  652. wx/demo/data/Asteroid_blaster.swf +0 -0
  653. wx/demo/data/SIL_OPEN_FONT_LICENSE.txt +97 -0
  654. wx/demo/data/SourceCodePro-Regular.ttf +0 -0
  655. wx/demo/data/accessories-calculator.svg +636 -0
  656. wx/demo/data/accessories-text-editor.svg +554 -0
  657. wx/demo/data/anykey.wav +0 -0
  658. wx/demo/data/applications-internet.svg +623 -0
  659. wx/demo/data/desktop-accessibility.svg +245 -0
  660. wx/demo/data/desktop-keyboard-shortcuts.svg +839 -0
  661. wx/demo/data/desktop-locale.svg +878 -0
  662. wx/demo/data/desktop-remote-desktop.svg +1479 -0
  663. wx/demo/data/desktop-theme.svg +882 -0
  664. wx/demo/data/desktop-wallpaper.svg +747 -0
  665. wx/demo/data/echo.py +25 -0
  666. wx/demo/data/imagemap.htm +20 -0
  667. wx/demo/data/imagemap.png +0 -0
  668. wx/demo/data/internet-group-chat.svg +312 -0
  669. wx/demo/data/internet-mail.svg +440 -0
  670. wx/demo/data/locale/af/LC_MESSAGES/wxpydemo.mo +0 -0
  671. wx/demo/data/locale/de/LC_MESSAGES/wxpydemo.mo +0 -0
  672. wx/demo/data/locale/es/LC_MESSAGES/wxpydemo.mo +0 -0
  673. wx/demo/data/locale/fr/LC_MESSAGES/wxpydemo.mo +0 -0
  674. wx/demo/data/locale/it/LC_MESSAGES/wxpydemo.mo +0 -0
  675. wx/demo/data/locale-src/af.po +23 -0
  676. wx/demo/data/locale-src/de.po +23 -0
  677. wx/demo/data/locale-src/es.po +22 -0
  678. wx/demo/data/locale-src/fr.po +22 -0
  679. wx/demo/data/locale-src/install +15 -0
  680. wx/demo/data/locale-src/it.po +23 -0
  681. wx/demo/data/locale-src/wxpydemo.po +21 -0
  682. wx/demo/data/office-calendar.svg +316 -0
  683. wx/demo/data/pic.png +0 -0
  684. wx/demo/data/pic2.bmp +0 -0
  685. wx/demo/data/plan.wav +0 -0
  686. wx/demo/data/proclamation.txt +115 -0
  687. wx/demo/data/resource.wdr +0 -0
  688. wx/demo/data/resource_wdr.xrc +146 -0
  689. wx/demo/data/romedalen.png +0 -0
  690. wx/demo/data/stc.h.html +3544 -0
  691. wx/demo/data/system-session.svg +510 -0
  692. wx/demo/data/system-users.svg +539 -0
  693. wx/demo/data/tables.htm +116 -0
  694. wx/demo/data/test-gradient-pen.svg +14 -0
  695. wx/demo/data/test-opacity.svg +7 -0
  696. wx/demo/data/test.htm +253 -0
  697. wx/demo/data/testmovie.mpg +0 -0
  698. wx/demo/data/testtable.txt +38 -0
  699. wx/demo/data/tips.txt +73 -0
  700. wx/demo/data/utilities-system-monitor.svg +435 -0
  701. wx/demo/data/utilities-terminal.svg +500 -0
  702. wx/demo/data/widgetTest.htm +70 -0
  703. wx/demo/data/world.dat +24055 -0
  704. wx/demo/demo.py +4 -0
  705. wx/demo/demo.pyw +4 -0
  706. wx/demo/demodata.py +310 -0
  707. wx/demo/encode_bitmaps.py +181 -0
  708. wx/demo/images.py +6812 -0
  709. wx/demo/infoframe.py +149 -0
  710. wx/demo/run.py +171 -0
  711. wx/demo/snippets/__init__.py +13 -0
  712. wx/demo/snippets/arc.py +21 -0
  713. wx/demo/snippets/arc_negative.py +21 -0
  714. wx/demo/snippets/clip.py +13 -0
  715. wx/demo/snippets/clip_image.py +13 -0
  716. wx/demo/snippets/curve_rectangle.py +53 -0
  717. wx/demo/snippets/curve_to.py +17 -0
  718. wx/demo/snippets/dash.py +18 -0
  719. wx/demo/snippets/ellipse.py +33 -0
  720. wx/demo/snippets/fill_and_stroke.py +12 -0
  721. wx/demo/snippets/fill_and_stroke2.py +18 -0
  722. wx/demo/snippets/fill_style.py +31 -0
  723. wx/demo/snippets/glyph_path.py +21 -0
  724. wx/demo/snippets/gradient.py +16 -0
  725. wx/demo/snippets/gradient_mask.py +12 -0
  726. wx/demo/snippets/group.py +16 -0
  727. wx/demo/snippets/image.py +14 -0
  728. wx/demo/snippets/imagepattern.py +23 -0
  729. wx/demo/snippets/path.py +7 -0
  730. wx/demo/snippets/set_line_cap.py +19 -0
  731. wx/demo/snippets/set_line_join.py +21 -0
  732. wx/demo/snippets/show_glyphs.py +15 -0
  733. wx/demo/snippets/text.py +22 -0
  734. wx/demo/snippets/text_align_center.py +26 -0
  735. wx/demo/snippets/text_extents.py +27 -0
  736. wx/demo/template.py +36 -0
  737. wx/demo/throbImages.py +1277 -0
  738. wx/demo/version.py +3 -0
  739. wx/demo/widgetTest.py +72 -0
  740. wx/demo/wxpdemo.ico +0 -0
  741. wx/glcanvas.py +10 -0
  742. wx/glcanvas.pyi +458 -0
  743. wx/grid.py +229 -0
  744. wx/grid.pyi +4959 -0
  745. wx/html.py +35 -0
  746. wx/html.pyi +2965 -0
  747. wx/html2.py +40 -0
  748. wx/html2.pyi +772 -0
  749. wx/lib/CDate.py +202 -0
  750. wx/lib/ClickableHtmlWindow.py +57 -0
  751. wx/lib/__init__.py +0 -0
  752. wx/lib/activex.py +178 -0
  753. wx/lib/activexwrapper.py +153 -0
  754. wx/lib/agw/__init__.py +128 -0
  755. wx/lib/agw/advancedsplash.py +564 -0
  756. wx/lib/agw/aquabutton.py +1127 -0
  757. wx/lib/agw/artmanager.py +2110 -0
  758. wx/lib/agw/aui/__init__.py +295 -0
  759. wx/lib/agw/aui/aui_constants.py +2628 -0
  760. wx/lib/agw/aui/aui_switcherdialog.py +1227 -0
  761. wx/lib/agw/aui/aui_utilities.py +672 -0
  762. wx/lib/agw/aui/auibar.py +4031 -0
  763. wx/lib/agw/aui/auibook.py +6289 -0
  764. wx/lib/agw/aui/dockart.py +1198 -0
  765. wx/lib/agw/aui/framemanager.py +10409 -0
  766. wx/lib/agw/aui/tabart.py +2771 -0
  767. wx/lib/agw/aui/tabmdi.py +679 -0
  768. wx/lib/agw/balloontip.py +1158 -0
  769. wx/lib/agw/buttonpanel.py +2823 -0
  770. wx/lib/agw/cubecolourdialog.py +3529 -0
  771. wx/lib/agw/customtreectrl.py +8963 -0
  772. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  773. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  774. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  775. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  776. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  777. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  778. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  779. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  780. wx/lib/agw/data/default_help_text.html +105 -0
  781. wx/lib/agw/flatmenu.py +7333 -0
  782. wx/lib/agw/flatnotebook.py +6672 -0
  783. wx/lib/agw/floatspin.py +1823 -0
  784. wx/lib/agw/fmcustomizedlg.py +540 -0
  785. wx/lib/agw/fmresources.py +407 -0
  786. wx/lib/agw/foldpanelbar.py +2282 -0
  787. wx/lib/agw/fourwaysplitter.py +1130 -0
  788. wx/lib/agw/genericmessagedialog.py +1549 -0
  789. wx/lib/agw/gradientbutton.py +732 -0
  790. wx/lib/agw/hyperlink.py +664 -0
  791. wx/lib/agw/hypertreelist.py +5374 -0
  792. wx/lib/agw/infobar.py +885 -0
  793. wx/lib/agw/knobctrl.py +945 -0
  794. wx/lib/agw/labelbook.py +3029 -0
  795. wx/lib/agw/multidirdialog.py +615 -0
  796. wx/lib/agw/peakmeter.py +1029 -0
  797. wx/lib/agw/persist/__init__.py +188 -0
  798. wx/lib/agw/persist/persist_constants.py +284 -0
  799. wx/lib/agw/persist/persist_handlers.py +2614 -0
  800. wx/lib/agw/persist/persistencemanager.py +864 -0
  801. wx/lib/agw/piectrl.py +1082 -0
  802. wx/lib/agw/pybusyinfo.py +399 -0
  803. wx/lib/agw/pycollapsiblepane.py +940 -0
  804. wx/lib/agw/pygauge.py +570 -0
  805. wx/lib/agw/pyprogress.py +917 -0
  806. wx/lib/agw/ribbon/__init__.py +198 -0
  807. wx/lib/agw/ribbon/art.py +219 -0
  808. wx/lib/agw/ribbon/art_aui.py +1284 -0
  809. wx/lib/agw/ribbon/art_default.py +81 -0
  810. wx/lib/agw/ribbon/art_internal.py +244 -0
  811. wx/lib/agw/ribbon/art_msw.py +2736 -0
  812. wx/lib/agw/ribbon/art_osx.py +52 -0
  813. wx/lib/agw/ribbon/bar.py +1261 -0
  814. wx/lib/agw/ribbon/buttonbar.py +1320 -0
  815. wx/lib/agw/ribbon/control.py +205 -0
  816. wx/lib/agw/ribbon/gallery.py +974 -0
  817. wx/lib/agw/ribbon/page.py +946 -0
  818. wx/lib/agw/ribbon/panel.py +1170 -0
  819. wx/lib/agw/ribbon/toolbar.py +1442 -0
  820. wx/lib/agw/rulerctrl.py +1887 -0
  821. wx/lib/agw/scrolledthumbnail.py +2119 -0
  822. wx/lib/agw/shapedbutton.py +1809 -0
  823. wx/lib/agw/shortcuteditor.py +2634 -0
  824. wx/lib/agw/speedmeter.py +1801 -0
  825. wx/lib/agw/supertooltip.py +1444 -0
  826. wx/lib/agw/thumbnailctrl.py +529 -0
  827. wx/lib/agw/toasterbox.py +1327 -0
  828. wx/lib/agw/ultimatelistctrl.py +13666 -0
  829. wx/lib/agw/xlsgrid.py +2113 -0
  830. wx/lib/agw/zoombar.py +1339 -0
  831. wx/lib/analogclock/__init__.py +140 -0
  832. wx/lib/analogclock/analogclock.py +631 -0
  833. wx/lib/analogclock/helpers.py +991 -0
  834. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  835. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  836. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  837. wx/lib/analogclock/setup.py +490 -0
  838. wx/lib/analogclock/styles.py +47 -0
  839. wx/lib/anchors.py +103 -0
  840. wx/lib/art/__init__.py +4 -0
  841. wx/lib/art/flagart.py +1583 -0
  842. wx/lib/art/img2pyartprov.py +56 -0
  843. wx/lib/busy.py +146 -0
  844. wx/lib/buttons.py +1141 -0
  845. wx/lib/calendar.py +1597 -0
  846. wx/lib/checkbox.py +837 -0
  847. wx/lib/colourchooser/__init__.py +38 -0
  848. wx/lib/colourchooser/canvas.py +145 -0
  849. wx/lib/colourchooser/intl.py +24 -0
  850. wx/lib/colourchooser/pycolourbox.py +89 -0
  851. wx/lib/colourchooser/pycolourchooser.py +629 -0
  852. wx/lib/colourchooser/pycolourslider.py +100 -0
  853. wx/lib/colourchooser/pypalette.py +211 -0
  854. wx/lib/colourdb.py +740 -0
  855. wx/lib/colourselect.py +385 -0
  856. wx/lib/colourutils.py +118 -0
  857. wx/lib/combotreebox.py +944 -0
  858. wx/lib/delayedresult.py +420 -0
  859. wx/lib/dialogs.py +510 -0
  860. wx/lib/docview.py +3210 -0
  861. wx/lib/dragscroller.py +79 -0
  862. wx/lib/editor/README.txt +77 -0
  863. wx/lib/editor/__init__.py +24 -0
  864. wx/lib/editor/editor.py +974 -0
  865. wx/lib/editor/images.py +15 -0
  866. wx/lib/editor/selection.py +44 -0
  867. wx/lib/embeddedimage.py +76 -0
  868. wx/lib/eventStack.py +136 -0
  869. wx/lib/eventwatcher.py +440 -0
  870. wx/lib/evtmgr.py +521 -0
  871. wx/lib/expando.py +393 -0
  872. wx/lib/fancytext.py +505 -0
  873. wx/lib/filebrowsebutton.py +459 -0
  874. wx/lib/flashwin.py +262 -0
  875. wx/lib/flashwin_old.py +651 -0
  876. wx/lib/floatcanvas/FCEvents.py +53 -0
  877. wx/lib/floatcanvas/FCObjects.py +2923 -0
  878. wx/lib/floatcanvas/FloatCanvas.py +1027 -0
  879. wx/lib/floatcanvas/GUIMode.py +396 -0
  880. wx/lib/floatcanvas/NavCanvas.py +161 -0
  881. wx/lib/floatcanvas/Resources.py +319 -0
  882. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  883. wx/lib/floatcanvas/Utilities/BBox.py +314 -0
  884. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  885. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  886. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  887. wx/lib/floatcanvas/__init__.py +124 -0
  888. wx/lib/foldmenu.py +89 -0
  889. wx/lib/gestures.py +310 -0
  890. wx/lib/gizmos/__init__.py +18 -0
  891. wx/lib/gizmos/dynamicsash.py +1202 -0
  892. wx/lib/gizmos/ledctrl.py +300 -0
  893. wx/lib/gizmos/treelistctrl.py +87 -0
  894. wx/lib/graphics.py +1939 -0
  895. wx/lib/gridmovers.py +511 -0
  896. wx/lib/iewin.py +249 -0
  897. wx/lib/iewin_old.py +894 -0
  898. wx/lib/imagebrowser.py +856 -0
  899. wx/lib/imageutils.py +163 -0
  900. wx/lib/infoframe.py +490 -0
  901. wx/lib/inspection.py +1255 -0
  902. wx/lib/intctrl.py +1001 -0
  903. wx/lib/itemspicker.py +256 -0
  904. wx/lib/langlistctrl.py +480 -0
  905. wx/lib/layoutf.py +271 -0
  906. wx/lib/masked/__init__.py +27 -0
  907. wx/lib/masked/combobox.py +839 -0
  908. wx/lib/masked/ctrl.py +108 -0
  909. wx/lib/masked/ipaddrctrl.py +242 -0
  910. wx/lib/masked/maskededit.py +7279 -0
  911. wx/lib/masked/numctrl.py +2001 -0
  912. wx/lib/masked/textctrl.py +465 -0
  913. wx/lib/masked/timectrl.py +1466 -0
  914. wx/lib/mixins/__init__.py +17 -0
  915. wx/lib/mixins/grid.py +47 -0
  916. wx/lib/mixins/gridlabelrenderer.py +251 -0
  917. wx/lib/mixins/imagelist.py +77 -0
  918. wx/lib/mixins/inspection.py +184 -0
  919. wx/lib/mixins/listctrl.py +894 -0
  920. wx/lib/mixins/rubberband.py +404 -0
  921. wx/lib/mixins/treemixin.py +678 -0
  922. wx/lib/msgpanel.py +95 -0
  923. wx/lib/multisash.py +747 -0
  924. wx/lib/myole4ax.idl +178 -0
  925. wx/lib/myole4ax.tlb +0 -0
  926. wx/lib/newevent.py +229 -0
  927. wx/lib/nvdlg.py +156 -0
  928. wx/lib/ogl/__init__.py +13 -0
  929. wx/lib/ogl/basic.py +3991 -0
  930. wx/lib/ogl/bmpshape.py +87 -0
  931. wx/lib/ogl/canvas.py +467 -0
  932. wx/lib/ogl/composit.py +1577 -0
  933. wx/lib/ogl/diagram.py +230 -0
  934. wx/lib/ogl/divided.py +483 -0
  935. wx/lib/ogl/drawn.py +900 -0
  936. wx/lib/ogl/lines.py +1811 -0
  937. wx/lib/ogl/oglmisc.py +608 -0
  938. wx/lib/pdfviewer/__init__.py +113 -0
  939. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  940. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  941. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  942. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  943. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  944. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  945. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  946. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  947. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  948. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  949. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  950. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  951. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  952. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  953. wx/lib/pdfviewer/buttonpanel.py +279 -0
  954. wx/lib/pdfviewer/images.py +240 -0
  955. wx/lib/pdfviewer/viewer.py +1077 -0
  956. wx/lib/pdfwin.py +295 -0
  957. wx/lib/pdfwin_old.py +789 -0
  958. wx/lib/platebtn.py +789 -0
  959. wx/lib/plot/CHANGELOG.md +150 -0
  960. wx/lib/plot/README.md +16 -0
  961. wx/lib/plot/__init__.py +46 -0
  962. wx/lib/plot/__main__.py +5 -0
  963. wx/lib/plot/examples/__init__.py +0 -0
  964. wx/lib/plot/examples/demo.py +1009 -0
  965. wx/lib/plot/examples/simple_example.py +54 -0
  966. wx/lib/plot/plotcanvas.py +2981 -0
  967. wx/lib/plot/polyobjects.py +1525 -0
  968. wx/lib/plot/utils.py +327 -0
  969. wx/lib/popupctl.py +250 -0
  970. wx/lib/printout.py +1157 -0
  971. wx/lib/progressindicator.py +151 -0
  972. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  973. wx/lib/pubsub/README_WxPython.txt +22 -0
  974. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  975. wx/lib/pubsub/__init__.py +25 -0
  976. wx/lib/pubsub/core/__init__.py +92 -0
  977. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  978. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  979. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  980. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  981. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  982. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  983. wx/lib/pubsub/core/callables.py +191 -0
  984. wx/lib/pubsub/core/imp2.py +63 -0
  985. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  986. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  987. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  988. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  989. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  990. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  991. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +217 -0
  992. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  993. wx/lib/pubsub/core/listener.py +40 -0
  994. wx/lib/pubsub/core/listenerbase.py +185 -0
  995. wx/lib/pubsub/core/notificationmgr.py +185 -0
  996. wx/lib/pubsub/core/publisherbase.py +191 -0
  997. wx/lib/pubsub/core/topicargspec.py +77 -0
  998. wx/lib/pubsub/core/topicdefnprovider.py +632 -0
  999. wx/lib/pubsub/core/topicexc.py +72 -0
  1000. wx/lib/pubsub/core/topicmgr.py +456 -0
  1001. wx/lib/pubsub/core/topicobj.py +472 -0
  1002. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  1003. wx/lib/pubsub/core/topicutils.py +118 -0
  1004. wx/lib/pubsub/core/treeconfig.py +21 -0
  1005. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  1006. wx/lib/pubsub/core/weakmethod.py +102 -0
  1007. wx/lib/pubsub/policies.py +24 -0
  1008. wx/lib/pubsub/pub.py +199 -0
  1009. wx/lib/pubsub/py2and3.py +608 -0
  1010. wx/lib/pubsub/setuparg1.py +47 -0
  1011. wx/lib/pubsub/setupkwargs.py +29 -0
  1012. wx/lib/pubsub/utils/__init__.py +27 -0
  1013. wx/lib/pubsub/utils/exchandling.py +100 -0
  1014. wx/lib/pubsub/utils/misc.py +100 -0
  1015. wx/lib/pubsub/utils/notification.py +331 -0
  1016. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  1017. wx/lib/pubsub/utils/xmltopicdefnprovider.py +287 -0
  1018. wx/lib/pydocview.py +3300 -0
  1019. wx/lib/rcsizer.py +229 -0
  1020. wx/lib/resizewidget.py +357 -0
  1021. wx/lib/scrolledpanel.py +225 -0
  1022. wx/lib/sheet.py +350 -0
  1023. wx/lib/sized_controls.py +691 -0
  1024. wx/lib/softwareupdate.py +361 -0
  1025. wx/lib/splitter.py +925 -0
  1026. wx/lib/statbmp.py +199 -0
  1027. wx/lib/stattext.py +322 -0
  1028. wx/lib/throbber.py +425 -0
  1029. wx/lib/ticker.py +295 -0
  1030. wx/lib/ticker_xrc.py +48 -0
  1031. wx/lib/utils.py +89 -0
  1032. wx/lib/wordwrap.py +97 -0
  1033. wx/lib/wxcairo/__init__.py +124 -0
  1034. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  1035. wx/lib/wxcairo/wx_pycairo.py +463 -0
  1036. wx/lib/wxpTag.py +274 -0
  1037. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  1038. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  1039. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  1040. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  1041. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  1042. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  1043. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  1044. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  1045. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  1046. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  1047. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  1048. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  1049. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  1050. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  1051. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  1052. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  1053. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  1054. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  1055. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  1056. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  1057. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  1058. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  1059. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  1060. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  1061. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  1062. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  1063. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  1064. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  1065. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  1066. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  1067. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  1068. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  1069. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  1070. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  1071. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  1072. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  1073. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  1074. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  1075. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  1076. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  1077. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  1078. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  1079. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  1080. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  1081. wx/media.py +27 -0
  1082. wx/media.pyi +223 -0
  1083. wx/msw.py +13 -0
  1084. wx/msw.pyi +65 -0
  1085. wx/propgrid.py +1451 -0
  1086. wx/propgrid.pyi +7914 -0
  1087. wx/py/CHANGES.txt +796 -0
  1088. wx/py/Py.ico +0 -0
  1089. wx/py/PyAlaCarte.py +34 -0
  1090. wx/py/PyAlaMode.py +34 -0
  1091. wx/py/PyAlaModeTest.py +33 -0
  1092. wx/py/PyCrust.ico +0 -0
  1093. wx/py/PyCrust.py +78 -0
  1094. wx/py/PyCrust_16.png +0 -0
  1095. wx/py/PyCrust_32.png +0 -0
  1096. wx/py/PyFilling.py +35 -0
  1097. wx/py/PyShell.py +78 -0
  1098. wx/py/PySlices.ico +0 -0
  1099. wx/py/PySlices.py +98 -0
  1100. wx/py/PySlicesShell.py +94 -0
  1101. wx/py/PySlices_16.png +0 -0
  1102. wx/py/PySlices_32.png +0 -0
  1103. wx/py/PyWrap.py +52 -0
  1104. wx/py/README.txt +77 -0
  1105. wx/py/__init__.py +20 -0
  1106. wx/py/buffer.py +136 -0
  1107. wx/py/crust.py +403 -0
  1108. wx/py/crustslices.py +403 -0
  1109. wx/py/dispatcher.py +259 -0
  1110. wx/py/document.py +37 -0
  1111. wx/py/editor.py +844 -0
  1112. wx/py/editwindow.py +299 -0
  1113. wx/py/filling.py +357 -0
  1114. wx/py/frame.py +978 -0
  1115. wx/py/images.py +212 -0
  1116. wx/py/interpreter.py +170 -0
  1117. wx/py/introspect.py +393 -0
  1118. wx/py/magic.py +98 -0
  1119. wx/py/parse.py +134 -0
  1120. wx/py/path.py +36 -0
  1121. wx/py/pseudo.py +99 -0
  1122. wx/py/shell.py +1588 -0
  1123. wx/py/sliceshell.py +3814 -0
  1124. wx/py/tests/test_interpreter.py +71 -0
  1125. wx/py/tests/test_introspect.py +862 -0
  1126. wx/py/tests/test_pseudo.py +70 -0
  1127. wx/py/tests/test_version.py +36 -0
  1128. wx/py/tests/testall.py +22 -0
  1129. wx/py/version.py +7 -0
  1130. wx/ribbon.py +45 -0
  1131. wx/ribbon.pyi +2494 -0
  1132. wx/richtext.py +142 -0
  1133. wx/richtext.pyi +12113 -0
  1134. wx/siplib.cp313-win_amd64.pyd +0 -0
  1135. wx/stc.py +58 -0
  1136. wx/stc.pyi +8463 -0
  1137. wx/svg/__init__.py +364 -0
  1138. wx/svg/_nanosvg.cp313-win_amd64.pyd +0 -0
  1139. wx/tools/__init__.py +18 -0
  1140. wx/tools/dbg.py +268 -0
  1141. wx/tools/genaxmodule.py +50 -0
  1142. wx/tools/helpviewer.py +92 -0
  1143. wx/tools/img2img.py +85 -0
  1144. wx/tools/img2png.py +54 -0
  1145. wx/tools/img2py.py +309 -0
  1146. wx/tools/img2xpm.py +54 -0
  1147. wx/tools/pywxrc.py +949 -0
  1148. wx/tools/wxget.py +254 -0
  1149. wx/tools/wxget_docs_demo.py +186 -0
  1150. wx/wxbase315u_net_vc140_x64.dll +0 -0
  1151. wx/wxbase315u_vc140_x64.dll +0 -0
  1152. wx/wxbase315u_xml_vc140_x64.dll +0 -0
  1153. wx/wxmsw315u_adv_vc140_x64.dll +0 -0
  1154. wx/wxmsw315u_aui_vc140_x64.dll +0 -0
  1155. wx/wxmsw315u_core_vc140_x64.dll +0 -0
  1156. wx/wxmsw315u_gl_vc140_x64.dll +0 -0
  1157. wx/wxmsw315u_html_vc140_x64.dll +0 -0
  1158. wx/wxmsw315u_media_vc140_x64.dll +0 -0
  1159. wx/wxmsw315u_propgrid_vc140_x64.dll +0 -0
  1160. wx/wxmsw315u_qa_vc140_x64.dll +0 -0
  1161. wx/wxmsw315u_ribbon_vc140_x64.dll +0 -0
  1162. wx/wxmsw315u_richtext_vc140_x64.dll +0 -0
  1163. wx/wxmsw315u_stc_vc140_x64.dll +0 -0
  1164. wx/wxmsw315u_webview_vc140_x64.dll +0 -0
  1165. wx/wxmsw315u_xrc_vc140_x64.dll +0 -0
  1166. wx/xml.py +15 -0
  1167. wx/xml.pyi +575 -0
  1168. wx/xrc.py +65 -0
  1169. wx/xrc.pyi +742 -0
  1170. wxPython_zombie-3.1.5.8.dist-info/LICENSE.txt +950 -0
  1171. wxPython_zombie-3.1.5.8.dist-info/METADATA +107 -0
  1172. wxPython_zombie-3.1.5.8.dist-info/RECORD +1175 -0
  1173. wxPython_zombie-3.1.5.8.dist-info/WHEEL +5 -0
  1174. wxPython_zombie-3.1.5.8.dist-info/entry_points.txt +2 -0
  1175. wxPython_zombie-3.1.5.8.dist-info/top_level.txt +1 -0
wx/py/shell.py ADDED
@@ -0,0 +1,1588 @@
1
+ """Shell is an interactive text control in which a user types in
2
+ commands to be sent to the interpreter. This particular shell is
3
+ based on wxPython's wxStyledTextCtrl.
4
+
5
+ Sponsored by Orbtech - Your source for Python programming expertise."""
6
+
7
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
8
+
9
+ import wx
10
+ from wx import stc
11
+ from six import PY3
12
+
13
+ import keyword
14
+ import os
15
+ import sys
16
+ import time
17
+ from functools import cmp_to_key
18
+
19
+ from .buffer import Buffer
20
+ from . import dispatcher
21
+ from . import editwindow
22
+ from . import frame
23
+ from .pseudo import PseudoFileIn
24
+ from .pseudo import PseudoFileOut
25
+ from .pseudo import PseudoFileErr
26
+ from .version import VERSION
27
+ from .magic import magic
28
+ from .path import ls,cd,pwd,sx
29
+
30
+ sys.ps3 = '<-- ' # Input prompt.
31
+ USE_MAGIC=True
32
+ # Force updates from long-running commands after this many seconds
33
+ PRINT_UPDATE_MAX_TIME=2
34
+
35
+ NAVKEYS = (wx.WXK_END, wx.WXK_LEFT, wx.WXK_RIGHT,
36
+ wx.WXK_UP, wx.WXK_DOWN, wx.WXK_PAGEUP, wx.WXK_PAGEDOWN)
37
+
38
+
39
+ class ShellFrame(frame.Frame, frame.ShellFrameMixin):
40
+ """Frame containing the shell component."""
41
+
42
+ name = 'Shell Frame'
43
+
44
+ def __init__(self, parent=None, id=-1, title='PyShell',
45
+ pos=wx.DefaultPosition, size=wx.DefaultSize,
46
+ style=wx.DEFAULT_FRAME_STYLE, locals=None,
47
+ InterpClass=None,
48
+ config=None, dataDir=None,
49
+ *args, **kwds):
50
+ """Create ShellFrame instance."""
51
+ frame.Frame.__init__(self, parent, id, title, pos, size, style)
52
+ frame.ShellFrameMixin.__init__(self, config, dataDir)
53
+
54
+ if size == wx.DefaultSize:
55
+ self.SetSize((750, 525))
56
+
57
+ intro = 'PyShell %s - The Flakiest Python Shell' % VERSION
58
+ self.SetStatusText(intro.replace('\n', ', '))
59
+ self.shell = Shell(parent=self, id=-1, introText=intro,
60
+ locals=locals, InterpClass=InterpClass,
61
+ startupScript=self.startupScript,
62
+ execStartupScript=self.execStartupScript,
63
+ *args, **kwds)
64
+
65
+ # Override the shell so that status messages go to the status bar.
66
+ self.shell.setStatusText = self.SetStatusText
67
+
68
+ self.shell.SetFocus()
69
+ self.LoadSettings()
70
+
71
+
72
+ def OnClose(self, event):
73
+ """Event handler for closing."""
74
+ # This isn't working the way I want, but I'll leave it for now.
75
+ if self.shell.waiting:
76
+ if event.CanVeto():
77
+ event.Veto(True)
78
+ else:
79
+ self.SaveSettings()
80
+ self.shell.destroy()
81
+ self.Destroy()
82
+
83
+ def OnAbout(self, event):
84
+ """Display an About window."""
85
+ title = 'About PyShell'
86
+ text = 'PyShell %s\n\n' % VERSION + \
87
+ 'Yet another Python shell, only flakier.\n\n' + \
88
+ 'Half-baked by Patrick K. O\'Brien,\n' + \
89
+ 'the other half is still in the oven.\n\n' + \
90
+ 'Platform: %s\n' % sys.platform + \
91
+ 'Python Version: %s\n' % sys.version.split()[0] + \
92
+ 'wxPython Version: %s\n' % wx.VERSION_STRING + \
93
+ ('\t(%s)\n' % ", ".join(wx.PlatformInfo[1:]))
94
+ dialog = wx.MessageDialog(self, text, title,
95
+ wx.OK | wx.ICON_INFORMATION)
96
+ dialog.ShowModal()
97
+ dialog.Destroy()
98
+
99
+
100
+ def OnHelp(self, event):
101
+ """Show a help dialog."""
102
+ frame.ShellFrameMixin.OnHelp(self, event)
103
+
104
+
105
+ def LoadSettings(self):
106
+ if self.config is not None:
107
+ frame.ShellFrameMixin.LoadSettings(self)
108
+ frame.Frame.LoadSettings(self, self.config)
109
+ self.shell.LoadSettings(self.config)
110
+
111
+ def SaveSettings(self, force=False):
112
+ if self.config is not None:
113
+ frame.ShellFrameMixin.SaveSettings(self)
114
+ if self.autoSaveSettings or force:
115
+ frame.Frame.SaveSettings(self, self.config)
116
+ self.shell.SaveSettings(self.config)
117
+
118
+ def DoSaveSettings(self):
119
+ if self.config is not None:
120
+ self.SaveSettings(force=True)
121
+ self.config.Flush()
122
+
123
+
124
+
125
+
126
+ HELP_TEXT = """\
127
+ * Key bindings:
128
+ Home Go to the beginning of the command or line.
129
+ Shift+Home Select to the beginning of the command or line.
130
+ Shift+End Select to the end of the line.
131
+ End Go to the end of the line.
132
+ Ctrl+C Copy selected text, removing prompts.
133
+ Ctrl+Shift+C Copy selected text, retaining prompts.
134
+ Alt+C Copy to the clipboard, including prefixed prompts.
135
+ Ctrl+X Cut selected text.
136
+ Ctrl+V Paste from clipboard.
137
+ Ctrl+Shift+V Paste and run multiple commands from clipboard.
138
+ Ctrl+Up Arrow Retrieve Previous History item.
139
+ Alt+P Retrieve Previous History item.
140
+ Ctrl+Down Arrow Retrieve Next History item.
141
+ Alt+N Retrieve Next History item.
142
+ Shift+Up Arrow Insert Previous History item.
143
+ Shift+Down Arrow Insert Next History item.
144
+ F8 Command-completion of History item.
145
+ (Type a few characters of a previous command and press F8.)
146
+ Ctrl+Enter Insert new line into multiline command.
147
+ Ctrl+] Increase font size.
148
+ Ctrl+[ Decrease font size.
149
+ Ctrl+= Default font size.
150
+ Ctrl-Space Show Auto Completion.
151
+ Ctrl-Alt-Space Show Call Tip.
152
+ Shift+Enter Complete Text from History.
153
+ Ctrl+F Search
154
+ F3 Search next
155
+ Ctrl+H "hide" lines containing selection / "unhide"
156
+ F12 on/off "free-edit" mode
157
+ """
158
+
159
+ class ShellFacade:
160
+ """Simplified interface to all shell-related functionality.
161
+
162
+ This is a semi-transparent facade, in that all attributes of other
163
+ are accessible, even though only some are visible to the user."""
164
+
165
+ name = 'Shell Interface'
166
+
167
+ def __init__(self, other):
168
+ """Create a ShellFacade instance."""
169
+ d = self.__dict__
170
+ d['other'] = other
171
+ d['helpText'] = HELP_TEXT
172
+
173
+ def help(self):
174
+ """Display some useful information about how to use the shell."""
175
+ self.write(self.helpText)
176
+
177
+ def __getattr__(self, name):
178
+ if hasattr(self.other, name):
179
+ return getattr(self.other, name)
180
+ else:
181
+ raise AttributeError(name)
182
+
183
+ def __setattr__(self, name, value):
184
+ if name in self.__dict__:
185
+ self.__dict__[name] = value
186
+ elif hasattr(self.other, name):
187
+ setattr(self.other, name, value)
188
+ else:
189
+ raise AttributeError(name)
190
+
191
+ def _getAttributeNames(self):
192
+ """Return list of magic attributes to extend introspection."""
193
+ list = [
194
+ 'about',
195
+ 'ask',
196
+ 'autoCallTip',
197
+ 'autoComplete',
198
+ 'autoCompleteAutoHide',
199
+ 'autoCompleteCaseInsensitive',
200
+ 'autoCompleteIncludeDouble',
201
+ 'autoCompleteIncludeMagic',
202
+ 'autoCompleteIncludeSingle',
203
+ 'callTipInsert',
204
+ 'clear',
205
+ 'pause',
206
+ 'prompt',
207
+ 'quit',
208
+ 'redirectStderr',
209
+ 'redirectStdin',
210
+ 'redirectStdout',
211
+ 'run',
212
+ 'runfile',
213
+ 'wrap',
214
+ 'zoom',
215
+ ]
216
+ list.sort()
217
+ return list
218
+
219
+
220
+ #DNM
221
+ DISPLAY_TEXT="""
222
+ Author: %r
223
+ Py Version: %s
224
+ Python Version: %s
225
+ wxPython Version: %s
226
+ wxPython PlatformInfo: %s
227
+ Platform: %s"""
228
+
229
+ class Shell(editwindow.EditWindow):
230
+ """Shell based on StyledTextCtrl."""
231
+
232
+ name = 'Shell'
233
+
234
+ def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
235
+ size=wx.DefaultSize, style=wx.CLIP_CHILDREN,
236
+ introText='', locals=None, InterpClass=None,
237
+ startupScript=None, execStartupScript=True,
238
+ useStockId=True,
239
+ *args, **kwds):
240
+ """Create Shell instance."""
241
+ editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
242
+ self.wrap()
243
+ if locals is None:
244
+ import __main__
245
+ locals = __main__.__dict__
246
+
247
+ # Grab these so they can be restored by self.redirect* methods.
248
+ self.stdin = sys.stdin
249
+ self.stdout = sys.stdout
250
+ self.stderr = sys.stderr
251
+
252
+ # Import a default interpreter class if one isn't provided.
253
+ if InterpClass is None:
254
+ from .interpreter import Interpreter
255
+ else:
256
+ Interpreter = InterpClass
257
+
258
+ # Create a replacement for stdin.
259
+ self.reader = PseudoFileIn(self.readline, self.readlines)
260
+ self.reader.input = ''
261
+ self.reader.isreading = False
262
+
263
+ # Set up the interpreter.
264
+ self.interp = Interpreter(locals=locals,
265
+ rawin=self.raw_input,
266
+ stdin=self.reader,
267
+ stdout=PseudoFileOut(self.writeOut),
268
+ stderr=PseudoFileErr(self.writeErr),
269
+ *args, **kwds)
270
+
271
+ # Set up the buffer.
272
+ self.buffer = Buffer()
273
+
274
+ # Find out for which keycodes the interpreter will autocomplete.
275
+ self.autoCompleteKeys = self.interp.getAutoCompleteKeys()
276
+
277
+ # Keep track of the last non-continuation prompt positions.
278
+ self.promptPosStart = 0
279
+ self.promptPosEnd = 0
280
+
281
+ # Keep track of multi-line commands.
282
+ self.more = False
283
+
284
+ # For use with forced updates during long-running scripts
285
+ self.lastUpdate=None
286
+
287
+ # Create the command history. Commands are added into the
288
+ # front of the list (ie. at index 0) as they are entered.
289
+ # self.historyIndex is the current position in the history; it
290
+ # gets incremented as you retrieve the previous command,
291
+ # decremented as you retrieve the next, and reset when you hit
292
+ # Enter. self.historyIndex == -1 means you're on the current
293
+ # command, not in the history.
294
+ self.history = []
295
+ self.historyIndex = -1
296
+
297
+ #seb add mode for "free edit"
298
+ self.noteMode = 0
299
+ self.MarkerDefine(0,stc.STC_MARK_ROUNDRECT) # marker for hidden
300
+ self.searchTxt = ""
301
+
302
+ # Assign handlers for keyboard events.
303
+ self.Bind(wx.EVT_CHAR, self.OnChar)
304
+ self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
305
+
306
+ # Assign handler for the context menu
307
+ self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
308
+ self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI)
309
+
310
+ # add the option to not use the stock IDs; otherwise the context menu
311
+ # may not work on Mac without adding the proper IDs to the menu bar
312
+ if useStockId:
313
+ self.ID_CUT = wx.ID_CUT
314
+ self.ID_COPY = wx.ID_COPY
315
+ self.ID_PASTE = wx.ID_PASTE
316
+ self.ID_SELECTALL = wx.ID_SELECTALL
317
+ self.ID_CLEAR = wx.ID_CLEAR
318
+ self.ID_UNDO = wx.ID_UNDO
319
+ self.ID_REDO = wx.ID_REDO
320
+ else:
321
+ self.ID_CUT = wx.NewIdRef()
322
+ self.ID_COPY = wx.NewIdRef()
323
+ self.ID_PASTE = wx.NewIdRef()
324
+ self.ID_SELECTALL = wx.NewIdRef()
325
+ self.ID_CLEAR = wx.NewIdRef()
326
+ self.ID_UNDO = wx.NewIdRef()
327
+ self.ID_REDO = wx.NewIdRef()
328
+
329
+ # Assign handlers for edit events
330
+ self.Bind(wx.EVT_MENU, lambda evt: self.Cut(), id=self.ID_CUT)
331
+ self.Bind(wx.EVT_MENU, lambda evt: self.Copy(), id=self.ID_COPY)
332
+ self.Bind(wx.EVT_MENU, lambda evt: self.CopyWithPrompts(), id=frame.ID_COPY_PLUS)
333
+ self.Bind(wx.EVT_MENU, lambda evt: self.Paste(), id=self.ID_PASTE)
334
+ self.Bind(wx.EVT_MENU, lambda evt: self.PasteAndRun(), id=frame.ID_PASTE_PLUS)
335
+ self.Bind(wx.EVT_MENU, lambda evt: self.SelectAll(), id=self.ID_SELECTALL)
336
+ self.Bind(wx.EVT_MENU, lambda evt: self.Clear(), id=self.ID_CLEAR)
337
+ self.Bind(wx.EVT_MENU, lambda evt: self.Undo(), id=self.ID_UNDO)
338
+ self.Bind(wx.EVT_MENU, lambda evt: self.Redo(), id=self.ID_REDO)
339
+
340
+
341
+ # Assign handler for idle time.
342
+ self.waiting = False
343
+ self.Bind(wx.EVT_IDLE, self.OnIdle)
344
+
345
+ # Display the introductory banner information.
346
+ self.showIntro(introText)
347
+
348
+ # Assign some pseudo keywords to the interpreter's namespace.
349
+ self.setBuiltinKeywords()
350
+
351
+ # Add 'shell' to the interpreter's local namespace.
352
+ self.setLocalShell()
353
+
354
+ ## NOTE: See note at bottom of this file...
355
+ ## #seb: File drag and drop
356
+ ## self.SetDropTarget( FileDropTarget(self) )
357
+
358
+ # Do this last so the user has complete control over their
359
+ # environment. They can override anything they want.
360
+ if execStartupScript:
361
+ if startupScript is None:
362
+ startupScript = os.environ.get('PYTHONSTARTUP')
363
+ self.execStartupScript(startupScript)
364
+ else:
365
+ self.prompt()
366
+
367
+ wx.CallAfter(self.ScrollToLine, 0)
368
+
369
+
370
+ def clearHistory(self):
371
+ self.history = []
372
+ self.historyIndex = -1
373
+ dispatcher.send(signal="Shell.clearHistory")
374
+
375
+
376
+ def destroy(self):
377
+ del self.interp
378
+
379
+ def setFocus(self):
380
+ """Set focus to the shell."""
381
+ self.SetFocus()
382
+
383
+ def OnIdle(self, event):
384
+ """Free the CPU to do other things."""
385
+ if self.waiting:
386
+ time.sleep(0.05)
387
+ event.Skip()
388
+
389
+ def showIntro(self, text=''):
390
+ """Display introductory text in the shell."""
391
+ if text:
392
+ self.write(text)
393
+ try:
394
+ if self.interp.introText:
395
+ if text and not text.endswith(os.linesep):
396
+ self.write(os.linesep)
397
+ self.write(self.interp.introText)
398
+ except AttributeError:
399
+ pass
400
+
401
+ def setBuiltinKeywords(self):
402
+ """Create pseudo keywords as part of builtins.
403
+
404
+ This sets "close", "exit" and "quit" to a helpful string.
405
+ """
406
+ from six.moves import builtins
407
+ builtins.close = builtins.exit = builtins.quit = \
408
+ 'Click on the close button to leave the application.'
409
+ builtins.cd = cd
410
+ builtins.ls = ls
411
+ builtins.pwd = pwd
412
+ builtins.sx = sx
413
+
414
+
415
+ def quit(self):
416
+ """Quit the application."""
417
+ # XXX Good enough for now but later we want to send a close event.
418
+ # In the close event handler we can make sure they want to
419
+ # quit. Other applications, like PythonCard, may choose to
420
+ # hide rather than quit so we should just post the event and
421
+ # let the surrounding app decide what it wants to do.
422
+ self.write('Click on the close button to leave the application.')
423
+
424
+
425
+ def setLocalShell(self):
426
+ """Add 'shell' to locals as reference to ShellFacade instance."""
427
+ self.interp.locals['shell'] = ShellFacade(other=self)
428
+
429
+
430
+ def execStartupScript(self, startupScript):
431
+ """Execute the user's PYTHONSTARTUP script if they have one."""
432
+ if startupScript and os.path.isfile(startupScript):
433
+ text = 'Startup script executed: ' + startupScript
434
+ if PY3:
435
+ self.push('print(%r)' % text)
436
+ self.push('with open(%r, "r") as f:\n'
437
+ ' exec(f.read())\n' % (startupScript))
438
+ else:
439
+ self.push('print(%r); execfile(%r)' % (text, startupScript))
440
+ self.interp.startupScript = startupScript
441
+ else:
442
+ self.push('')
443
+
444
+
445
+ def about(self):
446
+ """Display information about Py."""
447
+ #DNM
448
+ text = DISPLAY_TEXT % \
449
+ (__author__, VERSION,
450
+ sys.version.split()[0], wx.VERSION_STRING, str(wx.PlatformInfo),
451
+ sys.platform)
452
+ self.write(text.strip())
453
+
454
+
455
+ def OnChar(self, event):
456
+ """Keypress event handler.
457
+
458
+ Only receives an event if OnKeyDown calls event.Skip() for the
459
+ corresponding event."""
460
+
461
+ if self.noteMode:
462
+ event.Skip()
463
+ return
464
+
465
+ # Prevent modification of previously submitted
466
+ # commands/responses.
467
+ if not self.CanEdit():
468
+ return
469
+ key = event.GetKeyCode()
470
+ currpos = self.GetCurrentPos()
471
+ stoppos = self.promptPosEnd
472
+ # Return (Enter) needs to be ignored in this handler.
473
+ if key in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
474
+ pass
475
+ elif key in self.autoCompleteKeys:
476
+ # Usually the dot (period) key activates auto completion.
477
+ # Get the command between the prompt and the cursor. Add
478
+ # the autocomplete character to the end of the command.
479
+ if self.AutoCompActive():
480
+ self.AutoCompCancel()
481
+ command = self.GetTextRange(stoppos, currpos) + chr(key)
482
+ self.write(chr(key))
483
+ if self.autoComplete:
484
+ self.autoCompleteShow(command)
485
+ elif key == ord('('):
486
+ # The left paren activates a call tip and cancels an
487
+ # active auto completion.
488
+ if self.AutoCompActive():
489
+ self.AutoCompCancel()
490
+ # Get the command between the prompt and the cursor. Add
491
+ # the '(' to the end of the command.
492
+ self.ReplaceSelection('')
493
+ command = self.GetTextRange(stoppos, currpos) + '('
494
+ self.write('(')
495
+ self.autoCallTipShow(command, self.GetCurrentPos() == self.GetTextLength())
496
+ else:
497
+ # Allow the normal event handling to take place.
498
+ event.Skip()
499
+
500
+
501
+ def OnKeyDown(self, event):
502
+ """Key down event handler."""
503
+
504
+ key = event.GetKeyCode()
505
+ # If the auto-complete window is up let it do its thing.
506
+ if self.AutoCompActive():
507
+ event.Skip()
508
+ return
509
+
510
+ # Prevent modification of previously submitted
511
+ # commands/responses.
512
+ controlDown = event.ControlDown()
513
+ rawControlDown = event.RawControlDown()
514
+ altDown = event.AltDown()
515
+ shiftDown = event.ShiftDown()
516
+ currpos = self.GetCurrentPos()
517
+ endpos = self.GetTextLength()
518
+ selecting = self.GetSelectionStart() != self.GetSelectionEnd()
519
+
520
+ if (rawControlDown or controlDown) and shiftDown and key in (ord('F'), ord('f')):
521
+ li = self.GetCurrentLine()
522
+ m = self.MarkerGet(li)
523
+ if m & 1<<0:
524
+ startP = self.PositionFromLine(li)
525
+ self.MarkerDelete(li, 0)
526
+ maxli = self.GetLineCount()
527
+ li += 1 # li stayed visible as header-line
528
+ li0 = li
529
+ while li<maxli and self.GetLineVisible(li) == 0:
530
+ li += 1
531
+ endP = self.GetLineEndPosition(li-1)
532
+ self.ShowLines(li0, li-1)
533
+ # select reappearing text to allow "hide again"
534
+ self.SetSelection( startP, endP )
535
+ return
536
+ startP,endP = self.GetSelection()
537
+ endP-=1
538
+ startL = self.LineFromPosition(startP)
539
+ endL = self.LineFromPosition(endP)
540
+
541
+ # never hide last prompt
542
+ if endL == self.LineFromPosition(self.promptPosEnd):
543
+ endL -= 1
544
+
545
+ m = self.MarkerGet(startL)
546
+ self.MarkerAdd(startL, 0)
547
+ self.HideLines(startL+1,endL)
548
+ self.SetCurrentPos( startP ) # to ensure caret stays visible !
549
+
550
+ if key == wx.WXK_F12: #seb
551
+ if self.noteMode:
552
+ # self.promptPosStart not used anyway - or ?
553
+ self.promptPosEnd = \
554
+ self.PositionFromLine( self.GetLineCount()-1 ) + \
555
+ len(str(sys.ps1))
556
+ self.GotoLine(self.GetLineCount())
557
+ self.GotoPos(self.promptPosEnd)
558
+ self.prompt() #make sure we have a prompt
559
+ self.SetCaretForeground("black")
560
+ self.SetCaretWidth(1) #default
561
+ self.SetCaretPeriod(500) #default
562
+ else:
563
+ self.SetCaretForeground("red")
564
+ self.SetCaretWidth(4)
565
+ self.SetCaretPeriod(0) #steady
566
+
567
+ self.noteMode = not self.noteMode
568
+ return
569
+ if self.noteMode:
570
+ event.Skip()
571
+ return
572
+
573
+ # Return (Enter) is used to submit a command to the
574
+ # interpreter.
575
+ if (not (rawControlDown or controlDown) and not shiftDown and not altDown) and \
576
+ key in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
577
+ if self.CallTipActive():
578
+ self.CallTipCancel()
579
+ self.processLine()
580
+
581
+ # Complete Text (from already typed words)
582
+ elif shiftDown and key in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
583
+ self.OnShowCompHistory()
584
+
585
+ # Ctrl+Return (Ctrl+Enter) is used to insert a line break.
586
+ elif (rawControlDown or controlDown) and key in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
587
+ if self.CallTipActive():
588
+ self.CallTipCancel()
589
+ if currpos == endpos:
590
+ self.processLine()
591
+ else:
592
+ self.insertLineBreak()
593
+
594
+ # Let Ctrl-Alt-* get handled normally.
595
+ elif (rawControlDown or controlDown) and altDown:
596
+ event.Skip()
597
+
598
+ # Clear the current, unexecuted command.
599
+ elif key == wx.WXK_ESCAPE:
600
+ if self.CallTipActive():
601
+ event.Skip()
602
+ else:
603
+ self.clearCommand()
604
+
605
+ # Clear the current command
606
+ elif key == wx.WXK_BACK and (rawControlDown or controlDown) and shiftDown:
607
+ self.clearCommand()
608
+
609
+ # Increase font size.
610
+ elif (rawControlDown or controlDown) and key in (ord(']'), wx.WXK_NUMPAD_ADD):
611
+ dispatcher.send(signal='FontIncrease')
612
+
613
+ # Decrease font size.
614
+ elif (rawControlDown or controlDown) and key in (ord('['), wx.WXK_NUMPAD_SUBTRACT):
615
+ dispatcher.send(signal='FontDecrease')
616
+
617
+ # Default font size.
618
+ elif (rawControlDown or controlDown) and key in (ord('='), wx.WXK_NUMPAD_DIVIDE):
619
+ dispatcher.send(signal='FontDefault')
620
+
621
+ # Cut to the clipboard.
622
+ elif ((rawControlDown or controlDown) and key in (ord('X'), ord('x'))) \
623
+ or (shiftDown and key == wx.WXK_DELETE):
624
+ self.Cut()
625
+
626
+ # Copy to the clipboard.
627
+ elif (rawControlDown or controlDown) and not shiftDown \
628
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
629
+ self.Copy()
630
+
631
+ # Copy to the clipboard, including prompts.
632
+ elif (rawControlDown or controlDown) and shiftDown \
633
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
634
+ self.CopyWithPrompts()
635
+
636
+ # Copy to the clipboard, including prefixed prompts.
637
+ elif altDown and not controlDown \
638
+ and key in (ord('C'), ord('c'), wx.WXK_INSERT):
639
+ self.CopyWithPromptsPrefixed()
640
+
641
+ # Home needs to be aware of the prompt.
642
+ elif (rawControlDown or controlDown) and key == wx.WXK_HOME:
643
+ home = self.promptPosEnd
644
+ if currpos > home:
645
+ self.SetCurrentPos(home)
646
+ if not selecting and not shiftDown:
647
+ self.SetAnchor(home)
648
+ self.EnsureCaretVisible()
649
+ else:
650
+ event.Skip()
651
+
652
+ # Home needs to be aware of the prompt.
653
+ elif key == wx.WXK_HOME:
654
+ home = self.promptPosEnd
655
+ if currpos > home:
656
+ [line_str,line_len] = self.GetCurLine()
657
+ pos=self.GetCurrentPos()
658
+ if line_str[:4] in [sys.ps1,sys.ps2,sys.ps3]:
659
+ self.SetCurrentPos(pos+4-line_len)
660
+ #self.SetCurrentPos(home)
661
+ if not selecting and not shiftDown:
662
+ self.SetAnchor(pos+4-line_len)
663
+ self.EnsureCaretVisible()
664
+ else:
665
+ event.Skip()
666
+ else:
667
+ event.Skip()
668
+
669
+ #
670
+ # The following handlers modify text, so we need to see if
671
+ # there is a selection that includes text prior to the prompt.
672
+ #
673
+ # Don't modify a selection with text prior to the prompt.
674
+ elif selecting and key not in NAVKEYS and not self.CanEdit():
675
+ pass
676
+
677
+ # Paste from the clipboard.
678
+ elif ((rawControlDown or controlDown) and not shiftDown and key in (ord('V'), ord('v'))) \
679
+ or (shiftDown and not controlDown and key == wx.WXK_INSERT):
680
+ self.Paste()
681
+
682
+ # manually invoke AutoComplete and Calltips
683
+ elif (rawControlDown or controlDown) and key == wx.WXK_SPACE:
684
+ self.OnCallTipAutoCompleteManually(shiftDown)
685
+
686
+ # Paste from the clipboard, run commands.
687
+ elif (rawControlDown or controlDown) and shiftDown and key in (ord('V'), ord('v')):
688
+ self.PasteAndRun()
689
+
690
+ # Replace with the previous command from the history buffer.
691
+ elif ((rawControlDown or controlDown) and not shiftDown and key == wx.WXK_UP) \
692
+ or (altDown and key in (ord('P'), ord('p'))):
693
+ self.OnHistoryReplace(step=+1)
694
+
695
+ # Replace with the next command from the history buffer.
696
+ elif ((rawControlDown or controlDown) and not shiftDown and key == wx.WXK_DOWN) \
697
+ or (altDown and key in (ord('N'), ord('n'))):
698
+ self.OnHistoryReplace(step=-1)
699
+
700
+ # Insert the previous command from the history buffer.
701
+ elif ((rawControlDown or controlDown) and shiftDown and key == wx.WXK_UP) and self.CanEdit():
702
+ self.OnHistoryInsert(step=+1)
703
+
704
+ # Insert the next command from the history buffer.
705
+ elif ((rawControlDown or controlDown) and shiftDown and key == wx.WXK_DOWN) and self.CanEdit():
706
+ self.OnHistoryInsert(step=-1)
707
+
708
+ # Search up the history for the text in front of the cursor.
709
+ elif key == wx.WXK_F8:
710
+ self.OnHistorySearch()
711
+
712
+ # Don't backspace over the latest non-continuation prompt.
713
+ elif key == wx.WXK_BACK:
714
+ if selecting and self.CanEdit():
715
+ event.Skip()
716
+ elif currpos > self.promptPosEnd:
717
+ event.Skip()
718
+
719
+ # Only allow these keys after the latest prompt.
720
+ elif key in (wx.WXK_TAB, wx.WXK_DELETE):
721
+ if self.CanEdit():
722
+ event.Skip()
723
+
724
+ # Don't toggle between insert mode and overwrite mode.
725
+ elif key == wx.WXK_INSERT:
726
+ pass
727
+
728
+ # Don't allow line deletion.
729
+ elif controlDown and key in (ord('L'), ord('l')):
730
+ # TODO : Allow line deletion eventually...
731
+ #event.Skip()
732
+ pass
733
+
734
+ # Don't allow line transposition.
735
+ elif controlDown and key in (ord('T'), ord('t')):
736
+ # TODO : Allow line transposition eventually...
737
+ # TODO : Will have to adjust markers accordingly and test if allowed...
738
+ #event.Skip()
739
+ pass
740
+
741
+ # Basic navigation keys should work anywhere.
742
+ elif key in NAVKEYS:
743
+ event.Skip()
744
+
745
+ # Protect the readonly portion of the shell.
746
+ elif not self.CanEdit():
747
+ pass
748
+
749
+ else:
750
+ event.Skip()
751
+
752
+
753
+ def OnShowCompHistory(self):
754
+ """Show possible autocompletion Words from already typed words."""
755
+
756
+ #copy from history
757
+ his = self.history[:]
758
+
759
+ #put together in one string
760
+ joined = " ".join (his)
761
+ import re
762
+
763
+ #sort out only "good" words
764
+ newlist = re.split("[ \.\[\]=}(\)\,0-9\"]", joined)
765
+
766
+ #length > 1 (mix out "trash")
767
+ thlist = []
768
+ for i in newlist:
769
+ if len (i) > 1:
770
+ thlist.append (i)
771
+
772
+ #unique (no duplicate words
773
+ #oneliner from german python forum => unique list
774
+ unlist = [thlist[i] for i in range(len(thlist)) if thlist[i] not in thlist[:i]]
775
+
776
+ #sort lowercase
777
+ def _cmp(a,b):
778
+ return ((a > b) - (a < b))
779
+ unlist.sort(key=cmp_to_key(lambda a, b: _cmp(a.lower(), b.lower())))
780
+
781
+ #this is more convenient, isn't it?
782
+ self.AutoCompSetIgnoreCase(True)
783
+
784
+ #join again together in a string
785
+ stringlist = " ".join(unlist)
786
+
787
+ #pos von 0 noch ausrechnen
788
+
789
+ #how big is the offset?
790
+ cpos = self.GetCurrentPos() - 1
791
+ while chr (self.GetCharAt (cpos)).isalnum():
792
+ cpos -= 1
793
+
794
+ #the most important part
795
+ self.AutoCompShow(self.GetCurrentPos() - cpos -1, stringlist)
796
+
797
+
798
+ def clearCommand(self):
799
+ """Delete the current, unexecuted command."""
800
+ startpos = self.promptPosEnd
801
+ endpos = self.GetTextLength()
802
+ self.SetSelection(startpos, endpos)
803
+ self.ReplaceSelection('')
804
+ self.more = False
805
+
806
+ def OnHistoryReplace(self, step):
807
+ """Replace with the previous/next command from the history buffer."""
808
+ self.clearCommand()
809
+ self.replaceFromHistory(step)
810
+
811
+ def replaceFromHistory(self, step):
812
+ """Replace selection with command from the history buffer."""
813
+ ps2 = str(sys.ps2)
814
+ self.ReplaceSelection('')
815
+ newindex = self.historyIndex + step
816
+ if -1 <= newindex <= len(self.history):
817
+ self.historyIndex = newindex
818
+ if 0 <= newindex <= len(self.history)-1:
819
+ command = self.history[self.historyIndex]
820
+ command = command.replace('\n', os.linesep + ps2)
821
+ self.ReplaceSelection(command)
822
+
823
+ def OnHistoryInsert(self, step):
824
+ """Insert the previous/next command from the history buffer."""
825
+ if not self.CanEdit():
826
+ return
827
+ startpos = self.GetCurrentPos()
828
+ self.replaceFromHistory(step)
829
+ endpos = self.GetCurrentPos()
830
+ self.SetSelection(endpos, startpos)
831
+
832
+ def OnHistorySearch(self):
833
+ """Search up the history buffer for the text in front of the cursor."""
834
+ if not self.CanEdit():
835
+ return
836
+ startpos = self.GetCurrentPos()
837
+ # The text up to the cursor is what we search for.
838
+ numCharsAfterCursor = self.GetTextLength() - startpos
839
+ searchText = self.getCommand(rstrip=False)
840
+ if numCharsAfterCursor > 0:
841
+ searchText = searchText[:-numCharsAfterCursor]
842
+ if not searchText:
843
+ return
844
+ # Search upwards from the current history position and loop
845
+ # back to the beginning if we don't find anything.
846
+ if (self.historyIndex <= -1) \
847
+ or (self.historyIndex >= len(self.history)-2):
848
+ searchOrder = range(len(self.history))
849
+ else:
850
+ searchOrder = range(self.historyIndex+1, len(self.history)) + \
851
+ range(self.historyIndex)
852
+ for i in searchOrder:
853
+ command = self.history[i]
854
+ if command[:len(searchText)] == searchText:
855
+ # Replace the current selection with the one we found.
856
+ self.ReplaceSelection(command[len(searchText):])
857
+ endpos = self.GetCurrentPos()
858
+ self.SetSelection(endpos, startpos)
859
+ # We've now warped into middle of the history.
860
+ self.historyIndex = i
861
+ break
862
+
863
+ def setStatusText(self, text):
864
+ """Display status information."""
865
+
866
+ # This method will likely be replaced by the enclosing app to
867
+ # do something more interesting, like write to a status bar.
868
+ print(text)
869
+
870
+ def insertLineBreak(self):
871
+ """Insert a new line break."""
872
+ if self.CanEdit():
873
+ self.write(os.linesep)
874
+ self.more = True
875
+ self.prompt()
876
+
877
+ def processLine(self):
878
+ """Process the line of text at which the user hit Enter."""
879
+
880
+ # The user hit ENTER and we need to decide what to do. They
881
+ # could be sitting on any line in the shell.
882
+
883
+ thepos = self.GetCurrentPos()
884
+ startpos = self.promptPosEnd
885
+ endpos = self.GetTextLength()
886
+ ps2 = str(sys.ps2)
887
+ # If they hit RETURN inside the current command, execute the
888
+ # command.
889
+ if self.CanEdit():
890
+ self.SetCurrentPos(endpos)
891
+ self.interp.more = False
892
+ command = self.GetTextRange(startpos, endpos)
893
+ lines = command.split(os.linesep + ps2)
894
+ lines = [line.rstrip() for line in lines]
895
+ command = '\n'.join(lines)
896
+ if self.reader.isreading:
897
+ if not command:
898
+ # Match the behavior of the standard Python shell
899
+ # when the user hits return without entering a
900
+ # value.
901
+ command = '\n'
902
+ self.reader.input = command
903
+ self.write(os.linesep)
904
+ else:
905
+ self.push(command)
906
+ wx.CallLater(1, self.EnsureCaretVisible)
907
+ # Or replace the current command with the other command.
908
+ else:
909
+ # If the line contains a command (even an invalid one).
910
+ if self.getCommand(rstrip=False):
911
+ command = self.getMultilineCommand()
912
+ self.clearCommand()
913
+ self.write(command)
914
+ # Otherwise, put the cursor back where we started.
915
+ else:
916
+ self.SetCurrentPos(thepos)
917
+ self.SetAnchor(thepos)
918
+
919
+ def getMultilineCommand(self, rstrip=True):
920
+ """Extract a multi-line command from the editor.
921
+
922
+ The command may not necessarily be valid Python syntax."""
923
+ # XXX Need to extract real prompts here. Need to keep track of
924
+ # the prompt every time a command is issued.
925
+ ps1 = str(sys.ps1)
926
+ ps1size = len(ps1)
927
+ ps2 = str(sys.ps2)
928
+ ps2size = len(ps2)
929
+ # This is a total hack job, but it works.
930
+ text = self.GetCurLine()[0]
931
+ line = self.GetCurrentLine()
932
+ while text[:ps2size] == ps2 and line > 0:
933
+ line -= 1
934
+ self.GotoLine(line)
935
+ text = self.GetCurLine()[0]
936
+ if text[:ps1size] == ps1:
937
+ line = self.GetCurrentLine()
938
+ self.GotoLine(line)
939
+ startpos = self.GetCurrentPos() + ps1size
940
+ line += 1
941
+ self.GotoLine(line)
942
+ while self.GetCurLine()[0][:ps2size] == ps2:
943
+ line += 1
944
+ self.GotoLine(line)
945
+ stoppos = self.GetCurrentPos()
946
+ command = self.GetTextRange(startpos, stoppos)
947
+ command = command.replace(os.linesep + ps2, '\n')
948
+ command = command.rstrip()
949
+ command = command.replace('\n', os.linesep + ps2)
950
+ else:
951
+ command = ''
952
+ if rstrip:
953
+ command = command.rstrip()
954
+ return command
955
+
956
+ def getCommand(self, text=None, rstrip=True):
957
+ """Extract a command from text which may include a shell prompt.
958
+
959
+ The command may not necessarily be valid Python syntax."""
960
+ if not text:
961
+ text = self.GetCurLine()[0]
962
+ # Strip the prompt off the front leaving just the command.
963
+ command = self.lstripPrompt(text)
964
+ if command == text:
965
+ command = '' # Real commands have prompts.
966
+ if rstrip:
967
+ command = command.rstrip()
968
+ return command
969
+
970
+ def lstripPrompt(self, text):
971
+ """Return text without a leading prompt."""
972
+ ps1 = str(sys.ps1)
973
+ ps1size = len(ps1)
974
+ ps2 = str(sys.ps2)
975
+ ps2size = len(ps2)
976
+ # Strip the prompt off the front of text.
977
+ if text[:ps1size] == ps1:
978
+ text = text[ps1size:]
979
+ elif text[:ps2size] == ps2:
980
+ text = text[ps2size:]
981
+ return text
982
+
983
+ def push(self, command, silent = False):
984
+ """Send command to the interpreter for execution."""
985
+ if not silent:
986
+ self.write(os.linesep)
987
+
988
+ #DNM
989
+ if USE_MAGIC:
990
+ command=magic(command)
991
+
992
+ busy = wx.BusyCursor()
993
+ self.waiting = True
994
+ self.lastUpdate=None
995
+ self.more = self.interp.push(command)
996
+ self.lastUpdate=None
997
+ self.waiting = False
998
+ del busy
999
+ if not self.more:
1000
+ self.addHistory(command.rstrip())
1001
+ if not silent:
1002
+ self.prompt()
1003
+
1004
+ def addHistory(self, command):
1005
+ """Add command to the command history."""
1006
+ # Reset the history position.
1007
+ self.historyIndex = -1
1008
+ # Insert this command into the history, unless it's a blank
1009
+ # line or the same as the last command.
1010
+ if command != '' \
1011
+ and (len(self.history) == 0 or command != self.history[0]):
1012
+ self.history.insert(0, command)
1013
+ dispatcher.send(signal="Shell.addHistory", command=command)
1014
+
1015
+ def write(self, text):
1016
+ """Display text in the shell.
1017
+
1018
+ Replace line endings with OS-specific endings."""
1019
+ text = self.fixLineEndings(text)
1020
+ self.AddText(text)
1021
+ self.EnsureCaretVisible()
1022
+
1023
+ if self.waiting:
1024
+ if self.lastUpdate==None:
1025
+ self.lastUpdate=time.time()
1026
+ if time.time()-self.lastUpdate > PRINT_UPDATE_MAX_TIME:
1027
+ self.Update()
1028
+ self.lastUpdate=time.time()
1029
+
1030
+ def fixLineEndings(self, text):
1031
+ """Return text with line endings replaced by OS-specific endings."""
1032
+ lines = text.split('\r\n')
1033
+ for l in range(len(lines)):
1034
+ chunks = lines[l].split('\r')
1035
+ for c in range(len(chunks)):
1036
+ chunks[c] = os.linesep.join(chunks[c].split('\n'))
1037
+ lines[l] = os.linesep.join(chunks)
1038
+ text = os.linesep.join(lines)
1039
+ return text
1040
+
1041
+ def prompt(self):
1042
+ """Display proper prompt for the context: ps1, ps2 or ps3.
1043
+
1044
+ If this is a continuation line, autoindent as necessary."""
1045
+ isreading = self.reader.isreading
1046
+ skip = False
1047
+ if isreading:
1048
+ prompt = str(sys.ps3)
1049
+ elif self.more:
1050
+ prompt = str(sys.ps2)
1051
+ else:
1052
+ prompt = str(sys.ps1)
1053
+ pos = self.GetCurLine()[1]
1054
+ if pos > 0:
1055
+ if isreading:
1056
+ skip = True
1057
+ else:
1058
+ self.write(os.linesep)
1059
+ if not self.more:
1060
+ self.promptPosStart = self.GetCurrentPos()
1061
+ if not skip:
1062
+ self.write(prompt)
1063
+ if not self.more:
1064
+ self.promptPosEnd = self.GetCurrentPos()
1065
+ # Keep the undo feature from undoing previous responses.
1066
+ self.EmptyUndoBuffer()
1067
+
1068
+ if self.more:
1069
+ line_num=self.GetCurrentLine()
1070
+ currentLine=self.GetLine(line_num)
1071
+ previousLine=self.GetLine(line_num-1)[len(prompt):]
1072
+ pstrip=previousLine.strip()
1073
+ lstrip=previousLine.lstrip()
1074
+
1075
+ # Get the first alnum word:
1076
+ first_word=[]
1077
+ for i in pstrip:
1078
+ if i.isalnum():
1079
+ first_word.append(i)
1080
+ else:
1081
+ break
1082
+ first_word = ''.join(first_word)
1083
+
1084
+ if pstrip == '':
1085
+ # because it is all whitespace!
1086
+ indent=previousLine.strip('\n').strip('\r')
1087
+ else:
1088
+ indent=previousLine[:(len(previousLine)-len(lstrip))]
1089
+ if pstrip[-1]==':' and \
1090
+ first_word in ['if','else','elif','for','while',
1091
+ 'def','class','try','except','finally']:
1092
+ indent+=' '*4
1093
+
1094
+ self.write(indent)
1095
+ self.EnsureCaretVisible()
1096
+ self.ScrollToColumn(0)
1097
+
1098
+ def readline(self):
1099
+ """Replacement for stdin.readline()."""
1100
+ input = ''
1101
+ reader = self.reader
1102
+ reader.isreading = True
1103
+ self.prompt()
1104
+ try:
1105
+ while not reader.input:
1106
+ wx.GetApp().Yield(onlyIfNeeded=True)
1107
+ input = reader.input
1108
+ finally:
1109
+ reader.input = ''
1110
+ reader.isreading = False
1111
+ input = str(input) # In case of Unicode.
1112
+ return input
1113
+
1114
+ def readlines(self):
1115
+ """Replacement for stdin.readlines()."""
1116
+ lines = []
1117
+ while lines[-1:] != ['\n']:
1118
+ lines.append(self.readline())
1119
+ return lines
1120
+
1121
+ def raw_input(self, prompt=''):
1122
+ """Return string based on user input."""
1123
+ if prompt:
1124
+ self.write(prompt)
1125
+ return self.readline()
1126
+
1127
+ def ask(self, prompt='Please enter your response:'):
1128
+ """Get response from the user using a dialog box."""
1129
+ dialog = wx.TextEntryDialog(None, prompt,
1130
+ 'Input Dialog (Raw)', '')
1131
+ try:
1132
+ if dialog.ShowModal() == wx.ID_OK:
1133
+ text = dialog.GetValue()
1134
+ return text
1135
+ finally:
1136
+ dialog.Destroy()
1137
+ return ''
1138
+
1139
+ def pause(self):
1140
+ """Halt execution pending a response from the user."""
1141
+ self.ask('Press enter to continue:')
1142
+
1143
+ def clear(self):
1144
+ """Delete all text from the shell."""
1145
+ self.ClearAll()
1146
+
1147
+ def run(self, command, prompt=True, verbose=True):
1148
+ """Execute command as if it was typed in directly.
1149
+ >>> shell.run('print("this")')
1150
+ >>> print("this")
1151
+ this
1152
+ >>>
1153
+ """
1154
+ # Go to the very bottom of the text.
1155
+ endpos = self.GetTextLength()
1156
+ self.SetCurrentPos(endpos)
1157
+ command = command.rstrip()
1158
+ if prompt: self.prompt()
1159
+ if verbose: self.write(command)
1160
+ self.push(command)
1161
+
1162
+ def runfile(self, filename):
1163
+ """Execute all commands in file as if they were typed into the
1164
+ shell."""
1165
+ self.prompt()
1166
+ with open(filename) as file_:
1167
+ for command in file_:
1168
+ if command[:6] == 'shell.':
1169
+ # Run shell methods silently.
1170
+ self.run(command, prompt=False, verbose=False)
1171
+ else:
1172
+ self.run(command, prompt=False, verbose=True)
1173
+
1174
+ def autoCompleteShow(self, command, offset = 0):
1175
+ """Display auto-completion popup list."""
1176
+ self.AutoCompSetAutoHide(self.autoCompleteAutoHide)
1177
+ self.AutoCompSetIgnoreCase(self.autoCompleteCaseInsensitive)
1178
+ list = self.interp.getAutoCompleteList(command,
1179
+ includeMagic=self.autoCompleteIncludeMagic,
1180
+ includeSingle=self.autoCompleteIncludeSingle,
1181
+ includeDouble=self.autoCompleteIncludeDouble)
1182
+ if list:
1183
+ options = ' '.join(list)
1184
+ #offset = 0
1185
+ self.AutoCompShow(offset, options)
1186
+
1187
+ def autoCallTipShow(self, command, insertcalltip = True, forceCallTip = False):
1188
+ """Display argument spec and docstring in a popup window."""
1189
+ if self.CallTipActive():
1190
+ self.CallTipCancel()
1191
+ (name, argspec, tip) = self.interp.getCallTip(command)
1192
+ if tip:
1193
+ dispatcher.send(signal='Shell.calltip', sender=self, calltip=tip)
1194
+ if not self.autoCallTip and not forceCallTip:
1195
+ return
1196
+ startpos = self.GetCurrentPos()
1197
+ if argspec and insertcalltip and self.callTipInsert:
1198
+ self.write(argspec + ')')
1199
+ endpos = self.GetCurrentPos()
1200
+ self.SetSelection(startpos, endpos)
1201
+ if tip:
1202
+ tippos = startpos - (len(name) + 1)
1203
+ fallback = startpos - self.GetColumn(startpos)
1204
+ # In case there isn't enough room, only go back to the
1205
+ # fallback.
1206
+ tippos = max(tippos, fallback)
1207
+ self.CallTipShow(tippos, tip)
1208
+
1209
+ def OnCallTipAutoCompleteManually (self, shiftDown):
1210
+ """AutoComplete and Calltips manually."""
1211
+ if self.AutoCompActive():
1212
+ self.AutoCompCancel()
1213
+ currpos = self.GetCurrentPos()
1214
+ stoppos = self.promptPosEnd
1215
+
1216
+ cpos = currpos
1217
+ #go back until '.' is found
1218
+ pointavailpos = -1
1219
+ while cpos >= stoppos:
1220
+ if self.GetCharAt(cpos) == ord ('.'):
1221
+ pointavailpos = cpos
1222
+ break
1223
+ cpos -= 1
1224
+
1225
+ #word from non whitespace until '.'
1226
+ if pointavailpos != -1:
1227
+ #look backward for first whitespace char
1228
+ textbehind = self.GetTextRange (pointavailpos + 1, currpos)
1229
+ pointavailpos += 1
1230
+
1231
+ if not shiftDown:
1232
+ #call AutoComplete
1233
+ stoppos = self.promptPosEnd
1234
+ textbefore = self.GetTextRange(stoppos, pointavailpos)
1235
+ self.autoCompleteShow(textbefore, len (textbehind))
1236
+ else:
1237
+ #call CallTips
1238
+ cpos = pointavailpos
1239
+ begpos = -1
1240
+ while cpos > stoppos:
1241
+ if chr(self.GetCharAt(cpos)).isspace():
1242
+ begpos = cpos
1243
+ break
1244
+ cpos -= 1
1245
+ if begpos == -1:
1246
+ begpos = cpos
1247
+ ctips = self.GetTextRange (begpos, currpos)
1248
+ ctindex = ctips.find ('(')
1249
+ if ctindex != -1 and not self.CallTipActive():
1250
+ #insert calltip, if current pos is '(', otherwise show it only
1251
+ self.autoCallTipShow(ctips[:ctindex + 1],
1252
+ self.GetCharAt(currpos - 1) == ord('(') and \
1253
+ self.GetCurrentPos() == self.GetTextLength(),
1254
+ True)
1255
+
1256
+
1257
+ def writeOut(self, text):
1258
+ """Replacement for stdout."""
1259
+ self.write(text)
1260
+
1261
+ def writeErr(self, text):
1262
+ """Replacement for stderr."""
1263
+ self.write(text)
1264
+
1265
+ def redirectStdin(self, redirect=True):
1266
+ """If redirect is true then sys.stdin will come from the shell."""
1267
+ if redirect:
1268
+ sys.stdin = self.reader
1269
+ else:
1270
+ sys.stdin = self.stdin
1271
+
1272
+ def redirectStdout(self, redirect=True):
1273
+ """If redirect is true then sys.stdout will go to the shell."""
1274
+ if redirect:
1275
+ sys.stdout = PseudoFileOut(self.writeOut)
1276
+ else:
1277
+ sys.stdout = self.stdout
1278
+
1279
+ def redirectStderr(self, redirect=True):
1280
+ """If redirect is true then sys.stderr will go to the shell."""
1281
+ if redirect:
1282
+ sys.stderr = PseudoFileErr(self.writeErr)
1283
+ else:
1284
+ sys.stderr = self.stderr
1285
+
1286
+ def CanCut(self):
1287
+ """Return true if text is selected and can be cut."""
1288
+ if self.GetSelectionStart() != self.GetSelectionEnd() \
1289
+ and self.GetSelectionStart() >= self.promptPosEnd \
1290
+ and self.GetSelectionEnd() >= self.promptPosEnd:
1291
+ return True
1292
+ else:
1293
+ return False
1294
+
1295
+ def CanPaste(self):
1296
+ """Return true if a paste should succeed."""
1297
+ if self.CanEdit() and editwindow.EditWindow.CanPaste(self):
1298
+ return True
1299
+ else:
1300
+ return False
1301
+
1302
+ def CanEdit(self):
1303
+ """Return true if editing should succeed."""
1304
+ if self.GetSelectionStart() != self.GetSelectionEnd():
1305
+ if self.GetSelectionStart() >= self.promptPosEnd \
1306
+ and self.GetSelectionEnd() >= self.promptPosEnd:
1307
+ return True
1308
+ else:
1309
+ return False
1310
+ else:
1311
+ return self.GetCurrentPos() >= self.promptPosEnd
1312
+
1313
+ def Cut(self):
1314
+ """Remove selection and place it on the clipboard."""
1315
+ if self.CanCut() and self.CanCopy():
1316
+ if self.AutoCompActive():
1317
+ self.AutoCompCancel()
1318
+ if self.CallTipActive():
1319
+ self.CallTipCancel()
1320
+ self.Copy()
1321
+ self.ReplaceSelection('')
1322
+
1323
+ def Copy(self):
1324
+ """Copy selection and place it on the clipboard."""
1325
+ if self.CanCopy():
1326
+ ps1 = str(sys.ps1)
1327
+ ps2 = str(sys.ps2)
1328
+ command = self.GetSelectedText()
1329
+ command = command.replace(os.linesep + ps2, os.linesep)
1330
+ command = command.replace(os.linesep + ps1, os.linesep)
1331
+ command = self.lstripPrompt(text=command)
1332
+ data = wx.TextDataObject(command)
1333
+ self._clip(data)
1334
+
1335
+ def CopyWithPrompts(self):
1336
+ """Copy selection, including prompts, and place it on the clipboard."""
1337
+ if self.CanCopy():
1338
+ command = self.GetSelectedText()
1339
+ data = wx.TextDataObject(command)
1340
+ self._clip(data)
1341
+
1342
+ def CopyWithPromptsPrefixed(self):
1343
+ """Copy selection, including prompts prefixed with four
1344
+ spaces, and place it on the clipboard."""
1345
+ if self.CanCopy():
1346
+ command = self.GetSelectedText()
1347
+ spaces = ' ' * 4
1348
+ command = spaces + command.replace(os.linesep,
1349
+ os.linesep + spaces)
1350
+ data = wx.TextDataObject(command)
1351
+ self._clip(data)
1352
+
1353
+ def _clip(self, data):
1354
+ if wx.TheClipboard.Open():
1355
+ wx.TheClipboard.UsePrimarySelection(False)
1356
+ wx.TheClipboard.SetData(data)
1357
+ wx.TheClipboard.Flush()
1358
+ wx.TheClipboard.Close()
1359
+
1360
+ def Paste(self):
1361
+ """Replace selection with clipboard contents."""
1362
+ if self.CanPaste() and wx.TheClipboard.Open():
1363
+ ps2 = str(sys.ps2)
1364
+ if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_TEXT)):
1365
+ data = wx.TextDataObject()
1366
+ if wx.TheClipboard.GetData(data):
1367
+ self.ReplaceSelection('')
1368
+ command = data.GetText()
1369
+ command = command.rstrip()
1370
+ command = self.fixLineEndings(command)
1371
+ command = self.lstripPrompt(text=command)
1372
+ command = command.replace(os.linesep + ps2, '\n')
1373
+ command = command.replace(os.linesep, '\n')
1374
+ command = command.replace('\n', os.linesep + ps2)
1375
+ self.write(command)
1376
+ wx.TheClipboard.Close()
1377
+
1378
+
1379
+ def PasteAndRun(self):
1380
+ """Replace selection with clipboard contents, run commands."""
1381
+ text = ''
1382
+ if wx.TheClipboard.Open():
1383
+ if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_TEXT)):
1384
+ data = wx.TextDataObject()
1385
+ if wx.TheClipboard.GetData(data):
1386
+ text = data.GetText()
1387
+ wx.TheClipboard.Close()
1388
+ if text:
1389
+ self.Execute(text)
1390
+
1391
+
1392
+ def Execute(self, text):
1393
+ """Replace selection with text and run commands."""
1394
+ ps1 = str(sys.ps1)
1395
+ ps2 = str(sys.ps2)
1396
+ endpos = self.GetTextLength()
1397
+ self.SetCurrentPos(endpos)
1398
+ startpos = self.promptPosEnd
1399
+ self.SetSelection(startpos, endpos)
1400
+ self.ReplaceSelection('')
1401
+ text = text.lstrip()
1402
+ text = self.fixLineEndings(text)
1403
+ text = self.lstripPrompt(text)
1404
+ text = text.replace(os.linesep + ps1, '\n')
1405
+ text = text.replace(os.linesep + ps2, '\n')
1406
+ text = text.replace(os.linesep, '\n')
1407
+ lines = text.split('\n')
1408
+ commands = []
1409
+ command = ''
1410
+ for line in lines:
1411
+ if line.strip() == ps2.strip():
1412
+ # If we are pasting from something like a
1413
+ # web page that drops the trailing space
1414
+ # from the ps2 prompt of a blank line.
1415
+ line = ''
1416
+ lstrip = line.lstrip()
1417
+ if line.strip() != '' and lstrip == line and \
1418
+ lstrip[:4] not in ['else','elif'] and \
1419
+ lstrip[:6] != 'except':
1420
+ # New command.
1421
+ if command:
1422
+ # Add the previous command to the list.
1423
+ commands.append(command)
1424
+ # Start a new command, which may be multiline.
1425
+ command = line
1426
+ else:
1427
+ # Multiline command. Add to the command.
1428
+ command += '\n'
1429
+ command += line
1430
+ commands.append(command)
1431
+ for command in commands:
1432
+ command = command.replace('\n', os.linesep + ps2)
1433
+ self.write(command)
1434
+ self.processLine()
1435
+
1436
+
1437
+ def wrap(self, wrap=True):
1438
+ """Sets whether text is word wrapped."""
1439
+ self.SetWrapMode(wrap)
1440
+
1441
+ def zoom(self, points=0):
1442
+ """Set the zoom level.
1443
+
1444
+ This number of points is added to the size of all fonts. It
1445
+ may be positive to magnify or negative to reduce."""
1446
+ self.SetZoom(points)
1447
+
1448
+
1449
+
1450
+ def LoadSettings(self, config):
1451
+ self.autoComplete = \
1452
+ config.ReadBool('Options/AutoComplete', True)
1453
+ self.autoCompleteIncludeMagic = \
1454
+ config.ReadBool('Options/AutoCompleteIncludeMagic', True)
1455
+ self.autoCompleteIncludeSingle = \
1456
+ config.ReadBool('Options/AutoCompleteIncludeSingle', True)
1457
+ self.autoCompleteIncludeDouble = \
1458
+ config.ReadBool('Options/AutoCompleteIncludeDouble', True)
1459
+
1460
+ self.autoCallTip = config.ReadBool('Options/AutoCallTip', True)
1461
+ self.callTipInsert = config.ReadBool('Options/CallTipInsert', True)
1462
+ self.SetWrapMode(config.ReadBool('View/WrapMode', True))
1463
+
1464
+ self.lineNumbers = config.ReadBool('View/ShowLineNumbers', True)
1465
+ self.setDisplayLineNumbers (self.lineNumbers)
1466
+ zoom = config.ReadInt('View/Zoom/Shell', -99)
1467
+ if zoom != -99:
1468
+ self.SetZoom(zoom)
1469
+
1470
+
1471
+ def SaveSettings(self, config):
1472
+ config.WriteBool('Options/AutoComplete', self.autoComplete)
1473
+ config.WriteBool('Options/AutoCompleteIncludeMagic',
1474
+ self.autoCompleteIncludeMagic)
1475
+ config.WriteBool('Options/AutoCompleteIncludeSingle',
1476
+ self.autoCompleteIncludeSingle)
1477
+ config.WriteBool('Options/AutoCompleteIncludeDouble',
1478
+ self.autoCompleteIncludeDouble)
1479
+ config.WriteBool('Options/AutoCallTip', self.autoCallTip)
1480
+ config.WriteBool('Options/CallTipInsert', self.callTipInsert)
1481
+ config.WriteBool('View/WrapMode', self.GetWrapMode())
1482
+ config.WriteBool('View/ShowLineNumbers', self.lineNumbers)
1483
+ config.WriteInt('View/Zoom/Shell', self.GetZoom())
1484
+
1485
+ def GetContextMenu(self):
1486
+ """
1487
+ Create and return a context menu for the shell.
1488
+ This is used instead of the scintilla default menu
1489
+ in order to correctly respect our immutable buffer.
1490
+ """
1491
+ menu = wx.Menu()
1492
+ menu.Append(self.ID_UNDO, "Undo")
1493
+ menu.Append(self.ID_REDO, "Redo")
1494
+
1495
+ menu.AppendSeparator()
1496
+
1497
+ menu.Append(self.ID_CUT, "Cut")
1498
+ menu.Append(self.ID_COPY, "Copy")
1499
+ menu.Append(frame.ID_COPY_PLUS, "Copy With Prompts")
1500
+ menu.Append(self.ID_PASTE, "Paste")
1501
+ menu.Append(frame.ID_PASTE_PLUS, "Paste And Run")
1502
+ menu.Append(self.ID_CLEAR, "Clear")
1503
+
1504
+ menu.AppendSeparator()
1505
+
1506
+ menu.Append(self.ID_SELECTALL, "Select All")
1507
+ return menu
1508
+
1509
+ def OnContextMenu(self, evt):
1510
+ menu = self.GetContextMenu()
1511
+ self.PopupMenu(menu)
1512
+
1513
+ def OnUpdateUI(self, evt):
1514
+ id = evt.Id
1515
+ if id in (self.ID_CUT, self.ID_CLEAR):
1516
+ evt.Enable(self.CanCut())
1517
+ elif id in (self.ID_COPY, frame.ID_COPY_PLUS):
1518
+ evt.Enable(self.CanCopy())
1519
+ elif id in (self.ID_PASTE, frame.ID_PASTE_PLUS):
1520
+ evt.Enable(self.CanPaste())
1521
+ elif id == self.ID_UNDO:
1522
+ evt.Enable(self.CanUndo())
1523
+ elif id == self.ID_REDO:
1524
+ evt.Enable(self.CanRedo())
1525
+
1526
+
1527
+
1528
+
1529
+ ## NOTE: The DnD of file names is disabled until we can figure out how
1530
+ ## best to still allow DnD of text.
1531
+
1532
+
1533
+ ## #seb : File drag and drop
1534
+ ## class FileDropTarget(wx.FileDropTarget):
1535
+ ## def __init__(self, obj):
1536
+ ## wx.FileDropTarget.__init__(self)
1537
+ ## self.obj = obj
1538
+ ## def OnDropFiles(self, x, y, filenames):
1539
+ ## if len(filenames) == 1:
1540
+ ## txt = 'r\"%s\"' % filenames[0]
1541
+ ## else:
1542
+ ## txt = '( '
1543
+ ## for f in filenames:
1544
+ ## txt += 'r\"%s\" , ' % f
1545
+ ## txt += ')'
1546
+ ## self.obj.AppendText(txt)
1547
+ ## pos = self.obj.GetCurrentPos()
1548
+ ## self.obj.SetCurrentPos( pos )
1549
+ ## self.obj.SetSelection( pos, pos )
1550
+
1551
+
1552
+
1553
+ ## class TextAndFileDropTarget(wx.DropTarget):
1554
+ ## def __init__(self, shell):
1555
+ ## wx.DropTarget.__init__(self)
1556
+ ## self.shell = shell
1557
+ ## self.compdo = wx.DataObjectComposite()
1558
+ ## self.textdo = wx.TextDataObject()
1559
+ ## self.filedo = wx.FileDataObject()
1560
+ ## self.compdo.Add(self.textdo)
1561
+ ## self.compdo.Add(self.filedo, True)
1562
+
1563
+ ## self.SetDataObject(self.compdo)
1564
+
1565
+ ## def OnDrop(self, x, y):
1566
+ ## return True
1567
+
1568
+ ## def OnData(self, x, y, result):
1569
+ ## self.GetData()
1570
+ ## if self.textdo.GetTextLength() > 1:
1571
+ ## text = self.textdo.GetText()
1572
+ ## # *** Do somethign with the dragged text here...
1573
+ ## self.textdo.SetText('')
1574
+ ## else:
1575
+ ## filenames = str(self.filename.GetFilenames())
1576
+ ## if len(filenames) == 1:
1577
+ ## txt = 'r\"%s\"' % filenames[0]
1578
+ ## else:
1579
+ ## txt = '( '
1580
+ ## for f in filenames:
1581
+ ## txt += 'r\"%s\" , ' % f
1582
+ ## txt += ')'
1583
+ ## self.shell.AppendText(txt)
1584
+ ## pos = self.shell.GetCurrentPos()
1585
+ ## self.shell.SetCurrentPos( pos )
1586
+ ## self.shell.SetSelection( pos, pos )
1587
+
1588
+ ## return result