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
wx/lib/ogl/diagram.py ADDED
@@ -0,0 +1,230 @@
1
+ # -*- coding: utf-8 -*-
2
+ #----------------------------------------------------------------------------
3
+ # Name: diagram.py
4
+ # Purpose: Diagram class
5
+ #
6
+ # Author: Pierre Hjälm (from C++ original by Julian Smart)
7
+ #
8
+ # Created: 2004-05-08
9
+ # Copyright: (c) 2004 Pierre Hjälm - 1998 Julian Smart
10
+ # Licence: wxWindows license
11
+ # Tags: phoenix-port, unittest, py3-port, documented
12
+ #----------------------------------------------------------------------------
13
+ """
14
+ The :class:`~lib.ogl.diagram.Diagram` class.
15
+ """
16
+ import wx
17
+
18
+ DEFAULT_MOUSE_TOLERANCE = 3
19
+
20
+
21
+ class Diagram(object):
22
+ """
23
+ The :class:`Diagram` encapsulates an entire diagram, with methods for
24
+ drawing. A diagram has an associated :class:`ShapeCanvas`.
25
+
26
+ """
27
+ def __init__(self):
28
+ """
29
+ Default class constructor.
30
+ """
31
+ self._diagramCanvas = None
32
+ self._quickEditMode = False
33
+ self._snapToGrid = True
34
+ self._gridSpacing = 5.0
35
+ self._shapeList = []
36
+ self._mouseTolerance = DEFAULT_MOUSE_TOLERANCE
37
+
38
+ def Redraw(self, dc):
39
+ """Redraw the shapes in the diagram on the specified device context."""
40
+ if self._shapeList:
41
+ for object in self._shapeList:
42
+ object.Draw(dc)
43
+
44
+ def Clear(self, dc):
45
+ """Clear the specified device context."""
46
+ dc.Clear()
47
+
48
+ def AddShape(self, object, addAfter = None):
49
+ """
50
+ Add a shape to the diagram. If addAfter is not None, the shape
51
+ will be added after addAfter.
52
+
53
+ :param `object`: an instance of :class:`~lib.ogl.Shape`
54
+ :param `addAfter`: an instance of :class:`~lib.ogl.Shape`
55
+
56
+ """
57
+ if not object in self._shapeList:
58
+ if addAfter:
59
+ self._shapeList.insert(self._shapeList.index(addAfter) + 1, object)
60
+ else:
61
+ self._shapeList.append(object)
62
+
63
+ object.SetCanvas(self.GetCanvas())
64
+
65
+ def InsertShape(self, object):
66
+ """
67
+ Insert a shape at the front of the shape list.
68
+
69
+ :param `object`: an instance of :class:`~lib.ogl.Shape`
70
+
71
+ """
72
+ self._shapeList.insert(0, object)
73
+
74
+ def RemoveShape(self, object):
75
+ """
76
+ Remove the shape from the diagram (non-recursively) but do not
77
+ delete it.
78
+
79
+ :param `object`: an instance of :class:`~lib.ogl.Shape`
80
+
81
+ """
82
+ if object in self._shapeList:
83
+ self._shapeList.remove(object)
84
+
85
+ def RemoveAllShapes(self):
86
+ """Remove all shapes from the diagram but do not delete the shapes."""
87
+ self._shapeList = []
88
+
89
+ def DeleteAllShapes(self):
90
+ """Remove and delete all shapes in the diagram."""
91
+ for shape in self._shapeList[:]:
92
+ if not shape.GetParent():
93
+ self.RemoveShape(shape)
94
+ shape.Delete()
95
+
96
+ def ShowAll(self, show):
97
+ """Call Show for each shape in the diagram.
98
+
99
+ :param `show`: True or False
100
+
101
+ """
102
+ for shape in self._shapeList:
103
+ shape.Show(show)
104
+
105
+ def DrawOutline(self, dc, x1, y1, x2, y2):
106
+ """
107
+ Draw an outline rectangle on the current device context.
108
+
109
+ :param `dc`: the :class:`wx.MemoryDC` device context
110
+ :param `x1`: the x1 position
111
+ :param `y2`: the y2 position
112
+ :param `x1`: the x1 position
113
+ :param `y2`: the y2 position
114
+
115
+ """
116
+ dc.SetPen(wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT))
117
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
118
+
119
+ dc.DrawLines([[int(x1), int(y1)], [int(x2), int(y1)], [int(x2), int(y2)], [int(x1), int(y2)], [int(x1), int(y1)]])
120
+
121
+ def RecentreAll(self, dc):
122
+ """Recentre all the text that should be centred.
123
+
124
+ :param `dc`: the :class:`wx.MemoryDC` device context
125
+
126
+ """
127
+ for shape in self._shapeList:
128
+ shape.Recentre(dc)
129
+
130
+ def SetCanvas(self, canvas):
131
+ """
132
+ Set the canvas associated with this diagram.
133
+
134
+ :param `canvas`: an instance of :class:`~lib.ogl.Canvas`
135
+
136
+ """
137
+ self._diagramCanvas = canvas
138
+
139
+ def GetCanvas(self):
140
+ """Return the shape canvas associated with this diagram."""
141
+ return self._diagramCanvas
142
+
143
+ def FindShape(self, id):
144
+ """
145
+ Return the shape for the given identifier.
146
+
147
+ :param `id`: the shape id to find
148
+
149
+ """
150
+ for shape in self._shapeList:
151
+ if shape.GetId() == id:
152
+ return shape
153
+ return None
154
+
155
+ def Snap(self, x, y):
156
+ """
157
+ 'Snaps' the coordinate to the nearest grid position, if
158
+ snap-to-grid is on.
159
+
160
+ :param `x`: the x position
161
+ :param `y`: the y position
162
+
163
+ """
164
+ if self._snapToGrid:
165
+ return self._gridSpacing * int(x / self._gridSpacing + 0.5), self._gridSpacing * int(y / self._gridSpacing + 0.5)
166
+ return x, y
167
+
168
+ def SetGridSpacing(self, spacing):
169
+ """
170
+ Sets grid spacing.
171
+
172
+ :param `spacing`: the spacing
173
+
174
+ """
175
+ self._gridSpacing = spacing
176
+
177
+ def SetSnapToGrid(self, snap):
178
+ """
179
+ Sets snap-to-grid mode.
180
+
181
+ :param `snap`: `True` to snap to grid or `False` not to snap
182
+
183
+ """
184
+ self._snapToGrid = snap
185
+
186
+ def GetGridSpacing(self):
187
+ """Return the grid spacing."""
188
+ return self._gridSpacing
189
+
190
+ def GetSnapToGrid(self):
191
+ """Return snap-to-grid mode."""
192
+ return self._snapToGrid
193
+
194
+ def SetQuickEditMode(self, mode):
195
+ """
196
+ Set quick-edit-mode on of off.
197
+
198
+ In this mode, refreshes are minimized, but the diagram may need
199
+ manual refreshing occasionally.
200
+
201
+ :param `mode`: `True` to quick edit or `False` for normal edit
202
+
203
+ """
204
+ self._quickEditMode = mode
205
+
206
+ def GetQuickEditMode(self):
207
+ """Return quick edit mode."""
208
+ return self._quickEditMode
209
+
210
+ def SetMouseTolerance(self, tolerance):
211
+ """Set the tolerance within which a mouse move is ignored.
212
+
213
+ The default is 3 pixels.
214
+
215
+ :param `tolerance`: the tolerance level
216
+
217
+ """
218
+ self._mouseTolerance = tolerance
219
+
220
+ def GetMouseTolerance(self):
221
+ """Return the tolerance within which a mouse move is ignored."""
222
+ return self._mouseTolerance
223
+
224
+ def GetShapeList(self):
225
+ """Return the internal shape list."""
226
+ return self._shapeList
227
+
228
+ def GetCount(self):
229
+ """Return the number of shapes in the diagram."""
230
+ return len(self._shapeList)
wx/lib/ogl/divided.py ADDED
@@ -0,0 +1,482 @@
1
+ # -*- coding: utf-8 -*-
2
+ #----------------------------------------------------------------------------
3
+ # Name: divided.py
4
+ # Purpose: DividedShape class
5
+ #
6
+ # Author: Pierre Hjälm (from C++ original by Julian Smart)
7
+ #
8
+ # Created: 2004-05-08
9
+ # Copyright: (c) 2004 Pierre Hjälm - 1998 Julian Smart
10
+ # Licence: wxWindows license
11
+ # Tags: phoenix-port, unittest, py3-port, documented
12
+ #----------------------------------------------------------------------------
13
+ """
14
+ The :class:`~lib.ogl.divided.DividedShape` class.
15
+ """
16
+ import sys
17
+ import wx
18
+
19
+ from .basic import ControlPoint, RectangleShape, Shape
20
+ from .oglmisc import *
21
+
22
+
23
+ class DividedShapeControlPoint(ControlPoint):
24
+ """The class:`DividedShapeControlPoint` class."""
25
+ def __init__(self, the_canvas, object, region, size, the_m_xoffset, the_m_yoffset, the_type):
26
+ """
27
+ Default class constructor.
28
+
29
+ :param `theCanvas`: a :class:`~lib.ogl.Canvas`
30
+ :param `object`: not used ???
31
+ :param `region`: an instance of :class:`~lib.ogl.ShapeRegion`
32
+ :param float `size`: the size
33
+ :param float `the_m_xoffset`: the the_m_xoffset position ???
34
+ :param float `the_m_yoffset`: the the_m_yoffset position ???
35
+ :param int `the_type`: one of the following types
36
+
37
+ ======================================== ==================================
38
+ Control point type Description
39
+ ======================================== ==================================
40
+ `CONTROL_POINT_VERTICAL` Vertical
41
+ `CONTROL_POINT_HORIZONTAL` Horizontal
42
+ `CONTROL_POINT_DIAGONAL` Diagonal
43
+ ======================================== ==================================
44
+
45
+ """
46
+ ControlPoint.__init__(self, the_canvas, object, size, the_m_xoffset, the_m_yoffset, the_type)
47
+ self.regionId = region
48
+
49
+ def OnDragLeft(self, draw, x, y, keys = 0, attachment = 0):
50
+ """The drag left handler."""
51
+ dc = wx.MemoryDC()
52
+ dc.SelectObject(self.GetCanvas().GetBuffer())
53
+ self.GetCanvas().PrepareDC(dc)
54
+ dc.SetLogicalFunction(OGLRBLF)
55
+
56
+ dottedPen = wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT)
57
+ dc.SetPen(dottedPen)
58
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
59
+
60
+ dividedObject = self._shape
61
+ x1 = dividedObject.GetX() - dividedObject.GetWidth() / 2.0
62
+ y1 = y
63
+ x2 = dividedObject.GetX() + dividedObject.GetWidth() / 2.0
64
+ y2 = y
65
+
66
+ dc.DrawLine(x1, y1, x2, y2)
67
+
68
+ def OnBeginDragLeft(self, x, y, keys = 0, attachment = 0):
69
+ """The begin drag left handler."""
70
+ dc = wx.MemoryDC()
71
+ dc.SelectObject(self.GetCanvas().GetBuffer())
72
+ self.GetCanvas().PrepareDC(dc)
73
+ dc.SetLogicalFunction(OGLRBLF)
74
+
75
+ dottedPen = wx.Pen(wx.BLACK, 1, wx.PENSTYLE_DOT)
76
+ dc.SetPen(dottedPen)
77
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
78
+
79
+ dividedObject = self._shape
80
+
81
+ x1 = dividedObject.GetX() - dividedObject.GetWidth() / 2.0
82
+ y1 = y
83
+ x2 = dividedObject.GetX() + dividedObject.GetWidth() / 2.0
84
+ y2 = y
85
+
86
+ dc.DrawLine(x1, y1, x2, y2)
87
+ self._canvas.CaptureMouse()
88
+
89
+ def OnEndDragLeft(self, x, y, keys = 0, attachment = 0):
90
+ """The end drag left handler."""
91
+ dc = wx.MemoryDC()
92
+ dc.SelectObject(self.GetCanvas().GetBuffer())
93
+ self.GetCanvas().PrepareDC(dc)
94
+
95
+ dividedObject = self._shape
96
+ if not dividedObject.GetRegions()[self.regionId]:
97
+ return
98
+
99
+ thisRegion = dividedObject.GetRegions()[self.regionId]
100
+ nextRegion = None
101
+
102
+ dc.SetLogicalFunction(wx.COPY)
103
+
104
+ if self._canvas.HasCapture():
105
+ self._canvas.ReleaseMouse()
106
+
107
+ # Find the old top and bottom of this region,
108
+ # and calculate the new proportion for this region
109
+ # if legal.
110
+ currentY = dividedObject.GetY() - dividedObject.GetHeight() / 2.0
111
+ maxY = dividedObject.GetY() + dividedObject.GetHeight() / 2.0
112
+
113
+ # Save values
114
+ theRegionTop = 0
115
+ nextRegionBottom = 0
116
+
117
+ for i in range(len(dividedObject.GetRegions())):
118
+ region = dividedObject.GetRegions()[i]
119
+ proportion = region._regionProportionY
120
+ yy = currentY + dividedObject.GetHeight() * proportion
121
+ actualY = min(maxY, yy)
122
+
123
+ if region == thisRegion:
124
+ thisRegionTop = currentY
125
+
126
+ if i + 1 < len(dividedObject.GetRegions()):
127
+ nextRegion = dividedObject.GetRegions()[i + 1]
128
+ if region == nextRegion:
129
+ nextRegionBottom = actualY
130
+
131
+ currentY = actualY
132
+
133
+ if not nextRegion:
134
+ return
135
+
136
+ # Check that we haven't gone above this region or below
137
+ # next region.
138
+ if y <= thisRegionTop or y >= nextRegionBottom:
139
+ return
140
+
141
+ dividedObject.EraseLinks(dc)
142
+
143
+ # Now calculate the new proportions of this region and the next region
144
+ thisProportion = float(y - thisRegionTop) / dividedObject.GetHeight()
145
+ nextProportion = float(nextRegionBottom - y) / dividedObject.GetHeight()
146
+
147
+ thisRegion.SetProportions(0, thisProportion)
148
+ nextRegion.SetProportions(0, nextProportion)
149
+ self._yoffset = y - dividedObject.GetY()
150
+
151
+ # Now reformat text
152
+ for i, region in enumerate(dividedObject.GetRegions()):
153
+ if region.GetText():
154
+ s = region.GetText()
155
+ dividedObject.FormatText(dc, s, i)
156
+
157
+ dividedObject.SetRegionSizes()
158
+ dividedObject.Draw(dc)
159
+ dividedObject.GetEventHandler().OnMoveLinks(dc)
160
+
161
+
162
+ class DividedShape(RectangleShape):
163
+ """
164
+ A :class:`DividedShape` is a rectangle with a number of vertical divisions.
165
+ Each division may have its text formatted with independent characteristics,
166
+ and the size of each division relative to the whole image may be specified.
167
+ """
168
+ def __init__(self, w, h):
169
+ """
170
+ Default class constructor.
171
+
172
+ :param `w`: width of rectangle
173
+ :param `h`: height of rectangle
174
+
175
+ """
176
+ RectangleShape.__init__(self, w, h)
177
+ self.ClearRegions()
178
+
179
+ def OnDraw(self, dc):
180
+ """The draw handler."""
181
+ RectangleShape.OnDraw(self, dc)
182
+
183
+ def OnDrawContents(self, dc):
184
+ """The draw contents handler."""
185
+ if self.GetRegions():
186
+ defaultProportion = 1.0 / len(self.GetRegions())
187
+ else:
188
+ defaultProportion = 0.0
189
+ currentY = self._ypos - self._height / 2.0
190
+ maxY = self._ypos + self._height / 2.0
191
+
192
+ leftX = self._xpos - self._width / 2.0
193
+ rightX = self._xpos + self._width / 2.0
194
+
195
+ if self._pen:
196
+ dc.SetPen(self._pen)
197
+
198
+ dc.SetTextForeground(self._textColour)
199
+
200
+ # For efficiency, don't do this under X - doesn't make
201
+ # any visible difference for our purposes.
202
+ if sys.platform[:3] == "win":
203
+ dc.SetTextBackground(self._brush.GetColour())
204
+
205
+ if self.GetDisableLabel():
206
+ return
207
+
208
+ xMargin = 2
209
+ yMargin = 2
210
+
211
+ dc.SetBackgroundMode(wx.TRANSPARENT)
212
+
213
+ for region in self.GetRegions():
214
+ dc.SetFont(region.GetFont())
215
+ dc.SetTextForeground(region.GetActualColourObject())
216
+
217
+ if region._regionProportionY < 0:
218
+ proportion = defaultProportion
219
+ else:
220
+ proportion = region._regionProportionY
221
+
222
+ y = currentY + self._height * proportion
223
+ actualY = min(maxY, y)
224
+
225
+ centreX = self._xpos
226
+ centreY = currentY + (actualY - currentY) / 2.0
227
+
228
+ DrawFormattedText(dc, region._formattedText, centreX, centreY, self._width - 2 * xMargin, actualY - currentY - 2 * yMargin, region._formatMode)
229
+
230
+ if y <= maxY and region != self.GetRegions()[-1]:
231
+ regionPen = region.GetActualPen()
232
+ if regionPen:
233
+ dc.SetPen(regionPen)
234
+ dc.DrawLine(int(leftX), int(y), int(rightX), int(y))
235
+
236
+ currentY = actualY
237
+
238
+ def SetSize(self, w, h, recursive = True):
239
+ """
240
+ Set the size.
241
+
242
+ :param `w`: width of rectangle
243
+ :param `h`: height of rectangle
244
+ :param `recursive`: not implemented
245
+
246
+ """
247
+ self.SetAttachmentSize(w, h)
248
+ self._width = w
249
+ self._height = h
250
+ self.SetRegionSizes()
251
+
252
+ def SetRegionSizes(self):
253
+ """
254
+ Set all region sizes according to proportions and this object
255
+ total size.
256
+ """
257
+ if not self.GetRegions():
258
+ return
259
+
260
+ if self.GetRegions():
261
+ defaultProportion = 1.0 / len(self.GetRegions())
262
+ else:
263
+ defaultProportion = 0.0
264
+ currentY = self._ypos - self._height / 2.0
265
+ maxY = self._ypos + self._height / 2.0
266
+
267
+ for region in self.GetRegions():
268
+ if region._regionProportionY <= 0:
269
+ proportion = defaultProportion
270
+ else:
271
+ proportion = region._regionProportionY
272
+
273
+ sizeY = proportion * self._height
274
+ y = currentY + sizeY
275
+ actualY = min(maxY, y)
276
+
277
+ centreY = currentY + (actualY - currentY) / 2.0
278
+
279
+ region.SetSize(self._width, sizeY)
280
+ region.SetPosition(0, centreY - self._ypos)
281
+
282
+ currentY = actualY
283
+
284
+ def GetAttachmentPosition(self, attachment, nth = 0, no_arcs = 1, line = None):
285
+ """
286
+ Get the attachment position.
287
+
288
+ Attachment points correspond to regions in the divided box.
289
+
290
+ :param `attachment`: the attachment ???
291
+ :param `nth`: get nth attachment ???
292
+ :param `no_arcs`: ???
293
+ :param `line`: ???
294
+
295
+ """
296
+ totalNumberAttachments = len(self.GetRegions()) * 2 + 2
297
+ if self.GetAttachmentMode() == ATTACHMENT_MODE_NONE or attachment >= totalNumberAttachments:
298
+ return Shape.GetAttachmentPosition(self, attachment, nth, no_arcs)
299
+
300
+ n = len(self.GetRegions())
301
+ isEnd = line and line.IsEnd(self)
302
+
303
+ left = self._xpos - self._width / 2.0
304
+ right = self._xpos + self._width / 2.0
305
+ top = self._ypos - self._height / 2.0
306
+ bottom = self._ypos + self._height / 2.0
307
+
308
+ # Zero is top, n + 1 is bottom
309
+ if attachment == 0:
310
+ y = top
311
+ if self._spaceAttachments:
312
+ if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
313
+ # Align line according to the next handle along
314
+ point = line.GetNextControlPoint(self)
315
+ if point[0] < left:
316
+ x = left
317
+ elif point[0] > right:
318
+ x = right
319
+ else:
320
+ x = point[0]
321
+ else:
322
+ x = left + (nth + 1) * self._width / (no_arcs + 1.0)
323
+ else:
324
+ x = self._xpos
325
+ elif attachment == n + 1:
326
+ y = bottom
327
+ if self._spaceAttachments:
328
+ if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
329
+ # Align line according to the next handle along
330
+ point = line.GetNextControlPoint(self)
331
+ if point[0] < left:
332
+ x = left
333
+ elif point[0] > right:
334
+ x = right
335
+ else:
336
+ x = point[0]
337
+ else:
338
+ x = left + (nth + 1) * self._width / (no_arcs + 1.0)
339
+ else:
340
+ x = self._xpos
341
+ else: # Left or right
342
+ isLeft = not attachment < (n + 1)
343
+ if isLeft:
344
+ i = totalNumberAttachments - attachment - 1
345
+ else:
346
+ i = attachment - 1
347
+
348
+ region = self.GetRegions()[i]
349
+ if region:
350
+ if isLeft:
351
+ x = left
352
+ else:
353
+ x = right
354
+
355
+ # Calculate top and bottom of region
356
+ top = self._ypos + region._y - region._height / 2.0
357
+ bottom = self._ypos + region._y + region._height / 2.0
358
+
359
+ # Assuming we can trust the absolute size and
360
+ # position of these regions
361
+ if self._spaceAttachments:
362
+ if line and line.GetAlignmentType(isEnd) == LINE_ALIGNMENT_TO_NEXT_HANDLE:
363
+ # Align line according to the next handle along
364
+ point = line.GetNextControlPoint(self)
365
+ if point[1] < bottom:
366
+ y = bottom
367
+ elif point[1] > top:
368
+ y = top
369
+ else:
370
+ y = point[1]
371
+ else:
372
+ y = top + (nth + 1) * region._height / (no_arcs + 1.0)
373
+ else:
374
+ y = self._ypos + region._y
375
+ else:
376
+ return False
377
+ return x, y
378
+
379
+ def GetNumberOfAttachments(self):
380
+ """
381
+ Get the number of attachments.
382
+
383
+ There are two attachments for each region (left and right),
384
+ plus one on the top and one on the bottom.
385
+ """
386
+ n = len(self.GetRegions()) * 2 + 2
387
+
388
+ maxN = n - 1
389
+ for point in self._attachmentPoints:
390
+ if point._id > maxN:
391
+ maxN = point._id
392
+
393
+ return maxN + 1
394
+
395
+ def AttachmentIsValid(self, attachment):
396
+ """
397
+ Is the attachment valid?
398
+
399
+ :param `attachment`: the attachment
400
+
401
+ """
402
+ totalNumberAttachments = len(self.GetRegions()) * 2 + 2
403
+ if attachment >= totalNumberAttachments:
404
+ return Shape.AttachmentIsValid(self, attachment)
405
+ else:
406
+ return attachment >= 0
407
+
408
+ def MakeControlPoints(self):
409
+ """
410
+ Make the control points.
411
+ """
412
+ RectangleShape.MakeControlPoints(self)
413
+ self.MakeMandatoryControlPoints()
414
+
415
+ def MakeMandatoryControlPoints(self):
416
+ """
417
+ Make the mandatory control points.
418
+ """
419
+ currentY = self.GetY() - self._height / 2.0
420
+ maxY = self.GetY() + self._height / 2.0
421
+
422
+ for i, region in enumerate(self.GetRegions()):
423
+ proportion = region._regionProportionY
424
+
425
+ y = currentY + self._height * proportion
426
+ actualY = min(maxY, y)
427
+
428
+ if region != self.GetRegions()[-1]:
429
+ controlPoint = DividedShapeControlPoint(self._canvas, self, i, CONTROL_POINT_SIZE, 0, actualY - self.GetY(), 0)
430
+ self._canvas.AddShape(controlPoint)
431
+ self._controlPoints.append(controlPoint)
432
+
433
+ currentY = actualY
434
+
435
+ def ResetControlPoints(self):
436
+ """
437
+ Reset the control points.
438
+
439
+ :note: May only have the region handles, (n - 1) of them
440
+
441
+ """
442
+
443
+ if len(self._controlPoints) > len(self.GetRegions()) - 1:
444
+ RectangleShape.ResetControlPoints(self)
445
+
446
+ self.ResetMandatoryControlPoints()
447
+
448
+ def ResetMandatoryControlPoints(self):
449
+ """
450
+ Reset the mandatory control points.
451
+ """
452
+ currentY = self.GetY() - self._height / 2.0
453
+ maxY = self.GetY() + self._height / 2.0
454
+
455
+ i = 0
456
+ for controlPoint in self._controlPoints:
457
+ if isinstance(controlPoint, DividedShapeControlPoint):
458
+ region = self.GetRegions()[i]
459
+ proportion = region._regionProportionY
460
+
461
+ y = currentY + self._height * proportion
462
+ actualY = min(maxY, y)
463
+
464
+ controlPoint._xoffset = 0
465
+ controlPoint._yoffset = actualY - self.GetY()
466
+
467
+ currentY = actualY
468
+
469
+ i += 1
470
+
471
+ def EditRegions(self):
472
+ """
473
+ Edit the region colours and styles. Not implemented.
474
+ """
475
+ print("EditRegions() is unimplemented")
476
+
477
+ def OnRightClick(self, x, y, keys = 0, attachment = 0):
478
+ """The right click handler."""
479
+ if keys & KEY_CTRL:
480
+ self.EditRegions()
481
+ else:
482
+ RectangleShape.OnRightClick(self, x, y, keys, attachment)