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
|
@@ -0,0 +1,946 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#----------------------------------------------------------------------------
|
|
3
|
+
# Name: page.py
|
|
4
|
+
# Purpose:
|
|
5
|
+
#
|
|
6
|
+
# Author: Andrea Gavana <andrea.gavana@gmail.com>
|
|
7
|
+
#
|
|
8
|
+
# Created:
|
|
9
|
+
# Version:
|
|
10
|
+
# Date:
|
|
11
|
+
# Licence: wxWindows license
|
|
12
|
+
# Tags: phoenix-port, unittest, documented, py3-port
|
|
13
|
+
#----------------------------------------------------------------------------
|
|
14
|
+
"""
|
|
15
|
+
Description
|
|
16
|
+
===========
|
|
17
|
+
|
|
18
|
+
Container for related ribbon panels, and a tab within a ribbon bar.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
See Also
|
|
22
|
+
========
|
|
23
|
+
|
|
24
|
+
:class:`~wx.lib.agw.ribbon.bar.RibbonBar`, :class:`~wx.lib.agw.ribbon.panel.RibbonPanel`
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
import wx
|
|
29
|
+
|
|
30
|
+
from .control import RibbonControl
|
|
31
|
+
from .panel import RibbonPanel
|
|
32
|
+
|
|
33
|
+
from .art import *
|
|
34
|
+
|
|
35
|
+
# As scroll buttons need to be rendered on top of a page's child windows, the
|
|
36
|
+
# buttons themselves have to be proper child windows (rather than just painted
|
|
37
|
+
# onto the page). In order to get proper clipping of a page's children (with
|
|
38
|
+
# regard to the scroll button), the scroll buttons are created as children of
|
|
39
|
+
# the ribbon bar rather than children of the page. This could not have been
|
|
40
|
+
# achieved by creating buttons as children of the page and then doing some Z-order
|
|
41
|
+
# manipulation, as self causes problems on win32 due to ribbon panels having the
|
|
42
|
+
# transparent flag set.
|
|
43
|
+
|
|
44
|
+
def GetSizeInOrientation(size, orientation):
|
|
45
|
+
|
|
46
|
+
size = wx.Size(size)
|
|
47
|
+
if orientation == wx.HORIZONTAL:
|
|
48
|
+
return size.GetWidth()
|
|
49
|
+
elif orientation == wx.VERTICAL:
|
|
50
|
+
return size.GetHeight()
|
|
51
|
+
elif orientation == wx.BOTH:
|
|
52
|
+
return size.GetWidth() * size.GetHeight()
|
|
53
|
+
|
|
54
|
+
return 0
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class RibbonPageScrollButton(RibbonControl):
|
|
58
|
+
|
|
59
|
+
def __init__(self, sibling, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
|
|
60
|
+
|
|
61
|
+
RibbonControl.__init__(self, sibling.GetParent(), id, pos, size, style=wx.BORDER_NONE)
|
|
62
|
+
|
|
63
|
+
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
|
|
64
|
+
self._sibling = sibling
|
|
65
|
+
self._flags = (style & RIBBON_SCROLL_BTN_DIRECTION_MASK) | RIBBON_SCROLL_BTN_FOR_PAGE
|
|
66
|
+
|
|
67
|
+
self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
|
|
68
|
+
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
|
|
69
|
+
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
|
|
70
|
+
self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
|
|
71
|
+
self.Bind(wx.EVT_LEFT_UP, self.OnMouseUp)
|
|
72
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def OnEraseBackground(self, event):
|
|
76
|
+
|
|
77
|
+
# Do nothing - all painting done in main paint handler
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def OnPaint(self, event):
|
|
82
|
+
|
|
83
|
+
dc = wx.AutoBufferedPaintDC(self)
|
|
84
|
+
|
|
85
|
+
if self._art:
|
|
86
|
+
self._art.DrawScrollButton(dc, self, wx.Rect(0, 0, *self.GetSize()), self._flags)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def OnMouseEnter(self, event):
|
|
90
|
+
|
|
91
|
+
self._flags |= RIBBON_SCROLL_BTN_HOVERED
|
|
92
|
+
self.Refresh(False)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def OnMouseLeave(self, event):
|
|
96
|
+
|
|
97
|
+
self._flags &= ~RIBBON_SCROLL_BTN_HOVERED
|
|
98
|
+
self._flags &= ~RIBBON_SCROLL_BTN_ACTIVE
|
|
99
|
+
self.Refresh(False)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def OnMouseDown(self, event):
|
|
103
|
+
|
|
104
|
+
self._flags |= RIBBON_SCROLL_BTN_ACTIVE
|
|
105
|
+
self.Refresh(False)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def OnMouseUp(self, event):
|
|
109
|
+
|
|
110
|
+
if self._flags & RIBBON_SCROLL_BTN_ACTIVE:
|
|
111
|
+
|
|
112
|
+
self._flags &= ~RIBBON_SCROLL_BTN_ACTIVE
|
|
113
|
+
self.Refresh(False)
|
|
114
|
+
result = self._flags & RIBBON_SCROLL_BTN_DIRECTION_MASK
|
|
115
|
+
|
|
116
|
+
if result in [RIBBON_SCROLL_BTN_DOWN, RIBBON_SCROLL_BTN_RIGHT]:
|
|
117
|
+
self._sibling.ScrollLines(1)
|
|
118
|
+
elif result in [RIBBON_SCROLL_BTN_UP, RIBBON_SCROLL_BTN_LEFT]:
|
|
119
|
+
self._sibling.ScrollLines(-1)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class RibbonPage(RibbonControl):
|
|
123
|
+
|
|
124
|
+
def __init__(self, parent, id=wx.ID_ANY, label="", icon=wx.NullBitmap, style=0):
|
|
125
|
+
"""
|
|
126
|
+
Default class constructor.
|
|
127
|
+
|
|
128
|
+
:param `parent`: pointer to a parent window, an instance of :class:`~wx.lib.agw.ribbon.bar.RibbonBar`;
|
|
129
|
+
:param `id`: window identifier. If ``wx.ID_ANY``, will automatically create an identifier;
|
|
130
|
+
:param `label`: label to be used in the :class:`~wx.lib.agw.ribbon.bar.RibbonBar`'s tab list for this page (if the
|
|
131
|
+
ribbon bar is set to display labels);
|
|
132
|
+
:param `icon`: the icon used for the page in the ribbon bar tab area (if the ribbon bar is
|
|
133
|
+
set to display icons);
|
|
134
|
+
:param `style`: window style. Currently unused, should be zero.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
RibbonControl.__init__(self, parent, id, wx.DefaultPosition, wx.DefaultSize, wx.BORDER_NONE)
|
|
138
|
+
|
|
139
|
+
self.CommonInit(label, icon)
|
|
140
|
+
|
|
141
|
+
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
|
|
142
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
143
|
+
self.Bind(wx.EVT_SIZE, self.OnSize)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def CommonInit(self, label, icon):
|
|
147
|
+
|
|
148
|
+
self.SetName(label)
|
|
149
|
+
self.SetLabel(label)
|
|
150
|
+
|
|
151
|
+
self._old_size = wx.Size(0, 0)
|
|
152
|
+
self._icon = icon
|
|
153
|
+
self._scroll_left_btn = None
|
|
154
|
+
self._scroll_right_btn = None
|
|
155
|
+
self._size_calc_array = None
|
|
156
|
+
self._size_calc_array_size = 0
|
|
157
|
+
self._scroll_amount = 0
|
|
158
|
+
self._scroll_buttons_visible = False
|
|
159
|
+
self._collapse_stack = []
|
|
160
|
+
|
|
161
|
+
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
|
|
162
|
+
|
|
163
|
+
self.GetParent().AddPage(self)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def SetArtProvider(self, art):
|
|
167
|
+
"""
|
|
168
|
+
Set the art provider to be used.
|
|
169
|
+
|
|
170
|
+
Normally called automatically by :class:`~wx.lib.agw.ribbon.bar.RibbonBar` when the page is created, or the
|
|
171
|
+
art provider changed on the bar. The new art provider will be propagated to the
|
|
172
|
+
children of the page.
|
|
173
|
+
|
|
174
|
+
:param `art`: an art provider.
|
|
175
|
+
|
|
176
|
+
:note: Reimplemented from :class:`~wx.lib.agw.ribbon.control.RibbonControl`.
|
|
177
|
+
"""
|
|
178
|
+
|
|
179
|
+
self._art = art
|
|
180
|
+
for child in self.GetChildren():
|
|
181
|
+
if isinstance(child, RibbonControl):
|
|
182
|
+
child.SetArtProvider(art)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def AdjustRectToIncludeScrollButtons(self, rect):
|
|
186
|
+
"""
|
|
187
|
+
Expand a rectangle of the page to include external scroll buttons (if any).
|
|
188
|
+
|
|
189
|
+
When no scroll buttons are shown, has no effect.
|
|
190
|
+
|
|
191
|
+
:param `rect`: The rectangle to adjust. The width and height will not be
|
|
192
|
+
reduced, and the x and y will not be increased.
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
if self._scroll_buttons_visible:
|
|
196
|
+
if self.GetMajorAxis() == wx.VERTICAL:
|
|
197
|
+
if self._scroll_left_btn:
|
|
198
|
+
rect.SetY(rect.GetY() - self._scroll_left_btn.GetSize().GetHeight())
|
|
199
|
+
rect.SetHeight(rect.GetHeight() + self._scroll_left_btn.GetSize().GetHeight())
|
|
200
|
+
|
|
201
|
+
if self._scroll_right_btn:
|
|
202
|
+
rect.SetHeight(rect.GetHeight() + self._scroll_right_btn.GetSize().GetHeight())
|
|
203
|
+
|
|
204
|
+
else:
|
|
205
|
+
if self._scroll_left_btn:
|
|
206
|
+
rect.SetX(rect.GetX() - self._scroll_left_btn.GetSize().GetWidth())
|
|
207
|
+
rect.SetWidth(rect.GetWidth() + self._scroll_left_btn.GetSize().GetWidth())
|
|
208
|
+
|
|
209
|
+
if self._scroll_right_btn:
|
|
210
|
+
rect.SetWidth(rect.GetWidth() + self._scroll_right_btn.GetSize().GetWidth())
|
|
211
|
+
|
|
212
|
+
return rect
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def OnEraseBackground(self, event):
|
|
216
|
+
"""
|
|
217
|
+
Handles the ``wx.EVT_ERASE_BACKGROUND`` event for :class:`RibbonPage`.
|
|
218
|
+
|
|
219
|
+
:param `event`: a :class:`EraseEvent` event to be processed.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
# All painting done in main paint handler to minimise flicker
|
|
223
|
+
pass
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def OnPaint(self, event):
|
|
227
|
+
"""
|
|
228
|
+
Handles the ``wx.EVT_PAINT`` event for :class:`RibbonPage`.
|
|
229
|
+
|
|
230
|
+
:param `event`: a :class:`PaintEvent` event to be processed.
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
# No foreground painting done by the page itself, but a paint DC
|
|
234
|
+
# must be created anyway.
|
|
235
|
+
dc = wx.AutoBufferedPaintDC(self)
|
|
236
|
+
rect = wx.Rect(0, 0, *self.GetSize())
|
|
237
|
+
rect = self.AdjustRectToIncludeScrollButtons(rect)
|
|
238
|
+
self._art.DrawPageBackground(dc, self, rect)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def GetMajorAxis(self):
|
|
242
|
+
"""
|
|
243
|
+
Get the direction in which ribbon panels are stacked within the page.
|
|
244
|
+
|
|
245
|
+
This is controlled by the style of the containing :class:`~wx.lib.agw.ribbon.bar.RibbonBar`, meaning that all
|
|
246
|
+
pages within a bar will have the same major axis. As well as being the direction
|
|
247
|
+
in which panels are stacked, it is also the axis in which scrolling will occur
|
|
248
|
+
(when required).
|
|
249
|
+
|
|
250
|
+
:returns: ``wx.HORIZONTAL`` or ``wx.VERTICAL`` (never ``wx.BOTH``).
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
if self._art and (self._art.GetFlags() & RIBBON_BAR_FLOW_VERTICAL):
|
|
254
|
+
return wx.VERTICAL
|
|
255
|
+
else:
|
|
256
|
+
return wx.HORIZONTAL
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def ScrollLines(self, lines):
|
|
260
|
+
"""
|
|
261
|
+
Scroll the page by some amount up / down / left / right.
|
|
262
|
+
|
|
263
|
+
When the page's children are too big to fit in the onscreen area given to the
|
|
264
|
+
page, scroll buttons will appear, and the page can be programatically scrolled.
|
|
265
|
+
Positive values of will scroll right or down, while negative values will scroll
|
|
266
|
+
up or left (depending on the direction in which panels are stacked). A line is
|
|
267
|
+
equivalent to a constant number of pixels.
|
|
268
|
+
|
|
269
|
+
:param integer `lines`: number of lines to scroll the page.
|
|
270
|
+
|
|
271
|
+
:returns: ``True`` if the page scrolled at least one pixel in the given direction,
|
|
272
|
+
``False`` if it did not scroll.
|
|
273
|
+
|
|
274
|
+
:note: Reimplemented from :class:`wx.Window`.
|
|
275
|
+
|
|
276
|
+
:see: :meth:`~RibbonPage.GetMajorAxis`, :meth:`~RibbonPage.ScrollPixels`
|
|
277
|
+
"""
|
|
278
|
+
|
|
279
|
+
return self.ScrollPixels(lines * 8)
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def ScrollPixels(self, pixels):
|
|
283
|
+
"""
|
|
284
|
+
Scroll the page by a set number of pixels up / down / left / right.
|
|
285
|
+
|
|
286
|
+
When the page's children are too big to fit in the onscreen area given to the
|
|
287
|
+
page, scroll buttons will appear, and the page can be programatically scrolled.
|
|
288
|
+
Positive values of will scroll right or down, while negative values will scroll
|
|
289
|
+
up or left (depending on the direction in which panels are stacked).
|
|
290
|
+
|
|
291
|
+
:param integer `pixels`: number of pixels to scroll the page.
|
|
292
|
+
|
|
293
|
+
:returns: ``True`` if the page scrolled at least one pixel in the given direction,
|
|
294
|
+
``False`` if it did not scroll.
|
|
295
|
+
|
|
296
|
+
:see: :meth:`~RibbonPage.GetMajorAxis`, :meth:`~RibbonPage.ScrollLines`
|
|
297
|
+
"""
|
|
298
|
+
|
|
299
|
+
if pixels < 0:
|
|
300
|
+
if self._scroll_amount == 0:
|
|
301
|
+
return False
|
|
302
|
+
|
|
303
|
+
if self._scroll_amount < -pixels:
|
|
304
|
+
pixels = -self._scroll_amount
|
|
305
|
+
|
|
306
|
+
elif pixels > 0:
|
|
307
|
+
if self._scroll_amount == self._scroll_amount_limit:
|
|
308
|
+
return False
|
|
309
|
+
|
|
310
|
+
if self._scroll_amount + pixels > self._scroll_amount_limit:
|
|
311
|
+
pixels = self._scroll_amount_limit - self._scroll_amount
|
|
312
|
+
|
|
313
|
+
else:
|
|
314
|
+
return False
|
|
315
|
+
|
|
316
|
+
self._scroll_amount += pixels
|
|
317
|
+
|
|
318
|
+
for child in self.GetChildren():
|
|
319
|
+
x, y = child.GetPosition()
|
|
320
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
321
|
+
x -= pixels
|
|
322
|
+
else:
|
|
323
|
+
y -= pixels
|
|
324
|
+
|
|
325
|
+
child.SetPosition(wx.Point(x, y))
|
|
326
|
+
|
|
327
|
+
self.ShowScrollButtons()
|
|
328
|
+
self.Refresh()
|
|
329
|
+
return True
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def SetSizeWithScrollButtonAdjustment(self, x, y, width, height):
|
|
333
|
+
"""
|
|
334
|
+
Set the size of the page and the external scroll buttons (if any).
|
|
335
|
+
|
|
336
|
+
When a page is too small to display all of its children, scroll buttons will
|
|
337
|
+
appear (and if the page is sized up enough, they will disappear again). Slightly
|
|
338
|
+
counter-intuively, these buttons are created as siblings of the page rather than
|
|
339
|
+
children of the page (to achieve correct cropping and paint ordering of the
|
|
340
|
+
children and the buttons).
|
|
341
|
+
|
|
342
|
+
When there are no scroll buttons, this function behaves the same as `SetSize`,
|
|
343
|
+
however when there are scroll buttons, it positions them at the edges of the
|
|
344
|
+
given area, and then calls `SetSize` with the remaining area. This is provided
|
|
345
|
+
as a separate function to `SetSize` rather than within the implementation
|
|
346
|
+
of `SetSize`, as iteracting algorithms may not expect `SetSize` to also
|
|
347
|
+
set the size of siblings.
|
|
348
|
+
|
|
349
|
+
:param `x`: the page `x` position, in pixels;
|
|
350
|
+
:param `y`: the page `y` position, in pixels;
|
|
351
|
+
:param `width`: the page width, in pixels;
|
|
352
|
+
:param `height`: the page height, in pixels.
|
|
353
|
+
"""
|
|
354
|
+
|
|
355
|
+
if self._scroll_buttons_visible:
|
|
356
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
357
|
+
if self._scroll_left_btn:
|
|
358
|
+
w = self._scroll_left_btn.GetSize().GetWidth()
|
|
359
|
+
self._scroll_left_btn.SetPosition(wx.Point(x, y))
|
|
360
|
+
x += w
|
|
361
|
+
width -= w
|
|
362
|
+
|
|
363
|
+
if self._scroll_right_btn:
|
|
364
|
+
w = self._scroll_right_btn.GetSize().GetWidth()
|
|
365
|
+
width -= w
|
|
366
|
+
self._scroll_right_btn.SetPosition(wx.Point(x + width, y))
|
|
367
|
+
|
|
368
|
+
else:
|
|
369
|
+
if self._scroll_left_btn:
|
|
370
|
+
h = self._scroll_left_btn.GetSize().GetHeight()
|
|
371
|
+
self._scroll_left_btn.SetPosition(wx.Point(x, y))
|
|
372
|
+
y += h
|
|
373
|
+
height -= h
|
|
374
|
+
|
|
375
|
+
if self._scroll_right_btn:
|
|
376
|
+
h = self._scroll_right_btn.GetSize().GetHeight()
|
|
377
|
+
height -= h
|
|
378
|
+
self._scroll_right_btn.SetPosition(wx.Point(x, y + height))
|
|
379
|
+
|
|
380
|
+
if width < 0:
|
|
381
|
+
width = 0
|
|
382
|
+
if height < 0:
|
|
383
|
+
height = 0
|
|
384
|
+
|
|
385
|
+
self.SetSize(x, y, width, height)
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def DoSetSize(self, x, y, width, height, sizeFlags=wx.SIZE_AUTO):
|
|
389
|
+
"""
|
|
390
|
+
Sets the size of the window in pixels.
|
|
391
|
+
|
|
392
|
+
:param integer `x`: required `x` position in pixels, or ``wx.DefaultCoord`` to
|
|
393
|
+
indicate that the existing value should be used;
|
|
394
|
+
:param integer `y`: required `y` position in pixels, or ``wx.DefaultCoord`` to
|
|
395
|
+
indicate that the existing value should be used;
|
|
396
|
+
:param integer `width`: required width in pixels, or ``wx.DefaultCoord`` to
|
|
397
|
+
indicate that the existing value should be used;
|
|
398
|
+
:param integer `height`: required height in pixels, or ``wx.DefaultCoord`` to
|
|
399
|
+
indicate that the existing value should be used;
|
|
400
|
+
:param integer `sizeFlags`: indicates the interpretation of other parameters.
|
|
401
|
+
It is a bit list of the following:
|
|
402
|
+
|
|
403
|
+
* ``wx.SIZE_AUTO_WIDTH``: a ``wx.DefaultCoord`` width value is taken to indicate a
|
|
404
|
+
wxPython-supplied default width.
|
|
405
|
+
* ``wx.SIZE_AUTO_HEIGHT``: a ``wx.DefaultCoord`` height value is taken to indicate a
|
|
406
|
+
wxPython-supplied default height.
|
|
407
|
+
* ``wx.SIZE_AUTO``: ``wx.DefaultCoord`` size values are taken to indicate a wxPython-supplied
|
|
408
|
+
default size.
|
|
409
|
+
* ``wx.SIZE_USE_EXISTING``: existing dimensions should be used if ``wx.DefaultCoord`` values are supplied.
|
|
410
|
+
* ``wx.SIZE_ALLOW_MINUS_ONE``: allow negative dimensions (i.e. value of ``wx.DefaultCoord``)
|
|
411
|
+
to be interpreted as real dimensions, not default values.
|
|
412
|
+
* ``wx.SIZE_FORCE``: normally, if the position and the size of the window are already
|
|
413
|
+
the same as the parameters of this function, nothing is done. but with this flag a window
|
|
414
|
+
resize may be forced even in this case (supported in wx 2.6.2 and later and only implemented
|
|
415
|
+
for MSW and ignored elsewhere currently).
|
|
416
|
+
"""
|
|
417
|
+
|
|
418
|
+
# When a resize triggers the scroll buttons to become visible, the page is resized.
|
|
419
|
+
# This resize from within a resize event can cause (MSW) wxWidgets some confusion,
|
|
420
|
+
# and report the 1st size to the 2nd size event. Hence the most recent size is
|
|
421
|
+
# remembered internally and used in Layout() where appropiate.
|
|
422
|
+
|
|
423
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
424
|
+
self._size_in_major_axis_for_children = width
|
|
425
|
+
|
|
426
|
+
if self._scroll_buttons_visible:
|
|
427
|
+
if self._scroll_left_btn:
|
|
428
|
+
self._size_in_major_axis_for_children += self._scroll_left_btn.GetSize().GetWidth()
|
|
429
|
+
if self._scroll_right_btn:
|
|
430
|
+
self._size_in_major_axis_for_children += self._scroll_right_btn.GetSize().GetWidth()
|
|
431
|
+
|
|
432
|
+
else:
|
|
433
|
+
self._size_in_major_axis_for_children = height
|
|
434
|
+
|
|
435
|
+
if self._scroll_buttons_visible:
|
|
436
|
+
if self._scroll_left_btn:
|
|
437
|
+
self._size_in_major_axis_for_children += self._scroll_left_btn.GetSize().GetHeight()
|
|
438
|
+
if self._scroll_right_btn:
|
|
439
|
+
self._size_in_major_axis_for_children += self._scroll_right_btn.GetSize().GetHeight()
|
|
440
|
+
|
|
441
|
+
RibbonControl.DoSetSize(self, x, y, width, height, sizeFlags)
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
def OnSize(self, event):
|
|
445
|
+
"""
|
|
446
|
+
Handles the ``wx.EVT_SIZE`` event for :class:`RibbonPage`.
|
|
447
|
+
|
|
448
|
+
:param `event`: a :class:`wx.SizeEvent` event to be processed.
|
|
449
|
+
"""
|
|
450
|
+
|
|
451
|
+
new_size = event.GetSize()
|
|
452
|
+
|
|
453
|
+
if self._art:
|
|
454
|
+
temp_dc = wx.MemoryDC()
|
|
455
|
+
invalid_rect = self._art.GetPageBackgroundRedrawArea(temp_dc, self, self._old_size, new_size)
|
|
456
|
+
self.Refresh(True, invalid_rect)
|
|
457
|
+
|
|
458
|
+
self._old_size = wx.Size(*new_size)
|
|
459
|
+
x, y = new_size
|
|
460
|
+
|
|
461
|
+
if x > 0 and y > 0:
|
|
462
|
+
self.Layout()
|
|
463
|
+
else:
|
|
464
|
+
# Simplify other calculations by pretending new size is zero in both
|
|
465
|
+
# X and Y
|
|
466
|
+
new_size = wx.Size(0, 0)
|
|
467
|
+
# When size == 0, no point in doing any layout
|
|
468
|
+
|
|
469
|
+
event.Skip()
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def RemoveChild(self, child):
|
|
473
|
+
""" Remove all references to the child from the collapse stack. """
|
|
474
|
+
|
|
475
|
+
try:
|
|
476
|
+
self._collapse_stack.remove(child)
|
|
477
|
+
except ValueError:
|
|
478
|
+
pass
|
|
479
|
+
|
|
480
|
+
# ... and then proceed as normal
|
|
481
|
+
RibbonControl.RemoveChild(self, child)
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
def Realize(self):
|
|
485
|
+
"""
|
|
486
|
+
Perform a full re-layout of all panels on the page.
|
|
487
|
+
|
|
488
|
+
Should be called after panels are added to the page, or the sizing behaviour of
|
|
489
|
+
a panel on the page changes (i.e. due to children being added to it). Usually
|
|
490
|
+
called automatically when :meth:`RibbonBar.Realize() <lib.agw.ribbon.bar.RibbonBar.Realize>` is called. Will invoke
|
|
491
|
+
:meth:`RibbonPanel.Realize() <lib.agw.ribbon.panel.RibbonPanel.Realize>` for all child panels.
|
|
492
|
+
|
|
493
|
+
:note: Reimplemented from :class:`~wx.lib.agw.ribbon.control.RibbonControl`.
|
|
494
|
+
"""
|
|
495
|
+
|
|
496
|
+
status = True
|
|
497
|
+
self._collapse_stack = []
|
|
498
|
+
|
|
499
|
+
for child in self.GetChildren():
|
|
500
|
+
if not isinstance(child, RibbonControl):
|
|
501
|
+
continue
|
|
502
|
+
|
|
503
|
+
if not child.Realize():
|
|
504
|
+
status = False
|
|
505
|
+
|
|
506
|
+
child.SetSize(wx.Size(*child.GetMinSize()))
|
|
507
|
+
|
|
508
|
+
x, y = self.GetSize()
|
|
509
|
+
if x > 0 and y > 0:
|
|
510
|
+
status = self.Layout() and status
|
|
511
|
+
|
|
512
|
+
return status
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
def Layout(self):
|
|
516
|
+
|
|
517
|
+
if len(self.GetChildren()) == 0:
|
|
518
|
+
return True
|
|
519
|
+
|
|
520
|
+
origin_ = wx.Point(self._art.GetMetric(RIBBON_ART_PAGE_BORDER_LEFT_SIZE), self._art.GetMetric(RIBBON_ART_PAGE_BORDER_TOP_SIZE))
|
|
521
|
+
major_axis = self.GetMajorAxis()
|
|
522
|
+
|
|
523
|
+
if self._scroll_buttons_visible:
|
|
524
|
+
if major_axis == wx.HORIZONTAL:
|
|
525
|
+
origin_.x -= self._scroll_amount
|
|
526
|
+
if self._scroll_left_btn:
|
|
527
|
+
origin_.x -= self._scroll_left_btn.GetSize().GetWidth()
|
|
528
|
+
else:
|
|
529
|
+
origin_.y -= self._scroll_amount
|
|
530
|
+
if self._scroll_left_btn:
|
|
531
|
+
origin_.y -= self._scroll_left_btn.GetSize().GetHeight()
|
|
532
|
+
|
|
533
|
+
origin = wx.Point(*origin_)
|
|
534
|
+
|
|
535
|
+
if major_axis == wx.HORIZONTAL:
|
|
536
|
+
gap = self._art.GetMetric(RIBBON_ART_PANEL_X_SEPARATION_SIZE)
|
|
537
|
+
minor_axis_size = self.GetSize().GetHeight() - origin.y - self._art.GetMetric(RIBBON_ART_PAGE_BORDER_BOTTOM_SIZE)
|
|
538
|
+
else:
|
|
539
|
+
gap = self._art.GetMetric(RIBBON_ART_PANEL_Y_SEPARATION_SIZE)
|
|
540
|
+
minor_axis_size = self.GetSize().GetWidth() - origin.x - self._art.GetMetric(RIBBON_ART_PAGE_BORDER_RIGHT_SIZE)
|
|
541
|
+
|
|
542
|
+
if minor_axis_size < 0:
|
|
543
|
+
minor_axis_size = 0
|
|
544
|
+
|
|
545
|
+
for iteration in range(1, 3):
|
|
546
|
+
|
|
547
|
+
for child in self.GetChildren():
|
|
548
|
+
w, h = child.GetSize()
|
|
549
|
+
if major_axis == wx.HORIZONTAL:
|
|
550
|
+
child.SetSize(origin.x, origin.y, w, minor_axis_size)
|
|
551
|
+
origin.x += w + gap
|
|
552
|
+
else:
|
|
553
|
+
child.SetSize(origin.x, origin.y, minor_axis_size, h)
|
|
554
|
+
origin.y += h + gap
|
|
555
|
+
|
|
556
|
+
if iteration == 1:
|
|
557
|
+
if major_axis == wx.HORIZONTAL:
|
|
558
|
+
available_space = self._size_in_major_axis_for_children - self._art.GetMetric(RIBBON_ART_PAGE_BORDER_RIGHT_SIZE) - origin.x + gap
|
|
559
|
+
else:
|
|
560
|
+
available_space = self._size_in_major_axis_for_children - self._art.GetMetric(RIBBON_ART_PAGE_BORDER_BOTTOM_SIZE) - origin.y + gap
|
|
561
|
+
|
|
562
|
+
if self._scroll_buttons_visible:
|
|
563
|
+
available_space -= self._scroll_amount
|
|
564
|
+
if self._scroll_right_btn is not None:
|
|
565
|
+
available_space += GetSizeInOrientation(self._scroll_right_btn.GetSize(), major_axis)
|
|
566
|
+
|
|
567
|
+
if available_space > 0:
|
|
568
|
+
if self._scroll_buttons_visible:
|
|
569
|
+
self.HideScrollButtons()
|
|
570
|
+
break
|
|
571
|
+
|
|
572
|
+
result = self.ExpandPanels(major_axis, available_space)
|
|
573
|
+
if not result:
|
|
574
|
+
break
|
|
575
|
+
|
|
576
|
+
elif available_space < 0:
|
|
577
|
+
if self._scroll_buttons_visible:
|
|
578
|
+
# Scroll buttons already visible - not going to be able to downsize any more
|
|
579
|
+
self._scroll_amount_limit = -available_space
|
|
580
|
+
if self._scroll_amount > self._scroll_amount_limit:
|
|
581
|
+
self.ScrollPixels(self._scroll_amount_limit - self._scroll_amount)
|
|
582
|
+
else:
|
|
583
|
+
result = self.CollapsePanels(major_axis, -available_space)
|
|
584
|
+
if not result:
|
|
585
|
+
self._scroll_amount = 0
|
|
586
|
+
self._scroll_amount_limit = -available_space
|
|
587
|
+
self.ShowScrollButtons()
|
|
588
|
+
break
|
|
589
|
+
|
|
590
|
+
else:
|
|
591
|
+
break
|
|
592
|
+
|
|
593
|
+
origin = wx.Point(*origin_) # Reset the origin
|
|
594
|
+
|
|
595
|
+
return True
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
def Show(self, show=True):
|
|
599
|
+
|
|
600
|
+
if self._scroll_left_btn:
|
|
601
|
+
self._scroll_left_btn.Show(show)
|
|
602
|
+
if self._scroll_right_btn:
|
|
603
|
+
self._scroll_right_btn.Show(show)
|
|
604
|
+
|
|
605
|
+
return RibbonControl.Show(self, show)
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
def GetIcon(self):
|
|
609
|
+
"""
|
|
610
|
+
Get the icon used for the page in the ribbon bar tab area (only displayed if the
|
|
611
|
+
ribbon bar is actually showing icons).
|
|
612
|
+
"""
|
|
613
|
+
|
|
614
|
+
return self._icon
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
def HideScrollButtons(self):
|
|
618
|
+
|
|
619
|
+
self._scroll_amount = 0
|
|
620
|
+
self._scroll_amount_limit = 0
|
|
621
|
+
self.ShowScrollButtons()
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def ShowScrollButtons(self):
|
|
625
|
+
|
|
626
|
+
show_left = True
|
|
627
|
+
show_right = True
|
|
628
|
+
reposition = False
|
|
629
|
+
|
|
630
|
+
if self._scroll_amount == 0:
|
|
631
|
+
show_left = False
|
|
632
|
+
|
|
633
|
+
if self._scroll_amount >= self._scroll_amount_limit:
|
|
634
|
+
show_right = False
|
|
635
|
+
self._scroll_amount = self._scroll_amount_limit
|
|
636
|
+
|
|
637
|
+
self._scroll_buttons_visible = show_left or show_right
|
|
638
|
+
|
|
639
|
+
if show_left:
|
|
640
|
+
if self._scroll_left_btn is None:
|
|
641
|
+
|
|
642
|
+
temp_dc = wx.MemoryDC()
|
|
643
|
+
|
|
644
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
645
|
+
direction = RIBBON_SCROLL_BTN_LEFT
|
|
646
|
+
size = self._art.GetScrollButtonMinimumSize(temp_dc, self.GetParent(), direction)
|
|
647
|
+
size.SetHeight(self.GetSize().GetHeight())
|
|
648
|
+
else:
|
|
649
|
+
direction = RIBBON_SCROLL_BTN_UP
|
|
650
|
+
size = self._art.GetScrollButtonMinimumSize(temp_dc, self.GetParent(), direction)
|
|
651
|
+
size.SetWidth(self.GetSize().GetWidth())
|
|
652
|
+
|
|
653
|
+
self._scroll_left_btn = RibbonPageScrollButton(self, -1, self.GetPosition(), size, direction)
|
|
654
|
+
if not self.IsShown():
|
|
655
|
+
self._scroll_left_btn.Hide()
|
|
656
|
+
|
|
657
|
+
reposition = True
|
|
658
|
+
|
|
659
|
+
else:
|
|
660
|
+
if self._scroll_left_btn is not None:
|
|
661
|
+
self._scroll_left_btn.Destroy()
|
|
662
|
+
self._scroll_left_btn = None
|
|
663
|
+
reposition = True
|
|
664
|
+
|
|
665
|
+
if show_right:
|
|
666
|
+
if self._scroll_right_btn is None:
|
|
667
|
+
|
|
668
|
+
temp_dc = wx.MemoryDC()
|
|
669
|
+
|
|
670
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
671
|
+
direction = RIBBON_SCROLL_BTN_RIGHT
|
|
672
|
+
size = self._art.GetScrollButtonMinimumSize(temp_dc, self.GetParent(), direction)
|
|
673
|
+
size.SetHeight(self.GetSize().GetHeight())
|
|
674
|
+
else:
|
|
675
|
+
direction = RIBBON_SCROLL_BTN_DOWN
|
|
676
|
+
size = self._art.GetScrollButtonMinimumSize(temp_dc, self.GetParent(), direction)
|
|
677
|
+
size.SetWidth(self.GetSize().GetWidth())
|
|
678
|
+
|
|
679
|
+
initial_pos = self.GetPosition() + wx.Point(*self.GetSize()) - wx.Point(*size)
|
|
680
|
+
self._scroll_right_btn = RibbonPageScrollButton(self, -1, initial_pos, size, direction)
|
|
681
|
+
if not self.IsShown():
|
|
682
|
+
self._scroll_right_btn.Hide()
|
|
683
|
+
|
|
684
|
+
reposition = True
|
|
685
|
+
|
|
686
|
+
else:
|
|
687
|
+
if self._scroll_right_btn is not None:
|
|
688
|
+
self._scroll_right_btn.Destroy()
|
|
689
|
+
self._scroll_right_btn = None
|
|
690
|
+
reposition = True
|
|
691
|
+
|
|
692
|
+
if reposition:
|
|
693
|
+
self.GetParent().RepositionPage(self)
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
def ExpandPanels(self, direction, maximum_amount):
|
|
697
|
+
|
|
698
|
+
expanded_something = False
|
|
699
|
+
|
|
700
|
+
while maximum_amount > 0:
|
|
701
|
+
smallest_size = 10000
|
|
702
|
+
smallest_panel = None
|
|
703
|
+
|
|
704
|
+
for panel in self.GetChildren():
|
|
705
|
+
|
|
706
|
+
if not isinstance(panel, RibbonPanel):
|
|
707
|
+
continue
|
|
708
|
+
|
|
709
|
+
if panel.IsSizingContinuous():
|
|
710
|
+
size = GetSizeInOrientation(panel.GetSize(), direction)
|
|
711
|
+
if size < smallest_size:
|
|
712
|
+
smallest_size = size
|
|
713
|
+
smallest_panel = panel
|
|
714
|
+
else:
|
|
715
|
+
current = panel.GetSize()
|
|
716
|
+
size = GetSizeInOrientation(current, direction)
|
|
717
|
+
if size < smallest_size:
|
|
718
|
+
larger = panel.GetNextLargerSize(direction)
|
|
719
|
+
if larger != current and GetSizeInOrientation(larger, direction) > size:
|
|
720
|
+
smallest_size = size
|
|
721
|
+
smallest_panel = panel
|
|
722
|
+
|
|
723
|
+
if smallest_panel != None:
|
|
724
|
+
if smallest_panel.IsSizingContinuous():
|
|
725
|
+
size = wx.Size(*smallest_panel.GetSize())
|
|
726
|
+
amount = maximum_amount
|
|
727
|
+
|
|
728
|
+
if amount > 32:
|
|
729
|
+
# For "large" growth, grow self panel a bit, and then re-allocate
|
|
730
|
+
# the remainder (which may come to self panel again anyway)
|
|
731
|
+
amount = 32
|
|
732
|
+
|
|
733
|
+
if direction & wx.HORIZONTAL:
|
|
734
|
+
size.x += amount
|
|
735
|
+
|
|
736
|
+
if direction & wx.VERTICAL:
|
|
737
|
+
size.y += amount
|
|
738
|
+
|
|
739
|
+
smallest_panel.SetSize(size)
|
|
740
|
+
maximum_amount -= amount
|
|
741
|
+
self._collapse_stack.append(smallest_panel)
|
|
742
|
+
expanded_something = True
|
|
743
|
+
|
|
744
|
+
else:
|
|
745
|
+
current = smallest_panel.GetSize()
|
|
746
|
+
larger = smallest_panel.GetNextLargerSize(direction)
|
|
747
|
+
delta = larger - current
|
|
748
|
+
if GetSizeInOrientation(delta, direction) <= maximum_amount:
|
|
749
|
+
smallest_panel.SetSize(wx.Size(*larger))
|
|
750
|
+
maximum_amount -= GetSizeInOrientation(delta, direction)
|
|
751
|
+
self._collapse_stack.append(smallest_panel)
|
|
752
|
+
expanded_something = True
|
|
753
|
+
else:
|
|
754
|
+
break
|
|
755
|
+
|
|
756
|
+
else:
|
|
757
|
+
break
|
|
758
|
+
|
|
759
|
+
if expanded_something:
|
|
760
|
+
self.Refresh()
|
|
761
|
+
return True
|
|
762
|
+
else:
|
|
763
|
+
return False
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
def CollapsePanels(self, direction, minimum_amount):
|
|
767
|
+
|
|
768
|
+
collapsed_something = False
|
|
769
|
+
|
|
770
|
+
while minimum_amount > 0:
|
|
771
|
+
largest_size = 0
|
|
772
|
+
largest_panel = None
|
|
773
|
+
|
|
774
|
+
if self._collapse_stack:
|
|
775
|
+
# For a more consistent panel layout, try to collapse panels which
|
|
776
|
+
# were recently expanded.
|
|
777
|
+
largest_panel = self._collapse_stack[-1]
|
|
778
|
+
self._collapse_stack.pop(len(self._collapse_stack)-1)
|
|
779
|
+
else:
|
|
780
|
+
for panel in self.GetChildren():
|
|
781
|
+
if not isinstance(panel, RibbonPanel):
|
|
782
|
+
continue
|
|
783
|
+
|
|
784
|
+
if panel.IsSizingContinuous():
|
|
785
|
+
size = GetSizeInOrientation(panel.GetSize(), direction)
|
|
786
|
+
if size > largest_size:
|
|
787
|
+
largest_size = size
|
|
788
|
+
largest_panel = panel
|
|
789
|
+
else:
|
|
790
|
+
current = panel.GetSize()
|
|
791
|
+
size = GetSizeInOrientation(current, direction)
|
|
792
|
+
if size > largest_size:
|
|
793
|
+
smaller = panel.GetNextSmallerSize(direction)
|
|
794
|
+
if smaller != current and GetSizeInOrientation(smaller, direction) < size:
|
|
795
|
+
largest_size = size
|
|
796
|
+
largest_panel = panel
|
|
797
|
+
|
|
798
|
+
if largest_panel is not None:
|
|
799
|
+
if largest_panel.IsSizingContinuous():
|
|
800
|
+
size = largest_panel.GetSize()
|
|
801
|
+
amount = minimum_amount
|
|
802
|
+
|
|
803
|
+
if amount > 32:
|
|
804
|
+
# For "large" contraction, reduce self panel a bit, and
|
|
805
|
+
# then re-allocate the remainder of the quota (which may
|
|
806
|
+
# come to this panel again anyway)
|
|
807
|
+
amount = 32
|
|
808
|
+
|
|
809
|
+
if direction & wx.HORIZONTAL:
|
|
810
|
+
size.x -= amount
|
|
811
|
+
|
|
812
|
+
if direction & wx.VERTICAL:
|
|
813
|
+
size.y -= amount
|
|
814
|
+
|
|
815
|
+
largest_panel.SetSize(size)
|
|
816
|
+
minimum_amount -= amount
|
|
817
|
+
collapsed_something = True
|
|
818
|
+
|
|
819
|
+
else:
|
|
820
|
+
current = largest_panel.GetSize()
|
|
821
|
+
smaller = largest_panel.GetNextSmallerSize(direction)
|
|
822
|
+
delta = current - smaller
|
|
823
|
+
largest_panel.SetSize(smaller)
|
|
824
|
+
minimum_amount -= GetSizeInOrientation(delta, direction)
|
|
825
|
+
collapsed_something = True
|
|
826
|
+
|
|
827
|
+
else:
|
|
828
|
+
break
|
|
829
|
+
|
|
830
|
+
if collapsed_something:
|
|
831
|
+
self.Refresh()
|
|
832
|
+
return True
|
|
833
|
+
else:
|
|
834
|
+
return False
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
def DismissExpandedPanel(self):
|
|
838
|
+
"""
|
|
839
|
+
Dismiss the current externally expanded panel, if there is one.
|
|
840
|
+
|
|
841
|
+
When a ribbon panel automatically minimises, it can be externally expanded into
|
|
842
|
+
a floating window. When the user clicks a button in such a panel, the panel
|
|
843
|
+
should generally re-minimise. Event handlers for buttons on ribbon panels should
|
|
844
|
+
call this method to achieve this behaviour.
|
|
845
|
+
|
|
846
|
+
:returns: ``True`` if a panel was minimised, ``False`` otherwise.
|
|
847
|
+
"""
|
|
848
|
+
|
|
849
|
+
for panel in self.GetChildren():
|
|
850
|
+
if not isinstance(panel, RibbonPanel):
|
|
851
|
+
continue
|
|
852
|
+
|
|
853
|
+
if panel.GetExpandedPanel() is not None:
|
|
854
|
+
return panel.HideExpanded()
|
|
855
|
+
|
|
856
|
+
return False
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
def GetMinSize(self):
|
|
860
|
+
"""
|
|
861
|
+
Returns the minimum size of the window, an indication to the sizer layout mechanism
|
|
862
|
+
that this is the minimum required size.
|
|
863
|
+
|
|
864
|
+
This method normally just returns the value set by `SetMinSize`, but it can be overridden
|
|
865
|
+
to do the calculation on demand.
|
|
866
|
+
"""
|
|
867
|
+
|
|
868
|
+
minSize = wx.Size(-1, -1)
|
|
869
|
+
|
|
870
|
+
for child in self.GetChildren():
|
|
871
|
+
child_min = child.GetMinSize()
|
|
872
|
+
minSize.x = max(minSize.x, child_min.x)
|
|
873
|
+
minSize.y = max(minSize.y, child_min.y)
|
|
874
|
+
|
|
875
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
876
|
+
minSize.x = -1
|
|
877
|
+
if minSize.y != -1:
|
|
878
|
+
minSize.y += self._art.GetMetric(RIBBON_ART_PAGE_BORDER_TOP_SIZE) + self._art.GetMetric(RIBBON_ART_PAGE_BORDER_BOTTOM_SIZE)
|
|
879
|
+
|
|
880
|
+
else:
|
|
881
|
+
if minSize.x != -1:
|
|
882
|
+
minSize.x += self._art.GetMetric(RIBBON_ART_PAGE_BORDER_LEFT_SIZE) + self._art.GetMetric(RIBBON_ART_PAGE_BORDER_RIGHT_SIZE)
|
|
883
|
+
|
|
884
|
+
minSize.y = -1
|
|
885
|
+
|
|
886
|
+
return minSize
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
def DoGetBestSize(self):
|
|
890
|
+
"""
|
|
891
|
+
Gets the size which best suits the window: for a control, it would be the
|
|
892
|
+
minimal size which doesn't truncate the control, for a panel - the same size
|
|
893
|
+
as it would have after a call to `Fit()`.
|
|
894
|
+
|
|
895
|
+
:return: An instance of :class:`wx.Size`.
|
|
896
|
+
|
|
897
|
+
:note: Overridden from :class:`wx.Control`.
|
|
898
|
+
"""
|
|
899
|
+
|
|
900
|
+
best = wx.Size(0, 0)
|
|
901
|
+
count = 0
|
|
902
|
+
|
|
903
|
+
if self.GetMajorAxis() == wx.HORIZONTAL:
|
|
904
|
+
best.y = -1
|
|
905
|
+
|
|
906
|
+
for child in self.GetChildren():
|
|
907
|
+
child_best = child.GetBestSize()
|
|
908
|
+
if child_best.x != -1:
|
|
909
|
+
best.IncBy(child_best.x, 0)
|
|
910
|
+
|
|
911
|
+
best.y = max(best.y, child_best.y)
|
|
912
|
+
count += 1
|
|
913
|
+
|
|
914
|
+
if count > 1:
|
|
915
|
+
best.IncBy((count - 1) * self._art.GetMetric(RIBBON_ART_PANEL_X_SEPARATION_SIZE), 0)
|
|
916
|
+
|
|
917
|
+
else:
|
|
918
|
+
best.x = -1
|
|
919
|
+
|
|
920
|
+
for child in self.GetChildren():
|
|
921
|
+
child_best = child.GetBestSize()
|
|
922
|
+
best.x = max(best.x, child_best.x)
|
|
923
|
+
|
|
924
|
+
if child_best.y != -1:
|
|
925
|
+
best.IncBy(0, child_best.y)
|
|
926
|
+
|
|
927
|
+
count += 1
|
|
928
|
+
|
|
929
|
+
if count > 1:
|
|
930
|
+
best.IncBy(0, (count - 1) * self._art.GetMetric(RIBBON_ART_PANEL_Y_SEPARATION_SIZE))
|
|
931
|
+
|
|
932
|
+
if best.x != -1:
|
|
933
|
+
best.x += self._art.GetMetric(RIBBON_ART_PAGE_BORDER_LEFT_SIZE) + self._art.GetMetric(RIBBON_ART_PAGE_BORDER_RIGHT_SIZE)
|
|
934
|
+
|
|
935
|
+
if best.y != -1:
|
|
936
|
+
best.y += self._art.GetMetric(RIBBON_ART_PAGE_BORDER_TOP_SIZE) + self._art.GetMetric(RIBBON_ART_PAGE_BORDER_BOTTOM_SIZE)
|
|
937
|
+
|
|
938
|
+
return best
|
|
939
|
+
|
|
940
|
+
|
|
941
|
+
def GetDefaultBorder(self):
|
|
942
|
+
""" Returns the default border style for :class:`RibbonPage`. """
|
|
943
|
+
|
|
944
|
+
return wx.BORDER_NONE
|
|
945
|
+
|
|
946
|
+
|