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/agw/toasterbox.py
ADDED
|
@@ -0,0 +1,1327 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------- #
|
|
2
|
+
# TOASTERBOX wxPython IMPLEMENTATION
|
|
3
|
+
# Ported And Enhanced From wxWidgets Contribution (Aj Bommarito) By:
|
|
4
|
+
#
|
|
5
|
+
# Andrea Gavana, @ 16 September 2005
|
|
6
|
+
# Latest Revision: 27 Dec 2012, 21.00 GMT
|
|
7
|
+
#
|
|
8
|
+
#
|
|
9
|
+
# TODO/Caveats List
|
|
10
|
+
#
|
|
11
|
+
# 1. Any Idea?
|
|
12
|
+
#
|
|
13
|
+
#
|
|
14
|
+
# For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please
|
|
15
|
+
# Write To Me At:
|
|
16
|
+
#
|
|
17
|
+
# andrea.gavana@gmail.com
|
|
18
|
+
# andrea.gavana@maerskoil.com
|
|
19
|
+
#
|
|
20
|
+
# Or, Obviously, To The wxPython Mailing List!!!
|
|
21
|
+
#
|
|
22
|
+
# Tags: phoenix-port, documented, unittest, py3-port
|
|
23
|
+
#
|
|
24
|
+
# End Of Comments
|
|
25
|
+
# --------------------------------------------------------------------------- #
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
:class:`~wx.lib.agw.toasterbox.ToasterBox` is a cross-platform widget to make the creation of MSN style "toaster"
|
|
30
|
+
popups easier.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Description
|
|
34
|
+
===========
|
|
35
|
+
|
|
36
|
+
ToasterBox is a cross-platform widget to make the creation of MSN style "toaster"
|
|
37
|
+
popups easier. The syntax is really easy especially if you are familiar with the
|
|
38
|
+
syntax of wxPython.
|
|
39
|
+
|
|
40
|
+
It has 2 main styles:
|
|
41
|
+
|
|
42
|
+
- ``TB_SIMPLE``: using this style, you will be able to specify a background image for
|
|
43
|
+
ToasterBox, text properties as text colour, font and label;
|
|
44
|
+
|
|
45
|
+
- ``TB_COMPLEX``: this style will allow you to put almost any control inside a
|
|
46
|
+
ToasterBox. You can add a panel in which you can put all the controls you like.
|
|
47
|
+
|
|
48
|
+
Both styles support the setting of ToasterBox position (on screen coordinates),
|
|
49
|
+
size, the time after which the ToasterBox is destroyed (linger), and the scroll
|
|
50
|
+
speed of ToasterBox.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
Usage
|
|
54
|
+
=====
|
|
55
|
+
|
|
56
|
+
Usage example::
|
|
57
|
+
|
|
58
|
+
import wx
|
|
59
|
+
import wx.lib.agw.toasterbox as TB
|
|
60
|
+
|
|
61
|
+
class MyFrame(wx.Frame):
|
|
62
|
+
|
|
63
|
+
def __init__(self, parent):
|
|
64
|
+
|
|
65
|
+
wx.Frame.__init__(self, parent, -1, "ToasterBox Demo")
|
|
66
|
+
|
|
67
|
+
toaster = TB.ToasterBox(self, tbstyle=TB.TB_COMPLEX)
|
|
68
|
+
toaster.SetPopupPauseTime(3000)
|
|
69
|
+
|
|
70
|
+
tbpanel = toaster.GetToasterBoxWindow()
|
|
71
|
+
panel = wx.Panel(tbpanel, -1)
|
|
72
|
+
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
73
|
+
|
|
74
|
+
button = wx.Button(panel, wx.ID_ANY, "Simple button")
|
|
75
|
+
sizer.Add(button, 0, wx.EXPAND)
|
|
76
|
+
|
|
77
|
+
panel.SetSizer(sizer)
|
|
78
|
+
toaster.AddPanel(panel)
|
|
79
|
+
|
|
80
|
+
wx.CallLater(1000, toaster.Play)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# our normal wxApp-derived class, as usual
|
|
84
|
+
|
|
85
|
+
app = wx.App(0)
|
|
86
|
+
|
|
87
|
+
frame = MyFrame(None)
|
|
88
|
+
app.SetTopWindow(frame)
|
|
89
|
+
frame.Show()
|
|
90
|
+
|
|
91
|
+
app.MainLoop()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
Supported Platforms
|
|
96
|
+
===================
|
|
97
|
+
|
|
98
|
+
ToasterBox has been tested on the following platforms:
|
|
99
|
+
|
|
100
|
+
- Windows (verified on Windows XP, 2000)
|
|
101
|
+
- Linux
|
|
102
|
+
- Mac
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
Window Styles
|
|
106
|
+
=============
|
|
107
|
+
|
|
108
|
+
This class supports the following window styles:
|
|
109
|
+
|
|
110
|
+
==================== =========== ==================================================
|
|
111
|
+
Window Styles Hex Value Description
|
|
112
|
+
==================== =========== ==================================================
|
|
113
|
+
``TB_SIMPLE`` 0x1 A simple `ToasterBox`, with background image and text customization can be created.
|
|
114
|
+
``TB_ONTIME`` 0x1 `ToasterBox` will close after a specified amount of time.
|
|
115
|
+
``TB_COMPLEX`` 0x2 ToasterBoxes with different degree of complexity can be created. You can add as many controls as you want, provided that you call the :meth:`~ToasterBox.AddPanel` method and pass to it a dummy frame and a :class:`Panel`. See the demo for details.
|
|
116
|
+
``TB_ONCLICK`` 0x2 `ToasterBox` can be closed by clicking anywhere on the `ToasterBox` frame.
|
|
117
|
+
``TB_DEFAULT_STYLE`` 0x2008002 Default window style for `ToasterBox`, with no caption nor close box.
|
|
118
|
+
``TB_CAPTION`` 0x22009806 `ToasterBox` will have a caption, with the possibility to set a title for the `ToasterBox` frame, and a close box.
|
|
119
|
+
==================== =========== ==================================================
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
Events Processing
|
|
123
|
+
=================
|
|
124
|
+
|
|
125
|
+
`No custom events are available for this class.`
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
License And Version
|
|
129
|
+
===================
|
|
130
|
+
|
|
131
|
+
ToasterBox is distributed under the wxPython license.
|
|
132
|
+
|
|
133
|
+
Latest revision: Andrea Gavana @ 27 Dec 2012, 21.00 GMT
|
|
134
|
+
|
|
135
|
+
Version 0.3
|
|
136
|
+
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
import textwrap
|
|
140
|
+
import time
|
|
141
|
+
import wx
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
# Define Window List, We Use It Globally
|
|
145
|
+
winlist = []
|
|
146
|
+
""" Globally defined window list. """
|
|
147
|
+
|
|
148
|
+
TB_SIMPLE = 1
|
|
149
|
+
""" A simple ToasterBox, with background image and text customization can be created. """
|
|
150
|
+
TB_COMPLEX = 2
|
|
151
|
+
""" ToasterBoxes with different degree of complexity can be created. You can add as many controls as you want, provided that you call the AddPanel() method and pass to it a dummy frame and a wx.Panel. See the demo for details. """
|
|
152
|
+
TB_DEFAULT_STYLE = wx.SIMPLE_BORDER | wx.STAY_ON_TOP | wx.FRAME_NO_TASKBAR
|
|
153
|
+
""" Default window style for `ToasterBox`, with no caption nor close box. """
|
|
154
|
+
TB_CAPTION = TB_DEFAULT_STYLE | wx.CAPTION | wx.SYSTEM_MENU | wx.CLOSE_BOX | wx.FRAME_NO_TASKBAR
|
|
155
|
+
""" `ToasterBox` will have a caption, with the possibility to set a title for the `ToasterBox` frame, and a close box. """
|
|
156
|
+
TB_ONTIME = 1
|
|
157
|
+
""" `ToasterBox` will close after a specified amount of time. """
|
|
158
|
+
TB_ONCLICK = 2
|
|
159
|
+
""" `ToasterBox` can be closed by clicking anywhere on the `ToasterBox` frame. """
|
|
160
|
+
|
|
161
|
+
# scroll from up to down
|
|
162
|
+
TB_SCR_TYPE_UD = 1
|
|
163
|
+
""" Scroll from up to down. """
|
|
164
|
+
# scroll from down to up
|
|
165
|
+
TB_SCR_TYPE_DU = 2
|
|
166
|
+
""" Scroll from down to up. """
|
|
167
|
+
# fade in/out
|
|
168
|
+
TB_SCR_TYPE_FADE = 4
|
|
169
|
+
""" Fade in and out. """
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# ------------------------------------------------------------------------------ #
|
|
173
|
+
# Class ToasterBox
|
|
174
|
+
# Main Class Implementation. It Is Basically A wx.Timer. It Creates And
|
|
175
|
+
# Displays Popups And Handles The "Stacking".
|
|
176
|
+
# ------------------------------------------------------------------------------ #
|
|
177
|
+
|
|
178
|
+
class ToasterBox(wx.Timer):
|
|
179
|
+
"""
|
|
180
|
+
ToasterBox is a cross-platform widget to make the creation of MSN style "toaster"
|
|
181
|
+
popups easier.
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
def __init__(self, parent, tbstyle=TB_SIMPLE, windowstyle=TB_DEFAULT_STYLE,
|
|
185
|
+
closingstyle=TB_ONTIME, scrollType=TB_SCR_TYPE_DU):
|
|
186
|
+
"""
|
|
187
|
+
Default class constructor.
|
|
188
|
+
|
|
189
|
+
:param `parent`: the window parent;
|
|
190
|
+
:param `tbstyle`: the :class:`ToasterBox` main style. Can be one of the following
|
|
191
|
+
bits:
|
|
192
|
+
|
|
193
|
+
====================== ======= ================================
|
|
194
|
+
`ToasterBox` Style Value Description
|
|
195
|
+
====================== ======= ================================
|
|
196
|
+
``TB_SIMPLE`` 0x1 A simple :class:`ToasterBox`, with background image and text customization can be created
|
|
197
|
+
``TB_COMPLEX`` 0x2 `ToasterBoxes` with different degree of complexity can be created. You can add as many controls as you want, provided that you call the :meth:`~ToasterBox.AddPanel` method and pass to it a dummy frame and a :class:`Panel`.
|
|
198
|
+
====================== ======= ================================
|
|
199
|
+
|
|
200
|
+
:param `windowstyle`: this parameter influences the visual appearance of
|
|
201
|
+
:class:`ToasterBox`, and can be one of the following styles:
|
|
202
|
+
|
|
203
|
+
====================== ========== ================================
|
|
204
|
+
Window Style Hex Value Description
|
|
205
|
+
====================== ========== ================================
|
|
206
|
+
``TB_DEFAULT_STYLE`` 0x2008002 Default window style for :class:`ToasterBox`, with no caption nor close box.
|
|
207
|
+
``TB_CAPTION`` 0x22009806 :class:`ToasterBox` will have a caption, with the possibility to set a title for the :class:`ToasterBox` frame, and a close box.
|
|
208
|
+
====================== ========== ================================
|
|
209
|
+
|
|
210
|
+
:param `closingstyle`: the closing style for :class:`ToasterBox`. Can be one of the
|
|
211
|
+
following bits:
|
|
212
|
+
|
|
213
|
+
==================== =========== ==================================================
|
|
214
|
+
Closing Styles Hex Value Description
|
|
215
|
+
==================== =========== ==================================================
|
|
216
|
+
``TB_ONTIME`` 0x1 :class:`ToasterBox` will close after a specified amount of time.
|
|
217
|
+
``TB_ONCLICK`` 0x2 :class:`ToasterBox` can be closed by clicking anywhere on the :class:`ToasterBox` frame.
|
|
218
|
+
==================== =========== ==================================================
|
|
219
|
+
|
|
220
|
+
:param `scrollType`: the scrolling direction for :class:`ToasterBox`. Can be one of the
|
|
221
|
+
following bits:
|
|
222
|
+
|
|
223
|
+
==================== =========== ==================================================
|
|
224
|
+
Scroll Styles Hex Value Description
|
|
225
|
+
==================== =========== ==================================================
|
|
226
|
+
``TB_SCR_TYPE_UD`` 0x1 :class:`ToasterBox` will scroll from up to down
|
|
227
|
+
``TB_SCR_TYPE_DU`` 0x2 :class:`ToasterBox` will scroll from down to up
|
|
228
|
+
``TB_SCR_TYPE_FADE`` 0x4 :class:`ToasterBox` will fade in/out (without scrolling).
|
|
229
|
+
==================== =========== ==================================================
|
|
230
|
+
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
self._parent = parent
|
|
234
|
+
self._sleeptime = 10
|
|
235
|
+
self._pausetime = 1700
|
|
236
|
+
self._popuptext = "default"
|
|
237
|
+
self._popupposition = wx.Point(100,100)
|
|
238
|
+
self._popuptop = wx.Point(0,0)
|
|
239
|
+
self._popupsize = wx.Size(150, 170)
|
|
240
|
+
self._usefocus = True
|
|
241
|
+
self._originalfocus = wx.Window.FindFocus()
|
|
242
|
+
|
|
243
|
+
self._backgroundcolour = wx.WHITE
|
|
244
|
+
self._foregroundcolour = wx.BLACK
|
|
245
|
+
self._textfont = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "Verdana")
|
|
246
|
+
|
|
247
|
+
self._bitmap = None
|
|
248
|
+
|
|
249
|
+
self._tbstyle = tbstyle
|
|
250
|
+
self._windowstyle = windowstyle
|
|
251
|
+
self._closingstyle = closingstyle
|
|
252
|
+
self._scrollType = scrollType
|
|
253
|
+
|
|
254
|
+
self._panel = None
|
|
255
|
+
|
|
256
|
+
self._bottomright = wx.Point(wx.GetDisplaySize().GetWidth(),
|
|
257
|
+
wx.GetDisplaySize().GetHeight())
|
|
258
|
+
|
|
259
|
+
if parent is not None:
|
|
260
|
+
parent.Bind(wx.EVT_ICONIZE, lambda evt: [w.Hide() for w in winlist])
|
|
261
|
+
self._moveTimer = wx.Timer(parent, -1)
|
|
262
|
+
parent.Bind(wx.EVT_TIMER, self.OnMoveTimer, self._moveTimer)
|
|
263
|
+
|
|
264
|
+
self._tb = ToasterBoxWindow(self._parent, self, self._tbstyle, self._windowstyle,
|
|
265
|
+
self._closingstyle, scrollType=self._scrollType)
|
|
266
|
+
|
|
267
|
+
def SetPopupPosition(self, pos):
|
|
268
|
+
"""
|
|
269
|
+
Sets the :class:`ToasterBox` position on screen.
|
|
270
|
+
|
|
271
|
+
:param `pos`: the widget position, an instance of :class:`wx.Point`.
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
self._popupposition = pos
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def SetPopupPositionByInt(self, pos):
|
|
278
|
+
"""
|
|
279
|
+
Sets the :class:`ToasterBox` position on screen, at one of the screen corners.
|
|
280
|
+
|
|
281
|
+
:param `pos`: an integer specifying the screen corner, namely:
|
|
282
|
+
|
|
283
|
+
============= ========================================
|
|
284
|
+
Corner Number Position
|
|
285
|
+
============= ========================================
|
|
286
|
+
0 Top left screen corner
|
|
287
|
+
1 Top right screen corner
|
|
288
|
+
2 Bottom left screen corner
|
|
289
|
+
3 Bottom right screen corner
|
|
290
|
+
============= ========================================
|
|
291
|
+
|
|
292
|
+
"""
|
|
293
|
+
|
|
294
|
+
w, h = wx.GetDisplaySize()
|
|
295
|
+
self._bottomright = wx.Point(w, h)
|
|
296
|
+
|
|
297
|
+
# top left
|
|
298
|
+
if pos == 0:
|
|
299
|
+
popupposition = wx.Point(0,0)
|
|
300
|
+
# top right
|
|
301
|
+
elif pos == 1:
|
|
302
|
+
popupposition = wx.Point(w - self._popupsize[0], 0)
|
|
303
|
+
# bottom left
|
|
304
|
+
elif pos == 2:
|
|
305
|
+
popupposition = wx.Point(0, h - self._popupsize[1])
|
|
306
|
+
# bottom right
|
|
307
|
+
elif pos == 3:
|
|
308
|
+
popupposition = wx.Point(self._bottomright.x - self._popupsize[0],
|
|
309
|
+
self._bottomright.y - self._popupsize[1])
|
|
310
|
+
|
|
311
|
+
self._bottomright = wx.Point(popupposition.x + self._popupsize[0],
|
|
312
|
+
popupposition.y + self._popupsize[1])
|
|
313
|
+
|
|
314
|
+
self._popupposition = popupposition
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def CenterOnParent(self, direction=wx.BOTH):
|
|
318
|
+
"""
|
|
319
|
+
Centres the window on its parent (if any). If the :class:`ToasterBox` parent is ``None``,
|
|
320
|
+
it calls :meth:`~ToasterBox.CenterOnScreen`.
|
|
321
|
+
|
|
322
|
+
:param `direction`: specifies the direction for the centering. May be ``wx.HORIZONTAL``,
|
|
323
|
+
``wx.VERTICAL`` or ``wx.BOTH``.
|
|
324
|
+
|
|
325
|
+
:note: This methods provides for a way to center :class:`ToasterBox` over their parents instead of the
|
|
326
|
+
entire screen. If there is no parent, then behaviour is the same as :meth:`~ToasterBox.CenterOnScreen`.
|
|
327
|
+
|
|
328
|
+
:see: :meth:`~ToasterBox.CenterOnScreen`.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
if not self._parent:
|
|
332
|
+
self.CenterOnScreen(direction)
|
|
333
|
+
return
|
|
334
|
+
|
|
335
|
+
parent = self._parent
|
|
336
|
+
screenrect = parent.GetScreenRect()
|
|
337
|
+
toast_width, toast_height = self._popupsize
|
|
338
|
+
x, y = screenrect.GetX(), screenrect.GetY()
|
|
339
|
+
width, height = screenrect.GetWidth(), screenrect.GetHeight()
|
|
340
|
+
|
|
341
|
+
if direction == wx.VERTICAL:
|
|
342
|
+
pos = wx.Point(x, (y + (height/2) - (toast_height/2)))
|
|
343
|
+
elif direction == wx.HORIZONTAL:
|
|
344
|
+
pos = wx.Point((x + (width/2) - (toast_width/2)), y)
|
|
345
|
+
else:
|
|
346
|
+
pos = wx.Point((x + (width/2) - (toast_width/2)), (y + (height/2) - (toast_height/2)))
|
|
347
|
+
|
|
348
|
+
self.SetPopupPosition(pos)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
CentreOnParent = CenterOnParent
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def CenterOnScreen(self, direction=wx.BOTH):
|
|
355
|
+
"""
|
|
356
|
+
Centres the :class:`ToasterBox` on screen.
|
|
357
|
+
|
|
358
|
+
:param `direction`: specifies the direction for the centering. May be ``wx.HORIZONTAL``,
|
|
359
|
+
``wx.VERTICAL`` or ``wx.BOTH``.
|
|
360
|
+
|
|
361
|
+
:see: :meth:`~ToasterBox.CenterOnParent`.
|
|
362
|
+
"""
|
|
363
|
+
|
|
364
|
+
screenSize = wx.GetDisplaySize()
|
|
365
|
+
toast_width, toast_height = self._popupsize
|
|
366
|
+
width, height = screenSize.GetWidth(), screenSize.GetHeight()
|
|
367
|
+
|
|
368
|
+
if direction == wx.VERTICAL:
|
|
369
|
+
pos = wx.Point(0, (height/2) - (toast_height/2))
|
|
370
|
+
elif direction == wx.HORIZONTAL:
|
|
371
|
+
pos = wx.Point((width/2) - (toast_width/2), 0)
|
|
372
|
+
else:
|
|
373
|
+
pos = wx.Point((width/2) - (toast_width/2), (height/2) - (toast_height/2))
|
|
374
|
+
|
|
375
|
+
self.SetPopupPosition(pos)
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
CentreOnScreen = CenterOnScreen
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def SetPopupBackgroundColour(self, colour=None):
|
|
382
|
+
"""
|
|
383
|
+
Sets the :class:`ToasterBox` background colour.
|
|
384
|
+
|
|
385
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
386
|
+
the background colour will be white.
|
|
387
|
+
|
|
388
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
389
|
+
"""
|
|
390
|
+
|
|
391
|
+
if colour is None:
|
|
392
|
+
colour = wx.WHITE
|
|
393
|
+
|
|
394
|
+
colour = wx.Colour(colour)
|
|
395
|
+
self._backgroundcolour = colour
|
|
396
|
+
self._tb.SetPopupBackgroundColour(self._backgroundcolour)
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
def SetPopupTextColour(self, colour=None):
|
|
400
|
+
"""
|
|
401
|
+
Sets the :class:`ToasterBox` foreground colour.
|
|
402
|
+
|
|
403
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
404
|
+
the background colour will be black.
|
|
405
|
+
|
|
406
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
407
|
+
"""
|
|
408
|
+
|
|
409
|
+
if colour is None:
|
|
410
|
+
colour = wx.BLACK
|
|
411
|
+
|
|
412
|
+
colour = wx.Colour(colour)
|
|
413
|
+
self._foregroundcolour = colour
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def SetPopupTextFont(self, font=None):
|
|
417
|
+
"""
|
|
418
|
+
Sets the :class:`ToasterBox` text font.
|
|
419
|
+
|
|
420
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
421
|
+
a simple generic font will be generated.
|
|
422
|
+
|
|
423
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
424
|
+
"""
|
|
425
|
+
|
|
426
|
+
if font is None:
|
|
427
|
+
font = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
|
|
428
|
+
|
|
429
|
+
self._textfont = font
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def SetPopupSize(self, size):
|
|
433
|
+
"""
|
|
434
|
+
Sets the :class:`ToasterBox` size.
|
|
435
|
+
|
|
436
|
+
:param `size`: the new control size, an instance of :class:`wx.Size`.
|
|
437
|
+
"""
|
|
438
|
+
|
|
439
|
+
self._popupsize = size
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
def SetPopupPauseTime(self, pausetime):
|
|
443
|
+
"""
|
|
444
|
+
Sets the time after which the :class:`ToasterBox` is destroyed (linger).
|
|
445
|
+
|
|
446
|
+
:param `pausetime`: the delay after which the control is destroyed, in seconds.
|
|
447
|
+
"""
|
|
448
|
+
|
|
449
|
+
self._pausetime = pausetime
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def SetPopupBitmap(self, bitmap=None):
|
|
453
|
+
"""
|
|
454
|
+
Sets the :class:`ToasterBox` background image.
|
|
455
|
+
|
|
456
|
+
:param `bitmap`: a valid :class:`wx.Bitmap` object or filename. If defaulted
|
|
457
|
+
to ``None``, then no background bitmap is used.
|
|
458
|
+
|
|
459
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
460
|
+
"""
|
|
461
|
+
|
|
462
|
+
if bitmap is not None:
|
|
463
|
+
bitmap = wx.Bitmap(bitmap)
|
|
464
|
+
|
|
465
|
+
self._bitmap = bitmap
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
def SetPopupScrollSpeed(self, speed):
|
|
469
|
+
"""
|
|
470
|
+
Sets the :class:`ToasterBox` scroll speed.
|
|
471
|
+
|
|
472
|
+
:param `speed`: it is the pause time (in milliseconds) for every step in the
|
|
473
|
+
`ScrollUp` method.
|
|
474
|
+
"""
|
|
475
|
+
|
|
476
|
+
self._sleeptime = speed
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
def SetPopupText(self, text):
|
|
480
|
+
"""
|
|
481
|
+
Sets the :class:`ToasterBox` text label.
|
|
482
|
+
|
|
483
|
+
:param `text`: the widget label.
|
|
484
|
+
|
|
485
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
486
|
+
"""
|
|
487
|
+
|
|
488
|
+
self._popuptext = text
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
def AddPanel(self, panel):
|
|
492
|
+
"""
|
|
493
|
+
Adds a panel to the :class:`ToasterBox`.
|
|
494
|
+
|
|
495
|
+
:param `panel`: an instance of :class:`wx.Window`.
|
|
496
|
+
|
|
497
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_COMPLEX`` style.
|
|
498
|
+
"""
|
|
499
|
+
|
|
500
|
+
if not self._tbstyle & TB_COMPLEX:
|
|
501
|
+
raise Exception("\nERROR: Panel Can Not Be Added When Using TB_SIMPLE ToasterBox Style")
|
|
502
|
+
|
|
503
|
+
self._panel = panel
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
def Play(self):
|
|
507
|
+
""" Creates the :class:`ToasterBoxWindow`, that does all the job. """
|
|
508
|
+
|
|
509
|
+
# create new window
|
|
510
|
+
self._tb.SetPopupSize((self._popupsize[0], self._popupsize[1]))
|
|
511
|
+
self._tb.SetPopupPosition((self._popupposition[0], self._popupposition[1]))
|
|
512
|
+
self._tb.SetPopupPauseTime(self._pausetime)
|
|
513
|
+
self._tb.SetPopupScrollSpeed(self._sleeptime)
|
|
514
|
+
self._tb.SetUseFocus(self._usefocus, self._originalfocus)
|
|
515
|
+
|
|
516
|
+
if self._tbstyle == TB_SIMPLE:
|
|
517
|
+
self._tb.SetPopupTextColour(self._foregroundcolour)
|
|
518
|
+
self._tb.SetPopupBackgroundColour(self._backgroundcolour)
|
|
519
|
+
self._tb.SetPopupTextFont(self._textfont)
|
|
520
|
+
|
|
521
|
+
if self._bitmap is not None:
|
|
522
|
+
self._tb.SetPopupBitmap(self._bitmap)
|
|
523
|
+
|
|
524
|
+
self._tb.SetPopupText(self._popuptext)
|
|
525
|
+
|
|
526
|
+
if self._tbstyle == TB_COMPLEX:
|
|
527
|
+
if self._panel is not None:
|
|
528
|
+
self._tb.AddPanel(self._panel)
|
|
529
|
+
|
|
530
|
+
# clean up the list
|
|
531
|
+
self.CleanList()
|
|
532
|
+
|
|
533
|
+
# check to see if there is already a window displayed
|
|
534
|
+
# by looking at the linked list
|
|
535
|
+
if len(winlist) > 0:
|
|
536
|
+
# there ARE other windows displayed already
|
|
537
|
+
# reclac where it should display
|
|
538
|
+
self.MoveAbove(self._tb)
|
|
539
|
+
|
|
540
|
+
# shift new window on to the list
|
|
541
|
+
winlist.append(self._tb)
|
|
542
|
+
|
|
543
|
+
if not self._tb.Play():
|
|
544
|
+
# if we didn't show the window properly, remove it from the list
|
|
545
|
+
winlist.remove(winlist[-1])
|
|
546
|
+
# delete the object too
|
|
547
|
+
self._tb.Destroy()
|
|
548
|
+
return
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
def MoveAbove(self, tb):
|
|
552
|
+
"""
|
|
553
|
+
If a :class:`ToasterBox` already exists, move the new one above the existing one.
|
|
554
|
+
|
|
555
|
+
:param `tb`: another instance of :class:`ToasterBox`.
|
|
556
|
+
"""
|
|
557
|
+
|
|
558
|
+
# recalc where to place this popup
|
|
559
|
+
|
|
560
|
+
self._tb.SetPopupPosition((self._popupposition[0], self._popupposition[1] -
|
|
561
|
+
self._popupsize[1]*len(winlist)))
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
def GetToasterBoxWindow(self):
|
|
565
|
+
""" Returns the :class:`ToasterBox` frame. """
|
|
566
|
+
|
|
567
|
+
return self._tb
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
def SetTitle(self, title):
|
|
571
|
+
"""
|
|
572
|
+
Sets the :class:`ToasterBox` title if it was created with ``TB_CAPTION`` window style.
|
|
573
|
+
|
|
574
|
+
:param `title`: the :class:`ToasterBox` caption title.
|
|
575
|
+
"""
|
|
576
|
+
|
|
577
|
+
self._tb.SetTitle(title)
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
def SetUseFocus(self, focus):
|
|
581
|
+
"""
|
|
582
|
+
If `focus` is ``True``, Instructs :class:`ToasterBox` to steal the focus from the
|
|
583
|
+
parent application, otherwise it returns the focus to the original owner.
|
|
584
|
+
|
|
585
|
+
:param `focus`: ``True`` to set the focus on :class:`ToasterBox`, ``False`` to
|
|
586
|
+
return it to the original owner.
|
|
587
|
+
"""
|
|
588
|
+
|
|
589
|
+
self._usefocus = focus
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def GetUseFocus(self):
|
|
593
|
+
""" Returns whether :class:`ToasterBox` will steal the focus from the parent application. """
|
|
594
|
+
|
|
595
|
+
return self._usefocus
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
def Notify(self):
|
|
599
|
+
""" It's time to hide a :class:`ToasterBox`. """
|
|
600
|
+
|
|
601
|
+
if len(winlist) == 0:
|
|
602
|
+
return
|
|
603
|
+
|
|
604
|
+
# clean the window list
|
|
605
|
+
self.CleanList()
|
|
606
|
+
|
|
607
|
+
# figure out how many blanks we have
|
|
608
|
+
try:
|
|
609
|
+
node = winlist[0]
|
|
610
|
+
except:
|
|
611
|
+
return
|
|
612
|
+
|
|
613
|
+
if not node:
|
|
614
|
+
return
|
|
615
|
+
|
|
616
|
+
self._startPos = node.GetPosition()[1]
|
|
617
|
+
self._moveTimer.Start(self._sleeptime)
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
def OnMoveTimer(self, event):
|
|
621
|
+
"""
|
|
622
|
+
Handles the ``wx.EVT_TIMER`` event for :class:`ToasterBox`, moving the new window
|
|
623
|
+
on top of the last one created.
|
|
624
|
+
|
|
625
|
+
:param `event`: a :class:`TimerEvent` event to be processed.
|
|
626
|
+
"""
|
|
627
|
+
|
|
628
|
+
current = self._startPos
|
|
629
|
+
if current >= self._popupposition[1]:
|
|
630
|
+
self._moveTimer.Stop()
|
|
631
|
+
|
|
632
|
+
# move windows to fill in blank space
|
|
633
|
+
|
|
634
|
+
if current > self._popupposition[1]:
|
|
635
|
+
current = self._popupposition[1]
|
|
636
|
+
|
|
637
|
+
# loop through all the windows
|
|
638
|
+
for j in range(0, len(winlist)):
|
|
639
|
+
ourNewHeight = current - (j*self._popupsize[1] - 8)
|
|
640
|
+
tmpTb = winlist[j]
|
|
641
|
+
# reset where the object THINKS its supposed to be
|
|
642
|
+
tmpTb.SetPopupPosition((self._popupposition[0], ourNewHeight))
|
|
643
|
+
# actually move it
|
|
644
|
+
tmpTb.SetSize(self._popupposition[0], ourNewHeight, tmpTb.GetSize().GetWidth(),
|
|
645
|
+
tmpTb.GetSize().GetHeight())
|
|
646
|
+
|
|
647
|
+
self._startPos += 4
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
def CleanList(self):
|
|
651
|
+
""" Cleans the window list, erasing the stack of :class:`ToasterBox` objects. """
|
|
652
|
+
|
|
653
|
+
if len(winlist) == 0:
|
|
654
|
+
return
|
|
655
|
+
|
|
656
|
+
node = winlist[0]
|
|
657
|
+
while node:
|
|
658
|
+
if not node.IsShown():
|
|
659
|
+
winlist.remove(node)
|
|
660
|
+
node.Close()
|
|
661
|
+
try:
|
|
662
|
+
node = winlist[0]
|
|
663
|
+
except:
|
|
664
|
+
node = 0
|
|
665
|
+
else:
|
|
666
|
+
indx = winlist.index(node)
|
|
667
|
+
try:
|
|
668
|
+
node = winlist[indx+1]
|
|
669
|
+
except:
|
|
670
|
+
node = 0
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
# ------------------------------------------------------------------------------ #
|
|
674
|
+
# Class ToasterBoxWindow
|
|
675
|
+
# This Class Does All The Job, By Handling Background Images, Text Properties
|
|
676
|
+
# And Panel Adding. Depending On The Style You Choose, ToasterBoxWindow Will
|
|
677
|
+
# Behave Differently In Order To Handle Widgets Inside It.
|
|
678
|
+
# ------------------------------------------------------------------------------ #
|
|
679
|
+
|
|
680
|
+
class ToasterBoxWindow(wx.Frame):
|
|
681
|
+
"""
|
|
682
|
+
This class does all the job, by handling background images, text properties
|
|
683
|
+
and panel adding. Depending on the style you choose, :class:`ToasterBoxWindow` will
|
|
684
|
+
behave differently in order to handle widgets inside it.
|
|
685
|
+
"""
|
|
686
|
+
|
|
687
|
+
def __init__(self, parent, parent2, tbstyle, windowstyle, closingstyle,
|
|
688
|
+
scrollType=TB_SCR_TYPE_DU):
|
|
689
|
+
"""
|
|
690
|
+
Default class constructor.
|
|
691
|
+
Used internally. Do not call directly this class in your application!
|
|
692
|
+
|
|
693
|
+
:param `parent`: the window parent;
|
|
694
|
+
:param `parent2`: the :class:`ToasterBox` calling this window;
|
|
695
|
+
:param `tbstyle`: the :class:`ToasterBoxWindow` main style. Can be one of the following
|
|
696
|
+
bits:
|
|
697
|
+
|
|
698
|
+
====================== ======= ================================
|
|
699
|
+
`ToasterBox` Style Value Description
|
|
700
|
+
====================== ======= ================================
|
|
701
|
+
``TB_SIMPLE`` 0x1 A simple :class:`ToasterBox`, with background image and text customization can be created
|
|
702
|
+
``TB_COMPLEX`` 0x2 `ToasterBoxes` with different degree of complexity can be created. You can add as many controls as you want, provided that you call the :meth:`~ToasterBoxWindow.AddPanel` method and pass to it a dummy frame and a :class:`Panel`.
|
|
703
|
+
====================== ======= ================================
|
|
704
|
+
|
|
705
|
+
:param `windowstyle`: this parameter influences the visual appearance of
|
|
706
|
+
:class:`ToasterBoxWindow`, and can be one of the following styles:
|
|
707
|
+
|
|
708
|
+
====================== ========== ================================
|
|
709
|
+
Window Style Hex Value Description
|
|
710
|
+
====================== ========== ================================
|
|
711
|
+
``TB_DEFAULT_STYLE`` 0x2008002 Default window style for :class:`ToasterBox`, with no caption nor close box.
|
|
712
|
+
``TB_CAPTION`` 0x22009806 :class:`ToasterBox` will have a caption, with the possibility to set a title for the :class:`ToasterBox` frame, and a close box.
|
|
713
|
+
====================== ========== ================================
|
|
714
|
+
|
|
715
|
+
:param `closingstyle`: the closing style for :class:`ToasterBoxWindow`. Can be one of the
|
|
716
|
+
following bits:
|
|
717
|
+
|
|
718
|
+
==================== =========== ==================================================
|
|
719
|
+
Closing Styles Hex Value Description
|
|
720
|
+
==================== =========== ==================================================
|
|
721
|
+
``TB_ONTIME`` 0x1 :class:`ToasterBox` will close after a specified amount of time.
|
|
722
|
+
``TB_ONCLICK`` 0x2 :class:`ToasterBox` can be closed by clicking anywhere on the :class:`ToasterBox` frame.
|
|
723
|
+
==================== =========== ==================================================
|
|
724
|
+
|
|
725
|
+
:param `scrollType`: the scrolling direction for :class:`ToasterBoxWindow`. Can be one of the
|
|
726
|
+
following bits:
|
|
727
|
+
|
|
728
|
+
==================== =========== ==================================================
|
|
729
|
+
Scroll Styles Hex Value Description
|
|
730
|
+
==================== =========== ==================================================
|
|
731
|
+
``TB_SCR_TYPE_UD`` 0x1 :class:`ToasterBox` will scroll from up to down
|
|
732
|
+
``TB_SCR_TYPE_DU`` 0x2 :class:`ToasterBox` will scroll from down to up
|
|
733
|
+
``TB_SCR_TYPE_FADE`` 0x4 :class:`ToasterBox` will fade in/out (without scrolling).
|
|
734
|
+
==================== =========== ==================================================
|
|
735
|
+
|
|
736
|
+
"""
|
|
737
|
+
|
|
738
|
+
wx.Frame.__init__(self, parent, wx.ID_ANY, "window", wx.DefaultPosition,
|
|
739
|
+
wx.DefaultSize, style=windowstyle | wx.CLIP_CHILDREN)
|
|
740
|
+
|
|
741
|
+
self._starttime = int(time.time())
|
|
742
|
+
self._parent2 = parent2
|
|
743
|
+
self._parent = parent
|
|
744
|
+
self._sleeptime = 10
|
|
745
|
+
self._step = 4
|
|
746
|
+
self._pausetime = 1700
|
|
747
|
+
self._textcolour = wx.BLACK
|
|
748
|
+
self._popuptext = "Change Me!"
|
|
749
|
+
# the size we want the dialog to be
|
|
750
|
+
framesize = wx.Size(150, 170)
|
|
751
|
+
self._count = 1
|
|
752
|
+
self._tbstyle = tbstyle
|
|
753
|
+
self._windowstyle = windowstyle
|
|
754
|
+
self._closingstyle = closingstyle
|
|
755
|
+
self._backgroundcolour = wx.WHITE
|
|
756
|
+
|
|
757
|
+
if tbstyle == TB_COMPLEX:
|
|
758
|
+
self.sizer = wx.BoxSizer(wx.VERTICAL)
|
|
759
|
+
else:
|
|
760
|
+
self._staticbitmap = None
|
|
761
|
+
|
|
762
|
+
if self._windowstyle == TB_CAPTION:
|
|
763
|
+
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
|
764
|
+
self.SetTitle("")
|
|
765
|
+
|
|
766
|
+
if scrollType == TB_SCR_TYPE_FADE and not self.CanSetTransparent():
|
|
767
|
+
import warnings
|
|
768
|
+
warnings.warn("The style ``TB_SCR_TYPE_FADE`` is not supported on this platform.")
|
|
769
|
+
scrollType = TB_SCR_TYPE_DU
|
|
770
|
+
|
|
771
|
+
self._scrollType = scrollType
|
|
772
|
+
|
|
773
|
+
if self._closingstyle & TB_ONCLICK and self._windowstyle != TB_CAPTION:
|
|
774
|
+
self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
|
|
775
|
+
|
|
776
|
+
self._bottomright = wx.Point(wx.GetDisplaySize().GetWidth(),
|
|
777
|
+
wx.GetDisplaySize().GetHeight())
|
|
778
|
+
|
|
779
|
+
self.SetSize(self._bottomright.x, self._bottomright.y,
|
|
780
|
+
framesize.GetWidth(), framesize.GetHeight())
|
|
781
|
+
|
|
782
|
+
self._scrollTimer = wx.Timer(self, -1)
|
|
783
|
+
self._alphaTimer = wx.Timer(self, -1)
|
|
784
|
+
|
|
785
|
+
self.Bind(wx.EVT_TIMER, self.OnScrollTimer, self._scrollTimer)
|
|
786
|
+
self.Bind(wx.EVT_TIMER, self.AlphaCycle, self._alphaTimer)
|
|
787
|
+
|
|
788
|
+
if not self._tbstyle & TB_COMPLEX:
|
|
789
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
790
|
+
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
def OnClose(self, event):
|
|
794
|
+
"""
|
|
795
|
+
Handles the ``wx.EVT_CLOSE`` event for :class:`ToasterBoxWindow`.
|
|
796
|
+
|
|
797
|
+
:param `event`: a :class:`CloseEvent` event to be processed.
|
|
798
|
+
"""
|
|
799
|
+
|
|
800
|
+
self.NotifyTimer(None)
|
|
801
|
+
event.Skip()
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
def OnMouseDown(self, event):
|
|
805
|
+
"""
|
|
806
|
+
Handles the ``wx.EVT_LEFT_DOWN`` event for :class:`ToasterBoxWindow`.
|
|
807
|
+
|
|
808
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
809
|
+
"""
|
|
810
|
+
|
|
811
|
+
self.NotifyTimer(None)
|
|
812
|
+
event.Skip()
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
def SetPopupBitmap(self, bitmap=None):
|
|
816
|
+
"""
|
|
817
|
+
Sets the :class:`ToasterBox` background image.
|
|
818
|
+
|
|
819
|
+
:param `bitmap`: a valid :class:`wx.Bitmap` object. If defaulted to ``None``, then
|
|
820
|
+
no background bitmap is used.
|
|
821
|
+
|
|
822
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
823
|
+
"""
|
|
824
|
+
|
|
825
|
+
if bitmap is None:
|
|
826
|
+
self._staticbitmap = None
|
|
827
|
+
else:
|
|
828
|
+
bitmap = bitmap.ConvertToImage()
|
|
829
|
+
xsize, ysize = self.GetSize()
|
|
830
|
+
bitmap = bitmap.Scale(xsize, ysize)
|
|
831
|
+
self._staticbitmap = bitmap.ConvertToBitmap()
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
def SetPopupSize(self, size):
|
|
835
|
+
"""
|
|
836
|
+
Sets the :class:`ToasterBox` size.
|
|
837
|
+
|
|
838
|
+
:param `size`: the new control size, an instance of :class:`wx.Size`.
|
|
839
|
+
"""
|
|
840
|
+
|
|
841
|
+
self.SetSize(self._bottomright.x, self._bottomright.y, size[0], size[1])
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
def SetPopupPosition(self, pos):
|
|
845
|
+
"""
|
|
846
|
+
Sets the :class:`ToasterBox` position on screen.
|
|
847
|
+
|
|
848
|
+
:param `pos`: the widget position, an instance of :class:`wx.Point`.
|
|
849
|
+
"""
|
|
850
|
+
|
|
851
|
+
self._bottomright = wx.Point(pos[0] + self.GetSize().GetWidth(),
|
|
852
|
+
pos[1] + self.GetSize().GetHeight())
|
|
853
|
+
self._dialogtop = pos
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
def SetPopupPositionByInt(self, pos):
|
|
857
|
+
"""
|
|
858
|
+
Sets the :class:`ToasterBox` position on screen, at one of the screen corners.
|
|
859
|
+
|
|
860
|
+
:param `pos`: an integer specifying the screen corner, namely:
|
|
861
|
+
|
|
862
|
+
============= ========================================
|
|
863
|
+
Corner Number Position
|
|
864
|
+
============= ========================================
|
|
865
|
+
0 Top left screen corner
|
|
866
|
+
1 Top right screen corner
|
|
867
|
+
2 Bottom left screen corner
|
|
868
|
+
3 Bottom right screen corner
|
|
869
|
+
============= ========================================
|
|
870
|
+
|
|
871
|
+
"""
|
|
872
|
+
|
|
873
|
+
w, h = wx.GetDisplaySize()
|
|
874
|
+
self._bottomright = wx.Point(w, h)
|
|
875
|
+
|
|
876
|
+
# top left
|
|
877
|
+
if pos == 0:
|
|
878
|
+
popupposition = wx.Point(0, 0)
|
|
879
|
+
# top right
|
|
880
|
+
elif pos == 1:
|
|
881
|
+
popupposition = wx.Point(w - self._popupsize[0], 0)
|
|
882
|
+
# bottom left
|
|
883
|
+
elif pos == 2:
|
|
884
|
+
popupposition = wx.Point(0, h - self._popupsize[1])
|
|
885
|
+
# bottom right
|
|
886
|
+
elif pos == 3:
|
|
887
|
+
popupposition = wx.Point(self._bottomright.x - self._popupsize[0],
|
|
888
|
+
self._bottomright.y - self._popupsize[1])
|
|
889
|
+
|
|
890
|
+
self._bottomright = wx.Point(popupposition.x + self._popupsize[0],
|
|
891
|
+
popupposition.y + self._popupsize[1])
|
|
892
|
+
|
|
893
|
+
self._dialogtop = popupposition
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
def SetPopupPauseTime(self, pausetime):
|
|
897
|
+
"""
|
|
898
|
+
Sets the time after which the :class:`ToasterBox` is destroyed (linger).
|
|
899
|
+
|
|
900
|
+
:param `pausetime`: the delay after which the control is destroyed, in seconds.
|
|
901
|
+
"""
|
|
902
|
+
|
|
903
|
+
self._pausetime = pausetime
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
def SetPopupScrollSpeed(self, speed):
|
|
907
|
+
"""
|
|
908
|
+
Sets the :class:`ToasterBox` scroll speed.
|
|
909
|
+
|
|
910
|
+
:param `speed`: it is the pause time (in milliseconds) for every step in the
|
|
911
|
+
:meth:`~ToasterBoxWindow.ScrollUp` method.
|
|
912
|
+
"""
|
|
913
|
+
|
|
914
|
+
self._sleeptime = speed
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
def AddPanel(self, panel):
|
|
918
|
+
"""
|
|
919
|
+
Adds a panel to the :class:`ToasterBox`.
|
|
920
|
+
|
|
921
|
+
:param `panel`: an instance of :class:`wx.Window`.
|
|
922
|
+
|
|
923
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_COMPLEX`` style.
|
|
924
|
+
"""
|
|
925
|
+
|
|
926
|
+
if not self._tbstyle & TB_COMPLEX:
|
|
927
|
+
raise Exception("\nERROR: Panel Can Not Be Added When Using TB_SIMPLE ToasterBox Style")
|
|
928
|
+
|
|
929
|
+
self.sizer.Add(panel, 1, wx.EXPAND)
|
|
930
|
+
self.SetSizer(self.sizer)
|
|
931
|
+
self.Layout()
|
|
932
|
+
|
|
933
|
+
if self._closingstyle & TB_ONCLICK and self._windowstyle != TB_CAPTION:
|
|
934
|
+
panel.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
def SetPopupText(self, text):
|
|
938
|
+
"""
|
|
939
|
+
Sets the :class:`ToasterBox` text label.
|
|
940
|
+
|
|
941
|
+
:param `text`: the widget label.
|
|
942
|
+
|
|
943
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
944
|
+
"""
|
|
945
|
+
|
|
946
|
+
self._popuptext = text
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
def SetPopupTextFont(self, font):
|
|
950
|
+
"""
|
|
951
|
+
Sets the :class:`ToasterBox` text font.
|
|
952
|
+
|
|
953
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
954
|
+
a simple generic font will be generated.
|
|
955
|
+
|
|
956
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
957
|
+
"""
|
|
958
|
+
|
|
959
|
+
self._textfont = font
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
def GetPopupText(self):
|
|
963
|
+
"""
|
|
964
|
+
Returns the :class:`ToasterBox` text.
|
|
965
|
+
|
|
966
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
967
|
+
"""
|
|
968
|
+
|
|
969
|
+
return self._popuptext
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
def Play(self):
|
|
973
|
+
""" Creates the :class:`ToasterBoxWindow`, that does all the job. """
|
|
974
|
+
|
|
975
|
+
# do some checks to make sure this window is valid
|
|
976
|
+
if self._bottomright.x < 1 or self._bottomright.y < 1:
|
|
977
|
+
return False
|
|
978
|
+
|
|
979
|
+
if self.GetSize().GetWidth() < 50 or self.GetSize().GetWidth() < 50:
|
|
980
|
+
# toasterbox launches into a endless loop for some reason
|
|
981
|
+
# when you try to make the window too small.
|
|
982
|
+
return False
|
|
983
|
+
|
|
984
|
+
self._direction = wx.UP
|
|
985
|
+
self.SetupPositions()
|
|
986
|
+
self.ScrollUp()
|
|
987
|
+
timerid = wx.NewIdRef()
|
|
988
|
+
self.showtime = wx.Timer(self, timerid)
|
|
989
|
+
self.showtime.Start(self._pausetime)
|
|
990
|
+
self.Bind(wx.EVT_TIMER, self.NotifyTimer, id=timerid)
|
|
991
|
+
|
|
992
|
+
return True
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
def NotifyTimer(self, event):
|
|
996
|
+
""" Hides gradually the :class:`ToasterBoxWindow`. """
|
|
997
|
+
|
|
998
|
+
if self._scrollType != TB_SCR_TYPE_FADE:
|
|
999
|
+
self.showtime.Stop()
|
|
1000
|
+
del self.showtime
|
|
1001
|
+
|
|
1002
|
+
self._direction = wx.DOWN
|
|
1003
|
+
self.SetupPositions()
|
|
1004
|
+
|
|
1005
|
+
self.ScrollDown()
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
def SetPopupBackgroundColour(self, colour):
|
|
1009
|
+
"""
|
|
1010
|
+
Sets the :class:`ToasterBox` background colour.
|
|
1011
|
+
|
|
1012
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
1013
|
+
the background colour will be white.
|
|
1014
|
+
|
|
1015
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
1016
|
+
"""
|
|
1017
|
+
|
|
1018
|
+
self.SetBackgroundColour(colour)
|
|
1019
|
+
self._backgroundcolour = colour
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
def SetPopupTextColour(self, colour):
|
|
1023
|
+
"""
|
|
1024
|
+
Sets the :class:`ToasterBox` foreground colour.
|
|
1025
|
+
|
|
1026
|
+
:param `colour`: a valid :class:`wx.Colour` object. If defaulted to ``None``, then
|
|
1027
|
+
the background colour will be black.
|
|
1028
|
+
|
|
1029
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
1030
|
+
"""
|
|
1031
|
+
|
|
1032
|
+
self._textcolour = colour
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
def SetUseFocus(self, focus, originalfocus):
|
|
1036
|
+
"""
|
|
1037
|
+
If `focus` is ``True``, Instructs :class:`ToasterBoxWindow` to steal the focus from the
|
|
1038
|
+
parent application, otherwise it returns the focus to the original owner.
|
|
1039
|
+
|
|
1040
|
+
:param `focus`: ``True`` to set the focus on :class:`ToasterBoxWindow`, ``False`` to
|
|
1041
|
+
return it to the original owner;
|
|
1042
|
+
:param `originalfocus`: an instance of :class:`wx.Window`, representing a pointer to
|
|
1043
|
+
the window which originally had the focus
|
|
1044
|
+
"""
|
|
1045
|
+
|
|
1046
|
+
self._usefocus = focus
|
|
1047
|
+
self._originalfocus = originalfocus
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
def OnScrollTimer(self, event):
|
|
1051
|
+
"""
|
|
1052
|
+
Handles the ``wx.EVT_TIMER`` event for :class:`ToasterBoxWindow` scrolling up/down.
|
|
1053
|
+
|
|
1054
|
+
:param `event`: a :class:`TimerEvent` event to be processed.
|
|
1055
|
+
"""
|
|
1056
|
+
|
|
1057
|
+
if self._direction == wx.UP:
|
|
1058
|
+
self.TearUp()
|
|
1059
|
+
else:
|
|
1060
|
+
self.TearDown()
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
def TearUp(self):
|
|
1064
|
+
""" Scrolls the :class:`ToasterBox` up, which means gradually showing it. """
|
|
1065
|
+
|
|
1066
|
+
self._windowsize = self._windowsize + self._step
|
|
1067
|
+
step = self._currentStep
|
|
1068
|
+
|
|
1069
|
+
if step < self._dialogtop[1]:
|
|
1070
|
+
step = self._dialogtop[1]
|
|
1071
|
+
|
|
1072
|
+
# checking the type of the scroll (from up to down or from down to up)
|
|
1073
|
+
if self._scrollType == TB_SCR_TYPE_UD:
|
|
1074
|
+
dimY = self._dialogtop[1]
|
|
1075
|
+
elif self._scrollType == TB_SCR_TYPE_DU:
|
|
1076
|
+
dimY = step
|
|
1077
|
+
|
|
1078
|
+
self.SetSize(self._dialogtop[0], dimY, self.GetSize().GetWidth(), self._windowsize)
|
|
1079
|
+
|
|
1080
|
+
self.Refresh(False)
|
|
1081
|
+
|
|
1082
|
+
self._currentStep += self._scrollStep
|
|
1083
|
+
|
|
1084
|
+
if self._currentStep not in list(range(self._start, self._stop, self._scrollStep)):
|
|
1085
|
+
self._scrollTimer.Stop()
|
|
1086
|
+
self.Update()
|
|
1087
|
+
|
|
1088
|
+
if self._tbstyle == TB_SIMPLE:
|
|
1089
|
+
self.DrawText()
|
|
1090
|
+
|
|
1091
|
+
if self._usefocus:
|
|
1092
|
+
self.SetFocus()
|
|
1093
|
+
else:
|
|
1094
|
+
self._originalfocus.SetFocus()
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
def TearDown(self):
|
|
1098
|
+
""" Scrolls the :class:`ToasterBox` down, which means gradually hiding it. """
|
|
1099
|
+
|
|
1100
|
+
self._windowsize = self._windowsize - self._step
|
|
1101
|
+
step = self._currentStep
|
|
1102
|
+
|
|
1103
|
+
if step > self._bottomright.y:
|
|
1104
|
+
step = self._bottomright.y
|
|
1105
|
+
|
|
1106
|
+
if self._windowsize > 0:
|
|
1107
|
+
# checking the type of the scroll (from up to down or from down to up)
|
|
1108
|
+
if self._scrollType == TB_SCR_TYPE_UD:
|
|
1109
|
+
dimY = self._dialogtop[1]
|
|
1110
|
+
elif self._scrollType == TB_SCR_TYPE_DU:
|
|
1111
|
+
dimY = step
|
|
1112
|
+
|
|
1113
|
+
self.SetSize(self._dialogtop[0], dimY,
|
|
1114
|
+
self.GetSize().GetWidth(), self._windowsize)
|
|
1115
|
+
|
|
1116
|
+
self.Update()
|
|
1117
|
+
self.Refresh()
|
|
1118
|
+
|
|
1119
|
+
self._currentStep += self._scrollStep
|
|
1120
|
+
|
|
1121
|
+
else:
|
|
1122
|
+
self._scrollTimer.Stop()
|
|
1123
|
+
self.Hide()
|
|
1124
|
+
if self._parent2:
|
|
1125
|
+
self._parent2.Notify()
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
def SetupPositions(self):
|
|
1129
|
+
""" Sets up the position, size and scrolling step for :class:`ToasterBoxWindow`. """
|
|
1130
|
+
|
|
1131
|
+
if self._scrollType == TB_SCR_TYPE_FADE:
|
|
1132
|
+
self.SetPosition(wx.Point(*self._dialogtop))
|
|
1133
|
+
return
|
|
1134
|
+
|
|
1135
|
+
if self._direction == wx.UP:
|
|
1136
|
+
# walk the Y value up in a raise motion
|
|
1137
|
+
self._xpos = self.GetPosition().x
|
|
1138
|
+
self._ypos = self._bottomright[1]
|
|
1139
|
+
self._windowsize = 0
|
|
1140
|
+
|
|
1141
|
+
# checking the type of the scroll (from up to down or from down to up)
|
|
1142
|
+
if self._scrollType == TB_SCR_TYPE_UD:
|
|
1143
|
+
self._start = self._dialogtop[1]
|
|
1144
|
+
self._stop = self._ypos
|
|
1145
|
+
self._scrollStep = self._step
|
|
1146
|
+
elif self._scrollType == TB_SCR_TYPE_DU:
|
|
1147
|
+
self._start = self._ypos
|
|
1148
|
+
self._stop = self._dialogtop[1]
|
|
1149
|
+
self._scrollStep = -self._step
|
|
1150
|
+
|
|
1151
|
+
else:
|
|
1152
|
+
|
|
1153
|
+
# walk down the Y value
|
|
1154
|
+
self._windowsize = self.GetSize().GetHeight()
|
|
1155
|
+
|
|
1156
|
+
# checking the type of the scroll (from up to down or from down to up)
|
|
1157
|
+
if self._scrollType == TB_SCR_TYPE_UD:
|
|
1158
|
+
self._start = self._bottomright.y
|
|
1159
|
+
self._stop = self._dialogtop[1]
|
|
1160
|
+
self._scrollStep = -self._step
|
|
1161
|
+
elif self._scrollType == TB_SCR_TYPE_DU:
|
|
1162
|
+
self._start = self._dialogtop[1]
|
|
1163
|
+
self._stop = self._bottomright.y
|
|
1164
|
+
self._scrollStep = self._step
|
|
1165
|
+
|
|
1166
|
+
self._currentStep = self._start
|
|
1167
|
+
|
|
1168
|
+
|
|
1169
|
+
def ScrollUp(self):
|
|
1170
|
+
""" Scrolls the :class:`ToasterBox` up, which means gradually showing it. """
|
|
1171
|
+
|
|
1172
|
+
if self._scrollType == TB_SCR_TYPE_FADE:
|
|
1173
|
+
self._amount = 0
|
|
1174
|
+
self._delta = 5
|
|
1175
|
+
self.SetSize(self.GetSize())
|
|
1176
|
+
self._alphaTimer.Start(self._sleeptime)
|
|
1177
|
+
else:
|
|
1178
|
+
self.Show(True)
|
|
1179
|
+
self._scrollTimer.Start(self._sleeptime)
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
def ScrollDown(self):
|
|
1183
|
+
""" Scrolls the :class:`ToasterBox` down, which means gradually hiding it. """
|
|
1184
|
+
|
|
1185
|
+
if self._scrollType == TB_SCR_TYPE_FADE:
|
|
1186
|
+
self._amount = 255
|
|
1187
|
+
self._delta = -5
|
|
1188
|
+
self._alphaTimer.Start(self._sleeptime)
|
|
1189
|
+
else:
|
|
1190
|
+
self._scrollTimer.Start(self._sleeptime)
|
|
1191
|
+
|
|
1192
|
+
|
|
1193
|
+
def OnPaint(self, event):
|
|
1194
|
+
"""
|
|
1195
|
+
Handles the ``wx.EVT_PAINT`` event for :class:`ToasterBoxWindow`.
|
|
1196
|
+
|
|
1197
|
+
:param `event`: a :class:`PaintEvent` event to be processed.
|
|
1198
|
+
|
|
1199
|
+
:note: This event is handled and processed only if the style ``TB_SIMPLE`` is
|
|
1200
|
+
given to :class:`ToasterBox`.
|
|
1201
|
+
"""
|
|
1202
|
+
|
|
1203
|
+
dc = wx.AutoBufferedPaintDC(self)
|
|
1204
|
+
self.DrawText(dc)
|
|
1205
|
+
|
|
1206
|
+
|
|
1207
|
+
def DrawText(self, dc=None):
|
|
1208
|
+
"""
|
|
1209
|
+
Draws the text label for a :class:`ToasterBox` with ``TB_SIMPLE`` style set.
|
|
1210
|
+
|
|
1211
|
+
:param `dc`: an instance of :class:`wx.DC`. If defaulted to ``None``, a :class:`ClientDC`
|
|
1212
|
+
will be created on the fly.
|
|
1213
|
+
"""
|
|
1214
|
+
|
|
1215
|
+
if dc is None:
|
|
1216
|
+
dc = wx.ClientDC(self)
|
|
1217
|
+
|
|
1218
|
+
dc.SetBackground(wx.Brush(self._backgroundcolour))
|
|
1219
|
+
dc.Clear()
|
|
1220
|
+
|
|
1221
|
+
if self._staticbitmap:
|
|
1222
|
+
dc.DrawBitmap(self._staticbitmap, 0, 0)
|
|
1223
|
+
dc.SetFont(self._textfont)
|
|
1224
|
+
dc.SetTextForeground(self._textcolour)
|
|
1225
|
+
|
|
1226
|
+
if not hasattr(self, "text_coords"):
|
|
1227
|
+
self._getTextCoords(dc)
|
|
1228
|
+
dc.DrawTextList(*self.text_coords)
|
|
1229
|
+
|
|
1230
|
+
|
|
1231
|
+
def AlphaCycle(self, event):
|
|
1232
|
+
"""
|
|
1233
|
+
Handles the ``wx.EVT_TIMER`` event for :class:`ToasterBoxWindow`.
|
|
1234
|
+
|
|
1235
|
+
:param `event`: a :class:`TimerEvent` event to be processed.
|
|
1236
|
+
"""
|
|
1237
|
+
|
|
1238
|
+
# Increase (or decrease) the alpha channel
|
|
1239
|
+
self._amount += self._delta
|
|
1240
|
+
|
|
1241
|
+
if self._tbstyle == TB_SIMPLE:
|
|
1242
|
+
self.Refresh(False)
|
|
1243
|
+
|
|
1244
|
+
if self._amount > 255 or self._amount < 0:
|
|
1245
|
+
# We're done, stop the timer
|
|
1246
|
+
self._alphaTimer.Stop()
|
|
1247
|
+
|
|
1248
|
+
if self._amount < 0:
|
|
1249
|
+
self.Hide()
|
|
1250
|
+
self.showtime.Stop()
|
|
1251
|
+
if self._parent2:
|
|
1252
|
+
self._parent2.Notify()
|
|
1253
|
+
|
|
1254
|
+
elif self._amount > 255:
|
|
1255
|
+
if self._usefocus:
|
|
1256
|
+
self.SetFocus()
|
|
1257
|
+
else:
|
|
1258
|
+
self._originalfocus.SetFocus()
|
|
1259
|
+
|
|
1260
|
+
return
|
|
1261
|
+
|
|
1262
|
+
# Make the ToasterBoxWindow more or less transparent
|
|
1263
|
+
self.MakeWindowTransparent(self._amount)
|
|
1264
|
+
if not self.IsShown():
|
|
1265
|
+
self.Show()
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
def MakeWindowTransparent(self, amount):
|
|
1269
|
+
"""
|
|
1270
|
+
Makes the :class:`ToasterBoxWindow` window transparent.
|
|
1271
|
+
|
|
1272
|
+
:param `amount`: the alpha channel value.
|
|
1273
|
+
"""
|
|
1274
|
+
|
|
1275
|
+
if not self.CanSetTransparent():
|
|
1276
|
+
return
|
|
1277
|
+
|
|
1278
|
+
self.SetTransparent(amount)
|
|
1279
|
+
|
|
1280
|
+
|
|
1281
|
+
def _getTextCoords(self, dc):
|
|
1282
|
+
"""
|
|
1283
|
+
Draw the user specified text.
|
|
1284
|
+
|
|
1285
|
+
:param `dc`: an instance of :class:`wx.DC`.
|
|
1286
|
+
|
|
1287
|
+
:note: Use this method only for a :class:`ToasterBox` created with the ``TB_SIMPLE`` style.
|
|
1288
|
+
"""
|
|
1289
|
+
|
|
1290
|
+
# border from sides and top to text (in pixels)
|
|
1291
|
+
border = 7
|
|
1292
|
+
# how much space between text lines
|
|
1293
|
+
textPadding = 2
|
|
1294
|
+
|
|
1295
|
+
pText = self.GetPopupText()
|
|
1296
|
+
|
|
1297
|
+
max_len = len(pText)
|
|
1298
|
+
|
|
1299
|
+
tw, th = self._parent2._popupsize
|
|
1300
|
+
|
|
1301
|
+
if self._windowstyle == TB_CAPTION:
|
|
1302
|
+
th = th - 20
|
|
1303
|
+
|
|
1304
|
+
while 1:
|
|
1305
|
+
lines = textwrap.wrap(pText, max_len)
|
|
1306
|
+
|
|
1307
|
+
for line in lines:
|
|
1308
|
+
w, h = dc.GetTextExtent(line)
|
|
1309
|
+
if w > tw - border * 2:
|
|
1310
|
+
max_len -= 1
|
|
1311
|
+
break
|
|
1312
|
+
else:
|
|
1313
|
+
break
|
|
1314
|
+
|
|
1315
|
+
fh = 0
|
|
1316
|
+
for line in lines:
|
|
1317
|
+
w, h = dc.GetTextExtent(line)
|
|
1318
|
+
fh += h + textPadding
|
|
1319
|
+
y = (th - fh) / 2; coords = []
|
|
1320
|
+
|
|
1321
|
+
for line in lines:
|
|
1322
|
+
w, h = dc.GetTextExtent(line)
|
|
1323
|
+
x = (tw - w) / 2
|
|
1324
|
+
coords.append((x, y))
|
|
1325
|
+
y += h + textPadding
|
|
1326
|
+
|
|
1327
|
+
self.text_coords = (lines, coords)
|