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/lib/scrolledpanel.py
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: scrolledpanel.py
|
|
3
|
+
# Author: Will Sadkin
|
|
4
|
+
# Created: 03/21/2003
|
|
5
|
+
# Copyright: (c) 2003 by Will Sadkin
|
|
6
|
+
# License: wxWindows license
|
|
7
|
+
# Tags: phoenix-port
|
|
8
|
+
#----------------------------------------------------------------------------
|
|
9
|
+
# 12/11/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
10
|
+
#
|
|
11
|
+
# o 2.5 compatibility update.
|
|
12
|
+
#
|
|
13
|
+
# 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
14
|
+
#
|
|
15
|
+
# o wxScrolledPanel -> ScrolledPanel
|
|
16
|
+
#
|
|
17
|
+
# 21 Dec 2012 - Andrea Gavana (andrea.gavana@gmail.com)
|
|
18
|
+
#
|
|
19
|
+
# Tags: phoenix-port, unittest, documented
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
"""
|
|
23
|
+
:class:`~lib.scrolledpanel.ScrolledPanel` extends :class:`ScrolledWindow`, adding all
|
|
24
|
+
the necessary bits to set up scroll handling for you.
|
|
25
|
+
|
|
26
|
+
Description
|
|
27
|
+
===========
|
|
28
|
+
|
|
29
|
+
:class:`ScrolledPanel` fills a "hole" in the implementation of
|
|
30
|
+
:class:`ScrolledWindow`, providing automatic scrollbar and scrolling
|
|
31
|
+
behavior and the tab traversal management that :class:`ScrolledWindow`
|
|
32
|
+
lacks. This code was based on the original demo code showing how
|
|
33
|
+
to do this, but is now available for general use as a proper class
|
|
34
|
+
(and the demo is now converted to just use it.)
|
|
35
|
+
|
|
36
|
+
It is assumed that the :class:`ScrolledPanel` will have a sizer, as it is
|
|
37
|
+
used to calculate the minimal virtual size of the panel and etc.
|
|
38
|
+
|
|
39
|
+
Usage
|
|
40
|
+
=====
|
|
41
|
+
|
|
42
|
+
Usage example::
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
text = '''
|
|
46
|
+
ScrolledPanel extends wx.ScrolledWindow, adding all
|
|
47
|
+
the necessary bits to set up scroll handling for you.
|
|
48
|
+
|
|
49
|
+
Here are three fixed size examples of its use. The
|
|
50
|
+
demo panel for this sample is also using it -- the
|
|
51
|
+
wx.StaticLine below is intentionally made too long so a scrollbar will be
|
|
52
|
+
activated.'''
|
|
53
|
+
|
|
54
|
+
import wx
|
|
55
|
+
import wx.lib.scrolledpanel as scrolled
|
|
56
|
+
|
|
57
|
+
class TestPanel(scrolled.ScrolledPanel):
|
|
58
|
+
|
|
59
|
+
def __init__(self, parent):
|
|
60
|
+
|
|
61
|
+
scrolled.ScrolledPanel.__init__(self, parent, -1)
|
|
62
|
+
|
|
63
|
+
vbox = wx.BoxSizer(wx.VERTICAL)
|
|
64
|
+
|
|
65
|
+
desc = wx.StaticText(self, -1, text)
|
|
66
|
+
|
|
67
|
+
desc.SetForegroundColour("Blue")
|
|
68
|
+
vbox.Add(desc, 0, wx.ALIGN_LEFT | wx.ALL, 5)
|
|
69
|
+
vbox.Add(wx.StaticLine(self, -1, size=(1024, -1)), 0, wx.ALL, 5)
|
|
70
|
+
vbox.Add((20, 20))
|
|
71
|
+
|
|
72
|
+
self.SetSizer(vbox)
|
|
73
|
+
self.SetupScrolling()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
app = wx.App(0)
|
|
77
|
+
frame = wx.Frame(None, wx.ID_ANY)
|
|
78
|
+
fa = TestPanel(frame)
|
|
79
|
+
frame.Show()
|
|
80
|
+
app.MainLoop()
|
|
81
|
+
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
import wx
|
|
85
|
+
import math
|
|
86
|
+
|
|
87
|
+
class ScrolledPanel(wx.ScrolledWindow):
|
|
88
|
+
"""
|
|
89
|
+
:class:`ScrolledPanel` fills a "hole" in the implementation of
|
|
90
|
+
:class:`ScrolledWindow`, providing automatic scrollbar and scrolling
|
|
91
|
+
behavior and the tab traversal management that :class:`ScrolledWindow` lacks.
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
|
|
95
|
+
size=wx.DefaultSize, style=wx.TAB_TRAVERSAL,
|
|
96
|
+
name="scrolledpanel"):
|
|
97
|
+
"""
|
|
98
|
+
Default class constructor.
|
|
99
|
+
|
|
100
|
+
:param wx.Window `parent`: parent window. Must not be ``None``;
|
|
101
|
+
:param integer `id`: window identifier. A value of -1 indicates a default value;
|
|
102
|
+
:param `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
103
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
104
|
+
:type `pos`: tuple or :class:`wx.Point`
|
|
105
|
+
:param `size`: the control size. A value of (-1, -1) indicates a default size,
|
|
106
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
107
|
+
:type `size`: tuple or :class:`wx.Size`
|
|
108
|
+
:param integer `style`: the underlying :class:`wx.ScrolledWindow` style;
|
|
109
|
+
:param string `name`: the scrolled panel name.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
wx.ScrolledWindow.__init__(self, parent, id,
|
|
113
|
+
pos=pos, size=size,
|
|
114
|
+
style=style, name=name)
|
|
115
|
+
self.scrollIntoView = True
|
|
116
|
+
self.SetInitialSize(size)
|
|
117
|
+
self.Bind(wx.EVT_CHILD_FOCUS, self.OnChildFocus)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def SetupScrolling(self, scroll_x=True, scroll_y=True, rate_x=20, rate_y=20,
|
|
121
|
+
scrollToTop=True, scrollIntoView=True):
|
|
122
|
+
"""
|
|
123
|
+
This function sets up the event handling necessary to handle
|
|
124
|
+
scrolling properly. It should be called within the `__init__`
|
|
125
|
+
function of any class that is derived from :class:`ScrolledPanel`,
|
|
126
|
+
once the controls on the panel have been constructed and
|
|
127
|
+
thus the size of the scrolling area can be determined.
|
|
128
|
+
|
|
129
|
+
:param bool `scroll_x`: ``True`` to allow horizontal scrolling, ``False`` otherwise;
|
|
130
|
+
:param bool `scroll_y`: ``True`` to allow vertical scrolling, ``False`` otherwise;
|
|
131
|
+
:param int `rate_x`: the horizontal scroll increment;
|
|
132
|
+
:param int `rate_y`: the vertical scroll increment;
|
|
133
|
+
:param bool `scrollToTop`: ``True`` to scroll all way to the top, ``False`` otherwise;
|
|
134
|
+
:param bool `scrollIntoView`: ``True`` to scroll a focused child into view, ``False`` otherwise.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
self.scrollIntoView = scrollIntoView
|
|
138
|
+
|
|
139
|
+
# The following is all that is needed to integrate the sizer and the scrolled window
|
|
140
|
+
if not scroll_x: rate_x = 0
|
|
141
|
+
if not scroll_y: rate_y = 0
|
|
142
|
+
|
|
143
|
+
# Round up the virtual size to be a multiple of the scroll rate
|
|
144
|
+
sizer = self.GetSizer()
|
|
145
|
+
if sizer:
|
|
146
|
+
w, h = sizer.GetMinSize()
|
|
147
|
+
if rate_x:
|
|
148
|
+
w += rate_x - (w % rate_x)
|
|
149
|
+
if rate_y:
|
|
150
|
+
h += rate_y - (h % rate_y)
|
|
151
|
+
self.SetVirtualSize( (w, h) )
|
|
152
|
+
self.SetScrollRate(rate_x, rate_y)
|
|
153
|
+
wx.CallAfter(self._SetupAfter, scrollToTop) # scroll back to top after initial events
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def _SetupAfter(self, scrollToTop):
|
|
157
|
+
self.SetVirtualSize(self.GetBestVirtualSize())
|
|
158
|
+
if scrollToTop:
|
|
159
|
+
self.Scroll(0,0)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def OnChildFocus(self, evt):
|
|
163
|
+
"""
|
|
164
|
+
If the child window that gets the focus is not fully visible,
|
|
165
|
+
this handler will try to scroll enough to see it.
|
|
166
|
+
|
|
167
|
+
:param `evt`: a :class:`ChildFocusEvent` event to be processed.
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
child = evt.GetWindow()
|
|
171
|
+
if self.scrollIntoView:
|
|
172
|
+
self.ScrollChildIntoView(child)
|
|
173
|
+
evt.Skip()
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def ScrollChildIntoView(self, child):
|
|
177
|
+
"""
|
|
178
|
+
Scroll the panel so that the specified child window is in view.
|
|
179
|
+
|
|
180
|
+
:param wx.Window `child`: any :class:`wx.Window` - derived control.
|
|
181
|
+
|
|
182
|
+
.. note:: This method looks redundant if `evt.Skip()` is
|
|
183
|
+
called as well - the base :class:`ScrolledWindow` widget now seems
|
|
184
|
+
to be doing the same thing anyway.
|
|
185
|
+
|
|
186
|
+
"""
|
|
187
|
+
|
|
188
|
+
sppu_x, sppu_y = self.GetScrollPixelsPerUnit()
|
|
189
|
+
vs_x, vs_y = self.GetViewStart()
|
|
190
|
+
cr = child.GetRect()
|
|
191
|
+
clntsz = self.GetClientSize()
|
|
192
|
+
new_vs_x, new_vs_y = -1, -1
|
|
193
|
+
|
|
194
|
+
# is it before the left edge?
|
|
195
|
+
if cr.x < 0 and sppu_x > 0:
|
|
196
|
+
new_vs_x = vs_x + (cr.x / sppu_x)
|
|
197
|
+
|
|
198
|
+
# is it above the top?
|
|
199
|
+
if cr.y < 0 and sppu_y > 0:
|
|
200
|
+
new_vs_y = vs_y + (cr.y / sppu_y)
|
|
201
|
+
|
|
202
|
+
# For the right and bottom edges, scroll enough to show the
|
|
203
|
+
# whole control if possible, but if not just scroll such that
|
|
204
|
+
# the top/left edges are still visible
|
|
205
|
+
|
|
206
|
+
# is it past the right edge ?
|
|
207
|
+
if cr.right > clntsz.width and sppu_x > 0:
|
|
208
|
+
diff = math.ceil(1.0 * (cr.right - clntsz.width + 1) / sppu_x)
|
|
209
|
+
if cr.x - diff * sppu_x > 0:
|
|
210
|
+
new_vs_x = vs_x + diff
|
|
211
|
+
else:
|
|
212
|
+
new_vs_x = vs_x + (cr.x / sppu_x)
|
|
213
|
+
|
|
214
|
+
# is it below the bottom ?
|
|
215
|
+
if cr.bottom > clntsz.height and sppu_y > 0:
|
|
216
|
+
diff = math.ceil(1.0 * (cr.bottom - clntsz.height + 1) / sppu_y)
|
|
217
|
+
if cr.y - diff * sppu_y > 0:
|
|
218
|
+
new_vs_y = vs_y + diff
|
|
219
|
+
else:
|
|
220
|
+
new_vs_y = vs_y + (cr.y / sppu_y)
|
|
221
|
+
|
|
222
|
+
# if we need to adjust
|
|
223
|
+
if new_vs_x != -1 or new_vs_y != -1:
|
|
224
|
+
#print("%s: (%s, %s)" % (self.GetName(), new_vs_x, new_vs_y))
|
|
225
|
+
self.Scroll(new_vs_x, new_vs_y)
|
wx/lib/sheet.py
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# sheet.py
|
|
2
|
+
# CSheet - A wxPython spreadsheet class.
|
|
3
|
+
# This is free software. Feel free to adapt it as you like.
|
|
4
|
+
# Author: Mark F. Russo (russomf@hotmail.com) 2002/01/31
|
|
5
|
+
# Tags: phoenix-port
|
|
6
|
+
#---------------------------------------------------------------------------
|
|
7
|
+
# 12/11/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
8
|
+
#
|
|
9
|
+
# o 2.5 compatibility update.
|
|
10
|
+
# o Untested.
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
import string
|
|
14
|
+
import wx
|
|
15
|
+
import wx.grid
|
|
16
|
+
|
|
17
|
+
#---------------------------------------------------------------------------
|
|
18
|
+
class CTextCellEditor(wx.TextCtrl):
|
|
19
|
+
""" Custom text control for cell editing """
|
|
20
|
+
def __init__(self, parent, id, grid):
|
|
21
|
+
wx.TextCtrl.__init__(self, parent, id, "", style=wx.NO_BORDER)
|
|
22
|
+
self._grid = grid # Save grid reference
|
|
23
|
+
self.Bind(wx.EVT_CHAR, self.OnChar)
|
|
24
|
+
|
|
25
|
+
def OnChar(self, evt): # Hook OnChar for custom behavior
|
|
26
|
+
"""Customizes char events """
|
|
27
|
+
key = evt.GetKeyCode()
|
|
28
|
+
if key == wx.WXK_DOWN:
|
|
29
|
+
self._grid.DisableCellEditControl() # Commit the edit
|
|
30
|
+
self._grid.MoveCursorDown(False) # Change the current cell
|
|
31
|
+
elif key == wx.WXK_UP:
|
|
32
|
+
self._grid.DisableCellEditControl() # Commit the edit
|
|
33
|
+
self._grid.MoveCursorUp(False) # Change the current cell
|
|
34
|
+
elif key == wx.WXK_LEFT:
|
|
35
|
+
self._grid.DisableCellEditControl() # Commit the edit
|
|
36
|
+
self._grid.MoveCursorLeft(False) # Change the current cell
|
|
37
|
+
elif key == wx.WXK_RIGHT:
|
|
38
|
+
self._grid.DisableCellEditControl() # Commit the edit
|
|
39
|
+
self._grid.MoveCursorRight(False) # Change the current cell
|
|
40
|
+
|
|
41
|
+
evt.Skip() # Continue event
|
|
42
|
+
|
|
43
|
+
#---------------------------------------------------------------------------
|
|
44
|
+
class CCellEditor(wx.grid.PyGridCellEditor):
|
|
45
|
+
""" Custom cell editor """
|
|
46
|
+
def __init__(self, grid):
|
|
47
|
+
wx.grid.PyGridCellEditor.__init__(self)
|
|
48
|
+
self._grid = grid # Save a reference to the grid
|
|
49
|
+
|
|
50
|
+
def Create(self, parent, id, evtHandler):
|
|
51
|
+
""" Create the actual edit control. Must derive from wxControl.
|
|
52
|
+
Must Override
|
|
53
|
+
"""
|
|
54
|
+
self._tc = CTextCellEditor(parent, id, self._grid)
|
|
55
|
+
self._tc.SetInsertionPoint(0)
|
|
56
|
+
self.SetControl(self._tc)
|
|
57
|
+
if evtHandler:
|
|
58
|
+
self._tc.PushEventHandler(evtHandler)
|
|
59
|
+
|
|
60
|
+
def SetSize(self, rect):
|
|
61
|
+
""" Position/size the edit control within the cell rectangle. """
|
|
62
|
+
# Size text control to exactly overlay in-cell editing
|
|
63
|
+
self._tc.SetSize(rect.x+3, rect.y+3, rect.width-2, rect.height-2)
|
|
64
|
+
|
|
65
|
+
def Show(self, show, attr):
|
|
66
|
+
""" Show or hide the edit control. Use the attr (if not None)
|
|
67
|
+
to set colors or fonts for the control.
|
|
68
|
+
|
|
69
|
+
NOTE: There is no need to everride this if you don't need
|
|
70
|
+
to do something out of the ordinary.
|
|
71
|
+
"""
|
|
72
|
+
super(CCellEditor, self).Show(show, attr)
|
|
73
|
+
|
|
74
|
+
def PaintBackground(self, rect, attr):
|
|
75
|
+
""" Draws the part of the cell not occupied by the edit control. The
|
|
76
|
+
base class version just fills it with background colour from the
|
|
77
|
+
attribute.
|
|
78
|
+
|
|
79
|
+
NOTE: There is no need to everride this if you don't need
|
|
80
|
+
to do something out of the ordinary.
|
|
81
|
+
"""
|
|
82
|
+
# Call base class method.
|
|
83
|
+
super(CCellEditor, self).PaintBackground(rect, attr)
|
|
84
|
+
|
|
85
|
+
def BeginEdit(self, row, col, grid):
|
|
86
|
+
""" Fetch the value from the table and prepare edit control to begin editing.
|
|
87
|
+
Set the focus to the edit control. Must Override.
|
|
88
|
+
"""
|
|
89
|
+
self._startValue = grid.GetTable().GetValue(row, col)
|
|
90
|
+
self._tc.SetValue(self._startValue)
|
|
91
|
+
self._tc.SetFocus()
|
|
92
|
+
|
|
93
|
+
# Select the text when initiating an edit so that subsequent typing
|
|
94
|
+
# replaces the contents.
|
|
95
|
+
self._tc.SetSelection(0, self._tc.GetLastPosition())
|
|
96
|
+
|
|
97
|
+
def EndEdit(self, row, col, grid):
|
|
98
|
+
""" Commit editing the current cell. Returns True if the value has changed.
|
|
99
|
+
If necessary, the control may be destroyed. Must Override.
|
|
100
|
+
"""
|
|
101
|
+
changed = False # Assume value not changed
|
|
102
|
+
val = self._tc.GetValue() # Get value in edit control
|
|
103
|
+
if val != self._startValue: # Compare
|
|
104
|
+
changed = True # If different then changed is True
|
|
105
|
+
grid.GetTable().SetValue(row, col, val) # Update the table
|
|
106
|
+
self._startValue = '' # Clear the class' start value
|
|
107
|
+
self._tc.SetValue('') # Clear contents of the edit control
|
|
108
|
+
|
|
109
|
+
return changed
|
|
110
|
+
|
|
111
|
+
def Reset(self):
|
|
112
|
+
""" Reset the value in the control back to its starting value. Must Override. """
|
|
113
|
+
self._tc.SetValue(self._startValue)
|
|
114
|
+
self._tc.SetInsertionPointEnd()
|
|
115
|
+
|
|
116
|
+
def IsAcceptedKey(self, evt):
|
|
117
|
+
""" Return True to allow the given key to start editing. The base class
|
|
118
|
+
version only checks that the event has no modifiers. F2 is special
|
|
119
|
+
and will always start the editor.
|
|
120
|
+
"""
|
|
121
|
+
return (not (evt.ControlDown() or evt.AltDown())
|
|
122
|
+
and evt.GetKeyCode() != wx.WXK_SHIFT)
|
|
123
|
+
|
|
124
|
+
def StartingKey(self, evt):
|
|
125
|
+
""" If the editor is enabled by pressing keys on the grid, this will be
|
|
126
|
+
called to let the editor react to that first key.
|
|
127
|
+
"""
|
|
128
|
+
key = evt.GetKeyCode() # Get the key code
|
|
129
|
+
ch = None # Handle num pad keys
|
|
130
|
+
if key in [ wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3,
|
|
131
|
+
wx.WXK_NUMPAD4, wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7,
|
|
132
|
+
wx.WXK_NUMPAD8, wx.WXK_NUMPAD9]:
|
|
133
|
+
ch = chr(ord('0') + key - wx.WXK_NUMPAD0)
|
|
134
|
+
|
|
135
|
+
elif key == wx.WXK_BACK: # Empty text control when init w/ back key
|
|
136
|
+
ch = ""
|
|
137
|
+
# Handle normal keys
|
|
138
|
+
elif key < 256 and key >= 0 and chr(key) in string.printable:
|
|
139
|
+
ch = chr(key)
|
|
140
|
+
if not evt.ShiftDown():
|
|
141
|
+
ch = ch.lower()
|
|
142
|
+
|
|
143
|
+
if ch is not None: # If are at this point with a key,
|
|
144
|
+
self._tc.SetValue(ch) # replace the contents of the text control.
|
|
145
|
+
self._tc.SetInsertionPointEnd() # Move to the end so that subsequent keys are appended
|
|
146
|
+
else:
|
|
147
|
+
evt.Skip()
|
|
148
|
+
|
|
149
|
+
def StartingClick(self):
|
|
150
|
+
""" If the editor is enabled by clicking on the cell, this method will be
|
|
151
|
+
called to allow the editor to simulate the click on the control.
|
|
152
|
+
"""
|
|
153
|
+
pass
|
|
154
|
+
|
|
155
|
+
def Destroy(self):
|
|
156
|
+
""" Final cleanup
|
|
157
|
+
|
|
158
|
+
NOTE: There is no need to everride this if you don't need
|
|
159
|
+
to do something out of the ordinary.
|
|
160
|
+
"""
|
|
161
|
+
super(CCellEditor, self).Destroy()
|
|
162
|
+
|
|
163
|
+
def Clone(self):
|
|
164
|
+
""" Create a new object which is the copy of this one. Must Override. """
|
|
165
|
+
return CCellEditor()
|
|
166
|
+
|
|
167
|
+
#---------------------------------------------------------------------------
|
|
168
|
+
class CSheet(wx.grid.Grid):
|
|
169
|
+
def __init__(self, parent):
|
|
170
|
+
wx.grid.Grid.__init__(self, parent, -1)
|
|
171
|
+
|
|
172
|
+
# Init variables
|
|
173
|
+
self._lastCol = -1 # Init last cell column clicked
|
|
174
|
+
self._lastRow = -1 # Init last cell row clicked
|
|
175
|
+
self._selected = None # Init range currently selected
|
|
176
|
+
# Map string datatype to default renderer/editor
|
|
177
|
+
self.RegisterDataType(wx.grid.GRID_VALUE_STRING,
|
|
178
|
+
wx.grid.GridCellStringRenderer(),
|
|
179
|
+
CCellEditor(self))
|
|
180
|
+
|
|
181
|
+
self.CreateGrid(4, 3) # By default start with a 4 x 3 grid
|
|
182
|
+
self.SetColLabelSize(18) # Default sizes and alignment
|
|
183
|
+
self.SetRowLabelSize(50)
|
|
184
|
+
self.SetRowLabelAlignment(wx.ALIGN_RIGHT, wx.ALIGN_BOTTOM)
|
|
185
|
+
self.SetColSize(0, 75) # Default column sizes
|
|
186
|
+
self.SetColSize(1, 75)
|
|
187
|
+
self.SetColSize(2, 75)
|
|
188
|
+
|
|
189
|
+
# Sink events
|
|
190
|
+
self.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnLeftClick)
|
|
191
|
+
self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnRightClick)
|
|
192
|
+
self.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnLeftDoubleClick)
|
|
193
|
+
self.Bind(wx.grid.EVT_GRID_RANGE_SELECT, self.OnRangeSelect)
|
|
194
|
+
self.Bind(wx.grid.EVT_GRID_ROW_SIZE, self.OnRowSize)
|
|
195
|
+
self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.OnColSize)
|
|
196
|
+
self.Bind(wx.grid.EVT_GRID_CELL_CHANGED, self.OnCellChange)
|
|
197
|
+
self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnGridSelectCell)
|
|
198
|
+
|
|
199
|
+
def OnGridSelectCell(self, event):
|
|
200
|
+
""" Track cell selections """
|
|
201
|
+
# Save the last cell coordinates
|
|
202
|
+
self._lastRow, self._lastCol = event.GetRow(), event.GetCol()
|
|
203
|
+
event.Skip()
|
|
204
|
+
|
|
205
|
+
def OnRowSize(self, event):
|
|
206
|
+
event.Skip()
|
|
207
|
+
|
|
208
|
+
def OnColSize(self, event):
|
|
209
|
+
event.Skip()
|
|
210
|
+
|
|
211
|
+
def OnCellChange(self, event):
|
|
212
|
+
event.Skip()
|
|
213
|
+
|
|
214
|
+
def OnLeftClick(self, event):
|
|
215
|
+
""" Override left-click behavior to prevent left-click edit initiation """
|
|
216
|
+
# Save the cell clicked
|
|
217
|
+
currCell = (event.GetRow(), event.GetCol())
|
|
218
|
+
|
|
219
|
+
# Suppress event if same cell clicked twice in a row.
|
|
220
|
+
# This prevents a single-click from initiating an edit.
|
|
221
|
+
if currCell != (self._lastRow, self._lastCol): event.Skip()
|
|
222
|
+
|
|
223
|
+
def OnRightClick(self, event):
|
|
224
|
+
""" Move grid cursor when a cell is right-clicked """
|
|
225
|
+
self.SetGridCursor( event.GetRow(), event.GetCol() )
|
|
226
|
+
event.Skip()
|
|
227
|
+
|
|
228
|
+
def OnLeftDoubleClick(self, event):
|
|
229
|
+
""" Initiate the cell editor on a double-click """
|
|
230
|
+
# Move grid cursor to double-clicked cell
|
|
231
|
+
if self.CanEnableCellControl():
|
|
232
|
+
self.SetGridCursor( event.GetRow(), event.GetCol() )
|
|
233
|
+
self.EnableCellEditControl(True) # Show the cell editor
|
|
234
|
+
event.Skip()
|
|
235
|
+
|
|
236
|
+
def OnRangeSelect(self, event):
|
|
237
|
+
""" Track which cells are selected so that copy/paste behavior can be implemented """
|
|
238
|
+
# If a single cell is selected, then Selecting() returns False (0)
|
|
239
|
+
# and range coords are entire grid. In this case cancel previous selection.
|
|
240
|
+
# If more than one cell is selected, then Selecting() is True (1)
|
|
241
|
+
# and range accurately reflects selected cells. Save them.
|
|
242
|
+
# If more cells are added to a selection, selecting remains True (1)
|
|
243
|
+
self._selected = None
|
|
244
|
+
if event.Selecting():
|
|
245
|
+
self._selected = ((event.GetTopRow(), event.GetLeftCol()),
|
|
246
|
+
(event.GetBottomRow(), event.GetRightCol()))
|
|
247
|
+
event.Skip()
|
|
248
|
+
|
|
249
|
+
def Copy(self):
|
|
250
|
+
""" Copy the currently selected cells to the clipboard """
|
|
251
|
+
# TODO: raise an error when there are no cells selected?
|
|
252
|
+
if self._selected is None: return
|
|
253
|
+
((r1, c1), (r2, c2)) = self._selected
|
|
254
|
+
|
|
255
|
+
# Build a string to put on the clipboard
|
|
256
|
+
# (Is there a faster way to do this in Python?)
|
|
257
|
+
crlf = chr(13) + chr(10)
|
|
258
|
+
tab = chr(9)
|
|
259
|
+
s = ""
|
|
260
|
+
for row in range(r1, r2+1):
|
|
261
|
+
for col in range(c1, c2):
|
|
262
|
+
s += self.GetCellValue(row,col)
|
|
263
|
+
s += tab
|
|
264
|
+
s += self.GetCellValue(row, c2)
|
|
265
|
+
s += crlf
|
|
266
|
+
|
|
267
|
+
# Put the string on the clipboard
|
|
268
|
+
if wx.TheClipboard.Open():
|
|
269
|
+
wx.TheClipboard.Clear()
|
|
270
|
+
wx.TheClipboard.SetData(wx.TextDataObject(s))
|
|
271
|
+
wx.TheClipboard.Close()
|
|
272
|
+
|
|
273
|
+
def Paste(self):
|
|
274
|
+
""" Paste the contents of the clipboard into the currently selected cells """
|
|
275
|
+
# (Is there a better way to do this?)
|
|
276
|
+
if wx.TheClipboard.Open():
|
|
277
|
+
td = wx.TextDataObject()
|
|
278
|
+
success = wx.TheClipboard.GetData(td)
|
|
279
|
+
wx.TheClipboard.Close()
|
|
280
|
+
if not success: return # Exit on failure
|
|
281
|
+
s = td.GetText() # Get the text
|
|
282
|
+
|
|
283
|
+
crlf = chr(13) + chr(10) # CrLf characters
|
|
284
|
+
tab = chr(9) # Tab character
|
|
285
|
+
|
|
286
|
+
rows = s.split(crlf) # split into rows
|
|
287
|
+
rows = rows[0:-1] # leave out last element, which is always empty
|
|
288
|
+
for i in range(0, len(rows)): # split rows into elements
|
|
289
|
+
rows[i] = rows[i].split(tab)
|
|
290
|
+
|
|
291
|
+
# Get the starting and ending cell range to paste into
|
|
292
|
+
if self._selected is None: # If no cells selected...
|
|
293
|
+
r1 = self.GetGridCursorRow() # Start the paste at the current location
|
|
294
|
+
c1 = self.GetGridCursorCol()
|
|
295
|
+
r2 = self.GetNumberRows()-1 # Go to maximum row and col extents
|
|
296
|
+
c2 = self.GetNumberCols()-1
|
|
297
|
+
else: # If cells selected, only paste there
|
|
298
|
+
((r1, c1), (r2, c2)) = self._selected
|
|
299
|
+
|
|
300
|
+
# Enter data into spreadsheet cells one at a time
|
|
301
|
+
r = r1 # Init row and column counters
|
|
302
|
+
c = c1
|
|
303
|
+
for row in rows: # Loop over all rows
|
|
304
|
+
for element in row: # Loop over all row elements
|
|
305
|
+
self.SetCellValue(r, c, str(element)) # Set cell value
|
|
306
|
+
c += 1 # Increment the column counter
|
|
307
|
+
if c > c2: break # Do not exceed maximum column
|
|
308
|
+
r += 1
|
|
309
|
+
if r > r2: break # Do not exceed maximum row
|
|
310
|
+
c = c1
|
|
311
|
+
|
|
312
|
+
def Clear(self):
|
|
313
|
+
""" Clear the currently selected cells """
|
|
314
|
+
if self._selected is None: # If no selection...
|
|
315
|
+
r = self.GetGridCursorRow() # clear only current cell
|
|
316
|
+
c = self.GetGridCursorCol()
|
|
317
|
+
self.SetCellValue(r, c, "")
|
|
318
|
+
else: # Otherwise clear selected cells
|
|
319
|
+
((r1, c1), (r2, c2)) = self._selected
|
|
320
|
+
for r in range(r1, r2+1):
|
|
321
|
+
for c in range(c1, c2+1):
|
|
322
|
+
self.SetCellValue(r, c, "")
|
|
323
|
+
|
|
324
|
+
def SetNumberRows(self, numRows=1):
|
|
325
|
+
""" Set the number of rows in the sheet """
|
|
326
|
+
# Check for non-negative number
|
|
327
|
+
if numRows < 0: return False
|
|
328
|
+
|
|
329
|
+
# Adjust number of rows
|
|
330
|
+
curRows = self.GetNumberRows()
|
|
331
|
+
if curRows < numRows:
|
|
332
|
+
self.AppendRows(numRows - curRows)
|
|
333
|
+
elif curRows > numRows:
|
|
334
|
+
self.DeleteRows(numRows, curRows - numRows)
|
|
335
|
+
|
|
336
|
+
return True
|
|
337
|
+
|
|
338
|
+
def SetNumberCols(self, numCols=1):
|
|
339
|
+
""" Set the number of columns in the sheet """
|
|
340
|
+
# Check for non-negative number
|
|
341
|
+
if numCols < 0: return False
|
|
342
|
+
|
|
343
|
+
# Adjust number of rows
|
|
344
|
+
curCols = self.GetNumberCols()
|
|
345
|
+
if curCols < numCols:
|
|
346
|
+
self.AppendCols(numCols - curCols)
|
|
347
|
+
elif curCols > numCols:
|
|
348
|
+
self.DeleteCols(numCols, curCols - numCols)
|
|
349
|
+
|
|
350
|
+
return True
|