wxPython-zombie 3.1.5.8__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wx/__init__.py +22 -0
- wx/__version__.py +9 -0
- wx/_adv.cp313-win_amd64.pyd +0 -0
- wx/_aui.cp313-win_amd64.pyd +0 -0
- wx/_core.cp313-win_amd64.pyd +0 -0
- wx/_dataview.cp313-win_amd64.pyd +0 -0
- wx/_glcanvas.cp313-win_amd64.pyd +0 -0
- wx/_grid.cp313-win_amd64.pyd +0 -0
- wx/_html.cp313-win_amd64.pyd +0 -0
- wx/_html2.cp313-win_amd64.pyd +0 -0
- wx/_media.cp313-win_amd64.pyd +0 -0
- wx/_msw.cp313-win_amd64.pyd +0 -0
- wx/_propgrid.cp313-win_amd64.pyd +0 -0
- wx/_ribbon.cp313-win_amd64.pyd +0 -0
- wx/_richtext.cp313-win_amd64.pyd +0 -0
- wx/_stc.cp313-win_amd64.pyd +0 -0
- wx/_xml.cp313-win_amd64.pyd +0 -0
- wx/_xrc.cp313-win_amd64.pyd +0 -0
- wx/adv.py +124 -0
- wx/adv.pyi +5182 -0
- wx/aui.py +77 -0
- wx/aui.pyi +3655 -0
- wx/core.py +3540 -0
- wx/core.pyi +50592 -0
- wx/dataview.py +173 -0
- wx/dataview.pyi +3491 -0
- wx/demo/AUI_DockingWindowMgr.py +1154 -0
- wx/demo/AUI_MDI.py +117 -0
- wx/demo/AUI_Notebook.py +58 -0
- wx/demo/About.py +75 -0
- wx/demo/AboutBox.py +75 -0
- wx/demo/ActiveXWrapper_Acrobat.py +132 -0
- wx/demo/ActiveXWrapper_IE.py +187 -0
- wx/demo/ActiveX_FlashWindow.py +107 -0
- wx/demo/ActiveX_IEHtmlWindow.py +242 -0
- wx/demo/ActiveX_PDFWindow.py +204 -0
- wx/demo/ActivityIndicator.py +80 -0
- wx/demo/AddPrivateFont.py +116 -0
- wx/demo/AdjustChannels.py +178 -0
- wx/demo/AlphaDrawing.py +77 -0
- wx/demo/AnalogClock.py +144 -0
- wx/demo/AnimationCtrl.py +104 -0
- wx/demo/ArtProvider.py +893 -0
- wx/demo/BannerWindow.py +1 -0
- wx/demo/BitmapButton.py +87 -0
- wx/demo/BitmapComboBox.py +63 -0
- wx/demo/BitmapFromBuffer.py +140 -0
- wx/demo/Button.py +77 -0
- wx/demo/Cairo.py +197 -0
- wx/demo/Cairo_Snippets.py +135 -0
- wx/demo/Calendar.py +660 -0
- wx/demo/CalendarCtrl.py +122 -0
- wx/demo/CheckBox.py +74 -0
- wx/demo/CheckListBox.py +79 -0
- wx/demo/CheckListCtrl.py +99 -0
- wx/demo/Choice.py +55 -0
- wx/demo/Choicebook.py +80 -0
- wx/demo/CollapsibleHeaderCtrl.py +85 -0
- wx/demo/CollapsiblePane.py +126 -0
- wx/demo/ColorPanel.py +19 -0
- wx/demo/ColourDB.py +203 -0
- wx/demo/ColourDialog.py +76 -0
- wx/demo/ColourSelect.py +119 -0
- wx/demo/ComboBox.py +111 -0
- wx/demo/ComboCtrl.py +153 -0
- wx/demo/ComboTreeBox.py +71 -0
- wx/demo/CommandLinkButton.py +50 -0
- wx/demo/ContextHelp.py +112 -0
- wx/demo/Cursor.py +336 -0
- wx/demo/CustomDragAndDrop.py +353 -0
- wx/demo/DVC_CustomRenderer.py +204 -0
- wx/demo/DVC_DataViewModel.py +365 -0
- wx/demo/DVC_IndexListModel.py +257 -0
- wx/demo/DVC_ListCtrl.py +69 -0
- wx/demo/DVC_TreeCtrl.py +76 -0
- wx/demo/DatePickerCtrl.py +68 -0
- wx/demo/DelayedResult.py +239 -0
- wx/demo/Dialog.py +169 -0
- wx/demo/DialogUnits.py +128 -0
- wx/demo/DirDialog.py +58 -0
- wx/demo/DragAndDrop.py +265 -0
- wx/demo/DragImage.py +316 -0
- wx/demo/DragScroller.py +59 -0
- wx/demo/DrawXXXList.py +436 -0
- wx/demo/DynamicSashWindow.py +177 -0
- wx/demo/EditableListBox.py +101 -0
- wx/demo/Editor.py +70 -0
- wx/demo/EventManager.py +291 -0
- wx/demo/ExpandoTextCtrl.py +164 -0
- wx/demo/FancyText.py +83 -0
- wx/demo/FileBrowseButton.py +100 -0
- wx/demo/FileCtrl.py +97 -0
- wx/demo/FileDialog.py +144 -0
- wx/demo/FileHistory.py +140 -0
- wx/demo/FindReplaceDialog.py +123 -0
- wx/demo/FloatCanvas.py +1959 -0
- wx/demo/FontDialog.py +142 -0
- wx/demo/FontEnumerator.py +82 -0
- wx/demo/Frame.py +85 -0
- wx/demo/GLCanvas.py +371 -0
- wx/demo/Gauge.py +66 -0
- wx/demo/GenericButtons.py +185 -0
- wx/demo/GenericCheckBox.py +65 -0
- wx/demo/GenericDirCtrl.py +74 -0
- wx/demo/GetMouseState.py +159 -0
- wx/demo/GraphicsContext.py +236 -0
- wx/demo/GraphicsGradient.py +281 -0
- wx/demo/Grid.py +95 -0
- wx/demo/GridBagSizer.py +170 -0
- wx/demo/GridCustEditor.py +247 -0
- wx/demo/GridCustTable.py +170 -0
- wx/demo/GridDragAndDrop.py +102 -0
- wx/demo/GridDragable.py +206 -0
- wx/demo/GridEnterHandler.py +66 -0
- wx/demo/GridHugeTable.py +89 -0
- wx/demo/GridLabelRenderer.py +114 -0
- wx/demo/GridSimple.py +270 -0
- wx/demo/GridStdEdRend.py +186 -0
- wx/demo/Grid_MegaExample.py +490 -0
- wx/demo/HTML2_WebView.py +183 -0
- wx/demo/HtmlWindow.py +232 -0
- wx/demo/I18N.py +237 -0
- wx/demo/Image.py +338 -0
- wx/demo/ImageAlpha.py +87 -0
- wx/demo/ImageBrowser.py +70 -0
- wx/demo/ImageFromStream.py +49 -0
- wx/demo/Img2PyArtProvider.py +99 -0
- wx/demo/InfoBar.py +127 -0
- wx/demo/IntCtrl.py +343 -0
- wx/demo/ItemsPicker.py +108 -0
- wx/demo/Joystick.py +1083 -0
- wx/demo/KeyEvents.py +428 -0
- wx/demo/LEDNumberCtrl.py +121 -0
- wx/demo/LayoutAnchors.py +258 -0
- wx/demo/LayoutConstraints.py +149 -0
- wx/demo/Layoutf.py +69 -0
- wx/demo/ListBox.py +164 -0
- wx/demo/ListCtrl.py +538 -0
- wx/demo/ListCtrl_edit.py +155 -0
- wx/demo/ListCtrl_virtual.py +145 -0
- wx/demo/Listbook.py +104 -0
- wx/demo/MDIDemo.py +86 -0
- wx/demo/MDISashDemo.py +152 -0
- wx/demo/MDIWindows.py +66 -0
- wx/demo/Main.py +2768 -0
- wx/demo/Mask.py +137 -0
- wx/demo/MaskedEditControls.py +648 -0
- wx/demo/MaskedNumCtrl.py +359 -0
- wx/demo/MediaCtrl.py +190 -0
- wx/demo/Menu.py +322 -0
- wx/demo/MessageDialog.py +54 -0
- wx/demo/MimeTypesManager.py +354 -0
- wx/demo/MiniFrame.py +67 -0
- wx/demo/MouseGestures.py +198 -0
- wx/demo/MultiChoiceDialog.py +59 -0
- wx/demo/MultiSash.py +95 -0
- wx/demo/MultiSplitterWindow.py +168 -0
- wx/demo/MultipleChoiceDialog.py +101 -0
- wx/demo/Notebook.py +134 -0
- wx/demo/NotificationMessage.py +61 -0
- wx/demo/OGL.py +433 -0
- wx/demo/Overlay.py +209 -0
- wx/demo/OwnerDrawnComboBox.py +152 -0
- wx/demo/PDFViewer.py +109 -0
- wx/demo/PageSetupDialog.py +70 -0
- wx/demo/PenAndBrushStyles.py +208 -0
- wx/demo/Pickers.py +120 -0
- wx/demo/PlateButton.py +430 -0
- wx/demo/PopupControl.py +99 -0
- wx/demo/PopupMenu.py +156 -0
- wx/demo/PopupWindow.py +227 -0
- wx/demo/PrintDialog.py +60 -0
- wx/demo/PrintFramework.py +227 -0
- wx/demo/Process.py +168 -0
- wx/demo/ProgressDialog.py +87 -0
- wx/demo/PropertyGrid.py +1045 -0
- wx/demo/PropertySheetDialog.py +231 -0
- wx/demo/PseudoDC.py +350 -0
- wx/demo/PyColourChooser.py +60 -0
- wx/demo/PyCrust.py +21 -0
- wx/demo/PyPlot.py +83 -0
- wx/demo/PyShell.py +22 -0
- wx/demo/PythonEvents.py +109 -0
- wx/demo/README.txt +7 -0
- wx/demo/RadioBox.py +67 -0
- wx/demo/RadioButton.py +127 -0
- wx/demo/RawBitmapAccess.py +208 -0
- wx/demo/RearrangeDialog.py +160 -0
- wx/demo/RendererNative.py +170 -0
- wx/demo/ResizeWidget.py +76 -0
- wx/demo/RichMessageDialog.py +85 -0
- wx/demo/RichTextCtrl.py +732 -0
- wx/demo/RichToolTip.py +145 -0
- wx/demo/SVGImage_Bitmap.py +130 -0
- wx/demo/SVGImage_Render.py +138 -0
- wx/demo/SashWindow.py +151 -0
- wx/demo/ScrolledMessageDialog.py +52 -0
- wx/demo/ScrolledPanel.py +124 -0
- wx/demo/ScrolledWindow.py +260 -0
- wx/demo/SearchCtrl.py +115 -0
- wx/demo/ShapedWindow.py +145 -0
- wx/demo/Simplebook.py +202 -0
- wx/demo/SingleChoiceDialog.py +56 -0
- wx/demo/SizedControls.py +433 -0
- wx/demo/Sizers.py +609 -0
- wx/demo/Slider.py +52 -0
- wx/demo/Sound.py +95 -0
- wx/demo/SpinButton.py +63 -0
- wx/demo/SpinCtrl.py +56 -0
- wx/demo/SpinCtrlDouble.py +42 -0
- wx/demo/SplitTree.py +146 -0
- wx/demo/SplitterWindow.py +62 -0
- wx/demo/StandardPaths.py +113 -0
- wx/demo/StaticBitmap.py +55 -0
- wx/demo/StaticBox.py +62 -0
- wx/demo/StaticText.py +69 -0
- wx/demo/StatusBar.py +144 -0
- wx/demo/StockButtons.py +113 -0
- wx/demo/StyledTextCtrl_1.py +303 -0
- wx/demo/StyledTextCtrl_2.py +410 -0
- wx/demo/SystemSettings.py +333 -0
- wx/demo/TablePrint.py +215 -0
- wx/demo/TestTable.txt +38 -0
- wx/demo/TextCtrl.py +187 -0
- wx/demo/TextEntryDialog.py +57 -0
- wx/demo/Threads.py +258 -0
- wx/demo/Throbber.py +250 -0
- wx/demo/Ticker.py +147 -0
- wx/demo/TimeCtrl.py +240 -0
- wx/demo/TimePickerCtrl.py +60 -0
- wx/demo/Timer.py +275 -0
- wx/demo/ToggleButton.py +54 -0
- wx/demo/ToolBar.py +249 -0
- wx/demo/ToolTip.py +71 -0
- wx/demo/Toolbook.py +111 -0
- wx/demo/TreeCtrl.py +199 -0
- wx/demo/TreeListCtrl.py +121 -0
- wx/demo/TreeMixin.py +269 -0
- wx/demo/Treebook.py +117 -0
- wx/demo/UIActionSimulator.py +151 -0
- wx/demo/URLDragAndDrop.py +130 -0
- wx/demo/Unicode.py +146 -0
- wx/demo/VListBox.py +176 -0
- wx/demo/Validator.py +237 -0
- wx/demo/Wizard.py +248 -0
- wx/demo/WrapSizer.py +115 -0
- wx/demo/XmlResource.py +80 -0
- wx/demo/XmlResourceHandler.py +199 -0
- wx/demo/XmlResourceSubclass.py +119 -0
- wx/demo/__init__.py +9 -0
- wx/demo/agw/AGWInfoBar.py +175 -0
- wx/demo/agw/AUI.py +3058 -0
- wx/demo/agw/AdvancedSplash.py +59 -0
- wx/demo/agw/AquaButton.py +146 -0
- wx/demo/agw/BalloonTip.py +378 -0
- wx/demo/agw/ButtonPanel.py +890 -0
- wx/demo/agw/CubeColourDialog.py +83 -0
- wx/demo/agw/CustomTreeCtrl.py +2167 -0
- wx/demo/agw/Example1 +67 -0
- wx/demo/agw/Example2 +49 -0
- wx/demo/agw/FlatMenu.py +876 -0
- wx/demo/agw/FlatNotebook.py +994 -0
- wx/demo/agw/FloatSpin.py +475 -0
- wx/demo/agw/FoldPanelBar.py +953 -0
- wx/demo/agw/FourWaySplitter.py +300 -0
- wx/demo/agw/GenericMessageDialog.py +207 -0
- wx/demo/agw/GradientButton.py +156 -0
- wx/demo/agw/HyperLinkCtrl.py +144 -0
- wx/demo/agw/HyperTreeList.py +2660 -0
- wx/demo/agw/KnobCtrl.py +186 -0
- wx/demo/agw/LabelBook.py +567 -0
- wx/demo/agw/MacLargeDemo.py +360 -0
- wx/demo/agw/MultiDirDialog.py +117 -0
- wx/demo/agw/PeakMeter.py +194 -0
- wx/demo/agw/PersistentControls.py +589 -0
- wx/demo/agw/PieCtrl.py +206 -0
- wx/demo/agw/PyBusyInfo.py +64 -0
- wx/demo/agw/PyCollapsiblePane.py +308 -0
- wx/demo/agw/PyGauge.py +162 -0
- wx/demo/agw/PyProgress.py +155 -0
- wx/demo/agw/RibbonBar.py +925 -0
- wx/demo/agw/RulerCtrl.py +454 -0
- wx/demo/agw/ScrolledThumbnail.py +128 -0
- wx/demo/agw/ShapedButton.py +603 -0
- wx/demo/agw/ShortcutEditor.py +397 -0
- wx/demo/agw/SpeedMeter.py +668 -0
- wx/demo/agw/SuperToolTip.py +396 -0
- wx/demo/agw/ThumbDemoConfig.py +603 -0
- wx/demo/agw/ThumbnailCtrl.py +149 -0
- wx/demo/agw/ToasterBox.py +410 -0
- wx/demo/agw/UltimateListCtrl.py +80 -0
- wx/demo/agw/UltimateListIconDemo.py +908 -0
- wx/demo/agw/UltimateListListDemo.py +124 -0
- wx/demo/agw/UltimateReportDemo.py +1146 -0
- wx/demo/agw/UltimateVirtualDemo.py +207 -0
- wx/demo/agw/Windows7Explorer_Contents.py +368 -0
- wx/demo/agw/XLSGrid.py +238 -0
- wx/demo/agw/ZoomBar.py +230 -0
- wx/demo/agw/__demo__.py +183 -0
- wx/demo/agw/bitmaps/Explorer96.png +0 -0
- wx/demo/agw/bitmaps/Explorer96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Folder96.png +0 -0
- wx/demo/agw/bitmaps/Folder96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Monitor96.png +0 -0
- wx/demo/agw/bitmaps/Monitor96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Music96.png +0 -0
- wx/demo/agw/bitmaps/Music96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Photo96.png +0 -0
- wx/demo/agw/bitmaps/Photo96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Search96.png +0 -0
- wx/demo/agw/bitmaps/Search96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Wizard96.png +0 -0
- wx/demo/agw/bitmaps/Wizard96Flip40.png +0 -0
- wx/demo/agw/bitmaps/advancedsplash.png +0 -0
- wx/demo/agw/bitmaps/aquabutton.png +0 -0
- wx/demo/agw/bitmaps/aquachecked.ico +0 -0
- wx/demo/agw/bitmaps/aquaflagged.ico +0 -0
- wx/demo/agw/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/agw/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/agw/bitmaps/canada.gif +0 -0
- wx/demo/agw/bitmaps/checked.ico +0 -0
- wx/demo/agw/bitmaps/columns.png +0 -0
- wx/demo/agw/bitmaps/contexthelp-16.png +0 -0
- wx/demo/agw/bitmaps/contexthelp.png +0 -0
- wx/demo/agw/bitmaps/copy.png +0 -0
- wx/demo/agw/bitmaps/cut.png +0 -0
- wx/demo/agw/bitmaps/editcopy.png +0 -0
- wx/demo/agw/bitmaps/editcut.png +0 -0
- wx/demo/agw/bitmaps/editpaste.png +0 -0
- wx/demo/agw/bitmaps/empty_icon.png +0 -0
- wx/demo/agw/bitmaps/exit-16.png +0 -0
- wx/demo/agw/bitmaps/exit.ico +0 -0
- wx/demo/agw/bitmaps/ffwd.png +0 -0
- wx/demo/agw/bitmaps/ffwddisabled.png +0 -0
- wx/demo/agw/bitmaps/field-16.png +0 -0
- wx/demo/agw/bitmaps/filenew.png +0 -0
- wx/demo/agw/bitmaps/fileopen.png +0 -0
- wx/demo/agw/bitmaps/filesave.png +0 -0
- wx/demo/agw/bitmaps/flagged.ico +0 -0
- wx/demo/agw/bitmaps/folder.png +0 -0
- wx/demo/agw/bitmaps/folder_new.png +0 -0
- wx/demo/agw/bitmaps/ghost.png +0 -0
- wx/demo/agw/bitmaps/gradientbutton.png +0 -0
- wx/demo/agw/bitmaps/help-16.png +0 -0
- wx/demo/agw/bitmaps/help.ico +0 -0
- wx/demo/agw/bitmaps/italy.gif +0 -0
- wx/demo/agw/bitmaps/lbadd.png +0 -0
- wx/demo/agw/bitmaps/lbcharge.png +0 -0
- wx/demo/agw/bitmaps/lbdecrypted.png +0 -0
- wx/demo/agw/bitmaps/lbnews.png +0 -0
- wx/demo/agw/bitmaps/lbroll.png +0 -0
- wx/demo/agw/bitmaps/minus1.ico +0 -0
- wx/demo/agw/bitmaps/minus2.ico +0 -0
- wx/demo/agw/bitmaps/minus3.ico +0 -0
- wx/demo/agw/bitmaps/minus4.ico +0 -0
- wx/demo/agw/bitmaps/minus5.ico +0 -0
- wx/demo/agw/bitmaps/month-16.png +0 -0
- wx/demo/agw/bitmaps/new_file.png +0 -0
- wx/demo/agw/bitmaps/new_folder.png +0 -0
- wx/demo/agw/bitmaps/notchecked.ico +0 -0
- wx/demo/agw/bitmaps/notflagged.ico +0 -0
- wx/demo/agw/bitmaps/ok-16.png +0 -0
- wx/demo/agw/bitmaps/open_folder.png +0 -0
- wx/demo/agw/bitmaps/paste.png +0 -0
- wx/demo/agw/bitmaps/pause.png +0 -0
- wx/demo/agw/bitmaps/pausedisabled.png +0 -0
- wx/demo/agw/bitmaps/play.png +0 -0
- wx/demo/agw/bitmaps/playdisabled.png +0 -0
- wx/demo/agw/bitmaps/plus1.ico +0 -0
- wx/demo/agw/bitmaps/plus2.ico +0 -0
- wx/demo/agw/bitmaps/plus3.ico +0 -0
- wx/demo/agw/bitmaps/plus4.ico +0 -0
- wx/demo/agw/bitmaps/plus5.ico +0 -0
- wx/demo/agw/bitmaps/record.png +0 -0
- wx/demo/agw/bitmaps/recorddisabled.png +0 -0
- wx/demo/agw/bitmaps/recording.gif +0 -0
- wx/demo/agw/bitmaps/rewind.png +0 -0
- wx/demo/agw/bitmaps/rewinddisabled.png +0 -0
- wx/demo/agw/bitmaps/round.png +0 -0
- wx/demo/agw/bitmaps/save.png +0 -0
- wx/demo/agw/bitmaps/separator.gif +0 -0
- wx/demo/agw/bitmaps/separatorflip.png +0 -0
- wx/demo/agw/bitmaps/smfuel.ico +0 -0
- wx/demo/agw/bitmaps/smpi.ico +0 -0
- wx/demo/agw/bitmaps/smtemp.ico +0 -0
- wx/demo/agw/bitmaps/stop.png +0 -0
- wx/demo/agw/bitmaps/stopdisabled.png +0 -0
- wx/demo/agw/bitmaps/sttbutton.png +0 -0
- wx/demo/agw/bitmaps/sttfont.png +0 -0
- wx/demo/agw/bitmaps/sttheader.png +0 -0
- wx/demo/agw/bitmaps/stthelp.png +0 -0
- wx/demo/agw/bitmaps/view1.png +0 -0
- wx/demo/agw/bitmaps/view2.png +0 -0
- wx/demo/agw/bitmaps/view_choose.png +0 -0
- wx/demo/agw/bitmaps/view_detailed.png +0 -0
- wx/demo/agw/bitmaps/view_icon.png +0 -0
- wx/demo/agw/bitmaps/view_multicolumn.png +0 -0
- wx/demo/agw/bitmaps/viewmag-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/agw/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/agw/data/Example_1.xls +0 -0
- wx/demo/agw/images.py +6714 -0
- wx/demo/bitmaps/AG00028_.gif +0 -0
- wx/demo/bitmaps/AG00039_.gif +0 -0
- wx/demo/bitmaps/AG00178_.gif +0 -0
- wx/demo/bitmaps/AG00183_.gif +0 -0
- wx/demo/bitmaps/AG00185_.gif +0 -0
- wx/demo/bitmaps/BD13656_.gif +0 -0
- wx/demo/bitmaps/advancedsplash.png +0 -0
- wx/demo/bitmaps/aquabutton.png +0 -0
- wx/demo/bitmaps/aquachecked.ico +0 -0
- wx/demo/bitmaps/aquaflagged.ico +0 -0
- wx/demo/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/bitmaps/canada.gif +0 -0
- wx/demo/bitmaps/checked.ico +0 -0
- wx/demo/bitmaps/columns.png +0 -0
- wx/demo/bitmaps/contexthelp-16.png +0 -0
- wx/demo/bitmaps/contexthelp.png +0 -0
- wx/demo/bitmaps/copy.png +0 -0
- wx/demo/bitmaps/cropshot24x20.png +0 -0
- wx/demo/bitmaps/cut.png +0 -0
- wx/demo/bitmaps/editcopy.png +0 -0
- wx/demo/bitmaps/editcut.png +0 -0
- wx/demo/bitmaps/editpaste.png +0 -0
- wx/demo/bitmaps/exit-16.png +0 -0
- wx/demo/bitmaps/exit.ico +0 -0
- wx/demo/bitmaps/ffwd.png +0 -0
- wx/demo/bitmaps/ffwddisabled.png +0 -0
- wx/demo/bitmaps/field-16.png +0 -0
- wx/demo/bitmaps/filenew.png +0 -0
- wx/demo/bitmaps/fileopen.png +0 -0
- wx/demo/bitmaps/filesave.png +0 -0
- wx/demo/bitmaps/flagged.ico +0 -0
- wx/demo/bitmaps/folder_new.png +0 -0
- wx/demo/bitmaps/ghost.png +0 -0
- wx/demo/bitmaps/gradientbutton.png +0 -0
- wx/demo/bitmaps/help-16.png +0 -0
- wx/demo/bitmaps/help.ico +0 -0
- wx/demo/bitmaps/honeycomb300.png +0 -0
- wx/demo/bitmaps/image.bmp +0 -0
- wx/demo/bitmaps/image.gif +0 -0
- wx/demo/bitmaps/image.ico +0 -0
- wx/demo/bitmaps/image.jpg +0 -0
- wx/demo/bitmaps/image.png +0 -0
- wx/demo/bitmaps/image.tif +0 -0
- wx/demo/bitmaps/italy.gif +0 -0
- wx/demo/bitmaps/lbadd.png +0 -0
- wx/demo/bitmaps/lbcharge.png +0 -0
- wx/demo/bitmaps/lbdecrypted.png +0 -0
- wx/demo/bitmaps/lbnews.png +0 -0
- wx/demo/bitmaps/lbroll.png +0 -0
- wx/demo/bitmaps/minus1.ico +0 -0
- wx/demo/bitmaps/minus2.ico +0 -0
- wx/demo/bitmaps/minus3.ico +0 -0
- wx/demo/bitmaps/minus4.ico +0 -0
- wx/demo/bitmaps/minus5.ico +0 -0
- wx/demo/bitmaps/month-16.png +0 -0
- wx/demo/bitmaps/new_file.png +0 -0
- wx/demo/bitmaps/new_folder.png +0 -0
- wx/demo/bitmaps/notchecked.ico +0 -0
- wx/demo/bitmaps/notflagged.ico +0 -0
- wx/demo/bitmaps/ok-16.png +0 -0
- wx/demo/bitmaps/open_folder.png +0 -0
- wx/demo/bitmaps/paste.png +0 -0
- wx/demo/bitmaps/pause.png +0 -0
- wx/demo/bitmaps/pausedisabled.png +0 -0
- wx/demo/bitmaps/phoenix_title.png +0 -0
- wx/demo/bitmaps/phoenix_top.png +0 -0
- wx/demo/bitmaps/play.png +0 -0
- wx/demo/bitmaps/playdisabled.png +0 -0
- wx/demo/bitmaps/plus1.ico +0 -0
- wx/demo/bitmaps/plus2.ico +0 -0
- wx/demo/bitmaps/plus3.ico +0 -0
- wx/demo/bitmaps/plus4.ico +0 -0
- wx/demo/bitmaps/plus5.ico +0 -0
- wx/demo/bitmaps/record.png +0 -0
- wx/demo/bitmaps/recorddisabled.png +0 -0
- wx/demo/bitmaps/rewind.png +0 -0
- wx/demo/bitmaps/rewinddisabled.png +0 -0
- wx/demo/bitmaps/round.png +0 -0
- wx/demo/bitmaps/save.png +0 -0
- wx/demo/bitmaps/smfuel.ico +0 -0
- wx/demo/bitmaps/smpi.ico +0 -0
- wx/demo/bitmaps/smtemp.ico +0 -0
- wx/demo/bitmaps/snakey_render.png +0 -0
- wx/demo/bitmaps/splash.png +0 -0
- wx/demo/bitmaps/stop.png +0 -0
- wx/demo/bitmaps/stopdisabled.png +0 -0
- wx/demo/bitmaps/sttbutton.png +0 -0
- wx/demo/bitmaps/sttfont.png +0 -0
- wx/demo/bitmaps/sttheader.png +0 -0
- wx/demo/bitmaps/stthelp.png +0 -0
- wx/demo/bitmaps/toucan.png +0 -0
- wx/demo/bitmaps/view1.png +0 -0
- wx/demo/bitmaps/view2.png +0 -0
- wx/demo/bitmaps/view_choose.png +0 -0
- wx/demo/bitmaps/view_detailed.png +0 -0
- wx/demo/bitmaps/view_icon.png +0 -0
- wx/demo/bitmaps/view_multicolumn.png +0 -0
- wx/demo/bitmaps/viewmag-16.png +0 -0
- wx/demo/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/bmp_source/001.png +0 -0
- wx/demo/bmp_source/002.png +0 -0
- wx/demo/bmp_source/003.png +0 -0
- wx/demo/bmp_source/004.png +0 -0
- wx/demo/bmp_source/005.png +0 -0
- wx/demo/bmp_source/006.png +0 -0
- wx/demo/bmp_source/007.png +0 -0
- wx/demo/bmp_source/008.png +0 -0
- wx/demo/bmp_source/009.png +0 -0
- wx/demo/bmp_source/010.png +0 -0
- wx/demo/bmp_source/011.png +0 -0
- wx/demo/bmp_source/012.png +0 -0
- wx/demo/bmp_source/013.png +0 -0
- wx/demo/bmp_source/014.png +0 -0
- wx/demo/bmp_source/015.png +0 -0
- wx/demo/bmp_source/016.png +0 -0
- wx/demo/bmp_source/017.png +0 -0
- wx/demo/bmp_source/018.png +0 -0
- wx/demo/bmp_source/019.png +0 -0
- wx/demo/bmp_source/020.png +0 -0
- wx/demo/bmp_source/021.png +0 -0
- wx/demo/bmp_source/022.png +0 -0
- wx/demo/bmp_source/023.png +0 -0
- wx/demo/bmp_source/024.png +0 -0
- wx/demo/bmp_source/025.png +0 -0
- wx/demo/bmp_source/026.png +0 -0
- wx/demo/bmp_source/027.png +0 -0
- wx/demo/bmp_source/028.png +0 -0
- wx/demo/bmp_source/029.png +0 -0
- wx/demo/bmp_source/030.png +0 -0
- wx/demo/bmp_source/DbDec.bmp +0 -0
- wx/demo/bmp_source/DbInc.bmp +0 -0
- wx/demo/bmp_source/Dec.bmp +0 -0
- wx/demo/bmp_source/FRM_0.png +0 -0
- wx/demo/bmp_source/FRM_1.png +0 -0
- wx/demo/bmp_source/FRM_2.png +0 -0
- wx/demo/bmp_source/FRM_3.png +0 -0
- wx/demo/bmp_source/FRM_4.png +0 -0
- wx/demo/bmp_source/FRM_5.png +0 -0
- wx/demo/bmp_source/FRM_6.png +0 -0
- wx/demo/bmp_source/FRM_7.png +0 -0
- wx/demo/bmp_source/FRM_8.png +0 -0
- wx/demo/bmp_source/GridBG.gif +0 -0
- wx/demo/bmp_source/Inc.bmp +0 -0
- wx/demo/bmp_source/LB01.png +0 -0
- wx/demo/bmp_source/LB02.png +0 -0
- wx/demo/bmp_source/LB03.png +0 -0
- wx/demo/bmp_source/LB04.png +0 -0
- wx/demo/bmp_source/LB05.png +0 -0
- wx/demo/bmp_source/LB06.png +0 -0
- wx/demo/bmp_source/LB07.png +0 -0
- wx/demo/bmp_source/LB08.png +0 -0
- wx/demo/bmp_source/LB09.png +0 -0
- wx/demo/bmp_source/LB10.png +0 -0
- wx/demo/bmp_source/LB11.png +0 -0
- wx/demo/bmp_source/LB12.png +0 -0
- wx/demo/bmp_source/Pt.bmp +0 -0
- wx/demo/bmp_source/Vippi.png +0 -0
- wx/demo/bmp_source/backgrnd.png +0 -0
- wx/demo/bmp_source/book.png +0 -0
- wx/demo/bmp_source/book_blue.png +0 -0
- wx/demo/bmp_source/book_green.png +0 -0
- wx/demo/bmp_source/book_red.png +0 -0
- wx/demo/bmp_source/bp_btn1.png +0 -0
- wx/demo/bmp_source/bp_btn2.png +0 -0
- wx/demo/bmp_source/bp_btn3.png +0 -0
- wx/demo/bmp_source/bp_btn4.png +0 -0
- wx/demo/bmp_source/bulb1.bmp +0 -0
- wx/demo/bmp_source/bulb2.bmp +0 -0
- wx/demo/bmp_source/carrot.png +0 -0
- wx/demo/bmp_source/clipboard.png +0 -0
- wx/demo/bmp_source/code.png +0 -0
- wx/demo/bmp_source/core.png +0 -0
- wx/demo/bmp_source/custom.png +0 -0
- wx/demo/bmp_source/customcontrol.png +0 -0
- wx/demo/bmp_source/deletedocs.png +0 -0
- wx/demo/bmp_source/deleteperspective.png +0 -0
- wx/demo/bmp_source/demo.png +0 -0
- wx/demo/bmp_source/dialog.png +0 -0
- wx/demo/bmp_source/exit.png +0 -0
- wx/demo/bmp_source/expansion.png +0 -0
- wx/demo/bmp_source/find.png +0 -0
- wx/demo/bmp_source/findnext.png +0 -0
- wx/demo/bmp_source/floatcanvas.png +0 -0
- wx/demo/bmp_source/frame.png +0 -0
- wx/demo/bmp_source/images.png +0 -0
- wx/demo/bmp_source/inspect.png +0 -0
- wx/demo/bmp_source/layout.png +0 -0
- wx/demo/bmp_source/logo.png +0 -0
- wx/demo/bmp_source/miscellaneous.png +0 -0
- wx/demo/bmp_source/modifiedexists.png +0 -0
- wx/demo/bmp_source/mondrian.ico +0 -0
- wx/demo/bmp_source/morecontrols.png +0 -0
- wx/demo/bmp_source/moredialog.png +0 -0
- wx/demo/bmp_source/noicon.png +0 -0
- wx/demo/bmp_source/overview.png +0 -0
- wx/demo/bmp_source/pencil.png +0 -0
- wx/demo/bmp_source/pointy.png +0 -0
- wx/demo/bmp_source/process.png +0 -0
- wx/demo/bmp_source/pyshell.png +0 -0
- wx/demo/bmp_source/recent.png +0 -0
- wx/demo/bmp_source/rest.png +0 -0
- wx/demo/bmp_source/robin.jpg +0 -0
- wx/demo/bmp_source/rt_alignleft.xpm +24 -0
- wx/demo/bmp_source/rt_alignright.xpm +24 -0
- wx/demo/bmp_source/rt_bold.xpm +24 -0
- wx/demo/bmp_source/rt_centre.xpm +24 -0
- wx/demo/bmp_source/rt_colour.xpm +59 -0
- wx/demo/bmp_source/rt_copy.xpm +44 -0
- wx/demo/bmp_source/rt_cut.xpm +46 -0
- wx/demo/bmp_source/rt_font.xpm +25 -0
- wx/demo/bmp_source/rt_idea.xpm +47 -0
- wx/demo/bmp_source/rt_indentless.xpm +25 -0
- wx/demo/bmp_source/rt_indentmore.xpm +25 -0
- wx/demo/bmp_source/rt_italic.xpm +25 -0
- wx/demo/bmp_source/rt_open.xpm +57 -0
- wx/demo/bmp_source/rt_paste.xpm +46 -0
- wx/demo/bmp_source/rt_redo.xpm +58 -0
- wx/demo/bmp_source/rt_sample.xpm +44 -0
- wx/demo/bmp_source/rt_save.xpm +42 -0
- wx/demo/bmp_source/rt_smiley.xpm +42 -0
- wx/demo/bmp_source/rt_underline.xpm +25 -0
- wx/demo/bmp_source/rt_undo.xpm +58 -0
- wx/demo/bmp_source/rt_zebra.xpm +409 -0
- wx/demo/bmp_source/saveperspective.png +0 -0
- wx/demo/bmp_source/sm_down.bmp +0 -0
- wx/demo/bmp_source/sm_up.bmp +0 -0
- wx/demo/bmp_source/smiles2.bmp +0 -0
- wx/demo/bmp_source/test2.bmp +0 -0
- wx/demo/bmp_source/testmask.bmp +0 -0
- wx/demo/bmp_source/teststar.png +0 -0
- wx/demo/bmp_source/thekid.png +0 -0
- wx/demo/bmp_source/tog1.bmp +0 -0
- wx/demo/bmp_source/tog2.bmp +0 -0
- wx/demo/bmp_source/wiztest1.bmp +0 -0
- wx/demo/bmp_source/wiztest2.bmp +0 -0
- wx/demo/bmp_source/wxpdemo.ico +0 -0
- wx/demo/cursors/paperairplane_arrow_blue.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_blue_fadeout80.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_colorshift.ani +0 -0
- wx/demo/cursors/paperairplane_arrow_dark.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_grey.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_red.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white24.png +0 -0
- wx/demo/data/0-tiger.svg +725 -0
- wx/demo/data/Asteroid_blaster.swf +0 -0
- wx/demo/data/SIL_OPEN_FONT_LICENSE.txt +97 -0
- wx/demo/data/SourceCodePro-Regular.ttf +0 -0
- wx/demo/data/accessories-calculator.svg +636 -0
- wx/demo/data/accessories-text-editor.svg +554 -0
- wx/demo/data/anykey.wav +0 -0
- wx/demo/data/applications-internet.svg +623 -0
- wx/demo/data/desktop-accessibility.svg +245 -0
- wx/demo/data/desktop-keyboard-shortcuts.svg +839 -0
- wx/demo/data/desktop-locale.svg +878 -0
- wx/demo/data/desktop-remote-desktop.svg +1479 -0
- wx/demo/data/desktop-theme.svg +882 -0
- wx/demo/data/desktop-wallpaper.svg +747 -0
- wx/demo/data/echo.py +25 -0
- wx/demo/data/imagemap.htm +20 -0
- wx/demo/data/imagemap.png +0 -0
- wx/demo/data/internet-group-chat.svg +312 -0
- wx/demo/data/internet-mail.svg +440 -0
- wx/demo/data/locale/af/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/de/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/es/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/fr/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/it/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale-src/af.po +23 -0
- wx/demo/data/locale-src/de.po +23 -0
- wx/demo/data/locale-src/es.po +22 -0
- wx/demo/data/locale-src/fr.po +22 -0
- wx/demo/data/locale-src/install +15 -0
- wx/demo/data/locale-src/it.po +23 -0
- wx/demo/data/locale-src/wxpydemo.po +21 -0
- wx/demo/data/office-calendar.svg +316 -0
- wx/demo/data/pic.png +0 -0
- wx/demo/data/pic2.bmp +0 -0
- wx/demo/data/plan.wav +0 -0
- wx/demo/data/proclamation.txt +115 -0
- wx/demo/data/resource.wdr +0 -0
- wx/demo/data/resource_wdr.xrc +146 -0
- wx/demo/data/romedalen.png +0 -0
- wx/demo/data/stc.h.html +3544 -0
- wx/demo/data/system-session.svg +510 -0
- wx/demo/data/system-users.svg +539 -0
- wx/demo/data/tables.htm +116 -0
- wx/demo/data/test-gradient-pen.svg +14 -0
- wx/demo/data/test-opacity.svg +7 -0
- wx/demo/data/test.htm +253 -0
- wx/demo/data/testmovie.mpg +0 -0
- wx/demo/data/testtable.txt +38 -0
- wx/demo/data/tips.txt +73 -0
- wx/demo/data/utilities-system-monitor.svg +435 -0
- wx/demo/data/utilities-terminal.svg +500 -0
- wx/demo/data/widgetTest.htm +70 -0
- wx/demo/data/world.dat +24055 -0
- wx/demo/demo.py +4 -0
- wx/demo/demo.pyw +4 -0
- wx/demo/demodata.py +310 -0
- wx/demo/encode_bitmaps.py +181 -0
- wx/demo/images.py +6812 -0
- wx/demo/infoframe.py +149 -0
- wx/demo/run.py +171 -0
- wx/demo/snippets/__init__.py +13 -0
- wx/demo/snippets/arc.py +21 -0
- wx/demo/snippets/arc_negative.py +21 -0
- wx/demo/snippets/clip.py +13 -0
- wx/demo/snippets/clip_image.py +13 -0
- wx/demo/snippets/curve_rectangle.py +53 -0
- wx/demo/snippets/curve_to.py +17 -0
- wx/demo/snippets/dash.py +18 -0
- wx/demo/snippets/ellipse.py +33 -0
- wx/demo/snippets/fill_and_stroke.py +12 -0
- wx/demo/snippets/fill_and_stroke2.py +18 -0
- wx/demo/snippets/fill_style.py +31 -0
- wx/demo/snippets/glyph_path.py +21 -0
- wx/demo/snippets/gradient.py +16 -0
- wx/demo/snippets/gradient_mask.py +12 -0
- wx/demo/snippets/group.py +16 -0
- wx/demo/snippets/image.py +14 -0
- wx/demo/snippets/imagepattern.py +23 -0
- wx/demo/snippets/path.py +7 -0
- wx/demo/snippets/set_line_cap.py +19 -0
- wx/demo/snippets/set_line_join.py +21 -0
- wx/demo/snippets/show_glyphs.py +15 -0
- wx/demo/snippets/text.py +22 -0
- wx/demo/snippets/text_align_center.py +26 -0
- wx/demo/snippets/text_extents.py +27 -0
- wx/demo/template.py +36 -0
- wx/demo/throbImages.py +1277 -0
- wx/demo/version.py +3 -0
- wx/demo/widgetTest.py +72 -0
- wx/demo/wxpdemo.ico +0 -0
- wx/glcanvas.py +10 -0
- wx/glcanvas.pyi +458 -0
- wx/grid.py +229 -0
- wx/grid.pyi +4959 -0
- wx/html.py +35 -0
- wx/html.pyi +2965 -0
- wx/html2.py +40 -0
- wx/html2.pyi +772 -0
- wx/lib/CDate.py +202 -0
- wx/lib/ClickableHtmlWindow.py +57 -0
- wx/lib/__init__.py +0 -0
- wx/lib/activex.py +178 -0
- wx/lib/activexwrapper.py +153 -0
- wx/lib/agw/__init__.py +128 -0
- wx/lib/agw/advancedsplash.py +564 -0
- wx/lib/agw/aquabutton.py +1127 -0
- wx/lib/agw/artmanager.py +2110 -0
- wx/lib/agw/aui/__init__.py +295 -0
- wx/lib/agw/aui/aui_constants.py +2628 -0
- wx/lib/agw/aui/aui_switcherdialog.py +1227 -0
- wx/lib/agw/aui/aui_utilities.py +672 -0
- wx/lib/agw/aui/auibar.py +4031 -0
- wx/lib/agw/aui/auibook.py +6289 -0
- wx/lib/agw/aui/dockart.py +1198 -0
- wx/lib/agw/aui/framemanager.py +10409 -0
- wx/lib/agw/aui/tabart.py +2771 -0
- wx/lib/agw/aui/tabmdi.py +679 -0
- wx/lib/agw/balloontip.py +1158 -0
- wx/lib/agw/buttonpanel.py +2823 -0
- wx/lib/agw/cubecolourdialog.py +3529 -0
- wx/lib/agw/customtreectrl.py +8963 -0
- wx/lib/agw/data/ShortcutEditor_1.png +0 -0
- wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
- wx/lib/agw/data/default_help_text.html +105 -0
- wx/lib/agw/flatmenu.py +7333 -0
- wx/lib/agw/flatnotebook.py +6672 -0
- wx/lib/agw/floatspin.py +1823 -0
- wx/lib/agw/fmcustomizedlg.py +540 -0
- wx/lib/agw/fmresources.py +407 -0
- wx/lib/agw/foldpanelbar.py +2282 -0
- wx/lib/agw/fourwaysplitter.py +1130 -0
- wx/lib/agw/genericmessagedialog.py +1549 -0
- wx/lib/agw/gradientbutton.py +732 -0
- wx/lib/agw/hyperlink.py +664 -0
- wx/lib/agw/hypertreelist.py +5374 -0
- wx/lib/agw/infobar.py +885 -0
- wx/lib/agw/knobctrl.py +945 -0
- wx/lib/agw/labelbook.py +3029 -0
- wx/lib/agw/multidirdialog.py +615 -0
- wx/lib/agw/peakmeter.py +1029 -0
- wx/lib/agw/persist/__init__.py +188 -0
- wx/lib/agw/persist/persist_constants.py +284 -0
- wx/lib/agw/persist/persist_handlers.py +2614 -0
- wx/lib/agw/persist/persistencemanager.py +864 -0
- wx/lib/agw/piectrl.py +1082 -0
- wx/lib/agw/pybusyinfo.py +399 -0
- wx/lib/agw/pycollapsiblepane.py +940 -0
- wx/lib/agw/pygauge.py +570 -0
- wx/lib/agw/pyprogress.py +917 -0
- wx/lib/agw/ribbon/__init__.py +198 -0
- wx/lib/agw/ribbon/art.py +219 -0
- wx/lib/agw/ribbon/art_aui.py +1284 -0
- wx/lib/agw/ribbon/art_default.py +81 -0
- wx/lib/agw/ribbon/art_internal.py +244 -0
- wx/lib/agw/ribbon/art_msw.py +2736 -0
- wx/lib/agw/ribbon/art_osx.py +52 -0
- wx/lib/agw/ribbon/bar.py +1261 -0
- wx/lib/agw/ribbon/buttonbar.py +1320 -0
- wx/lib/agw/ribbon/control.py +205 -0
- wx/lib/agw/ribbon/gallery.py +974 -0
- wx/lib/agw/ribbon/page.py +946 -0
- wx/lib/agw/ribbon/panel.py +1170 -0
- wx/lib/agw/ribbon/toolbar.py +1442 -0
- wx/lib/agw/rulerctrl.py +1887 -0
- wx/lib/agw/scrolledthumbnail.py +2119 -0
- wx/lib/agw/shapedbutton.py +1809 -0
- wx/lib/agw/shortcuteditor.py +2634 -0
- wx/lib/agw/speedmeter.py +1801 -0
- wx/lib/agw/supertooltip.py +1444 -0
- wx/lib/agw/thumbnailctrl.py +529 -0
- wx/lib/agw/toasterbox.py +1327 -0
- wx/lib/agw/ultimatelistctrl.py +13666 -0
- wx/lib/agw/xlsgrid.py +2113 -0
- wx/lib/agw/zoombar.py +1339 -0
- wx/lib/analogclock/__init__.py +140 -0
- wx/lib/analogclock/analogclock.py +631 -0
- wx/lib/analogclock/helpers.py +991 -0
- wx/lib/analogclock/lib_setup/__init__.py +0 -0
- wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
- wx/lib/analogclock/lib_setup/fontselect.py +57 -0
- wx/lib/analogclock/setup.py +490 -0
- wx/lib/analogclock/styles.py +47 -0
- wx/lib/anchors.py +103 -0
- wx/lib/art/__init__.py +4 -0
- wx/lib/art/flagart.py +1583 -0
- wx/lib/art/img2pyartprov.py +56 -0
- wx/lib/busy.py +146 -0
- wx/lib/buttons.py +1141 -0
- wx/lib/calendar.py +1597 -0
- wx/lib/checkbox.py +837 -0
- wx/lib/colourchooser/__init__.py +38 -0
- wx/lib/colourchooser/canvas.py +145 -0
- wx/lib/colourchooser/intl.py +24 -0
- wx/lib/colourchooser/pycolourbox.py +89 -0
- wx/lib/colourchooser/pycolourchooser.py +629 -0
- wx/lib/colourchooser/pycolourslider.py +100 -0
- wx/lib/colourchooser/pypalette.py +211 -0
- wx/lib/colourdb.py +740 -0
- wx/lib/colourselect.py +385 -0
- wx/lib/colourutils.py +118 -0
- wx/lib/combotreebox.py +944 -0
- wx/lib/delayedresult.py +420 -0
- wx/lib/dialogs.py +510 -0
- wx/lib/docview.py +3210 -0
- wx/lib/dragscroller.py +79 -0
- wx/lib/editor/README.txt +77 -0
- wx/lib/editor/__init__.py +24 -0
- wx/lib/editor/editor.py +974 -0
- wx/lib/editor/images.py +15 -0
- wx/lib/editor/selection.py +44 -0
- wx/lib/embeddedimage.py +76 -0
- wx/lib/eventStack.py +136 -0
- wx/lib/eventwatcher.py +440 -0
- wx/lib/evtmgr.py +521 -0
- wx/lib/expando.py +393 -0
- wx/lib/fancytext.py +505 -0
- wx/lib/filebrowsebutton.py +459 -0
- wx/lib/flashwin.py +262 -0
- wx/lib/flashwin_old.py +651 -0
- wx/lib/floatcanvas/FCEvents.py +53 -0
- wx/lib/floatcanvas/FCObjects.py +2923 -0
- wx/lib/floatcanvas/FloatCanvas.py +1027 -0
- wx/lib/floatcanvas/GUIMode.py +396 -0
- wx/lib/floatcanvas/NavCanvas.py +161 -0
- wx/lib/floatcanvas/Resources.py +319 -0
- wx/lib/floatcanvas/ScreenShot.py +1788 -0
- wx/lib/floatcanvas/Utilities/BBox.py +314 -0
- wx/lib/floatcanvas/Utilities/Colors.py +137 -0
- wx/lib/floatcanvas/Utilities/GUI.py +91 -0
- wx/lib/floatcanvas/Utilities/__init__.py +7 -0
- wx/lib/floatcanvas/__init__.py +124 -0
- wx/lib/foldmenu.py +89 -0
- wx/lib/gestures.py +310 -0
- wx/lib/gizmos/__init__.py +18 -0
- wx/lib/gizmos/dynamicsash.py +1202 -0
- wx/lib/gizmos/ledctrl.py +300 -0
- wx/lib/gizmos/treelistctrl.py +87 -0
- wx/lib/graphics.py +1939 -0
- wx/lib/gridmovers.py +511 -0
- wx/lib/iewin.py +249 -0
- wx/lib/iewin_old.py +894 -0
- wx/lib/imagebrowser.py +856 -0
- wx/lib/imageutils.py +163 -0
- wx/lib/infoframe.py +490 -0
- wx/lib/inspection.py +1255 -0
- wx/lib/intctrl.py +1001 -0
- wx/lib/itemspicker.py +256 -0
- wx/lib/langlistctrl.py +480 -0
- wx/lib/layoutf.py +271 -0
- wx/lib/masked/__init__.py +27 -0
- wx/lib/masked/combobox.py +839 -0
- wx/lib/masked/ctrl.py +108 -0
- wx/lib/masked/ipaddrctrl.py +242 -0
- wx/lib/masked/maskededit.py +7279 -0
- wx/lib/masked/numctrl.py +2001 -0
- wx/lib/masked/textctrl.py +465 -0
- wx/lib/masked/timectrl.py +1466 -0
- wx/lib/mixins/__init__.py +17 -0
- wx/lib/mixins/grid.py +47 -0
- wx/lib/mixins/gridlabelrenderer.py +251 -0
- wx/lib/mixins/imagelist.py +77 -0
- wx/lib/mixins/inspection.py +184 -0
- wx/lib/mixins/listctrl.py +894 -0
- wx/lib/mixins/rubberband.py +404 -0
- wx/lib/mixins/treemixin.py +678 -0
- wx/lib/msgpanel.py +95 -0
- wx/lib/multisash.py +747 -0
- wx/lib/myole4ax.idl +178 -0
- wx/lib/myole4ax.tlb +0 -0
- wx/lib/newevent.py +229 -0
- wx/lib/nvdlg.py +156 -0
- wx/lib/ogl/__init__.py +13 -0
- wx/lib/ogl/basic.py +3991 -0
- wx/lib/ogl/bmpshape.py +87 -0
- wx/lib/ogl/canvas.py +467 -0
- wx/lib/ogl/composit.py +1577 -0
- wx/lib/ogl/diagram.py +230 -0
- wx/lib/ogl/divided.py +483 -0
- wx/lib/ogl/drawn.py +900 -0
- wx/lib/ogl/lines.py +1811 -0
- wx/lib/ogl/oglmisc.py +608 -0
- wx/lib/pdfviewer/__init__.py +113 -0
- wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
- wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
- wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
- wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
- wx/lib/pdfviewer/bitmaps/Save.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
- wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
- wx/lib/pdfviewer/buttonpanel.py +279 -0
- wx/lib/pdfviewer/images.py +240 -0
- wx/lib/pdfviewer/viewer.py +1077 -0
- wx/lib/pdfwin.py +295 -0
- wx/lib/pdfwin_old.py +789 -0
- wx/lib/platebtn.py +789 -0
- wx/lib/plot/CHANGELOG.md +150 -0
- wx/lib/plot/README.md +16 -0
- wx/lib/plot/__init__.py +46 -0
- wx/lib/plot/__main__.py +5 -0
- wx/lib/plot/examples/__init__.py +0 -0
- wx/lib/plot/examples/demo.py +1009 -0
- wx/lib/plot/examples/simple_example.py +54 -0
- wx/lib/plot/plotcanvas.py +2981 -0
- wx/lib/plot/polyobjects.py +1525 -0
- wx/lib/plot/utils.py +327 -0
- wx/lib/popupctl.py +250 -0
- wx/lib/printout.py +1157 -0
- wx/lib/progressindicator.py +151 -0
- wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
- wx/lib/pubsub/README_WxPython.txt +22 -0
- wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
- wx/lib/pubsub/__init__.py +25 -0
- wx/lib/pubsub/core/__init__.py +92 -0
- wx/lib/pubsub/core/arg1/__init__.py +16 -0
- wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
- wx/lib/pubsub/core/arg1/publisher.py +40 -0
- wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
- wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
- wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
- wx/lib/pubsub/core/callables.py +191 -0
- wx/lib/pubsub/core/imp2.py +63 -0
- wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
- wx/lib/pubsub/core/kwargs/__init__.py +16 -0
- wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
- wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
- wx/lib/pubsub/core/kwargs/publisher.py +77 -0
- wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
- wx/lib/pubsub/core/kwargs/topicargspecimpl.py +217 -0
- wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
- wx/lib/pubsub/core/listener.py +40 -0
- wx/lib/pubsub/core/listenerbase.py +185 -0
- wx/lib/pubsub/core/notificationmgr.py +185 -0
- wx/lib/pubsub/core/publisherbase.py +191 -0
- wx/lib/pubsub/core/topicargspec.py +77 -0
- wx/lib/pubsub/core/topicdefnprovider.py +632 -0
- wx/lib/pubsub/core/topicexc.py +72 -0
- wx/lib/pubsub/core/topicmgr.py +456 -0
- wx/lib/pubsub/core/topicobj.py +472 -0
- wx/lib/pubsub/core/topictreetraverser.py +143 -0
- wx/lib/pubsub/core/topicutils.py +118 -0
- wx/lib/pubsub/core/treeconfig.py +21 -0
- wx/lib/pubsub/core/validatedefnargs.py +29 -0
- wx/lib/pubsub/core/weakmethod.py +102 -0
- wx/lib/pubsub/policies.py +24 -0
- wx/lib/pubsub/pub.py +199 -0
- wx/lib/pubsub/py2and3.py +608 -0
- wx/lib/pubsub/setuparg1.py +47 -0
- wx/lib/pubsub/setupkwargs.py +29 -0
- wx/lib/pubsub/utils/__init__.py +27 -0
- wx/lib/pubsub/utils/exchandling.py +100 -0
- wx/lib/pubsub/utils/misc.py +100 -0
- wx/lib/pubsub/utils/notification.py +331 -0
- wx/lib/pubsub/utils/topictreeprinter.py +195 -0
- wx/lib/pubsub/utils/xmltopicdefnprovider.py +287 -0
- wx/lib/pydocview.py +3300 -0
- wx/lib/rcsizer.py +229 -0
- wx/lib/resizewidget.py +357 -0
- wx/lib/scrolledpanel.py +225 -0
- wx/lib/sheet.py +350 -0
- wx/lib/sized_controls.py +691 -0
- wx/lib/softwareupdate.py +361 -0
- wx/lib/splitter.py +925 -0
- wx/lib/statbmp.py +199 -0
- wx/lib/stattext.py +322 -0
- wx/lib/throbber.py +425 -0
- wx/lib/ticker.py +295 -0
- wx/lib/ticker_xrc.py +48 -0
- wx/lib/utils.py +89 -0
- wx/lib/wordwrap.py +97 -0
- wx/lib/wxcairo/__init__.py +124 -0
- wx/lib/wxcairo/wx_cairocffi.py +200 -0
- wx/lib/wxcairo/wx_pycairo.py +463 -0
- wx/lib/wxpTag.py +274 -0
- wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
- wx/media.py +27 -0
- wx/media.pyi +223 -0
- wx/msw.py +13 -0
- wx/msw.pyi +65 -0
- wx/propgrid.py +1451 -0
- wx/propgrid.pyi +7914 -0
- wx/py/CHANGES.txt +796 -0
- wx/py/Py.ico +0 -0
- wx/py/PyAlaCarte.py +34 -0
- wx/py/PyAlaMode.py +34 -0
- wx/py/PyAlaModeTest.py +33 -0
- wx/py/PyCrust.ico +0 -0
- wx/py/PyCrust.py +78 -0
- wx/py/PyCrust_16.png +0 -0
- wx/py/PyCrust_32.png +0 -0
- wx/py/PyFilling.py +35 -0
- wx/py/PyShell.py +78 -0
- wx/py/PySlices.ico +0 -0
- wx/py/PySlices.py +98 -0
- wx/py/PySlicesShell.py +94 -0
- wx/py/PySlices_16.png +0 -0
- wx/py/PySlices_32.png +0 -0
- wx/py/PyWrap.py +52 -0
- wx/py/README.txt +77 -0
- wx/py/__init__.py +20 -0
- wx/py/buffer.py +136 -0
- wx/py/crust.py +403 -0
- wx/py/crustslices.py +403 -0
- wx/py/dispatcher.py +259 -0
- wx/py/document.py +37 -0
- wx/py/editor.py +844 -0
- wx/py/editwindow.py +299 -0
- wx/py/filling.py +357 -0
- wx/py/frame.py +978 -0
- wx/py/images.py +212 -0
- wx/py/interpreter.py +170 -0
- wx/py/introspect.py +393 -0
- wx/py/magic.py +98 -0
- wx/py/parse.py +134 -0
- wx/py/path.py +36 -0
- wx/py/pseudo.py +99 -0
- wx/py/shell.py +1588 -0
- wx/py/sliceshell.py +3814 -0
- wx/py/tests/test_interpreter.py +71 -0
- wx/py/tests/test_introspect.py +862 -0
- wx/py/tests/test_pseudo.py +70 -0
- wx/py/tests/test_version.py +36 -0
- wx/py/tests/testall.py +22 -0
- wx/py/version.py +7 -0
- wx/ribbon.py +45 -0
- wx/ribbon.pyi +2494 -0
- wx/richtext.py +142 -0
- wx/richtext.pyi +12113 -0
- wx/siplib.cp313-win_amd64.pyd +0 -0
- wx/stc.py +58 -0
- wx/stc.pyi +8463 -0
- wx/svg/__init__.py +364 -0
- wx/svg/_nanosvg.cp313-win_amd64.pyd +0 -0
- wx/tools/__init__.py +18 -0
- wx/tools/dbg.py +268 -0
- wx/tools/genaxmodule.py +50 -0
- wx/tools/helpviewer.py +92 -0
- wx/tools/img2img.py +85 -0
- wx/tools/img2png.py +54 -0
- wx/tools/img2py.py +309 -0
- wx/tools/img2xpm.py +54 -0
- wx/tools/pywxrc.py +949 -0
- wx/tools/wxget.py +254 -0
- wx/tools/wxget_docs_demo.py +186 -0
- wx/wxbase315u_net_vc140_x64.dll +0 -0
- wx/wxbase315u_vc140_x64.dll +0 -0
- wx/wxbase315u_xml_vc140_x64.dll +0 -0
- wx/wxmsw315u_adv_vc140_x64.dll +0 -0
- wx/wxmsw315u_aui_vc140_x64.dll +0 -0
- wx/wxmsw315u_core_vc140_x64.dll +0 -0
- wx/wxmsw315u_gl_vc140_x64.dll +0 -0
- wx/wxmsw315u_html_vc140_x64.dll +0 -0
- wx/wxmsw315u_media_vc140_x64.dll +0 -0
- wx/wxmsw315u_propgrid_vc140_x64.dll +0 -0
- wx/wxmsw315u_qa_vc140_x64.dll +0 -0
- wx/wxmsw315u_ribbon_vc140_x64.dll +0 -0
- wx/wxmsw315u_richtext_vc140_x64.dll +0 -0
- wx/wxmsw315u_stc_vc140_x64.dll +0 -0
- wx/wxmsw315u_webview_vc140_x64.dll +0 -0
- wx/wxmsw315u_xrc_vc140_x64.dll +0 -0
- wx/xml.py +15 -0
- wx/xml.pyi +575 -0
- wx/xrc.py +65 -0
- wx/xrc.pyi +742 -0
- wxPython_zombie-3.1.5.8.dist-info/LICENSE.txt +950 -0
- wxPython_zombie-3.1.5.8.dist-info/METADATA +107 -0
- wxPython_zombie-3.1.5.8.dist-info/RECORD +1175 -0
- wxPython_zombie-3.1.5.8.dist-info/WHEEL +5 -0
- wxPython_zombie-3.1.5.8.dist-info/entry_points.txt +2 -0
- wxPython_zombie-3.1.5.8.dist-info/top_level.txt +1 -0
wx/svg/__init__.py
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.svg.__init__.py
|
|
3
|
+
# Purpose: Python code to augment or extend the nanosvg wrappers,
|
|
4
|
+
# and provide wxPython-specific integrations.
|
|
5
|
+
#
|
|
6
|
+
# Author: Robin Dunn
|
|
7
|
+
#
|
|
8
|
+
# Created: 23-July-2019
|
|
9
|
+
# Copyright: (c) 2019-2020 by Total Control Software
|
|
10
|
+
# Licence: wxWindows license
|
|
11
|
+
# (c) 2021 Zombie
|
|
12
|
+
#----------------------------------------------------------------------
|
|
13
|
+
"""
|
|
14
|
+
The classes in this package facilitate the parsing, normalizing, drawing and
|
|
15
|
+
rasterizing of Scalable Vector Graphics (SVG) images. The primary interface to
|
|
16
|
+
this functionality is via the :class:`wx.svg.SVGimage` class, which provides
|
|
17
|
+
various integrations with wxPython. It, in turn, uses a set of wrappers around
|
|
18
|
+
the NanoSVG library (https://github.com/memononen/nanosvg) to do the low-level
|
|
19
|
+
work. There are a few features defined in the SVG spec that are not supported,
|
|
20
|
+
but all the commonly used ones seem to be there.
|
|
21
|
+
|
|
22
|
+
Example 1
|
|
23
|
+
---------
|
|
24
|
+
Drawing an SVG image to a window, scaled to fit the size of the window and using
|
|
25
|
+
a :class:`wx.GraphicsContext` can be done like this::
|
|
26
|
+
|
|
27
|
+
def __init__(self, ...):
|
|
28
|
+
...
|
|
29
|
+
self.img = wx.svg.SVGimage.CreateFromFile(svg_filename)
|
|
30
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
31
|
+
|
|
32
|
+
def OnPaint(self, event):
|
|
33
|
+
dc = wx.PaintDC(self)
|
|
34
|
+
dc.SetBackground(wx.Brush('white'))
|
|
35
|
+
dc.Clear()
|
|
36
|
+
|
|
37
|
+
dcdim = min(self.Size.width, self.Size.height)
|
|
38
|
+
imgdim = min(self.img.width, self.img.height)
|
|
39
|
+
scale = dcdim / imgdim
|
|
40
|
+
width = int(self.img.width * scale)
|
|
41
|
+
height = int(self.img.height * scale)
|
|
42
|
+
|
|
43
|
+
ctx = wx.GraphicsContext.Create(dc)
|
|
44
|
+
self.img.RenderToGC(ctx, scale)
|
|
45
|
+
|
|
46
|
+
Since it is drawing the SVG shapes and paths using the equivalent GC primitives
|
|
47
|
+
then any existing transformations that may be active on the context will be
|
|
48
|
+
applied automatically to the SVG shapes.
|
|
49
|
+
|
|
50
|
+
Note that not all GraphicsContext backends are created equal. Specifically, the
|
|
51
|
+
GDI+ backend (the default on Windows) simply can not support some features that
|
|
52
|
+
are commonly used in SVG images, such as applying transforms to gradients. The
|
|
53
|
+
Direct2D backend on Windows does much better, and the Cairo backend on Windows
|
|
54
|
+
is also very good. The default backends on OSX and Linux do very good as well.
|
|
55
|
+
|
|
56
|
+
Example 2
|
|
57
|
+
---------
|
|
58
|
+
If you're not already using a ``wx.GraphicsContext`` then a :class:`wx.Bitmap`
|
|
59
|
+
can easily be created instead. For example, the last 2 lines in the code above
|
|
60
|
+
could be replaced by the following, and accomplish basically the same thing::
|
|
61
|
+
|
|
62
|
+
bmp = self.img.ConvertToBitmap(scale=scale, width=width, height=height)
|
|
63
|
+
dc.DrawBitmap(bmp, 0, 0)
|
|
64
|
+
|
|
65
|
+
Example 3
|
|
66
|
+
---------
|
|
67
|
+
The ``ConvertToBitmap`` shown above gives a lot of control around scaling,
|
|
68
|
+
translating and sizing the SVG image into a bitmap, but most of the time you
|
|
69
|
+
probably just want to get a bitmap of a certain size to use as an icon or
|
|
70
|
+
similar. The ``ConvertToScaledBitmap`` provides an easier API to do just that
|
|
71
|
+
for you. It automatically scales the SVG image into the requested size in
|
|
72
|
+
pixels.::
|
|
73
|
+
|
|
74
|
+
bmp = img.ConvertToScaledBitmap(wx.Size(24,24))
|
|
75
|
+
|
|
76
|
+
Optionally, it can accept a window parameter that will automatically adjust the
|
|
77
|
+
size according to the Content Scale Factor of that window, if supported by the
|
|
78
|
+
platform and if the window is located on a HiDPI display the the bitmap's size
|
|
79
|
+
will be adjusted accordingly.::
|
|
80
|
+
|
|
81
|
+
bmp = img.ConvertToScaledBitmap(wx.Size(24,24), self)
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
import wx
|
|
86
|
+
from six.moves import zip_longest
|
|
87
|
+
|
|
88
|
+
from ._nanosvg import *
|
|
89
|
+
|
|
90
|
+
# All the supported renderers now support gradient transforms, more or less, but
|
|
91
|
+
# let's leave this in place in case it's needed again in the future.
|
|
92
|
+
_RenderersWithoutGradientTransforms = []
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class SVGimage(SVGimageBase):
|
|
96
|
+
"""
|
|
97
|
+
The SVGimage class provides various ways to load and use SVG images
|
|
98
|
+
in wxPython applications.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
def ConvertToBitmap(self, tx=0.0, ty=0.0, scale=1.0,
|
|
102
|
+
width=-1, height=-1, stride=-1):
|
|
103
|
+
"""
|
|
104
|
+
Creates a :class:`wx.Bitmap` containing a rasterized version of the SVG image.
|
|
105
|
+
|
|
106
|
+
:param float `tx`: Image horizontal offset (applied after scaling)
|
|
107
|
+
:param float `ty`: Image vertical offset (applied after scaling)
|
|
108
|
+
:param float `scale`: Image scale
|
|
109
|
+
:param int `width`: width of the image to render, defaults to width from the SVG file
|
|
110
|
+
:param int `height`: height of the image to render, defaults to height from the SVG file
|
|
111
|
+
:param int `stride`: number of bytes per scan line in the destination buffer, typically ``width * 4``
|
|
112
|
+
|
|
113
|
+
:returns: :class:`wx.Bitmap`
|
|
114
|
+
"""
|
|
115
|
+
buf = self.Rasterize(tx, ty, scale, width, height, stride)
|
|
116
|
+
bmp = wx.Bitmap.FromBufferRGBA(width, height, buf)
|
|
117
|
+
return bmp
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def ConvertToScaledBitmap(self, size, window=None):
|
|
121
|
+
"""
|
|
122
|
+
Automatically scales the SVG image so it will fit in the given size,
|
|
123
|
+
and creates a :class:`wx.Bitmap` of that size, containing a rasterized
|
|
124
|
+
version of the SVG image. If a window is passed then the size of the
|
|
125
|
+
bitmap will automatically be adjusted to the content scale factor of
|
|
126
|
+
that window. For example, if a (32,32) pixel bitmap is requested for a
|
|
127
|
+
window on a Retina display, then a (64,64) pixel bitmap will be created.
|
|
128
|
+
|
|
129
|
+
:param wx.Size `size`: Size of the bitmap to create, in pixels
|
|
130
|
+
:param wx.Window `window`: Adjust the size by this window's content scale factor, if supported on the platform
|
|
131
|
+
|
|
132
|
+
:returns: :class:`wx.Bitmap`
|
|
133
|
+
"""
|
|
134
|
+
size = wx.Size(*size)
|
|
135
|
+
if window:
|
|
136
|
+
size.width *= int(window.GetContentScaleFactor())
|
|
137
|
+
size.height *= int(window.GetContentScaleFactor())
|
|
138
|
+
|
|
139
|
+
# We can only have one overall scale factor for both dimensions with
|
|
140
|
+
# this rasterization method, so chose either the minimum of width or
|
|
141
|
+
# height to help ensure it fits both ways within the specified size.
|
|
142
|
+
sx = size.width / self.width
|
|
143
|
+
sy = size.height / self.height
|
|
144
|
+
scale = min(sx, sy)
|
|
145
|
+
return self.ConvertToBitmap(scale=scale, width=size.width, height=size.height)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def RenderToGC(self, ctx, scale=None, size=None):
|
|
149
|
+
"""
|
|
150
|
+
Draw the collection of shapes and paths in the SVG image
|
|
151
|
+
onto the given :class:`wx.GraphicsContext` using the drawing primitives
|
|
152
|
+
provided by the context. The Context's state is saved and restored so
|
|
153
|
+
any transformations done while rendering the SVG will be undone.
|
|
154
|
+
|
|
155
|
+
:param wx.GraphicsContext `ctx`: The context to draw upon
|
|
156
|
+
:param float `scale`: If given, apply to the context's scale.
|
|
157
|
+
:param (float, float) `size`: If given, scale the image's width and height
|
|
158
|
+
to that provided in this parameter. Ignored if ``scale`` is also specified.
|
|
159
|
+
|
|
160
|
+
.. note::
|
|
161
|
+
Some GraphicsContext backends perform better than others.
|
|
162
|
+
The default GDI+ backend on Windows is the most glitchy, but the
|
|
163
|
+
Direct2D backend works well.
|
|
164
|
+
"""
|
|
165
|
+
ctx.PushState()
|
|
166
|
+
try:
|
|
167
|
+
# set scale either from the scale parameter or as ratio of the sizes
|
|
168
|
+
if scale is not None:
|
|
169
|
+
ctx.Scale(scale, scale)
|
|
170
|
+
elif size is not None:
|
|
171
|
+
# scale the context to the given size
|
|
172
|
+
size = wx.Size(*size)
|
|
173
|
+
sx = size.width / self.width
|
|
174
|
+
sy = size.height / self.height
|
|
175
|
+
ctx.Scale(sx, sy)
|
|
176
|
+
|
|
177
|
+
for shape in self.shapes:
|
|
178
|
+
if not shape.flags & SVG_FLAGS_VISIBLE:
|
|
179
|
+
continue
|
|
180
|
+
if shape.opacity != 1.0:
|
|
181
|
+
ctx.BeginLayer(shape.opacity)
|
|
182
|
+
brush = self._makeBrush(ctx, shape)
|
|
183
|
+
pen = self._makePen(ctx, shape)
|
|
184
|
+
|
|
185
|
+
rule = { SVG_FILLRULE_NONZERO : wx.WINDING_RULE,
|
|
186
|
+
SVG_FILLRULE_EVENODD : wx.ODDEVEN_RULE }.get(shape.fillRule, 0)
|
|
187
|
+
|
|
188
|
+
# The shape's path is comprised of one or more subpaths, collect
|
|
189
|
+
# and accumulate them in a new GraphicsPath
|
|
190
|
+
path = ctx.CreatePath()
|
|
191
|
+
for svg_path in shape.paths:
|
|
192
|
+
subpath = self._makeSubPath(ctx, svg_path)
|
|
193
|
+
path.AddPath(subpath)
|
|
194
|
+
|
|
195
|
+
# Draw the combined set of paths, using the given pen and brush to
|
|
196
|
+
# fill and stroke the shape.
|
|
197
|
+
ctx.SetBrush(brush)
|
|
198
|
+
ctx.SetPen(pen)
|
|
199
|
+
ctx.DrawPath(path, rule)
|
|
200
|
+
|
|
201
|
+
if shape.opacity != 1.0:
|
|
202
|
+
ctx.EndLayer()
|
|
203
|
+
finally:
|
|
204
|
+
ctx.Flush()
|
|
205
|
+
ctx.PopState()
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _makeSubPath(self, ctx, svg_path):
|
|
209
|
+
points = svg_path.points
|
|
210
|
+
path = ctx.CreatePath()
|
|
211
|
+
x, y = points[0]
|
|
212
|
+
path.MoveToPoint(x,y)
|
|
213
|
+
for (cx1, cy1), (cx2, cy2), (x,y) in _chunker(points[1:], 3, (0,0)):
|
|
214
|
+
path.AddCurveToPoint(cx1, cy1, cx2, cy2, x,y)
|
|
215
|
+
if svg_path.closed:
|
|
216
|
+
path.CloseSubpath()
|
|
217
|
+
return path
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _makeGradientStops(self, gradient):
|
|
221
|
+
stops = [stop for stop in gradient.stops]
|
|
222
|
+
first = stops[0]
|
|
223
|
+
last = stops[-1]
|
|
224
|
+
gcstops = wx.GraphicsGradientStops(wx.Colour(*first.color_rgba),
|
|
225
|
+
wx.Colour(*last.color_rgba))
|
|
226
|
+
for stop in stops:
|
|
227
|
+
color = wx.Colour(*stop.color_rgba)
|
|
228
|
+
gcstop = wx.GraphicsGradientStop(color, stop.offset)
|
|
229
|
+
gcstops.Add(gcstop)
|
|
230
|
+
return gcstops
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def _getGradientColors(self, gradient):
|
|
234
|
+
return [stop.color_rgba for stop in gradient.stops]
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _makeBrush(self, ctx, shape):
|
|
238
|
+
# set up a brush from the shape.fill (SVGpaint) object
|
|
239
|
+
|
|
240
|
+
# no brush
|
|
241
|
+
if shape.fill.type == SVG_PAINT_NONE:
|
|
242
|
+
brush = wx.NullGraphicsBrush
|
|
243
|
+
|
|
244
|
+
# brush with a solid color
|
|
245
|
+
elif shape.fill.type == SVG_PAINT_COLOR:
|
|
246
|
+
r,g,b,a = shape.fill.color_rgba
|
|
247
|
+
brush = ctx.CreateBrush(wx.Brush(wx.Colour(r,g,b,a)))
|
|
248
|
+
|
|
249
|
+
# brush with a linear gradient
|
|
250
|
+
elif shape.fill.type == SVG_PAINT_LINEAR_GRADIENT:
|
|
251
|
+
# NanoSVG gives gradients their own transform which normalizes the
|
|
252
|
+
# linear gradients to go from (0, 0) to (0,1) in the transformed
|
|
253
|
+
# space. So once we have the transform set we can use those points
|
|
254
|
+
# too.
|
|
255
|
+
x1, y1, = (0.0, 0.0)
|
|
256
|
+
x2, y2, = (0.0, 1.0)
|
|
257
|
+
gradient = shape.fill.gradient
|
|
258
|
+
matrix = ctx.CreateMatrix(*gradient.xform)
|
|
259
|
+
|
|
260
|
+
# Except for GDI+, which doesn't support applying a transform to a
|
|
261
|
+
# gradient, so we'll translate the points back to real space
|
|
262
|
+
# ourselves. This is only an approximation of the desired outcome
|
|
263
|
+
# however, as things like scale and shear in the transform will not
|
|
264
|
+
# be applied to the rest of the fill.
|
|
265
|
+
if ctx.Renderer.Type in _RenderersWithoutGradientTransforms:
|
|
266
|
+
matrix.Invert()
|
|
267
|
+
x1, y1 = matrix.TransformPoint(x1, y1)
|
|
268
|
+
x2, y2 = matrix.TransformPoint(x2, y2)
|
|
269
|
+
matrix = wx.NullGraphicsMatrix
|
|
270
|
+
|
|
271
|
+
stops = self._makeGradientStops(gradient)
|
|
272
|
+
brush = ctx.CreateLinearGradientBrush(x1,y1, x2,y2, stops, matrix)
|
|
273
|
+
|
|
274
|
+
# brush with a radial gradient
|
|
275
|
+
elif shape.fill.type == SVG_PAINT_RADIAL_GRADIENT:
|
|
276
|
+
# Likewise, NanoSVG normalizes radial gradients with a transform
|
|
277
|
+
# that puts the center (cx, cy) at (0,0) and the radius has a length
|
|
278
|
+
# of 1.
|
|
279
|
+
cx, cy = (0.0, 0.0)
|
|
280
|
+
radius = 1
|
|
281
|
+
gradient = shape.fill.gradient
|
|
282
|
+
matrix = ctx.CreateMatrix(*gradient.xform)
|
|
283
|
+
|
|
284
|
+
# Except for GDI+... See note above
|
|
285
|
+
if ctx.Renderer.Type in _RenderersWithoutGradientTransforms:
|
|
286
|
+
matrix.Invert()
|
|
287
|
+
cx, cy = matrix.TransformPoint(cx, cy)
|
|
288
|
+
r1, r2 = matrix.TransformPoint(0, 1)
|
|
289
|
+
radius = r2 - cy
|
|
290
|
+
matrix = wx.NullGraphicsMatrix
|
|
291
|
+
|
|
292
|
+
stops = self._makeGradientStops(gradient)
|
|
293
|
+
brush = ctx.CreateRadialGradientBrush(cx,cy, cx,cy, radius, stops, matrix)
|
|
294
|
+
|
|
295
|
+
else:
|
|
296
|
+
raise ValueError("Unknown fill type")
|
|
297
|
+
return brush
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def _makePen(self, ctx, shape):
|
|
301
|
+
# set up a pen from the shape.stroke (SVGpaint) object
|
|
302
|
+
width = shape.strokeWidth
|
|
303
|
+
join = { SVG_JOIN_MITER : wx.JOIN_MITER,
|
|
304
|
+
SVG_JOIN_ROUND : wx.JOIN_ROUND,
|
|
305
|
+
SVG_JOIN_BEVEL : wx.JOIN_BEVEL}.get(shape.strokeLineJoin, 0)
|
|
306
|
+
cap = { SVG_CAP_BUTT : wx.CAP_BUTT,
|
|
307
|
+
SVG_CAP_ROUND : wx.CAP_ROUND,
|
|
308
|
+
SVG_CAP_SQUARE : wx.CAP_PROJECTING}.get(shape.strokeLineCap, 0)
|
|
309
|
+
# TODO: handle dashes
|
|
310
|
+
|
|
311
|
+
info = wx.GraphicsPenInfo(wx.BLACK).Width(width).Join(join).Cap(cap)
|
|
312
|
+
|
|
313
|
+
if shape.stroke.type == SVG_PAINT_NONE:
|
|
314
|
+
pen = wx.NullGraphicsPen
|
|
315
|
+
|
|
316
|
+
elif shape.stroke.type == SVG_PAINT_COLOR:
|
|
317
|
+
info.Colour(shape.stroke.color_rgba)
|
|
318
|
+
pen = ctx.CreatePen(info)
|
|
319
|
+
|
|
320
|
+
elif shape.stroke.type == SVG_PAINT_LINEAR_GRADIENT:
|
|
321
|
+
x1, y1, = (0.0, 0.0)
|
|
322
|
+
x2, y2, = (0.0, 1.0)
|
|
323
|
+
gradient = shape.stroke.gradient
|
|
324
|
+
matrix = ctx.CreateMatrix(*gradient.xform)
|
|
325
|
+
|
|
326
|
+
# Except for GDI+... See note above
|
|
327
|
+
if ctx.Renderer.Type in _RenderersWithoutGradientTransforms:
|
|
328
|
+
matrix.Invert()
|
|
329
|
+
x1, y1 = matrix.TransformPoint(x1, y1)
|
|
330
|
+
x2, y2 = matrix.TransformPoint(x2, y2)
|
|
331
|
+
matrix = wx.NullGraphicsMatrix
|
|
332
|
+
|
|
333
|
+
stops = self._makeGradientStops(gradient)
|
|
334
|
+
info.LinearGradient(x1,y1, x2,y2, stops, matrix)
|
|
335
|
+
pen = ctx.CreatePen(info)
|
|
336
|
+
|
|
337
|
+
elif shape.stroke.type == SVG_PAINT_RADIAL_GRADIENT:
|
|
338
|
+
cx, cy = (0.0, 0.0)
|
|
339
|
+
radius = 1
|
|
340
|
+
gradient = shape.stroke.gradient
|
|
341
|
+
matrix = ctx.CreateMatrix(*gradient.xform)
|
|
342
|
+
|
|
343
|
+
# Except for GDI+... See note above
|
|
344
|
+
if ctx.Renderer.Type in _RenderersWithoutGradientTransforms:
|
|
345
|
+
matrix.Invert()
|
|
346
|
+
cx, cy = matrix.TransformPoint(cx, cy)
|
|
347
|
+
r1, r2 = matrix.TransformPoint(0, 1)
|
|
348
|
+
radius = r2 - cy
|
|
349
|
+
matrix = wx.NullGraphicsMatrix
|
|
350
|
+
|
|
351
|
+
stops = self._makeGradientStops(gradient)
|
|
352
|
+
info.RadialGradient(0,0, 0,0, 1, stops, matrix)
|
|
353
|
+
pen = ctx.CreatePen(info)
|
|
354
|
+
|
|
355
|
+
else:
|
|
356
|
+
raise ValueError("Unknown stroke type")
|
|
357
|
+
return pen
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
def _chunker(iterable, n, fillvalue=None):
|
|
361
|
+
"Collect items from an iterable into fixed-length chunks or blocks"
|
|
362
|
+
args = [iter(iterable)] * n
|
|
363
|
+
return zip_longest(fillvalue=fillvalue, *args)
|
|
364
|
+
|
|
Binary file
|
wx/tools/__init__.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Some useful tools and utilities for wxPython.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# XRCed is purposfully left out so epydoc won't document it
|
|
7
|
+
__all__ = [
|
|
8
|
+
'dbg',
|
|
9
|
+
'genaxmodule',
|
|
10
|
+
'helpviewer',
|
|
11
|
+
'img2img',
|
|
12
|
+
'img2png',
|
|
13
|
+
'img2py',
|
|
14
|
+
'img2xpm',
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
wx/tools/dbg.py
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: dbg.py
|
|
3
|
+
# Author: Will Sadkin
|
|
4
|
+
# Email: wsadkin@nameconnector.com
|
|
5
|
+
# Created: 07/11/2002
|
|
6
|
+
# Copyright: (c) 2002 by Will Sadkin, 2002
|
|
7
|
+
# License: wxWindows license
|
|
8
|
+
# Tags: phoenix-port
|
|
9
|
+
#----------------------------------------------------------------------------
|
|
10
|
+
# 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
11
|
+
#
|
|
12
|
+
# o V2.5 compatibility update
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
This module provides a useful debugging framework that supports
|
|
17
|
+
showing nesting of function calls and allows a program to contain
|
|
18
|
+
lots of debugging print statements that can easily be turned on
|
|
19
|
+
or off to debug the code. It also supports the ability to
|
|
20
|
+
have each function indent the debugging statements contained
|
|
21
|
+
within it, including those of any other function called within
|
|
22
|
+
its scope, thus allowing you to see in what order functions are
|
|
23
|
+
being called, and from where.
|
|
24
|
+
|
|
25
|
+
This capability is particularly useful in wxPython applications,
|
|
26
|
+
where exactly events occur that cause functions to be called is
|
|
27
|
+
not entirely clear, and because wxPython programs can't be run
|
|
28
|
+
from inside other debugging environments that have their own
|
|
29
|
+
message loops.
|
|
30
|
+
|
|
31
|
+
This module defines a Logger class, responsible for managing
|
|
32
|
+
debugging output. Each Logger instance can be given a name
|
|
33
|
+
at construction; if this is done, '<name>:' will precede each
|
|
34
|
+
logging output made by that Logger instance.
|
|
35
|
+
|
|
36
|
+
The log() function this class provides takes a set of positional
|
|
37
|
+
arguments that are printed in order if debugging is enabled
|
|
38
|
+
(just like print does), followed by a set of keyword arguments
|
|
39
|
+
that control the behavior of the log() function itself on subsequent
|
|
40
|
+
calls. The current keyword arguments are:
|
|
41
|
+
|
|
42
|
+
indent
|
|
43
|
+
When set to a value of 1, this increments the current
|
|
44
|
+
indentation level, causing all subsequent dbg() outputs to be
|
|
45
|
+
indented by 3 more spaces. When set to a value of 0,
|
|
46
|
+
this process is reversed, causing the indent to decrease by
|
|
47
|
+
3 spaces. The default indentation level is 0.
|
|
48
|
+
|
|
49
|
+
enable
|
|
50
|
+
When set to a value of 1, this turns on dbg() output for
|
|
51
|
+
for program importing this module, until told to do otherwise.
|
|
52
|
+
When set to a value of 0, dbg output is turned off. (dbg
|
|
53
|
+
output is off by default.)
|
|
54
|
+
|
|
55
|
+
suspend
|
|
56
|
+
When set to a value of 1, this increments the current
|
|
57
|
+
"suspension" level. This makes it possible for a function
|
|
58
|
+
to temporarily suspend its and any of its dependents'
|
|
59
|
+
potential outputs that use the same Logger instance.
|
|
60
|
+
When set to a value of 0, the suspension level is
|
|
61
|
+
decremented. When the value goes back to 0, potential
|
|
62
|
+
logging is resumed (actual output depends on the
|
|
63
|
+
"enable" status of the Logger instance in question.)
|
|
64
|
+
|
|
65
|
+
wxlog
|
|
66
|
+
When set to a value of 1, the output will be sent to the
|
|
67
|
+
active wxLog target.
|
|
68
|
+
|
|
69
|
+
stream
|
|
70
|
+
When set to a non-None value, the current output stream
|
|
71
|
+
(default of sys.stdout) is pushed onto a stack of streams,
|
|
72
|
+
and is replaced in the dbg system with the specified stream.
|
|
73
|
+
When called with a value of None, the previous stream will
|
|
74
|
+
be restored (if stacked.) If set to None without previously
|
|
75
|
+
changing it will result in no action being taken.
|
|
76
|
+
|
|
77
|
+
You can also call the log function implicitly on the Logger
|
|
78
|
+
instance, ie. you can type::
|
|
79
|
+
|
|
80
|
+
from wx.tools.dbg import Logger
|
|
81
|
+
dbg = Logger()
|
|
82
|
+
dbg('something to print')
|
|
83
|
+
|
|
84
|
+
Using this fairly simple mechanism, it is possible to get fairly
|
|
85
|
+
useful debugging output in a program. Consider the following
|
|
86
|
+
code example:
|
|
87
|
+
|
|
88
|
+
>>> d = {1:'a', 2:'dictionary', 3:'of', 4:'words'}
|
|
89
|
+
>>> dbg = dbg.Logger('module')
|
|
90
|
+
>>> dbg(enable=1)
|
|
91
|
+
module: dbg enabled
|
|
92
|
+
>>> def foo(d):
|
|
93
|
+
... dbg('foo', indent=1)
|
|
94
|
+
... bar(d)
|
|
95
|
+
... dbg('end of foo', indent=0)
|
|
96
|
+
...
|
|
97
|
+
>>> def bar(d):
|
|
98
|
+
... dbg('bar', indent=1)
|
|
99
|
+
... dbg('contents of d:', indent=1)
|
|
100
|
+
... l = d.items()
|
|
101
|
+
... l.sort()
|
|
102
|
+
... for key, value in l:
|
|
103
|
+
... dbg('%d =' % key, value)
|
|
104
|
+
... dbg(indent=0)
|
|
105
|
+
... dbg('end of bar', indent=0)
|
|
106
|
+
...
|
|
107
|
+
>>> foo(d)
|
|
108
|
+
module: foo
|
|
109
|
+
module: bar
|
|
110
|
+
module: contents of d:
|
|
111
|
+
module: 1 = a
|
|
112
|
+
module: 2 = dictionary
|
|
113
|
+
module: 3 = of
|
|
114
|
+
module: 4 = words
|
|
115
|
+
module: end of bar
|
|
116
|
+
module: end of foo
|
|
117
|
+
>>>
|
|
118
|
+
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class Logger:
|
|
123
|
+
def __init__(self, name=None):
|
|
124
|
+
import sys
|
|
125
|
+
self.name = name
|
|
126
|
+
self._indent = 0 # current number of indentations
|
|
127
|
+
self._dbg = 0 # enable/disable flag
|
|
128
|
+
self._suspend = 0 # allows code to "suspend/resume" potential dbg output
|
|
129
|
+
self._wxLog = 0 # use wxLogMessage for debug output
|
|
130
|
+
self._outstream = sys.stdout # default output stream
|
|
131
|
+
self._outstream_stack = [] # for restoration of streams as necessary
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def IsEnabled():
|
|
135
|
+
return self._dbg
|
|
136
|
+
|
|
137
|
+
def IsSuspended():
|
|
138
|
+
return _suspend
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def log(self, *args, **kwargs):
|
|
142
|
+
"""
|
|
143
|
+
This function provides a useful framework for generating
|
|
144
|
+
optional debugging output that can be displayed at an
|
|
145
|
+
arbitrary level of indentation.
|
|
146
|
+
"""
|
|
147
|
+
if not self._dbg and not 'enable' in kwargs:
|
|
148
|
+
return
|
|
149
|
+
|
|
150
|
+
if self._dbg and len(args) and not self._suspend:
|
|
151
|
+
# (emulate print functionality; handle unicode as best as possible:)
|
|
152
|
+
strs = []
|
|
153
|
+
for arg in args:
|
|
154
|
+
try:
|
|
155
|
+
strs.append(str(arg))
|
|
156
|
+
except:
|
|
157
|
+
strs.append(repr(arg))
|
|
158
|
+
|
|
159
|
+
output = ' '.join(strs)
|
|
160
|
+
if self.name: output = self.name+': ' + output
|
|
161
|
+
output = ' ' * 3 * self._indent + output
|
|
162
|
+
|
|
163
|
+
if self._wxLog:
|
|
164
|
+
wx.LogMessage(output)
|
|
165
|
+
else:
|
|
166
|
+
self._outstream.write(output + '\n')
|
|
167
|
+
self._outstream.flush()
|
|
168
|
+
# else do nothing
|
|
169
|
+
|
|
170
|
+
# post process args:
|
|
171
|
+
for kwarg, value in kwargs.items():
|
|
172
|
+
if kwarg == 'indent':
|
|
173
|
+
self.SetIndent(value)
|
|
174
|
+
elif kwarg == 'enable':
|
|
175
|
+
self.SetEnabled(value)
|
|
176
|
+
elif kwarg == 'suspend':
|
|
177
|
+
self.SetSuspend(value)
|
|
178
|
+
elif kwarg == 'wxlog':
|
|
179
|
+
self.SetWxLog(value)
|
|
180
|
+
elif kwarg == 'stream':
|
|
181
|
+
self.SetStream(value)
|
|
182
|
+
|
|
183
|
+
# aliases for the log function
|
|
184
|
+
dbg = log # backwards compatible
|
|
185
|
+
msg = log #
|
|
186
|
+
__call__ = log # this one lets you 'call' the instance directly
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def SetEnabled(self, value):
|
|
190
|
+
if value:
|
|
191
|
+
old_dbg = self._dbg
|
|
192
|
+
self._dbg = 1
|
|
193
|
+
if not old_dbg:
|
|
194
|
+
self.dbg('dbg enabled')
|
|
195
|
+
else:
|
|
196
|
+
if self._dbg:
|
|
197
|
+
self.dbg('dbg disabled')
|
|
198
|
+
self._dbg = 0
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def SetSuspend(self, value):
|
|
202
|
+
if value:
|
|
203
|
+
self._suspend += 1
|
|
204
|
+
elif self._suspend > 0:
|
|
205
|
+
self._suspend -= 1
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def SetIndent(self, value):
|
|
209
|
+
if value:
|
|
210
|
+
self._indent += 1
|
|
211
|
+
elif self._indent > 0:
|
|
212
|
+
self._indent -= 1
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def SetWxLog(self, value):
|
|
216
|
+
self._wxLog = value
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def SetStream(self, value):
|
|
220
|
+
if value:
|
|
221
|
+
self._outstream_stack.append( self._outstream )
|
|
222
|
+
self._outstream = value
|
|
223
|
+
elif value is None and len(self._outstream_stack) > 0:
|
|
224
|
+
self._outstream = self._outstream_stack.pop(-1)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
#------------------------------------------------------------
|
|
228
|
+
|
|
229
|
+
if __name__ == "__main__":
|
|
230
|
+
import sys
|
|
231
|
+
import wx
|
|
232
|
+
|
|
233
|
+
wx.Log.SetActiveTarget(wx.LogStderr())
|
|
234
|
+
logger = Logger('module')
|
|
235
|
+
dbg = logger.dbg
|
|
236
|
+
dbg(enable=1)
|
|
237
|
+
logger('test __call__ interface')
|
|
238
|
+
dbg('testing wxLog output to stderr:', wxlog=1, indent=1)
|
|
239
|
+
dbg('1,2,3...')
|
|
240
|
+
dbg('testing wx.LogNull:')
|
|
241
|
+
devnull = wx.LogNull()
|
|
242
|
+
dbg('4,5,6...') # shouldn't print, according to doc...
|
|
243
|
+
del devnull
|
|
244
|
+
dbg('(resuming to wx.LogStdErr)', '7,8,9...', indent=0)
|
|
245
|
+
dbg('disabling wx.Log output, switching to stderr:')
|
|
246
|
+
dbg(wxlog=0, stream=sys.stderr)
|
|
247
|
+
dbg(logger._outstream, 'switching back to stdout:')
|
|
248
|
+
dbg(stream=None)
|
|
249
|
+
dbg(logger._outstream )
|
|
250
|
+
def foo(str):
|
|
251
|
+
dbg('foo:', indent=1)
|
|
252
|
+
dbg(str, indent=0)
|
|
253
|
+
foo('testing dbg inside function')
|
|
254
|
+
class bar(Logger):
|
|
255
|
+
def __init__(self, name):
|
|
256
|
+
Logger.__init__(self, name)
|
|
257
|
+
def enable(self, value):
|
|
258
|
+
self.dbg(enable=value)
|
|
259
|
+
def foo(self, str):
|
|
260
|
+
self.dbg('foo:', indent=1)
|
|
261
|
+
self.dbg(str, indent=0)
|
|
262
|
+
f = bar('class mixin')
|
|
263
|
+
f.foo("shouldn't print")
|
|
264
|
+
f.enable(1)
|
|
265
|
+
f.foo("should print")
|
|
266
|
+
dbg('test completed.', enable=0)
|
|
267
|
+
dbg('(double-checking ;-)')
|
|
268
|
+
|
wx/tools/genaxmodule.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: genaxmodule.py
|
|
3
|
+
# Tags: phoenix-port
|
|
4
|
+
#----------------------------------------------------------------------------
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
When this script is run it will create a .py module (output to the
|
|
9
|
+
current directory) containing a class derived from
|
|
10
|
+
wx.activex.ActiveXWindow for the progID or CLSID given on the command
|
|
11
|
+
line. By default the class name will be used as the module name as
|
|
12
|
+
well, but this is just because I am lazy, not trying to define a
|
|
13
|
+
standard or anything. Feel free to rename the module, I do.
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
|
|
17
|
+
python genax.py CLSID|progID className
|
|
18
|
+
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import wx
|
|
22
|
+
import wx.activex
|
|
23
|
+
import sys
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def main(args=None):
|
|
27
|
+
if not args:
|
|
28
|
+
args = sys.argv
|
|
29
|
+
|
|
30
|
+
if len(args) < 3:
|
|
31
|
+
print(__doc__)
|
|
32
|
+
sys.exit(1)
|
|
33
|
+
|
|
34
|
+
# unfortunatly we need to make an app, frame and an instance of
|
|
35
|
+
# the ActiceX control in order to get the TypeInfo about it...
|
|
36
|
+
app = wx.App()
|
|
37
|
+
f = wx.Frame(None, -1, "")
|
|
38
|
+
clsid = wx.activex.CLSID(args[1])
|
|
39
|
+
axw = wx.activex.ActiveXWindow(f, clsid)
|
|
40
|
+
|
|
41
|
+
wx.activex.GernerateAXModule(axw, args[2], '.', verbose=True)
|
|
42
|
+
|
|
43
|
+
# Cleanup
|
|
44
|
+
f.Close()
|
|
45
|
+
app.MainLoop()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == "__main__":
|
|
49
|
+
main(sys.argv)
|
|
50
|
+
|