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,1442 @@
1
+ # -*- coding: utf-8 -*-
2
+ #----------------------------------------------------------------------------
3
+ # Name: toolbar.py
4
+ # Purpose:
5
+ #
6
+ # Author: Andrea Gavana <andrea.gavana@gmail.com>
7
+ #
8
+ # Created:
9
+ # Version:
10
+ # Date:
11
+ # Licence: wxWindows license
12
+ # Tags: phoenix-port, unittest, documented, py3-port
13
+ # (c) 2021 Zombie
14
+ #----------------------------------------------------------------------------
15
+ """
16
+ A ribbon tool bar is similar to a traditional toolbar which has no labels.
17
+
18
+
19
+ Description
20
+ ===========
21
+
22
+ It contains one or more tool groups, each of which contains one or more tools.
23
+ Each tool is represented by a (generally small, i.e. 16x15) bitmap.
24
+
25
+
26
+ Events Processing
27
+ =================
28
+
29
+ This class processes the following events:
30
+
31
+ ====================================== ======================================
32
+ Event Name Description
33
+ ====================================== ======================================
34
+ ``EVT_RIBBONTOOLBAR_CLICKED`` Triggered when the normal (non-dropdown) region of a tool on the tool bar is clicked.
35
+ ``EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED`` Triggered when the dropdown region of a tool on the tool bar is clicked. LRibbonToolBarEvent.PopupMenu should be called by the event handler if it wants to display a popup menu (which is what most dropdown tools should be doing).
36
+ ====================================== ======================================
37
+
38
+ """
39
+
40
+ import wx
41
+
42
+ from .control import RibbonControl
43
+ from .panel import RibbonPanel
44
+
45
+ from .art import *
46
+
47
+ wxEVT_COMMAND_RIBBONTOOL_CLICKED = wx.NewEventType()
48
+ wxEVT_COMMAND_RIBBONTOOL_DROPDOWN_CLICKED = wx.NewEventType()
49
+
50
+ EVT_RIBBONTOOLBAR_CLICKED = wx.PyEventBinder(wxEVT_COMMAND_RIBBONTOOL_CLICKED, 1)
51
+ EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED = wx.PyEventBinder(wxEVT_COMMAND_RIBBONTOOL_DROPDOWN_CLICKED, 1)
52
+
53
+
54
+ def GetSizeInOrientation(size, orientation):
55
+
56
+ if orientation == wx.HORIZONTAL:
57
+ return size.GetWidth()
58
+
59
+ if orientation == wx.VERTICAL:
60
+ return size.GetHeight()
61
+
62
+ if orientation == wx.BOTH:
63
+ return size.GetWidth() * size.GetHeight()
64
+
65
+ return 0
66
+
67
+
68
+ class RibbonToolBarEvent(wx.PyCommandEvent):
69
+ """ Handles events related to :class:`RibbonToolBar`. """
70
+
71
+ def __init__(self, command_type=None, win_id=0, bar=None):
72
+ """
73
+ Default class constructor.
74
+
75
+ :param integer `command_type`: the event type;
76
+ :param integer `win_id`: the event identifier;
77
+ :param `bar`: an instance of :class:`RibbonToolBar`.
78
+ """
79
+
80
+ wx.PyCommandEvent.__init__(self, command_type, win_id)
81
+ self._bar = bar
82
+
83
+
84
+ def GetBar(self):
85
+ """ Returns an instance of :class:`RibbonToolBar`. """
86
+
87
+ return self._bar
88
+
89
+
90
+ def SetBar(self, bar):
91
+ """
92
+ Sets the current :class:`RibbonToolBar` for this event.
93
+
94
+ :param `bar`: an instance of :class:`RibbonToolBar`.
95
+ """
96
+
97
+ self._bar = bar
98
+
99
+
100
+ def PopupMenu(self, menu):
101
+ """
102
+ Pops up the given menu and returns control when the user has dismissed the menu.
103
+
104
+ If a menu item is selected, the corresponding menu event is generated and will
105
+ be processed as usual.
106
+
107
+ :param `menu`: the menu to pop up, an instance of :class:`wx.Menu`.
108
+
109
+ :note: Just before the menu is popped up, :meth:`wx.Menu.UpdateUI` is called to ensure
110
+ that the menu items are in the correct state. The menu does not get deleted by
111
+ the window.
112
+ """
113
+
114
+ return self._bar.PopupMenu(menu)
115
+
116
+
117
+ class RibbonToolBarToolBase(object):
118
+
119
+ def __init__(self):
120
+
121
+ self.help_string = ""
122
+ self.bitmap = wx.NullBitmap
123
+ self.bitmap_disabled = wx.NullBitmap
124
+ self.dropdown = wx.Rect()
125
+ self.position = wx.Point()
126
+ self.size = wx.Size()
127
+ self.client_data = None
128
+ self.id = -1
129
+ self.kind = RIBBON_BUTTON_NORMAL
130
+ self.state = None
131
+
132
+
133
+ class RibbonToolBarToolGroup(object):
134
+
135
+ def __init__(self):
136
+
137
+ # To identify the group as a RibbonToolBarToolBase
138
+ self.dummy_tool = None
139
+
140
+ self.tools = []
141
+ self.position = wx.Point()
142
+ self.size = wx.Size()
143
+
144
+
145
+ class RibbonToolBar(RibbonControl):
146
+
147
+ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0,
148
+ name="RibbonToolBar"):
149
+
150
+ """
151
+ Default class constructor.
152
+
153
+ :param `parent`: pointer to a parent window, typically a :class:`~wx.lib.agw.ribbon.panel.RibbonPanel`;
154
+ :param `id`: window identifier. If ``wx.ID_ANY``, will automatically create
155
+ an identifier;
156
+ :param `pos`: window position. ``wx.DefaultPosition`` indicates that wxPython
157
+ should generate a default position for the window;
158
+ :param `size`: window size. ``wx.DefaultSize`` indicates that wxPython should
159
+ generate a default size for the window. If no suitable size can be found, the
160
+ window will be sized to 20x20 pixels so that the window is visible but obviously
161
+ not correctly sized;
162
+ :param `style`: window style, currently unused.
163
+ :param `name`: the window name.
164
+
165
+ """
166
+
167
+ RibbonControl.__init__(self, parent, id, pos, size, wx.BORDER_NONE, name=name)
168
+
169
+ self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
170
+ self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
171
+ self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
172
+ self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
173
+ self.Bind(wx.EVT_LEFT_UP, self.OnMouseUp)
174
+ self.Bind(wx.EVT_MOTION, self.OnMouseMove)
175
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
176
+ self.Bind(wx.EVT_SIZE, self.OnSize)
177
+
178
+ self.CommonInit(style)
179
+
180
+
181
+ def CommonInit(self, style):
182
+
183
+ self._groups = []
184
+
185
+ self.AppendGroup()
186
+ self._hover_tool = None
187
+ self._active_tool = None
188
+ self._nrows_min = 1
189
+ self._nrows_max = 1
190
+ self._sizes = [wx.Size(0, 0)]
191
+ self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
192
+
193
+
194
+ def AddSimpleTool(self, tool_id, bitmap, help_string, kind=RIBBON_BUTTON_NORMAL):
195
+ """
196
+ Add a tool to the tool bar (simple version).
197
+
198
+ :param `tool_id`: id of the new tool (used for event callbacks);
199
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
200
+ other large bitmaps used on the button bar;
201
+ :param `help_string`: the UI help string to associate with the new button;
202
+ :param `kind`: the kind of button to add.
203
+
204
+ :see: :meth:`~RibbonToolBar.AddDropdownTool`, :meth:`~RibbonToolBar.AddHybridTool`, :meth:`~RibbonToolBar.AddTool`
205
+
206
+ """
207
+
208
+ return self.AddTool(tool_id, bitmap, wx.NullBitmap, help_string, kind, None)
209
+
210
+
211
+ def AddDropdownTool(self, tool_id, bitmap, help_string=""):
212
+ """
213
+ Add a dropdown tool to the tool bar (simple version).
214
+
215
+ :param `tool_id`: id of the new tool (used for event callbacks);
216
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
217
+ other large bitmaps used on the button bar;
218
+ :param `help_string`: the UI help string to associate with the new button.
219
+
220
+ :see: :meth:`~RibbonToolBar.AddTool`
221
+ """
222
+
223
+ return self.AddTool(tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_DROPDOWN, None)
224
+
225
+
226
+ def InsertDropdownTool(self, pos, tool_id, bitmap, help_string=""):
227
+ """
228
+ Inserts a dropdown tool in the tool bar at the position specified by `pos`.
229
+
230
+ :param `pos`: the position of the new tool in the toolbar (zero-based);
231
+ :param `tool_id`: id of the new tool (used for event callbacks);
232
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
233
+ other large bitmaps used on the button bar;
234
+ :param `help_string`: the UI help string to associate with the new button.
235
+
236
+ :see: :meth:`~RibbonToolBar.AddTool`, :meth:`~RibbonToolBar.InsertTool`
237
+
238
+ .. versionadded:: 0.9.5
239
+ """
240
+
241
+ return self.InsertTool(pos, tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_DROPDOWN, None)
242
+
243
+
244
+ def AddHybridTool(self, tool_id, bitmap, help_string=""):
245
+ """
246
+ Add a hybrid tool to the tool bar (simple version).
247
+
248
+ :param `tool_id`: id of the new tool (used for event callbacks);
249
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
250
+ other large bitmaps used on the button bar;
251
+ :param `help_string`: the UI help string to associate with the new button.
252
+
253
+ :see: :meth:`~RibbonToolBar.AddTool`
254
+ """
255
+
256
+ return self.AddTool(tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_HYBRID, None)
257
+
258
+
259
+ def InsertHybridTool(self, pos, tool_id, bitmap, help_string=""):
260
+ """
261
+ Inserts a hybrid tool in the tool bar at the position specified by `pos`.
262
+
263
+ :param `pos`: the position of the new tool in the toolbar (zero-based);
264
+ :param `tool_id`: id of the new tool (used for event callbacks);
265
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
266
+ other large bitmaps used on the button bar;
267
+ :param `help_string`: the UI help string to associate with the new button.
268
+
269
+ :see: :meth:`~RibbonToolBar.AddTool`, :meth:`~RibbonToolBar.InsertTool`
270
+
271
+ .. versionadded:: 0.9.5
272
+ """
273
+
274
+ return self.InsertTool(pos, tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_HYBRID, None)
275
+
276
+
277
+ def AddToggleTool(self, tool_id, bitmap, help_string=""):
278
+ """
279
+ Add a toggle tool to the tool bar (simple version).
280
+
281
+ :param `tool_id`: id of the new tool (used for event callbacks);
282
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
283
+ other large bitmaps used on the button bar;
284
+ :param `help_string`: the UI help string to associate with the new button.
285
+
286
+ :see: :meth:`~RibbonToolBar.AddTool`
287
+ """
288
+
289
+ return self.AddTool(tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_TOGGLE, None)
290
+
291
+
292
+ def InsertToggleTool(self, pos, tool_id, bitmap, help_string=""):
293
+ """
294
+ Inserts a toggle tool in the tool bar at the position specified by `pos`.
295
+
296
+ :param `pos`: the position of the new tool in the toolbar (zero-based);
297
+ :param `tool_id`: id of the new tool (used for event callbacks);
298
+ :param `bitmap`: large bitmap of the new button. Must be the same size as all
299
+ other large bitmaps used on the button bar;
300
+ :param `help_string`: the UI help string to associate with the new button.
301
+
302
+ :see: :meth:`~RibbonToolBar.AddTool`, :meth:`~RibbonToolBar.InsertTool`
303
+
304
+ .. versionadded:: 0.9.5
305
+ """
306
+
307
+ return self.InsertTool(pos, tool_id, bitmap, wx.NullBitmap, help_string, RIBBON_BUTTON_TOGGLE, None)
308
+
309
+
310
+ def AddTool(self, tool_id, bitmap, bitmap_disabled=wx.NullBitmap, help_string="", kind=RIBBON_BUTTON_NORMAL, client_data=None):
311
+ """
312
+ Add a tool to the tool bar.
313
+
314
+ :param `tool_id`: id of the new tool (used for event callbacks);
315
+ :param `bitmap`: bitmap to use as the foreground for the new tool. Does not
316
+ have to be the same size as other tool bitmaps, but should be similar as
317
+ otherwise it will look visually odd;
318
+ :param `bitmap_disabled`: bitmap to use when the tool is disabled. If left
319
+ as :class:`NullBitmap`, then a bitmap will be automatically generated from `bitmap`;
320
+ :param `help_string`: the UI help string to associate with the new tool;
321
+ :param `kind`: the kind of tool to add;
322
+ :param `client_data`: client data to associate with the new tool.
323
+
324
+ :returns: An opaque pointer which can be used only with other tool bar methods.
325
+
326
+ :see: :meth:`~RibbonToolBar.AddDropdownTool`, :meth:`~RibbonToolBar.AddHybridTool`, :meth:`~RibbonToolBar.AddSeparator`
327
+ """
328
+
329
+ return self.InsertTool(self.GetToolCount(), tool_id, bitmap, bitmap_disabled,
330
+ help_string, kind, client_data)
331
+
332
+
333
+ def InsertTool(self, pos, tool_id, bitmap, bitmap_disabled=wx.NullBitmap, help_string="", kind=RIBBON_BUTTON_NORMAL, client_data=None):
334
+ """
335
+ Inserts a tool in the tool bar at the position specified by `pos`.
336
+
337
+ :param `pos`: the position of the new tool in the toolbar (zero-based);
338
+ :param `tool_id`: id of the new tool (used for event callbacks);
339
+ :param `bitmap`: bitmap to use as the foreground for the new tool. Does not
340
+ have to be the same size as other tool bitmaps, but should be similar as
341
+ otherwise it will look visually odd;
342
+ :param `bitmap_disabled`: bitmap to use when the tool is disabled. If left
343
+ as :class:`NullBitmap`, then a bitmap will be automatically generated from `bitmap`;
344
+ :param `help_string`: the UI help string to associate with the new tool;
345
+ :param `kind`: the kind of tool to add;
346
+ :param `client_data`: client data to associate with the new tool.
347
+
348
+ :returns: An opaque pointer which can be used only with other tool bar methods.
349
+
350
+ :see: :meth:`~RibbonToolBar.AddTool`, :meth:`~RibbonToolBar.AddDropdownTool`, :meth:`~RibbonToolBar.AddHybridTool`, :meth:`~RibbonToolBar.AddSeparator`
351
+
352
+ .. versionadded:: 0.9.5
353
+ """
354
+
355
+ if not bitmap.IsOk():
356
+ raise Exception("Exception")
357
+
358
+ tool = RibbonToolBarToolBase()
359
+ tool.id = tool_id
360
+ tool.bitmap = bitmap
361
+
362
+ if bitmap_disabled.IsOk():
363
+ if bitmap.GetSize() != bitmap_disabled.GetSize():
364
+ raise Exception("Exception")
365
+
366
+ tool.bitmap_disabled = bitmap_disabled
367
+ else:
368
+ tool.bitmap_disabled = self.MakeDisabledBitmap(bitmap)
369
+
370
+ tool.help_string = help_string
371
+ tool.kind = kind
372
+ tool.client_data = client_data
373
+ tool.position = wx.Point(0, 0)
374
+ tool.size = wx.Size(0, 0)
375
+ tool.state = 0
376
+
377
+ # Find the position where insert tool
378
+ group_count = len(self._groups)
379
+
380
+ for group in self._groups:
381
+ tool_count = len(group.tools)
382
+
383
+ if pos <= tool_count:
384
+ group.tools.insert(pos, tool)
385
+ return tool
386
+
387
+ pos -= tool_count + 1
388
+
389
+ raise Exception("Tool position out of toolbar bounds.")
390
+
391
+
392
+ def AddSeparator(self):
393
+ """
394
+ Adds a separator to the tool bar.
395
+
396
+ Separators are used to separate tools into groups. As such, a separator is not
397
+ explicity drawn, but is visually seen as the gap between tool groups.
398
+ """
399
+
400
+ if not self._groups[-1].tools:
401
+ return None
402
+
403
+ self.AppendGroup()
404
+ return self._groups[-1].dummy_tool
405
+
406
+
407
+ def InsertSeparator(self, pos):
408
+ """
409
+ Inserts a separator into the tool bar at the position specified by `pos`.
410
+
411
+ Separators are used to separate tools into groups. As such, a separator is not
412
+ explicity drawn, but is visually seen as the gap between tool groups.
413
+
414
+ :param `pos`: the position of the new tool in the toolbar (zero-based).
415
+
416
+ .. versionadded:: 0.9.5
417
+ """
418
+
419
+ for index, group in enumerate(self._groups):
420
+ if pos == 0:
421
+ # Prepend group
422
+ return self.InsertGroup(index).dummy_tool
423
+
424
+ if pos >= len(self._groups):
425
+ # Append group
426
+ return self.InsertGroup(index+1).dummy_tool
427
+
428
+ tool_count = len(group.tools)
429
+
430
+ if pos < tool_count:
431
+ new_group = self.InsertGroup(index+1)
432
+
433
+ for t in range(pos, tool_count):
434
+ new_group.tools.append(group.tools[t])
435
+
436
+ group.tools = group.tools[0:pos]
437
+ return group.dummy_tool
438
+
439
+ pos -= tool_count + 1
440
+
441
+ # Add an empty group at the end of the bar.
442
+ if not self._groups[-1].tools:
443
+ return None
444
+
445
+ self.AppendGroup()
446
+ return self._groups[-1].dummy_tool
447
+
448
+
449
+ def MakeDisabledBitmap(self, original):
450
+
451
+ img = original.ConvertToImage()
452
+ return wx.Bitmap(img.ConvertToGreyscale())
453
+
454
+
455
+ def AppendGroup(self):
456
+
457
+ group = RibbonToolBarToolGroup()
458
+ group.position = wx.Point(0, 0)
459
+ group.size = wx.Size(0, 0)
460
+ self._groups.append(group)
461
+
462
+
463
+ def InsertGroup(self, pos):
464
+
465
+ group = RibbonToolBarToolGroup()
466
+ group.position = wx.Point(0, 0)
467
+ group.size = wx.Size(0, 0)
468
+ self._groups.insert(pos, group)
469
+
470
+ return group
471
+
472
+
473
+ def ClearTools(self):
474
+ """
475
+ Deletes all the tools in the toolbar.
476
+
477
+ .. versionadded:: 0.9.5
478
+ """
479
+
480
+ self._groups = []
481
+
482
+
483
+ def DeleteTool(self, tool_id):
484
+ """
485
+ Removes the specified tool from the toolbar and deletes it.
486
+
487
+ :param `tool_id`: id of the tool to delete.
488
+
489
+ :returns: ``True`` if the tool was deleted, ``False`` otherwise.
490
+
491
+ :see: :meth:`~RibbonToolBar.DeleteToolByPos`
492
+
493
+ .. versionadded:: 0.9.5
494
+ """
495
+
496
+ for group in self._groups:
497
+ for tool in group.tools:
498
+ if tool.id == tool_id:
499
+ group.tools.remove(tool)
500
+ return True
501
+
502
+ return False
503
+
504
+
505
+ def DeleteToolByPos(self, pos):
506
+ """
507
+ This function behaves like :meth:`~RibbonToolBar.DeleteTool` but it deletes the tool at the
508
+ specified position `pos` and not the one with the given id.
509
+
510
+ Useful to delete separators.
511
+
512
+ :param `pos`: zero-based position of the tool to delete.
513
+
514
+ :returns: ``True`` if the tool was deleted, ``False`` otherwise.
515
+
516
+ :see: :meth:`~RibbonToolBar.DeleteTool`
517
+
518
+ .. versionadded:: 0.9.5
519
+ """
520
+
521
+ for index, group in enumerate(self._groups):
522
+ tool_count = len(group.tools)
523
+
524
+ if pos < tool_count:
525
+ # Remove tool
526
+ group.tools.pop(pos)
527
+ return True
528
+
529
+ elif pos == tool_count:
530
+ # Remove separator
531
+ if index < len(self._groups) - 1:
532
+
533
+ next_group = self._groups[index+1]
534
+
535
+ for t in range(0, len(next_group.tools)):
536
+ group.tools.append(next_group.tools[t])
537
+
538
+ self._groups.pop(index+1)
539
+
540
+ return True
541
+
542
+ return False
543
+
544
+
545
+ def FindById(self, tool_id):
546
+ """
547
+ Returns a pointer to the tool opaque structure by `tool_id` or ``None`` if
548
+ no corresponding tool is found.
549
+
550
+ :param `tool_id`: id of the tool to find.
551
+
552
+ .. versionadded:: 0.9.5
553
+ """
554
+
555
+ for group in self._groups:
556
+ for tool in group.tools:
557
+ if tool.id == tool_id:
558
+ return tool
559
+
560
+ return None
561
+
562
+
563
+ def GetToolByPos(self, pos):
564
+ """
565
+ Returns a pointer to the tool opaque structure by `pos` or ``None`` if
566
+ no corresponding tool is found.
567
+
568
+ :param `pos`: zero-based position of the tool to retrieve.
569
+
570
+ :returns: An instance of :class:`RibbonToolBarToolBase` if the tool was found,
571
+ ``None`` if it was not found.
572
+
573
+ .. versionadded:: 0.9.5
574
+ """
575
+
576
+ for group in self._groups:
577
+ tool_count = len(group.tools)
578
+
579
+ if pos < tool_count:
580
+ return group.tools[pos]
581
+
582
+ elif pos >= tool_count:
583
+ return None
584
+
585
+ return None
586
+
587
+
588
+ def GetToolCount(self):
589
+ """
590
+ Returns the number of tools in this :class:`RibbonToolBar`.
591
+
592
+ .. versionadded:: 0.9.5
593
+ """
594
+
595
+ count = 0
596
+ for group in self._groups:
597
+ count += len(group.tools)
598
+
599
+ # There is a splitter in front of every group except for the first
600
+ # If only one group, no separator.
601
+ if len(self._groups) > 1:
602
+ count += len(self._groups) - 1
603
+
604
+ return count
605
+
606
+
607
+ def GetToolId(self, tool):
608
+ """
609
+ Returns the tool id for the specified input `tool`.
610
+
611
+ :param `tool`: an instance of :class:`RibbonToolBarToolBase`.
612
+
613
+ .. versionadded:: 0.9.5
614
+ """
615
+
616
+ return tool.id
617
+
618
+
619
+ def GetToolClientData(self, tool_id):
620
+ """
621
+ Get any client data associated with the tool.
622
+
623
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
624
+
625
+ :return: Client data (any Python object), or ``None`` if there is none.
626
+
627
+ .. versionadded:: 0.9.5
628
+ """
629
+
630
+ tool = self.FindById(tool_id)
631
+ if tool is None:
632
+ raise Exception("Invalid tool id")
633
+
634
+ return tool.client_data
635
+
636
+
637
+ def GetToolEnabled(self, tool_id):
638
+ """
639
+ Called to determine whether a tool is enabled (responds to user input).
640
+
641
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
642
+
643
+ :return: ``True`` if the tool was found and it is enabled, ``False`` otherwise.
644
+
645
+ .. versionadded:: 0.9.5
646
+ """
647
+
648
+ tool = self.FindById(tool_id)
649
+ if tool is None:
650
+ raise Exception("Invalid tool id")
651
+
652
+ return (tool.state & RIBBON_TOOLBAR_TOOL_DISABLED) == 0
653
+
654
+
655
+ def GetToolHelpString(self, tool_id):
656
+ """
657
+ Returns the tool short help string.
658
+
659
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
660
+
661
+ .. versionadded:: 0.9.5
662
+ """
663
+
664
+ tool = self.FindById(tool_id)
665
+ if tool is None:
666
+ raise Exception("Invalid tool id")
667
+
668
+ return tool.help_string
669
+
670
+
671
+ def GetToolKind(self, tool_id):
672
+ """
673
+ Returns the kind of the given tool.
674
+
675
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
676
+
677
+ .. versionadded:: 0.9.5
678
+ """
679
+
680
+ tool = self.FindById(tool_id)
681
+ if tool is None:
682
+ raise Exception("Invalid tool id")
683
+
684
+ return tool.kind
685
+
686
+
687
+ def GetToolPos(self, tool_id):
688
+ """
689
+ Returns the tool position in the toolbar, or ``wx.NOT_FOUND`` if the tool is not found.
690
+
691
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
692
+
693
+ .. versionadded:: 0.9.5
694
+ """
695
+
696
+ pos = 0
697
+ for group in self._groups:
698
+
699
+ for tool in group.tools:
700
+
701
+ if tool.id == tool_id:
702
+ return pos
703
+
704
+ pos += 1
705
+
706
+ pos += 1 # Increment pos for group separator.
707
+
708
+ return wx.NOT_FOUND
709
+
710
+
711
+ def GetToolState(self, tool_id):
712
+ """
713
+ Gets the on/off state of a toggle tool.
714
+
715
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`.
716
+
717
+ :return: ``True`` if the tool is toggled on, ``False`` otherwise.
718
+
719
+ :see: :meth:`~RibbonToolBar.ToggleTool`
720
+
721
+ .. versionadded:: 0.9.5
722
+ """
723
+
724
+ tool = self.FindById(tool_id)
725
+ if tool is None:
726
+ raise Exception("Invalid tool id")
727
+
728
+ return tool.state & RIBBON_TOOLBAR_TOOL_TOGGLED
729
+
730
+
731
+ def SetToolClientData(self, tool_id, clientData):
732
+ """
733
+ Sets the client data associated with the tool.
734
+
735
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
736
+ :param `clientData`: any Python object.
737
+
738
+ .. versionadded:: 0.9.5
739
+ """
740
+
741
+ tool = self.FindById(tool_id)
742
+ if tool is None:
743
+ raise Exception("Invalid tool id")
744
+
745
+ tool.client_data = clientData
746
+
747
+
748
+ def SetToolDisabledBitmap(self, tool_id, bitmap):
749
+ """
750
+ Sets the bitmap to be used by the tool with the given ID when the tool is in a disabled state.
751
+
752
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
753
+ :param `bitmap`: an instance of :class:`wx.Bitmap`.
754
+
755
+ .. versionadded:: 0.9.5
756
+ """
757
+
758
+ tool = self.FindById(tool_id)
759
+ if tool is None:
760
+ raise Exception("Invalid tool id")
761
+
762
+ tool.bitmap_disabled = bitmap
763
+
764
+
765
+ def SetToolHelpString(self, tool_id, helpString):
766
+ """
767
+ Sets the tool short help string.
768
+
769
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
770
+ :param `helpString`: a string for the help.
771
+
772
+ .. versionadded:: 0.9.5
773
+ """
774
+
775
+ tool = self.FindById(tool_id)
776
+ if tool is None:
777
+ raise Exception("Invalid tool id")
778
+
779
+ tool.help_string = helpString
780
+
781
+
782
+ def SetToolNormalBitmap(self, tool_id, bitmap):
783
+ """
784
+ Sets the bitmap to be used by the tool with the given ID when the tool is enabled.
785
+
786
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
787
+ :param `bitmap`: an instance of :class:`wx.Bitmap`.
788
+
789
+ .. versionadded:: 0.9.5
790
+ """
791
+
792
+ tool = self.FindById(tool_id)
793
+ if tool is None:
794
+ raise Exception("Invalid tool id")
795
+
796
+ tool.bitmap = bitmap
797
+
798
+
799
+ def EnableTool(self, tool_id, enable=True):
800
+ """
801
+ Enables or disables a single tool on the bar.
802
+
803
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
804
+ :param `enable`: ``True`` to enable the tool, ``False`` to disable it.
805
+
806
+ .. versionadded:: 0.9.5
807
+ """
808
+
809
+ tool = self.FindById(tool_id)
810
+ if tool is None:
811
+ raise Exception("Invalid tool id")
812
+
813
+ if enable:
814
+
815
+ if tool.state & RIBBON_TOOLBAR_TOOL_DISABLED:
816
+ tool.state &= ~RIBBON_TOOLBAR_TOOL_DISABLED
817
+ self.Refresh()
818
+
819
+ else:
820
+
821
+ if (tool.state & RIBBON_TOOLBAR_TOOL_DISABLED) == 0:
822
+ tool.state |= RIBBON_TOOLBAR_TOOL_DISABLED
823
+ self.Refresh()
824
+
825
+
826
+ def ToggleTool(self, tool_id, checked=True):
827
+ """
828
+ Toggles on or off a single tool on the bar.
829
+
830
+ :param `tool_id`: id of the tool in question, as passed to :meth:`~RibbonToolBar.AddTool`;
831
+ :param `checked`: ``True`` to toggle on the tool, ``False`` to toggle it off.
832
+
833
+ .. versionadded:: 0.9.5
834
+ """
835
+
836
+ tool = self.FindById(tool_id)
837
+ if tool is None:
838
+ raise Exception("Invalid tool id")
839
+
840
+ if checked:
841
+ if (tool.state & RIBBON_TOOLBAR_TOOL_TOGGLED) == 0:
842
+ tool.state |= RIBBON_TOOLBAR_TOOL_TOGGLED
843
+ self.Refresh()
844
+ else:
845
+ if tool.state & RIBBON_TOOLBAR_TOOL_TOGGLED:
846
+ tool.state &= ~RIBBON_TOOLBAR_TOOL_TOGGLED
847
+ self.Refresh()
848
+
849
+
850
+ def IsSizingContinuous(self):
851
+ """
852
+ Returns ``True`` if this window can take any size (greater than its minimum size),
853
+ ``False`` if it can only take certain sizes.
854
+
855
+ :see: :meth:`RibbonControl.GetNextSmallerSize() <lib.agw.ribbon.control.RibbonControl.GetNextSmallerSize>`,
856
+ :meth:`RibbonControl.GetNextLargerSize() <lib.agw.ribbon.control.RibbonControl.GetNextLargerSize>`
857
+ """
858
+
859
+ return False
860
+
861
+
862
+ def DoGetNextSmallerSize(self, direction, relative_to):
863
+ """
864
+ Implementation of :meth:`RibbonControl.GetNextSmallerSize() <lib.agw.ribbon.control.RibbonControl.GetNextSmallerSize>`.
865
+
866
+ Controls which have non-continuous sizing must override this virtual function
867
+ rather than :meth:`RibbonControl.GetNextSmallerSize() <lib.agw.ribbon.control.RibbonControl.GetNextSmallerSize>`.
868
+ """
869
+
870
+ result = wx.Size(*relative_to)
871
+ area = 0
872
+ tobreak = False
873
+
874
+ for nrows in range(self._nrows_max, self._nrows_min-1, -1):
875
+
876
+ size = wx.Size(*self._sizes[nrows - self._nrows_min])
877
+ original = wx.Size(*size)
878
+
879
+ if direction == wx.HORIZONTAL:
880
+ if size.GetWidth() < relative_to.GetWidth() and size.GetHeight() <= relative_to.GetHeight():
881
+ size.SetHeight(relative_to.GetHeight())
882
+ tobreak = True
883
+
884
+ elif direction == wx.VERTICAL:
885
+ if size.GetWidth() <= relative_to.GetWidth() and size.GetHeight() < relative_to.GetHeight():
886
+ size.SetWidth(relative_to.GetWidth())
887
+ tobreak = True
888
+
889
+ elif direction == wx.BOTH:
890
+ if size.GetWidth() < relative_to.GetWidth() and size.GetHeight() < relative_to.GetHeight():
891
+ pass
892
+
893
+ if GetSizeInOrientation(original, direction) > area:
894
+ result = wx.Size(*size)
895
+ area = GetSizeInOrientation(original, direction)
896
+ if tobreak:
897
+ break
898
+
899
+ return result
900
+
901
+
902
+ def DoGetNextLargerSize(self, direction, relative_to):
903
+ """
904
+ Implementation of :meth:`RibbonControl.GetNextLargerSize() <lib.agw.ribbon.control.RibbonControl.GetNextLargerSize>`.
905
+
906
+ Controls which have non-continuous sizing must override this virtual function
907
+ rather than :meth:`RibbonControl.GetNextLargerSize() <lib.agw.ribbon.control.RibbonControl.GetNextLargerSize>`.
908
+ """
909
+
910
+ # Pick the smallest of our sizes which are larger than the given size
911
+ result = wx.Size(*relative_to)
912
+ area = 10000
913
+ tobreak = False
914
+
915
+ for nrows in range(self._nrows_min, self._nrows_max+1):
916
+
917
+ size = wx.Size(*self._sizes[nrows - self._nrows_min])
918
+ original = wx.Size(*size)
919
+
920
+ if direction == wx.HORIZONTAL:
921
+ if size.GetWidth() > relative_to.GetWidth() and size.GetHeight() <= relative_to.GetHeight():
922
+ size.SetHeight(relative_to.GetHeight())
923
+ tobreak = True
924
+
925
+ elif direction == wx.VERTICAL:
926
+ if size.GetWidth() <= relative_to.GetWidth() and size.GetHeight() > relative_to.GetHeight():
927
+ size.SetWidth(relative_to.GetWidth())
928
+ tobreak = True
929
+
930
+ elif direction == wx.BOTH:
931
+ if size.GetWidth() > relative_to.GetWidth() and size.GetHeight() > relative_to.GetHeight():
932
+ tobreak = True
933
+
934
+ if GetSizeInOrientation(original, direction) < area:
935
+ result = wx.Size(*size)
936
+ area = GetSizeInOrientation(original, direction)
937
+ if tobreak:
938
+ break
939
+
940
+ return result
941
+
942
+
943
+ def SetRows(self, nMin, nMax):
944
+ """
945
+ Set the number of rows to distribute tool groups over.
946
+
947
+ Tool groups can be distributed over a variable number of rows. The way in which
948
+ groups are assigned to rows is not specificed, and the order of groups may
949
+ change, but they will be distributed in such a way as to minimise the overall
950
+ size of the tool bar.
951
+
952
+ :param `nMin`: the minimum number of rows to use;
953
+ :param `nMax`: the maximum number of rows to use (defaults to `nMin`).
954
+
955
+ """
956
+
957
+ if nMax == -1:
958
+ nMax = nMin
959
+
960
+ if nMin < 1:
961
+ raise Exception("Exception")
962
+ if nMin > nMax:
963
+ raise Exception("Exception")
964
+
965
+ self._nrows_min = nMin
966
+ self._nrows_max = nMax
967
+
968
+ self._sizes = []
969
+ self._sizes = [wx.Size(0, 0) for i in range(self._nrows_min, self._nrows_max + 1)]
970
+
971
+ self.Realize()
972
+
973
+
974
+ def Realize(self):
975
+ """
976
+ Calculates tool layouts and positions.
977
+
978
+ Must be called after tools are added to the tool bar, as otherwise the newly
979
+ added tools will not be displayed.
980
+
981
+ :note: Reimplemented from :class:`~wx.lib.agw.ribbon.control.RibbonControl`.
982
+ """
983
+
984
+ if self._art is None:
985
+ return False
986
+
987
+ # Calculate the size of each group and the position/size of each tool
988
+ temp_dc = wx.MemoryDC()
989
+ group_count = len(self._groups)
990
+
991
+ for group in self._groups:
992
+
993
+ prev = None
994
+ tool_count = len(group.tools)
995
+ tallest = 0
996
+
997
+ for t, tool in enumerate(group.tools):
998
+
999
+ tool.size, tool.dropdown = self._art.GetToolSize(temp_dc, self, tool.bitmap.GetSize(), tool.kind, t==0, t==(tool_count-1))
1000
+ tool.state = tool.state & ~RIBBON_TOOLBAR_TOOL_DISABLED
1001
+ if t == 0:
1002
+ tool.state |= RIBBON_TOOLBAR_TOOL_FIRST
1003
+ if t == tool_count - 1:
1004
+ tool.state |= RIBBON_TOOLBAR_TOOL_LAST
1005
+ if tool.size.GetHeight() > tallest:
1006
+ tallest = tool.size.GetHeight()
1007
+ if prev:
1008
+ tool.position = wx.Point(*prev.position)
1009
+ tool.position.x += prev.size.x
1010
+ else:
1011
+ tool.position = wx.Point(0, 0)
1012
+
1013
+ prev = tool
1014
+
1015
+ if tool_count == 0:
1016
+ group.size = wx.Size(0, 0)
1017
+ else:
1018
+ group.size = wx.Size(prev.position.x + prev.size.x, tallest)
1019
+ for tool in group.tools:
1020
+ tool.size.SetHeight(tallest)
1021
+
1022
+ # Calculate the minimum size for each possible number of rows
1023
+ sep = self._art.GetMetric(RIBBON_ART_TOOL_GROUP_SEPARATION_SIZE)
1024
+ smallest_area = 10000
1025
+ row_sizes = [wx.Size(0, 0) for i in range(self._nrows_max)]
1026
+ major_axis = ((self._art.GetFlags() & RIBBON_BAR_FLOW_VERTICAL) and [wx.VERTICAL] or [wx.HORIZONTAL])[0]
1027
+ self.SetMinSize(wx.Size(0, 0))
1028
+
1029
+ minSize = wx.Size(10000, 10000)
1030
+
1031
+ # See if we're sizing flexibly (i.e. wrapping), and set min size differently
1032
+ sizingFlexibly = False
1033
+ panel = self.GetParent()
1034
+
1035
+ if isinstance(panel, RibbonPanel) and (panel.GetFlags() & RIBBON_PANEL_FLEXIBLE):
1036
+ sizingFlexibly = True
1037
+
1038
+ # Without this, there will be redundant horizontal space because SetMinSize will
1039
+ # use the smallest possible height (and therefore largest width).
1040
+ if sizingFlexibly:
1041
+ major_axis = wx.HORIZONTAL
1042
+
1043
+ for nrows in range(self._nrows_min, self._nrows_max+1):
1044
+
1045
+ for r in range(nrows):
1046
+ row_sizes[r] = wx.Size(0, 0)
1047
+
1048
+ for g in range(group_count):
1049
+
1050
+ group = self._groups[g]
1051
+ shortest_row = 0
1052
+
1053
+ for r in range(1, nrows):
1054
+ if row_sizes[r].GetWidth() < row_sizes[shortest_row].GetWidth():
1055
+ shortest_row = r
1056
+
1057
+ row_sizes[shortest_row].x += group.size.x + sep
1058
+ if group.size.y > row_sizes[shortest_row].y:
1059
+ row_sizes[shortest_row].y = group.size.y
1060
+
1061
+ size = wx.Size(0, 0)
1062
+
1063
+ for r in range(nrows):
1064
+ if row_sizes[r].GetWidth() != 0:
1065
+ row_sizes[r].DecBy(sep, 0)
1066
+ if row_sizes[r].GetWidth() > size.GetWidth():
1067
+ size.SetWidth(row_sizes[r].GetWidth())
1068
+
1069
+ size.IncBy(0, row_sizes[r].y)
1070
+
1071
+ self._sizes[nrows - self._nrows_min] = size
1072
+
1073
+ if GetSizeInOrientation(size, major_axis) < smallest_area:
1074
+ smallest_area = GetSizeInOrientation(size, major_axis)
1075
+ self.SetMinSize(size)
1076
+
1077
+ if sizingFlexibly:
1078
+ if size.x < minSize.x:
1079
+ minSize.x = size.x
1080
+ if size.y < minSize.y:
1081
+ minSize.y = size.y
1082
+
1083
+ if sizingFlexibly:
1084
+ # Give it the min size in either direction regardless of row,
1085
+ # so that we're able to vary the size of the panel according to
1086
+ # the space the toolbar takes up.
1087
+ self.SetMinSize(minSize)
1088
+
1089
+ # Position the groups
1090
+ dummy_event = wx.SizeEvent(self.GetSize())
1091
+ self.OnSize(dummy_event)
1092
+
1093
+ return True
1094
+
1095
+
1096
+ def OnSize(self, event):
1097
+ """
1098
+ Handles the ``wx.EVT_SIZE`` event for :class:`RibbonToolBar`.
1099
+
1100
+ :param `event`: a :class:`wx.SizeEvent` event to be processed.
1101
+ """
1102
+
1103
+ if self._art is None:
1104
+ return
1105
+
1106
+ # Choose row count with largest possible area
1107
+ size = event.GetSize()
1108
+ row_count = self._nrows_max
1109
+ major_axis = (self._art.GetFlags() & RIBBON_BAR_FLOW_VERTICAL and [wx.VERTICAL] or [wx.HORIZONTAL])[0]
1110
+
1111
+ # See if we're sizing flexibly, and set min size differently
1112
+ sizingFlexibly = False
1113
+ panel = self.GetParent()
1114
+
1115
+ if isinstance(panel, RibbonPanel) and (panel.GetFlags() & RIBBON_PANEL_FLEXIBLE):
1116
+ sizingFlexibly = True
1117
+
1118
+ # Without this, there will be redundant horizontal space because SetMinSize will
1119
+ # use the smallest possible height (and therefore largest width).
1120
+ if sizingFlexibly:
1121
+ major_axis = wx.HORIZONTAL
1122
+
1123
+ bestSize = wx.Size(*self._sizes[0])
1124
+
1125
+ if self._nrows_max != self._nrows_min:
1126
+ area = 0
1127
+ for i in range(self._nrows_max - self._nrows_min + 1):
1128
+ if self._sizes[i].x <= size.x and self._sizes[i].y <= size.y and \
1129
+ GetSizeInOrientation(self._sizes[i], major_axis) > area:
1130
+ area = GetSizeInOrientation(self._sizes[i], major_axis)
1131
+ row_count = self._nrows_min + i
1132
+ bestSize = wx.Size(*self._sizes[i])
1133
+
1134
+ # Assign groups to rows and calculate row widths
1135
+ row_sizes = [wx.Size(0, 0) for i in range(row_count)]
1136
+ sep = self._art.GetMetric(RIBBON_ART_TOOL_GROUP_SEPARATION_SIZE)
1137
+
1138
+ group_count = len(self._groups)
1139
+ for group in self._groups:
1140
+ shortest_row = 0
1141
+ for r in range(1, row_count):
1142
+ if row_sizes[r].GetWidth() < row_sizes[shortest_row].GetWidth():
1143
+ shortest_row = r
1144
+
1145
+ group.position = wx.Point(row_sizes[shortest_row].x, shortest_row)
1146
+ row_sizes[shortest_row].x += group.size.x + sep
1147
+ if group.size.y > row_sizes[shortest_row].y:
1148
+ row_sizes[shortest_row].y = group.size.y
1149
+
1150
+ # Calculate row positions
1151
+ total_height = 0
1152
+ for r in range(row_count):
1153
+ total_height += row_sizes[r].GetHeight()
1154
+
1155
+ rowsep = (size.GetHeight() - total_height) / (row_count + 1)
1156
+ rowypos = [0]*row_count
1157
+ rowypos[0] = rowsep
1158
+ for r in range(1, row_count):
1159
+ rowypos[r] = rowypos[r - 1] + row_sizes[r - 1].GetHeight() + rowsep
1160
+
1161
+ # Set group y positions
1162
+ for group in self._groups:
1163
+ group.position.y = int(rowypos[group.position.y])
1164
+
1165
+
1166
+ def GetBestSizeForParentSize(self, parentSize):
1167
+ """ Finds the best width and height given the parent's width and height. """
1168
+
1169
+ if not self._sizes:
1170
+ return self.GetMinSize()
1171
+
1172
+ # Choose row count with largest possible area
1173
+ size = wx.Size(*parentSize)
1174
+ row_count = self._nrows_max
1175
+ major_axis = (self._art.GetFlags() & RIBBON_BAR_FLOW_VERTICAL and [wx.VERTICAL] or [wx.HORIZONTAL])[0]
1176
+
1177
+ # A toolbar should maximize its width whether vertical or horizontal, so
1178
+ # force the major axis to be horizontal. Without this, there will be
1179
+ # redundant horizontal space.
1180
+ major_axis = wx.HORIZONTAL
1181
+ bestSize = wx.Size(*self._sizes[0])
1182
+
1183
+ if self._nrows_max != self._nrows_min:
1184
+ area = 0
1185
+ for i in range(self._nrows_max - self._nrows_min + 1):
1186
+
1187
+ if self._sizes[i].x <= size.x and self._sizes[i].y <= size.y and \
1188
+ GetSizeInOrientation(self._sizes[i], major_axis) > area:
1189
+ area = GetSizeInOrientation(self._sizes[i], major_axis)
1190
+ row_count = self._nrows_min + i
1191
+ bestSize = wx.Size(*self._sizes[i])
1192
+
1193
+ return bestSize
1194
+
1195
+
1196
+ def DoGetBestSize(self):
1197
+ """
1198
+ Gets the size which best suits the window: for a control, it would be the
1199
+ minimal size which doesn't truncate the control, for a panel - the same size
1200
+ as it would have after a call to `Fit()`.
1201
+
1202
+ :return: An instance of :class:`wx.Size`.
1203
+
1204
+ :note: Overridden from :class:`wx.Control`.
1205
+ """
1206
+
1207
+ return self.GetMinSize()
1208
+
1209
+
1210
+ def OnEraseBackground(self, event):
1211
+ """
1212
+ Handles the ``wx.EVT_ERASE_BACKGROUND`` event for :class:`RibbonToolBar`.
1213
+
1214
+ :param `event`: a :class:`EraseEvent` event to be processed.
1215
+ """
1216
+
1217
+ # All painting done in main paint handler to minimise flicker
1218
+ pass
1219
+
1220
+
1221
+ def OnPaint(self, event):
1222
+ """
1223
+ Handles the ``wx.EVT_PAINT`` event for :class:`RibbonToolBar`.
1224
+
1225
+ :param `event`: a :class:`PaintEvent` event to be processed.
1226
+ """
1227
+
1228
+ dc = wx.AutoBufferedPaintDC(self)
1229
+
1230
+ if self._art is None:
1231
+ return
1232
+
1233
+ self._art.DrawToolBarBackground(dc, self, wx.Rect(0, 0, *self.GetSize()))
1234
+
1235
+ for group in self._groups:
1236
+ tool_count = len(group.tools)
1237
+
1238
+ if tool_count != 0:
1239
+ self._art.DrawToolGroupBackground(dc, self, wx.Rect(group.position, group.size))
1240
+
1241
+ for tool in group.tools:
1242
+ rect = wx.Rect(group.position + tool.position, tool.size)
1243
+
1244
+ if tool.state & RIBBON_TOOLBAR_TOOL_DISABLED:
1245
+ self._art.DrawTool(dc, self, rect, tool.bitmap_disabled, tool.kind, tool.state)
1246
+ else:
1247
+ self._art.DrawTool(dc, self, rect, tool.bitmap, tool.kind, tool.state)
1248
+
1249
+
1250
+ def OnMouseMove(self, event):
1251
+ """
1252
+ Handles the ``wx.EVT_MOTION`` event for :class:`RibbonToolBar`.
1253
+
1254
+ :param `event`: a :class:`MouseEvent` event to be processed.
1255
+ """
1256
+
1257
+ pos = event.GetPosition()
1258
+ new_hover = None
1259
+
1260
+ for group in self._groups:
1261
+
1262
+ if group.position.x <= pos.x and pos.x < group.position.x + group.size.x \
1263
+ and group.position.y <= pos.y and pos.y < group.position.y + group.size.y:
1264
+ pos -= group.position
1265
+
1266
+ for tool in group.tools:
1267
+ if tool.position.x <= pos.x and pos.x < tool.position.x + tool.size.x \
1268
+ and tool.position.y <= pos.y and pos.y < tool.position.y + tool.size.y:
1269
+ pos -= tool.position
1270
+ new_hover = tool
1271
+ break
1272
+ break
1273
+
1274
+ if new_hover and new_hover != self._hover_tool:
1275
+ self.SetToolTip(new_hover.help_string)
1276
+ elif self.GetToolTip() and new_hover != self._hover_tool:
1277
+ self.SetToolTip("")
1278
+
1279
+ if new_hover != self._hover_tool:
1280
+ if self._hover_tool:
1281
+ self._hover_tool.state &= ~(RIBBON_TOOLBAR_TOOL_HOVER_MASK | RIBBON_TOOLBAR_TOOL_ACTIVE_MASK)
1282
+
1283
+ self._hover_tool = new_hover
1284
+
1285
+ if new_hover:
1286
+ what = RIBBON_TOOLBAR_TOOL_NORMAL_HOVERED
1287
+ if new_hover.dropdown.Contains(pos):
1288
+ what = RIBBON_TOOLBAR_TOOL_DROPDOWN_HOVERED
1289
+
1290
+ new_hover.state |= what
1291
+
1292
+ if new_hover == self._active_tool:
1293
+
1294
+ new_hover.state &= ~RIBBON_TOOLBAR_TOOL_ACTIVE_MASK
1295
+ new_hover.state |= (what << 2)
1296
+
1297
+ self.Refresh(False)
1298
+
1299
+ elif self._hover_tool and self._hover_tool.kind == RIBBON_BUTTON_HYBRID:
1300
+ newstate = self._hover_tool.state & ~RIBBON_TOOLBAR_TOOL_HOVER_MASK
1301
+ what = RIBBON_TOOLBAR_TOOL_NORMAL_HOVERED
1302
+
1303
+ if self._hover_tool.dropdown.Contains(pos):
1304
+ what = RIBBON_TOOLBAR_TOOL_DROPDOWN_HOVERED
1305
+
1306
+ newstate |= what
1307
+
1308
+ if newstate != self._hover_tool.state:
1309
+ self._hover_tool.state = newstate
1310
+ if self._hover_tool == self._active_tool:
1311
+ self._hover_tool.state &= ~RIBBON_TOOLBAR_TOOL_ACTIVE_MASK
1312
+ self._hover_tool.state |= (what << 2)
1313
+
1314
+ self.Refresh(False)
1315
+
1316
+
1317
+ def OnMouseDown(self, event):
1318
+ """
1319
+ Handles the ``wx.EVT_LEFT_DOWN`` event for :class:`RibbonToolBar`.
1320
+
1321
+ :param `event`: a :class:`MouseEvent` event to be processed.
1322
+ """
1323
+
1324
+ self.OnMouseMove(event)
1325
+
1326
+ if self._hover_tool:
1327
+ self._active_tool = self._hover_tool
1328
+ self._active_tool.state |= (self._active_tool.state & RIBBON_TOOLBAR_TOOL_HOVER_MASK) << 2
1329
+ self.Refresh(False)
1330
+
1331
+
1332
+ def OnMouseLeave(self, event):
1333
+ """
1334
+ Handles the ``wx.EVT_LEAVE_WINDOW`` event for :class:`RibbonToolBar`.
1335
+
1336
+ :param `event`: a :class:`MouseEvent` event to be processed.
1337
+ """
1338
+
1339
+ if self._hover_tool:
1340
+ self._hover_tool.state &= ~RIBBON_TOOLBAR_TOOL_HOVER_MASK
1341
+ self._hover_tool = None
1342
+ self.Refresh(False)
1343
+
1344
+
1345
+ def OnMouseUp(self, event):
1346
+ """
1347
+ Handles the ``wx.EVT_LEFT_UP`` event for :class:`RibbonToolBar`.
1348
+
1349
+ :param `event`: a :class:`MouseEvent` event to be processed.
1350
+ """
1351
+
1352
+ if self._active_tool:
1353
+ if self._active_tool.state & RIBBON_TOOLBAR_TOOL_ACTIVE_MASK:
1354
+ evt_type = wxEVT_COMMAND_RIBBONTOOL_CLICKED
1355
+ if self._active_tool.state & RIBBON_TOOLBAR_TOOL_DROPDOWN_ACTIVE:
1356
+ evt_type = wxEVT_COMMAND_RIBBONTOOL_DROPDOWN_CLICKED
1357
+
1358
+ notification = RibbonToolBarEvent(evt_type, self._active_tool.id)
1359
+ notification.SetEventObject(self)
1360
+ notification.SetBar(self)
1361
+ self.ProcessEvent(notification)
1362
+
1363
+ if self._active_tool.kind == RIBBON_BUTTON_TOGGLE:
1364
+ self._active_tool.state ^= RIBBON_BUTTONBAR_BUTTON_TOGGLED
1365
+ notification.SetInt(self._active_tool.state & RIBBON_BUTTONBAR_BUTTON_TOGGLED)
1366
+
1367
+ # Notice that m_active_tool could have been reset by the event handler
1368
+ # above so we need to test it again.
1369
+ if self._active_tool:
1370
+ self._active_tool.state &= ~RIBBON_TOOLBAR_TOOL_ACTIVE_MASK
1371
+ self._active_tool = None
1372
+ self.Refresh(False)
1373
+
1374
+
1375
+ def OnMouseEnter(self, event):
1376
+ """
1377
+ Handles the ``wx.EVT_ENTER_WINDOW`` event for :class:`RibbonToolBar`.
1378
+
1379
+ :param `event`: a :class:`MouseEvent` event to be processed.
1380
+ """
1381
+
1382
+ if self._active_tool and not event.LeftIsDown():
1383
+ self._active_tool = None
1384
+
1385
+
1386
+ def GetDefaultBorder(self):
1387
+ """ Returns the default border style for :class:`RibbonToolBar`. """
1388
+
1389
+ return wx.BORDER_NONE
1390
+
1391
+
1392
+ def UpdateWindowUI(self, flags):
1393
+ """
1394
+ This function sends one or more :class:`UpdateUIEvent` to the window.
1395
+
1396
+ The particular implementation depends on the window; for example a :class:`ToolBar` will
1397
+ send an update UI event for each toolbar button, and a :class:`wx.Frame` will send an
1398
+ update UI event for each menubar menu item.
1399
+
1400
+ You can call this function from your application to ensure that your UI is up-to-date
1401
+ at this point (as far as your :class:`UpdateUIEvent` handlers are concerned). This may be
1402
+ necessary if you have called :meth:`UpdateUIEvent.SetMode` or :meth:`UpdateUIEvent.SetUpdateInterval`
1403
+ to limit the overhead that wxWidgets incurs by sending update UI events in idle time.
1404
+
1405
+ :param integer `flags`: should be a bitlist of one or more of ``wx.UPDATE_UI_NONE``,
1406
+ ``wx.UPDATE_UI_RECURSE`` or ``wx.UPDATE_UI_FROMIDLE``.
1407
+
1408
+ If you are calling this function from an `OnInternalIdle` or `OnIdle` function, make sure
1409
+ you pass the ``wx.UPDATE_UI_FROMIDLE`` flag, since this tells the window to only update
1410
+ the UI elements that need to be updated in idle time. Some windows update their elements
1411
+ only when necessary, for example when a menu is about to be shown. The following is an
1412
+ example of how to call :meth:`~RibbonToolBar.UpdateWindowUI` from an idle function::
1413
+
1414
+ def OnInternalIdle(self):
1415
+
1416
+ if wx.UpdateUIEvent.CanUpdate(self):
1417
+ self.UpdateWindowUI(wx.UPDATE_UI_FROMIDLE)
1418
+
1419
+
1420
+
1421
+ .. versionadded:: 0.9.5
1422
+ """
1423
+
1424
+ wx.Control.UpdateWindowUI(self, flags)
1425
+
1426
+ # don't waste time updating state of tools in a hidden toolbar
1427
+ if not self.IsShown():
1428
+ return
1429
+
1430
+ for group in self._groups:
1431
+ for tool in group.tools:
1432
+ id = tool.id
1433
+
1434
+ event = wx.UpdateUIEvent(id)
1435
+ event.SetEventObject(self)
1436
+
1437
+ if self.ProcessWindowEvent(event):
1438
+ if event.GetSetEnabled():
1439
+ self.EnableTool(id, event.GetEnabled())
1440
+ if event.GetSetChecked():
1441
+ self.ToggleTool(id, event.GetChecked())
1442
+