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
@@ -0,0 +1,839 @@
1
+ #----------------------------------------------------------------------------
2
+ # Name: masked.combobox.py
3
+ # Authors: Will Sadkin
4
+ # Email: wsadkin@nameconnector.com
5
+ # Created: 02/11/2003
6
+ # Copyright: (c) 2003 by Will Sadkin, 2003
7
+ # License: wxWidgets license
8
+ #
9
+ # Tags: py3-port, phoenix-port, unittest, documented
10
+ #
11
+ #----------------------------------------------------------------------------
12
+ #
13
+ # This masked edit class allows for the semantics of masked controls
14
+ # to be applied to combo boxes.
15
+ #
16
+ #----------------------------------------------------------------------------
17
+
18
+ """
19
+ Provides masked edit capabilities within a ComboBox format, as well as
20
+ a base class from which you can derive masked comboboxes tailored to a specific
21
+ function. See maskededit module overview for how to configure the control.
22
+ """
23
+
24
+ import wx
25
+ from wx.lib.masked import *
26
+
27
+ # jmg 12/9/03 - when we cut ties with Py 2.2 and earlier, this would
28
+ # be a good place to implement the 2.3 logger class
29
+ from wx.tools.dbg import Logger
30
+ ##dbg = Logger()
31
+ ##dbg(enable=1)
32
+
33
+ ## ---------- ---------- ---------- ---------- ---------- ---------- ----------
34
+ ## Because calling SetSelection programmatically does not fire EVT_COMBOBOX
35
+ ## events, we have to do it ourselves when we auto-complete.
36
+ class MaskedComboBoxSelectEvent(wx.PyCommandEvent):
37
+ """
38
+ Because calling SetSelection programmatically does not fire EVT_COMBOBOX
39
+ events, the derived control has to do it itself when it auto-completes.
40
+ """
41
+ def __init__(self, id, selection = 0, object=None):
42
+ wx.PyCommandEvent.__init__(self, wx.wxEVT_COMMAND_COMBOBOX_SELECTED, id)
43
+
44
+ self.__selection = selection
45
+ self.SetEventObject(object)
46
+
47
+ def GetSelection(self):
48
+ """Retrieve the value of the control at the time
49
+ this event was generated."""
50
+ return self.__selection
51
+
52
+ class MaskedComboBoxEventHandler(wx.EvtHandler):
53
+ """
54
+ This handler ensures that the derived control can react to events
55
+ from the base control before any external handlers run, to ensure
56
+ proper behavior.
57
+ """
58
+ def __init__(self, combobox):
59
+ wx.EvtHandler.__init__(self)
60
+ self.combobox = combobox
61
+ combobox.PushEventHandler(self)
62
+ self.Bind(wx.EVT_SET_FOCUS, self.combobox._OnFocus ) ## defeat automatic full selection
63
+ self.Bind(wx.EVT_KILL_FOCUS, self.combobox._OnKillFocus ) ## run internal validator
64
+ self.Bind(wx.EVT_LEFT_DCLICK, self.combobox._OnDoubleClick) ## select field under cursor on dclick
65
+ self.Bind(wx.EVT_RIGHT_UP, self.combobox._OnContextMenu ) ## bring up an appropriate context menu
66
+ self.Bind(wx.EVT_CHAR, self.combobox._OnChar ) ## handle each keypress
67
+ self.Bind(wx.EVT_KEY_DOWN, self.combobox._OnKeyDownInComboBox ) ## for special processing of up/down keys
68
+ self.Bind(wx.EVT_KEY_DOWN, self.combobox._OnKeyDown ) ## for processing the rest of the control keys
69
+ ## (next in evt chain)
70
+ self.Bind(wx.EVT_COMBOBOX, self.combobox._OnDropdownSelect ) ## to bring otherwise completely independent base
71
+ ## ctrl selection into maskededit framework
72
+ self.Bind(wx.EVT_TEXT, self.combobox._OnTextChange ) ## color control appropriately & keep
73
+ ## track of previous value for undo
74
+
75
+
76
+
77
+ class BaseMaskedComboBox( wx.ComboBox, MaskedEditMixin ):
78
+ """
79
+ Base class for generic masked edit comboboxes; allows auto-complete of values.
80
+ It is not meant to be instantiated directly, but rather serves as a base class
81
+ for any subsequent refinements.
82
+ """
83
+ def __init__( self, parent, id=-1, value = '',
84
+ pos = wx.DefaultPosition,
85
+ size = wx.DefaultSize,
86
+ choices = [],
87
+ style = wx.CB_DROPDOWN,
88
+ validator = wx.DefaultValidator,
89
+ name = "maskedComboBox",
90
+ setupEventHandling = True,
91
+ **kwargs):
92
+ """
93
+ Default class constructor.
94
+
95
+ :param wx.Window `parent`: the window parent. Must not be ``None``;
96
+ :param integer `id`: window identifier. A value of -1 indicates a default value;
97
+ :param string `value`: value to be shown;
98
+ :param `pos`: the control position. A value of (-1, -1) indicates a default position,
99
+ chosen by either the windowing system or wxPython, depending on platform;
100
+ :type `pos`: tuple or :class:`wx.Point`
101
+ :param `size`: the control size. A value of (-1, -1) indicates a default size,
102
+ chosen by either the windowing system or wxPython, depending on platform;
103
+ :param list `choices`: a list of valid choices;
104
+ :param integer `style`: the window style;
105
+ :param wx.Validator `validator`: this is mainly provided for data-transfer, as control does
106
+ its own validation;
107
+ :param string `name`: the window name;
108
+ :param boolean `setupEventHandling`: setup event handling by default.
109
+
110
+ """
111
+
112
+ kwargs['choices'] = choices ## set up maskededit to work with choice list too
113
+
114
+ self._prevSelection = (-1, -1)
115
+
116
+ ## Since combobox completion is case-insensitive, always validate same way
117
+ if 'compareNoCase' not in kwargs:
118
+ kwargs['compareNoCase'] = True
119
+
120
+ MaskedEditMixin.__init__( self, name, **kwargs )
121
+
122
+ self._choices = self._ctrl_constraints._choices
123
+ ## dbg('self._choices:', self._choices)
124
+
125
+ if self._ctrl_constraints._alignRight:
126
+ choices = [choice.rjust(self._masklength) for choice in choices]
127
+ else:
128
+ choices = [choice.ljust(self._masklength) for choice in choices]
129
+
130
+ wx.ComboBox.__init__(self, parent, id, value='',
131
+ pos=pos, size = size,
132
+ choices=choices, style=style|wx.WANTS_CHARS,
133
+ validator=validator,
134
+ name=name)
135
+ self.controlInitialized = True
136
+
137
+ self._PostInit(style=style, setupEventHandling=setupEventHandling,
138
+ name=name, value=value, **kwargs)
139
+
140
+
141
+ def _PostInit(self, style=wx.CB_DROPDOWN,
142
+ setupEventHandling = True, ## setup event handling by default):
143
+ name = "maskedComboBox", value='', **kwargs):
144
+
145
+ # This is necessary, because wxComboBox currently provides no
146
+ # method for determining later if this was specified in the
147
+ # constructor for the control...
148
+ self.__readonly = style & wx.CB_READONLY == wx.CB_READONLY
149
+
150
+ if not hasattr(self, 'controlInitialized'):
151
+
152
+ self.controlInitialized = True ## must have been called via XRC, therefore base class is constructed
153
+ if 'choices' not in kwargs:
154
+ choices=[]
155
+ kwargs['choices'] = choices ## set up maskededit to work with choice list too
156
+ self._choices = []
157
+
158
+ ## Since combobox completion is case-insensitive, always validate same way
159
+ if 'compareNoCase' not in kwargs:
160
+ kwargs['compareNoCase'] = True
161
+
162
+ MaskedEditMixin.__init__( self, name, **kwargs )
163
+
164
+ self._choices = self._ctrl_constraints._choices
165
+ ## dbg('self._choices:', self._choices)
166
+
167
+ if self._ctrl_constraints._alignRight:
168
+ choices = [choice.rjust(self._masklength) for choice in choices]
169
+ else:
170
+ choices = [choice.ljust(self._masklength) for choice in choices]
171
+ wx.ComboBox.Clear(self)
172
+ wx.ComboBox.AppendItems(self, choices)
173
+
174
+
175
+ # Set control font - fixed width by default
176
+ self._setFont()
177
+
178
+ if self._autofit:
179
+ self.SetClientSize(self._CalcSize())
180
+ width = self.GetSize().width
181
+ height = self.GetBestSize().height
182
+ self.SetInitialSize((width, height))
183
+
184
+
185
+ if value:
186
+ # ensure value is width of the mask of the control:
187
+ if self._ctrl_constraints._alignRight:
188
+ value = value.rjust(self._masklength)
189
+ else:
190
+ value = value.ljust(self._masklength)
191
+
192
+ if self.__readonly:
193
+ self.SetStringSelection(value)
194
+ else:
195
+ self._SetInitialValue(value)
196
+
197
+
198
+ self._SetKeycodeHandler(wx.WXK_UP, self._OnSelectChoice)
199
+ self._SetKeycodeHandler(wx.WXK_DOWN, self._OnSelectChoice)
200
+
201
+ self.replace_next_combobox_event = False
202
+ self.correct_selection = -1
203
+
204
+ if setupEventHandling:
205
+ ## Setup event handling functions through event handler object,
206
+ ## to guarantee processing prior to giving event callbacks from
207
+ ## outside the class:
208
+ self.evt_handler = MaskedComboBoxEventHandler(self)
209
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnWindowDestroy )
210
+
211
+
212
+
213
+ def __repr__(self):
214
+ return "<MaskedComboBox: %s>" % self.GetValue()
215
+
216
+
217
+ def OnWindowDestroy(self, event):
218
+ # clean up associated event handler object:
219
+ if self.RemoveEventHandler(self.evt_handler):
220
+ wx.CallAfter(self.evt_handler.Destroy)
221
+ event.Skip()
222
+
223
+
224
+ def _CalcSize(self, size=None):
225
+ """
226
+ Calculate automatic size if allowed; augment base mixin function
227
+ to account for the selector button.
228
+ """
229
+ size = self._calcSize(size)
230
+ return (size[0]+20, size[1])
231
+
232
+
233
+ def SetFont(self, *args, **kwargs):
234
+ """
235
+ Set the font, then recalculate control size, if appropriate.
236
+
237
+ see :meth:`ComboBox.SetFont` for valid arguments
238
+
239
+ """
240
+ wx.ComboBox.SetFont(self, *args, **kwargs)
241
+ if self._autofit:
242
+ ## dbg('calculated size:', self._CalcSize())
243
+ self.SetClientSize(self._CalcSize())
244
+ width = self.GetSize().width
245
+ height = self.GetBestSize().height
246
+ ## dbg('setting client size to:', (width, height))
247
+ self.SetInitialSize((width, height))
248
+
249
+
250
+ def _GetSelection(self):
251
+ """
252
+ Allow mixin to get the text selection of this control.
253
+ REQUIRED by any class derived from MaskedEditMixin.
254
+ """
255
+ ## dbg('MaskedComboBox::_GetSelection()')
256
+ return self.GetMark()
257
+
258
+ def _SetSelection(self, sel_start, sel_to):
259
+ """
260
+ Allow mixin to set the text selection of this control.
261
+ REQUIRED by any class derived from MaskedEditMixin.
262
+ """
263
+ ## dbg('MaskedComboBox::_SetSelection: setting mark to (%d, %d)' % (sel_start, sel_to))
264
+ if not self.__readonly:
265
+ return self.SetTextSelection( sel_start, sel_to )
266
+
267
+
268
+ def _GetInsertionPoint(self):
269
+ ## dbg('MaskedComboBox::_GetInsertionPoint()', indent=1)
270
+ ## ret = self.GetInsertionPoint()
271
+ # work around new bug in 2.5, in which the insertion point
272
+ # returned is always at the right side of the selection,
273
+ # rather than the start, as is the case with TextCtrl.
274
+ ret = self.GetMark()[0]
275
+ ## dbg('returned', ret, indent=0)
276
+ return ret
277
+
278
+ def _SetInsertionPoint(self, pos):
279
+ ## dbg('MaskedComboBox::_SetInsertionPoint(%d)' % pos)
280
+ if not self.__readonly:
281
+ self.SetInsertionPoint(pos)
282
+
283
+
284
+ def IsEmpty(*args, **kw):
285
+ return MaskedEditMixin.IsEmpty(*args, **kw)
286
+
287
+
288
+ def _GetValue(self):
289
+ """
290
+ Allow mixin to get the raw value of the control with this function.
291
+ REQUIRED by any class derived from MaskedEditMixin.
292
+ """
293
+ return self.GetValue()
294
+
295
+ def _SetValue(self, value):
296
+ """
297
+ Allow mixin to set the raw value of the control with this function.
298
+ REQUIRED by any class derived from MaskedEditMixin.
299
+ """
300
+ # For wxComboBox, ensure that values are properly padded so that
301
+ # if varying length choices are supplied, they always show up
302
+ # in the window properly, and will be the appropriate length
303
+ # to match the mask:
304
+ if self._ctrl_constraints._alignRight:
305
+ value = value.rjust(self._masklength)
306
+ else:
307
+ value = value.ljust(self._masklength)
308
+
309
+ # Record current selection and insertion point, for undo
310
+ self._prevSelection = self._GetSelection()
311
+ self._prevInsertionPoint = self._GetInsertionPoint()
312
+ ## dbg('MaskedComboBox::_SetValue(%s), selection beforehand: %d' % (value, self.GetSelection()))
313
+ wx.ComboBox.SetValue(self, value)
314
+ ## dbg('MaskedComboBox::_SetValue(%s), selection now: %d' % (value, self.GetSelection()))
315
+ # text change events don't always fire, so we check validity here
316
+ # to make certain formatting is applied:
317
+ self._CheckValid()
318
+
319
+ def SetValue(self, value):
320
+ """
321
+ This function redefines the externally accessible :meth:`ComboBox.SetValue`
322
+ to be a smart "paste" of the text in question, so as not to corrupt the
323
+ masked control.
324
+
325
+ .. note::
326
+
327
+ This must be done in the class derived from the base wx control.
328
+
329
+ """
330
+ ## dbg('MaskedComboBox::SetValue(%s)' % value, indent=1)
331
+ if not self._mask:
332
+ wx.ComboBox.SetValue(value) # revert to base control behavior
333
+ ## dbg('no mask; deferring to base class', indent=0)
334
+ return
335
+ # else...
336
+ # empty previous contents, replacing entire value:
337
+ ## dbg('MaskedComboBox::SetValue: selection beforehand: %d' % (self.GetSelection()))
338
+ self._SetInsertionPoint(0)
339
+ self._SetSelection(0, self._masklength)
340
+
341
+ if( len(value) < self._masklength # value shorter than control
342
+ and (self._isFloat or self._isInt) # and it's a numeric control
343
+ and self._ctrl_constraints._alignRight ): # and it's a right-aligned control
344
+ # try to intelligently "pad out" the value to the right size:
345
+ value = self._template[0:self._masklength - len(value)] + value
346
+ ## dbg('padded value = "%s"' % value)
347
+
348
+ # For wxComboBox, ensure that values are properly padded so that
349
+ # if varying length choices are supplied, they always show up
350
+ # in the window properly, and will be the appropriate length
351
+ # to match the mask:
352
+ elif self._ctrl_constraints._alignRight:
353
+ value = value.rjust(self._masklength)
354
+ else:
355
+ value = value.ljust(self._masklength)
356
+
357
+
358
+ # make SetValue behave the same as if you had typed the value in:
359
+ try:
360
+ value, replace_to = self._Paste(value, raise_on_invalid=True, just_return_value=True)
361
+ if self._isFloat:
362
+ self._isNeg = False # (clear current assumptions)
363
+ value = self._adjustFloat(value)
364
+ elif self._isInt:
365
+ self._isNeg = False # (clear current assumptions)
366
+ value = self._adjustInt(value)
367
+ elif self._isDate and not self.IsValid(value) and self._4digityear:
368
+ value = self._adjustDate(value, fixcentury=True)
369
+ except ValueError:
370
+ # If date, year might be 2 digits vs. 4; try adjusting it:
371
+ if self._isDate and self._4digityear:
372
+ dateparts = value.split(' ')
373
+ dateparts[0] = self._adjustDate(dateparts[0], fixcentury=True)
374
+ value = ' '.join(dateparts)
375
+ value = self._Paste(value, raise_on_invalid=True, just_return_value=True)
376
+ else:
377
+ raise
378
+ ## dbg('adjusted value: "%s"' % value)
379
+
380
+ # Attempt to compensate for fact that calling .SetInsertionPoint() makes the
381
+ # selection index -1, even if the resulting set value is in the list.
382
+ # So, if we are setting a value that's in the list, use index selection instead.
383
+ if value in self._choices:
384
+ index = self._choices.index(value)
385
+ self._prevValue = self._curValue
386
+ self._curValue = self._choices[index]
387
+ self._ctrl_constraints._autoCompleteIndex = index
388
+ self.SetSelection(index)
389
+ else:
390
+ self._SetValue(value)
391
+ #### dbg('queuing insertion after .SetValue', replace_to)
392
+ wx.CallAfter(self._SetInsertionPoint, replace_to)
393
+ wx.CallAfter(self._SetSelection, replace_to, replace_to)
394
+ ## dbg(indent=0)
395
+
396
+
397
+ def _Refresh(self):
398
+ """
399
+ Allow mixin to refresh the base control with this function.
400
+ REQUIRED by any class derived from MaskedEditMixin.
401
+ """
402
+ wx.ComboBox.Refresh(self)
403
+
404
+ def Refresh(self):
405
+ """
406
+ This function redefines the externally accessible :meth:`ComboBox.Refresh`
407
+ to validate the contents of the masked control as it refreshes.
408
+
409
+ .. note::
410
+
411
+ This must be done in the class derived from the base wx control.
412
+
413
+ """
414
+ self._CheckValid()
415
+ self._Refresh()
416
+
417
+
418
+ def _IsEditable(self):
419
+ """
420
+ Allow mixin to determine if the base control is editable with this function.
421
+ REQUIRED by any class derived from MaskedEditMixin.
422
+ """
423
+ return not self.__readonly
424
+
425
+
426
+ def Cut(self):
427
+ """
428
+ This function redefines the externally accessible :meth:`ComboBox.Cut`
429
+ to be a smart "erase" of the text in question, so as not to corrupt the
430
+ masked control.
431
+
432
+ .. note::
433
+
434
+ This must be done in the class derived from the base wx control.
435
+
436
+ """
437
+ if self._mask:
438
+ self._Cut() # call the mixin's Cut method
439
+ else:
440
+ wx.ComboBox.Cut(self) # else revert to base control behavior
441
+
442
+
443
+ def Paste(self):
444
+ """
445
+ This function redefines the externally accessible :meth:`ComboBox.Paste`
446
+ to be a smart "paste" of the text in question, so as not to corrupt the
447
+ masked control.
448
+
449
+ .. note::
450
+
451
+ This must be done in the class derived from the base wx control.
452
+
453
+ """
454
+ if self._mask:
455
+ self._Paste() # call the mixin's Paste method
456
+ else:
457
+ wx.ComboBox.Paste(self) # else revert to base control behavior
458
+
459
+
460
+ def Undo(self):
461
+ """
462
+ This function defines the undo operation for the control.
463
+ (The default undo is 1-deep.)
464
+ """
465
+ if not self.__readonly:
466
+ if self._mask:
467
+ self._Undo()
468
+ else:
469
+ wx.ComboBox.Undo(self) # else revert to base control behavior
470
+
471
+ def Append( self, choice, clientData=None ):
472
+ """
473
+ This base control function override is necessary so the control can keep
474
+ track of any additions to the list of choices, because :class:`ComboBox`
475
+ doesn't have an accessor for the choice list. The code here is the same
476
+ as in the SetParameters() mixin function, but is done for the individual
477
+ value as appended, so the list can be built incrementally without speed
478
+ penalty.
479
+ """
480
+ if self._mask:
481
+ if not isinstance(choice, six.string_types):
482
+ raise TypeError('%s: choices must be a sequence of strings' % str(self._index))
483
+ elif not self.IsValid(choice):
484
+ raise ValueError('%s: "%s" is not a valid value for the control as specified.' % (str(self._index), choice))
485
+
486
+ if not self._ctrl_constraints._choices:
487
+ self._ctrl_constraints._compareChoices = []
488
+ self._ctrl_constraints._choices = []
489
+ self._hasList = True
490
+
491
+ compareChoice = choice.strip()
492
+
493
+ if self._ctrl_constraints._compareNoCase:
494
+ compareChoice = compareChoice.lower()
495
+
496
+ if self._ctrl_constraints._alignRight:
497
+ choice = choice.rjust(self._masklength)
498
+ else:
499
+ choice = choice.ljust(self._masklength)
500
+ if self._ctrl_constraints._fillChar != ' ':
501
+ choice = choice.replace(' ', self._fillChar)
502
+ ## dbg('updated choice:', choice)
503
+
504
+
505
+ self._ctrl_constraints._compareChoices.append(compareChoice)
506
+ self._ctrl_constraints._choices.append(choice)
507
+ self._choices = self._ctrl_constraints._choices # (for shorthand)
508
+
509
+ if( not self.IsValid(choice) and
510
+ (not self._ctrl_constraints.IsEmpty(choice) or
511
+ (self._ctrl_constraints.IsEmpty(choice) and self._ctrl_constraints._validRequired) ) ):
512
+ raise ValueError('"%s" is not a valid value for the control "%s" as specified.' % (choice, self.name))
513
+
514
+ wx.ComboBox.Append(self, choice, clientData)
515
+
516
+
517
+ def AppendItems( self, choices ):
518
+ """
519
+ :meth:`~lib.masked.combobox.ComboBox.AppendItems` is handled in terms
520
+ of :meth:`lib.masked.combobox.ComboBox.Append`, to avoid code replication.
521
+ """
522
+ for choice in choices:
523
+ self.Append(choice)
524
+
525
+
526
+ def Clear( self ):
527
+ """
528
+ This base control function override is necessary so the derived control
529
+ can keep track of any additions to the list of choices, because
530
+ :class:`ComboBox` doesn't have an accessor for the choice list.
531
+ """
532
+ if self._mask:
533
+ self._choices = []
534
+ self._ctrl_constraints._autoCompleteIndex = -1
535
+ if self._ctrl_constraints._choices:
536
+ self.SetCtrlParameters(choices=[])
537
+ wx.ComboBox.Clear(self)
538
+
539
+
540
+ def _OnCtrlParametersChanged(self):
541
+ """
542
+ This overrides the mixin's default OnCtrlParametersChanged to detect
543
+ changes in choice list, so masked.Combobox can update the base control:
544
+ """
545
+ if self.controlInitialized and self._choices != self._ctrl_constraints._choices:
546
+ wx.ComboBox.Clear(self)
547
+ self._choices = self._ctrl_constraints._choices
548
+ for choice in self._choices:
549
+ wx.ComboBox.Append( self, choice )
550
+
551
+
552
+ # Not all wx platform implementations have .GetMark, so we make the following test,
553
+ # and fall back to our old hack if they don't...
554
+ #
555
+ if not hasattr(wx.ComboBox, 'GetMark'):
556
+ def GetMark(self):
557
+ """
558
+ This function is a hack to make up for the fact that :class:`ComboBox` has no
559
+ method for returning the selected portion of its edit control. It
560
+ works, but has the nasty side effect of generating lots of intermediate
561
+ events.
562
+ """
563
+ ## dbg(suspend=1) # turn off debugging around this function
564
+ ## dbg('MaskedComboBox::GetMark', indent=1)
565
+ if self.__readonly:
566
+ ## dbg(indent=0)
567
+ return 0, 0 # no selection possible for editing
568
+ ## sel_start, sel_to = wxComboBox.GetMark(self) # what I'd *like* to have!
569
+ sel_start = sel_to = self.GetInsertionPoint()
570
+ ## dbg("current sel_start:", sel_start)
571
+ value = self.GetValue()
572
+ ## dbg('value: "%s"' % value)
573
+
574
+ self._ignoreChange = True # tell _OnTextChange() to ignore next event (if any)
575
+
576
+ wx.ComboBox.Cut(self)
577
+ newvalue = self.GetValue()
578
+ ## dbg("value after Cut operation:", newvalue)
579
+
580
+ if newvalue != value: # something was selected; calculate extent
581
+ ## dbg("something selected")
582
+ sel_to = sel_start + len(value) - len(newvalue)
583
+ wx.ComboBox.SetValue(self, value) # restore original value and selection (still ignoring change)
584
+ wx.ComboBox.SetInsertionPoint(self, sel_start)
585
+ wx.ComboBox.SetMark(self, sel_start, sel_to)
586
+
587
+ self._ignoreChange = False # tell _OnTextChange() to pay attn again
588
+
589
+ ## dbg('computed selection:', sel_start, sel_to, indent=0, suspend=0)
590
+ return sel_start, sel_to
591
+ else:
592
+ def GetMark(self):
593
+ ## dbg('MaskedComboBox::GetMark()', indent = 1)
594
+ ret = wx.ComboBox.GetTextSelection(self)
595
+ ## dbg('returned', ret, indent=0)
596
+ return ret
597
+
598
+
599
+ def SetSelection(self, index):
600
+ """
601
+ Necessary override for bookkeeping on choice selection, to keep current
602
+ value current.
603
+
604
+ :param integer `index`: index to choice item to be set
605
+
606
+ """
607
+ ## dbg('MaskedComboBox::SetSelection(%d)' % index, indent=1)
608
+ if self._mask:
609
+ self._prevValue = self._curValue
610
+ self._ctrl_constraints._autoCompleteIndex = index
611
+ if index != -1:
612
+ self._curValue = self._choices[index]
613
+ else:
614
+ self._curValue = None
615
+ wx.ComboBox.SetSelection(self, index)
616
+ ## dbg('selection now: %d' % self.GetCurrentSelection(), indent=0)
617
+
618
+
619
+ def _OnKeyDownInComboBox(self, event):
620
+ """
621
+ This function is necessary because navigation and control key events
622
+ do not seem to normally be seen by the wxComboBox's EVT_CHAR routine.
623
+ (Tabs don't seem to be visible no matter what, except for CB_READONLY
624
+ controls, for some bizarre reason... {:-( )
625
+ """
626
+ key = event.GetKeyCode()
627
+ ## dbg('MaskedComboBox::OnKeyDownInComboBox(%d)' % key)
628
+ if event.GetKeyCode() in self._nav + self._control:
629
+ if not self._IsEditable():
630
+ # WANTS_CHARS with CB_READONLY apparently prevents navigation on WXK_TAB;
631
+ # ensure we can still navigate properly, as maskededit mixin::OnChar assumes
632
+ # that event.Skip() will just work, but it doesn't:
633
+ if key in self._keyhandlers:
634
+ self._keyhandlers[key](event)
635
+ # else pass
636
+ else:
637
+ ## dbg('calling OnChar()')
638
+ self._OnChar(event)
639
+ else:
640
+ event.Skip() # let mixin default KeyDown behavior occur
641
+ ## dbg(indent=0)
642
+
643
+
644
+ def _OnDropdownSelect(self, event):
645
+ """
646
+ This function appears to be necessary because dropdown selection seems to
647
+ manipulate the contents of the control in an inconsistent way, properly
648
+ changing the selection index, but *not* the value. (!) Calling SetSelection()
649
+ on a selection event for the same selection would seem like a nop, but it seems to
650
+ fix the problem.
651
+ """
652
+ ## dbg('MaskedComboBox::OnDropdownSelect(%d)' % event.GetSelection(), indent=1)
653
+ if self.replace_next_combobox_event:
654
+ ## dbg('replacing EVT_COMBOBOX')
655
+ self.replace_next_combobox_event = False
656
+ self._OnAutoSelect(self._ctrl_constraints, self.correct_selection)
657
+ else:
658
+ ## dbg('skipping EVT_COMBOBOX')
659
+ event.Skip()
660
+ ## dbg(indent=0)
661
+
662
+
663
+ def _OnSelectChoice(self, event):
664
+ """
665
+ This function appears to be necessary, because the processing done
666
+ on the text of the control somehow interferes with the combobox's
667
+ selection mechanism for the arrow keys.
668
+ """
669
+ ## dbg('MaskedComboBox::OnSelectChoice', indent=1)
670
+
671
+ if not self._mask:
672
+ event.Skip()
673
+ return
674
+
675
+ value = self.GetValue().strip()
676
+
677
+ if self._ctrl_constraints._compareNoCase:
678
+ value = value.lower()
679
+
680
+ if event.GetKeyCode() == wx.WXK_UP:
681
+ direction = -1
682
+ else:
683
+ direction = 1
684
+ match_index, partial_match = self._autoComplete(
685
+ direction,
686
+ self._ctrl_constraints._compareChoices,
687
+ value,
688
+ self._ctrl_constraints._compareNoCase,
689
+ current_index = self._ctrl_constraints._autoCompleteIndex)
690
+ if match_index is not None:
691
+ ## dbg('setting selection to', match_index)
692
+ # issue appropriate event to outside:
693
+ self._OnAutoSelect(self._ctrl_constraints, match_index=match_index)
694
+ self._CheckValid()
695
+ keep_processing = False
696
+ else:
697
+ pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
698
+ field = self._FindField(pos)
699
+ if self.IsEmpty() or not field._hasList:
700
+ ## dbg('selecting 1st value in list')
701
+ self._OnAutoSelect(self._ctrl_constraints, match_index=0)
702
+ self._CheckValid()
703
+ keep_processing = False
704
+ else:
705
+ # attempt field-level auto-complete
706
+ ## dbg(indent=0)
707
+ keep_processing = self._OnAutoCompleteField(event)
708
+ ## dbg('keep processing?', keep_processing, indent=0)
709
+ return keep_processing
710
+
711
+
712
+ def _OnAutoSelect(self, field, match_index=None):
713
+ """
714
+ Override mixin (empty) autocomplete handler, so that autocompletion causes
715
+ combobox to update appropriately.
716
+ Additionally allow items that aren't in the drop down.
717
+ """
718
+ ## dbg('MaskedComboBox::OnAutoSelect(%d, %s)' % (field._index, repr(match_index)), indent=1)
719
+ ## field._autoCompleteIndex = match
720
+ if isinstance(match_index, int):
721
+ if field == self._ctrl_constraints:
722
+ self.SetSelection(match_index)
723
+ ## dbg('issuing combo selection event')
724
+ self.GetEventHandler().ProcessEvent(
725
+ MaskedComboBoxSelectEvent( self.GetId(), match_index, self ) )
726
+ self._CheckValid()
727
+ ## dbg('field._autoCompleteIndex:', match)
728
+ ## dbg('self.GetCurrentSelection():', self.GetCurrentSelection())
729
+ end = self._goEnd(getPosOnly=True)
730
+ ## dbg('scheduling set of end position to:', end)
731
+ # work around bug in wx 2.5
732
+ wx.CallAfter(self.SetInsertionPoint, 0)
733
+ wx.CallAfter(self.SetInsertionPoint, end)
734
+ elif isinstance(match_index, six.string_types):
735
+ ## dbg('CallAfter SetValue')
736
+ # Preserve the textbox contents
737
+ # See commentary in _OnReturn docstring.
738
+ wx.CallAfter(self.SetValue, match_index)
739
+ #### dbg('queuing insertion after .SetValue', replace_to)
740
+ ## dbg(indent=0)
741
+
742
+
743
+ def _OnReturn(self, event):
744
+ """
745
+ For wx.ComboBox, it seems that if you hit return when the dropdown is
746
+ dropped, the event that dismisses the dropdown will also blank the
747
+ control, because of the implementation of wxComboBox. So this function
748
+ examines the selection and if it is -1, and the value according to
749
+ (the base control!) is a value in the list, then it schedules a
750
+ programmatic wxComboBox.SetSelection() call to pick the appropriate
751
+ item in the list. (and then does the usual OnReturn bit.)
752
+ If the value isn't a value in the list then allow the current textbox contents to stay.
753
+ """
754
+ ## dbg('MaskedComboBox::OnReturn', indent=1)
755
+ ## dbg('current value: "%s"' % self.GetValue(), 'current selection:', self.GetCurrentSelection())
756
+ if self.GetCurrentSelection() == -1 and self.GetValue().lower().strip() in self._ctrl_constraints._compareChoices:
757
+ ## dbg('attempting to correct the selection to make it %d' % self._ctrl_constraints._autoCompleteIndex)
758
+ ## wx.CallAfter(self.SetSelection, self._ctrl_constraints._autoCompleteIndex)
759
+ self.replace_next_combobox_event = True
760
+ self.correct_selection = self._ctrl_constraints._autoCompleteIndex
761
+ else:
762
+ # Not doing this causes the item to be empty after hitting return on a non-selection while the drop
763
+ # down is showing. Not all masked comboboxes require choices from an autocomplete list.
764
+ self.replace_next_combobox_event = True
765
+ self.correct_selection = self._GetValue()
766
+ event.KeyCode = wx.WXK_TAB
767
+ event.Skip()
768
+ ## dbg(indent=0)
769
+
770
+
771
+ def _LostFocus(self):
772
+ ## dbg('MaskedComboBox::LostFocus; Selection=%d, value="%s"' % (self.GetSelection(), self.GetValue()))
773
+ if self.GetCurrentSelection() == -1 and self.GetValue().lower().strip() in self._ctrl_constraints._compareChoices:
774
+ ## dbg('attempting to correct the selection to make it %d' % self._ctrl_constraints._autoCompleteIndex)
775
+ wx.CallAfter(self.SetSelection, self._ctrl_constraints._autoCompleteIndex)
776
+
777
+
778
+ class ComboBox( BaseMaskedComboBox, MaskedEditAccessorsMixin ):
779
+ """
780
+ The "user-visible" masked combobox control, this class is
781
+ identical to the BaseMaskedComboBox class it's derived from.
782
+ (This extra level of inheritance allows us to add the generic
783
+ set of masked edit parameters only to this class while allowing
784
+ other classes to derive from the "base" masked combobox control,
785
+ and provide a smaller set of valid accessor functions.)
786
+ See BaseMaskedComboBox for available methods.
787
+ """
788
+ pass
789
+
790
+
791
+ class PreMaskedComboBox( BaseMaskedComboBox, MaskedEditAccessorsMixin ):
792
+ """
793
+ This class exists to support the use of XRC subclassing.
794
+ """
795
+ # This should really be wx.EVT_WINDOW_CREATE but it is not
796
+ # currently delivered for native controls on all platforms, so
797
+ # we'll use EVT_SIZE instead. It should happen shortly after the
798
+ # control is created as the control is set to its "best" size.
799
+ _firstEventType = wx.EVT_SIZE
800
+
801
+ def __init__(self):
802
+ wx.ComboBox.__init__(self)
803
+ self.Bind(self._firstEventType, self.OnCreate)
804
+
805
+
806
+ def OnCreate(self, evt):
807
+ self.Unbind(self._firstEventType)
808
+ self._PostInit()
809
+
810
+ __i = 0
811
+ ## CHANGELOG:
812
+ ## ====================
813
+ ## Version 1.4
814
+ ## 1. Added handler for EVT_COMBOBOX to address apparently inconsistent behavior
815
+ ## of control when the dropdown control is used to do a selection.
816
+ ## NOTE: due to misbehavior of wx.ComboBox re: losing all concept of the
817
+ ## current selection index if SetInsertionPoint() is called, which is required
818
+ ## to support masked .SetValue(), this control is flaky about retaining selection
819
+ ## information. I can't truly fix this without major changes to the base control,
820
+ ## but I've tried to compensate as best I can.
821
+ ## TODO: investigate replacing base control with ComboCtrl instead...
822
+ ## 2. Fixed navigation in readonly masked combobox, which was not working because
823
+ ## the base control doesn't do navigation if style=CB_READONLY|WANTS_CHARS.
824
+ ##
825
+ ##
826
+ ## Version 1.3
827
+ ## 1. Made definition of "hack" GetMark conditional on base class not
828
+ ## implementing it properly, to allow for migration in wx code base
829
+ ## while taking advantage of improvements therein for some platforms.
830
+ ##
831
+ ## Version 1.2
832
+ ## 1. Converted docstrings to reST format, added doc for ePyDoc.
833
+ ## 2. Renamed helper functions, vars etc. not intended to be visible in public
834
+ ## interface to code.
835
+ ##
836
+ ## Version 1.1
837
+ ## 1. Added .SetFont() method that properly resizes control
838
+ ## 2. Modified control to support construction via XRC mechanism.
839
+ ## 3. Added AppendItems() to conform with latest combobox.