wxPython 4.3.2__cp315-cp315-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 (472) hide show
  1. wx/WebView2Loader.dll +0 -0
  2. wx/__init__.py +22 -0
  3. wx/__init__.pyi +10 -0
  4. wx/__version__.py +9 -0
  5. wx/__version__.pyi +15 -0
  6. wx/_adv.cp315-win_amd64.pyd +0 -0
  7. wx/_aui.cp315-win_amd64.pyd +0 -0
  8. wx/_core.cp315-win_amd64.pyd +0 -0
  9. wx/_dataview.cp315-win_amd64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_amd64.pyd +0 -0
  11. wx/_grid.cp315-win_amd64.pyd +0 -0
  12. wx/_html.cp315-win_amd64.pyd +0 -0
  13. wx/_html2.cp315-win_amd64.pyd +0 -0
  14. wx/_media.cp315-win_amd64.pyd +0 -0
  15. wx/_msw.cp315-win_amd64.pyd +0 -0
  16. wx/_propgrid.cp315-win_amd64.pyd +0 -0
  17. wx/_ribbon.cp315-win_amd64.pyd +0 -0
  18. wx/_richtext.cp315-win_amd64.pyd +0 -0
  19. wx/_stc.cp315-win_amd64.pyd +0 -0
  20. wx/_xml.cp315-win_amd64.pyd +0 -0
  21. wx/_xrc.cp315-win_amd64.pyd +0 -0
  22. wx/adv.py +127 -0
  23. wx/adv.pyi +5931 -0
  24. wx/aui.py +70 -0
  25. wx/aui.pyi +4805 -0
  26. wx/core.py +3417 -0
  27. wx/core.pyi +62949 -0
  28. wx/dataview.py +176 -0
  29. wx/dataview.pyi +3828 -0
  30. wx/gizmos.py +18 -0
  31. wx/glcanvas.py +13 -0
  32. wx/glcanvas.pyi +544 -0
  33. wx/grid.py +237 -0
  34. wx/grid.pyi +5678 -0
  35. wx/html.py +38 -0
  36. wx/html.pyi +3283 -0
  37. wx/html2.py +46 -0
  38. wx/html2.pyi +1301 -0
  39. wx/include/wxPython/sip.h +1938 -0
  40. wx/include/wxPython/wxpy_api.h +418 -0
  41. wx/lib/CDate.py +201 -0
  42. wx/lib/ClickableHtmlWindow.py +57 -0
  43. wx/lib/__init__.py +0 -0
  44. wx/lib/activex.py +178 -0
  45. wx/lib/activexwrapper.py +153 -0
  46. wx/lib/agw/__init__.py +128 -0
  47. wx/lib/agw/advancedsplash.py +563 -0
  48. wx/lib/agw/aquabutton.py +1127 -0
  49. wx/lib/agw/artmanager.py +2110 -0
  50. wx/lib/agw/aui/__init__.py +295 -0
  51. wx/lib/agw/aui/aui_constants.py +2616 -0
  52. wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
  53. wx/lib/agw/aui/aui_utilities.py +648 -0
  54. wx/lib/agw/aui/auibar.py +4045 -0
  55. wx/lib/agw/aui/auibook.py +6288 -0
  56. wx/lib/agw/aui/dockart.py +1198 -0
  57. wx/lib/agw/aui/framemanager.py +10485 -0
  58. wx/lib/agw/aui/tabart.py +2749 -0
  59. wx/lib/agw/aui/tabmdi.py +679 -0
  60. wx/lib/agw/balloontip.py +1157 -0
  61. wx/lib/agw/buttonpanel.py +2787 -0
  62. wx/lib/agw/cubecolourdialog.py +3529 -0
  63. wx/lib/agw/customtreectrl.py +9908 -0
  64. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  65. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  66. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  67. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  68. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  69. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  70. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  71. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  72. wx/lib/agw/data/default_help_text.html +105 -0
  73. wx/lib/agw/flatmenu.py +7392 -0
  74. wx/lib/agw/flatnotebook.py +6669 -0
  75. wx/lib/agw/floatspin.py +1820 -0
  76. wx/lib/agw/fmcustomizedlg.py +535 -0
  77. wx/lib/agw/fmresources.py +407 -0
  78. wx/lib/agw/foldpanelbar.py +2282 -0
  79. wx/lib/agw/fourwaysplitter.py +1130 -0
  80. wx/lib/agw/genericmessagedialog.py +1549 -0
  81. wx/lib/agw/gradientbutton.py +731 -0
  82. wx/lib/agw/hyperlink.py +664 -0
  83. wx/lib/agw/hypertreelist.py +5756 -0
  84. wx/lib/agw/infobar.py +885 -0
  85. wx/lib/agw/knobctrl.py +944 -0
  86. wx/lib/agw/labelbook.py +3028 -0
  87. wx/lib/agw/multidirdialog.py +581 -0
  88. wx/lib/agw/peakmeter.py +1028 -0
  89. wx/lib/agw/persist/__init__.py +188 -0
  90. wx/lib/agw/persist/persist_constants.py +283 -0
  91. wx/lib/agw/persist/persist_handlers.py +2614 -0
  92. wx/lib/agw/persist/persistencemanager.py +863 -0
  93. wx/lib/agw/piectrl.py +1082 -0
  94. wx/lib/agw/pybusyinfo.py +399 -0
  95. wx/lib/agw/pycollapsiblepane.py +940 -0
  96. wx/lib/agw/pygauge.py +570 -0
  97. wx/lib/agw/pyprogress.py +916 -0
  98. wx/lib/agw/ribbon/__init__.py +198 -0
  99. wx/lib/agw/ribbon/art.py +219 -0
  100. wx/lib/agw/ribbon/art_aui.py +1283 -0
  101. wx/lib/agw/ribbon/art_default.py +81 -0
  102. wx/lib/agw/ribbon/art_internal.py +248 -0
  103. wx/lib/agw/ribbon/art_msw.py +2735 -0
  104. wx/lib/agw/ribbon/art_osx.py +52 -0
  105. wx/lib/agw/ribbon/bar.py +1259 -0
  106. wx/lib/agw/ribbon/buttonbar.py +1317 -0
  107. wx/lib/agw/ribbon/control.py +205 -0
  108. wx/lib/agw/ribbon/gallery.py +973 -0
  109. wx/lib/agw/ribbon/page.py +946 -0
  110. wx/lib/agw/ribbon/panel.py +1170 -0
  111. wx/lib/agw/ribbon/toolbar.py +1441 -0
  112. wx/lib/agw/rulerctrl.py +1885 -0
  113. wx/lib/agw/scrolledthumbnail.py +2116 -0
  114. wx/lib/agw/shapedbutton.py +1809 -0
  115. wx/lib/agw/shortcuteditor.py +2642 -0
  116. wx/lib/agw/speedmeter.py +1800 -0
  117. wx/lib/agw/supertooltip.py +1443 -0
  118. wx/lib/agw/thumbnailctrl.py +529 -0
  119. wx/lib/agw/toasterbox.py +1327 -0
  120. wx/lib/agw/ultimatelistctrl.py +13671 -0
  121. wx/lib/agw/xlsgrid.py +2111 -0
  122. wx/lib/agw/zoombar.py +1336 -0
  123. wx/lib/analogclock/__init__.py +140 -0
  124. wx/lib/analogclock/analogclock.py +630 -0
  125. wx/lib/analogclock/helpers.py +986 -0
  126. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  127. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  128. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  129. wx/lib/analogclock/setup.py +490 -0
  130. wx/lib/analogclock/styles.py +47 -0
  131. wx/lib/anchors.py +103 -0
  132. wx/lib/art/__init__.py +4 -0
  133. wx/lib/art/flagart.py +1583 -0
  134. wx/lib/art/img2pyartprov.py +56 -0
  135. wx/lib/busy.py +152 -0
  136. wx/lib/buttons.py +1140 -0
  137. wx/lib/calendar.py +1596 -0
  138. wx/lib/checkbox.py +837 -0
  139. wx/lib/colourchooser/__init__.py +36 -0
  140. wx/lib/colourchooser/canvas.py +145 -0
  141. wx/lib/colourchooser/intl.py +24 -0
  142. wx/lib/colourchooser/pycolourbox.py +89 -0
  143. wx/lib/colourchooser/pycolourchooser.py +626 -0
  144. wx/lib/colourchooser/pycolourslider.py +98 -0
  145. wx/lib/colourchooser/pypalette.py +208 -0
  146. wx/lib/colourdb.py +740 -0
  147. wx/lib/colourselect.py +385 -0
  148. wx/lib/colourutils.py +118 -0
  149. wx/lib/combotreebox.py +944 -0
  150. wx/lib/delayedresult.py +420 -0
  151. wx/lib/dialogs.py +510 -0
  152. wx/lib/docview.py +3210 -0
  153. wx/lib/dragscroller.py +79 -0
  154. wx/lib/editor/README.txt +77 -0
  155. wx/lib/editor/__init__.py +24 -0
  156. wx/lib/editor/editor.py +974 -0
  157. wx/lib/editor/images.py +15 -0
  158. wx/lib/editor/selection.py +44 -0
  159. wx/lib/embeddedimage.py +76 -0
  160. wx/lib/eventStack.py +136 -0
  161. wx/lib/eventwatcher.py +440 -0
  162. wx/lib/evtmgr.py +521 -0
  163. wx/lib/expando.py +393 -0
  164. wx/lib/fancytext.py +494 -0
  165. wx/lib/filebrowsebutton.py +461 -0
  166. wx/lib/flashwin.py +262 -0
  167. wx/lib/flashwin_old.py +651 -0
  168. wx/lib/floatcanvas/FCEvents.py +53 -0
  169. wx/lib/floatcanvas/FCObjects.py +2910 -0
  170. wx/lib/floatcanvas/FloatCanvas.py +1025 -0
  171. wx/lib/floatcanvas/GUIMode.py +396 -0
  172. wx/lib/floatcanvas/NavCanvas.py +162 -0
  173. wx/lib/floatcanvas/Resources.py +319 -0
  174. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  175. wx/lib/floatcanvas/Utilities/BBox.py +313 -0
  176. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  177. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  178. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  179. wx/lib/floatcanvas/__init__.py +124 -0
  180. wx/lib/foldmenu.py +89 -0
  181. wx/lib/gestures.py +310 -0
  182. wx/lib/gizmos/__init__.py +18 -0
  183. wx/lib/gizmos/dynamicsash.py +1202 -0
  184. wx/lib/gizmos/ledctrl.py +299 -0
  185. wx/lib/gizmos/treelistctrl.py +87 -0
  186. wx/lib/graphics.py +1942 -0
  187. wx/lib/gridmovers.py +516 -0
  188. wx/lib/iewin.py +249 -0
  189. wx/lib/iewin_old.py +894 -0
  190. wx/lib/imagebrowser.py +853 -0
  191. wx/lib/imageutils.py +163 -0
  192. wx/lib/infoframe.py +490 -0
  193. wx/lib/inspection.py +1254 -0
  194. wx/lib/intctrl.py +990 -0
  195. wx/lib/itemspicker.py +256 -0
  196. wx/lib/langlistctrl.py +480 -0
  197. wx/lib/layoutf.py +271 -0
  198. wx/lib/masked/__init__.py +27 -0
  199. wx/lib/masked/combobox.py +839 -0
  200. wx/lib/masked/ctrl.py +108 -0
  201. wx/lib/masked/ipaddrctrl.py +241 -0
  202. wx/lib/masked/maskededit.py +7262 -0
  203. wx/lib/masked/numctrl.py +2000 -0
  204. wx/lib/masked/textctrl.py +465 -0
  205. wx/lib/masked/timectrl.py +1465 -0
  206. wx/lib/mixins/__init__.py +17 -0
  207. wx/lib/mixins/grid.py +47 -0
  208. wx/lib/mixins/gridlabelrenderer.py +277 -0
  209. wx/lib/mixins/imagelist.py +77 -0
  210. wx/lib/mixins/inspection.py +184 -0
  211. wx/lib/mixins/listctrl.py +893 -0
  212. wx/lib/mixins/rubberband.py +403 -0
  213. wx/lib/mixins/treemixin.py +678 -0
  214. wx/lib/msgpanel.py +95 -0
  215. wx/lib/multisash.py +746 -0
  216. wx/lib/myole4ax.idl +178 -0
  217. wx/lib/myole4ax.tlb +0 -0
  218. wx/lib/newevent.py +229 -0
  219. wx/lib/newevent.pyi +25 -0
  220. wx/lib/nvdlg.py +156 -0
  221. wx/lib/ogl/__init__.py +13 -0
  222. wx/lib/ogl/basic.py +3989 -0
  223. wx/lib/ogl/bmpshape.py +86 -0
  224. wx/lib/ogl/canvas.py +467 -0
  225. wx/lib/ogl/composit.py +1576 -0
  226. wx/lib/ogl/diagram.py +230 -0
  227. wx/lib/ogl/divided.py +482 -0
  228. wx/lib/ogl/drawn.py +898 -0
  229. wx/lib/ogl/lines.py +1809 -0
  230. wx/lib/ogl/oglmisc.py +607 -0
  231. wx/lib/pdfviewer/__init__.py +113 -0
  232. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  233. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  234. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  235. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  236. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  237. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  238. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  239. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  240. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  241. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  242. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  243. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  244. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  245. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  246. wx/lib/pdfviewer/buttonpanel.py +285 -0
  247. wx/lib/pdfviewer/images.py +240 -0
  248. wx/lib/pdfviewer/viewer.py +1118 -0
  249. wx/lib/pdfwin.py +295 -0
  250. wx/lib/pdfwin_old.py +789 -0
  251. wx/lib/platebtn.py +789 -0
  252. wx/lib/plot/CHANGELOG.md +150 -0
  253. wx/lib/plot/README.md +16 -0
  254. wx/lib/plot/__init__.py +46 -0
  255. wx/lib/plot/__main__.py +5 -0
  256. wx/lib/plot/examples/__init__.py +0 -0
  257. wx/lib/plot/examples/demo.py +1010 -0
  258. wx/lib/plot/examples/simple_example.py +56 -0
  259. wx/lib/plot/plotcanvas.py +2985 -0
  260. wx/lib/plot/polyobjects.py +1524 -0
  261. wx/lib/plot/utils.py +334 -0
  262. wx/lib/popupctl.py +251 -0
  263. wx/lib/printout.py +1155 -0
  264. wx/lib/progressindicator.py +151 -0
  265. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  266. wx/lib/pubsub/README_WxPython.txt +22 -0
  267. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  268. wx/lib/pubsub/__init__.py +25 -0
  269. wx/lib/pubsub/core/__init__.py +92 -0
  270. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  271. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  272. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  273. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  274. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  275. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  276. wx/lib/pubsub/core/callables.py +198 -0
  277. wx/lib/pubsub/core/imp2.py +62 -0
  278. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  279. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  280. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  281. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  282. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  283. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  284. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
  285. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  286. wx/lib/pubsub/core/listener.py +40 -0
  287. wx/lib/pubsub/core/listenerbase.py +185 -0
  288. wx/lib/pubsub/core/notificationmgr.py +185 -0
  289. wx/lib/pubsub/core/publisherbase.py +189 -0
  290. wx/lib/pubsub/core/topicargspec.py +77 -0
  291. wx/lib/pubsub/core/topicdefnprovider.py +631 -0
  292. wx/lib/pubsub/core/topicexc.py +72 -0
  293. wx/lib/pubsub/core/topicmgr.py +454 -0
  294. wx/lib/pubsub/core/topicobj.py +472 -0
  295. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  296. wx/lib/pubsub/core/topicutils.py +119 -0
  297. wx/lib/pubsub/core/treeconfig.py +21 -0
  298. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  299. wx/lib/pubsub/core/weakmethod.py +102 -0
  300. wx/lib/pubsub/policies.py +24 -0
  301. wx/lib/pubsub/pub.py +199 -0
  302. wx/lib/pubsub/setuparg1.py +47 -0
  303. wx/lib/pubsub/setupkwargs.py +29 -0
  304. wx/lib/pubsub/utils/__init__.py +27 -0
  305. wx/lib/pubsub/utils/exchandling.py +100 -0
  306. wx/lib/pubsub/utils/misc.py +99 -0
  307. wx/lib/pubsub/utils/notification.py +331 -0
  308. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  309. wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
  310. wx/lib/pydocview.py +3300 -0
  311. wx/lib/rcsizer.py +227 -0
  312. wx/lib/resizewidget.py +357 -0
  313. wx/lib/scrolledpanel.py +243 -0
  314. wx/lib/sheet.py +350 -0
  315. wx/lib/sized_controls.py +691 -0
  316. wx/lib/softwareupdate.py +355 -0
  317. wx/lib/splitter.py +925 -0
  318. wx/lib/statbmp.py +199 -0
  319. wx/lib/stattext.py +321 -0
  320. wx/lib/throbber.py +424 -0
  321. wx/lib/ticker.py +306 -0
  322. wx/lib/ticker_xrc.py +48 -0
  323. wx/lib/utils.py +89 -0
  324. wx/lib/wordwrap.py +97 -0
  325. wx/lib/wxcairo/__init__.py +139 -0
  326. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  327. wx/lib/wxcairo/wx_pycairo.py +455 -0
  328. wx/lib/wxpTag.py +274 -0
  329. wx/libcairo-2.dll +0 -0
  330. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  376. wx/media.py +30 -0
  377. wx/media.pyi +272 -0
  378. wx/msw.py +16 -0
  379. wx/msw.pyi +91 -0
  380. wx/propgrid.py +498 -0
  381. wx/propgrid.pyi +7427 -0
  382. wx/py/CHANGES.txt +796 -0
  383. wx/py/Py.ico +0 -0
  384. wx/py/PyAlaCarte.py +34 -0
  385. wx/py/PyAlaMode.py +34 -0
  386. wx/py/PyAlaModeTest.py +33 -0
  387. wx/py/PyCrust.ico +0 -0
  388. wx/py/PyCrust.py +78 -0
  389. wx/py/PyCrust_16.png +0 -0
  390. wx/py/PyCrust_32.png +0 -0
  391. wx/py/PyFilling.py +35 -0
  392. wx/py/PyShell.py +78 -0
  393. wx/py/PySlices.ico +0 -0
  394. wx/py/PySlices.py +98 -0
  395. wx/py/PySlicesShell.py +94 -0
  396. wx/py/PySlices_16.png +0 -0
  397. wx/py/PySlices_32.png +0 -0
  398. wx/py/PyWrap.py +52 -0
  399. wx/py/README.txt +77 -0
  400. wx/py/__init__.py +20 -0
  401. wx/py/buffer.py +136 -0
  402. wx/py/crust.py +403 -0
  403. wx/py/crustslices.py +403 -0
  404. wx/py/dispatcher.py +259 -0
  405. wx/py/document.py +37 -0
  406. wx/py/editor.py +844 -0
  407. wx/py/editwindow.py +316 -0
  408. wx/py/filling.py +358 -0
  409. wx/py/frame.py +976 -0
  410. wx/py/images.py +212 -0
  411. wx/py/interpreter.py +161 -0
  412. wx/py/introspect.py +402 -0
  413. wx/py/magic.py +98 -0
  414. wx/py/parse.py +134 -0
  415. wx/py/path.py +36 -0
  416. wx/py/pseudo.py +99 -0
  417. wx/py/shell.py +1579 -0
  418. wx/py/sliceshell.py +3805 -0
  419. wx/py/tests/test_interpreter.py +71 -0
  420. wx/py/tests/test_introspect.py +810 -0
  421. wx/py/tests/test_pseudo.py +70 -0
  422. wx/py/tests/test_version.py +36 -0
  423. wx/py/tests/testall.py +22 -0
  424. wx/py/version.py +7 -0
  425. wx/py.typed +0 -0
  426. wx/ribbon.py +48 -0
  427. wx/ribbon.pyi +3099 -0
  428. wx/richtext.py +141 -0
  429. wx/richtext.pyi +13581 -0
  430. wx/siplib.cp315-win_amd64.pyd +0 -0
  431. wx/siplib.pyi +19 -0
  432. wx/stc.py +59 -0
  433. wx/stc.pyi +9918 -0
  434. wx/svg/__init__.py +363 -0
  435. wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
  436. wx/tools/__init__.py +18 -0
  437. wx/tools/dbg.py +268 -0
  438. wx/tools/genaxmodule.py +50 -0
  439. wx/tools/helpviewer.py +92 -0
  440. wx/tools/img2img.py +85 -0
  441. wx/tools/img2png.py +54 -0
  442. wx/tools/img2py.py +306 -0
  443. wx/tools/img2xpm.py +54 -0
  444. wx/tools/pywxrc.py +951 -0
  445. wx/tools/wxget.py +254 -0
  446. wx/tools/wxget_docs_demo.py +183 -0
  447. wx/wxbase334u_net_vc140_x64.dll +0 -0
  448. wx/wxbase334u_vc140_x64.dll +0 -0
  449. wx/wxbase334u_xml_vc140_x64.dll +0 -0
  450. wx/wxmsw334u_adv_vc140_x64.dll +0 -0
  451. wx/wxmsw334u_aui_vc140_x64.dll +0 -0
  452. wx/wxmsw334u_core_vc140_x64.dll +0 -0
  453. wx/wxmsw334u_gl_vc140_x64.dll +0 -0
  454. wx/wxmsw334u_html_vc140_x64.dll +0 -0
  455. wx/wxmsw334u_media_vc140_x64.dll +0 -0
  456. wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
  457. wx/wxmsw334u_qa_vc140_x64.dll +0 -0
  458. wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
  459. wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
  460. wx/wxmsw334u_stc_vc140_x64.dll +0 -0
  461. wx/wxmsw334u_webview_vc140_x64.dll +0 -0
  462. wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
  463. wx/xml.py +18 -0
  464. wx/xml.pyi +728 -0
  465. wx/xrc.py +68 -0
  466. wx/xrc.pyi +896 -0
  467. wxpython-4.3.2.dist-info/METADATA +71 -0
  468. wxpython-4.3.2.dist-info/RECORD +472 -0
  469. wxpython-4.3.2.dist-info/WHEEL +5 -0
  470. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  471. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  472. wxpython-4.3.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,986 @@
