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,2660 @@
1
+ #!/usr/bin/env python
2
+ # Tags: phoenix-port, py3-port
3
+
4
+ import os
5
+ import string
6
+ import random
7
+
8
+ import wx
9
+ import wx.lib.colourselect as csel
10
+ import wx.lib.colourutils as cutils
11
+
12
+ import sys
13
+
14
+ from six import BytesIO
15
+
16
+ try:
17
+ dirName = os.path.dirname(os.path.abspath(__file__))
18
+ except:
19
+ dirName = os.path.dirname(os.path.abspath(sys.argv[0]))
20
+
21
+ sys.path.append(os.path.split(dirName)[0])
22
+
23
+ try:
24
+ from agw import hypertreelist as HTL
25
+ bitmapDir = "bitmaps/"
26
+ except ImportError: # if it's not there locally, try the wxPython lib.
27
+ import wx.lib.agw.hypertreelist as HTL
28
+ bitmapDir = "agw/bitmaps/"
29
+
30
+ import ListCtrl
31
+ import images
32
+
33
+
34
+ penstyle = ["wx.PENSTYLE_SOLID", "wx.PENSTYLE_TRANSPARENT", "wx.PENSTYLE_DOT",
35
+ "wx.PENSTYLE_LONG_DASH", "wx.PENSTYLE_DOT_DASH", "wx.PENSTYLE_USER_DASH",
36
+ "wx.PENSTYLE_BDIAGONAL_HATCH", "wx.PENSTYLE_CROSSDIAG_HATCH",
37
+ "wx.PENSTYLE_FDIAGONAL_HATCH", "wx.PENSTYLE_CROSS_HATCH",
38
+ "wx.PENSTYLE_HORIZONTAL_HATCH", "wx.PENSTYLE_VERTICAL_HATCH"]
39
+
40
+ ArtIDs = [ "None",
41
+ "wx.ART_ADD_BOOKMARK",
42
+ "wx.ART_DEL_BOOKMARK",
43
+ "wx.ART_HELP_SIDE_PANEL",
44
+ "wx.ART_HELP_SETTINGS",
45
+ "wx.ART_HELP_BOOK",
46
+ "wx.ART_HELP_FOLDER",
47
+ "wx.ART_HELP_PAGE",
48
+ "wx.ART_GO_BACK",
49
+ "wx.ART_GO_FORWARD",
50
+ "wx.ART_GO_UP",
51
+ "wx.ART_GO_DOWN",
52
+ "wx.ART_GO_TO_PARENT",
53
+ "wx.ART_GO_HOME",
54
+ "wx.ART_FILE_OPEN",
55
+ "wx.ART_PRINT",
56
+ "wx.ART_HELP",
57
+ "wx.ART_TIP",
58
+ "wx.ART_REPORT_VIEW",
59
+ "wx.ART_LIST_VIEW",
60
+ "wx.ART_NEW_DIR",
61
+ "wx.ART_HARDDISK",
62
+ "wx.ART_FLOPPY",
63
+ "wx.ART_CDROM",
64
+ "wx.ART_REMOVABLE",
65
+ "wx.ART_FOLDER",
66
+ "wx.ART_FOLDER_OPEN",
67
+ "wx.ART_GO_DIR_UP",
68
+ "wx.ART_EXECUTABLE_FILE",
69
+ "wx.ART_NORMAL_FILE",
70
+ "wx.ART_TICK_MARK",
71
+ "wx.ART_CROSS_MARK",
72
+ "wx.ART_ERROR",
73
+ "wx.ART_QUESTION",
74
+ "wx.ART_WARNING",
75
+ "wx.ART_INFORMATION",
76
+ "wx.ART_MISSING_IMAGE",
77
+ "SmileBitmap"
78
+ ]
79
+
80
+ keyMap = {
81
+ wx.WXK_BACK : "WXK_BACK",
82
+ wx.WXK_TAB : "WXK_TAB",
83
+ wx.WXK_RETURN : "WXK_RETURN",
84
+ wx.WXK_ESCAPE : "WXK_ESCAPE",
85
+ wx.WXK_SPACE : "WXK_SPACE",
86
+ wx.WXK_DELETE : "WXK_DELETE",
87
+ wx.WXK_START : "WXK_START",
88
+ wx.WXK_LBUTTON : "WXK_LBUTTON",
89
+ wx.WXK_RBUTTON : "WXK_RBUTTON",
90
+ wx.WXK_CANCEL : "WXK_CANCEL",
91
+ wx.WXK_MBUTTON : "WXK_MBUTTON",
92
+ wx.WXK_CLEAR : "WXK_CLEAR",
93
+ wx.WXK_SHIFT : "WXK_SHIFT",
94
+ wx.WXK_ALT : "WXK_ALT",
95
+ wx.WXK_CONTROL : "WXK_CONTROL",
96
+ wx.WXK_MENU : "WXK_MENU",
97
+ wx.WXK_PAUSE : "WXK_PAUSE",
98
+ wx.WXK_CAPITAL : "WXK_CAPITAL",
99
+ wx.WXK_END : "WXK_END",
100
+ wx.WXK_HOME : "WXK_HOME",
101
+ wx.WXK_LEFT : "WXK_LEFT",
102
+ wx.WXK_UP : "WXK_UP",
103
+ wx.WXK_RIGHT : "WXK_RIGHT",
104
+ wx.WXK_DOWN : "WXK_DOWN",
105
+ wx.WXK_SELECT : "WXK_SELECT",
106
+ wx.WXK_PRINT : "WXK_PRINT",
107
+ wx.WXK_EXECUTE : "WXK_EXECUTE",
108
+ wx.WXK_SNAPSHOT : "WXK_SNAPSHOT",
109
+ wx.WXK_INSERT : "WXK_INSERT",
110
+ wx.WXK_HELP : "WXK_HELP",
111
+ wx.WXK_NUMPAD0 : "WXK_NUMPAD0",
112
+ wx.WXK_NUMPAD1 : "WXK_NUMPAD1",
113
+ wx.WXK_NUMPAD2 : "WXK_NUMPAD2",
114
+ wx.WXK_NUMPAD3 : "WXK_NUMPAD3",
115
+ wx.WXK_NUMPAD4 : "WXK_NUMPAD4",
116
+ wx.WXK_NUMPAD5 : "WXK_NUMPAD5",
117
+ wx.WXK_NUMPAD6 : "WXK_NUMPAD6",
118
+ wx.WXK_NUMPAD7 : "WXK_NUMPAD7",
119
+ wx.WXK_NUMPAD8 : "WXK_NUMPAD8",
120
+ wx.WXK_NUMPAD9 : "WXK_NUMPAD9",
121
+ wx.WXK_MULTIPLY : "WXK_MULTIPLY",
122
+ wx.WXK_ADD : "WXK_ADD",
123
+ wx.WXK_SEPARATOR : "WXK_SEPARATOR",
124
+ wx.WXK_SUBTRACT : "WXK_SUBTRACT",
125
+ wx.WXK_DECIMAL : "WXK_DECIMAL",
126
+ wx.WXK_DIVIDE : "WXK_DIVIDE",
127
+ wx.WXK_F1 : "WXK_F1",
128
+ wx.WXK_F2 : "WXK_F2",
129
+ wx.WXK_F3 : "WXK_F3",
130
+ wx.WXK_F4 : "WXK_F4",
131
+ wx.WXK_F5 : "WXK_F5",
132
+ wx.WXK_F6 : "WXK_F6",
133
+ wx.WXK_F7 : "WXK_F7",
134
+ wx.WXK_F8 : "WXK_F8",
135
+ wx.WXK_F9 : "WXK_F9",
136
+ wx.WXK_F10 : "WXK_F10",
137
+ wx.WXK_F11 : "WXK_F11",
138
+ wx.WXK_F12 : "WXK_F12",
139
+ wx.WXK_F13 : "WXK_F13",
140
+ wx.WXK_F14 : "WXK_F14",
141
+ wx.WXK_F15 : "WXK_F15",
142
+ wx.WXK_F16 : "WXK_F16",
143
+ wx.WXK_F17 : "WXK_F17",
144
+ wx.WXK_F18 : "WXK_F18",
145
+ wx.WXK_F19 : "WXK_F19",
146
+ wx.WXK_F20 : "WXK_F20",
147
+ wx.WXK_F21 : "WXK_F21",
148
+ wx.WXK_F22 : "WXK_F22",
149
+ wx.WXK_F23 : "WXK_F23",
150
+ wx.WXK_F24 : "WXK_F24",
151
+ wx.WXK_NUMLOCK : "WXK_NUMLOCK",
152
+ wx.WXK_SCROLL : "WXK_SCROLL",
153
+ wx.WXK_PAGEUP : "WXK_PAGEUP",
154
+ wx.WXK_PAGEDOWN : "WXK_PAGEDOWN",
155
+ wx.WXK_NUMPAD_SPACE : "WXK_NUMPAD_SPACE",
156
+ wx.WXK_NUMPAD_TAB : "WXK_NUMPAD_TAB",
157
+ wx.WXK_NUMPAD_ENTER : "WXK_NUMPAD_ENTER",
158
+ wx.WXK_NUMPAD_F1 : "WXK_NUMPAD_F1",
159
+ wx.WXK_NUMPAD_F2 : "WXK_NUMPAD_F2",
160
+ wx.WXK_NUMPAD_F3 : "WXK_NUMPAD_F3",
161
+ wx.WXK_NUMPAD_F4 : "WXK_NUMPAD_F4",
162
+ wx.WXK_NUMPAD_HOME : "WXK_NUMPAD_HOME",
163
+ wx.WXK_NUMPAD_LEFT : "WXK_NUMPAD_LEFT",
164
+ wx.WXK_NUMPAD_UP : "WXK_NUMPAD_UP",
165
+ wx.WXK_NUMPAD_RIGHT : "WXK_NUMPAD_RIGHT",
166
+ wx.WXK_NUMPAD_DOWN : "WXK_NUMPAD_DOWN",
167
+ wx.WXK_NUMPAD_PAGEUP : "WXK_NUMPAD_PAGEUP",
168
+ wx.WXK_NUMPAD_PAGEDOWN : "WXK_NUMPAD_PAGEDOWN",
169
+ wx.WXK_NUMPAD_END : "WXK_NUMPAD_END",
170
+ wx.WXK_NUMPAD_BEGIN : "WXK_NUMPAD_BEGIN",
171
+ wx.WXK_NUMPAD_INSERT : "WXK_NUMPAD_INSERT",
172
+ wx.WXK_NUMPAD_DELETE : "WXK_NUMPAD_DELETE",
173
+ wx.WXK_NUMPAD_EQUAL : "WXK_NUMPAD_EQUAL",
174
+ wx.WXK_NUMPAD_MULTIPLY : "WXK_NUMPAD_MULTIPLY",
175
+ wx.WXK_NUMPAD_ADD : "WXK_NUMPAD_ADD",
176
+ wx.WXK_NUMPAD_SEPARATOR : "WXK_NUMPAD_SEPARATOR",
177
+ wx.WXK_NUMPAD_SUBTRACT : "WXK_NUMPAD_SUBTRACT",
178
+ wx.WXK_NUMPAD_DECIMAL : "WXK_NUMPAD_DECIMAL",
179
+ wx.WXK_NUMPAD_DIVIDE : "WXK_NUMPAD_DIVIDE"
180
+ }
181
+
182
+
183
+ #----------------------------------------------------------------------
184
+ def GetMondrianData():
185
+ return \
186
+ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
187
+ \x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\
188
+ ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\
189
+ o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\
190
+ \xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\
191
+ \x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\
192
+ \x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82'
193
+
194
+ def GetMondrianBitmap():
195
+ return wx.Bitmap(GetMondrianImage())
196
+
197
+ def GetMondrianImage():
198
+ stream = BytesIO(GetMondrianData())
199
+ return wx.Image(stream)
200
+
201
+ def GetMondrianIcon():
202
+ icon = wx.Icon()
203
+ icon.CopyFromBitmap(GetMondrianBitmap())
204
+ return icon
205
+
206
+
207
+ #----------------------------------------------------------------------
208
+ def GetSmilesData():
209
+ return \
210
+ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
211
+ \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
212
+ \x00\x02\x89IDAT8\x8dm\x93\xddK\x93a\x18\xc6\x7f\xef\xc7\xb3\xa6\xc3 aV\xcc\
213
+ \xad\x99\x8d\\\x08\x11AAd\x91\x95\x85F\'\x9dD\x8d\xa8\xe9\xb6X\x87\xe1\x7f\
214
+ \xd0A\xe2y\'\xe6I\x7f@\'!T\x96\'A\x10A\xf4!\xcc\xd1\xb7&DP \xba\xe5\xde\xd7\
215
+ \xed\xea\xc0\xcdF\xf9\xc0u\xf2<\xcf\xc5}\xdf\xd7u\xddX\xb6\xc3\xbfH\xa5.)\
216
+ \x1e\xdf)\xd7\xb5d\x8c\xadD"\xaa\\.\xa3\xcd\xfe\xda4\x9dl&\xad\xceHP\xbd\xbd\
217
+ \x9fx\xf0\xe0\x08\xe5\xf2eJ\xa5\x8b\xdc\xbf\xbf\x9f\xae\xaeGtFj\xcaf\xae\xa9\
218
+ \x99cY\xb6\x03\xc0\xe9S\xc7\x14\x8b\xfd\xe4\xce\x9d\xf3\x18\xe3\x01%`\x05\
219
+ \xa8\x02\x15\xe0#\xbe_ \x9f\xf7\x98\x9f?\xc2\xf4\x93\xe7\x16\xb0\xdeA6\x93V,\
220
+ \x06\x13\x13\xb71&\t\x84\xea\xc4F\xb1U\xa0\x8c1\x16\x13\x13[\x88\xc5\x9e\x91\
221
+ \xcd\\]\x7f\xb4l\x87h\xb4]\x9eW\x90\xf4E\xd2c\x8d\x8e\x8e\n\x90\x94\x92\x94\
222
+ \x12\xa0p8,\xa9UR\x8b<\x0fE;\x91e;\xb8\xd9LZ]]k\x18\xd3\x028@\x8d\xf1\xf1\
223
+ \xf1\xa6)\x97\xe8\xe9\xe9ann\x0eh\x05\xd50\x04\xb9q\xbd\xca\xe7\xf9\x94\xec\
224
+ \x99\x99\x87\x0c\rE\x80E\xe0#\xf0\xba\x89\\\x01\x16YXXh\xba\xabA\xa5\x95\xa1\
225
+ \x93m\xcc\xccLa\x19c\xabT\xba\x891m\xc0*\xc3\xc3\xdf\x99\x9c\xf46\x84\x83\
226
+ \x85\xba\xa0ur\xb5\nK\x1d\xf8\xab\x0e\xa1]\xf3\r\x1b\xbd\xba\xe2\xcbLN\xfa\
227
+ \xc0\x12\xf0\x0e(6\x91\x05Zcwg\x10\xfc\x16\xf0\x83\x00\xd8\xf1x\x84b\xf1\x1b\
228
+ \xf0\x03(\x92L\xbe\x04^\xd4+\xeb/\x19\x1f\xaa6\x9f\xbf/C\xb9\x8d\xe2\x9cE|W\
229
+ \x18\xb7\xbf\xff\x0cSS\xf7\xe8\xed\r\x00\xa2P\x80PH\x94\x1a\x85\xa9\x01kP\
230
+ \xb58\xb8\xaf\r}\x89@y+S\x8f\x7f\xd1\x7f\xfcd\xc3FK\x9e\xd7R\xb7i\xdd*\x05\
231
+ \x83\n\x04\x02r]G\xa1\xa0\xab\xfd\xdd\xed\xd2\xe2^\xa9\xd0\'\xef\xd5\tEw\x04\
232
+ \xb4\x11\xe5\xc1\xc14\xf9\xfc\xeaz\x9b\r\xfc\xf6\xa9\xf8>\xbecq8\xd9\xc1\xeb\
233
+ \xa7QX\x0e\xc3Z\x80\xfc\xad"\x83g\xce\xb1\x11$\xcbv\x18\x18\xe8\xd3\xc8\x08\
234
+ \xf2<$\xd5Q\xb5\xa5\x95m\xd2\xb7\xa4\xf4\xe1\x90\xbc7G5ra\x87\x06\x8e\x1f\
235
+ \xd0\x7f\xcb4\xfd\xe4\xb9\xe58\xc3tw\xc3\xd8\x18\xcc\xce\x82_q\xf0+6\xb3\xef\
236
+ W\x18\xbb\xfb\x95\xee\xb3/p\xb6\xf61\xfd\xec\xad\xb5\x11\x8b\xcdV4\x97K+\x91\
237
+ \xd8.\xe3"\xe3\xa2\xc4\x9e\x0e\xe52W6]\xe7?\xc6#-\xf1\x056\x98<\x00\x00\x00\
238
+ \x00IEND\xaeB`\x82'
239
+
240
+ def GetSmilesBitmap():
241
+ return wx.Bitmap(GetSmilesImage())
242
+
243
+ def GetSmilesImage():
244
+ stream = BytesIO(GetSmilesData())
245
+ return wx.Image(stream)
246
+
247
+
248
+ #-----------------------------------------------------------------------------
249
+ # PATH & FILE FILLING (OS INDEPENDENT)
250
+ #-----------------------------------------------------------------------------
251
+
252
+ def opj(path):
253
+ """Convert paths to the platform-specific separator"""
254
+ str = os.path.join(*tuple(path.split('/')))
255
+ # HACK: on Linux, a leading / gets lost...
256
+ if path.startswith('/'):
257
+ str = '/' + str
258
+ return str
259
+
260
+ #-----------------------------------------------------------------------------
261
+
262
+ #---------------------------------------------------------------------------
263
+ # Just A Dialog To Select Pen Styles
264
+ #---------------------------------------------------------------------------
265
+ class PenDialog(wx.Dialog):
266
+
267
+ def __init__(self, parent=None, id=-1, title="", pos=wx.DefaultPosition,
268
+ size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE, oldpen=None,
269
+ pentype=0):
270
+
271
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
272
+
273
+ self.colourbutton = wx.Button(self, -1, "")
274
+ self.spinwidth = wx.SpinCtrl(self, -1, "1", min=1, max=3, style=wx.SP_ARROW_KEYS)
275
+
276
+ self.combostyle = wx.ComboBox(self, -1, choices=penstyle, style=wx.CB_DROPDOWN|wx.CB_READONLY)
277
+
278
+ choices = ["[1, 1]", "[2, 2]", "[3, 3]", "[4, 4]"]
279
+ self.combodash = wx.ComboBox(self, -1, choices=choices, style=wx.CB_DROPDOWN|wx.CB_READONLY)
280
+
281
+ self.okbutton = wx.Button(self, -1, "Ok")
282
+ self.cancelbutton = wx.Button(self, -1, "Cancel")
283
+
284
+ self.oldpen = oldpen
285
+ self.parent = parent
286
+ self.pentype = pentype
287
+
288
+ self.__set_properties()
289
+ self.__do_layout()
290
+
291
+ self.Bind(wx.EVT_BUTTON, self.OnColour, self.colourbutton)
292
+ self.Bind(wx.EVT_COMBOBOX, self.OnStyle, self.combostyle)
293
+ self.Bind(wx.EVT_BUTTON, self.OnOk, self.okbutton)
294
+ self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelbutton)
295
+
296
+
297
+ def __set_properties(self):
298
+
299
+ self.SetTitle("Pen Dialog Selector")
300
+ self.colourbutton.SetMinSize((25, 25))
301
+ self.colourbutton.SetBackgroundColour(self.oldpen.GetColour())
302
+
303
+ style = self.oldpen.GetStyle()
304
+ for count, st in enumerate(penstyle):
305
+ if eval(st) == style:
306
+ self.combostyle.SetSelection(count)
307
+ if count == 5:
308
+ self.combodash.Enable(True)
309
+ else:
310
+ self.combodash.Enable(False)
311
+ break
312
+
313
+ if self.combodash.IsEnabled():
314
+ dashes = repr(self.oldpen.GetDashes())
315
+ self.combodash.SetValue(dashes)
316
+
317
+ self.spinwidth.SetValue(self.oldpen.GetWidth())
318
+ self.okbutton.SetDefault()
319
+
320
+ if self.pentype == 1:
321
+ self.spinwidth.Enable(False)
322
+
323
+
324
+ def __do_layout(self):
325
+
326
+ mainsizer = wx.BoxSizer(wx.VERTICAL)
327
+ bottomsizer = wx.BoxSizer(wx.HORIZONTAL)
328
+ middlesizer = wx.BoxSizer(wx.VERTICAL)
329
+ stylesizer = wx.BoxSizer(wx.HORIZONTAL)
330
+ widthsizer = wx.BoxSizer(wx.HORIZONTAL)
331
+ coloursizer = wx.BoxSizer(wx.HORIZONTAL)
332
+ label_1 = wx.StaticText(self, -1, "Please Choose The Pen Settings:")
333
+ label_1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
334
+ mainsizer.Add(label_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 10)
335
+ label_2 = wx.StaticText(self, -1, "Pen Colour")
336
+ coloursizer.Add(label_2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
337
+ coloursizer.Add((5, 5), 1, wx.ADJUST_MINSIZE, 0)
338
+ coloursizer.Add(self.colourbutton, 0, wx.ALL|wx.ADJUST_MINSIZE, 5)
339
+ middlesizer.Add(coloursizer, 0, wx.EXPAND, 0)
340
+ label_3 = wx.StaticText(self, -1, "Pen Width")
341
+ widthsizer.Add(label_3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
342
+ widthsizer.Add((5, 5), 1, wx.ADJUST_MINSIZE, 0)
343
+ widthsizer.Add(self.spinwidth, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
344
+ middlesizer.Add(widthsizer, 0, wx.EXPAND, 0)
345
+ label_4 = wx.StaticText(self, -1, "Pen Style")
346
+ stylesizer.Add(label_4, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
347
+ stylesizer.Add((5, 5), 1, wx.ADJUST_MINSIZE, 0)
348
+ stylesizer.Add(self.combostyle, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
349
+ stylesizer.Add(self.combodash, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
350
+ middlesizer.Add(stylesizer, 0, wx.BOTTOM|wx.EXPAND, 5)
351
+ mainsizer.Add(middlesizer, 1, wx.EXPAND, 0)
352
+ bottomsizer.Add(self.okbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
353
+ bottomsizer.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
354
+ bottomsizer.Add(self.cancelbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
355
+ mainsizer.Add(bottomsizer, 0, wx.EXPAND, 0)
356
+ self.SetAutoLayout(True)
357
+ self.SetSizer(mainsizer)
358
+ mainsizer.Fit(self)
359
+ mainsizer.SetSizeHints(self)
360
+ self.Layout()
361
+ self.Centre()
362
+
363
+
364
+ def OnColour(self, event):
365
+
366
+ obj = event.GetEventObject()
367
+ old = obj.GetBackgroundColour()
368
+ colourdata = wx.ColourData()
369
+ colourdata.SetColour(old)
370
+ dlg = wx.ColourDialog(self, colourdata)
371
+
372
+ dlg.GetColourData().SetChooseFull(True)
373
+
374
+ if dlg.ShowModal() == wx.ID_OK:
375
+
376
+ # If the user selected OK, then the dialog's wx.ColourData will
377
+ # contain valid information. Fetch the data ...
378
+ data = dlg.GetColourData()
379
+
380
+ # ... then do something with it. The actual colour data will be
381
+ # returned as a three-tuple (r, g, b) in this particular case.
382
+ col1 = data.GetColour().Get()
383
+ obj.SetBackgroundColour(col1)
384
+ # Once the dialog is destroyed, Mr. wx.ColourData is no longer your
385
+ # friend. Don't use it again!
386
+ dlg.Destroy()
387
+
388
+ event.Skip()
389
+
390
+
391
+ def OnStyle(self, event):
392
+
393
+ choice = event.GetEventObject().GetValue()
394
+ self.combodash.Enable(choice==5)
395
+ event.Skip()
396
+
397
+
398
+ def OnOk(self, event):
399
+
400
+ colour = self.colourbutton.GetBackgroundColour()
401
+ style = eval(self.combostyle.GetValue())
402
+ width = int(self.spinwidth.GetValue())
403
+
404
+ dashes = None
405
+ if self.combostyle.GetSelection() == 5:
406
+ dashes = eval(self.combodash.GetValue())
407
+
408
+ pen = wx.Pen(colour, width, style)
409
+
410
+ if dashes:
411
+ pen.SetDashes(dashes)
412
+
413
+ pen.SetCap(wx.CAP_BUTT)
414
+
415
+ if self.pentype == 0:
416
+ self.parent.SetConnectionPen(pen)
417
+ else:
418
+ self.parent.SetBorderPen(pen)
419
+
420
+ self.EndModal(wx.ID_OK)
421
+
422
+
423
+ def OnCancel(self, event):
424
+ self.EndModal(wx.ID_CANCEL)
425
+
426
+
427
+ #---------------------------------------------------------------------------
428
+ # Just A Dialog To Select Tree Buttons Icons
429
+ #---------------------------------------------------------------------------
430
+ class TreeDialog(wx.Dialog):
431
+
432
+ def __init__(self, parent=None, id=-1, title="", pos=wx.DefaultPosition,
433
+ size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE, oldicons=None):
434
+
435
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
436
+
437
+ self.listicons = wx.ListBox(self, -1, choices=["Set 1", "Set 2", "Set 3", "Set 4", "Set 5"], style=wx.LB_SINGLE)
438
+
439
+ bitmap_plus = opj(bitmapDir + "plus" + str(oldicons+1) + ".ico")
440
+ bitmap_minus = opj(bitmapDir+ "minus" + str(oldicons+1) + ".ico")
441
+
442
+ bitmap_plus = wx.Image(bitmap_plus, wx.BITMAP_TYPE_ICO)
443
+ bitmap_plus.Rescale(24, 24)
444
+ bitmap_plus = bitmap_plus.ConvertToBitmap()
445
+ bitmap_minus = wx.Image(bitmap_minus, wx.BITMAP_TYPE_ICO)
446
+ bitmap_minus.Rescale(24, 24)
447
+ bitmap_minus = bitmap_minus.ConvertToBitmap()
448
+
449
+ self.bitmap_plus = wx.StaticBitmap(self, -1, bitmap_plus)
450
+ self.bitmap_minus = wx.StaticBitmap(self, -1, bitmap_minus)
451
+
452
+ self.okbutton = wx.Button(self, -1, "Ok")
453
+ self.cancelbutton = wx.Button(self, -1, "Cancel")
454
+
455
+ self.parent = parent
456
+
457
+ self.__set_properties()
458
+ self.__do_layout()
459
+
460
+ self.Bind(wx.EVT_BUTTON, self.OnOk, self.okbutton)
461
+ self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelbutton)
462
+ self.Bind(wx.EVT_LISTBOX, self.OnListBox, self.listicons)
463
+
464
+
465
+ def __set_properties(self):
466
+
467
+ self.SetTitle("Tree Buttons Selector")
468
+ self.listicons.SetSelection(0)
469
+ self.okbutton.SetDefault()
470
+
471
+
472
+ def __do_layout(self):
473
+
474
+ mainsizer = wx.BoxSizer(wx.VERTICAL)
475
+ bottomsizer = wx.BoxSizer(wx.HORIZONTAL)
476
+ topsizer = wx.BoxSizer(wx.HORIZONTAL)
477
+ rightsizer = wx.BoxSizer(wx.VERTICAL)
478
+ sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
479
+ sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
480
+ label_1 = wx.StaticText(self, -1, "Please Choose One Of These Sets Of Icons:")
481
+ label_1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
482
+ mainsizer.Add(label_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 10)
483
+ topsizer.Add(self.listicons, 0, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 5)
484
+ label_2 = wx.StaticText(self, -1, "Collapsed")
485
+ sizer_1.Add(label_2, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
486
+ sizer_1.Add((20, 20), 1, wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0)
487
+ sizer_1.Add(self.bitmap_plus, 1, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
488
+ rightsizer.Add(sizer_1, 0, wx.EXPAND, 0)
489
+ label_3 = wx.StaticText(self, -1, "Expanded")
490
+ sizer_2.Add(label_3, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
491
+ sizer_2.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
492
+ sizer_2.Add(self.bitmap_minus, 1, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
493
+ rightsizer.Add(sizer_2, 0, wx.EXPAND, 0)
494
+ topsizer.Add(rightsizer, 0, wx.ALL|wx.EXPAND, 5)
495
+ mainsizer.Add(topsizer, 1, wx.EXPAND, 0)
496
+ bottomsizer.Add(self.okbutton, 0, wx.ALL|wx.ADJUST_MINSIZE, 20)
497
+ bottomsizer.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
498
+ bottomsizer.Add(self.cancelbutton, 0, wx.ALL|wx.ADJUST_MINSIZE, 20)
499
+ mainsizer.Add(bottomsizer, 0, wx.EXPAND, 0)
500
+ self.SetAutoLayout(True)
501
+ self.SetSizer(mainsizer)
502
+ mainsizer.Fit(self)
503
+ mainsizer.SetSizeHints(self)
504
+ self.Layout()
505
+
506
+
507
+ def OnListBox(self, event):
508
+
509
+ selection = self.listicons.GetSelection()
510
+ bitmap_plus = opj(bitmapDir + "plus" + str(selection+1) + ".ico")
511
+ bitmap_minus = opj(bitmapDir+ "minus" + str(selection+1) + ".ico")
512
+
513
+ bitmap_plus = wx.Image(bitmap_plus, wx.BITMAP_TYPE_ICO)
514
+ bitmap_plus.Rescale(24, 24)
515
+ bitmap_plus = bitmap_plus.ConvertToBitmap()
516
+ bitmap_minus = wx.Image(bitmap_minus, wx.BITMAP_TYPE_ICO)
517
+ bitmap_minus.Rescale(24, 24)
518
+ bitmap_minus = bitmap_minus.ConvertToBitmap()
519
+
520
+ self.bitmap_plus.SetBitmap(bitmap_plus)
521
+ self.bitmap_minus.SetBitmap(bitmap_minus)
522
+
523
+ self.bitmap_plus.Refresh()
524
+ self.bitmap_minus.Refresh()
525
+ event.Skip()
526
+
527
+
528
+ def OnOk(self, event):
529
+
530
+ selection = self.listicons.GetSelection()
531
+ self.parent.SetTreeButtons(selection)
532
+ self.EndModal(wx.ID_OK)
533
+
534
+
535
+ def OnCancel(self, event):
536
+ self.EndModal(wx.ID_CANCEL)
537
+
538
+
539
+ #---------------------------------------------------------------------------
540
+ # Just A Dialog To Select Tree Check/Radio Item Icons
541
+ #---------------------------------------------------------------------------
542
+ class CheckDialog(wx.Dialog):
543
+
544
+ def __init__(self, parent=None, id=-1, title="", pos=wx.DefaultPosition,
545
+ size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE):
546
+
547
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
548
+
549
+ self.listicons = wx.ListBox(self, -1, choices=["Set 1", "Set 2"], style=wx.LB_SINGLE)
550
+
551
+ bitmap_check = wx.Bitmap(opj(bitmapDir+ "checked.ico"), wx.BITMAP_TYPE_ICO)
552
+ bitmap_uncheck = wx.Bitmap(opj(bitmapDir+ "notchecked.ico"), wx.BITMAP_TYPE_ICO)
553
+ bitmap_flag = wx.Bitmap(opj(bitmapDir+ "flagged.ico"), wx.BITMAP_TYPE_ICO)
554
+ bitmap_unflag = wx.Bitmap(opj(bitmapDir+ "notflagged.ico"), wx.BITMAP_TYPE_ICO)
555
+
556
+ self.bitmap_check = wx.StaticBitmap(self, -1, bitmap_check)
557
+ self.bitmap_uncheck = wx.StaticBitmap(self, -1, bitmap_uncheck)
558
+ self.bitmap_flag = wx.StaticBitmap(self, -1, bitmap_flag)
559
+ self.bitmap_unflag = wx.StaticBitmap(self, -1, bitmap_unflag)
560
+
561
+ self.okbutton = wx.Button(self, -1, "Ok")
562
+ self.cancelbutton = wx.Button(self, -1, "Cancel")
563
+
564
+ self.parent = parent
565
+
566
+ self.__set_properties()
567
+ self.__do_layout()
568
+
569
+ self.Bind(wx.EVT_BUTTON, self.OnOk, self.okbutton)
570
+ self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelbutton)
571
+ self.Bind(wx.EVT_LISTBOX, self.OnListBox, self.listicons)
572
+
573
+
574
+ def __set_properties(self):
575
+
576
+ self.SetTitle("Check/Radio Icon Selector")
577
+ self.listicons.SetSelection(0)
578
+ self.okbutton.SetDefault()
579
+
580
+
581
+ def __do_layout(self):
582
+
583
+ mainsizer = wx.BoxSizer(wx.VERTICAL)
584
+ bottomsizer = wx.BoxSizer(wx.HORIZONTAL)
585
+ topsizer = wx.BoxSizer(wx.HORIZONTAL)
586
+ rightsizer = wx.BoxSizer(wx.VERTICAL)
587
+ sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
588
+ sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
589
+ sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
590
+ sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
591
+ label_1 = wx.StaticText(self, -1, "Please Choose One Of These Sets Of Icons:")
592
+ label_1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
593
+ mainsizer.Add(label_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 10)
594
+ topsizer.Add(self.listicons, 0, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 5)
595
+ label_2 = wx.StaticText(self, -1, "Checked")
596
+ sizer_1.Add(label_2, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
597
+ sizer_1.Add((20, 20), 1, wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0)
598
+ sizer_1.Add(self.bitmap_check, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
599
+ rightsizer.Add(sizer_1, 0, wx.EXPAND, 0)
600
+ label_3 = wx.StaticText(self, -1, "Not Checked")
601
+ sizer_2.Add(label_3, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
602
+ sizer_2.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
603
+ sizer_2.Add(self.bitmap_uncheck, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
604
+ rightsizer.Add(sizer_2, 0, wx.EXPAND, 0)
605
+ label_4 = wx.StaticText(self, -1, "Flagged")
606
+ sizer_3.Add(label_4, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
607
+ sizer_3.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
608
+ sizer_3.Add(self.bitmap_flag, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
609
+ rightsizer.Add(sizer_3, 0, wx.EXPAND, 0)
610
+ label_5 = wx.StaticText(self, -1, "Not Flagged")
611
+ sizer_4.Add(label_5, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
612
+ sizer_4.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
613
+ sizer_4.Add(self.bitmap_unflag, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 10)
614
+ rightsizer.Add(sizer_4, 0, wx.EXPAND, 0)
615
+
616
+ topsizer.Add(rightsizer, 0, wx.ALL|wx.EXPAND, 5)
617
+ mainsizer.Add(topsizer, 1, wx.EXPAND, 0)
618
+ bottomsizer.Add(self.okbutton, 0, wx.ALL|wx.ADJUST_MINSIZE, 20)
619
+ bottomsizer.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
620
+ bottomsizer.Add(self.cancelbutton, 0, wx.ALL|wx.ADJUST_MINSIZE, 20)
621
+ mainsizer.Add(bottomsizer, 0, wx.EXPAND, 0)
622
+ self.SetAutoLayout(True)
623
+ self.SetSizer(mainsizer)
624
+ mainsizer.Fit(self)
625
+ mainsizer.SetSizeHints(self)
626
+ self.Layout()
627
+
628
+
629
+ def OnListBox(self, event):
630
+
631
+ selection = self.listicons.GetSelection()
632
+
633
+ if selection == 0:
634
+ bitmap_check = opj(bitmapDir + "checked.ico")
635
+ bitmap_uncheck = opj(bitmapDir + "notchecked.ico")
636
+ bitmap_flag = opj(bitmapDir + "flagged.ico")
637
+ bitmap_unflag = opj(bitmapDir + "notflagged.ico")
638
+ else:
639
+ bitmap_check = opj(bitmapDir + "aquachecked.ico")
640
+ bitmap_uncheck = opj(bitmapDir + "aquanotchecked.ico")
641
+ bitmap_flag = opj(bitmapDir + "aquaflagged.ico")
642
+ bitmap_unflag = opj(bitmapDir + "aquanotflagged.ico")
643
+
644
+ bitmap_check = wx.Bitmap(bitmap_check, wx.BITMAP_TYPE_ICO)
645
+ bitmap_uncheck = wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO)
646
+ bitmap_flag = wx.Bitmap(bitmap_flag, wx.BITMAP_TYPE_ICO)
647
+ bitmap_unflag = wx.Bitmap(bitmap_unflag, wx.BITMAP_TYPE_ICO)
648
+
649
+ self.bitmap_uncheck.SetBitmap(bitmap_uncheck)
650
+ self.bitmap_check.SetBitmap(bitmap_check)
651
+ self.bitmap_unflag.SetBitmap(bitmap_unflag)
652
+ self.bitmap_flag.SetBitmap(bitmap_flag)
653
+
654
+ self.bitmap_check.Refresh()
655
+ self.bitmap_uncheck.Refresh()
656
+ self.bitmap_flag.Refresh()
657
+ self.bitmap_unflag.Refresh()
658
+
659
+ event.Skip()
660
+
661
+
662
+ def OnOk(self, event):
663
+
664
+ selection = self.listicons.GetSelection()
665
+ self.parent.SetCheckRadio(selection)
666
+ self.EndModal(wx.ID_OK)
667
+
668
+
669
+ def OnCancel(self, event):
670
+ self.EndModal(wx.ID_CANCEL)
671
+
672
+
673
+ #---------------------------------------------------------------------------
674
+ # Just A Dialog To Select Tree Items Icons
675
+ #---------------------------------------------------------------------------
676
+ class TreeIcons(wx.Dialog):
677
+
678
+ def __init__(self, parent=None, id=-1, title="", pos=wx.DefaultPosition,
679
+ size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE, oldpen=None,
680
+ bitmaps=None):
681
+
682
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
683
+
684
+ self.bitmaps = [None, None, None, None]
685
+ empty = wx.Bitmap(16, 16)
686
+ self.parent = parent
687
+
688
+ self.bitmaps[0] = wx.StaticBitmap(self, -1, empty)
689
+ self.combonormal = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
690
+ self.bitmaps[1] = wx.StaticBitmap(self, -1, empty)
691
+ self.comboselected = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
692
+ self.bitmaps[2] = wx.StaticBitmap(self, -1, empty)
693
+ self.comboexpanded = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
694
+ self.bitmaps[3] = wx.StaticBitmap(self, -1, empty)
695
+ self.comboselectedexpanded = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
696
+ self.okbutton = wx.Button(self, -1, "Ok")
697
+ self.cancelbutton = wx.Button(self, -1, "Cancel")
698
+
699
+ self.combonormal.SetSelection(bitmaps[0] >= 0 and bitmaps[0]+1 or 0)
700
+ self.comboselected.SetSelection(bitmaps[1] >= 0 and bitmaps[1]+1 or 0)
701
+ self.comboexpanded.SetSelection(bitmaps[2] >= 0 and bitmaps[2]+1 or 0)
702
+ self.comboselectedexpanded.SetSelection(bitmaps[3] >= 0 and bitmaps[3]+1 or 0)
703
+
704
+ self.GetBitmaps(bitmaps)
705
+
706
+ self.__set_properties()
707
+ self.__do_layout()
708
+
709
+ self.Bind(wx.EVT_COMBOBOX, self.OnComboNormal, self.combonormal)
710
+ self.Bind(wx.EVT_COMBOBOX, self.OnComboSelected, self.comboselected)
711
+ self.Bind(wx.EVT_COMBOBOX, self.OnComboExpanded, self.comboexpanded)
712
+ self.Bind(wx.EVT_COMBOBOX, self.OnComboSelectedExpanded, self.comboselectedexpanded)
713
+ self.Bind(wx.EVT_BUTTON, self.OnOk, self.okbutton)
714
+ self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelbutton)
715
+
716
+
717
+ def __set_properties(self):
718
+
719
+ self.SetTitle("Item Icon Selector")
720
+ self.okbutton.SetDefault()
721
+
722
+
723
+ def __do_layout(self):
724
+
725
+ mainsizer = wx.BoxSizer(wx.VERTICAL)
726
+ sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
727
+ gridsizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
728
+ label_1 = wx.StaticText(self, -1, "Please Choose The Icons For This Item (All Are Optional):")
729
+ label_1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
730
+ mainsizer.Add(label_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 10)
731
+ label_2 = wx.StaticText(self, -1, "TreeIcon_Normal:")
732
+ gridsizer.Add(label_2, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
733
+ gridsizer.Add(self.bitmaps[0], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
734
+ gridsizer.Add(self.combonormal, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
735
+ label_3 = wx.StaticText(self, -1, "TreeIcon_Selected:")
736
+ gridsizer.Add(label_3, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
737
+ gridsizer.Add(self.bitmaps[1], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
738
+ gridsizer.Add(self.comboselected, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
739
+ label_4 = wx.StaticText(self, -1, "TreeIcon_Expanded:")
740
+ gridsizer.Add(label_4, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
741
+ gridsizer.Add(self.bitmaps[2], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
742
+ gridsizer.Add(self.comboexpanded, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
743
+ label_5 = wx.StaticText(self, -1, "TreeIcon_SelectedExpanded:")
744
+ gridsizer.Add(label_5, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
745
+ gridsizer.Add(self.bitmaps[3], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
746
+ gridsizer.Add(self.comboselectedexpanded, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
747
+ gridsizer.AddGrowableCol(0)
748
+ gridsizer.AddGrowableCol(1)
749
+ gridsizer.AddGrowableCol(2)
750
+ mainsizer.Add(gridsizer, 0, wx.ALL|wx.EXPAND, 5)
751
+ sizer_2.Add(self.okbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
752
+ sizer_2.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
753
+ sizer_2.Add(self.cancelbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
754
+ mainsizer.Add(sizer_2, 1, wx.EXPAND, 0)
755
+ self.SetAutoLayout(True)
756
+ self.SetSizer(mainsizer)
757
+ mainsizer.Fit(self)
758
+ mainsizer.SetSizeHints(self)
759
+ self.Layout()
760
+ self.Centre()
761
+
762
+
763
+ def OnComboNormal(self, event):
764
+
765
+ input = event.GetSelection()
766
+ self.GetBitmap(input, 0)
767
+ event.Skip()
768
+
769
+
770
+ def OnComboSelected(self, event):
771
+
772
+ input = event.GetSelection()
773
+ self.GetBitmap(input, 1)
774
+ event.Skip()
775
+
776
+
777
+ def OnComboExpanded(self, event):
778
+
779
+ input = event.GetSelection()
780
+ self.GetBitmap(input, 2)
781
+ event.Skip()
782
+
783
+
784
+ def OnComboSelectedExpanded(self, event):
785
+
786
+ input = event.GetSelection()
787
+ self.GetBitmap(input, 3)
788
+ event.Skip()
789
+
790
+
791
+ def OnOk(self, event):
792
+
793
+ bitmaps = [-1, -1, -1, -1]
794
+ normal = self.combonormal.GetSelection()
795
+ selected = self.comboselected.GetSelection()
796
+ expanded = self.comboexpanded.GetSelection()
797
+ selexp = self.comboselectedexpanded.GetSelection()
798
+
799
+ bitmaps = [(normal > 0 and normal or -1), (selected > 0 and selected or -1),
800
+ (expanded > 0 and expanded or -1), (selexp > 0 and selexp or -1)]
801
+
802
+ newbitmaps = []
803
+
804
+ for bmp in bitmaps:
805
+ if bmp > 0:
806
+ newbitmaps.append(bmp-1)
807
+ else:
808
+ newbitmaps.append(bmp)
809
+
810
+ self.parent.SetNewIcons(newbitmaps)
811
+
812
+ self.EndModal(wx.ID_OK)
813
+
814
+
815
+ def OnCancel(self, event):
816
+ self.EndModal(wx.ID_CANCEL)
817
+
818
+
819
+ def GetBitmap(self, input, which):
820
+
821
+ if input == 0:
822
+ bmp = wx.Bitmap(16,16)
823
+ self.ClearBmp(bmp)
824
+ elif input > 36:
825
+ bmp = GetSmilesBitmap()
826
+ else:
827
+ bmp = wx.ArtProvider.GetBitmap(eval(ArtIDs[input]), wx.ART_OTHER, (16,16))
828
+ if not bmp.IsOk():
829
+ bmp = wx.Bitmap(16,16)
830
+ self.ClearBmp(bmp)
831
+
832
+ self.bitmaps[which].SetBitmap(bmp)
833
+ self.bitmaps[which].Refresh()
834
+
835
+
836
+ def GetBitmaps(self, bitmaps):
837
+
838
+ output = []
839
+
840
+ for count, input in enumerate(bitmaps):
841
+ if input < 0:
842
+ bmp = wx.Bitmap(16,16)
843
+ self.ClearBmp(bmp)
844
+ elif input > 35:
845
+ bmp = GetSmilesBitmap()
846
+ else:
847
+ bmp = wx.ArtProvider.GetBitmap(eval(ArtIDs[input+1]), wx.ART_OTHER, (16,16))
848
+ if not bmp.IsOk():
849
+ bmp = wx.Bitmap(16,16)
850
+ self.ClearBmp(bmp)
851
+
852
+ self.bitmaps[count].SetBitmap(bmp)
853
+
854
+
855
+ def ClearBmp(self, bmp):
856
+
857
+ dc = wx.MemoryDC()
858
+ dc.SelectObject(bmp)
859
+ dc.SetBackground(wx.Brush("white"))
860
+ dc.Clear()
861
+
862
+
863
+ #---------------------------------------------------------------------------
864
+ # Custom Renderer for the column headers
865
+ #---------------------------------------------------------------------------
866
+ class HyperTreeHeaderRenderer(object):
867
+ """
868
+ Draws the column headers as a solid color (self.color)
869
+ """
870
+
871
+ def __init__(self, parent):
872
+ self.color = wx.Colour(150,150,150)
873
+
874
+ def DrawTextFormatted(self, dc, text, rect):
875
+ """
876
+ Draws the item text, correctly formatted.
877
+
878
+ :param `dc`: an instance of `wx.DC`;
879
+ :param `text`: the item text;
880
+ :param `rect`: the item client rectangle.
881
+ """
882
+
883
+ # determine if the string can fit inside the current width
884
+ w, h, dummy = dc.GetFullMultiLineTextExtent(text)
885
+ width = rect.width
886
+
887
+ if w <= width:
888
+
889
+ dc.DrawLabel(text, rect, wx.ALIGN_CENTER_VERTICAL)
890
+
891
+ else:
892
+
893
+ # determine the base width
894
+ ellipsis = "..."
895
+ base_w, h = dc.GetTextExtent(ellipsis)
896
+
897
+ # continue until we have enough space or only one character left
898
+
899
+ newText = text.split("\n")
900
+ theText = ""
901
+
902
+ for text in newText:
903
+
904
+ lenText = len(text)
905
+ drawntext = text
906
+ w, dummy = dc.GetTextExtent(text)
907
+
908
+ while lenText > 1:
909
+
910
+ if w + base_w <= width:
911
+ break
912
+
913
+ w_c, h_c = dc.GetTextExtent(drawntext[-1])
914
+ drawntext = drawntext[0:-1]
915
+ lenText -= 1
916
+ w -= w_c
917
+
918
+ # if still not enough space, remove ellipsis characters
919
+ while len(ellipsis) > 0 and w + base_w > width:
920
+ ellipsis = ellipsis[0:-1]
921
+ base_w, h = dc.GetTextExtent(ellipsis)
922
+
923
+ theText += drawntext + ellipsis + "\n"
924
+
925
+ theText = theText.rstrip()
926
+ dc.DrawLabel(theText, rect, wx.ALIGN_CENTER_VERTICAL)
927
+
928
+
929
+
930
+ def DrawHeaderButton(self, dc, rect, flags=0, params=None):
931
+
932
+ if params is not None:
933
+ text_align = params.m_labelAlignment
934
+ bitmap = params.m_labelBitmap
935
+ text_color = params.m_labelColour
936
+ text_font = params.m_labelFont
937
+ text = params.m_labelText
938
+
939
+ color = self.color
940
+
941
+ if flags & wx.CONTROL_DISABLED:
942
+ color = wx.Colour(wx.WHITE)
943
+ elif flags & wx.CONTROL_SELECTED:
944
+ color = wx.Colour(wx.BLUE)
945
+ if flags & wx.CONTROL_PRESSED:
946
+ self._pressed = True
947
+ color = cutils.AdjustColour(color,-30)
948
+ elif flags & wx.CONTROL_CURRENT:
949
+ self._hover = True
950
+ color = cutils.AdjustColour(color,50)
951
+
952
+ # Draw a solid background in self.color
953
+ dc.SetBrush(wx.Brush(color, wx.BRUSHSTYLE_SOLID))
954
+ dc.SetBackgroundMode(wx.SOLID)
955
+ dc.SetPen(wx.TRANSPARENT_PEN)
956
+ dc.DrawRectangle(rect)
957
+
958
+ # Draw the column divider on the right
959
+ x = rect.width + rect.x - 2
960
+ dc.SetPen(wx.Pen(cutils.AdjustColour(color,-30)))
961
+ dc.DrawLine(x,2,x,rect.height-2)
962
+ x += 1
963
+ dc.SetPen(wx.Pen(cutils.AdjustColour(color,30)))
964
+ dc.DrawLine(x,2,x,rect.height-2)
965
+
966
+ dc.SetBackgroundMode(wx.TRANSPARENT)
967
+
968
+ if params is None:
969
+ return
970
+
971
+ # We need to draw the text and/or icon bitmap
972
+ dc.SetFont(text_font)
973
+ dc.SetTextForeground(text_color)
974
+
975
+ # Determine the width of the text
976
+ wLabel, hLabel, dummy = dc.GetFullMultiLineTextExtent(text)
977
+ wLabel += 4 # 2 pixel margin either side
978
+
979
+ # and the width of the icon, if any
980
+ if bitmap:
981
+ wLabel += bitmap.GetWidth() + 2 # 2 is a margin between the image and text
982
+
983
+ # ALIGN_LEFT if the label is larger than the available space
984
+ text_align = (wLabel < rect.width and [text_align] or [wx.ALIGN_LEFT])[0]
985
+
986
+ x = rect.x + 2
987
+
988
+ if text_align == wx.ALIGN_LEFT:
989
+ xAligned = x
990
+
991
+ elif text_align == wx.ALIGN_RIGHT:
992
+ xAligned = x + rect.width - wLabel - 1
993
+
994
+ elif text_align == wx.ALIGN_CENTER:
995
+ xAligned = x + (rect.width - wLabel)/2
996
+
997
+ if bitmap:
998
+ dc.DrawBitmap(bitmap, xAligned + wLabel - bitmap.GetWidth() , 2, True)
999
+
1000
+ dc.SetClippingRegion(x, 1, rect.width-2, rect.height - 2)
1001
+ self.DrawTextFormatted(dc, text, wx.Rect(xAligned+2, 1, rect.width-2, rect.height-2))
1002
+ dc.DestroyClippingRegion()
1003
+
1004
+
1005
+
1006
+
1007
+ #---------------------------------------------------------------------------
1008
+ # HyperTreeList Demo Implementation
1009
+ #---------------------------------------------------------------------------
1010
+ class HyperTreeListDemo(wx.Frame):
1011
+
1012
+ def __init__(self, parent, log):
1013
+
1014
+ wx.Frame.__init__(self, parent)
1015
+
1016
+ self.SetMinSize((640, 480))
1017
+ self.SetIcon(images.Mondrian.GetIcon())
1018
+ self.SetTitle("HyperTreeList wxPython Demo ;-)")
1019
+
1020
+ self.CenterOnParent()
1021
+
1022
+ statusbar = self.CreateStatusBar(2)
1023
+ statusbar.SetStatusWidths([-2, -1])
1024
+ # statusbar fields
1025
+ statusbar_fields = [("HyperTreeList Demo, Andrea Gavana @ 08 May 2007"),
1026
+ ("Welcome To wxPython!")]
1027
+
1028
+ for i in range(len(statusbar_fields)):
1029
+ statusbar.SetStatusText(statusbar_fields[i], i)
1030
+
1031
+ self.CreateMenuBar()
1032
+
1033
+ self.oldicons = 0
1034
+
1035
+ splitter = wx.SplitterWindow(self, -1, style=wx.CLIP_CHILDREN | wx.SP_LIVE_UPDATE | wx.SP_3D)
1036
+ panel = wx.Panel(splitter, -1, style=wx.WANTS_CHARS)
1037
+
1038
+ # Set up a log window
1039
+ self.log = log
1040
+
1041
+ sizer = wx.BoxSizer(wx.VERTICAL)
1042
+ # Create the HyperTreeList
1043
+ self.tree = HyperTreeList(panel, -1, log=self.log)
1044
+
1045
+ sizer.Add(self.tree, 1, wx.EXPAND)
1046
+ panel.SetSizer(sizer)
1047
+ sizer.Layout()
1048
+
1049
+ self.columnBackgroundColours = [wx.LIGHT_GREY for i in range(self.tree.GetColumnCount())]
1050
+
1051
+
1052
+ self.leftpanel = wx.ScrolledWindow(splitter, -1, style=wx.SUNKEN_BORDER)
1053
+ self.PopulateLeftPanel(self.tree.styles, self.tree.events)
1054
+
1055
+ splitter.SplitVertically(self.leftpanel, panel, 300)
1056
+
1057
+ splitter.SetMinimumPaneSize(120)
1058
+ #self.leftpanel.SetBackgroundColour(wx.WHITE)
1059
+ self.leftpanel.SetScrollRate(20, 20)
1060
+
1061
+ self.Fit()
1062
+
1063
+
1064
+ def CreateMenuBar(self):
1065
+
1066
+ file_menu = wx.Menu()
1067
+
1068
+ AS_EXIT = wx.NewIdRef()
1069
+ file_menu.Append(AS_EXIT, "&Exit")
1070
+ self.Bind(wx.EVT_MENU, self.OnClose, id=AS_EXIT)
1071
+
1072
+ help_menu = wx.Menu()
1073
+
1074
+ AS_ABOUT = wx.NewIdRef()
1075
+ help_menu.Append(AS_ABOUT, "&About...")
1076
+ self.Bind(wx.EVT_MENU, self.OnAbout, id=AS_ABOUT)
1077
+
1078
+ menu_bar = wx.MenuBar()
1079
+
1080
+ menu_bar.Append(file_menu, "&File")
1081
+ menu_bar.Append(help_menu, "&Help")
1082
+
1083
+ self.SetMenuBar(menu_bar)
1084
+
1085
+
1086
+ def OnClose(self, event):
1087
+
1088
+ self.Destroy()
1089
+
1090
+
1091
+ def OnAbout(self, event):
1092
+
1093
+ msg = "This Is The About Dialog Of The HyperTreeList Demo.\n\n" + \
1094
+ "Author: Andrea Gavana @ 08 May 2007\n\n" + \
1095
+ "Please Report Any Bug/Requests Of Improvements\n" + \
1096
+ "To Me At The Following AdresAddresseses:\n\n" + \
1097
+ "andrea.gavana@maerskoil.com\n" + "andrea.gavana@gmail.com\n\n" + \
1098
+ "Welcome To wxPython " + wx.VERSION_STRING + "!!"
1099
+
1100
+ dlg = wx.MessageDialog(self, msg, "HyperTreeList Demo",
1101
+ wx.OK | wx.ICON_INFORMATION)
1102
+
1103
+ if wx.Platform != '__WXMAC__':
1104
+ dlg.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False))
1105
+
1106
+ dlg.ShowModal()
1107
+ dlg.Destroy()
1108
+
1109
+
1110
+ def PopulateLeftPanel(self, styles, events):
1111
+
1112
+ mainsizer = wx.BoxSizer(wx.VERTICAL)
1113
+ recreatetree = wx.Button(self.leftpanel, -1, "Recreate HyperTreeList")
1114
+ mainsizer.Add(recreatetree, 0, wx.ALL|wx.ALIGN_CENTER, 10)
1115
+ recreatetree.Bind(wx.EVT_BUTTON, self.OnRecreateTree)
1116
+
1117
+ staticboxstyles = wx.StaticBox(self.leftpanel, -1, "HyperTreeList Styles")
1118
+ stylesizer = wx.StaticBoxSizer(staticboxstyles, wx.VERTICAL)
1119
+ staticboxcolumns = wx.StaticBox(self.leftpanel, -1, "HyperTreeList Columns")
1120
+ columnssizer = wx.StaticBoxSizer(staticboxcolumns, wx.VERTICAL)
1121
+ staticboxevents = wx.StaticBox(self.leftpanel, -1, "HyperTreeList Events")
1122
+ eventssizer = wx.StaticBoxSizer(staticboxevents, wx.VERTICAL)
1123
+ staticboxcolours = wx.StaticBox(self.leftpanel, -1, "HyperTreeList Images/Colours")
1124
+ colourssizer = wx.StaticBoxSizer(staticboxcolours, wx.VERTICAL)
1125
+ staticboxthemes = wx.StaticBox(self.leftpanel, -1, "HyperTreeList Themes/Gradients")
1126
+ themessizer = wx.StaticBoxSizer(staticboxthemes, wx.VERTICAL)
1127
+
1128
+ self.treestyles = []
1129
+ self.treeevents = []
1130
+
1131
+ for count, style in enumerate(styles):
1132
+
1133
+ if count == 0:
1134
+ tags = wx.ALL
1135
+ else:
1136
+ tags = wx.LEFT|wx.RIGHT|wx.BOTTOM
1137
+
1138
+ if style != "TR_DEFAULT_STYLE":
1139
+ check = wx.CheckBox(self.leftpanel, -1, style)
1140
+ stylesizer.Add(check, 0, tags, 3)
1141
+
1142
+ if style in ["TR_HAS_BUTTONS", "TR_HAS_VARIABLE_ROW_HEIGHT"]:
1143
+ check.SetValue(1)
1144
+
1145
+ if style == "TR_HAS_VARIABLE_ROW_HEIGHT":
1146
+ check.Enable(False)
1147
+
1148
+ check.Bind(wx.EVT_CHECKBOX, self.OnCheckStyle)
1149
+ self.treestyles.append(check)
1150
+
1151
+ flexgridcolumn = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
1152
+ flexgridcolumn.AddGrowableCol(0)
1153
+ label = wx.StaticText(self.leftpanel, -1, "Text Font")
1154
+ label.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1155
+ self.buttonfont = wx.Button(self.leftpanel, -1, "Choose...")
1156
+ self.buttonfont.Bind(wx.EVT_BUTTON, self.OnColumnFont)
1157
+ flexgridcolumn.Add(label, 0, wx.ALIGN_CENTER_VERTICAL)
1158
+ flexgridcolumn.Add(self.buttonfont, 0)
1159
+
1160
+ label = wx.StaticText(self.leftpanel, -1, "Text Colour")
1161
+ label.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1162
+ self.columncolour = csel.ColourSelect(self.leftpanel, -1, "Choose...", wx.BLACK)
1163
+ self.columncolour.Bind(csel.EVT_COLOURSELECT, self.OnColumnColour)
1164
+ flexgridcolumn.Add(label, 0, wx.ALIGN_CENTER_VERTICAL)
1165
+ flexgridcolumn.Add(self.columncolour, 0)
1166
+
1167
+ label = wx.StaticText(self.leftpanel, -1, "Column Background Colour")
1168
+ label.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1169
+ self.columnchoice = wx.Choice(self.leftpanel, -1, choices = ["1","2","3"])
1170
+ self.columnchoice.SetSelection(0)
1171
+ self.columnchoice.Bind(wx.EVT_CHOICE, self.OnColumnChoiceChanged)
1172
+ self.columnbackgroundcolour = csel.ColourSelect(self.leftpanel, -1, "Choose...", wx.LIGHT_GREY)
1173
+ self.columnbackgroundcolour.Bind(csel.EVT_COLOURSELECT, self.OnColumnBackgroundColour)
1174
+ flexgridcolumn.Add(label, 0, wx.ALIGN_CENTER_VERTICAL)
1175
+ hSizer = wx.BoxSizer(wx.HORIZONTAL)
1176
+ hSizer.Add(self.columnchoice, 0, wx.RIGHT, 5)
1177
+ hSizer.Add(self.columnbackgroundcolour)
1178
+ flexgridcolumn.Add(hSizer)
1179
+
1180
+ label = wx.StaticText(self.leftpanel, -1, "Alignment")
1181
+ label.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1182
+ alignment = wx.Choice(self.leftpanel, -1, choices=["wx.LEFT", "wx.CENTER", "wx.RIGHT"])
1183
+ alignment.Bind(wx.EVT_CHOICE, self.OnColumnAlignment)
1184
+ flexgridcolumn.Add(label, 0, wx.ALIGN_CENTER_VERTICAL)
1185
+ flexgridcolumn.Add(alignment, 0)
1186
+
1187
+ label = wx.StaticText(self.leftpanel, -1, "Width Options")
1188
+ label.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1189
+ widthoptions = wx.Choice(self.leftpanel, -1, choices=["USEHEADER", "AUTOSIZE"])
1190
+ widthoptions.Bind(wx.EVT_CHOICE, self.OnColumnWidth)
1191
+ flexgridcolumn.Add(label, 0, wx.ALIGN_CENTER_VERTICAL)
1192
+ flexgridcolumn.Add(widthoptions, 0)
1193
+
1194
+ columnimages = wx.CheckBox(self.leftpanel, -1, "Images On Columns", style=wx.ALIGN_RIGHT)
1195
+ columnimages.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1196
+ columnimages.Bind(wx.EVT_CHECKBOX, self.OnColumnImages)
1197
+ flexgridcolumn.Add(columnimages, 0, wx.ALIGN_CENTER_VERTICAL)
1198
+ flexgridcolumn.Add((20,20), 0)
1199
+
1200
+ columnimages = wx.CheckBox(self.leftpanel, -1, "Custom Renderer", style=wx.ALIGN_RIGHT)
1201
+ columnimages.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ""))
1202
+ columnimages.Bind(wx.EVT_CHECKBOX, self.OnCustomRenderer)
1203
+ flexgridcolumn.Add(columnimages, 0, wx.ALIGN_CENTER_VERTICAL)
1204
+ flexgridcolumn.Add((20,20), 0)
1205
+
1206
+ columnssizer.Add(flexgridcolumn, 1, wx.EXPAND)
1207
+
1208
+ for count, event in enumerate(events):
1209
+
1210
+ if count == 0:
1211
+ tags = wx.ALL
1212
+ else:
1213
+ tags = wx.LEFT|wx.RIGHT|wx.BOTTOM
1214
+
1215
+ if count not in [6, 17, 22, 23]:
1216
+ check = wx.CheckBox(self.leftpanel, -1, event)
1217
+ eventssizer.Add(check, 0, tags, 3)
1218
+
1219
+ if event in ["EVT_TREE_ITEM_EXPANDED", "EVT_TREE_ITEM_COLLAPSED",
1220
+ "EVT_TREE_SEL_CHANGED", "EVT_TREE_SEL_CHANGING"]:
1221
+
1222
+ check.SetValue(1)
1223
+
1224
+ check.Bind(wx.EVT_CHECKBOX, self.OnCheckEvent)
1225
+ self.treeevents.append(check)
1226
+
1227
+ sizer1 = wx.BoxSizer(wx.HORIZONTAL)
1228
+ label = wx.StaticText(self.leftpanel, -1, "Connection Pen")
1229
+ font = label.GetFont()
1230
+ font.SetWeight(wx.FONTWEIGHT_BOLD)
1231
+ label.SetFont(font)
1232
+ buttonconnection = wx.Button(self.leftpanel, -1, "Choose...")
1233
+ buttonconnection.Bind(wx.EVT_BUTTON, self.OnButtonConnection)
1234
+ sizer1.Add(label, 0, wx.ALL|wx.ALIGN_CENTER, 5)
1235
+ sizer1.Add((1,0), 1, wx.EXPAND)
1236
+ sizer1.Add(buttonconnection, 0, wx.ALL, 5)
1237
+
1238
+ sizer2 = wx.BoxSizer(wx.HORIZONTAL)
1239
+ label = wx.StaticText(self.leftpanel, -1, "Border Pen")
1240
+ font = label.GetFont()
1241
+ font.SetWeight(wx.FONTWEIGHT_BOLD)
1242
+ label.SetFont(font)
1243
+ buttonborder = wx.Button(self.leftpanel, -1, "Choose...")
1244
+ buttonborder.Bind(wx.EVT_BUTTON, self.OnButtonBorder)
1245
+ sizer2.Add(label, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER, 5)
1246
+ sizer2.Add((1,0), 1, wx.EXPAND)
1247
+ sizer2.Add(buttonborder, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)
1248
+
1249
+ sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1250
+ label = wx.StaticText(self.leftpanel, -1, "Tree Buttons")
1251
+ font = label.GetFont()
1252
+ font.SetWeight(wx.FONTWEIGHT_BOLD)
1253
+ label.SetFont(font)
1254
+ buttontree = wx.Button(self.leftpanel, -1, "Choose...")
1255
+ buttontree.Bind(wx.EVT_BUTTON, self.OnButtonTree)
1256
+ sizer3.Add(label, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER, 5)
1257
+ sizer3.Add((1,0), 1, wx.EXPAND)
1258
+ sizer3.Add(buttontree, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)
1259
+
1260
+ sizer4 = wx.BoxSizer(wx.HORIZONTAL)
1261
+ label = wx.StaticText(self.leftpanel, -1, "Check/Radio Buttons")
1262
+ font = label.GetFont()
1263
+ font.SetWeight(wx.FONTWEIGHT_BOLD)
1264
+ label.SetFont(font)
1265
+ buttoncr = wx.Button(self.leftpanel, -1, "Choose...")
1266
+ buttoncr.Bind(wx.EVT_BUTTON, self.OnButtonCheckRadio)
1267
+ sizer4.Add(label, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER, 5)
1268
+ sizer4.Add((1,0), 1, wx.EXPAND)
1269
+ sizer4.Add(buttoncr, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)
1270
+
1271
+ sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1272
+ radioimage = wx.RadioButton(self.leftpanel, -1, "Image Background", style=wx.RB_GROUP)
1273
+ radioimage.Bind(wx.EVT_RADIOBUTTON, self.OnBackgroundImage)
1274
+ self.imagebutton = wx.Button(self.leftpanel, -1, "Choose...")
1275
+ self.imagebutton.Bind(wx.EVT_BUTTON, self.OnChooseImage)
1276
+ sizer5.Add(radioimage, 0, wx.ALL|wx.ALIGN_CENTER, 5)
1277
+ sizer5.Add((1,0), 1, wx.EXPAND)
1278
+ sizer5.Add(self.imagebutton, 0, wx.ALL, 5)
1279
+
1280
+ sizer6 = wx.BoxSizer(wx.HORIZONTAL)
1281
+ radiobackground = wx.RadioButton(self.leftpanel, -1, "Background Colour")
1282
+ radiobackground.Bind(wx.EVT_RADIOBUTTON, self.OnBackgroundColour)
1283
+ self.backbutton = csel.ColourSelect(self.leftpanel, -1, "Choose...", wx.WHITE)
1284
+ self.backbutton.Bind(csel.EVT_COLOURSELECT, self.OnChooseBackground)
1285
+ sizer6.Add(radiobackground, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER, 5)
1286
+ sizer6.Add((1,0), 1, wx.EXPAND)
1287
+ sizer6.Add(self.backbutton, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER, 5)
1288
+
1289
+ colourssizer.Add(sizer1, 0, wx.EXPAND)
1290
+ colourssizer.Add(sizer2, 0, wx.EXPAND)
1291
+ colourssizer.Add(sizer3, 0, wx.EXPAND)
1292
+ colourssizer.Add(sizer4, 0, wx.EXPAND)
1293
+ colourssizer.Add(sizer5, 0, wx.EXPAND)
1294
+ colourssizer.Add(sizer6, 0, wx.EXPAND)
1295
+
1296
+ sizera = wx.BoxSizer(wx.HORIZONTAL)
1297
+ self.checknormal = wx.CheckBox(self.leftpanel, -1, "Standard Colours")
1298
+ self.focus = csel.ColourSelect(self.leftpanel, -1, "Focus",
1299
+ self.tree.GetHilightFocusColour())
1300
+ self.unfocus = csel.ColourSelect(self.leftpanel, -1, "Non-Focus",
1301
+ self.tree.GetHilightNonFocusColour())
1302
+ self.checknormal.Bind(wx.EVT_CHECKBOX, self.OnCheckNormal)
1303
+ self.focus.Bind(csel.EVT_COLOURSELECT, self.OnFocusColour)
1304
+ self.unfocus.Bind(csel.EVT_COLOURSELECT, self.OnNonFocusColour)
1305
+ sizera1 = wx.BoxSizer(wx.VERTICAL)
1306
+ sizera1.Add(self.focus, 0, wx.BOTTOM, 2)
1307
+ sizera1.Add(self.unfocus, 0)
1308
+ sizera.Add(self.checknormal, 0, wx.ALL, 3)
1309
+ sizera.Add((1, 0), 1, wx.EXPAND)
1310
+ sizera.Add(sizera1, 0, wx.ALL|wx.EXPAND, 3)
1311
+
1312
+ sizerb = wx.BoxSizer(wx.VERTICAL)
1313
+ self.checkgradient = wx.CheckBox(self.leftpanel, -1, "Gradient Theme")
1314
+ self.checkgradient.Bind(wx.EVT_CHECKBOX, self.OnCheckGradient)
1315
+ sizerb1 = wx.BoxSizer(wx.HORIZONTAL)
1316
+ sizerb1.Add((10, 0))
1317
+ self.radiohorizontal = wx.RadioButton(self.leftpanel, -1, "Horizontal", style=wx.RB_GROUP)
1318
+ self.radiohorizontal.Bind(wx.EVT_RADIOBUTTON, self.OnHorizontal)
1319
+ sizerb1.Add(self.radiohorizontal, 0, wx.TOP|wx.BOTTOM, 3)
1320
+ sizerb2 = wx.BoxSizer(wx.HORIZONTAL)
1321
+ sizerb2.Add((10, 0))
1322
+ self.radiovertical = wx.RadioButton(self.leftpanel, -1, "Vertical")
1323
+ self.radiovertical.Bind(wx.EVT_RADIOBUTTON, self.OnVertical)
1324
+ sizerb2.Add(self.radiovertical, 0, wx.BOTTOM, 3)
1325
+ sizerb3 = wx.BoxSizer(wx.HORIZONTAL)
1326
+ self.firstcolour = csel.ColourSelect(self.leftpanel, -1, "First Colour",
1327
+ self.tree.GetFirstGradientColour())
1328
+ self.secondcolour = csel.ColourSelect(self.leftpanel, -1, "Second Colour",
1329
+ self.tree.GetSecondGradientColour())
1330
+ self.firstcolour.Bind(csel.EVT_COLOURSELECT, self.OnFirstColour)
1331
+ self.secondcolour.Bind(csel.EVT_COLOURSELECT, self.OnSecondColour)
1332
+ sizerb3.Add(self.firstcolour, 0, wx.TOP|wx.BOTTOM, 3)
1333
+ sizerb3.Add(self.secondcolour, 0, wx.LEFT|wx.TOP|wx.BOTTOM, 3)
1334
+ sizerb.Add(self.checkgradient, 0, wx.ALL, 3)
1335
+ sizerb.Add(sizerb1, 0)
1336
+ sizerb.Add(sizerb2, 0)
1337
+ sizerb.Add(sizerb3, 0, wx.ALIGN_CENTER)
1338
+
1339
+ self.checkvista = wx.CheckBox(self.leftpanel, -1, "Windows Vista Theme")
1340
+ self.checkvista.Bind(wx.EVT_CHECKBOX, self.OnVista)
1341
+
1342
+ self.dragFullScreen = wx.CheckBox(self.leftpanel, -1, "Fullscreen Drag/Drop")
1343
+ self.dragFullScreen.Bind(wx.EVT_CHECKBOX, self.OnDragFullScreen)
1344
+
1345
+ themessizer.Add(sizera, 0, wx.EXPAND)
1346
+ themessizer.Add(sizerb, 0, wx.EXPAND)
1347
+ themessizer.Add((0, 5))
1348
+ themessizer.Add(self.checkvista, 0, wx.EXPAND|wx.ALL, 3)
1349
+ themessizer.Add(self.dragFullScreen, 0, wx.EXPAND|wx.ALL, 3)
1350
+
1351
+ mainsizer.Add(stylesizer, 0, wx.EXPAND|wx.ALL, 5)
1352
+ mainsizer.Add(columnssizer, 0, wx.EXPAND|wx.ALL, 5)
1353
+ mainsizer.Add(colourssizer, 0, wx.EXPAND|wx.ALL, 5)
1354
+ mainsizer.Add(themessizer, 0, wx.EXPAND|wx.ALL, 5)
1355
+ mainsizer.Add(eventssizer, 0, wx.EXPAND|wx.ALL, 5)
1356
+
1357
+ self.leftpanel.SetSizer(mainsizer)
1358
+ mainsizer.Layout()
1359
+
1360
+ radiobackground.SetValue(1)
1361
+ self.checknormal.SetValue(1)
1362
+ self.radiohorizontal.Enable(False)
1363
+ self.radiovertical.Enable(False)
1364
+ self.firstcolour.Enable(False)
1365
+ self.secondcolour.Enable(False)
1366
+ self.imagebutton.Enable(False)
1367
+
1368
+
1369
+ def OnRecreateTree(self, event):
1370
+
1371
+ panelparent = self.tree.GetParent()
1372
+ panelsizer = panelparent.GetSizer()
1373
+ panelparent.Freeze()
1374
+
1375
+ panelsizer.Detach(self.tree)
1376
+ self.tree.Destroy()
1377
+ del self.tree
1378
+ self.tree = HyperTreeList(panelparent, -1, log=self.log)
1379
+ panelsizer.Add(self.tree, 1, wx.EXPAND)
1380
+ panelsizer.Layout()
1381
+
1382
+ for col in range(self.tree.GetColumnCount()):
1383
+ colColour = self.columnBackgroundColours[col]
1384
+ self.ColourColumnItems(colColour, col)
1385
+
1386
+ panelparent.Thaw()
1387
+
1388
+
1389
+ def OnCheckStyle(self, event):
1390
+
1391
+ self.tree.ChangeStyle(self.treestyles)
1392
+ event.Skip()
1393
+
1394
+
1395
+ def OnCheckEvent(self, event):
1396
+
1397
+ obj = event.GetEventObject()
1398
+ self.tree.BindEvents(obj)
1399
+
1400
+ event.Skip()
1401
+
1402
+
1403
+ def OnButtonConnection(self, event):
1404
+
1405
+ pen = self.tree.GetConnectionPen()
1406
+ dlg = PenDialog(self, -1, oldpen=pen, pentype=0)
1407
+
1408
+ dlg.ShowModal()
1409
+ dlg.Destroy()
1410
+
1411
+
1412
+ def OnColumnFont(self, event):
1413
+
1414
+ font = self.tree.GetColumn(0).GetFont()
1415
+
1416
+ data = wx.FontData()
1417
+ data.SetInitialFont(font)
1418
+ dlg = wx.FontDialog(self, data)
1419
+
1420
+ if dlg.ShowModal() == wx.ID_OK:
1421
+ data = dlg.GetFontData()
1422
+ font = data.GetChosenFont()
1423
+ for i in range(0, self.tree.GetMainWindow().GetColumnCount()):
1424
+ self.tree.SetColumnFont(i, font)
1425
+
1426
+ dlg.Destroy()
1427
+ event.Skip()
1428
+
1429
+
1430
+ def OnColumnColour(self, event):
1431
+
1432
+ col1 = event.GetValue()
1433
+ for i in range(0, self.tree.GetMainWindow().GetColumnCount()):
1434
+ self.tree.SetColumnColour(i, col1)
1435
+
1436
+ event.Skip()
1437
+
1438
+ def OnColumnChoiceChanged(self, event):
1439
+
1440
+ selectedColumn = self.columnchoice.GetCurrentSelection()
1441
+
1442
+ if selectedColumn in range(3):
1443
+ colour = self.columnBackgroundColours[selectedColumn]
1444
+ self.columnbackgroundcolour.SetValue(colour)
1445
+
1446
+ def ColourColumnItems(self, colour, col):
1447
+
1448
+ def ColourItems(item,colour,col):
1449
+
1450
+ next = item
1451
+
1452
+ while next is not None:
1453
+
1454
+ self.tree.SetItemBackgroundColour(next, colour, col)
1455
+
1456
+ cookie=0
1457
+ child, cockie = self.tree.GetNextChild(next, cookie)
1458
+
1459
+ while child is not None:
1460
+ ColourItems(child, colour, col)
1461
+ child, cookie = self.tree.GetNextChild(next, cookie)
1462
+
1463
+ next = self.tree.GetNextSibling(next)
1464
+
1465
+ root = self.tree.GetRootItem()
1466
+ ColourItems(root, colour, col)
1467
+
1468
+ def OnColumnBackgroundColour(self, event):
1469
+
1470
+ columnBackgroundColour = event.GetValue()
1471
+ selectedColumn = self.columnchoice.GetCurrentSelection()
1472
+ self.columnBackgroundColours[selectedColumn] = columnBackgroundColour
1473
+
1474
+ self.ColourColumnItems(columnBackgroundColour, selectedColumn)
1475
+
1476
+ event.Skip()
1477
+
1478
+ def OnColumnAlignment(self, event):
1479
+
1480
+ selection = event.GetSelection()
1481
+ if selection == 0:
1482
+ alignment = wx.ALIGN_LEFT
1483
+ elif selection == 1:
1484
+ alignment = wx.ALIGN_CENTER
1485
+ else:
1486
+ alignment = wx.ALIGN_RIGHT
1487
+
1488
+ for i in range(1, self.tree.GetMainWindow().GetColumnCount()):
1489
+ self.tree.SetColumnAlignment(i, alignment)
1490
+
1491
+ event.Skip()
1492
+
1493
+
1494
+ def OnColumnImages(self, event):
1495
+
1496
+ for i in range(self.tree.GetMainWindow().GetColumnCount()):
1497
+ randimage = random.randint(1, len(ArtIDs))
1498
+ img = (event.IsChecked() and [randimage] or [-1])[0]
1499
+ self.tree.SetColumnImage(i, img)
1500
+
1501
+ event.Skip()
1502
+
1503
+ def OnCustomRenderer(self, event):
1504
+
1505
+ if event.IsChecked():
1506
+ renderer = HyperTreeHeaderRenderer(self)
1507
+ renderer.color = wx.Colour(211,227,247)
1508
+ renderer.text_color = wx.Colour(30,30,30)
1509
+ self.tree.SetHeaderCustomRenderer(renderer)
1510
+ else:
1511
+ renderer = None
1512
+ self.tree.SetHeaderCustomRenderer(renderer)
1513
+
1514
+ self.Refresh()
1515
+
1516
+ event.Skip()
1517
+
1518
+
1519
+
1520
+ def OnColumnWidth(self, event):
1521
+
1522
+ selection = event.GetSelection()
1523
+ if selection == 0: # wx.LIST_AUTOSIZE_USEHEADER
1524
+ choice = wx.LIST_AUTOSIZE_USEHEADER
1525
+ else:
1526
+ choice = wx.LIST_AUTOSIZE
1527
+
1528
+ for i in range(self.tree.GetMainWindow().GetColumnCount()):
1529
+ self.tree.SetColumnWidth(i, choice)
1530
+
1531
+ event.Skip()
1532
+
1533
+
1534
+ def SetConnectionPen(self, pen):
1535
+
1536
+ self.tree.SetConnectionPen(pen)
1537
+
1538
+
1539
+ def OnButtonBorder(self, event):
1540
+
1541
+ pen = self.tree.GetBorderPen()
1542
+ dlg = PenDialog(self, -1, oldpen=pen, pentype=1)
1543
+
1544
+ dlg.ShowModal()
1545
+ dlg.Destroy()
1546
+
1547
+
1548
+ def SetBorderPen(self, pen):
1549
+
1550
+ self.tree.SetBorderPen(pen)
1551
+
1552
+
1553
+ def OnButtonTree(self, event):
1554
+
1555
+ dlg = TreeDialog(self, -1, oldicons=self.oldicons)
1556
+ dlg.ShowModal()
1557
+ dlg.Destroy()
1558
+
1559
+
1560
+ def OnButtonCheckRadio(self, event):
1561
+
1562
+ dlg = CheckDialog(self, -1)
1563
+ dlg.ShowModal()
1564
+ dlg.Destroy()
1565
+
1566
+
1567
+ def SetTreeButtons(self, selection):
1568
+
1569
+ bitmap_plus = opj(bitmapDir + "plus" + str(selection+1) + ".ico")
1570
+ bitmap_minus = opj(bitmapDir + "minus" + str(selection+1) + ".ico")
1571
+
1572
+ bitmap = wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO)
1573
+ width = bitmap.GetWidth()
1574
+
1575
+ il = wx.ImageList(width, width)
1576
+
1577
+ il.Add(wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO))
1578
+ il.Add(wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO))
1579
+ il.Add(wx.Bitmap(bitmap_minus, wx.BITMAP_TYPE_ICO))
1580
+ il.Add(wx.Bitmap(bitmap_minus, wx.BITMAP_TYPE_ICO))
1581
+
1582
+ self.il = il
1583
+ self.tree.SetButtonsImageList(il)
1584
+
1585
+
1586
+ def SetCheckRadio(self, selection):
1587
+
1588
+ if selection == 0:
1589
+ self.tree.SetImageListCheck(13, 13)
1590
+ else:
1591
+ bitmap_check = opj(bitmapDir + "aquachecked.ico")
1592
+ bitmap_uncheck = opj(bitmapDir + "aquanotchecked.ico")
1593
+ bitmap_flag = opj(bitmapDir + "aquaflagged.ico")
1594
+ bitmap_unflag = opj(bitmapDir + "aquanotflagged.ico")
1595
+
1596
+ il = wx.ImageList(16, 16)
1597
+
1598
+ il.Add(wx.Bitmap(bitmap_check, wx.BITMAP_TYPE_ICO))
1599
+ il.Add(wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO))
1600
+ il.Add(wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO)) # TODO: we need an "undetermined check" icon...
1601
+ il.Add(wx.Bitmap(bitmap_flag, wx.BITMAP_TYPE_ICO))
1602
+ il.Add(wx.Bitmap(bitmap_unflag, wx.BITMAP_TYPE_ICO))
1603
+ self.tree.SetImageListCheck(16, 16, il)
1604
+
1605
+
1606
+ def OnBackgroundImage(self, event):
1607
+
1608
+ if hasattr(self, "backgroundimage"):
1609
+ self.tree.SetBackgroundImage(self.backgroundimage)
1610
+
1611
+ self.backbutton.Enable(False)
1612
+ self.imagebutton.Enable(True)
1613
+
1614
+ event.Skip()
1615
+
1616
+
1617
+ def OnChooseImage(self, event):
1618
+
1619
+ wildcard = "JPEG Files (*.jpg)|*.jpg|" \
1620
+ "Bitmap Files (*.bmp)|*.bmp|" \
1621
+ "PNG Files (*.png)|*.png|" \
1622
+ "Icon Files (*.ico)|*.ico|" \
1623
+ "GIF Files (*.gif)|*.gif|" \
1624
+ "All files (*.*)|*.*"
1625
+
1626
+ dlg = wx.FileDialog(self, "Choose An Image File", ".", "", wildcard, wx.FD_OPEN)
1627
+
1628
+ if dlg.ShowModal() == wx.ID_OK:
1629
+ path = dlg.GetPath()
1630
+ else:
1631
+ dlg.Destroy()
1632
+ return
1633
+
1634
+ dlg.Destroy()
1635
+ bitmap = wx.Bitmap(path, wx.BITMAP_TYPE_ANY)
1636
+ self.tree.SetBackgroundImage(bitmap)
1637
+ self.backgroundimage = bitmap
1638
+
1639
+ event.Skip()
1640
+
1641
+
1642
+ def OnBackgroundColour(self, event):
1643
+
1644
+ self.imagebutton.Enable(False)
1645
+ self.backbutton.Enable(True)
1646
+ self.tree.SetBackgroundImage(None)
1647
+
1648
+ event.Skip()
1649
+
1650
+
1651
+ def OnChooseBackground(self, event):
1652
+
1653
+ col1 = event.GetValue()
1654
+ self.tree.SetBackgroundColour(col1)
1655
+ event.Skip()
1656
+
1657
+
1658
+ def OnCheckNormal(self, event):
1659
+
1660
+ self.radiohorizontal.Enable(False)
1661
+ self.radiovertical.Enable(False)
1662
+ self.firstcolour.Enable(False)
1663
+ self.secondcolour.Enable(False)
1664
+ self.focus.Enable(True)
1665
+ self.unfocus.Enable(True)
1666
+ self.checkgradient.SetValue(0)
1667
+ self.checkvista.SetValue(0)
1668
+ self.tree.EnableSelectionGradient(False)
1669
+ self.tree.EnableSelectionVista(False)
1670
+ event.Skip()
1671
+
1672
+
1673
+ def OnFocusColour(self, event):
1674
+
1675
+ col1 = event.GetValue()
1676
+ self.tree.SetHilightFocusColour(col1)
1677
+ event.Skip()
1678
+
1679
+
1680
+ def OnNonFocusColour(self, event):
1681
+
1682
+ col1 = event.GetValue()
1683
+ self.tree.SetHilightNonFocusColour(col1)
1684
+ event.Skip()
1685
+
1686
+
1687
+ def OnCheckGradient(self, event):
1688
+
1689
+ self.radiohorizontal.Enable(True)
1690
+ self.radiovertical.Enable(True)
1691
+ self.firstcolour.Enable(True)
1692
+ self.secondcolour.Enable(True)
1693
+ self.checknormal.SetValue(0)
1694
+ self.checkvista.SetValue(0)
1695
+ self.focus.Enable(False)
1696
+ self.unfocus.Enable(False)
1697
+ self.tree.SetGradientStyle(self.radiovertical.GetValue())
1698
+ self.tree.EnableSelectionVista(False)
1699
+ self.tree.EnableSelectionGradient(True)
1700
+
1701
+ event.Skip()
1702
+
1703
+
1704
+ def OnHorizontal(self, event):
1705
+
1706
+ self.tree.SetGradientStyle(self.radiovertical.GetValue())
1707
+ event.Skip()
1708
+
1709
+
1710
+ def OnVertical(self, event):
1711
+
1712
+ self.tree.SetGradientStyle(self.radiovertical.GetValue())
1713
+ event.Skip()
1714
+
1715
+
1716
+ def OnFirstColour(self, event):
1717
+
1718
+ col1 = event.GetValue()
1719
+ self.tree.SetFirstGradientColour(wx.Colour(col1[0], col1[1], col1[2]))
1720
+ event.Skip()
1721
+
1722
+
1723
+ def OnSecondColour(self, event):
1724
+
1725
+ col1 = event.GetValue()
1726
+ self.tree.SetSecondGradientColour(wx.Colour(col1[0], col1[1], col1[2]))
1727
+ event.Skip()
1728
+
1729
+
1730
+ def OnVista(self, event):
1731
+
1732
+ self.radiohorizontal.Enable(False)
1733
+ self.radiovertical.Enable(False)
1734
+ self.firstcolour.Enable(False)
1735
+ self.secondcolour.Enable(False)
1736
+ self.checknormal.SetValue(0)
1737
+ self.checkgradient.SetValue(0)
1738
+ self.focus.Enable(False)
1739
+ self.unfocus.Enable(False)
1740
+ self.tree.EnableSelectionGradient(False)
1741
+ self.tree.EnableSelectionVista(True)
1742
+
1743
+ event.Skip()
1744
+
1745
+ def OnDragFullScreen(self, event):
1746
+
1747
+ self.tree.SetDragFullScreen(event.IsChecked())
1748
+ event.Skip()
1749
+
1750
+
1751
+ #---------------------------------------------------------------------------
1752
+ # HyperTreeList Implementation
1753
+ #---------------------------------------------------------------------------
1754
+ class HyperTreeList(HTL.HyperTreeList):
1755
+
1756
+ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
1757
+ size=wx.DefaultSize,
1758
+ style=wx.SUNKEN_BORDER,
1759
+ agwStyle=wx.TR_HAS_BUTTONS | wx.TR_HAS_VARIABLE_ROW_HEIGHT,
1760
+ log=None):
1761
+
1762
+ HTL.HyperTreeList.__init__(self, parent, id, pos, size, style, agwStyle)
1763
+
1764
+ alldata = dir(HTL)
1765
+
1766
+ treestyles = []
1767
+ events = []
1768
+ for data in alldata:
1769
+ if data.startswith("TR_"):
1770
+ treestyles.append(data)
1771
+ elif data.startswith("EVT_"):
1772
+ events.append(data)
1773
+
1774
+ events = events + [i for i in dir(wx) if i.startswith("EVT_TREE_")]
1775
+ for evt in ["EVT_TREE_GET_INFO", "EVT_TREE_SET_INFO", "EVT_TREE_ITEM_MIDDLE_CLICK",
1776
+ "EVT_TREE_STATE_IMAGE_CLICK"]:
1777
+ events.remove(evt)
1778
+ events.extend(('EVT_LIST_COL_CLICK', 'EVT_LIST_COL_RIGHT_CLICK'))
1779
+
1780
+ treestyles = treestyles + [i for i in dir(wx) if i.startswith("TR_")]
1781
+ treeset = {}
1782
+ treestyles = [treeset.setdefault(e,e) for e in treestyles if e not in treeset]
1783
+
1784
+ treestyles.sort()
1785
+
1786
+ self.events = events
1787
+ self.styles = treestyles
1788
+ self.item = None
1789
+ self.sortIcon = wx.HDR_SORT_ICON_NONE
1790
+ self.sortColumn = 0
1791
+
1792
+ il = wx.ImageList(16, 16)
1793
+
1794
+ for items in ArtIDs[1:-1]:
1795
+ bmp = wx.ArtProvider.GetBitmap(eval(items), wx.ART_TOOLBAR, (16, 16))
1796
+ il.Add(bmp)
1797
+
1798
+ smileidx = il.Add(images.Smiles.GetBitmap())
1799
+ numicons = il.GetImageCount()
1800
+
1801
+ self.AssignImageList(il)
1802
+ self.count = 0
1803
+ self.log = log
1804
+
1805
+ # NOTE: For some reason tree items have to have a data object in
1806
+ # order to be sorted. Since our compare just uses the labels
1807
+ # we don't need any real data, so we'll just use None below for
1808
+ # the item data.
1809
+
1810
+ # create some columns
1811
+ self.AddColumn("Main column")
1812
+ self.AddColumn("Column 1")
1813
+ self.AddColumn("Column 2")
1814
+ self.SetMainColumn(0) # the one with the tree in it...
1815
+ self.SetColumnWidth(0, 175)
1816
+
1817
+ self.root = self.AddRoot("The Root Item")
1818
+
1819
+ if not(self.GetAGWWindowStyleFlag() & wx.TR_HIDE_ROOT):
1820
+ self.SetPyData(self.root, None)
1821
+ self.SetItemImage(self.root, 24, which=wx.TreeItemIcon_Normal)
1822
+ self.SetItemImage(self.root, 13, which=wx.TreeItemIcon_Expanded)
1823
+ self.SetItemText(self.root, "col 1 root", 1)
1824
+ self.SetItemText(self.root, "col 2 root", 2)
1825
+
1826
+ textctrl = wx.TextCtrl(self.GetMainWindow(), -1, "I Am A Simple\nMultiline wx.TexCtrl", style=wx.TE_MULTILINE)
1827
+ self.gauge = wx.Gauge(self.GetMainWindow(), -1, 50, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
1828
+ self.gauge.SetValue(0)
1829
+ combobox = wx.ComboBox(self.GetMainWindow(), -1, choices=["That", "Was", "A", "Nice", "Holiday!"], style=wx.CB_READONLY|wx.CB_DROPDOWN)
1830
+ button1 = wx.Button(self.GetMainWindow(), -1, "wxPython")
1831
+ button1.SetSize(button1.GetBestSize())
1832
+ button2 = wx.Button(self.GetMainWindow(), -1, "Rules!")
1833
+ button2.SetSize(button2.GetBestSize())
1834
+ listctrl = ListCtrl.TestListCtrlPanel(self.GetMainWindow(), self.log)
1835
+ listctrl.SetSize((500, 200))
1836
+
1837
+ textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
1838
+ combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
1839
+
1840
+ for x in range(15):
1841
+ txt = "Item %d" % x
1842
+ if x == 1:
1843
+ child = self.AppendItem(self.root, txt + "\nHello World\nHappy wxPython-ing!")
1844
+ self.SetItemBold(child, True)
1845
+ else:
1846
+ child = self.AppendItem(self.root, txt)
1847
+
1848
+ self.SetPyData(child, None)
1849
+ self.SetItemText(child, txt + " (c1)", 1)
1850
+ self.SetItemText(child, txt + " (c2)", 2)
1851
+ self.SetItemImage(child, 24, which=wx.TreeItemIcon_Normal)
1852
+ self.SetItemImage(child, 13, which=wx.TreeItemIcon_Expanded)
1853
+
1854
+ for y in range(5):
1855
+ txt = "item %d-%s" % (x, chr(ord("a")+y))
1856
+ if y == 0 and x == 1:
1857
+ last = self.AppendItem(child, txt, ct_type=2, wnd=self.gauge)
1858
+ elif y == 1 and x == 2:
1859
+ last = self.AppendItem(child, txt, ct_type=1, wnd=textctrl)
1860
+ if random.randint(0, 3) == 1:
1861
+ self.SetItem3State(last, True)
1862
+ elif 2 < y < 4:
1863
+ last = self.AppendItem(child, txt)
1864
+ elif y == 4 and x == 1:
1865
+ last = self.AppendItem(child, txt, wnd=combobox)
1866
+ else:
1867
+ last = self.AppendItem(child, txt, ct_type=2)
1868
+
1869
+ self.SetPyData(last, None)
1870
+ self.SetItemText(last, txt + " (c1)", 1)
1871
+ self.SetItemText(last, txt + " (c2)", 2)
1872
+ self.SetItemImage(last, 24, which=wx.TreeItemIcon_Normal)
1873
+ self.SetItemImage(last, 13, which=wx.TreeItemIcon_Expanded)
1874
+
1875
+ if y == 3 and x == 0:
1876
+ self.SetItemWindow(last, button1, 1)
1877
+ self.SetItemWindow(last, button2, 2)
1878
+
1879
+ for z in range(5):
1880
+ txt = "item %d-%s-%d" % (x, chr(ord("a")+y), z)
1881
+ if z > 2:
1882
+ item = self.AppendItem(last, txt, ct_type=1)
1883
+ if random.randint(0, 3) == 1:
1884
+ self.SetItem3State(item, True)
1885
+ elif 0 < z <= 2:
1886
+ item = self.AppendItem(last, txt, ct_type=2)
1887
+ elif z == 0:
1888
+ item = self.AppendItem(last, txt)
1889
+
1890
+ self.SetPyData(item, None)
1891
+
1892
+ if x == 0 and y == 0 and z == 0:
1893
+ self.SetItemText(item, "", 1)
1894
+ self.SetItemText(item, txt + " (c2)", 2)
1895
+ self.SetItemWindow(item, self.CreateTreeCtrl(), 1)
1896
+ elif x == 0 and y == 0 and z == 1:
1897
+ self.SetItemText(item, txt + " (c1)", 1)
1898
+ self.SetItemText(item, "", 2)
1899
+ self.SetItemWindow(item, listctrl, 2)
1900
+ else:
1901
+ self.SetItemText(item, txt + " (c1)", 1)
1902
+ self.SetItemText(item, txt + " (c2)", 2)
1903
+ if z == 0:
1904
+ self.SetItemHyperText(item, True)
1905
+
1906
+ self.SetItemImage(item, 28, which=wx.TreeItemIcon_Normal)
1907
+ self.SetItemImage(item, numicons-1, which=wx.TreeItemIcon_Selected)
1908
+
1909
+ self.GetMainWindow().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
1910
+ self.Bind(wx.EVT_IDLE, self.OnIdle)
1911
+
1912
+ self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
1913
+ 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
1914
+ 'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
1915
+ 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
1916
+ 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
1917
+ 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
1918
+ 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
1919
+ 'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
1920
+ 'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
1921
+ 'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink,
1922
+ 'EVT_LIST_COL_CLICK': self.OnColClick, 'EVT_LIST_COL_RIGHT_CLICK': self.OnColRightClick}
1923
+
1924
+ mainframe = wx.GetTopLevelParent(self)
1925
+
1926
+ if not hasattr(mainframe, "leftpanel"):
1927
+ self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
1928
+ self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
1929
+ self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
1930
+ self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
1931
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
1932
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
1933
+ else:
1934
+ for combos in mainframe.treeevents:
1935
+ self.BindEvents(combos)
1936
+
1937
+ if hasattr(mainframe, "leftpanel"):
1938
+ self.ChangeStyle(mainframe.treestyles)
1939
+
1940
+ if not(self.GetAGWWindowStyleFlag() & wx.TR_HIDE_ROOT):
1941
+ self.SelectItem(self.root)
1942
+ self.Expand(self.root)
1943
+
1944
+
1945
+ def CreateTreeCtrl(self):
1946
+
1947
+ tree = wx.TreeCtrl(self.GetMainWindow(), -1, wx.Point(0, 0), wx.Size(160, 200),
1948
+ wx.TR_DEFAULT_STYLE)
1949
+
1950
+ items = []
1951
+
1952
+ imglist = wx.ImageList(16, 16, True, 2)
1953
+ imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16)))
1954
+ imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16)))
1955
+ tree.AssignImageList(imglist)
1956
+
1957
+ root = tree.AddRoot("HyperTreeList :-D", image=0)
1958
+
1959
+ items.append(tree.AppendItem(root, "Item 1", 0))
1960
+ items.append(tree.AppendItem(root, "Item 2", 0))
1961
+ items.append(tree.AppendItem(root, "Item 3", 0))
1962
+ items.append(tree.AppendItem(root, "Item 4", 0))
1963
+ items.append(tree.AppendItem(root, "Item 5", 0))
1964
+
1965
+ for ii in range(len(items)):
1966
+
1967
+ id = items[ii]
1968
+ tree.AppendItem(id, "Subitem 1", 1)
1969
+ tree.AppendItem(id, "Subitem 2", 1)
1970
+ tree.AppendItem(id, "Subitem 3", 1)
1971
+ tree.AppendItem(id, "Subitem 4", 1)
1972
+ tree.AppendItem(id, "Subitem 5", 1)
1973
+
1974
+ tree.Expand(root)
1975
+ tree.Expand(items[1])
1976
+ tree.Expand(items[3])
1977
+ tree.SelectItem(root)
1978
+
1979
+ return tree
1980
+
1981
+
1982
+ def BindEvents(self, choice, recreate=False):
1983
+
1984
+ value = choice.GetValue()
1985
+ text = choice.GetLabel()
1986
+
1987
+ evt = "wx." + text
1988
+ binder = self.eventdict[text]
1989
+
1990
+ if value == 1:
1991
+ if evt == "wx.EVT_TREE_BEGIN_RDRAG":
1992
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_DOWN, None)
1993
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_UP, None)
1994
+ try:
1995
+ self.Bind(eval(evt), binder)
1996
+ except:
1997
+ self.Bind(eval("HTL." + text), binder)
1998
+ else:
1999
+ try:
2000
+ self.Bind(eval(evt), None)
2001
+ except:
2002
+ self.Bind(eval("HTL." + text), None)
2003
+
2004
+ if evt == "wx.EVT_TREE_BEGIN_RDRAG":
2005
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
2006
+ self.GetMainWindow().Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
2007
+
2008
+
2009
+ def ChangeStyle(self, combos):
2010
+
2011
+ style = 0
2012
+ for combo in combos:
2013
+ if combo.GetValue() == 1:
2014
+ if combo.GetLabel() == "TR_VIRTUAL":
2015
+ style = style | HTL.TR_VIRTUAL
2016
+ else:
2017
+ try:
2018
+ style = style | eval("wx." + combo.GetLabel())
2019
+ except:
2020
+ style = style | eval("HTL." + combo.GetLabel())
2021
+
2022
+ if self.GetAGWWindowStyleFlag() != style:
2023
+ self.SetAGWWindowStyleFlag(style)
2024
+
2025
+
2026
+ def OnCompareItems(self, item1, item2):
2027
+
2028
+ t1 = self.GetItemText(item1)
2029
+ t2 = self.GetItemText(item2)
2030
+
2031
+ self.log.write('compare: ' + t1 + ' <> ' + t2 + "\n")
2032
+
2033
+ if t1 < t2:
2034
+ return -1
2035
+ if t1 == t2:
2036
+ return 0
2037
+
2038
+ return 1
2039
+
2040
+
2041
+ def OnIdle(self, event):
2042
+
2043
+ if self.gauge:
2044
+
2045
+ try:
2046
+ if self.gauge.IsEnabled() and self.gauge.IsShown():
2047
+ self.count = self.count + 1
2048
+
2049
+ if self.count >= 50:
2050
+ self.count = 0
2051
+
2052
+ self.gauge.SetValue(self.count)
2053
+
2054
+ except:
2055
+
2056
+ self.gauge = None
2057
+
2058
+ event.Skip()
2059
+
2060
+
2061
+ def OnRightDown(self, event):
2062
+
2063
+ pt = event.GetPosition()
2064
+ item, flags, column = self.HitTest(pt)
2065
+
2066
+ if item:
2067
+ self.item = item
2068
+ self.log.write("OnRightClick: %s, %s, %s\n" % (self.GetItemText(item), type(item), item.__class__))
2069
+ self.SelectItem(item)
2070
+
2071
+
2072
+ def OnRightUp(self, event):
2073
+
2074
+ item = self.item
2075
+
2076
+ if not item:
2077
+ event.Skip()
2078
+ return
2079
+
2080
+ if not self.IsItemEnabled(item):
2081
+ event.Skip()
2082
+ return
2083
+
2084
+ # Item Text Appearance
2085
+ ishtml = self.IsItemHyperText(item)
2086
+ back = self.GetItemBackgroundColour(item)
2087
+ fore = self.GetItemTextColour(item)
2088
+ isbold = self.IsBold(item)
2089
+ font = self.GetItemFont(item)
2090
+
2091
+ # Icons On Item
2092
+ normal = self.GetItemImage(item, wx.TreeItemIcon_Normal)
2093
+ selected = self.GetItemImage(item, wx.TreeItemIcon_Selected)
2094
+ expanded = self.GetItemImage(item, wx.TreeItemIcon_Expanded)
2095
+ selexp = self.GetItemImage(item, wx.TreeItemIcon_SelectedExpanded)
2096
+
2097
+ # Enabling/Disabling Windows Associated To An Item
2098
+ haswin = self.GetItemWindow(item)
2099
+
2100
+ # Enabling/Disabling Items
2101
+ enabled = self.IsItemEnabled(item)
2102
+
2103
+ # Generic Item's Info
2104
+ children = self.GetChildrenCount(item)
2105
+ itemtype = self.GetItemType(item)
2106
+ text = self.GetItemText(item)
2107
+ pydata = self.GetPyData(item)
2108
+
2109
+ self.current = item
2110
+ self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
2111
+ "font": font, "normal": normal, "selected": selected, "expanded": expanded,
2112
+ "selexp": selexp, "haswin": haswin, "children": children,
2113
+ "itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
2114
+
2115
+ menu = wx.Menu()
2116
+ item1 = menu.Append(wx.ID_ANY, "Change Item Text")
2117
+ item2 = menu.Append(wx.ID_ANY, "Modify Item Text Colour")
2118
+ menu.AppendSeparator()
2119
+ if isbold:
2120
+ strs = "Make Item Text Not Bold"
2121
+ else:
2122
+ strs = "Make Item Text Bold"
2123
+ item3 = menu.Append(wx.ID_ANY, strs)
2124
+ item4 = menu.Append(wx.ID_ANY, "Change Item Font")
2125
+ item13 = menu.Append(wx.ID_ANY, "Change Item Background Colour")
2126
+ menu.AppendSeparator()
2127
+ if ishtml:
2128
+ strs = "Set Item As Non-Hyperlink"
2129
+ else:
2130
+ strs = "Set Item As Hyperlink"
2131
+ item5 = menu.Append(wx.ID_ANY, strs)
2132
+ menu.AppendSeparator()
2133
+
2134
+ item7 = menu.Append(wx.ID_ANY, "Disable Item")
2135
+
2136
+ menu.AppendSeparator()
2137
+ item14 = menu.Append(wx.ID_ANY, "Hide Item")
2138
+ item15 = menu.Append(wx.ID_ANY, "Unhide All Items")
2139
+ menu.AppendSeparator()
2140
+ item8 = menu.Append(wx.ID_ANY, "Change Item Icons")
2141
+ menu.AppendSeparator()
2142
+ item9 = menu.Append(wx.ID_ANY, "Get Other Information For This Item")
2143
+ menu.AppendSeparator()
2144
+
2145
+ item10 = menu.Append(wx.ID_ANY, "Delete Item")
2146
+ if item == self.GetRootItem():
2147
+ item10.Enable(False)
2148
+ item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
2149
+ item12 = menu.Append(wx.ID_ANY, "Append An Item")
2150
+
2151
+ self.Bind(wx.EVT_MENU, self.OnItemText, item1)
2152
+ self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
2153
+ self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
2154
+ self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
2155
+ self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
2156
+ self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
2157
+ self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
2158
+ self.Bind(wx.EVT_MENU, self.OnItemInfo, item9)
2159
+ self.Bind(wx.EVT_MENU, self.OnItemDelete, item10)
2160
+ self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
2161
+ self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
2162
+ self.Bind(wx.EVT_MENU, self.OnItemBackground, item13)
2163
+ self.Bind(wx.EVT_MENU, self.OnHideItem, item14)
2164
+ self.Bind(wx.EVT_MENU, self.OnUnhideItems, item15)
2165
+
2166
+ self.PopupMenu(menu)
2167
+ menu.Destroy()
2168
+ event.Skip()
2169
+
2170
+
2171
+ def OnItemText(self, event):
2172
+
2173
+ col = wx.GetNumberFromUser("Choose column number to change text",
2174
+ "Col", "Column To Modify", 0, 0,
2175
+ self.GetColumnCount() - 1, self)
2176
+ if col >= 0 and col < self.GetColumnCount():
2177
+ diag = wx.TextEntryDialog(self, "%s Text" % self.GetColumnText(col),
2178
+ caption="Input text for column %d" % col,
2179
+ value=self.GetItemText(self.current,col),
2180
+ style=wx.OK | wx.CANCEL | wx.TE_MULTILINE)
2181
+ reply = diag.ShowModal()
2182
+ text = diag.GetValue()
2183
+ diag.Destroy()
2184
+ if reply in (wx.OK, wx.ID_OK):
2185
+ self.SetItemText(self.current, text, col)
2186
+
2187
+
2188
+ def OnItemForeground(self, event):
2189
+
2190
+ colourdata = wx.ColourData()
2191
+ colourdata.SetColour(self.itemdict["fore"])
2192
+ dlg = wx.ColourDialog(self, colourdata)
2193
+
2194
+ dlg.GetColourData().SetChooseFull(True)
2195
+
2196
+ if dlg.ShowModal() == wx.ID_OK:
2197
+ data = dlg.GetColourData()
2198
+ col1 = data.GetColour().Get()
2199
+ self.SetItemTextColour(self.current, col1)
2200
+ dlg.Destroy()
2201
+ event.Skip()
2202
+
2203
+
2204
+ def OnItemBold(self, event):
2205
+
2206
+ self.SetItemBold(self.current, not self.itemdict["isbold"])
2207
+ event.Skip()
2208
+
2209
+
2210
+ def OnItemFont(self, event):
2211
+
2212
+ data = wx.FontData()
2213
+ font = self.itemdict["font"]
2214
+
2215
+ if font is None:
2216
+ font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
2217
+
2218
+ data.SetInitialFont(font)
2219
+
2220
+ dlg = wx.FontDialog(self, data)
2221
+
2222
+ if dlg.ShowModal() == wx.ID_OK:
2223
+ data = dlg.GetFontData()
2224
+ font = data.GetChosenFont()
2225
+ self.SetItemFont(self.current, font)
2226
+
2227
+ dlg.Destroy()
2228
+ event.Skip()
2229
+
2230
+
2231
+ def OnItemHyperText(self, event):
2232
+
2233
+ self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
2234
+ event.Skip()
2235
+
2236
+
2237
+ def OnDisableItem(self, event):
2238
+
2239
+ self.EnableItem(self.current, False)
2240
+ event.Skip()
2241
+
2242
+
2243
+ def OnHideItem(self, event):
2244
+
2245
+ self.HideItem(self.current)
2246
+ event.Skip()
2247
+
2248
+
2249
+ def OnUnhideItems(self, event):
2250
+
2251
+ item = self.GetRootItem()
2252
+ while item:
2253
+ if item.IsHidden():
2254
+ self.HideItem(item, False)
2255
+ item = self.GetNext(item)
2256
+ event.Skip()
2257
+
2258
+
2259
+ def OnItemIcons(self, event):
2260
+
2261
+ bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
2262
+ self.itemdict["expanded"], self.itemdict["selexp"]]
2263
+
2264
+ wx.BeginBusyCursor()
2265
+ dlg = TreeIcons(self, -1, bitmaps=bitmaps)
2266
+ wx.EndBusyCursor()
2267
+ dlg.ShowModal()
2268
+ dlg.Destroy()
2269
+
2270
+
2271
+ def SetNewIcons(self, bitmaps):
2272
+
2273
+ self.SetItemImage(self.current, bitmaps[0], which=wx.TreeItemIcon_Normal)
2274
+ self.SetItemImage(self.current, bitmaps[1], which=wx.TreeItemIcon_Selected)
2275
+ self.SetItemImage(self.current, bitmaps[2], which=wx.TreeItemIcon_Expanded)
2276
+ self.SetItemImage(self.current, bitmaps[3], which=wx.TreeItemIcon_SelectedExpanded)
2277
+
2278
+
2279
+ def OnItemInfo(self, event):
2280
+
2281
+ itemtext = self.itemdict["text"]
2282
+ numchildren = str(self.itemdict["children"])
2283
+ itemtype = self.itemdict["itemtype"]
2284
+ pydata = repr(type(self.itemdict["pydata"]))
2285
+
2286
+ if itemtype == 0:
2287
+ itemtype = "Normal"
2288
+ elif itemtype == 1:
2289
+ itemtype = "CheckBox"
2290
+ else:
2291
+ itemtype = "RadioButton"
2292
+
2293
+ strs = "Information On Selected Item:\n\n" + "Text: " + itemtext + "\n" \
2294
+ "Number Of Children: " + numchildren + "\n" \
2295
+ "Item Type: " + itemtype + "\n" \
2296
+ "Item Data Type: " + pydata + "\n"
2297
+
2298
+ dlg = wx.MessageDialog(self, strs, "HyperTreeListDemo Info", wx.OK | wx.ICON_INFORMATION)
2299
+ dlg.ShowModal()
2300
+ dlg.Destroy()
2301
+
2302
+ event.Skip()
2303
+
2304
+
2305
+ def OnItemDelete(self, event):
2306
+
2307
+ strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
2308
+ dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
2309
+
2310
+ if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
2311
+ dlg.Destroy()
2312
+ return
2313
+
2314
+ dlg.Destroy()
2315
+
2316
+ self.DeleteChildren(self.current)
2317
+ self.Delete(self.current)
2318
+ self.current = None
2319
+
2320
+ event.Skip()
2321
+
2322
+
2323
+ def OnItemPrepend(self, event):
2324
+
2325
+ dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
2326
+
2327
+ if dlg.ShowModal() == wx.ID_OK:
2328
+ newname = dlg.GetValue()
2329
+ newitem = self.PrependItem(self.current, newname)
2330
+ self.EnsureVisible(newitem)
2331
+
2332
+ dlg.Destroy()
2333
+ event.Skip()
2334
+
2335
+
2336
+ def OnItemAppend(self, event):
2337
+
2338
+ dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
2339
+
2340
+ if dlg.ShowModal() == wx.ID_OK:
2341
+ newname = dlg.GetValue()
2342
+ newitem = self.AppendItem(self.current, newname)
2343
+ self.EnsureVisible(newitem)
2344
+
2345
+ dlg.Destroy()
2346
+ event.Skip()
2347
+
2348
+
2349
+ def OnItemBackground(self, event):
2350
+
2351
+ colourdata = wx.ColourData()
2352
+ colourdata.SetColour(self.itemdict["back"])
2353
+ dlg = wx.ColourDialog(self, colourdata)
2354
+
2355
+ dlg.GetColourData().SetChooseFull(True)
2356
+
2357
+ if dlg.ShowModal() == wx.ID_OK:
2358
+ data = dlg.GetColourData()
2359
+ col1 = data.GetColour().Get()
2360
+ self.SetItemBackgroundColour(self.current, col1)
2361
+
2362
+ dlg.Destroy()
2363
+ event.Skip()
2364
+
2365
+
2366
+ def OnBeginEdit(self, event):
2367
+
2368
+ self.log.write("OnBeginEdit\n")
2369
+ # show how to prevent edit...
2370
+ item = event.GetItem()
2371
+ if item and self.GetItemText(item) == "The Root Item":
2372
+ wx.Bell()
2373
+ self.log.write("You can't edit this one...\n")
2374
+
2375
+ # Lets just see what's visible of its children
2376
+ cookie = 0
2377
+ root = event.GetItem()
2378
+ (child, cookie) = self.GetFirstChild(root)
2379
+
2380
+ while child:
2381
+ self.log.write("Child [%s] visible = %d\n" % (self.GetItemText(child), self.IsVisible(child)))
2382
+ (child, cookie) = self.GetNextChild(root, cookie)
2383
+
2384
+ event.Veto()
2385
+
2386
+
2387
+ def OnEndEdit(self, event):
2388
+
2389
+ self.log.write("OnEndEdit: %s %s\n" %(event.IsEditCancelled(), event.GetLabel()))
2390
+ # show how to reject edit, we'll not allow any digits
2391
+ for x in event.GetLabel():
2392
+ if x in string.digits:
2393
+ self.log.write("You can't enter digits...\n")
2394
+ event.Veto()
2395
+ return
2396
+
2397
+
2398
+ def OnLeftDClick(self, event):
2399
+
2400
+ pt = event.GetPosition()
2401
+ item, flags, column = self.HitTest(pt)
2402
+ if item and (flags & wx.TREE_HITTEST_ONITEMLABEL):
2403
+ if self.GetAGWWindowStyleFlag() & wx.TR_EDIT_LABELS:
2404
+ self.log.write("OnLeftDClick: %s (manually starting label edit)\n"% self.GetItemText(item))
2405
+ self.EditLabel(item)
2406
+ else:
2407
+ self.log.write("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
2408
+
2409
+ event.Skip()
2410
+
2411
+
2412
+ def OnItemExpanded(self, event):
2413
+
2414
+ item = event.GetItem()
2415
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2416
+ if item and isinstance(item, HTL.TreeListItem):
2417
+ self.log.write("OnItemExpanded: %s\n" % self.GetItemText(item))
2418
+
2419
+
2420
+ def OnItemExpanding(self, event):
2421
+
2422
+ item = event.GetItem()
2423
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2424
+ if item and isinstance(item, HTL.TreeListItem):
2425
+ self.log.write("OnItemExpanding: %s\n" % self.GetItemText(item))
2426
+
2427
+ event.Skip()
2428
+
2429
+
2430
+ def OnItemCollapsed(self, event):
2431
+
2432
+ item = event.GetItem()
2433
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2434
+ if item and isinstance(item, HTL.TreeListItem):
2435
+ self.log.write("OnItemCollapsed: %s" % self.GetItemText(item))
2436
+
2437
+
2438
+ def OnItemCollapsing(self, event):
2439
+
2440
+ item = event.GetItem()
2441
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2442
+ if item and isinstance(item, HTL.TreeListItem):
2443
+ self.log.write("OnItemCollapsing: %s\n" % self.GetItemText(item))
2444
+
2445
+ event.Skip()
2446
+
2447
+
2448
+ def OnSelChanged(self, event):
2449
+
2450
+ item = event.GetItem()
2451
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2452
+ if item and isinstance(item, HTL.TreeListItem):
2453
+ # This event was from the HyperTreeList and not the TreeCtrl.
2454
+ self.item = item
2455
+ self.log.write("OnSelChanged: %s" % self.GetItemText(self.item))
2456
+ if wx.Platform == '__WXMSW__':
2457
+ self.log.write(", BoundingRect: %s\n" % self.GetBoundingRect(self.item, True))
2458
+ else:
2459
+ self.log.write("\n")
2460
+
2461
+ event.Skip()
2462
+
2463
+
2464
+ def OnSelChanging(self, event):
2465
+
2466
+ item = event.GetItem()
2467
+ # Ignore wx.TreeCtrl TREE events (item=wx.TreeItemId) from item window.
2468
+ if item and isinstance(item, HTL.TreeListItem):
2469
+ # This event was from the HyperTreeList and not the TreeCtrl.
2470
+ olditem = event.GetOldItem()
2471
+ if not olditem:
2472
+ olditemtext = "None"
2473
+ else:
2474
+ olditemtext = self.GetItemText(olditem)
2475
+ self.log.write("OnSelChanging: From %s To %s\n" %(olditemtext, self.GetItemText(item)))
2476
+
2477
+ event.Skip()
2478
+
2479
+ def OnColClick(self, event):
2480
+ column = event.GetColumn()
2481
+ self.log.write("OnColClick: Column %d clicked" % column)
2482
+ # Cycle through the sort icons.
2483
+ if column != self.sortColumn:
2484
+ self.sortIcon = wx.HDR_SORT_ICON_NONE
2485
+ self.sortColumn = column
2486
+ self.sortIcon = wx.HDR_SORT_ICON_DOWN if self.sortIcon == wx.HDR_SORT_ICON_UP else wx.HDR_SORT_ICON_UP
2487
+ self.SetColumnSortIcon(column, self.sortIcon)
2488
+
2489
+ def OnColRightClick(self, event):
2490
+ column = event.GetColumn()
2491
+ self.log.write("OnColRightClick: Column %d clicked" % column)
2492
+ self.SetColumnSortIcon(column, wx.HDR_SORT_ICON_NONE)
2493
+
2494
+ def OnBeginDrag(self, event):
2495
+
2496
+ self.item = event.GetItem()
2497
+ if self.item:
2498
+ self.log.write("Beginning Drag... fullscreen=%s\n" % self.GetDragFullScreen())
2499
+ event.Allow()
2500
+
2501
+
2502
+ def OnBeginRDrag(self, event):
2503
+
2504
+ self.item = event.GetItem()
2505
+ if self.item:
2506
+ self.log.write("Beginning Right Drag... fullscreen=%s\n" % self.GetDragFullScreen())
2507
+ event.Allow()
2508
+
2509
+
2510
+ def OnEndDrag(self, event):
2511
+
2512
+ if self.GetDragFullScreen() is True:
2513
+ wnd = wx.FindWindowAtPoint(self.ClientToScreen(event.GetPoint()))
2514
+ self.log.write("Ending Drag! window=%s\n" % repr(wnd))
2515
+ else:
2516
+ self.item = event.GetItem()
2517
+ name = self.GetItemText(self.item) if self.item else 'None'
2518
+ self.log.write("Ending Drag! item=%s\n" % name)
2519
+
2520
+ event.Skip()
2521
+
2522
+
2523
+ def OnDeleteItem(self, event):
2524
+
2525
+ item = event.GetItem()
2526
+
2527
+ if not item:
2528
+ return
2529
+
2530
+ self.log.write("Deleting Item: %s\n" % self.GetItemText(item))
2531
+ event.Skip()
2532
+
2533
+
2534
+ def OnItemCheck(self, event):
2535
+
2536
+ item = event.GetItem()
2537
+ self.log.write("Item " + self.GetItemText(item) + " Has Been Checked!\n")
2538
+ event.Skip()
2539
+
2540
+
2541
+ def OnItemChecking(self, event):
2542
+
2543
+ item = event.GetItem()
2544
+ self.log.write("Item " + self.GetItemText(item) + " Is Being Checked...\n")
2545
+ event.Skip()
2546
+
2547
+
2548
+ def OnToolTip(self, event):
2549
+
2550
+ item = event.GetItem()
2551
+ if item:
2552
+ event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
2553
+
2554
+
2555
+ def OnItemMenu(self, event):
2556
+
2557
+ item = event.GetItem()
2558
+ if item:
2559
+ self.log.write("OnItemMenu: %s\n" % self.GetItemText(item))
2560
+
2561
+ event.Skip()
2562
+
2563
+
2564
+ def OnKey(self, event):
2565
+
2566
+ keycode = event.GetKeyCode()
2567
+ keyname = keyMap.get(keycode, None)
2568
+
2569
+ if keycode == wx.WXK_BACK:
2570
+ self.log.write("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
2571
+ return
2572
+
2573
+ if keyname is None:
2574
+ if "unicode" in wx.PlatformInfo:
2575
+ keycode = event.GetUnicodeKey()
2576
+ if keycode <= 127:
2577
+ keycode = event.GetKeyCode()
2578
+ keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
2579
+ if keycode < 27:
2580
+ keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
2581
+
2582
+ elif keycode < 256:
2583
+ if keycode == 0:
2584
+ keyname = "NUL"
2585
+ elif keycode < 27:
2586
+ keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
2587
+ else:
2588
+ keyname = "\"%s\"" % chr(keycode)
2589
+ else:
2590
+ keyname = "unknown (%s)" % keycode
2591
+
2592
+ self.log.write("OnKeyDown: You Pressed '" + keyname + "'\n")
2593
+
2594
+ event.Skip()
2595
+
2596
+
2597
+ def OnActivate(self, event):
2598
+
2599
+ if self.item:
2600
+ self.log.write("OnActivate: %s\n" % self.GetItemText(self.item))
2601
+
2602
+ event.Skip()
2603
+
2604
+
2605
+ def OnHyperLink(self, event):
2606
+
2607
+ item = event.GetItem()
2608
+ if item:
2609
+ self.log.write("OnHyperLink: %s\n" % self.GetItemText(self.item))
2610
+
2611
+
2612
+ def OnTextCtrl(self, event):
2613
+
2614
+ keycode = event.GetKeyCode()
2615
+ char = chr(keycode) if keycode < 256 else ''
2616
+ self.log.write("EDITING THE TEXTCTRL: You Wrote '" + char + \
2617
+ "' (KeyCode = " + str(keycode) + ")\n")
2618
+ event.Skip()
2619
+
2620
+
2621
+ def OnComboBox(self, event):
2622
+
2623
+ selection = event.GetEventObject().GetValue()
2624
+ self.log.write("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")
2625
+ event.Skip()
2626
+
2627
+
2628
+ #---------------------------------------------------------------------------
2629
+
2630
+
2631
+ class TestPanel(wx.Panel):
2632
+ def __init__(self, parent, log):
2633
+ self.log = log
2634
+ wx.Panel.__init__(self, parent, -1)
2635
+
2636
+ b = wx.Button(self, -1, " Test HyperTreeList ", (50,50))
2637
+ self.Bind(wx.EVT_BUTTON, self.OnButton, b)
2638
+
2639
+
2640
+ def OnButton(self, evt):
2641
+ self.win = HyperTreeListDemo(self, self.log)
2642
+ self.win.Show(True)
2643
+
2644
+ #----------------------------------------------------------------------
2645
+
2646
+ def runTest(frame, nb, log):
2647
+ win = TestPanel(nb, log)
2648
+ return win
2649
+
2650
+ #----------------------------------------------------------------------
2651
+
2652
+
2653
+ overview = HTL.__doc__
2654
+
2655
+
2656
+ if __name__ == '__main__':
2657
+ import sys,os
2658
+ import run
2659
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
2660
+