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,1202 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: wx.lib.gizmos.dynamicsash
3
+ # Purpose: A Python port of the C++ wxDynamicSashWindow from the
4
+ # old wxCode library.
5
+ #
6
+ # Author: Robin Dunn
7
+ #
8
+ # Created: 30-Oct-2017
9
+ # Copyright: (c) 2017-2020 by Total Control Software
10
+ # Licence: wxWindows license
11
+ # Tags:
12
+ #----------------------------------------------------------------------
13
+ """
14
+ A window which can be dynamically split to an arbitrary depth and later
15
+ reunified through the user interface.
16
+ """
17
+
18
+ import wx
19
+ import wx.siplib
20
+
21
+ #----------------------------------------------------------------------------
22
+ # Styles
23
+
24
+ # DS_MANAGE_SCROLLBARS is a default style of DynamicSashWindow which
25
+ # will cause it to respond to scrollbar events for your application by
26
+ # automatically scrolling the child view.
27
+ DS_MANAGE_SCROLLBARS = 0x0010
28
+
29
+ # DS_DRAG_CORNER style indicates that the views can also be resized by
30
+ # dragging the corner piece between the scrollbars, and which is reflected up
31
+ # to the frame if necessary.
32
+ DS_DRAG_CORNER = 0x0020
33
+
34
+ # Default style
35
+ DS_DEFAULT = DS_MANAGE_SCROLLBARS | DS_DRAG_CORNER
36
+
37
+
38
+ #----------------------------------------------------------------------------
39
+ # Events
40
+
41
+ wxEVT_DYNAMIC_SASH_SPLIT = wx.NewEventType()
42
+ wxEVT_DYNAMIC_SASH_UNIFY = wx.NewEventType()
43
+
44
+ EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder(wxEVT_DYNAMIC_SASH_SPLIT, 1)
45
+ EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder(wxEVT_DYNAMIC_SASH_UNIFY, 1)
46
+
47
+
48
+
49
+ class DynamicSashSplitEvent(wx.PyCommandEvent):
50
+ """
51
+ DynamicSashSplitEvents are sent to your view by DynamicSashWindow whenever
52
+ your view is being split by the user. It is your responsibility to handle
53
+ this event by creating a new view window as a child of the
54
+ DynamicSashWindow. DynamicSashWindow will automatically reparent it to
55
+ the proper place in its window hierarchy.
56
+ """
57
+ def __init__(self, arg=None):
58
+ super(DynamicSashSplitEvent, self).__init__()
59
+ if isinstance(arg, DynamicSashSplitEvent):
60
+ obj = arg.GetEventObject()
61
+ else:
62
+ obj = arg
63
+ self.SetEventObject(obj)
64
+ self.SetEventType(wxEVT_DYNAMIC_SASH_SPLIT)
65
+
66
+
67
+
68
+ class DynamicSashUnifyEvent(wx.PyCommandEvent):
69
+ """
70
+ DynamicSashUnifyEvents are sent to your view by DynamicSashWindow whenever
71
+ the sash which splits your view and its sibling is being reunified such
72
+ that your view is expanding to replace its sibling. You needn't do
73
+ anything with this event if you are allowing DynamicSashWindow to manage
74
+ your view's scrollbars, but it is useful if you are managing the
75
+ scrollbars yourself so that you can keep the scrollbars' event handlers
76
+ connected to your view's event handler class.
77
+ """
78
+ def __init__(self, arg=None):
79
+ super(DynamicSashUnifyEvent, self).__init__()
80
+ if isinstance(arg, DynamicSashUnifyEvent):
81
+ obj = arg.GetEventObject()
82
+ else:
83
+ obj = arg
84
+ self.SetEventObject(obj)
85
+ self.SetEventType(wxEVT_DYNAMIC_SASH_UNIFY)
86
+
87
+
88
+ #----------------------------------------------------------------------------
89
+ # The public window class
90
+
91
+ class DynamicSashWindow(wx.Window):
92
+ """
93
+ A DynamicSashWindow widget manages the way other widgets are viewed. When
94
+ a DynamicSashWindow is first shown, it will contain one child view, a
95
+ viewport for that child, and a pair of scrollbars to allow the user to
96
+ navigate the child view area. Next to each scrollbar is a small tab. By
97
+ clicking on either tab and dragging to the appropriate spot, a user can
98
+ split the view area into two smaller views separated by a draggable sash.
99
+ Later, when the user wishes to reunify the two subviews, the user simply
100
+ drags the sash to the side of the window. DynamicSashWindow will
101
+ automatically reparent the appropriate child view back up the window
102
+ hierarchy, and the DynamicSashWindow will have only one child view once
103
+ again.
104
+
105
+ As an application developer, you will simply create a DynamicSashWindow
106
+ using either the Create() function or the more complex constructor
107
+ provided below, and then create a view window whose parent is the
108
+ DynamicSashWindow. The child should respond to DynamicSashSplitEvents --
109
+ perhaps with an OnSplit() event handler -- by constructing a new view
110
+ window whose parent is also the DynamicSashWindow. That's it! Now your
111
+ users can dynamically split and reunify the view you provided.
112
+
113
+ If you wish to handle the scrollbar events for your view, rather than
114
+ allowing DynamicSashWindow to do it for you, things are a bit more
115
+ complex. (You might want to handle scrollbar events yourself, if, for
116
+ instance, you wish to scroll a subwindow of the view you add to your
117
+ DynamicSashWindow object, rather than scrolling the whole view.) In this
118
+ case, you will need to construct your DynamicSashWindow without the
119
+ wxDS_MANAGE_SCROLLBARS style and you will need to use the GetHScrollBar()
120
+ and GetVScrollBar() methods to retrieve the scrollbar controls and call
121
+ SetEventHandler() on them to redirect the scrolling events whenever your
122
+ window is reparented by wxDyanmicSashWindow. You will need to set the
123
+ scrollbars' event handler at three times:
124
+
125
+ * When your view is created When your view receives a
126
+ * DynamicSashSplitEvent When your view receives a
127
+ * DynamicSashUnifyEvent
128
+
129
+ See the dynsash_switch sample application for an example which does this.
130
+ """
131
+
132
+ def __init__(self, *args, **kw):
133
+ """
134
+ Create a new DynamicSashWindow.
135
+
136
+ Both the normal constructor style with all parameters, or wxWidgets
137
+ 2-phase style default constructor is supported. If the default
138
+ constructor is used then the Create method will need to be called
139
+ later before the widget can actually be used.
140
+ """
141
+ if not args and not kw:
142
+ self._init_default()
143
+ else:
144
+ self._init_full(*args, **kw)
145
+
146
+
147
+ def _init_default(self):
148
+ super(DynamicSashWindow, self).__init__()
149
+ self._init()
150
+
151
+ def _init_full(self, parent, id=wx.ID_ANY,
152
+ pos=wx.DefaultPosition, size=wx.DefaultSize,
153
+ style=DS_DEFAULT, name='dynamicSashWindow'):
154
+ super(DynamicSashWindow, self).__init__(parent, id, pos, size, style, name=name)
155
+ self._init()
156
+ self._post_create()
157
+
158
+
159
+ def Create(self, parent, id=wx.ID_ANY,
160
+ pos=wx.DefaultPosition, size=wx.DefaultSize,
161
+ style=DS_DEFAULT, name='dynamicSashWindow'):
162
+ super(DynamicSashWindow, self).Create(parent, id, pos, size, style, name=name)
163
+ self._post_create()
164
+
165
+
166
+ def _init(self):
167
+ # set default attributes
168
+ self.m_impl = None
169
+
170
+
171
+ def _post_create(self):
172
+ self.m_impl = _DynamicSashWindowImpl(self)
173
+ if not self.m_impl.Create():
174
+ self.m_impl.Destroy()
175
+ self.m_impl = None
176
+ return False
177
+ return True
178
+
179
+
180
+ def __dtor__(self):
181
+ # break possible cycles and etc.
182
+ self.SetEventHandler(self)
183
+ self.m_impl.Destroy()
184
+ self.m_impl = None
185
+
186
+
187
+
188
+ def GetHScrollBar(self, child):
189
+ return self.m_impl.FindScrollBar(child, 0)
190
+
191
+ def GetVScrollBar(self, child):
192
+ return self.m_impl.FindScrollBar(child, 1)
193
+
194
+
195
+ def AddChild(self, child):
196
+ super(DynamicSashWindow, self).AddChild(child)
197
+ self.m_impl.AddChild(child)
198
+
199
+
200
+
201
+ #==========================================================================
202
+ # Just internal "implementation details" from here down
203
+
204
+
205
+ # DynamicSashWindow works by internally storing a tree of Implementation
206
+ # objects (_DynamicSsahWindowImpl) and Leaf objects (_DynamicSashWindowLeaf).
207
+ # The DynamicSashWindow has a pointer to one implementation, and each
208
+ # implementation either has a pointer to a one leaf (_leaf) or a pointer to
209
+ # two children implementation objects (_child[]). The leaves each are
210
+ # responsible for drawing the frame and decorations around one user-provided
211
+ # views and for responding to mouse and scrollbar events.
212
+ #
213
+ # A resulting tree might look something like this:
214
+ #
215
+ # DynamicSashWindow
216
+ # |
217
+ # +- _DynamicSashWindowImpl
218
+ # |
219
+ # +- _DynamicSashWindowLeaf
220
+ # | |
221
+ # | +- user view window
222
+ # |
223
+ # +- _DynamicSashWindowImpl
224
+ # |
225
+ # +- _DynamicSashWindowLeaf
226
+ # | |
227
+ # | +- user view window
228
+ # |
229
+ # +- _DynamicSashWindowLeaf
230
+ # |
231
+ # +- user view window
232
+ #
233
+ # Each time a split occurs, one of the implementation objects removes its
234
+ # leaf, generates two new implementation object children, each with a new
235
+ # leaf, and reparents the user view which was connected to its old leaf to be
236
+ # one of the new leaf's user view, and sends a Split event to the user view in
237
+ # the hopes that it will generate a new user view for the other new leaf.
238
+ #
239
+ # When a unification occurs, an implementation object is replaced by one of
240
+ # its children, and the tree of its other child is pruned.
241
+ #
242
+ # One quirk is that the top-level implementation object (m_top) always keeps a
243
+ # pointer to the implementation object where a new child is needed.
244
+ # (_add_child_target). This is so that when a new user view is added to the
245
+ # hierarchy, AddChild() is able to reparent the new user view to the correct
246
+ # implementation object's leaf.
247
+
248
+
249
+
250
+ _wxEVT_DYNAMIC_SASH_REPARENT = wx.NewEventType()
251
+ _EVT_DYNAMIC_SASH_REPARENT = wx.PyEventBinder(_wxEVT_DYNAMIC_SASH_REPARENT, 1)
252
+
253
+
254
+ class _DynamicSashReparentEvent(wx.PyEvent):
255
+ def __init__(self, arg=None):
256
+ super(_DynamicSashReparentEvent, self).__init__()
257
+ if isinstance(arg, _DynamicSashReparentEvent):
258
+ obj = arg.GetEventObject()
259
+ else:
260
+ obj = arg
261
+ self.SetEventObject(obj)
262
+ self.SetEventType(_wxEVT_DYNAMIC_SASH_REPARENT)
263
+
264
+
265
+ # enum DynamicSashRegion
266
+ _DSR_NONE = 0
267
+ _DSR_VERTICAL_TAB = 1
268
+ _DSR_HORIZONTAL_TAB = 2
269
+ _DSR_CORNER = 3
270
+ _DSR_LEFT_EDGE = 4
271
+ _DSR_TOP_EDGE = 5
272
+ _DSR_RIGHT_EDGE = 6
273
+ _DSR_BOTTOM_EDGE = 7
274
+
275
+ _isMac = 'wxMac' in wx.PlatformInfo
276
+
277
+ #----------------------------------------------------------------------------
278
+
279
+ class _DynamicSashWindowImpl(wx.EvtHandler):
280
+ def __init__(self, window):
281
+ super(_DynamicSashWindowImpl, self).__init__()
282
+ self.m_window = window
283
+ self.m_add_child_target = self
284
+ self.m_container = None
285
+ self.m_parent = None
286
+ self.m_top = self
287
+ self.m_child = [None, None]
288
+ self.m_leaf = None
289
+ self.m_dragging = _DSR_NONE
290
+ self.m_split = _DSR_NONE
291
+ self.m_drag_x = -1
292
+ self.m_drag_y = -1
293
+ if _isMac:
294
+ self.m_overlay = wx.Overlay()
295
+ self.DrawSash = self.DrawSash_overlay
296
+
297
+
298
+ def __dtor__(self):
299
+ # break possible cycles and other cleanup
300
+ if self.m_leaf:
301
+ self.m_leaf.Destroy()
302
+ self.m_leaf = None
303
+ if self.m_child[0]:
304
+ self.m_child[0].Destroy()
305
+ self.m_child[0] = None
306
+ if self.m_child[1]:
307
+ self.m_child[1].Destroy()
308
+ self.m_child[1] = None
309
+
310
+ if self.m_container != self.m_window and self.m_container:
311
+ self.m_container.SetEventHandler(self.m_container)
312
+ self.m_container.Destroy()
313
+
314
+ self.m_add_child_target = None
315
+ self.m_top = None
316
+ self.m_window = None
317
+
318
+
319
+ def Create(self):
320
+ if not self.m_container:
321
+ self.m_container = self.m_window
322
+
323
+ self.m_container.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
324
+
325
+ self.m_leaf = _DynamicSashWindowLeaf(self)
326
+ if not self.m_leaf.Create():
327
+ self.m_leaf.Destroy()
328
+ self.m_leaf = None
329
+ return False
330
+
331
+ self.m_container.SetEventHandler(self)
332
+
333
+ self.Bind(wx.EVT_SIZE, self.OnSize)
334
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
335
+ self.Bind(wx.EVT_MOTION, self.OnMouseMove)
336
+ self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseMove)
337
+ self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
338
+ self.Bind(wx.EVT_LEFT_DOWN, self.OnPress)
339
+ self.Bind(wx.EVT_LEFT_UP, self.OnRelease)
340
+
341
+ return True
342
+
343
+
344
+ def AddChild(self, window):
345
+ if self.m_add_child_target and self.m_add_child_target.m_leaf:
346
+ self.m_add_child_target.m_leaf.AddChild(window)
347
+
348
+
349
+ def DrawSash_overlay(self, x, y, mode):
350
+ if mode in ['press', 'move--']:
351
+ # these are not needed for this implementation
352
+ return
353
+
354
+ if mode == 'release':
355
+ dc = wx.ClientDC(self.m_container)
356
+ odc = wx.DCOverlay(self.m_overlay, dc)
357
+ odc.Clear()
358
+ del odc
359
+ self.m_overlay.Reset()
360
+
361
+ if mode == 'move':
362
+ dc = wx.ClientDC(self.m_container)
363
+ odc = wx.DCOverlay(self.m_overlay, dc)
364
+ odc.Clear()
365
+
366
+ penclr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DDKSHADOW)
367
+ dc.SetPen(wx.Pen(penclr, 1))
368
+ bshclr = penclr.Get(False) + (0x80,)
369
+ bshclr = wx.Colour(*bshclr)
370
+ dc.SetBrush(wx.Brush(bshclr))
371
+
372
+ self._doDrawSash(dc, x, y, False)
373
+
374
+
375
+ def DrawSash(self, x, y, mode):
376
+ dc = wx.ScreenDC()
377
+ dc.StartDrawingOnTop(self.m_container)
378
+
379
+ bmp = wx.Bitmap(8, 8)
380
+ bdc = wx.MemoryDC(bmp)
381
+ bdc.DrawRectangle(-1, -1, 10, 10)
382
+ for i in range(8):
383
+ for j in range(8):
384
+ if (i + j) & 1:
385
+ bdc.DrawPoint(i, j)
386
+ bdc.SelectObject(wx.NullBitmap)
387
+
388
+ brush = wx.Brush(bmp)
389
+ dc.SetBrush(brush)
390
+ dc.SetLogicalFunction(wx.XOR)
391
+
392
+ self._doDrawSash(dc, x, y, True)
393
+
394
+ dc.EndDrawingOnTop()
395
+
396
+
397
+ def _doDrawSash(self, dc, x, y, useScreenCoords):
398
+ if (self.m_dragging == _DSR_CORNER
399
+ and (self.m_window.GetWindowStyle() & DS_DRAG_CORNER) != 0):
400
+
401
+ cx = cy = 0
402
+ if useScreenCoords:
403
+ cx, cy = self.m_container.ClientToScreen((cx, cy))
404
+ x, y = self.m_container.ClientToScreen((x, y))
405
+
406
+ if cx < x and cy < y:
407
+ dc.DrawRectangle(cx - 2, cy - 2, x - cx + 4, 4)
408
+ dc.DrawRectangle(x - 2, cy + 2, 4, y - cy)
409
+ dc.DrawRectangle(cx - 2, cy + 2, 4, y - cy)
410
+ dc.DrawRectangle(cx + 2, y - 2, x - cx - 4, 4)
411
+
412
+ else:
413
+ body_w, body_h = self.m_container.GetClientSize()
414
+
415
+ if y < 0:
416
+ y = 0
417
+ if y > body_h:
418
+ y = body_h
419
+ if x < 0:
420
+ x = 0
421
+ if x > body_w:
422
+ x = body_w
423
+
424
+ if self.m_dragging == _DSR_HORIZONTAL_TAB:
425
+ x = 0
426
+ else:
427
+ y = 0
428
+
429
+ if useScreenCoords:
430
+ x, y = self.m_container.ClientToScreen(x, y)
431
+
432
+ w = body_w
433
+ h = body_h
434
+
435
+ if self.m_dragging == _DSR_HORIZONTAL_TAB:
436
+ dc.DrawRectangle(x, y - 2, w, 4)
437
+ else:
438
+ dc.DrawRectangle(x - 2, y, 4, h)
439
+
440
+
441
+ def ConstrainChildren(self, px, py):
442
+ layout = wx.LayoutConstraints()
443
+ layout.left.SameAs(self.m_container, wx.Left)
444
+ layout.top.SameAs(self.m_container, wx.Top)
445
+
446
+ if self.m_split == _DSR_HORIZONTAL_TAB:
447
+ layout.right.SameAs(self.m_container, wx.Right)
448
+ layout.height.PercentOf(self.m_container, wx.Height, py)
449
+ else:
450
+ layout.bottom.SameAs(self.m_container, wx.Bottom)
451
+ layout.width.PercentOf(self.m_container, wx.Width, px)
452
+
453
+ self.m_child[0].m_container.SetConstraints(layout)
454
+
455
+ layout = wx.LayoutConstraints()
456
+ layout.right.SameAs(self.m_container, wx.Right)
457
+ layout.bottom.SameAs(self.m_container, wx.Bottom)
458
+
459
+ if self.m_split == _DSR_HORIZONTAL_TAB:
460
+ layout.top.Below(self.m_child[0].m_container, 1)
461
+ layout.left.SameAs(self.m_container, wx.Left)
462
+ else:
463
+ layout.left.RightOf(self.m_child[0].m_container, 1)
464
+ layout.top.SameAs(self.m_container, wx.Top)
465
+
466
+ self.m_child[1].m_container.SetConstraints(layout)
467
+
468
+
469
+ def Split(self, px, py):
470
+ self.m_add_child_target = None
471
+
472
+ self.m_child[0] = _DynamicSashWindowImpl(self.m_window)
473
+ self.m_child[0].m_container = wx.Window(self.m_container)
474
+ self.m_child[0].m_parent = self
475
+ self.m_child[0].m_top = self.m_top
476
+ self.m_child[0].Create()
477
+ if self.m_leaf.m_child:
478
+ self.m_leaf.m_child.Reparent(self.m_container)
479
+ self.m_child[0].AddChild(self.m_leaf.m_child)
480
+
481
+ self.m_child[1] = _DynamicSashWindowImpl(self.m_window)
482
+ self.m_child[1].m_container = wx.Window(self.m_container)
483
+ self.m_child[1].m_parent = self
484
+ self.m_child[1].m_top = self.m_top
485
+ self.m_child[1].Create()
486
+
487
+ self.m_split = self.m_dragging
488
+ self.ConstrainChildren(px, py)
489
+
490
+ self.m_top.m_add_child_target = self.m_child[1]
491
+ split = DynamicSashSplitEvent(self.m_child[0].m_leaf.m_child)
492
+ self.m_child[0].m_leaf._checkPendingChild()
493
+ self.m_child[0].m_leaf.m_child.GetEventHandler().ProcessEvent(split)
494
+
495
+ self.m_child[0].m_leaf.m_vscroll.SetScrollbar(self.m_leaf.m_vscroll.GetThumbPosition(),
496
+ self.m_leaf.m_vscroll.GetThumbSize(),
497
+ self.m_leaf.m_vscroll.GetRange(),
498
+ self.m_leaf.m_vscroll.GetPageSize())
499
+ self.m_child[0].m_leaf.m_hscroll.SetScrollbar(self.m_leaf.m_hscroll.GetThumbPosition(),
500
+ self.m_leaf.m_hscroll.GetThumbSize(),
501
+ self.m_leaf.m_hscroll.GetRange(),
502
+ self.m_leaf.m_hscroll.GetPageSize())
503
+ self.m_child[1].m_leaf.m_vscroll.SetScrollbar(self.m_leaf.m_vscroll.GetThumbPosition(),
504
+ self.m_leaf.m_vscroll.GetThumbSize(),
505
+ self.m_leaf.m_vscroll.GetRange(),
506
+ self.m_leaf.m_vscroll.GetPageSize())
507
+ self.m_child[1].m_leaf.m_hscroll.SetScrollbar(self.m_leaf.m_hscroll.GetThumbPosition(),
508
+ self.m_leaf.m_hscroll.GetThumbSize(),
509
+ self.m_leaf.m_hscroll.GetRange(),
510
+ self.m_leaf.m_hscroll.GetPageSize())
511
+ self.m_leaf.Destroy()
512
+ self.m_leaf = None
513
+
514
+ self.m_container.Layout()
515
+
516
+
517
+ def Unify(self, panel):
518
+ other = 1 if panel == 0 else 0
519
+
520
+ if self.m_child[panel].m_leaf:
521
+ child = self.m_child[:]
522
+
523
+ self.m_child[0] = self.m_child[1] = None
524
+
525
+ self.m_leaf = _DynamicSashWindowLeaf(self)
526
+ self.m_leaf.Create()
527
+ self.m_leaf.m_child = child[panel].m_leaf.m_child
528
+
529
+ self.m_leaf.m_vscroll.SetScrollbar(child[panel].m_leaf.m_vscroll.GetThumbPosition(),
530
+ child[panel].m_leaf.m_vscroll.GetThumbSize(),
531
+ child[panel].m_leaf.m_vscroll.GetRange(),
532
+ child[panel].m_leaf.m_vscroll.GetPageSize())
533
+ self.m_leaf.m_hscroll.SetScrollbar(child[panel].m_leaf.m_hscroll.GetThumbPosition(),
534
+ child[panel].m_leaf.m_hscroll.GetThumbSize(),
535
+ child[panel].m_leaf.m_hscroll.GetRange(),
536
+ child[panel].m_leaf.m_hscroll.GetPageSize())
537
+ self.m_add_child_target = None
538
+
539
+ event = _DynamicSashReparentEvent(self.m_leaf)
540
+ self.m_leaf.ProcessEvent(event)
541
+
542
+ for i in range(2):
543
+ child[i].Destroy()
544
+
545
+ self.m_split = _DSR_NONE
546
+
547
+ unify = DynamicSashUnifyEvent(self.m_leaf.m_child)
548
+ self.m_leaf.m_child.GetEventHandler().ProcessEvent(unify)
549
+
550
+ else:
551
+ self.m_split = self.m_child[panel].m_split
552
+
553
+ self.m_child[other].Destroy()
554
+
555
+ child_panel = self.m_child[panel]
556
+ self.m_child[0] = child_panel.m_child[0]
557
+ self.m_child[1] = child_panel.m_child[1]
558
+
559
+ self.m_child[0].m_parent = self
560
+ self.m_child[1].m_parent = self
561
+
562
+ self.m_add_child_target = None
563
+ self.m_child[0].m_container.Reparent(self.m_container)
564
+ self.m_child[1].m_container.Reparent(self.m_container)
565
+
566
+ child_panel.m_child[0] = child_panel.m_child[1] = None
567
+ child_panel.Destroy()
568
+
569
+ size = self.m_container.GetSize()
570
+ child_size = self.m_child[0].m_container.GetSize()
571
+
572
+ self.ConstrainChildren(child_size.GetWidth() * 100.0 / size.GetWidth(),
573
+ child_size.GetHeight() * 100.0 / size.GetHeight())
574
+
575
+ self.m_container.Layout()
576
+
577
+
578
+ def Resize(self, x, y):
579
+ h_parent = self.FindParent(_DSR_BOTTOM_EDGE)
580
+ v_parent = self.FindParent(_DSR_RIGHT_EDGE)
581
+ h_unify = -1
582
+ v_unify = -1
583
+ frame = self.FindFrame()
584
+
585
+ if x < 0:
586
+ x = 0
587
+ if y < 0:
588
+ y = 0
589
+
590
+ if h_parent:
591
+ _, y = self.m_container.ClientToScreen(0, y)
592
+ _, y = h_parent.m_container.ScreenToClient(0, y)
593
+
594
+ py = int((y * 100.0) / h_parent.m_container.GetSize().GetHeight() + 0.5)
595
+
596
+ if py < 10:
597
+ ho_parent = self.FindParent(_DSR_TOP_EDGE)
598
+ if ho_parent:
599
+ if self.FindUpperParent(h_parent, ho_parent) == ho_parent:
600
+ h_unify = 1
601
+
602
+ else:
603
+ py = int((ho_parent.m_child[0].m_container.GetSize().GetHeight() * 100.0)
604
+ / h_parent.m_container.GetSize().GetHeight() + 0.5)
605
+ h_parent.m_child[0].m_container.GetConstraints().height.PercentOf(
606
+ h_parent.m_container, wx.Height, py)
607
+
608
+ h_parent = ho_parent
609
+ h_unify = 0
610
+ else:
611
+ h_unify = 1
612
+
613
+ elif py > 90:
614
+ h_unify = 0
615
+ else:
616
+ h_parent.m_child[0].m_container.GetConstraints().height.PercentOf(
617
+ h_parent.m_container, wx.Height, py)
618
+ h_parent.m_container.Layout()
619
+ else:
620
+ do_resize = 1
621
+ h_parent = self.FindParent(_DSR_TOP_EDGE)
622
+ if h_parent:
623
+ py = int((y * 100.0) /
624
+ (h_parent.m_container.GetSize().GetHeight() +
625
+ y - self.m_container.GetSize().GetHeight()) + 0.5)
626
+
627
+ if py < 10:
628
+ h_unify = 0
629
+ elif y < 64:
630
+ do_resize = 0
631
+
632
+ if do_resize:
633
+ size = frame.GetSize()
634
+ frame.SetSize(size.GetWidth(), size.GetHeight() + y - self.m_container.GetSize().GetHeight())
635
+
636
+ if v_parent:
637
+ x, _ = self.m_container.ClientToScreen(x, 0)
638
+ x, _ = v_parent.m_container.ScreenToClient(x, 0)
639
+
640
+ px = int((x * 100.0) / v_parent.m_container.GetSize().GetWidth() + 0.5)
641
+
642
+ if px < 10:
643
+ vo_parent = self.FindParent(_DSR_LEFT_EDGE)
644
+ if vo_parent:
645
+ if self.FindUpperParent(v_parent, vo_parent) == vo_parent:
646
+ v_unify = 1
647
+ else:
648
+ px = int((vo_parent.m_child[0].m_container.GetSize().GetWidth() * 100.0)
649
+ / v_parent.m_container.GetSize().GetWidth() + 0.5)
650
+ v_parent.m_child[0].m_container.GetConstraints().width.PercentOf(
651
+ v_parent.m_container, wx.Width, px)
652
+
653
+ v_parent = vo_parent
654
+ v_unify = 0
655
+ else:
656
+ v_unify = 1
657
+
658
+ elif px > 90:
659
+ v_unify = 0
660
+ else:
661
+ v_parent.m_child[0].m_container.GetConstraints().width.PercentOf(
662
+ v_parent.m_container, wx.Width, px)
663
+ v_parent.m_container.Layout()
664
+ else:
665
+ do_resize = 1
666
+ v_parent = self.FindParent(_DSR_LEFT_EDGE)
667
+ if v_parent:
668
+ px = int((x * 100.0) /
669
+ (v_parent.m_container.GetSize().GetWidth() +
670
+ x - self.m_container.GetSize().GetWidth()) + 0.5)
671
+
672
+ if px < 10:
673
+ v_unify = 0
674
+ elif x < 64:
675
+ do_resize = 0
676
+
677
+ if do_resize:
678
+ size = frame.GetSize()
679
+ frame.SetSize(size.GetWidth() + x - self.m_container.GetSize().GetWidth(), size.GetHeight())
680
+
681
+ if h_unify != -1 and v_unify != -1:
682
+ parent = self.FindUpperParent(h_parent, v_parent)
683
+ if parent == h_parent:
684
+ h_parent.Unify(h_unify)
685
+ else:
686
+ v_parent.Unify(v_unify)
687
+
688
+ elif h_unify != -1:
689
+ h_parent.Unify(h_unify)
690
+
691
+ elif v_unify != -1:
692
+ v_parent.Unify(v_unify)
693
+
694
+
695
+ def FindParent(self, side):
696
+ if self.m_parent is None:
697
+ return None
698
+
699
+ if self.m_parent.m_split == _DSR_HORIZONTAL_TAB:
700
+ if side == _DSR_TOP_EDGE and self.m_parent.m_child[1] == self:
701
+ return self.m_parent
702
+ if side == _DSR_BOTTOM_EDGE and self.m_parent.m_child[0] == self:
703
+ return self.m_parent
704
+
705
+ elif self.m_parent.m_split == _DSR_VERTICAL_TAB:
706
+ if side == _DSR_LEFT_EDGE and self.m_parent.m_child[1] == self:
707
+ return self.m_parent
708
+ if side == _DSR_RIGHT_EDGE and self.m_parent.m_child[0] == self:
709
+ return self.m_parent
710
+
711
+ return self.m_parent.FindParent(side)
712
+
713
+
714
+ def FindUpperParent(self, sash_a, sash_b):
715
+ win = sash_a.m_container.GetParent()
716
+ while win and not win.IsTopLevel():
717
+ if win == sash_b.m_container:
718
+ return sash_b
719
+ win = win.GetParent()
720
+ return sash_a
721
+
722
+
723
+ def FindFrame(self):
724
+ win = self.m_window.GetParent()
725
+ while win and not win.IsTopLevel():
726
+ win = win.GetParent()
727
+ return win
728
+
729
+
730
+ def FindScrollBar(self, child, vert):
731
+ if self.m_child[0] is None and self.m_leaf is None:
732
+ return None
733
+
734
+ if not self.m_child[0]:
735
+ return self.m_leaf.FindScrollBar(child, vert)
736
+
737
+ ret = self.m_child[0].FindScrollBar(child, vert)
738
+ if not ret:
739
+ ret = self.m_child[1].FindScrollBar(child, vert)
740
+
741
+ return ret
742
+
743
+
744
+ def OnSize(self, event):
745
+ self.m_container.Layout()
746
+ if self.m_leaf:
747
+ self.m_leaf.OnSize(event)
748
+
749
+
750
+ def OnPaint(self, event):
751
+ if self.m_leaf:
752
+ self.m_leaf.OnPaint(event)
753
+ else:
754
+ dc = wx.PaintDC(self.m_container)
755
+ dc.SetBackground(wx.Brush(self.m_container.GetBackgroundColour(), wx.SOLID))
756
+ dc.Clear()
757
+
758
+
759
+ def OnMouseMove(self, event):
760
+ if self.m_dragging:
761
+ self.DrawSash(self.m_drag_x, self.m_drag_y, "move--")
762
+ self.m_drag_x = event.x
763
+ self.m_drag_y = event.y
764
+ self.DrawSash(self.m_drag_x, self.m_drag_y, "move")
765
+ elif self.m_leaf:
766
+ self.m_leaf.OnMouseMove(event)
767
+
768
+
769
+ def OnLeave(self, event):
770
+ if self.m_leaf:
771
+ self.m_leaf.OnLeave(event)
772
+
773
+
774
+ def OnPress(self, event):
775
+ if self.m_leaf:
776
+ self.m_leaf.OnPress(event)
777
+ else:
778
+ self.m_dragging = self.m_split
779
+ self.m_drag_x = event.x
780
+ self.m_drag_y = event.y
781
+ self.DrawSash(self.m_drag_x, self.m_drag_y, "press")
782
+ self.m_container.CaptureMouse()
783
+
784
+
785
+ def OnRelease(self, event):
786
+ if ((self.m_dragging == _DSR_CORNER) and
787
+ (self.m_window.GetWindowStyle() & DS_DRAG_CORNER) != 0):
788
+
789
+ self.DrawSash(self.m_drag_x, self.m_drag_y, "release")
790
+ self.m_container.ReleaseMouse()
791
+
792
+ self.Resize(event.x, event.y)
793
+
794
+ self.m_dragging = _DSR_NONE
795
+
796
+ elif self.m_dragging:
797
+ self.DrawSash(self.m_drag_x, self.m_drag_y, "release")
798
+ self.m_container.ReleaseMouse()
799
+
800
+ size = self.m_container.GetSize()
801
+ px = int((event.x * 100.0) / size.GetWidth() + 0.5)
802
+ py = int((event.y * 100.0) / size.GetHeight() + 0.5)
803
+
804
+ if ((self.m_dragging == _DSR_HORIZONTAL_TAB and py >= 10 and py <= 90)
805
+ or (self.m_dragging == _DSR_VERTICAL_TAB and px >= 10 and px <= 90)):
806
+ if self.m_child[0] is None:
807
+ self.Split(px, py)
808
+ else:
809
+ # It would be nice if moving *this* sash didn't implicitly move
810
+ # the sashes of our children (if any). But this will do.
811
+ layout = self.m_child[0].m_container.GetConstraints()
812
+ if self.m_split == _DSR_HORIZONTAL_TAB:
813
+ layout.height.PercentOf(self.m_container, wx.Height, py)
814
+ else:
815
+ layout.width.PercentOf(self.m_container, wx.Width, px)
816
+ self.m_container.Layout()
817
+ else:
818
+ if self.m_child[0] is not None:
819
+ if ((self.m_dragging == _DSR_HORIZONTAL_TAB and py <= 10)
820
+ or (self.m_dragging == _DSR_VERTICAL_TAB and px <= 10)):
821
+ self.Unify(1)
822
+ else:
823
+ self.Unify(0)
824
+
825
+
826
+ if self.m_split == _DSR_HORIZONTAL_TAB:
827
+ cursor = wx.Cursor(wx.CURSOR_SIZENS)
828
+ elif self.m_split == _DSR_VERTICAL_TAB:
829
+ cursor = wx.Cursor(wx.CURSOR_SIZEWE)
830
+ else:
831
+ cursor = wx.Cursor(wx.CURSOR_ARROW)
832
+ self.m_container.SetCursor(cursor)
833
+
834
+ self.m_dragging = _DSR_NONE
835
+
836
+ elif self.m_leaf:
837
+ self.m_leaf.OnRelease(event)
838
+
839
+
840
+
841
+ #----------------------------------------------------------------------------
842
+
843
+
844
+ class _DynamicSashWindowLeaf(wx.EvtHandler):
845
+ def __init__(self, impl):
846
+ super(_DynamicSashWindowLeaf, self).__init__()
847
+ self.m_impl = impl
848
+ self.m_hscroll = None
849
+ self.m_vscroll = None
850
+ self.m_child = None
851
+ self.m_viewport = None
852
+
853
+
854
+ def __dtor__(self):
855
+ if self.m_hscroll:
856
+ self.m_hscroll.SetEventHandler(self.m_hscroll)
857
+ self.m_hscroll.Destroy()
858
+ if self.m_vscroll:
859
+ self.m_vscroll.SetEventHandler(self.m_vscroll)
860
+ self.m_vscroll.Destroy()
861
+ if self.m_viewport:
862
+ self.m_viewport.Destroy()
863
+
864
+
865
+ def Create(self):
866
+ self.m_hscroll = wx.ScrollBar()
867
+ self.m_vscroll = wx.ScrollBar()
868
+ self.m_viewport = wx.Window()
869
+
870
+ add_child_target = self.m_impl.m_add_child_target
871
+ self.m_impl.m_add_child_target = None
872
+
873
+ success = self.m_hscroll.Create(self.m_impl.m_container, style=wx.SB_HORIZONTAL)
874
+ if success:
875
+ success = self.m_vscroll.Create(self.m_impl.m_container, style=wx.SB_VERTICAL)
876
+ if success:
877
+ success = self.m_viewport.Create(self.m_impl.m_container)
878
+
879
+ if not success:
880
+ return False
881
+
882
+ self.m_impl.m_add_child_target = add_child_target
883
+
884
+ cursor = wx.Cursor(wx.CURSOR_ARROW)
885
+ self.m_hscroll.SetCursor(cursor)
886
+ self.m_vscroll.SetCursor(cursor)
887
+ self.m_viewport.SetCursor(cursor)
888
+
889
+ self.m_viewport.Bind(wx.EVT_SIZE, self.OnViewSize)
890
+ self.Bind(_EVT_DYNAMIC_SASH_REPARENT, self.OnReparent)
891
+
892
+ if self.m_impl.m_window.GetWindowStyle() & DS_MANAGE_SCROLLBARS:
893
+ for sbar in [self.m_hscroll, self.m_vscroll]:
894
+ sbar.Bind(wx.EVT_SET_FOCUS, self.OnFocus)
895
+ sbar.Bind(wx.EVT_SCROLL_TOP, self.OnScroll)
896
+ sbar.Bind(wx.EVT_SCROLL_BOTTOM, self.OnScroll)
897
+ sbar.Bind(wx.EVT_SCROLL_LINEUP, self.OnScroll)
898
+ sbar.Bind(wx.EVT_SCROLL_LINEDOWN, self.OnScroll)
899
+ sbar.Bind(wx.EVT_SCROLL_PAGEUP, self.OnScroll)
900
+ sbar.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnScroll)
901
+ sbar.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnScroll)
902
+ sbar.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnScroll)
903
+
904
+ layout = wx.LayoutConstraints()
905
+ size = self.m_hscroll.GetBestSize()
906
+
907
+ layout.left.SameAs(self.m_impl.m_container, wx.Left, 10)
908
+ layout.right.LeftOf(self.m_vscroll)
909
+ layout.bottom.SameAs(self.m_impl.m_container, wx.Bottom, 3)
910
+ layout.height.Absolute(size.GetHeight())
911
+ self.m_hscroll.SetConstraints(layout)
912
+
913
+ layout = wx.LayoutConstraints()
914
+ size = self.m_vscroll.GetBestSize()
915
+
916
+ layout.top.SameAs(self.m_impl.m_container, wx.Top, 10)
917
+ layout.bottom.Above(self.m_hscroll)
918
+ layout.right.SameAs(self.m_impl.m_container, wx.Right, 3)
919
+ layout.width.Absolute(size.GetWidth())
920
+ self.m_vscroll.SetConstraints(layout)
921
+
922
+ layout = wx.LayoutConstraints()
923
+ layout.left.SameAs(self.m_impl.m_container, wx.Left, 3)
924
+ layout.right.LeftOf(self.m_vscroll)
925
+ layout.top.SameAs(self.m_impl.m_container, wx.Top, 3)
926
+ layout.bottom.Above(self.m_hscroll)
927
+ self.m_viewport.SetConstraints(layout)
928
+
929
+ self.m_impl.m_container.Layout()
930
+ return True
931
+
932
+
933
+ def AddChild(self, window):
934
+ if self.m_child:
935
+ self.m_child.Destroy()
936
+
937
+ # Since the parent's AddWindow is called during the construction of
938
+ # the C++ part of the child, there isn't a proxy object created for
939
+ # the child window yet. When we later try to use the widget object
940
+ # given here then it will come up as being already deleted (because
941
+ # the real proxy exists now.) So instead of saving the `window` here
942
+ # we'll just save the object's address instead, and then use that to
943
+ # fetch the real proxy object when it's needed later.
944
+ self.m_child = None
945
+ self.m_child_ptr = wx.siplib.unwrapinstance(window)
946
+
947
+ # Delay the reparenting until after the AddChild has finished.
948
+ event = _DynamicSashReparentEvent(self)
949
+ self.AddPendingEvent(event)
950
+
951
+
952
+ def _checkPendingChild(self):
953
+ if hasattr(self, 'm_child_ptr'):
954
+ self.m_child = wx.siplib.wrapinstance(self.m_child_ptr, wx.Object)
955
+ del self.m_child_ptr
956
+
957
+
958
+ def OnReparent(self, event):
959
+ self._checkPendingChild()
960
+ if self.m_child:
961
+ self.m_child.Reparent(self.m_viewport)
962
+ self.ResizeChild(self.m_viewport.GetSize())
963
+
964
+
965
+ def GetRegion(self, x, y):
966
+ size = self.m_impl.m_container.GetSize()
967
+ w = size.GetWidth()
968
+ h = size.GetHeight()
969
+ size = self.m_hscroll.GetSize()
970
+ sh = size.GetHeight()
971
+ size = self.m_vscroll.GetSize()
972
+ sw = size.GetWidth()
973
+
974
+ if x >= w - sw - 3 and x < w and y >= h - sh - 3 and y < h:
975
+ return _DSR_CORNER
976
+ if x >= 3 and x < 10 and y >= h - sh - 3 and y < h - 2:
977
+ return _DSR_VERTICAL_TAB
978
+ if x >= w - sw - 3 and x < w - 2 and y >= 3 and y < 10:
979
+ return _DSR_HORIZONTAL_TAB
980
+ if x < 3:
981
+ return _DSR_LEFT_EDGE
982
+ if y < 3:
983
+ return _DSR_TOP_EDGE
984
+ if x >= w - 2:
985
+ return _DSR_RIGHT_EDGE
986
+ if y >= h - 2:
987
+ return _DSR_BOTTOM_EDGE
988
+
989
+ return _DSR_NONE
990
+
991
+
992
+ def ResizeChild(self, size):
993
+ self._checkPendingChild()
994
+ if self.m_child:
995
+ if self.m_impl.m_window.HasFlag(DS_MANAGE_SCROLLBARS):
996
+ best_size = self.m_child.GetBestSize()
997
+ if best_size.GetWidth() < size.GetWidth():
998
+ best_size.SetWidth(size.GetWidth())
999
+ if best_size.GetHeight() < size.GetHeight():
1000
+ best_size.SetHeight(size.GetHeight())
1001
+ self.m_child.SetSize(best_size)
1002
+
1003
+ hpos = self.m_hscroll.GetThumbPosition()
1004
+ vpos = self.m_vscroll.GetThumbPosition()
1005
+
1006
+ if hpos < 0:
1007
+ hpos = 0
1008
+ if vpos < 0:
1009
+ vpos = 0
1010
+ if hpos > best_size.GetWidth() - size.GetWidth():
1011
+ hpos = best_size.GetWidth() - size.GetWidth()
1012
+ if vpos > best_size.GetHeight() - size.GetHeight():
1013
+ vpos = best_size.GetHeight() - size.GetHeight()
1014
+
1015
+ self.m_hscroll.SetScrollbar(hpos, size.GetWidth(),
1016
+ best_size.GetWidth(), size.GetWidth())
1017
+ self.m_vscroll.SetScrollbar(vpos, size.GetHeight(),
1018
+ best_size.GetHeight(), size.GetHeight())
1019
+
1020
+ # Umm, the scrollbars are doing something insane under GTK+ and subtracting
1021
+ # one from the position I pass in. This works around that.
1022
+ self.m_hscroll.SetThumbPosition(hpos + hpos - self.m_hscroll.GetThumbPosition())
1023
+ self.m_vscroll.SetThumbPosition(vpos + vpos - self.m_vscroll.GetThumbPosition())
1024
+
1025
+ pos = self.m_child.GetPosition()
1026
+ self.m_viewport.ScrollWindow(-hpos - pos.x, -vpos - pos.y)
1027
+
1028
+ else: # not DS_MANAGE_SCROLLBARS
1029
+ self.m_child.SetSize(size)
1030
+
1031
+
1032
+ def FindScrollBar(self, child, vert):
1033
+ self._checkPendingChild()
1034
+ if self.m_child == child:
1035
+ return self.m_vscroll if vert else self.m_hscroll
1036
+ return None
1037
+
1038
+
1039
+ def OnSize(self, event):
1040
+ self.m_impl.m_container.Refresh()
1041
+
1042
+
1043
+ def OnViewSize(self, event):
1044
+ if self.m_viewport is not None:
1045
+ self.ResizeChild(self.m_viewport.GetSize())
1046
+
1047
+
1048
+ def OnPaint(self, event):
1049
+ dc = wx.PaintDC(self.m_impl.m_container)
1050
+ dc.SetBackground(wx.Brush(self.m_impl.m_container.GetBackgroundColour()))
1051
+ dc.Clear()
1052
+
1053
+ highlight = wx.Pen(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNHIGHLIGHT), 1)
1054
+ shadow = wx.Pen(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNSHADOW), 1)
1055
+ black = wx.Pen(wx.BLACK, 1)
1056
+
1057
+ size = self.m_impl.m_container.GetSize()
1058
+ w = size.GetWidth()
1059
+ h = size.GetHeight()
1060
+ size = self.m_hscroll.GetSize()
1061
+ sh = size.GetHeight()
1062
+ size = self.m_vscroll.GetSize()
1063
+ sw = size.GetWidth()
1064
+
1065
+ dc.SetPen(shadow)
1066
+ dc.DrawLine(1, 1, 1, h - 2)
1067
+ dc.DrawLine(1, 1, w - 2, 1)
1068
+ dc.SetPen(black)
1069
+ dc.DrawLine(2, 2, 2, h - 3)
1070
+ dc.DrawLine(2, 2, w - 3, 2)
1071
+ dc.SetPen(highlight)
1072
+ dc.DrawLine(w - 2, 2, w - 2, h - sh - 2)
1073
+ dc.DrawLine(w - 2, h - sh - 2, w - sw - 2, h - sh - 2)
1074
+ dc.DrawLine(w - sw - 2, h - sh - 2, w - sw - 2, h - 2)
1075
+ dc.DrawLine(w - sw - 2, h - 2, 2, h - 2)
1076
+
1077
+ dc.SetPen(highlight)
1078
+ dc.DrawLine(w - sw - 2, 8, w - sw - 2, 4)
1079
+ dc.DrawLine(w - sw - 2, 4, w - 5, 4)
1080
+ dc.SetPen(shadow)
1081
+ dc.DrawLine(w - 5, 4, w - 5, 8)
1082
+ dc.DrawLine(w - 5, 8, w - sw - 2, 8)
1083
+ dc.SetPen(black)
1084
+ dc.DrawLine(w - 4, 3, w - 4, 9)
1085
+ dc.DrawLine(w - 4, 9, w - sw - 3, 9)
1086
+
1087
+ dc.SetPen(highlight)
1088
+ dc.DrawLine(4, h - 5, 4, h - sh - 2)
1089
+ dc.DrawLine(4, h - sh - 2, 8, h - sh - 2)
1090
+ dc.SetPen(shadow)
1091
+ dc.DrawLine(8, h - sh - 2, 8, h - 5)
1092
+ dc.DrawLine(8, h - 5, 4, h - 5)
1093
+ dc.SetPen(black)
1094
+ dc.DrawLine(9, h - sh - 3, 9, h - 4)
1095
+ dc.DrawLine(9, h - 4, 3, h - 4)
1096
+
1097
+ cy = (h - sh + h - 6) / 2.0 + 1
1098
+ cx = (w - sw + w - 6) / 2.0 + 1
1099
+ sy = cy
1100
+ while sy > h - sh:
1101
+ sy -= 4
1102
+ sx = cx
1103
+ while sx > w - sw:
1104
+ sx -= 4
1105
+
1106
+ for y in range(int(sy), h-2, 4): #(y = sy; y < h - 2; y += 4)
1107
+ for x in range(int(sx), w-2, 4): #(x = sx; x < w - 2; x += 4)
1108
+ if x - cx >= -(y - cy):
1109
+ dc.SetPen(highlight)
1110
+ dc.DrawPoint(x, y)
1111
+ dc.SetPen(shadow)
1112
+ dc.DrawPoint(x + 1, y + 1)
1113
+
1114
+
1115
+
1116
+ def OnScroll(self, event):
1117
+ self._checkPendingChild()
1118
+ nx = -self.m_hscroll.GetThumbPosition()
1119
+ ny = -self.m_vscroll.GetThumbPosition()
1120
+
1121
+ if self.m_child:
1122
+ pos = self.m_child.GetPosition()
1123
+ self.m_viewport.ScrollWindow(nx - pos.x, ny - pos.y)
1124
+
1125
+
1126
+ def OnFocus(self, event):
1127
+ self._checkPendingChild()
1128
+ if (event.GetEventObject() == self.m_hscroll or
1129
+ event.GetEventObject() == self.m_vscroll):
1130
+ self.m_child.SetFocus()
1131
+
1132
+
1133
+ def OnMouseMove(self, event):
1134
+ if self.m_impl.m_dragging:
1135
+ return
1136
+
1137
+ region = self.GetRegion(event.x, event.y)
1138
+
1139
+ cursor = wx.Cursor(wx.CURSOR_ARROW)
1140
+ if region == _DSR_HORIZONTAL_TAB:
1141
+ cursor = wx.Cursor(wx.CURSOR_SIZENS)
1142
+ elif region == _DSR_VERTICAL_TAB:
1143
+ cursor = wx.Cursor(wx.CURSOR_SIZEWE)
1144
+ elif (region == _DSR_CORNER and
1145
+ self.m_impl.m_window.GetWindowStyle() & DS_DRAG_CORNER != 0):
1146
+ cursor = wx.Cursor(wx.CURSOR_SIZENWSE)
1147
+
1148
+ elif (region == _DSR_LEFT_EDGE or region == _DSR_TOP_EDGE
1149
+ or region == _DSR_RIGHT_EDGE or region == _DSR_BOTTOM_EDGE):
1150
+ if self.m_impl.FindParent(region):
1151
+ if region == _DSR_LEFT_EDGE or region == _DSR_RIGHT_EDGE:
1152
+ cursor = wx.Cursor(wx.CURSOR_SIZEWE)
1153
+ else:
1154
+ cursor = wx.Cursor(wx.CURSOR_SIZENS)
1155
+
1156
+ self.m_impl.m_container.SetCursor(cursor)
1157
+
1158
+
1159
+
1160
+ def OnLeave(self, event):
1161
+ cursor = wx.Cursor(wx.CURSOR_ARROW)
1162
+ self.m_impl.m_container.SetCursor(cursor)
1163
+
1164
+
1165
+
1166
+ def OnPress(self, event):
1167
+ region = self.GetRegion(event.x, event.y)
1168
+
1169
+ if region == _DSR_CORNER and (self.m_impl.m_window.GetWindowStyle() & DS_DRAG_CORNER) == 0:
1170
+ return
1171
+
1172
+ if region == _DSR_HORIZONTAL_TAB or region == _DSR_VERTICAL_TAB or region == _DSR_CORNER:
1173
+ self.m_impl.m_dragging = region
1174
+ self.m_impl.m_drag_x = event.x
1175
+ self.m_impl.m_drag_y = event.y
1176
+ self.m_impl.DrawSash(event.x, event.y, "press")
1177
+ self.m_impl.m_container.CaptureMouse()
1178
+
1179
+ elif (region == _DSR_LEFT_EDGE or region == _DSR_TOP_EDGE
1180
+ or region == _DSR_RIGHT_EDGE or region == _DSR_BOTTOM_EDGE):
1181
+ parent = self.m_impl.FindParent(region)
1182
+
1183
+ if parent:
1184
+ x = event.x
1185
+ y = event.y
1186
+
1187
+ x, y = self.m_impl.m_container.ClientToScreen(x, y)
1188
+ x, y = parent.m_container.ScreenToClient(x, y)
1189
+
1190
+ parent.m_dragging = parent.m_split
1191
+ parent.m_drag_x = x
1192
+ parent.m_drag_y = y
1193
+ parent.DrawSash(x, y, "press")
1194
+ parent.m_container.CaptureMouse()
1195
+
1196
+
1197
+ def OnRelease(self, event):
1198
+ pass
1199
+
1200
+
1201
+
1202
+