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/oglmisc.py ADDED
@@ -0,0 +1,607 @@
1
+ # -*- coding: utf-8 -*-
2
+ #----------------------------------------------------------------------------
3
+ # Name: oglmisc.py
4
+ # Purpose: Miscellaneous OGL support functions
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
+ Miscellaneous support functions for OGL.
15
+
16
+ params marked with '???' need review!
17
+ """
18
+ import math
19
+
20
+ import wx
21
+
22
+ # Control point types
23
+ # Rectangle and most other shapes
24
+ CONTROL_POINT_VERTICAL = 1
25
+ CONTROL_POINT_HORIZONTAL = 2
26
+ CONTROL_POINT_DIAGONAL = 3
27
+
28
+ # Line
29
+ CONTROL_POINT_ENDPOINT_TO = 4
30
+ CONTROL_POINT_ENDPOINT_FROM = 5
31
+ CONTROL_POINT_LINE = 6
32
+
33
+ # Types of formatting: can be combined in a bit list
34
+ FORMAT_NONE = 0 # Left justification
35
+ FORMAT_CENTRE_HORIZ = 1 # Centre horizontally
36
+ FORMAT_CENTRE_VERT = 2 # Centre vertically
37
+ FORMAT_SIZE_TO_CONTENTS = 4 # Resize shape to contents
38
+
39
+ # Attachment modes
40
+ ATTACHMENT_MODE_NONE, ATTACHMENT_MODE_EDGE, ATTACHMENT_MODE_BRANCHING = 0, 1, 2
41
+
42
+ # Shadow mode
43
+ SHADOW_NONE, SHADOW_LEFT, SHADOW_RIGHT = 0, 1, 2
44
+
45
+ OP_CLICK_LEFT, OP_CLICK_RIGHT, OP_DRAG_LEFT, OP_DRAG_RIGHT = 1, 2, 4, 8
46
+ OP_ALL = OP_CLICK_LEFT | OP_CLICK_RIGHT | OP_DRAG_LEFT | OP_DRAG_RIGHT
47
+
48
+ # Sub-modes for branching attachment mode
49
+ BRANCHING_ATTACHMENT_NORMAL = 1
50
+ BRANCHING_ATTACHMENT_BLOB = 2
51
+
52
+ # logical function to use when drawing rubberband boxes, etc.
53
+ OGLRBLF = wx.INVERT
54
+
55
+ CONTROL_POINT_SIZE = 6
56
+
57
+ # Types of arrowhead
58
+ # (i) Built-in
59
+ ARROW_HOLLOW_CIRCLE = 1
60
+ ARROW_FILLED_CIRCLE = 2
61
+ ARROW_ARROW = 3
62
+ ARROW_SINGLE_OBLIQUE = 4
63
+ ARROW_DOUBLE_OBLIQUE = 5
64
+ # (ii) Custom
65
+ ARROW_METAFILE = 20
66
+
67
+ # Position of arrow on line
68
+ ARROW_POSITION_START = 0
69
+ ARROW_POSITION_END = 1
70
+ ARROW_POSITION_MIDDLE = 2
71
+
72
+ # Line alignment flags
73
+ # Vertical by default
74
+ LINE_ALIGNMENT_HORIZ = 1
75
+ LINE_ALIGNMENT_VERT = 0
76
+ LINE_ALIGNMENT_TO_NEXT_HANDLE = 2
77
+ LINE_ALIGNMENT_NONE = 0
78
+
79
+ # was defined in canvas and in composit
80
+ KEY_SHIFT = 1
81
+ KEY_CTRL = 2
82
+
83
+
84
+
85
+ def FormatText(dc, text, width, height, formatMode):
86
+ """
87
+ Format a text
88
+
89
+ :param `dc`: the :class:`wx.MemoryDC`
90
+ :param `text`: the text to format
91
+ :param `width`: the width of the box???
92
+ :param `height`: the height of the box??? it is not used in the code!
93
+ :param `formatMode`: one of the format modes, can be combined in a bit list
94
+
95
+ ======================================== ==================================
96
+ Format mode name Description
97
+ ======================================== ==================================
98
+ `FORMAT_NONE` Left justification
99
+ `FORMAT_CENTRE_HORIZ` Centre horizontally
100
+ `FORMAT_CENTRE_VERT` Centre vertically
101
+ `FORMAT_SIZE_TO_CONTENTS` Resize shape to contents
102
+ ======================================== ==================================
103
+
104
+ :returns: a list of strings fitting in the box
105
+
106
+ """
107
+ i = 0
108
+ word = ""
109
+ word_list = []
110
+ end_word = False
111
+ new_line = False
112
+ while i < len(text):
113
+ if text[i] == "%":
114
+ i += 1
115
+ if i == len(text):
116
+ word += "%"
117
+ else:
118
+ if text[i] == "n":
119
+ new_line = True
120
+ end_word = True
121
+ i += 1
122
+ else:
123
+ word += "%" + text[i]
124
+ i += 1
125
+ elif text[i] in ["\012","\015"]:
126
+ new_line = True
127
+ end_word = True
128
+ i += 1
129
+ elif text[i] == " ":
130
+ end_word = True
131
+ i += 1
132
+ else:
133
+ word += text[i]
134
+ i += 1
135
+
136
+ if i == len(text):
137
+ end_word = True
138
+
139
+ if end_word:
140
+ word_list.append(word)
141
+ word = ""
142
+ end_word = False
143
+ if new_line:
144
+ word_list.append(None)
145
+ new_line = False
146
+
147
+ # Now, make a list of strings which can fit in the box
148
+ string_list = []
149
+ buffer = ""
150
+ for s in word_list:
151
+ oldBuffer = buffer
152
+ if s is None:
153
+ # FORCE NEW LINE
154
+ if len(buffer) > 0:
155
+ string_list.append(buffer)
156
+ buffer = ""
157
+ else:
158
+ if len(buffer):
159
+ buffer += " "
160
+ buffer += s
161
+ x, y = dc.GetTextExtent(buffer)
162
+
163
+ # Don't fit within the bounding box if we're fitting
164
+ # shape to contents
165
+ if (x > width) and not (formatMode & FORMAT_SIZE_TO_CONTENTS):
166
+ # Deal with first word being wider than box
167
+ if len(oldBuffer):
168
+ string_list.append(oldBuffer)
169
+ buffer = s
170
+ if len(buffer):
171
+ string_list.append(buffer)
172
+
173
+ return string_list
174
+
175
+
176
+ def GetCentredTextExtent(dc, text_list, xpos=0, ypos=0, width=0, height=0):
177
+ """
178
+ Get the centred text extend
179
+
180
+ :param `dc`: the :class:`wx.MemoryDC`
181
+ :param `text_list`: a list of text lines
182
+ :param `xpos`: unused
183
+ :param `ypos`: unused
184
+ :param `width`: unused
185
+ :param `height`: unused
186
+
187
+ :returns: maximum width and the height
188
+
189
+ """
190
+ if not text_list:
191
+ return 0, 0
192
+
193
+ max_width = 0
194
+ for line in text_list:
195
+ current_width, char_height = dc.GetTextExtent(line.GetText())
196
+ if current_width > max_width:
197
+ max_width = current_width
198
+
199
+ return max_width, len(text_list) * char_height
200
+
201
+
202
+ def CentreText(dc, text_list, xpos, ypos, width, height, formatMode):
203
+ """
204
+ Centre a text
205
+
206
+ :param `dc`: the :class:`wx.MemoryDC`
207
+ :param `text_list`: a list of texts
208
+ :param `xpos`: the x position
209
+ :param `ypos`: the y position
210
+ :param `width`: the width of the box???
211
+ :param `height`: the height of the box???
212
+ :param `formatMode`: one of the format modes, can be combined in a bit list
213
+
214
+ ======================================== ==================================
215
+ Format mode name Description
216
+ ======================================== ==================================
217
+ `FORMAT_NONE` Left justification
218
+ `FORMAT_CENTRE_HORIZ` Centre horizontally
219
+ `FORMAT_CENTRE_VERT` Centre vertically
220
+ `FORMAT_SIZE_TO_CONTENTS` Resize shape to contents
221
+ ======================================== ==================================
222
+
223
+ """
224
+ if not text_list:
225
+ return
226
+
227
+ # First, get maximum dimensions of box enclosing text
228
+ char_height = 0
229
+ max_width = 0
230
+ current_width = 0
231
+
232
+ # Store text extents for speed
233
+ widths = []
234
+ for line in text_list:
235
+ current_width, char_height = dc.GetTextExtent(line.GetText())
236
+ widths.append(current_width)
237
+ if current_width > max_width:
238
+ max_width = current_width
239
+
240
+ max_height = len(text_list) * char_height
241
+
242
+ if formatMode & FORMAT_CENTRE_VERT:
243
+ if max_height < height:
244
+ yoffset = ypos - height / 2.0 + (height - max_height) / 2.0
245
+ else:
246
+ yoffset = ypos - height / 2.0
247
+ yOffset = ypos
248
+ else:
249
+ yoffset = 0.0
250
+ yOffset = 0.0
251
+
252
+ if formatMode & FORMAT_CENTRE_HORIZ:
253
+ xoffset = xpos - width / 2.0
254
+ xOffset = xpos
255
+ else:
256
+ xoffset = 0.0
257
+ xOffset = 0.0
258
+
259
+ for i, line in enumerate(text_list):
260
+ if formatMode & FORMAT_CENTRE_HORIZ and widths[i] < width:
261
+ x = (width - widths[i]) / 2.0 + xoffset
262
+ else:
263
+ x = xoffset
264
+ y = i * char_height + yoffset
265
+
266
+ line.SetX(x - xOffset)
267
+ line.SetY(y - yOffset)
268
+
269
+
270
+ def DrawFormattedText(dc, text_list, xpos, ypos, width, height, formatMode):
271
+ """
272
+ Draw formatted text
273
+
274
+ :param `dc`: the :class:`wx.MemoryDC`
275
+ :param `text_list`: a list of texts
276
+ :param `xpos`: the x position
277
+ :param `ypos`: the y position
278
+ :param `width`: the width of the box???
279
+ :param `height`: the height of the box???
280
+ :param `formatMode`: one of the format modes, can be combined in a bit list
281
+
282
+ ======================================== ==================================
283
+ Format mode name Description
284
+ ======================================== ==================================
285
+ `FORMAT_NONE` Left justification
286
+ `FORMAT_CENTRE_HORIZ` Centre horizontally
287
+ `FORMAT_CENTRE_VERT` Centre vertically
288
+ `FORMAT_SIZE_TO_CONTENTS` Resize shape to contents
289
+ ======================================== ==================================
290
+
291
+ """
292
+ if formatMode & FORMAT_CENTRE_HORIZ:
293
+ xoffset = xpos
294
+ else:
295
+ xoffset = xpos - width / 2.0
296
+
297
+ if formatMode & FORMAT_CENTRE_VERT:
298
+ yoffset = ypos
299
+ else:
300
+ yoffset = ypos - height / 2.0
301
+
302
+ # +1 to allow for rounding errors
303
+ dc.SetClippingRegion(int(xpos - width / 2.0), int(ypos - height / 2.0), int(width + 1), int(height + 1))
304
+
305
+ for line in text_list:
306
+ dc.DrawText(line.GetText(), int(xoffset + line.GetX()), int(yoffset + line.GetY()))
307
+
308
+ dc.DestroyClippingRegion()
309
+
310
+
311
+ def RoughlyEqual(val1, val2, tol=0.00001):
312
+ """
313
+ Check if values are roughly equal
314
+
315
+ :param `val1`: the first value to check
316
+ :param `val2`: the second value to check
317
+ :param `tol`: the tolerance, defaults to 0.00001
318
+
319
+ :returns: True or False
320
+
321
+ """
322
+ return val1 < (val2 + tol) and val1 > (val2 - tol) and \
323
+ val2 < (val1 + tol) and val2 > (val1 - tol)
324
+
325
+
326
+ def FindEndForBox(width, height, x1, y1, x2, y2):
327
+ """
328
+ Find the end for a box
329
+
330
+ :param `width`: the width of the box
331
+ :param `height`: the height of the box
332
+ :param `x1`: x1 position
333
+ :param `y1`: y1 position
334
+ :param `x2`: x2 position
335
+ :param `y2`: y2 position
336
+
337
+ :returns: the end position
338
+
339
+ """
340
+ xvec = [x1 - width / 2.0, x1 - width / 2.0, x1 + width / 2.0, x1 + width / 2.0, x1 - width / 2.0]
341
+ yvec = [y1 - height / 2.0, y1 + height / 2.0, y1 + height / 2.0, y1 - height / 2.0, y1 - height / 2.0]
342
+
343
+ return FindEndForPolyline(xvec, yvec, x2, y2, x1, y1)
344
+
345
+
346
+ def CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4):
347
+ """
348
+ Check for line intersection
349
+
350
+ :param `x1`: x1 position
351
+ :param `y1`: y1 position
352
+ :param `x2`: x2 position
353
+ :param `y2`: y2 position
354
+ :param `x3`: x3 position
355
+ :param `y3`: y3 position
356
+ :param `x4`: x4 position
357
+ :param `y4`: y4 position
358
+
359
+ :returns: a length ratio and a k line???
360
+
361
+ """
362
+ denominator_term = (y4 - y3) * (x2 - x1) - (y2 - y1) * (x4 - x3)
363
+ numerator_term = (x3 - x1) * (y4 - y3) + (x4 - x3) * (y1 - y3)
364
+
365
+ length_ratio = 1.0
366
+ k_line = 1.0
367
+
368
+ # Check for parallel lines
369
+ if denominator_term < 0.005 and denominator_term > -0.005:
370
+ line_constant = -1.0
371
+ else:
372
+ line_constant = float(numerator_term) / denominator_term
373
+
374
+ # Check for intersection
375
+ if line_constant < 1.0 and line_constant > 0.0:
376
+ # Now must check that other line hits
377
+ if (y4 - y3) < 0.005 and (y4 - y3) > -0.005:
378
+ k_line = (x1 - x3 + line_constant * (x2 - x1)) / (x4 - x3)
379
+ else:
380
+ k_line = (y1 - y3 + line_constant * (y2 - y1)) / (y4 - y3)
381
+ if k_line >= 0 and k_line < 1:
382
+ length_ratio = line_constant
383
+ else:
384
+ k_line = 1
385
+
386
+ return length_ratio, k_line
387
+
388
+
389
+ def FindEndForPolyline(xvec, yvec, x1, y1, x2, y2):
390
+ """
391
+ Find the end for a polyline
392
+
393
+ :param `xvec`: x vector ???
394
+ :param `yvec`: y vector ???
395
+ :param `x1`: x1 position
396
+ :param `y1`: y1 position
397
+ :param `x2`: x2 position
398
+ :param `y2`: y2 position
399
+
400
+ :returns: the end position
401
+
402
+ """
403
+ lastx = xvec[0]
404
+ lasty = yvec[0]
405
+
406
+ min_ratio = 1.0
407
+
408
+ for i in range(1, len(xvec)):
409
+ line_ratio, other_ratio = CheckLineIntersection(x1, y1, x2, y2, lastx, lasty, xvec[i], yvec[i])
410
+ lastx = xvec[i]
411
+ lasty = yvec[i]
412
+
413
+ if line_ratio < min_ratio:
414
+ min_ratio = line_ratio
415
+
416
+ # Do last (implicit) line if last and first doubles are not identical
417
+ if not (xvec[0] == lastx and yvec[0] == lasty):
418
+ line_ratio, other_ratio = CheckLineIntersection(x1, y1, x2, y2, lastx, lasty, xvec[0], yvec[0])
419
+ if line_ratio < min_ratio:
420
+ min_ratio = line_ratio
421
+
422
+ return x1 + (x2 - x1) * min_ratio, y1 + (y2 - y1) * min_ratio
423
+
424
+
425
+ def PolylineHitTest(xvec, yvec, x1, y1, x2, y2):
426
+ """
427
+ Hittest for a polyline
428
+
429
+ :param `xvec`: x vector ???
430
+ :param `yvec`: y vector ???
431
+ :param `x1`: x1 position
432
+ :param `y1`: y1 position
433
+ :param `x2`: x2 position
434
+ :param `y2`: y2 position
435
+
436
+ :returns: True or False
437
+
438
+ """
439
+ isAHit = False
440
+ lastx = xvec[0]
441
+ lasty = yvec[0]
442
+
443
+ min_ratio = 1.0
444
+
445
+ for i in range(1, len(xvec)):
446
+ line_ratio, other_ratio = CheckLineIntersection(x1, y1, x2, y2, lastx, lasty, xvec[i], yvec[i])
447
+ if line_ratio != 1.0:
448
+ isAHit = True
449
+ lastx = xvec[i]
450
+ lasty = yvec[i]
451
+
452
+ if line_ratio < min_ratio:
453
+ min_ratio = line_ratio
454
+
455
+ # Do last (implicit) line if last and first doubles are not identical
456
+ if not (xvec[0] == lastx and yvec[0] == lasty):
457
+ line_ratio, other_ratio = CheckLineIntersection(x1, y1, x2, y2, lastx, lasty, xvec[0], yvec[0])
458
+ if line_ratio != 1.0:
459
+ isAHit = True
460
+
461
+ return isAHit
462
+
463
+
464
+ def GraphicsStraightenLine(point1, point2):
465
+ """
466
+ Straighten a line in graphics
467
+
468
+ :param `point1`: a point list???
469
+ :param `point2`: a point list???
470
+
471
+ """
472
+ dx = point2[0] - point1[0]
473
+ dy = point2[1] - point1[1]
474
+
475
+ if dx == 0:
476
+ return
477
+ elif abs(float(dy) / dx) > 1:
478
+ point2[0] = point1[0]
479
+ else:
480
+ point2[1] = point1[1]
481
+
482
+
483
+ def GetPointOnLine(x1, y1, x2, y2, length):
484
+ """
485
+ Get point on a line
486
+
487
+ :param `x1`: x1 position
488
+ :param `y1`: y1 position
489
+ :param `x2`: x2 position
490
+ :param `y2`: y2 position
491
+ :param `length`: length ???
492
+
493
+ :returns: point on line
494
+
495
+ """
496
+ l = math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
497
+ if l < 0.01:
498
+ l = 0.01
499
+
500
+ i_bar = (x2 - x1) / l
501
+ j_bar = (y2 - y1) / l
502
+
503
+ return -length * i_bar + x2, -length * j_bar + y2
504
+
505
+
506
+ def GetArrowPoints(x1, y1, x2, y2, length, width):
507
+ """
508
+ Get point on arrow
509
+
510
+ :param `x1`: x1 position
511
+ :param `y1`: y1 position
512
+ :param `x2`: x2 position
513
+ :param `y2`: y2 position
514
+ :param `length`: length ???
515
+ :param `width`: width ???
516
+
517
+ :returns: point on line
518
+
519
+ """
520
+ l = math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
521
+
522
+ if l < 0.01:
523
+ l = 0.01
524
+
525
+ i_bar = (x2 - x1) / l
526
+ j_bar = (y2 - y1) / l
527
+
528
+ x3 = -length * i_bar + x2
529
+ y3 = -length * j_bar + y2
530
+
531
+ return int(x2), int(y2), int(width * -j_bar + x3), int(width * i_bar + y3), int(-width * -j_bar + x3), int(-width * i_bar + y3)
532
+
533
+
534
+ def DrawArcToEllipse(x1, y1, width1, height1, x2, y2, x3, y3):
535
+ """
536
+ Draw arc to ellipse
537
+
538
+ :param `x1`: x1 position
539
+ :param `y1`: y1 position
540
+ :param `width1`: width
541
+ :param `height1`: height
542
+ :param `x2`: x2 position
543
+ :param `y2`: y2 position
544
+ :param `x3`: x3 position
545
+ :param `y3`: y3 position
546
+
547
+ :returns: ellipse points ???
548
+
549
+ """
550
+ a1 = width1 / 2.0
551
+ b1 = height1 / 2.0
552
+
553
+ # Check that x2 != x3
554
+ if abs(x2 - x3) < 0.05:
555
+ x4 = x2
556
+ if y3 > y2:
557
+ y4 = y1 - math.sqrt((b1 * b1 - (((x2 - x1) * (x2 - x1)) * (b1 * b1) / (a1 * a1))))
558
+ else:
559
+ y4 = y1 + math.sqrt((b1 * b1 - (((x2 - x1) * (x2 - x1)) * (b1 * b1) / (a1 * a1))))
560
+ return x4, y4
561
+
562
+ # Calculate the x and y coordinates of the point where arc intersects ellipse
563
+ A = (1 / (a1 * a1))
564
+ B = ((y3 - y2) * (y3 - y2)) / ((x3 - x2) * (x3 - x2) * b1 * b1)
565
+ C = (2 * (y3 - y2) * (y2 - y1)) / ((x3 - x2) * b1 * b1)
566
+ D = ((y2 - y1) * (y2 - y1)) / (b1 * b1)
567
+ E = (A + B)
568
+ F = (C - (2 * A * x1) - (2 * B * x2))
569
+ G = ((A * x1 * x1) + (B * x2 * x2) - (C * x2) + D - 1)
570
+ H = (float(y3 - y2) / (x3 - x2))
571
+ K = ((F * F) - (4 * E * G))
572
+
573
+ if K >= 0:
574
+ # In this case the line intersects the ellipse, so calculate intersection
575
+ if x2 >= x1:
576
+ ellipse1_x = ((F * -1) + math.sqrt(K)) / (2 * E)
577
+ ellipse1_y = ((H * (ellipse1_x - x2)) + y2)
578
+ else:
579
+ ellipse1_x = (((F * -1) - math.sqrt(K)) / (2 * E))
580
+ ellipse1_y = ((H * (ellipse1_x - x2)) + y2)
581
+ else:
582
+ # in this case, arc does not intersect ellipse, so just draw arc
583
+ ellipse1_x = x3
584
+ ellipse1_y = y3
585
+
586
+ return ellipse1_x, ellipse1_y
587
+
588
+
589
+ def FindEndForCircle(radius, x1, y1, x2, y2):
590
+ """
591
+ Find end for a circle
592
+
593
+ :param `radius`: radius
594
+ :param `x1`: x1 position
595
+ :param `y1`: y1 position
596
+ :param `x2`: x2 position
597
+ :param `y2`: y2 position
598
+
599
+ :returns: end position
600
+
601
+ """
602
+ H = math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
603
+
604
+ if H == 0:
605
+ return x1, y1
606
+ else:
607
+ return radius * (x2 - x1) / H + x1, radius * (y2 - y1) / H + y1
@@ -0,0 +1,113 @@
1
+ # Name: __init__.py
2
+ # Package: wx.lib.pdfviewer
3
+ #
4
+ # Purpose: A PDF file viewer
5
+ #
6
+ # Author: David Hughes dfh@forestfield.co.uk
7
+ # Copyright: Forestfield Software Ltd
8
+ # Licence: Same as wxPython host
9
+
10
+ # History: Created 17 Aug 2009
11
+ #
12
+ # Tags: phoenix-port, documented
13
+ #
14
+ #----------------------------------------------------------------------------
15
+ """
16
+ :class:`~wx.lib.pdfviewer.viewer.pdfViewer` class is derived from :class:`wx.ScrolledWindow` class
17
+ and can display and print PDF files.
18
+
19
+ Description
20
+ ===========
21
+
22
+ The :class:`~wx.lib.pdfviewer.viewer.pdfViewer` class is derived from :class:`wx.ScrolledWindow`
23
+ and can display and print PDF files. The whole file can be scrolled from
24
+ end to end at whatever magnification (zoom-level) is specified.
25
+
26
+ The viewer uses PyMuPDF (version 1.9.2 or later) or PyPDF2.
27
+ If neither of them are installed an import error exception will be raised.
28
+
29
+ PyMuPDF contains the Python bindings for the underlying MuPDF library, a cross platform,
30
+ complete PDF rendering library that is GPL licenced.
31
+
32
+ Further details on PyMuPDF can be found via https://pymupdf.readthedocs.io/en/latest/
33
+
34
+ PyPDF2 provides a PdfFileReader class that is used to read the content stream of a PDF
35
+ file which is subsequently rendered by :class:`~wx.lib.pdfviewer.viewer.pdfViewer` itself.
36
+ Please note that this is not a complete implementation of the pdf specification and
37
+ will probably fail to display any random file you supply. However it does seem to
38
+ satisfactorily render files typically produced by ReportLab using Western languages.
39
+ The main limitation is that it doesn't currently support embedded fonts.
40
+
41
+ Additional details on PyPDF2 can be found via http://pythonhosted.org/PyPDF2
42
+
43
+ There is an optional :class:`~wx.lib.pdfviewer.buttonpanel.pdfButtonPanel` class, derived from
44
+ :class:`~wx.lib.agw.buttonpanel`, that can be placed, for example, at the top of the
45
+ scrolled viewer window, and which contains navigation and zoom controls.
46
+
47
+ Usage
48
+ =====
49
+
50
+ Sample usage::
51
+
52
+ import wx
53
+ import wx.lib.sized_controls as sc
54
+
55
+ from wx.lib.pdfviewer import pdfViewer, pdfButtonPanel
56
+
57
+ class PDFViewer(sc.SizedFrame):
58
+ def __init__(self, parent, **kwds):
59
+ super(PDFViewer, self).__init__(parent, **kwds)
60
+
61
+ paneCont = self.GetContentsPane()
62
+ self.buttonpanel = pdfButtonPanel(paneCont, wx.ID_ANY,
63
+ wx.DefaultPosition, wx.DefaultSize, 0)
64
+ self.buttonpanel.SetSizerProps(expand=True)
65
+ self.viewer = pdfViewer(paneCont, wx.ID_ANY, wx.DefaultPosition,
66
+ wx.DefaultSize,
67
+ wx.HSCROLL|wx.VSCROLL|wx.SUNKEN_BORDER)
68
+
69
+ self.viewer.SetSizerProps(expand=True, proportion=1)
70
+
71
+ # introduce buttonpanel and viewer to each other
72
+ self.buttonpanel.viewer = self.viewer
73
+ self.viewer.buttonpanel = self.buttonpanel
74
+
75
+
76
+ if __name__ == '__main__':
77
+ import wx.lib.mixins.inspection as WIT
78
+ app = WIT.InspectableApp(redirect=False)
79
+
80
+ pdfV = PDFViewer(None, size=(800, 600))
81
+ pdfV.viewer.LoadFile(r'a path to a .pdf file')
82
+ pdfV.Show()
83
+
84
+ app.MainLoop()
85
+
86
+
87
+ Alternatively you can drive the viewer from controls in your own application.
88
+
89
+ Externally callable methods are:
90
+
91
+ :meth:`~wx.lib.pdfviewer.viewer.pdfViewer.LoadFile`
92
+
93
+ :meth:`~wx.lib.pdfviewer.viewer.pdfViewer.Save`
94
+
95
+ :meth:`~wx.lib.pdfviewer.viewer.pdfViewer.Print`
96
+
97
+ :meth:`~wx.lib.pdfviewer.viewer.pdfViewer.SetZoom`
98
+
99
+ :meth:`~wx.lib.pdfviewer.viewer.pdfViewer.GoPage`
100
+
101
+ The viewer renders the pdf file content using Cairo if installed,
102
+ otherwise :class:`wx.GraphicsContext` is used. Printing is achieved by writing
103
+ directly to a :class:`wx.PrinterDC` and using :class:`wx.Printer`.
104
+
105
+ The icons used in :class:`~wx.lib.pdfviewer.buttonpanel.pdfButtonPanel` are Free Icons
106
+ by Axialis Software: http://www.axialis.com. You can freely use them in any project,
107
+ commercially or not, but you must keep the credits of the authors:
108
+ "Axialis Team", even if you modify them. See ./bitmaps/ReadMe.txt for further details.
109
+
110
+ """
111
+
112
+ from .viewer import pdfViewer
113
+ from .buttonpanel import pdfButtonPanel
Binary file