1
+ # AnalogClock's base classes
2
+ # E. A. Tacao <e.a.tacao |at| estadao.com.br>
3
+ # http://j.domaindlx.com/elements28/wxpython/
4
+ # 15 Fev 2006, 22:00 GMT-03:00
5
+ # Distributed under the wxWidgets license.
6
+ # Tags: phoenix-port
7
+
8
+ from time import strftime, localtime
9
+ import math
10
+ import wx
11
+
12
+ from .styles import *
13
+
14
+ #----------------------------------------------------------------------
15
+
16
+ _targets = [HOUR, MINUTE, SECOND]
17
+
18
+ #----------------------------------------------------------------------
19
+
20
+ class Element:
21
+ """Base class for face, hands and tick marks."""
22
+
23
+ def __init__(self, idx=0, pos=None, size=None, offset=0, clocksize=None,
24
+ scale=1, rotate=False, kind=""):
25
+
26
+ self.idx = idx
27
+ self.pos = pos
28
+ self.size = size
29
+ self.offset = offset
30
+ self.clocksize = clocksize
31
+ self.scale = scale
32
+ self.rotate = rotate
33
+ self.kind = kind
34
+
35
+ self.text = None
36
+ self.angfac = [6, 30][self.kind == "hours"]
37
+
38
+
39
+ def _pol2rect(self, m, t):
40
+ return int(m * math.cos(math.radians(t))), int(m * math.sin(math.radians(t)))
41
+
42
+
43
+ def _rect2pol(self, x, y):
44
+ return math.hypot(x, y), math.degrees(math.atan2(y, x))
45
+
46
+
47
+ def DrawRotated(self, dc, offset=0):
48
+ pass
49
+
50
+
51
+ def DrawStraight(self, dc, offset=0):
52
+ pass
53
+
54
+
55
+ def Draw(self, dc, offset=0):
56
+ if self.rotate:
57
+ self.DrawRotated(dc, offset)
58
+ else:
59
+ self.DrawStraight(dc, offset)
60
+
61
+
62
+ def RecalcCoords(self, clocksize, centre, scale):
63
+ pass
64
+
65
+
66
+ def GetSize(self):
67
+ return self.size
68
+
69
+
70
+ def GetOffset(self):
71
+ return self.offset
72
+
73
+
74
+ def GetIsRotated(self, rotate):
75
+ return self.rotate
76
+
77
+
78
+ def GetMaxSize(self, scale=1):
79
+ return self.size * scale
80
+
81
+
82
+ def GetScale(self):
83
+ return self.scale
84
+
85
+
86
+ def SetIsRotated(self, rotate):
87
+ self.rotate = rotate
88
+
89
+
90
+ def GetMaxSize(self, scale=1):
91
+ return self.size * scale
92
+
93
+
94
+ def GetPolygon(self):
95
+ return self.polygon
96
+
97
+
98
+ def SetPosition(self, pos):
99
+ self.pos = pos
100
+
101
+
102
+ def SetSize(self, size):
103
+ self.size = size
104
+
105
+
106
+ def SetOffset(self, offset):
107
+ self.offset = offset
108
+
109
+
110
+ def SetClockSize(self, clocksize):
111
+ self.clocksize = clocksize
112
+
113
+
114
+ def SetScale(self, scale):
115
+ self.scale = scale
116
+
117
+
118
+ def SetIsRotated(self, rotate):
119
+ self.rotate = rotate
120
+
121
+
122
+ def SetPolygon(self, polygon):
123
+ self.polygon = polygon
124
+
125
+ #----------------------------------------------------------------------
126
+
127
+ class ElementWithDyer(Element):
128
+ """Base class for clock face and hands."""
129
+
130
+ def __init__(self, **kwargs):
131
+ self.dyer = kwargs.pop("dyer", Dyer())
132
+ Element.__init__(self, **kwargs)
133
+
134
+
135
+ def GetFillColour(self):
136
+ return self.dyer.GetFillColour()
137
+
138
+
139
+ def GetBorderColour(self):
140
+ return self.dyer.GetBorderColour()
141
+
142
+
143
+ def GetBorderWidth(self):
144
+ return self.dyer.GetBorderWidth()
145
+
146
+
147
+ def GetShadowColour(self):
148
+ return self.dyer.GetShadowColour()
149
+
150
+
151
+ def SetFillColour(self, colour):
152
+ self.dyer.SetFillColour(colour)
153
+
154
+
155
+ def SetBorderColour(self, colour):
156
+ self.dyer.SetBorderColour(colour)
157
+
158
+
159
+ def SetBorderWidth(self, width):
160
+ self.dyer.SetBorderWidth(width)
161
+
162
+
163
+ def SetShadowColour(self, colour):
164
+ self.dyer.SetShadowColour(colour)
165
+
166
+ #----------------------------------------------------------------------
167
+
168
+ class Face(ElementWithDyer):
169
+ """Holds info about the clock face."""
170
+
171
+ def __init__(self, **kwargs):
172
+ ElementWithDyer.__init__(self, **kwargs)
173
+
174
+
175
+ def Draw(self, dc):
176
+ self.dyer.Select(dc)
177
+ dc.DrawCircle(self.pos.x, self.pos.y, int(self.radius))
178
+
179
+
180
+ def RecalcCoords(self, clocksize, centre, scale):
181
+ self.radius = min(clocksize.Get()) / 2. - self.dyer.width / 2.
182
+ self.pos = centre
183
+
184
+ #----------------------------------------------------------------------
185
+
186
+ class Hand(ElementWithDyer):
187
+ """Holds info about a clock hand."""
188
+
189
+ def __init__(self, **kwargs):
190
+ self.lenfac = kwargs.pop("lenfac")
191
+ ElementWithDyer.__init__(self, **kwargs)
192
+
193
+ self.SetPolygon([[-1, 0], [0, -1], [1, 0], [0, 4]])
194
+
195
+
196
+ def Draw(self, dc, end, offset=0):
197
+ radius, centre, r = end
198
+ angle = math.degrees(r)
199
+ polygon = self.polygon[:]
200
+ vscale = radius / max([y for x, y in polygon])
201
+
202
+ for i, (x, y) in enumerate(polygon):
203
+ x *= self.scale * self.size
204
+ y *= vscale * self.lenfac
205
+ m, t = self._rect2pol(x, y)
206
+ polygon[i] = self._pol2rect(m, t - angle)
207
+
208
+ dc.DrawPolygon(polygon, int(centre.x + offset), int(centre.y + offset))
209
+
210
+
211
+ def RecalcCoords(self, clocksize, centre, scale):
212
+ self.pos = centre
213
+ self.scale = scale
214
+
215
+ #----------------------------------------------------------------------
216
+
217
+ class TickSquare(Element):
218
+ """Holds info about a tick mark."""
219
+
220
+ def __init__(self, **kwargs):
221
+ Element.__init__(self, **kwargs)
222
+
223
+
224
+ def Draw(self, dc, offset=0):
225
+ width = height = self.size * self.scale
226
+ x = self.pos.x - width / 2.
227
+ y = self.pos.y - height / 2.
228
+
229
+ dc.DrawRectangle(int(x + offset), int(y + offset), int(width), int(height))
230
+
231
+ #----------------------------------------------------------------------
232
+
233
+ class TickCircle(Element):
234
+ """Holds info about a tick mark."""
235
+
236
+ def __init__(self, **kwargs):
237
+ Element.__init__(self, **kwargs)
238
+
239
+
240
+ def Draw(self, dc, offset=0):
241
+ radius = self.size * self.scale / 2.
242
+ x = self.pos.x
243
+ y = self.pos.y
244
+
245
+ dc.DrawCircle(int(x + offset), int(y + offset), int(radius))
246
+
247
+ #----------------------------------------------------------------------
248
+
249
+ class TickPoly(Element):
250
+ """Holds info about a tick mark."""
251
+
252
+ def __init__(self, **kwargs):
253
+ Element.__init__(self, **kwargs)
254
+
255
+ self.SetPolygon([[0, 1], [1, 0], [2, 1], [1, 5]])
256
+
257
+
258
+ def _calcPolygon(self):
259
+ width = max([x for x, y in self.polygon])
260
+ height = max([y for x, y in self.polygon])
261
+ tscale = self.size / max(width, height) * self.scale
262
+ polygon = [(x * tscale, y * tscale) for x, y in self.polygon]
263
+
264
+ width = max([x for x, y in polygon])
265
+ height = max([y for x, y in polygon])
266
+
267
+ return polygon, width, height
268
+
269
+
270
+ def DrawStraight(self, dc, offset=0):
271
+ polygon, width, height = self._calcPolygon()
272
+
273
+ x = self.pos.x - width / 2.
274
+ y = self.pos.y - height / 2.
275
+
276
+ dc.DrawPolygon(polygon, int(x + offset), int(y + offset))
277
+
278
+
279
+ def DrawRotated(self, dc, offset=0):
280
+ polygon, width, height = self._calcPolygon()
281
+
282
+ angle = 360 - self.angfac * (self.idx + 1)
283
+ r = math.radians(angle)
284
+
285
+ for i in range(len(polygon)):
286
+ m, t = self._rect2pol(*polygon[i])
287
+ t -= angle
288
+ polygon[i] = self._pol2rect(m, t)
289
+
290
+ x = self.pos.x - math.cos(r) * width / 2. - math.sin(r) * height / 2.
291
+ y = self.pos.y - math.cos(r) * height / 2. + math.sin(r) * width / 2.
292
+
293
+ dc.DrawPolygon(polygon, int(x + offset), int(y + offset))
294
+
295
+ #----------------------------------------------------------------------
296
+
297
+ class TickDecimal(Element):
298
+ """Holds info about a tick mark."""
299
+
300
+ def __init__(self, **kwargs):
301
+ Element.__init__(self, **kwargs)
302
+
303
+ self.text = "%s" % (self.idx + 1)
304
+
305
+
306
+ def DrawStraight(self, dc, offset=0):
307
+ width, height = dc.GetTextExtent(self.text)
308
+
309
+ x = self.pos.x - width / 2.
310
+ y = self.pos.y - height / 2.
311
+
312
+ dc.DrawText(self.text, int(x + offset), int(y + offset))
313
+
314
+
315
+ def DrawRotated(self, dc, offset=0):
316
+ width, height = dc.GetTextExtent(self.text)
317
+
318
+ angle = 360 - self.angfac * (self.idx + 1)
319
+ r = math.radians(angle)
320
+
321
+ x = self.pos.x - math.cos(r) * width / 2. - math.sin(r) * height / 2.
322
+ y = self.pos.y - math.cos(r) * height / 2. + math.sin(r) * width / 2.
323
+
324
+ dc.DrawRotatedText(self.text, int(x + offset), int(y + offset), int(angle))
325
+
326
+
327
+ #----------------------------------------------------------------------
328
+
329
+ class TickRoman(TickDecimal):
330
+ """Holds info about a tick mark."""
331
+
332
+ def __init__(self, **kwargs):
333
+ TickDecimal.__init__(self, **kwargs)
334
+
335
+ self.text = ["I","II","III","IV","V", \
336
+ "VI","VII","VIII","IX","X", \
337
+ "XI","XII","XIII","XIV","XV", \
338
+ "XVI","XVII","XVIII","XIX","XX", \
339
+ "XXI","XXII","XXIII","XXIV","XXV", \
340
+ "XXVI","XXVII","XXVIII","XXIX","XXX", \
341
+ "XXXI","XXXII","XXXIII","XXXIV","XXXV", \
342
+ "XXXVI","XXXVII","XXXVIII","XXXIX","XL", \
343
+ "XLI","XLII","XLIII","XLIV","XLV", \
344
+ "XLVI","XLVII","XLVIII","XLIX","L", \
345
+ "LI","LII","LIII","LIV","LV", \
346
+ "LVI","LVII","LVIII","LIX","LX"][self.idx]
347
+
348
+ #----------------------------------------------------------------------
349
+
350
+ class TickBinary(TickDecimal):
351
+ """Holds info about a tick mark."""
352
+
353
+ def __init__(self, **kwargs):
354
+ TickDecimal.__init__(self, **kwargs)
355
+
356
+ def d2b(n, b=""):
357
+ while n > 0:
358
+ b = str(n % 2) + b; n = n >> 1
359
+ return b.zfill(4)
360
+
361
+ self.text = d2b(self.idx + 1)
362
+
363
+ #----------------------------------------------------------------------
364
+
365
+ class TickHex(TickDecimal):
366
+ """Holds info about a tick mark."""
367
+
368
+ def __init__(self, **kwargs):
369
+ TickDecimal.__init__(self, **kwargs)
370
+
371
+ self.text = hex(self.idx + 1)[2:].upper()
372
+
373
+ #----------------------------------------------------------------------
374
+
375
+ class TickNone(Element):
376
+ """Holds info about a tick mark."""
377
+
378
+ def __init__(self, **kwargs):
379
+ Element.__init__(self, **kwargs)
380
+
381
+
382
+ def Draw(self, dc, offset=0):
383
+ pass
384
+
385
+ #----------------------------------------------------------------------
386
+
387
+ class Dyer:
388
+ """Stores info about colours and borders of clock Elements."""
389
+
390
+ def __init__(self, border=None, width=0, fill=None, shadow=None):
391
+ """
392
+ self.border (wx.Colour) border colour
393
+ self.width (int) border width
394
+ self.fill (wx.Colour) fill colour
395
+ self.shadow (wx.Colour) shadow colour
396
+ """
397
+
398
+ self.border = border or \
399
+ wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
400
+ self.fill = fill or \
401
+ wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
402
+ self.shadow = shadow or \
403
+ wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DSHADOW)
404
+ self.width = width
405
+
406
+
407
+ def Select(self, dc, shadow=False):
408
+ """Selects the current settings into the dc."""
409
+
410
+ if not shadow:
411
+ dc.SetPen(wx.Pen(self.border, self.width, wx.PENSTYLE_SOLID))
412
+ dc.SetBrush(wx.Brush(self.fill, wx.BRUSHSTYLE_SOLID))
413
+ dc.SetTextForeground(self.fill)
414
+ else:
415
+ dc.SetPen(wx.Pen(self.shadow, self.width, wx.PENSTYLE_SOLID))
416
+ dc.SetBrush(wx.Brush(self.shadow, wx.BRUSHSTYLE_SOLID))
417
+ dc.SetTextForeground(self.shadow)
418
+
419
+
420
+ def GetFillColour(self):
421
+ return self.fill
422
+
423
+
424
+ def GetBorderColour(self):
425
+ return self.border
426
+
427
+
428
+ def GetBorderWidth(self):
429
+ return self.width
430
+
431
+
432
+ def GetShadowColour(self):
433
+ return self.shadow
434
+
435
+
436
+ def SetFillColour(self, colour):
437
+ self.fill = colour
438
+
439
+
440
+ def SetBorderColour(self, colour):
441
+ self.border = colour
442
+
443
+
444
+ def SetBorderWidth(self, width):
445
+ self.width = width
446
+
447
+
448
+ def SetShadowColour(self, colour):
449
+ self.shadow = colour
450
+
451
+ #----------------------------------------------------------------------
452
+
453
+ class HandSet:
454
+ """Manages the set of hands."""
455
+
456
+ def __init__(self, parent, h, m, s):
457
+ self.parent = parent
458
+
459
+ self.hands = [h, m, s]
460
+ self.radius = 1
461
+ self.centre = wx.Point(1, 1)
462
+
463
+
464
+ def _draw(self, dc, shadow=False):
465
+ ends = [int(x) for x in strftime("%I %M %S", localtime()).split()]
466
+
467
+ flags = [self.parent.clockStyle & flag \
468
+ for flag in self.parent.allHandStyles]
469
+
470
+ a_hand = self.hands[0]
471
+
472
+ if shadow:
473
+ offset = self.parent.shadowOffset * a_hand.GetScale()
474
+ else:
475
+ offset = 0
476
+
477
+ for i, hand in enumerate(self.hands):
478
+ # Is this hand supposed to be drawn?
479
+ if flags[i]:
480
+ idx = ends[i]
481
+ # Is this the hours hand?
482
+ if i == 0:
483
+ idx = idx * 5 + ends[1] / 12 - 1
484
+ # else prevent exceptions on leap seconds
485
+ elif idx <= 0 or idx > 60:
486
+ idx = 59
487
+ # and adjust idx offset for minutes and non-leap seconds
488
+ else:
489
+ idx = idx - 1
490
+ angle = math.radians(180 - 6 * (idx + 1))
491
+
492
+ hand.dyer.Select(dc, shadow)
493
+ hand.Draw(dc, (self.radius, self.centre, angle), offset)
494
+
495
+
496
+ def Draw(self, dc):
497
+ if self.parent.clockStyle & SHOW_SHADOWS:
498
+ self._draw(dc, True)
499
+ self._draw(dc)
500
+
501
+
502
+ def RecalcCoords(self, clocksize, centre, scale):
503
+ self.centre = centre
504
+ [hand.RecalcCoords(clocksize, centre, scale) for hand in self.hands]
505
+
506
+
507
+ def SetMaxRadius(self, radius):
508
+ self.radius = radius
509
+
510
+
511
+ def GetSize(self, target):
512
+ r = []
513
+ for i, hand in enumerate(self.hands):
514
+ if _targets[i] & target:
515
+ r.append(hand.GetSize())
516
+ return tuple(r)
517
+
518
+
519
+ def GetFillColour(self, target):
520
+ r = []
521
+ for i, hand in enumerate(self.hands):
522
+ if _targets[i] & target:
523
+ r.append(hand.GetFillColour())
524
+ return tuple(r)
525
+
526
+
527
+ def GetBorderColour(self, target):
528
+ r = []
529
+ for i, hand in enumerate(self.hands):
530
+ if _targets[i] & target:
531
+ r.append(hand.GetBorderColour())
532
+ return tuple(r)
533
+
534
+
535
+ def GetBorderWidth(self, target):
536
+ r = []
537
+ for i, hand in enumerate(self.hands):
538
+ if _targets[i] & target:
539
+ r.append(hand.GetBorderWidth())
540
+ return tuple(r)
541
+
542
+
543
+ def GetShadowColour(self):
544
+ r = []
545
+ for i, hand in enumerate(self.hands):
546
+ if _targets[i] & target:
547
+ r.append(hand.GetShadowColour())
548
+ return tuple(r)
549
+
550
+
551
+ def SetSize(self, size, target):
552
+ for i, hand in enumerate(self.hands):
553
+ if _targets[i] & target:
554
+ hand.SetSize(size)
555
+
556
+
557
+ def SetFillColour(self, colour, target):
558
+ for i, hand in enumerate(self.hands):
559
+ if _targets[i] & target:
560
+ hand.SetFillColour(colour)
561
+
562
+
563
+ def SetBorderColour(self, colour, target):
564
+ for i, hand in enumerate(self.hands):
565
+ if _targets[i] & target:
566
+ hand.SetBorderColour(colour)
567
+
568
+
569
+ def SetBorderWidth(self, width, target):
570
+ for i, hand in enumerate(self.hands):
571
+ if _targets[i] & target:
572
+ hand.SetBorderWidth(width)
573
+
574
+
575
+ def SetShadowColour(self, colour):
576
+ for i, hand in enumerate(self.hands):
577
+ hand.SetShadowColour(colour)
578
+
579
+ #----------------------------------------------------------------------
580
+
581
+ class TickSet:
582
+ """Manages a set of tick marks."""
583
+
584
+ def __init__(self, parent, **kwargs):
585
+ self.parent = parent
586
+ self.dyer = Dyer()
587
+ self.noe = {"minutes": 60, "hours": 12}[kwargs["kind"]]
588
+ self.font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
589
+
590
+ style = kwargs.pop("style")
591
+ self.kwargs = kwargs
592
+ self.SetStyle(style)
593
+
594
+
595
+ def _draw(self, dc, shadow=False):
596
+ dc.SetFont(self.font)
597
+
598
+ a_tick = self.ticks[0]
599
+
600
+ if shadow:
601
+ offset = self.parent.shadowOffset * a_tick.GetScale()
602
+ else:
603
+ offset = 0
604
+
605
+ clockStyle = self.parent.clockStyle
606
+
607
+ for idx, tick in self.ticks.items():
608
+ draw = False
609
+
610
+ # Are we a set of hours?
611
+ if self.noe == 12:
612
+ # Should we show all hours ticks?
613
+ if clockStyle & SHOW_HOURS_TICKS:
614
+ draw = True
615
+ # Or is this tick a quarter and should we show only quarters?
616
+ elif clockStyle & SHOW_QUARTERS_TICKS and not (idx + 1) % 3.:
617
+ draw = True
618
+ # Are we a set of minutes and minutes should be shown?
619
+ elif self.noe == 60 and clockStyle & SHOW_MINUTES_TICKS:
620
+ # If this tick occupies the same position of an hour/quarter
621
+ # tick, should we still draw it anyway?
622
+ if clockStyle & OVERLAP_TICKS:
623
+ draw = True
624
+ # Right, sir. I promise I won't overlap any tick.
625
+ else:
626
+ # Ensure that this tick won't overlap an hour tick.
627
+ if clockStyle & SHOW_HOURS_TICKS:
628
+ if (idx + 1) % 5.:
629
+ draw = True
630
+ # Ensure that this tick won't overlap a quarter tick.
631
+ elif clockStyle & SHOW_QUARTERS_TICKS:
632
+ if (idx + 1) % 15.:
633
+ draw = True
634
+ # We're not drawing quarters nor hours, so we can draw all
635
+ # minutes ticks.
636
+ else:
637
+ draw = True
638
+
639
+ if draw:
640
+ tick.Draw(dc, offset)
641
+
642
+
643
+ def Draw(self, dc):
644
+ if self.parent.clockStyle & SHOW_SHADOWS:
645
+ self.dyer.Select(dc, True)
646
+ self._draw(dc, True)
647
+ self.dyer.Select(dc)
648
+ self._draw(dc)
649
+
650
+
651
+ def RecalcCoords(self, clocksize, centre, scale):
652
+ a_tick = self.ticks[0]
653
+
654
+ size = a_tick.GetMaxSize(scale)
655
+ maxsize = size
656
+
657
+ # Try to find a 'good' max size for text-based ticks.
658
+ if a_tick.text is not None:
659
+ self.font.SetPointSize(int(size))
660
+ dc = wx.MemoryDC()
661
+ dc.SelectObject(wx.Bitmap(*clocksize.Get()))
662
+ dc.SetFont(self.font)
663
+ maxsize = size
664
+ for tick in self.ticks.values():
665
+ maxsize = max(*(dc.GetTextExtent(tick.text).Get() + (maxsize,)))
666
+
667
+ radius = self.radius = min(clocksize.Get()) / 2. - \
668
+ self.dyer.width / 2. - \
669
+ maxsize / 2. - \
670
+ a_tick.GetOffset() * scale - \
671
+ self.parent.shadowOffset * scale
672
+
673
+ # If we are a set of hours, the number of elements of this tickset is
674
+ # 12 and ticks are separated by a distance of 30 degrees;
675
+ # if we are a set of minutes, the number of elements of this tickset is
676
+ # 60 and ticks are separated by a distance of 6 degrees.
677
+ angfac = [6, 30][self.noe == 12]
678
+
679
+ for i, tick in self.ticks.items():
680
+ tick.SetClockSize(clocksize)
681
+ tick.SetScale(scale)
682
+
683
+ deg = 180 - angfac * (i + 1)
684
+ angle = math.radians(deg)
685
+
686
+ x = centre.x + radius * math.sin(angle)
687
+ y = centre.y + radius * math.cos(angle)
688
+
689
+ tick.SetPosition(wx.Point(int(x), int(y)))
690
+
691
+
692
+ def GetSize(self):
693
+ return self.kwargs["size"]
694
+
695
+
696
+ def GetFillColour(self):
697
+ return self.dyer.GetFillColour()
698
+
699
+
700
+ def GetBorderColour(self):
701
+ return self.dyer.GetBorderColour()
702
+
703
+
704
+ def GetBorderWidth(self):
705
+ return self.dyer.GetBorderWidth()
706
+
707
+
708
+ def GetPolygon(self):
709
+ a_tick = self.ticks.values()[0]
710
+ return a_tick.GetPolygon()
711
+
712
+
713
+ def GetFont(self):
714
+ return self.font
715
+
716
+
717
+ def GetOffset(self):
718
+ a_tick = self.ticks[0]
719
+ return a_tick.GetOffset()
720
+
721
+
722
+ def GetShadowColour(self):
723
+ return self.dyer.GetShadowColour()
724
+
725
+
726
+ def GetIsRotated(self):
727
+ a_tick = self.ticks[0]
728
+ return a_tick.GetIsRotated()
729
+
730
+
731
+ def GetStyle(self):
732
+ return self.style
733
+
734
+
735
+ def SetSize(self, size):
736
+ self.kwargs["size"] = size
737
+ [tick.SetSize(size) for tick in self.ticks.values()]
738
+
739
+
740
+ def SetFillColour(self, colour):
741
+ self.dyer.SetFillColour(colour)
742
+
743
+
744
+ def SetBorderColour(self, colour):
745
+ self.dyer.SetBorderColour(colour)
746
+
747
+
748
+ def SetBorderWidth(self, width):
749
+ self.dyer.SetBorderWidth(width)
750
+
751
+
752
+ def SetPolygon(self, polygon):
753
+ [tick.SetPolygon(polygon) for tick in self.ticks.values()]
754
+
755
+
756
+ def SetFont(self, font):
757
+ self.font = font
758
+
759
+
760
+ def SetOffset(self, offset):
761
+ self.kwargs["offset"] = offset
762
+ [tick.SetOffset(offset) for tick in self.ticks.values()]
763
+
764
+
765
+ def SetShadowColour(self, colour):
766
+ self.dyer.SetShadowColour(colour)
767
+
768
+
769
+ def SetIsRotated(self, rotate):
770
+ self.kwargs["rotate"] = rotate
771
+ [tick.SetIsRotated(rotate) for tick in self.ticks.values()]
772
+
773
+
774
+ def SetStyle(self, style):
775
+ self.style = style
776
+ tickclass = allTickStyles[style]
777
+ self.kwargs["rotate"] = self.parent.clockStyle & ROTATE_TICKS
778
+
779
+ self.ticks = {}
780
+ for i in range(self.noe):
781
+ self.kwargs["idx"] = i
782
+ self.ticks[i] = tickclass(**self.kwargs)
783
+
784
+ #----------------------------------------------------------------------
785
+
786
+ class Box:
787
+ """Gathers info about the clock face and tick sets."""
788
+
789
+ def __init__(self, parent, Face, TicksM, TicksH):
790
+ self.parent = parent
791
+ self.Face = Face
792
+ self.TicksH = TicksH
793
+ self.TicksM = TicksM
794
+
795
+
796
+ def GetNiceRadiusForHands(self, centre):
797
+ a_tick = self.TicksM.ticks[0]
798
+ scale = a_tick.GetScale()
799
+ bw = max(self.TicksH.dyer.width / 2. * scale,
800
+ self.TicksM.dyer.width / 2. * scale)
801
+
802
+ mgt = self.TicksM.ticks[59]
803
+ my = mgt.pos.y + mgt.GetMaxSize(scale) + bw
804
+
805
+ hgt = self.TicksH.ticks[11]
806
+ hy = hgt.pos.y + hgt.GetMaxSize(scale) + bw
807
+
808
+ niceradius = centre.y - max(my, hy)
809
+ return niceradius
810
+
811
+
812
+ def Draw(self, dc):
813
+ [getattr(self, attr).Draw(dc) \
814
+ for attr in ["Face", "TicksM", "TicksH"]]
815
+
816
+
817
+ def RecalcCoords(self, size, centre, scale):
818
+ [getattr(self, attr).RecalcCoords(size, centre, scale) \
819
+ for attr in ["Face", "TicksH", "TicksM"]]
820
+
821
+
822
+ def GetTickSize(self, target):
823
+ r = []
824
+ for i, attr in enumerate(["TicksH", "TicksM"]):
825
+ if _targets[i] & target:
826
+ tick = getattr(self, attr)
827
+ r.append(tick.GetSize())
828
+ return tuple(r)
829
+
830
+
831
+ def GetTickFillColour(self, target):
832
+ r = []
833
+ for i, attr in enumerate(["TicksH", "TicksM"]):
834
+ if _targets[i] & target:
835
+ tick = getattr(self, attr)
836
+ r.append(tick.GetFillColour())
837
+ return tuple(r)
838
+
839
+
840
+ def GetTickBorderColour(self, target):
841
+ r = []
842
+ for i, attr in enumerate(["TicksH", "TicksM"]):
843
+ if _targets[i] & target:
844
+ tick = getattr(self, attr)
845
+ r.append(tick.GetBorderColour())
846
+ return tuple(r)
847
+
848
+
849
+ def GetTickBorderWidth(self, target):
850
+ r = []
851
+ for i, attr in enumerate(["TicksH", "TicksM"]):
852
+ if _targets[i] & target:
853
+ tick = getattr(self, attr)
854
+ r.append(tick.GetBorderWidth())
855
+ return tuple(r)
856
+
857
+
858
+ def GetTickPolygon(self, target):
859
+ r = []
860
+ for i, attr in enumerate(["TicksH", "TicksM"]):
861
+ if _targets[i] & target:
862
+ tick = getattr(self, attr)
863
+ r.append(tick.GetPolygon())
864
+ return tuple(r)
865
+
866
+
867
+ def GetTickFont(self, target):
868
+ r = []
869
+ for i, attr in enumerate(["TicksH", "TicksM"]):
870
+ if _targets[i] & target:
871
+ tick = getattr(self, attr)
872
+ r.append(tick.GetFont())
873
+ return tuple(r)
874
+
875
+
876
+ def GetIsRotated(self):
877
+ a_tickset = self.TicksH
878
+ return a_tickset.GetIsRotated()
879
+
880
+
881
+ def GetTickOffset(self, target):
882
+ r = []
883
+ for i, attr in enumerate(["TicksH", "TicksM"]):
884
+ if _targets[i] & target:
885
+ tick = getattr(self, attr)
886
+ r.append(tick.GetOffset())
887
+ return tuple(r)
888
+
889
+
890
+ def GetShadowColour(self):
891
+ a_tickset = self.TicksH
892
+ return a_tickset.GetShadowColour()
893
+
894
+
895
+ def GetTickStyle(self, target):
896
+ r = []
897
+ for i, attr in enumerate(["TicksH", "TicksM"]):
898
+ if _targets[i] & target:
899
+ tick = getattr(self, attr)
900
+ r.append(tick.GetStyle())
901
+ return tuple(r)
902
+
903
+
904
+ def SetTickSize(self, size, target):
905
+ for i, attr in enumerate(["TicksH", "TicksM"]):
906
+ if _targets[i] & target:
907
+ tick = getattr(self, attr)
908
+ tick.SetSize(size)
909
+
910
+
911
+ def SetTickFillColour(self, colour, target):
912
+ for i, attr in enumerate(["TicksH", "TicksM"]):
913
+ if _targets[i] & target:
914
+ tick = getattr(self, attr)
915
+ tick.SetFillColour(colour)
916
+
917
+
918
+ def SetTickBorderColour(self, colour, target):
919
+ for i, attr in enumerate(["TicksH", "TicksM"]):
920
+ if _targets[i] & target:
921
+ tick = getattr(self, attr)
922
+ tick.SetBorderColour(colour)
923
+
924
+
925
+ def SetTickBorderWidth(self, width, target):
926
+ for i, attr in enumerate(["TicksH", "TicksM"]):
927
+ if _targets[i] & target:
928
+ tick = getattr(self, attr)
929
+ tick.SetBorderWidth(width)
930
+
931
+
932
+ def SetTickPolygon(self, polygon, target):
933
+ for i, attr in enumerate(["TicksH", "TicksM"]):
934
+ if _targets[i] & target:
935
+ tick = getattr(self, attr)
936
+ tick.SetPolygon(polygon)
937
+
938
+
939
+ def SetTickFont(self, font, target):
940
+ fs = font.GetNativeFontInfoDesc()
941
+ for i, attr in enumerate(["TicksH", "TicksM"]):
942
+ if _targets[i] & target:
943
+ tick = getattr(self, attr)
944
+ tick.SetFont(wx.Font(fs))
945
+
946
+
947
+ def SetIsRotated(self, rotate):
948
+ [getattr(self, attr).SetIsRotated(rotate) \
949
+ for attr in ["TicksH", "TicksM"]]
950
+
951
+
952
+ def SetTickOffset(self, offset, target):
953
+ for i, attr in enumerate(["TicksH", "TicksM"]):
954
+ if _targets[i] & target:
955
+ tick = getattr(self, attr)
956
+ tick.SetOffset(offset)
957
+
958
+
959
+ def SetShadowColour(self, colour):
960
+ for attr in ["TicksH", "TicksM"]:
961
+ tick = getattr(self, attr)
962
+ tick.SetShadowColour(colour)
963
+
964
+
965
+ def SetTickStyle(self, style, target):
966
+ for i, attr in enumerate(["TicksH", "TicksM"]):
967
+ if _targets[i] & target:
968
+ tick = getattr(self, attr)
969
+ tick.SetStyle(style)
970
+
971
+ #----------------------------------------------------------------------
972
+
973
+ # Relationship between styles and ticks class names.
974
+ allTickStyles = {TICKS_BINARY: TickBinary,
975
+ TICKS_CIRCLE: TickCircle,
976
+ TICKS_DECIMAL: TickDecimal,
977
+ TICKS_HEX: TickHex,
978
+ TICKS_NONE: TickNone,
979
+ TICKS_POLY: TickPoly,
980
+ TICKS_ROMAN: TickRoman,
981
+ TICKS_SQUARE: TickSquare}
982
+
983
+
984
+ #
985
+ ##
986
+ ### eof