+++ /dev/null
-"""
-This is the Advanced Generic Widgets package (AGW). It provides many
-custom-drawn wxPython controls: some of them can be used as a replacement
-of the platform native controls, others are simply an addition to the
-already rich wxPython widgets set.
-
-
-Description:
-
-AGW contains many different modules, listed below. Items labelled with
-an asterisk were already present in `wx.lib` before:
-
-- AdvancedSplash: reproduces the behaviour of `wx.SplashScreen`, with more
- advanced features like custom shapes and text animations;
-- AquaButton: this is another custom-drawn button class which
- *approximatively* mimics the behaviour of Aqua buttons on the Mac;
-- AUI: a pure-Python implementation of `wx.aui`, with many bug fixes and
- new features like HUD docking and L{AuiNotebook} tab arts;
-- BalloonTip: allows you to display tooltips in a balloon style window
- (actually a frame), similarly to the Windows XP balloon help;
-- ButtonPanel (*): a panel with gradient background shading with the
- possibility to add buttons and controls still respecting the gradient
- background;
-- CubeColourDialog: an alternative implementation of `wx.ColourDialog`, it
- offers different functionalities like colour wheel and RGB cube;
-- CustomTreeCtrl (*): mimics the behaviour of `wx.TreeCtrl`, with almost the
- same base functionalities plus a bunch of enhancements and goodies;
-- FlatMenu: as the name implies, it is a generic menu implementation,
- offering the same `wx.MenuBar`/`wx.Menu`/`wx.ToolBar` capabilities and much more;
-- FlatNotebook (*): a full implementation of the `wx.Notebook`, and designed
- to be a drop-in replacement for `wx.Notebook` with enhanced capabilities;
-- FloatSpin: this class implements a floating point spinctrl, cabable (in
- theory) of handling infinite-precision floating point numbers;
-- FoldPanelBar (*): a control that contains multiple panels that can be
- expanded or collapsed a la Windows Explorer/Outlook command bars;
-- FourWaySplitter: this is a layout manager which manages four children like
- four panes in a window, similar to many CAD software interfaces;
-- GenericMessageDialog: it is a possible replacement for the standard
- `wx.MessageDialog`, with a fancier look and extended functionalities;
-- GradientButton: another custom-drawn button class which mimics Windows CE
- mobile gradient buttons, using a tri-vertex blended gradient background;
-- HyperLinkCtrl (*): this widget acts line an hyper link in a typical browser;
-- HyperTreeList: a class that mimics the behaviour of `wx.gizmos.TreeListCtrl`,
- with almost the same base functionalities plus some more enhancements;
-- KnobCtrl: a widget which lets the user select a numerical value by
- rotating it, like a slider with a wheel shape;
-- LabelBook and FlatImageBook: these are a quasi-full implementations of
- `wx.ListBook`, with additional features;
-- MultiDirDialog: it represents a possible replacement for `wx.DirDialog`,
- with the additional ability of selecting multiple folders at once and a
- fancier look;
-- PeakMeter: this widget mimics the behaviour of LED equalizers that are
- usually found in stereos and MP3 players;
-- PersistentControls: widgets which automatically save their state
- when they are destroyed and restore it when they are recreated, even during
- another program invocation;
-- PieCtrl and ProgressPie: these are simple classes that reproduce the
- behavior of a pie chart, in a static or progress-gauge-like way;
-- PyBusyInfo: constructs a busy info window and displays a message in it:
- it is similar to `wx.BusyInfo`;
-- PyCollapsiblePane: a pure Python implementation of the original wxWidgets
- C++ code of `wx.CollapsiblePane`, with customizable buttons;
-- PyGauge: a generic `wx.Gauge` implementation, it supports the determinate
- mode functions as `wx.Gauge`;
-- PyProgress: it is similar to `wx.ProgressDialog` in indeterminated mode, but
- with a different gauge appearance and a different spinning behavior;
-- RibbonBar: the RibbonBar library is a set of classes for writing a ribbon
- user interface, similar to the user interface present in recent versions
- of Microsoft Office;
-- RulerCtrl: it implements a ruler window that can be placed on top, bottom,
- left or right to any wxPython widget. It is somewhat similar to the rulers
- you can find in text editors software;
-- ShapedButton: this class tries to fill the lack of "custom shaped" controls
- in wxPython. It can be used to build round buttons or elliptic buttons;
-- SpeedMeter: this widget tries to reproduce the behavior of some car
- controls (but not only), by creating an "angular" control;
-- SuperToolTip: a class that mimics the behaviour of `wx.TipWindow` and
- generic tooltips, with many features and highly customizable;
-- ThumbnailCtrl: a widget that can be used to display a series of images
- in a "thumbnail" format; it mimics, for example, the Windows Explorer
- behavior when you select the "view thumbnails" option;
-- ToasterBox: a cross-platform widget to make the creation of MSN-style
- "toaster" popups easier;
-- UltimateListCtrl: mimics the behaviour of `wx.ListCtrl`, with almost the same
- base functionalities plus some more enhancements;
-- ZoomBar: a class that *appoximatively* mimics the behaviour of the Mac Dock,
- inside a `wx.Panel`.
-
-
-Bugs and Limitations: many, patches and fixes welcome :-D
-
-See the demos for an example of what AGW can do, and on how to use it.
-
-Copyright: Andrea Gavana
-
-License: Same as the version of wxPython you are using it with.
-
-SVN for latest code:
-http://svn.wxwidgets.org/viewvc/wx/wxPython/3rdParty/AGW/
-
-Mailing List:
-wxpython-users@lists.wxwidgets.org
-
-My personal web page:
-http://xoomer.alice.it/infinity77
-
-Please let me know if you are using AGW!
-
-You can contact me at:
-
-andrea.gavana@gmail.com
-gavana@kpo.kz
-
-AGW version: 0.9.1
-
-Last updated: 10 Mar 2011, 15.00 GMT
-
-"""
-
-__version__ = "0.9.1"
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
+++ /dev/null
-"""
-AUI is an Advanced User Interface library that aims to implement "cutting-edge"
-interface usability and design features so developers can quickly and easily create
-beautiful and usable application interfaces.
-
-
-Vision and Design Principles
-============================
-
-AUI attempts to encapsulate the following aspects of the user interface:
-
-* **Frame Management**: Frame management provides the means to open, move and hide common
- controls that are needed to interact with the document, and allow these configurations
- to be saved into different perspectives and loaded at a later time.
-
-* **Toolbars**: Toolbars are a specialized subset of the frame management system and should
- behave similarly to other docked components. However, they also require additional
- functionality, such as "spring-loaded" rebar support, "chevron" buttons and end-user
- customizability.
-
-* **Modeless Controls**: Modeless controls expose a tool palette or set of options that
- float above the application content while allowing it to be accessed. Usually accessed
- by the toolbar, these controls disappear when an option is selected, but may also be
- "torn off" the toolbar into a floating frame of their own.
-
-* **Look and Feel**: Look and feel encompasses the way controls are drawn, both when shown
- statically as well as when they are being moved. This aspect of user interface design
- incorporates "special effects" such as transparent window dragging as well as frame animation.
-
-AUI adheres to the following principles:
-
-- Use native floating frames to obtain a native look and feel for all platforms;
-- Use existing wxPython code where possible, such as sizer implementation for frame management;
-- Use standard wxPython coding conventions.
-
-
-Usage
-=====
-
-The following example shows a simple implementation that uses L{AuiManager} to manage
-three text controls in a frame window::
-
- class MyFrame(wx.Frame):
-
- def __init__(self, parent, id=-1, title="AUI Test", pos=wx.DefaultPosition,
- size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
-
- wx.Frame.__init__(self, parent, id, title, pos, size, style)
-
- self._mgr = aui.AuiManager()
-
- # notify AUI which frame to use
- self._mgr.SetManagedWindow(self)
-
- # create several text controls
- text1 = wx.TextCtrl(self, -1, "Pane 1 - sample text",
- wx.DefaultPosition, wx.Size(200,150),
- wx.NO_BORDER | wx.TE_MULTILINE)
-
- text2 = wx.TextCtrl(self, -1, "Pane 2 - sample text",
- wx.DefaultPosition, wx.Size(200,150),
- wx.NO_BORDER | wx.TE_MULTILINE)
-
- text3 = wx.TextCtrl(self, -1, "Main content window",
- wx.DefaultPosition, wx.Size(200,150),
- wx.NO_BORDER | wx.TE_MULTILINE)
-
- # add the panes to the manager
- self._mgr.AddPane(text1, AuiPaneInfo().Left().Caption("Pane Number One"))
- self._mgr.AddPane(text2, AuiPaneInfo().Bottom().Caption("Pane Number Two"))
- self._mgr.AddPane(text3, AuiPaneInfo().CenterPane())
-
- # tell the manager to "commit" all the changes just made
- self._mgr.Update()
-
- self.Bind(wx.EVT_CLOSE, self.OnClose)
-
-
- def OnClose(self, event):
-
- # deinitialize the frame manager
- self._mgr.UnInit()
-
- self.Destroy()
- event.Skip()
-
-
- # our normal wxApp-derived class, as usual
-
- app = wx.PySimpleApp()
-
- frame = MyFrame(None)
- app.SetTopWindow(frame)
- frame.Show()
-
- app.MainLoop()
-
-
-What's New
-==========
-
-Current wxAUI Version Tracked: wxWidgets 2.9.0 (SVN HEAD)
-
-The wxPython AUI version fixes the following bugs or implement the following
-missing features (the list is not exhaustive):
-
-- Visual Studio 2005 style docking: http://www.kirix.com/forums/viewtopic.php?f=16&t=596
-- Dock and Pane Resizing: http://www.kirix.com/forums/viewtopic.php?f=16&t=582
-- Patch concerning dock resizing: http://www.kirix.com/forums/viewtopic.php?f=16&t=610
-- Patch to effect wxAuiToolBar orientation switch: http://www.kirix.com/forums/viewtopic.php?f=16&t=641
-- AUI: Core dump when loading a perspective in wxGTK (MSW OK): http://www.kirix.com/forums/viewtopic.php?f=15&t=627
-- wxAuiNotebook reordered AdvanceSelection(): http://www.kirix.com/forums/viewtopic.php?f=16&t=617
-- Vertical Toolbar Docking Issue: http://www.kirix.com/forums/viewtopic.php?f=16&t=181
-- Patch to show the resize hint on mouse-down in aui: http://trac.wxwidgets.org/ticket/9612
-- The Left/Right and Top/Bottom Docks over draw each other: http://trac.wxwidgets.org/ticket/3516
-- MinSize() not honoured: http://trac.wxwidgets.org/ticket/3562
-- Layout problem with wxAUI: http://trac.wxwidgets.org/ticket/3597
-- Resizing children ignores current window size: http://trac.wxwidgets.org/ticket/3908
-- Resizing panes under Vista does not repaint background: http://trac.wxwidgets.org/ticket/4325
-- Resize sash resizes in response to click: http://trac.wxwidgets.org/ticket/4547
-- "Illegal" resizing of the AuiPane? (wxPython): http://trac.wxwidgets.org/ticket/4599
-- Floating wxAUIPane Resize Event doesn't update its position: http://trac.wxwidgets.org/ticket/9773
-- Don't hide floating panels when we maximize some other panel: http://trac.wxwidgets.org/ticket/4066
-- wxAUINotebook incorrect ALLOW_ACTIVE_PANE handling: http://trac.wxwidgets.org/ticket/4361
-- Page changing veto doesn't work, (patch supplied): http://trac.wxwidgets.org/ticket/4518
-- Show and DoShow are mixed around in wxAuiMDIChildFrame: http://trac.wxwidgets.org/ticket/4567
-- wxAuiManager & wxToolBar - ToolBar Of Size Zero: http://trac.wxwidgets.org/ticket/9724
-- wxAuiNotebook doesn't behave properly like a container as far as...: http://trac.wxwidgets.org/ticket/9911
-- Serious layout bugs in wxAUI: http://trac.wxwidgets.org/ticket/10620
-- wAuiDefaultTabArt::Clone() should just use copy contructor: http://trac.wxwidgets.org/ticket/11388
-- Drop down button for check tool on wxAuiToolbar: http://trac.wxwidgets.org/ticket/11139
-
-Plus the following features:
-
-- AuiManager:
-
- (a) Implementation of a simple minimize pane system: Clicking on this minimize button causes a new
- AuiToolBar to be created and added to the frame manager, (currently the implementation is such
- that panes at West will have a toolbar at the right, panes at South will have toolbars at the
- bottom etc...) and the pane is hidden in the manager.
- Clicking on the restore button on the newly created toolbar will result in the toolbar being
- removed and the original pane being restored;
- (b) Panes can be docked on top of each other to form `AuiNotebooks`; `AuiNotebooks` tabs can be torn
- off to create floating panes;
- (c) On Windows XP, use the nice sash drawing provided by XP while dragging the sash;
- (d) Possibility to set an icon on docked panes;
- (e) Possibility to draw a sash visual grip, for enhanced visualization of sashes;
- (f) Implementation of a native docking art (`ModernDockArt`). Windows XP only, **requires** Mark Hammond's
- pywin32 package (winxptheme);
- (g) Possibility to set a transparency for floating panes (a la Paint .NET);
- (h) Snapping the main frame to the screen in any positin specified by horizontal and vertical
- alignments;
- (i) Snapping floating panes on left/right/top/bottom or any combination of directions, a la Winamp;
- (j) "Fly-out" floating panes, i.e. panes which show themselves only when the mouse hover them;
- (k) Ability to set custom bitmaps for pane buttons (close, maximize, etc...);
- (l) Implementation of the style ``AUI_MGR_ANIMATE_FRAMES``, which fade-out floating panes when
- they are closed (all platforms which support frames transparency) and show a moving rectangle
- when they are docked and minimized (Windows < Vista and GTK only);
- (m) A pane switcher dialog is available to cycle through existing AUI panes;
- (n) Some flags which allow to choose the orientation and the position of the minimized panes;
- (o) The functions [Get]MinimizeMode() in `AuiPaneInfo` which allow to set/get the flags described above;
- (p) Events like ``EVT_AUI_PANE_DOCKING``, ``EVT_AUI_PANE_DOCKED``, ``EVT_AUI_PANE_FLOATING`` and ``EVT_AUI_PANE_FLOATED`` are
- available for all panes *except* toolbar panes;
- (q) Implementation of the RequestUserAttention method for panes;
- (r) Ability to show the caption bar of docked panes on the left instead of on the top (with caption
- text rotated by 90 degrees then). This is similar to what `wxDockIt` did. To enable this feature on any
- given pane, simply call `CaptionVisible(True, left=True)`;
- (s) New Aero-style docking guides: you can enable them by using the `AuiManager` style ``AUI_MGR_AERO_DOCKING_GUIDES``;
- (t) A slide-in/slide-out preview of minimized panes can be seen by enabling the `AuiManager` style
- ``AUI_MGR_PREVIEW_MINIMIZED_PANES`` and by hovering with the mouse on the minimized pane toolbar tool;
- (u) New Whidbey-style docking guides: you can enable them by using the `AuiManager` style ``AUI_MGR_WHIDBEY_DOCKING_GUIDES``;
- (v) Native of custom-drawn mini frames can be used as floating panes, depending on the ``AUI_MGR_USE_NATIVE_MINIFRAMES`` style;
- (w) A "smooth docking effect" can be obtained by using the ``AUI_MGR_SMOOTH_DOCKING`` style (similar to PyQT docking style).
-
-|
-
-- AuiNotebook:
-
- (a) Implementation of the style ``AUI_NB_HIDE_ON_SINGLE_TAB``, a la `wx.lib.agw.flatnotebook`;
- (b) Implementation of the style ``AUI_NB_SMART_TABS``, a la `wx.lib.agw.flatnotebook`;
- (c) Implementation of the style ``AUI_NB_USE_IMAGES_DROPDOWN``, which allows to show tab images
- on the tab dropdown menu instead of bare check menu items (a la `wx.lib.agw.flatnotebook`);
- (d) 6 different tab arts are available, namely:
-
- (1) Default "glossy" theme (as in `wx.aui.AuiNotebook`)
- (2) Simple theme (as in `wx.aui.AuiNotebook`)
- (3) Firefox 2 theme
- (4) Visual Studio 2003 theme (VC71)
- (5) Visual Studio 2005 theme (VC81)
- (6) Google Chrome theme
-
- (e) Enabling/disabling tabs;
- (f) Setting the colour of the tab's text;
- (g) Implementation of the style ``AUI_NB_CLOSE_ON_TAB_LEFT``, which draws the tab close button on
- the left instead of on the right (a la Camino browser);
- (h) Ability to save and load perspectives in `AuiNotebook` (experimental);
- (i) Possibility to add custom buttons in the `AuiNotebook` tab area;
- (j) Implementation of the style ``AUI_NB_TAB_FLOAT``, which allows the floating of single tabs.
- Known limitation: when the notebook is more or less full screen, tabs cannot be dragged far
- enough outside of the notebook to become floating pages;
- (k) Implementation of the style ``AUI_NB_DRAW_DND_TAB`` (on by default), which draws an image
- representation of a tab while dragging;
- (l) Implementation of the `AuiNotebook` unsplit functionality, which unsplit a splitted AuiNotebook
- when double-clicking on a sash;
- (m) Possibility to hide all the tabs by calling `HideAllTAbs`;
- (n) wxPython controls can now be added inside page tabs by calling `AddControlToPage`, and they can be
- removed by calling `RemoveControlFromPage`;
- (o) Possibility to preview all the pages in a `AuiNotebook` (as thumbnails) by using the `NotebookPreview`
- method of `AuiNotebook`;
- (p) Tab labels can be edited by calling the `SetRenamable` method on a `AuiNotebook` page;
- (q) Support for multi-lines tab labels in `AuiNotebook`;
- (r) Support for setting minimum and maximum tab widths for fixed width tabs;
- (s) Implementation of the style ``AUI_NB_ORDER_BY_ACCESS``, which orders the tabs by last access time
- inside the Tab Navigator dialog;
- (t) Implementation of the style ``AUI_NB_NO_TAB_FOCUS``, allowing the developer not to draw the tab
- focus rectangle on tne `AuiNotebook` tabs.
-
-|
-
-- AuiToolBar:
-
- (a) ``AUI_TB_PLAIN_BACKGROUND`` style that allows to easy setup a plain background to the AUI toolbar,
- without the need to override drawing methods. This style contrasts with the default behaviour
- of the `wx.aui.AuiToolBar` that draws a background gradient and this break the window design when
- putting it within a control that has margin between the borders and the toolbar (example: put
- `wx.aui.AuiToolBar` within a `wx.StaticBoxSizer` that has a plain background);
- (b) `AuiToolBar` allow item alignment: http://trac.wxwidgets.org/ticket/10174;
- (c) `AUIToolBar` `DrawButton()` improvement: http://trac.wxwidgets.org/ticket/10303;
- (d) `AuiToolBar` automatically assign new id for tools: http://trac.wxwidgets.org/ticket/10173;
- (e) `AuiToolBar` Allow right-click on any kind of button: http://trac.wxwidgets.org/ticket/10079;
- (f) `AuiToolBar` idle update only when visible: http://trac.wxwidgets.org/ticket/10075;
- (g) Ability of creating `AuiToolBar` tools with [counter]clockwise rotation. This allows to propose a
- variant of the minimizing functionality with a rotated button which keeps the caption of the pane
- as label;
- (h) Allow setting the alignment of all tools in a toolbar that is expanded.
-
-
-TODOs
-=====
-
-- Documentation, documentation and documentation;
-- Fix `tabmdi.AuiMDIParentFrame` and friends, they do not work correctly at present;
-- Allow specification of `CaptionLeft()` to `AuiPaneInfo` to show the caption bar of docked panes
- on the left instead of on the top (with caption text rotated by 90 degrees then). This is
- similar to what `wxDockIt` did - DONE;
-- Make developer-created `AuiNotebooks` and automatic (framemanager-created) `AuiNotebooks` behave
- the same way (undocking of tabs) - DONE, to some extent;
-- Find a way to dock panes in already floating panes (`AuiFloatingFrames`), as they already have
- their own `AuiManager`;
-- Add more gripper styles (see, i.e., PlusDock 4.0);
-- Add an "AutoHide" feature to docked panes, similar to fly-out floating panes (see, i.e., PlusDock 4.0);
-- Add events for panes when they are about to float or to be docked (something like
- ``EVT_AUI_PANE_FLOATING/ED`` and ``EVT_AUI_PANE_DOCKING/ED``) - DONE, to some extent;
-- Implement the 4-ways splitter behaviour for horizontal and vertical sashes if they intersect;
-- Extend `tabart.py` with more aui tab arts;
-- Implement ``AUI_NB_LEFT`` and ``AUI_NB_RIGHT`` tab locations in `AuiNotebook`;
-- Move `AuiDefaultToolBarArt` into a separate module (as with `tabart.py` and `dockart.py`) and
- provide more arts for toolbars (maybe from `wx.lib.agw.flatmenu`?)
-- Support multiple-rows/multiple columns toolbars;
-- Integrate as much as possible with `wx.lib.agw.flatmenu`, from dropdown menus in `AuiNotebook` to
- toolbars and menu positioning;
-- Possibly handle minimization of panes in a different way (or provide an option to switch to
- another way of minimizing panes);
-- Clean up/speed up the code, especially time-consuming for-loops;
-- Possibly integrate `wxPyRibbon` (still on development), at least on Windows.
-
-
-License And Version
-===================
-
-AUI library is distributed under the wxPython license.
-
-Latest revision: Andrea Gavana @ 10 Mar 2011, 15.00 GMT
-
-Version 1.3.
-
-"""
-
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
-__date__ = "31 March 2009"
-
-
-from aui_constants import *
-from aui_utilities import *
-from auibar import *
-from auibook import *
-from tabart import *
-from dockart import *
-from framemanager import *
-from tabmdi import *
+++ /dev/null
-"""
-This module contains all the constants used by wxPython-AUI.
-
-Especially important and meaningful are constants for AuiManager, AuiDockArt and
-AuiNotebook.
-"""
-
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
-__date__ = "31 March 2009"
-
-
-import wx
-from wx.lib.embeddedimage import PyEmbeddedImage
-
-# ------------------------- #
-# - AuiNotebook Constants - #
-# ------------------------- #
-
-# For tabart
-# --------------
-
-vertical_border_padding = 4
-""" Border padding used in drawing tabs. """
-
-if wx.Platform == "__WXMAC__":
- nb_close_bits = "\xFF\xFF\xFF\xFF\x0F\xFE\x03\xF8\x01\xF0\x19\xF3" \
- "\xB8\xE3\xF0\xE1\xE0\xE0\xF0\xE1\xB8\xE3\x19\xF3" \
- "\x01\xF0\x03\xF8\x0F\xFE\xFF\xFF"
- """ AuiNotebook close button image on wxMAC. """
-
-elif wx.Platform == "__WXGTK__":
- nb_close_bits = "\xff\xff\xff\xff\x07\xf0\xfb\xef\xdb\xed\x8b\xe8" \
- "\x1b\xec\x3b\xee\x1b\xec\x8b\xe8\xdb\xed\xfb\xef" \
- "\x07\xf0\xff\xff\xff\xff\xff\xff"
- """ AuiNotebook close button image on wxGTK. """
-
-else:
- nb_close_bits = "\xff\xff\xff\xff\xff\xff\xff\xff\xe7\xf3\xcf\xf9" \
- "\x9f\xfc\x3f\xfe\x3f\xfe\x9f\xfc\xcf\xf9\xe7\xf3" \
- "\xff\xff\xff\xff\xff\xff\xff\xff"
- """ AuiNotebook close button image on wxMSW. """
-
-nb_left_bits = "\xff\xff\xff\xff\xff\xff\xff\xfe\x7f\xfe\x3f\xfe\x1f" \
- "\xfe\x0f\xfe\x1f\xfe\x3f\xfe\x7f\xfe\xff\xfe\xff\xff" \
- "\xff\xff\xff\xff\xff\xff"
-""" AuiNotebook left button image. """
-
-nb_right_bits = "\xff\xff\xff\xff\xff\xff\xdf\xff\x9f\xff\x1f\xff\x1f" \
- "\xfe\x1f\xfc\x1f\xfe\x1f\xff\x9f\xff\xdf\xff\xff\xff" \
- "\xff\xff\xff\xff\xff\xff"
-""" AuiNotebook right button image. """
-
-nb_list_bits = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f" \
- "\xf8\xff\xff\x0f\xf8\x1f\xfc\x3f\xfe\x7f\xff\xff\xff" \
- "\xff\xff\xff\xff\xff\xff"
-""" AuiNotebook windows list button image. """
-
-
-#----------------------------------------------------------------------
-tab_active_center = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAbCAYAAAC9WOV0AAAABHNCSVQICAgIfAhkiAAAADNJ"
- "REFUCJltzMEJwDAUw9DHX6OLdP/Bop4KDc3F2EIYrsFtrZow8GnH6OD1zvRTajvY2QMHIhNx"
- "jUhuAgAAAABJRU5ErkJggg==")
-""" Center active tab image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_active_left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAbCAYAAACjkdXHAAAABHNCSVQICAgIfAhkiAAAAglJ"
- "REFUOI2Nkk9rE0EYh5/J7mpW06xE2iSmeFHxEoqIAc/FQ5CKgn4DP4KlIQG/QVsQbBEKgop+"
- "Anvy4rV4bLT2JCGJPVXqwaZJd+f1kN26WTfJDrzszDLPPL/5o0jeFGAC54A0YKmEYAo4DzjA"
- "LHAZmElqtIGrhmEsvtzcfPNtb6/V6524SWALKBiGsfhxe/uzFhGth5XEmgVubWxsvA1Az68k"
- "1nngYbPZ7ASg69c06wxwe3V9/b3reVqHwGmwCZRs2370fX//wIuA0+CLwEKj0XilZTSu602G"
- "FcP7vLe7+7XlRaCgPw62gGv5fP6p63raiwFdLWKOgdNArl6vV1UqpQgcYdcYbwooAPfb7c7h"
- "mTWmUjGwCWTL5fL1K6VSLiqQyMTYyLVa/UEwe9IC0chFYKnb/XnkeiIDV+Q0UsG/qNkCnEql"
- "crNQLDpaxpskJnYayD1bXl4S/xrDoPLHKjQOmsHwlCuHv44+ZJ2sLTrGGqzg7zEc+VK1Wl1w"
- "HMcG0DFxw6sFsRVwAZhdWak9FoRJ+w2HCKzzwN3jXv+daVmGDkdWoMKb9fumHz0DFFfX1p5Y"
- "lmXo6N0G48jzVEDOt97pdA9ezOXzGU+PzBmN6VuDqyoDN3Z2vjyfKxQynhYkJuJ/L02Ara3X"
- "n3602r8HrpaTUy3HAy1/+hNq8O+r+q4WETirmFMNBwm3v+gdmytKNIUpAAAAAElFTkSuQmCC")
-""" Left active tab image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_active_right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAbCAYAAACjkdXHAAAABHNCSVQICAgIfAhkiAAAAkpJ"
- "REFUOI2NlM1rU0EUxX9zZ5KaWq3GKKnGutC0FEWCWAWLRUOxBetK/wdp6Re6F6TFXXGhuFdw"
- "b7dCQUUpiFt1XbB2q7Uf1iTvunjzkpe0afNgmLnDnHvOPe/OWCALtAFC+Cktfha4CRwBDnhg"
- "BQhaSrK19bf89dv35WfPX7y01haBbiAFmH3BlUA1Gm8WFt75BFkg0TK4VAl0Y3NL5+efvgIK"
- "wOH92EVjxRljGBi4VgTOeLDbk7kcqEZju1TWX7/Xgtm5J6+BS8ChvdilLhAhkUya4eFbxVQq"
- "1e3ZbUtgg8GKJd/Tk70/NjYCHCPsgX1kV8K5VA70z8amfvy0tAwMAcebSRfijikY8ez5/OlM"
- "JrOncbIjp4K1lmRb0sw8eDgCpAm7rwlz46YIzjpGb48WveyDNPhDfCOuHmNwzpHL5dK9fX3n"
- "mkmvaxJiayOCWMvM1PSdZtJrhiloLJMYIeESDFwf7Acyu0mXGLYmX0PpYi3ZbFdnoVDoBTpp"
- "uCxCjFob1tYKzlnGJyZHd5Mu6uVGkqvMCmCwzjE4eOMqcALoINauUic37hjhLXPWcTSdThWL"
- "QxcJX5yqdGk4H/cP9a4755iYnLpL+M/b8e0qjafrekb9TUskuNx/5TzQ5Y1zO9yOZEd1R7OI"
- "JdXebh/Pzt3zCToAMZv/AjU1orDWWKAGVJVSqcTqysp6X+/ZaeAL8KNac9wsVQ8yNeOsdZw8"
- "let4/2HpEdAPXDAb20HLj7xqeHT158ra4uLbz2bdg03krmetxrH9KDAmHP8Bn0j1t/01UV0A"
- "AAAASUVORK5CYII=")
-""" Right active tab image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_close = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAI9J"
- "REFUKJG90MEKAWEUxfEfM4rxAFIommzZzNb7v4BsLJTsiGQlYjHfME3flrO75/xvnXv5p/qY"
- "R/wcWTUktWCKFbrYB6/AAhecmwunAI/RwQAjbLGpoFakwjLATxzqMLQjC68A3/FohkljLkKN"
- "Ha4YKg8+VkBag3Pll9a1GikmuPk+4qMMs0jFMXoR/0d6A9JRFV/jxY+iAAAAAElFTkSuQmCC")
-""" Normal close button image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_close_h = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAOlJ"
- "REFUKJGVkiFuw0AQRd849hUS7iPUwGEllhyjYJ+gaK9Q4CsY9QTFIY4shQQucI8Q7l6h3Z0S"
- "r7UgjdrPZvVm52k0wpJLWe4y51qgVpECQFQnYPzabN4ra2cAAbgWxZMmyavAkTtROIn33fM0"
- "fcilLHep92+/wXHTd5K8JJlzbYD3w8C2aVZo2zTsh4FF5Zg516ZAHYBb35MbszbkxnDr+3hQ"
- "napIIUv1eT6vYPggvAGoSJE88r6XVFQnRA7BOdYIk8IUUZ1SYAQOsXOskRsT1+P/11pZO4v3"
- "ncLpESzed5W1c1jQn0/jBzPfck1qdmfjAAAAAElFTkSuQmCC")
-""" Hover close button image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_close_p = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAASxJ"
- "REFUKJF9kbFLQlEYxX/nvbs55OAkiJAE7k7Nibo9xf+hrTlyr3Boipb+BCGq0bApJEQcG0Ms"
- "aQ0Lmq5+Dc+nDtbZ7uHce37fd8VSlWwh50PfRKqClWJXI8y6bu5uHj5e3wEEcJDP75txLBSx"
- "RYbdS7QfJ5PnsJIt5BbB4hQjkrQtjxlFILOXyvQDH/qmUCSJznDAYetkFTxsndAZDggkhCIf"
- "+qaLmWP1bu8oN+qrC+VGnd7t3bpKqrp4wBjl+ux8FUweSLwlXCnYCv2PHGgE1BLmTYykad2i"
- "kcOsi1TbZN7EKDfq67NZV5VsIeedvzQjCv5YK8R/4bw7Cl+/P7920+kJkBEq/hWWaPem45cQ"
- "YDybTfdSmf5CizckwHaAH9ATZldu7i560/ELwC+6RXdU6KzezAAAAABJRU5ErkJggg==")
-""" Pressed close button image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_inactive_center = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAbCAYAAAC9WOV0AAAABHNCSVQICAgIfAhkiAAAAElJ"
- "REFUCJlVyiEOgDAUBNHp3qmX5iYkyMpqBAaFILRdDGn4qybZB98yy3ZZrRu1PpABAQiDSLN+"
- "h4NLEU8CBAfoPHZUywr3M/wCTz8c3/qQrUcAAAAASUVORK5CYII=")
-""" Center inactive tab image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_inactive_left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAbCAYAAACjkdXHAAAABHNCSVQICAgIfAhkiAAAAf5J"
- "REFUOI2llE1rE1EUhp8bZwyhaZomk5DaD40hSWPQVkTd6KIIEUWlLqTEhTaLulBQ6sfKjeBC"
- "ECULXQku/Alx7d6/U1EQae45LjJpJ5NOnOKBgYG5z33Px3sG/iPMIc87QAmYBZKHgdOu69a2"
- "3/W2yrVGK5vPLTlxFV3Xrb3+8v1Ntd5oiSpWBmnEidKT972tar3R6ovSt4qoxoIdoFipNlpW"
- "B6AVRYFEHNWn3a8dz/PK1rIHEgN2UpnMseVTK7fUGBME48CFe88+3sh5+SXr1xmMSbABvJXz"
- "l9siYAVGWJ0Mu/OVZr5Q8CpWfFWzD2Imj2qu/fhtG4wRVUIZg0bDBsgtn15dt6qIKKBDQZ81"
- "kWmnzly6OZ+ZzhSt7jfK6CBjFMwEk5TWOy82AVQGhzVUb5RJEkC2fLK6JgIiPhioeZJJUhev"
- "3j2RTqdzooqge2ojCxwxqrnrG4/uq4Ida3HgAjMOJ4CZSq1+RVBUzCgQinDDstfa282jyeTU"
- "rhUGF4CJgMPKhbXbmw9VFfG7fBA4LCao7AAzi8cXz1kF0dENMqH38KgWnnd7nSMJxxE5wI4+"
- "MHyCaeeAYvPshQ0RJby3wVSDHxxgAVh99elb9/evndmfP3boW2FsqGNhMMCdBy8/fJ5KZ6at"
- "qL+3Q1dEzFkNGMX82ZWh18e0/vVT/wuFmdYVv/ruKgAAAABJRU5ErkJggg==")
-""" Left inactive tab image for the Chrome tab art. """
-
-#----------------------------------------------------------------------
-tab_inactive_right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAbCAYAAACjkdXHAAAABHNCSVQICAgIfAhkiAAAAhBJ"
- "REFUOI2llM9rE1EQxz8zb1dSTKNuYtW01kQDRoKFWi9FEEq1IooUUWoPokWCtVqkR69KsSBU"
- "8OJRPOhBxZNe/At6FBER/HFUPEq1IGn3ecgm2ZjdJODCHPY9vvP9fufNDPzHZ4DDQBrYBKwB"
- "ftfoJys/Kw9ef/1y8/6rh67rHgKS3WLl6cqqtcCGD58+vn+zdPXorUql8g5Y7wTWdd+y4Vus"
- "teQK+yfKi8/KwM5umBXAAgioCIP54gTQBzgdwTbsQZR0JpOfXXw+0w27hn9EBGMcyRcPnulJ"
- "pbKd2JvACKgKnpcePH99+TSwvT3YEphusKsqB4ZHp4FMNWUn5loSEVSFbZ63b8eeUhpwu5Md"
- "JBFRjHHk7LXb08CuNuAaZTgEEaFQHJoEvDjpakOYmnURUFWSvam+0ujJfqAnmlnABhG2jlTZ"
- "j19YuEzMm7dUu34hihrDQG7vGLCViPq0VruuvdquyWSvN3xsKhclvbXaoUQiihFlfLJ8iYiq"
- "O/EtUC2xGGF3vjAObAnI6stCsZbYCLwnEonNY+dulALvHWSH2YN2PXLq4hz/9HpjnmOs18DZ"
- "bP9IIL0+afV5juqzRgLFcV1n9u6LGWAgWnaMBFHBOIbi0MgU1S3jAcjyyw9xqpvzWou1Pj++"
- "f/t8b/7EAvBW5u48agU37abWs99rv1YfL81fkT8V34YxbZ696d4CfwEszZSZx6Z26wAAAABJ"
- "RU5ErkJggg==")
-""" Right inactive tab image for the Chrome tab art. """
-
-# For auibook
-# -----------
-
-AuiBaseTabCtrlId = 5380
-""" Base window identifier for AuiTabCtrl. """
-
-AUI_NB_TOP = 1 << 0
-""" With this style, tabs are drawn along the top of the notebook. """
-AUI_NB_LEFT = 1 << 1 # not implemented yet
-""" With this style, tabs are drawn along the left of the notebook.
-Not implemented yet. """
-AUI_NB_RIGHT = 1 << 2 # not implemented yet
-""" With this style, tabs are drawn along the right of the notebook.
-Not implemented yet. """
-AUI_NB_BOTTOM = 1 << 3
-""" With this style, tabs are drawn along the bottom of the notebook. """
-AUI_NB_TAB_SPLIT = 1 << 4
-""" Allows the tab control to be split by dragging a tab. """
-AUI_NB_TAB_MOVE = 1 << 5
-""" Allows a tab to be moved horizontally by dragging. """
-AUI_NB_TAB_EXTERNAL_MOVE = 1 << 6
-""" Allows a tab to be moved to another tab control. """
-AUI_NB_TAB_FIXED_WIDTH = 1 << 7
-""" With this style, all tabs have the same width. """
-AUI_NB_SCROLL_BUTTONS = 1 << 8
-""" With this style, left and right scroll buttons are displayed. """
-AUI_NB_WINDOWLIST_BUTTON = 1 << 9
-""" With this style, a drop-down list of windows is available. """
-AUI_NB_CLOSE_BUTTON = 1 << 10
-""" With this style, a close button is available on the tab bar. """
-AUI_NB_CLOSE_ON_ACTIVE_TAB = 1 << 11
-""" With this style, a close button is available on the active tab. """
-AUI_NB_CLOSE_ON_ALL_TABS = 1 << 12
-""" With this style, a close button is available on all tabs. """
-AUI_NB_MIDDLE_CLICK_CLOSE = 1 << 13
-""" Allows to close `AuiNotebook` tabs by mouse middle button click. """
-AUI_NB_SUB_NOTEBOOK = 1 << 14
-""" This style is used by `AuiManager` to create automatic `AuiNotebooks`. """
-AUI_NB_HIDE_ON_SINGLE_TAB = 1 << 15
-""" Hides the tab window if only one tab is present. """
-AUI_NB_SMART_TABS = 1 << 16
-""" Use `Smart Tabbing`, like ``Alt`` + ``Tab`` on Windows. """
-AUI_NB_USE_IMAGES_DROPDOWN = 1 << 17
-""" Uses images on dropdown window list menu instead of check items. """
-AUI_NB_CLOSE_ON_TAB_LEFT = 1 << 18
-""" Draws the tab close button on the left instead of on the right
-(a la Camino browser). """
-AUI_NB_TAB_FLOAT = 1 << 19
-""" Allows the floating of single tabs.
-Known limitation: when the notebook is more or less full screen, tabs
-cannot be dragged far enough outside of the notebook to become
-floating pages. """
-AUI_NB_DRAW_DND_TAB = 1 << 20
-""" Draws an image representation of a tab while dragging. """
-AUI_NB_ORDER_BY_ACCESS = 1 << 21
-""" Tab navigation order by last access time. """
-AUI_NB_NO_TAB_FOCUS = 1 << 22
-""" Don't draw tab focus rectangle. """
-
-AUI_NB_DEFAULT_STYLE = AUI_NB_TOP | AUI_NB_TAB_SPLIT | AUI_NB_TAB_MOVE | \
- AUI_NB_SCROLL_BUTTONS | AUI_NB_CLOSE_ON_ACTIVE_TAB | \
- AUI_NB_MIDDLE_CLICK_CLOSE | AUI_NB_DRAW_DND_TAB
-""" Default `AuiNotebook` style. """
-
-#----------------------------------------------------------------------
-Mondrian = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAHFJ"
- "REFUWIXt1jsKgDAQRdF7xY25cpcWC60kioI6Fm/ahHBCMh+BRmGMnAgEWnvPpzK8dvrFCCCA"
- "coD8og4c5Lr6WB3Q3l1TBwLYPuF3YS1gn1HphgEEEABcKERrGy0E3B0HFJg7C1N/f/kTBBBA"
- "+Vi+AMkgFEvBPD17AAAAAElFTkSuQmCC")
-""" Default icon for the Smart Tabbing dialog. """
-
-# -------------------------- #
-# - FrameManager Constants - #
-# -------------------------- #
-
-# Docking Styles
-AUI_DOCK_NONE = 0
-""" No docking direction. """
-AUI_DOCK_TOP = 1
-""" Top docking direction. """
-AUI_DOCK_RIGHT = 2
-""" Right docking direction. """
-AUI_DOCK_BOTTOM = 3
-""" Bottom docking direction. """
-AUI_DOCK_LEFT = 4
-""" Left docking direction. """
-AUI_DOCK_CENTER = 5
-""" Center docking direction. """
-AUI_DOCK_CENTRE = AUI_DOCK_CENTER
-""" Centre docking direction. """
-AUI_DOCK_NOTEBOOK_PAGE = 6
-""" Automatic AuiNotebooks docking style. """
-
-# Floating/Dragging Styles
-AUI_MGR_ALLOW_FLOATING = 1 << 0
-""" Allow floating of panes. """
-AUI_MGR_ALLOW_ACTIVE_PANE = 1 << 1
-""" If a pane becomes active, "highlight" it in the interface. """
-AUI_MGR_TRANSPARENT_DRAG = 1 << 2
-""" If the platform supports it, set transparency on a floating pane
-while it is dragged by the user. """
-AUI_MGR_TRANSPARENT_HINT = 1 << 3
-""" If the platform supports it, show a transparent hint window when
-the user is about to dock a floating pane. """
-AUI_MGR_VENETIAN_BLINDS_HINT = 1 << 4
-""" Show a "venetian blind" effect when the user is about to dock a
-floating pane. """
-AUI_MGR_RECTANGLE_HINT = 1 << 5
-""" Show a rectangle hint effect when the user is about to dock a
-floating pane. """
-AUI_MGR_HINT_FADE = 1 << 6
-""" If the platform supports it, the hint window will fade in and out. """
-AUI_MGR_NO_VENETIAN_BLINDS_FADE = 1 << 7
-""" Disables the "venetian blind" fade in and out. """
-AUI_MGR_LIVE_RESIZE = 1 << 8
-""" Live resize when the user drag a sash. """
-AUI_MGR_ANIMATE_FRAMES = 1 << 9
-""" Fade-out floating panes when they are closed (all platforms which support
-frames transparency) and show a moving rectangle when they are docked
-(Windows < Vista and GTK only). """
-AUI_MGR_AERO_DOCKING_GUIDES = 1 << 10
-""" Use the new Aero-style bitmaps as docking guides. """
-AUI_MGR_PREVIEW_MINIMIZED_PANES = 1 << 11
-""" Slide in and out minimized panes to preview them. """
-AUI_MGR_WHIDBEY_DOCKING_GUIDES = 1 << 12
-""" Use the new Whidbey-style bitmaps as docking guides. """
-AUI_MGR_SMOOTH_DOCKING = 1 << 13
-""" Performs a "smooth" docking of panes (a la PyQT). """
-AUI_MGR_USE_NATIVE_MINIFRAMES = 1 << 14
-""" Use miniframes with native caption bar as floating panes instead or custom
-drawn caption bars (forced on wxMac). """
-AUI_MGR_AUTONB_NO_CAPTION = 1 << 15
-""" Panes that merge into an automatic notebook will not have the pane
-caption visible. """
-
-
-AUI_MGR_DEFAULT = AUI_MGR_ALLOW_FLOATING | AUI_MGR_TRANSPARENT_HINT | \
- AUI_MGR_HINT_FADE | AUI_MGR_NO_VENETIAN_BLINDS_FADE
-""" Default `AuiManager` style. """
-
-# Panes Customization
-AUI_DOCKART_SASH_SIZE = 0
-""" Customizes the sash size. """
-AUI_DOCKART_CAPTION_SIZE = 1
-""" Customizes the caption size. """
-AUI_DOCKART_GRIPPER_SIZE = 2
-""" Customizes the gripper size. """
-AUI_DOCKART_PANE_BORDER_SIZE = 3
-""" Customizes the pane border size. """
-AUI_DOCKART_PANE_BUTTON_SIZE = 4
-""" Customizes the pane button size. """
-AUI_DOCKART_BACKGROUND_COLOUR = 5
-""" Customizes the background colour. """
-AUI_DOCKART_BACKGROUND_GRADIENT_COLOUR = 6
-""" Customizes the background gradient colour. """
-AUI_DOCKART_SASH_COLOUR = 7
-""" Customizes the sash colour. """
-AUI_DOCKART_ACTIVE_CAPTION_COLOUR = 8
-""" Customizes the active caption colour. """
-AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR = 9
-""" Customizes the active caption gradient colour. """
-AUI_DOCKART_INACTIVE_CAPTION_COLOUR = 10
-""" Customizes the inactive caption colour. """
-AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR = 11
-""" Customizes the inactive gradient caption colour. """
-AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR = 12
-""" Customizes the active caption text colour. """
-AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR = 13
-""" Customizes the inactive caption text colour. """
-AUI_DOCKART_BORDER_COLOUR = 14
-""" Customizes the border colour. """
-AUI_DOCKART_GRIPPER_COLOUR = 15
-""" Customizes the gripper colour. """
-AUI_DOCKART_CAPTION_FONT = 16
-""" Customizes the caption font. """
-AUI_DOCKART_GRADIENT_TYPE = 17
-""" Customizes the gradient type (no gradient, vertical or horizontal). """
-AUI_DOCKART_DRAW_SASH_GRIP = 18
-""" Draw a sash grip on the sash. """
-
-# Caption Gradient Type
-AUI_GRADIENT_NONE = 0
-""" No gradient on the captions. """
-AUI_GRADIENT_VERTICAL = 1
-""" Vertical gradient on the captions. """
-AUI_GRADIENT_HORIZONTAL = 2
-""" Horizontal gradient on the captions. """
-
-# Pane Button State
-AUI_BUTTON_STATE_NORMAL = 0
-""" Normal button state. """
-AUI_BUTTON_STATE_HOVER = 1 << 1
-""" Hovered button state. """
-AUI_BUTTON_STATE_PRESSED = 1 << 2
-""" Pressed button state. """
-AUI_BUTTON_STATE_DISABLED = 1 << 3
-""" Disabled button state. """
-AUI_BUTTON_STATE_HIDDEN = 1 << 4
-""" Hidden button state. """
-AUI_BUTTON_STATE_CHECKED = 1 << 5
-""" Checked button state. """
-
-# Pane minimize mode
-AUI_MINIMIZE_POS_SMART = 0x01
-""" Minimizes the pane on the closest tool bar. """
-AUI_MINIMIZE_POS_TOP = 0x02
-""" Minimizes the pane on the top tool bar. """
-AUI_MINIMIZE_POS_LEFT = 0x03
-""" Minimizes the pane on its left tool bar. """
-AUI_MINIMIZE_POS_RIGHT = 0x04
-""" Minimizes the pane on its right tool bar. """
-AUI_MINIMIZE_POS_BOTTOM = 0x05
-""" Minimizes the pane on its bottom tool bar. """
-AUI_MINIMIZE_POS_MASK = 0x07
-""" Mask to filter the position flags. """
-AUI_MINIMIZE_CAPT_HIDE = 0
-""" Hides the caption of the minimized pane. """
-AUI_MINIMIZE_CAPT_SMART = 0x08
-""" Displays the caption in the best rotation (horz or clockwise). """
-AUI_MINIMIZE_CAPT_HORZ = 0x10
-""" Displays the caption horizontally. """
-AUI_MINIMIZE_CAPT_MASK = 0x18
-""" Mask to filter the caption flags. """
-
-# Button kind
-AUI_BUTTON_CLOSE = 101
-""" Shows a close button on the pane. """
-AUI_BUTTON_MAXIMIZE_RESTORE = 102
-""" Shows a maximize/restore button on the pane. """
-AUI_BUTTON_MINIMIZE = 103
-""" Shows a minimize button on the pane. """
-AUI_BUTTON_PIN = 104
-""" Shows a pin button on the pane. """
-AUI_BUTTON_OPTIONS = 105
-""" Shows an option button on the pane (not implemented). """
-AUI_BUTTON_WINDOWLIST = 106
-""" Shows a window list button on the pane (for AuiNotebook). """
-AUI_BUTTON_LEFT = 107
-""" Shows a left button on the pane (for AuiNotebook). """
-AUI_BUTTON_RIGHT = 108
-""" Shows a right button on the pane (for AuiNotebook). """
-AUI_BUTTON_UP = 109
-""" Shows an up button on the pane (not implemented). """
-AUI_BUTTON_DOWN = 110
-""" Shows a down button on the pane (not implemented). """
-AUI_BUTTON_CUSTOM1 = 201
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM2 = 202
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM3 = 203
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM4 = 204
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM5 = 205
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM6 = 206
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM7 = 207
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM8 = 208
-""" Shows a custom button on the pane. """
-AUI_BUTTON_CUSTOM9 = 209
-""" Shows a custom button on the pane. """
-
-# Pane Insert Level
-AUI_INSERT_PANE = 0
-""" Level for inserting a pane. """
-AUI_INSERT_ROW = 1
-""" Level for inserting a row. """
-AUI_INSERT_DOCK = 2
-""" Level for inserting a dock. """
-
-# Action constants
-actionNone = 0
-""" No current action. """
-actionResize = 1
-""" Resize action. """
-actionClickButton = 2
-""" Click on a pane button action. """
-actionClickCaption = 3
-""" Click on a pane caption action. """
-actionDragToolbarPane = 4
-""" Drag a floating toolbar action. """
-actionDragFloatingPane = 5
-""" Drag a floating pane action. """
-
-# Drop/Float constants
-auiInsertRowPixels = 10
-""" Number of pixels between rows. """
-auiNewRowPixels = 40
-""" Number of pixels for a new inserted row. """
-auiLayerInsertPixels = 40
-""" Number of pixels between layers. """
-auiLayerInsertOffset = 5
-""" Number of offset pixels between layers. """
-auiToolBarLayer = 10
-""" AUI layer for a toolbar. """
-
-# some built in bitmaps
-
-if wx.Platform == "__WXMAC__":
-
- close_bits = "\xFF\xFF\xFF\xFF\x0F\xFE\x03\xF8\x01\xF0\x19\xF3\xB8\xE3\xF0" \
- "\xE1\xE0\xE0\xF0\xE1\xB8\xE3\x19\xF3\x01\xF0\x03\xF8\x0F\xFE\xFF\xFF"
- """ Close button bitmap for a pane on wxMAC. """
-
-elif wx.Platform == "__WXGTK__":
-
- close_bits = "\xff\xff\xff\xff\x07\xf0\xfb\xef\xdb\xed\x8b\xe8\x1b\xec\x3b\xee" \
- "\x1b\xec\x8b\xe8\xdb\xed\xfb\xef\x07\xf0\xff\xff\xff\xff\xff\xff"
- """ Close button bitmap for a pane on wxGTK. """
-
-else:
-
- close_bits = "\xff\xff\xff\xff\xff\xff\xff\xff\xcf\xf3\x9f\xf9\x3f\xfc\x7f\xfe" \
- "\x3f\xfc\x9f\xf9\xcf\xf3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
- """ Close button bitmap for a pane on wxMSW. """
-
-pin_bits = '\xff\xff\xff\xff\xff\xff\x1f\xfc\xdf\xfc\xdf\xfc\xdf\xfc\xdf\xfc' \
- '\xdf\xfc\x0f\xf8\x7f\xff\x7f\xff\x7f\xff\xff\xff\xff\xff\xff\xff'
-""" Pin button bitmap for a pane. """
-
-max_bits = '\xff\xff\xff\xff\xff\xff\x07\xf0\xf7\xf7\x07\xf0\xf7\xf7\xf7\xf7' \
- '\xf7\xf7\xf7\xf7\xf7\xf7\x07\xf0\xff\xff\xff\xff\xff\xff\xff\xff'
-""" Maximize button bitmap for a pane. """
-
-restore_bits = '\xff\xff\xff\xff\xff\xff\x1f\xf0\x1f\xf0\xdf\xf7\x07\xf4\x07\xf4' \
- '\xf7\xf5\xf7\xf1\xf7\xfd\xf7\xfd\x07\xfc\xff\xff\xff\xff\xff\xff'
-""" Restore/maximize button bitmap for a pane. """
-
-minimize_bits = '\xff\xff\xff\xff\xff\xff\x07\xf0\xf7\xf7\x07\xf0\xff\xff\xff\xff' \
- '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
-""" Minimize button bitmap for a pane. """
-
-restore_xpm = ["16 15 3 1",
- " c None",
- ". c #000000",
- "+ c #FFFFFF",
- " ",
- " .......... ",
- " .++++++++. ",
- " .......... ",
- " .++++++++. ",
- " ..........+++. ",
- " .++++++++.+++. ",
- " ..........+++. ",
- " .++++++++..... ",
- " .++++++++. ",
- " .++++++++. ",
- " .++++++++. ",
- " .++++++++. ",
- " .......... ",
- " "]
-""" Restore/minimize button bitmap for a pane. """
-
-#----------------------------------------------------------------------
-
-down_focus_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACaUlE"
- "QVRIib2WvWsUQRjGn5mdnWxyTaqz9q+QlLnGToSgWAYDNjbpNCAGDGIvaRPbNJGQyiAEbK+w"
- "sAo2qexyEhbxsvt+jMXc3u3liPfhmWeXnWVm9vc+vO/M7prVzTb+gxyA7Ye/nXPWWmvtXKBb"
- "B9YBcM5lWZam6by4QNcBsNamaeq9d87NmWutdc59+NgGoKIizCwsxMTMFI8oZmZilzomZiFm"
- "FWERaXbv7eyueO+TJEHM79LSkvfeWnv2qftgex2ASGDmkrUkKUspiIuCy5IL4qKQgnghdQVx"
- "ScKsxCKiaH8lIu99NOwAEFGsG4Dv5xeiQYOKBBYVUWJlFhIVVmIlEZGQJKVIYBbWoKqqwQN5"
- "nqdpuri42OMys6rGOG/X78yW0bXWNyLqcyyAEEIIYcYK3aB5Lazb4o5fsPc3ToFaloxBwMle"
- "6+9Pjfd7stda6HR85+dCPC86Y6ETcQEcHz32eZ7meZrnx0ePJnlk0vwenm70r/PkTgWdjjuV"
- "rnPPfvxaa+3NcL3GMaub7XdPtNFoZFn24tmX1/trAOLuM6aaFQwQYExAMPWNaUw1FW+eHj5/"
- "dbfZbDYajY33F7e1L4gUA5uo3fd8AWbQH70bjGqEyxLq3LoMYhKCgakCIWZoLLdkMRE43Iy0"
- "tWi9QOP8xoIFAyBUjF7dgOizb9iMhLmByxIAHbAGKYigUPX3hqog47hSvfCHfYRaDcNg3IzO"
- "7GmydRaGi37zMujrut/9l58nijROQ9yd3ZXLy8urq6vZWFmW9f+Yhrje++XlZR2keDpZa4f+"
- "H/pKkiR+/f9dDsDWgQW6QHcuxKg/ZbVtCjjzINkAAAAASUVORK5CYII=")
-""" VS2005 focused docking guide window down bitmap. """
-
-#----------------------------------------------------------------------
-down_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACY0lE"
- "QVRIib2WwWrUUBSG/3tzc5s2m0JhXPsU0u1s3Lkpui4W3PgAuhAFi2/QbesTVEphwCIU3Hbh"
- "wk2LG1fujJQgtMk55x4Xd2aS6VAzM479JyQhufnOz3/uzcQMBgP8BzkAeZ4756y11tqlQIui"
- "cACcc1mWpWm6ZK61Nk1T771zbilcxBxiAs659x/OAAQJIswsLMTEzBR/UczMxC51TMxCzEGE"
- "RaR39WB3b9N7nyTJkLu2tua9t9ZefLx69GYbgIgyc82hJqlrqYiriuuaK+Kqkop4JXUVcU3C"
- "HIhFJODsCxF57xu/RBT7BuDb958SNGgQUZYgEogDs5AE4UAcSEREk6QWUWbhoCGEENQDZVmm"
- "abq6ujrkMnMIIdZ5t31vsUC3+l+JaMyxAFRVVRds0C1azsS6O273hH24cwq0UjIGipP9/t+f"
- "6vZ7st9fKQpf/FqJ28+iEzoTF8Dx0RNflmlZpmV5fPR4lkdmzffwdGe8XyZ3Luh83Ll0k3vx"
- "4/dWf3+B/Q2OGQwGGxsbeZ5nWfbi2efXB1sA4uozZjRKDaAwRqGmvTCNGQ3F26eHz1/d7/V6"
- "eZ6fn5/f1bogCmhsonU+9AWY5nr0bjCtKS6LtrltGcQQ1MCMCiEm1MmtWUwETh6mjq1qw0Jd"
- "fmPD1ADQEWPYNyD6HBs2U2Vu4bIoEBpWE0EE6ej68NaoSBdXRi/8SR/a6qE29830yKFmm2c6"
- "2fTbp8FYN/0evPw0U6UuTXB39zYvLy+vr68XY2VZNv5imuB679fX10MT8Xyy1k58P4yVJEn8"
- "9/93OQBFURRFsRTcWH8An5lwqISXsWUAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window down bitmap. """
-
-#----------------------------------------------------------------------
-left_focus_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACVElE"
- "QVRIibWWvW8TQRDF3+7Ors8ShSsaSpo0dEgoFcINVChSBFRUkajpIKKgiPgP0pqGJiAhITqE"
- "FIk2BQUVHT2VK+y7ndmhWN/5Ixcbh8tYWvtO8vvdm5mdPXPv+RmuMgjA670/RGSttdZ2q354"
- "YgkAERVF4b3vHABMCIC11nsfQiCiqwJYa4noxbNvOw/6AJIk62ySJMLMwhI5MnPMnxzMzJHJ"
- "E0dmicxJhEXk+uTO0fFuCME5h1yDxbh5+zEz93q+LGOv50WUmStOVZSqkjJyWXJVcRm5LKWM"
- "3PNURq6iMKfIIpJw9n08Hg8Gg36/3wL4+eu3iHpykcWTS5pElCWJpMiJWaIk4RQ5RRERda4S"
- "UWbhpCmllDQA0+k0pZQFVwF3bzEAZ5N3jgje+0COnPVknbUAdm5cW5/1/eGPxcuL2saoAczC"
- "DQWAV0/fr1c/HxcBFNC8QGEMMu3NuyddAfIjG9QLjKJTB3NIHV050EZuoQI6+93q4P7B6TYA"
- "A2gW1xlC61K0OXi492HZ6EbAnGFqEmBmhlYc7A9HutRq/wgA5plSwDT9tORgfzgCNsmv2QfQ"
- "OvEwps7BooOPpwebxFsB83wazdWdl321BjOGWWejrciZ0+wBMwef76LPnx6trXFrivIfVOsl"
- "P2V7FwH4MhpuCTBLX7mjckU628naTImlrdDdLDJ59OT+XDDU8SwyTX+Y2bC7hIPVA+fty6/b"
- "SmwBODreHY/H0+n0P0WLomjegJYAIYTBYNAcp5cOa20IoQXgnMuvAh0GATg8scAEmHQrneMv"
- "3LAo6X/e0vAAAAAASUVORK5CYII=")
-""" VS2005 focused docking guide window left bitmap. """
-
-#----------------------------------------------------------------------
-left_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACTklE"
- "QVRIibWWPWsUURSG3/u5u8RiKxtLmzR2gqQSttFKhKBWqQL+BQXL4D9IGxsrBUGEFCIEbC0s"
- "rOzshYHt3Jl7PizuzsduJhs3Ts7C3Z2BfZ95zzn33DGnp6e4zvAAdnZ2vPfWWmvtsOpFUXgA"
- "3vvxeBxCuC6AtTaEEGP03g8LQE5RTo73/sXzr7sPJwCExTorLMxExMSJEhGl/MlBRJTIB0+J"
- "iBORMBMz3/xz7+h4L8bonFsCunH77lMiGo1CWabRKDArEVUkVeKq4jJRWVJVUZmoLLlMNAq+"
- "TFQlJpJEzCz49n0+n0+n08lk0gP4+es3swbvEnHwTlSYlViYJZEQcWJhkkSSmJnVuYpZiZhE"
- "RUREI7BYLESkTVE37t8hAM5KcM57hBCid97Z4K2zFsDurRubk74/+9G9vKhtjBrAdG4oALw6"
- "eLdZ/XxcBFBA8wKFMci012+fDQXIj2xQLzCKQR20kDqGcqCNXKcCuvzd6+DB4dk2AANoFtcl"
- "QutS9Dl49Pj9qtFLAS3D1CTALA2tOdifnehKq/0jAGgzpYBp+mnFwf7sBLhMfsM+gNaJhzF1"
- "DroOPpwdXibeC2jzaTRXty37eg2WDLPJRl+RM6fZA6YFn++iTx+fbKxxb4ryH1TrJT9lfxcB"
- "+Hwy2xJgVr5yR+WKDLaTtZkSK1thuFlk8ujJ/dkxNPAsMk1/mOWwu4KD9QPnzcsv20psATg6"
- "3pvP54vF4j9Fx+Nx8wa0AogxTqfT5ji9clhrY4w9AOdcfhUYMDyAoiiKohhWt4m/9Qss43IB"
- "CBMAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window left bitmap. """
-
-#----------------------------------------------------------------------
-right_focus_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACWElE"
- "QVRIibWWv2/TQBTHv3e+uyRbJwZWFv4AJNSRLjChSkhlYqrEzFZVDAwVC3PXsrAUISTExlKJ"
- "tQMSWzcmFqaqQqT2+8VwtuMkbiBp+mzF0pPz/dzX7z373IMXp7jJCABebf8JIXjvvffrVd8/"
- "9gFACGE4HMYY1w4AxgGA9z7GmFIKIdwUwHsfQth7/vXuoxEAFfWFV1ERZhYWYmJmykcOZmbi"
- "EAMTsxCzirCI3BrfPzjcTCkVRYFcg27cubfDzINBLEsaDKKIMXPFWpFUlZTEZclVxSVxWUpJ"
- "PIihJK5ImJVYRBSn387Pzzc2NkajUQ/g7McvEYuhIJYYCjUVMRYVUWJlFhIVVmIlERErikrE"
- "mIXVVFXVEnB5eamqWXAW8Gb39uKHevbzNwARZVFirUSIlFkqEVUD8Pb71P1Lt83LZ+8BAA7O"
- "AYABMAPcFfcvDXj97ikA5wxmHVVrf64LyA7Mau1so770uVjRQa1lzaKtSc2ZWAR4uHsyn2xq"
- "YBnjbFp4zsRCBw6Ptz/M5GoHgLla15AfUV8F/gEwA/Bk66jPgXNwMNhkyf199F816DIaB5bx"
- "yB2aO2qFLsp/+Xiy22YmczA1Cq4hLQlwsK56xwHgumLWln0pgPv8aWcmNdVF7TKujkWAL0db"
- "88nagXWb0xYgVn4XWf0CymdzWQNgapJzWC7HCnPQF5M5aBhXzthqgMkcoF57Zxx6YvaDMzO3"
- "148pwMHhJhFdXFwQ0XVEh8NhuwOaAqSUUkoxxvaLulp471NKPYC80ci7gXVFALB/7IExMF6j"
- "bht/AXIQRaTUgkiHAAAAAElFTkSuQmCC")
-""" VS2005 focused docking guide window right bitmap. """
-
-#----------------------------------------------------------------------
-right_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACVElE"
- "QVRIibWWv2sUQRTHvzM7M3dHmlQWtjb+AYKkTaOVCEKsrAL+CxaWwcY6bWysRAQRUtgEbC0E"
- "u3RWNsJCCILZfb8sZvdu925zej/yveMWHnvvM9837+2OOz09xU0qANjZ2QkheO+999vNXpZl"
- "ABBCGI/HMcabAnjvY4wppRDCdgHIJcrFCSG8eP7l7sMJABX1hVdREWYWFmJiZsqfLGZm4hAD"
- "E7MQs4qwiNz6c//oeC+lVBRFA+jqzr0DZh6NYlXRaBRFjJlr1pqkrqUiriqua66Iq0oq4lEM"
- "FXFNwqzEIqL4+u3i4mJ3d3cymQwAzn/8ErEYCmKJoVBTEWNRESVWZiFRYSVWEhGxoqhFjFlY"
- "TVVVLQFXV1eqOitRV68Pby+v6fnP3wBElEWJtRYhUmapRVQNwJvvvftXbpuXz94BABycAwAD"
- "YAa4a+5fGfDq7VMAzhnMOllt+rMpIDswa3JnG81lyMWaDppc1i7a2tCCiWWAB4dni8F2Dyxj"
- "nPUTL5hY6sDh0eP3c7HGAWCuyWvIJRragX8AzAA82T8ZcuAcHAw2W/JwH/3XHnQZrQPLeOQO"
- "zR21Rhflv3w4O5xGZnPQGwXXklYEOFg3e8cB4LrJbLrtKwHcp48Hc6FeF02Xcb2WAT6f7C8G"
- "GwfWbU5bglj7WWTNAyh/28sWAL1JzrK8HWvMwZBmc9Ayrp2x9QCzOUCz9s44DGj+hTM3t5ur"
- "Bzg63iOiy8tLItok6Xg8np6AeoCUUkopxjh9o64n731KaQCQDxr5NLAtBQBlWZZlucWkXf0F"
- "imtJnvbT2psAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window right bitmap. """
-
-#----------------------------------------------------------------------
-tab_focus_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAA3NCSVQICAjb4U/gAAAC10lE"
- "QVRIidWWT0gUcRTH387+ZveXZgzsbmvSsmqEfzBJSYz+gUsHCYJgISPytCQKFhJdpIN0qIUO"
- "ezIUaU/roQ5eEzp46ZT/DhG4haCXdSUPK+Wuzvze+02HgdFmFqMtD76Bx8yb3/v8vr/3Zn4z"
- "np6ReTgCYwAwdqfEGFMURVGU/wIdfaswAGCMcc5VVf1fXIBdBgCKoqiq+nxkobn3BABIkgBA"
- "hIiEJFAgorAOyxARBTKVoUAkgSiJkIhO73a/nLjGOd/nWkrPXbqLiH6/CgBEJiIaKA1BhkG6"
- "QF1Hw0BdoK6TLtCvMl2gIQhRCiQiCfPLm5ubtbW1YNXXtuzadyJTZV4AkKYkMpEkkRQoEUmQ"
- "JJQCpSAiMr1eg8hEJJSmlFJK0wdQLBYR0cl9laj7l6LGY5/tc2ejsrmdgeGJbG5nYHgym9uJ"
- "x9KHeGuMNd7B8fSMzCfvyerq6rHHn2bmEgPDE09G+/9WaSqZmRofisfSiadnotHoozclp94K"
- "oGWznNxn/e8q4LqznNwXmb4KuO6s4643lZyugOvOcj8PDyrgurOOe30r05tKZv7ALavXmszt"
- "rXZZL7EjhTmuU8lpRxNSyemZuUEAmJlLOPzU+CAAuKFluO7OWpF4LO1OPsTcejOOTcRepqXR"
- "tngs7Y6U4bbcqNrIF6bGh6yt0prAgm7kC6E2fSNfWF9b2d7e1jStvqGlbMSmeRsuP7zZZvp8"
- "PvCoW1s/a2qq7vddD57y3b7VZfmNfGFxadUQBgqztbWps7Pdy04uLq0WSyVJnoMRgUY45NM0"
- "bXZZ7OvtaA8vLOdeT85mP+4eXN35K/6W5nBjxFz5tv7+w8LWF3+oTW+IBpsavStf1+xIfTTY"
- "cNbknDPGfqsD5/xCa6AuDFe791xtEJyHIhHedTGw17tnj49EeFdH8GAkEAhwzgF+7HMZY5qm"
- "cc6tD6rDGGOMMUS075aN2Ho9R/R/9gsXZ7dKHM+ODQAAAABJRU5ErkJggg==")
-""" VS2005 focused docking guide window center bitmap. """
-
-#----------------------------------------------------------------------
-tab_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAA3NCSVQICAjb4U/gAAAC1klE"
- "QVRIidWVTWgTQRTHJ5vZZEyMLKSx1RbSImJbioeiCKIechLBU8CCtadAaaGIFC/iQTxowENO"
- "hUohp/Tiocdce/Gk/TiIpTm0JCnmA+OaFJs2u/PerIcp27IbKsZ66Ft47P5n3m/evLc768lm"
- "s+Q/GCWEBINBSqmiKIqinApU13VKCKGUMsZUVT1lrqIoqqq+frYyeP8cIUSgIIQgAgACcuAA"
- "wOUlDQCAA1UpcADkAAIREPHiwa2383cYY0TWwa7AlRuPAMDvVwkhiBYAmCBMjqaJBgfDANME"
- "g4NhoMHBr1KDg8kRQHBAREE+r1er1Z6enkOubbn8d0RLpV5CiLAEogUoEAUHAYAcBYLgIDgi"
- "ouX1mogWAIKwhBBCWD5Cms0mADi57xKX/6Ws8dgX+97ZqFxpb3JmPlfam5x5nyvtxWPpE7yc"
- "I+c7OJ5sNhsOh4PB4Kunn5aWE5Mz87MvJv4201QyszA3HY+lE88vRaPRYrHozLcDaNsoJ/fl"
- "xIcOuO4oJ/dNZqwDrjvqrOebSi52wHVHud+HJx1w3VFnvb6d5ZtKZv7AbZuvXMztZbvkR+wI"
- "oY7nVHLR0YRUcnFpeYoQsrSccPiFuSlCiBvahuvurFTisbQ7+ARz55txHCL2NmWOtsVjabfS"
- "hjt0L1Cu1BfmpuVRKReQ0HKlHhkxypV6Ib/ZaDQ0TesfGGqr2DTv+Ph4IBDw+XzEo9Zqv0Kh"
- "wOOxu10XfA8f3JS+XKmvrm2Z3ARuDQ9fGx297qXnV9e2mvv7Aj3HFQ5md8Snadru7u7Rua6q"
- "6sp6aTNXzX08OL67q7f9Q4PdTP1ZKCn5Qq321R8ZMQaiXf19VuGbJ1/8IZX+aNdAnxWJRHp7"
- "e7e3t4+4oVCo0Wjout5qtdx9YIwxxlqtlj3aVgmHw5qmbWxsHNWXUqppGmNM/lCd/aWUUgoA"
- "9mhbhTFGKT3sm67ruq7v7Oy4cR3bb5uW079be13FAAAAAElFTkSuQmCC")
-""" VS2005 unfocused docking guide window center bitmap. """
-
-#----------------------------------------------------------------------
-up_focus_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACTUlE"
- "QVRIic2WP28TMRjGH/85c1miqEF8CnbUgSFdukVRmZGQ+gW6Vgwd+hW60Yq1gMQMQzpHGZAg"
- "C6JS+QIMmUju/L5+Ge6ulzoRTcMh5TmdZfv8/vT4Pcu26h2N8R9kAZwMfltrtdZa60agx5fa"
- "ArDWpmmaJElTXGBmAWitkyRxzllrG+Zqra21bz+OAQQOzETExJ48EfniKURE5MkmljwRe6LA"
- "TMz8ZPbs9GzXOWeMQZHfW33/NOufvALALESUU8g95zlnnrKM8pwyT1nGmadHic085Z6Jgidm"
- "Dhh/mU6nnU6n1WrFXAA/fv7iIEECsxAH5uApELHnwBQ8Bc/MLMbkzELEFCSEEII4YD6fhxAK"
- "Tsx9/tQDEIgqOzRggAQQQEEBguIFgKoNqDdfvy1yYq41emG4QKkSpDQAiNQfFQClpBoZcaK2"
- "s0awEHzXVVyri1gxN7FaFuILu6qwtAyokqWWwEvcxNTTKsIK95Cqs4JJzV02vMJvHS/1cFFQ"
- "UGV+K3tSzWlZq/5bOWGllIio0mzpX+pZSJXdVRmOuabcItRC+ZfKcn+pFRvN65fvNihj9Y7G"
- "o9FoMplcX18f9M5lUx30zofD4WQyubm56R2Nm9oYY20B98XeRfPcAro+ei1uf/DBt9u+3c7b"
- "7f7gfTPc/cOr7HE36+5k3Z28u5N1u/uHV/dG3X+gfb7YW8dgpC1YD1vBjfP7oEW6Lvf0bHc6"
- "nc7n881YaZre3pjucJ1znU7n9qx+qLTWzrkVXGNMcav4d1kAx5camAGzRoiF/gCKPmudbgYP"
- "HQAAAABJRU5ErkJggg==")
-""" VS2005 focused docking guide window up bitmap. """
-
-#----------------------------------------------------------------------
-up_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACTklE"
- "QVRIic2WP4vUQBjGn/mTMUtgWS6yvb29XGGzzXXHwdWCcGBzH8BCweK+wnWyWKtot6DNge0V"
- "gjYnNn4BA9vdJvO+81ok2ewmi7d3RtgnZEgm8/545skwiZrNZvgPsgCSJLHWaq211r1Asyyz"
- "AKy1cRxHUdQzV2sdRZFzzlrbCxdlDmUC1to3Hy8BBA7MRMTEnjwR+fIoRUTkyUaWPBF7osBM"
- "zDy+fnR2vu+cM8ZU3KV+fLo+fPUUALMQUUGh8FwUnHvKcyoKyj3lOeee7kU291R4JgqemDng"
- "8ut8Ph+NRoPBoM0F8PPXbw4SJDALcWAOngIRew5MwVPwzMxiTMEsRExBQgghiAMWi0UIoclh"
- "VY8fegACUVWHBgwQAQIoKEBQngBQ3wPq9bfv7XzX7o1eGS5QqgIpDQAizUMFQCmpR3bf26qc"
- "NYKV4nVX7aumaavNjayWlfrSriotdQF1WKoD7nAj00yrLCvdQ+rOGiYNt2t4g9+mXprhoqCg"
- "qnxre1LPqatN762asFJKRFRltvIvzSykTndTwm2uqbYItdL+5aLbX2nDRvPiyds7tC2p2WyW"
- "pmmSJHEcP3/25cPFSXfQNjqeTE9fPhiPx0mSXF1d9bMxdrUD3OPJtH9uCd0evRX38Oi9Hw79"
- "cFgMh4dH7/rhHpxc5PfTPN3L070i3cvT9ODk4saqmz9on6eTbQy2tAPrYSe47XxvtUi35Z6d"
- "78/n88VicTdWHMfLP6Y1rnNuNBotv9W3ldbaObeBa4wp/yr+XRZAlmVZlvWCW+oP2FUt8NYb"
- "g5wAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window up bitmap. """
-
-#----------------------------------------------------------------------
-down = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACFUlE"
- "QVRIidWVPWvbUBSG3+tv8KKpnYtH/4DuJtCti2nntBm7depQWih0zT9w/AtSQsDQ0JIfkKFD"
- "wRC61Iu3uBgRiKXz1eFalizb8QfxkFdCurofz3l1zhVyg8EAe1BhH9BHyC3NWkTU/XYFQEVF"
- "mFlYiImZyR9ezMzEpXKJiVmIWUVYRJ7cPT/uHizhFgqF6+93Lz8fAhAxZo5ZY5I4log4ijiO"
- "OSKOIomIq+VSRByTMCuxiCiufo3H4yAI8txisQjgz98bUVNTEWNRESVWZiFRYSVWEhGxYjEW"
- "MWZhNVVVtQoQhuESrtfXw6e7JbTd+k1E6dv3+/3dQPeo3+8/3n22Si+OLgFLn52D4aLTun/V"
- "er8XnVZ1NKqM/lX9eTNaC92IC+D87HUlDMthWA7D87NXmyzZNL+nl0ez60Nyt4Jux91Kee71"
- "8Lbd6uxwzXFcr9drNpv+4f2bn59O2gDMAMC5ZJY5wOCcwZxlV7tkKr68PX338Vmj0cBev7f8"
- "d0GkSG0i0576Alza7707LGqBy2JZblYOPgnm4JJA8Blay41ZnAfO3xbumWjTQOv8+oKZA2AJ"
- "Y1o3wPucGXYLYVZwWQzQlJWmwIMs6Z8OJUHWcUU1aWZ9WKaGlo67xZlTbbbPbL7oq7fBTHm/"
- "Jx9+bBRpnea4x92D4XA4mUx2Y9VqteVcAEEQ1Ov13bhZ5fP7IFB4v/v41f8HFQ1ap0nfm7YA"
- "AAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window down bitmap. """
-
-#----------------------------------------------------------------------
-down_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACaUlE"
- "QVRIib2WvWsUQRjGn5mdnWxyTaqz9q+QlLnGToSgWAYDNjbpNCAGDGIvaRPbNJGQyiAEbK+w"
- "sAo2qexyEhbxsvt+jMXc3u3liPfhmWeXnWVm9vc+vO/M7prVzTb+gxyA7Ye/nXPWWmvtXKBb"
- "B9YBcM5lWZam6by4QNcBsNamaeq9d87NmWutdc59+NgGoKIizCwsxMTMFI8oZmZilzomZiFm"
- "FWERaXbv7eyueO+TJEHM79LSkvfeWnv2qftgex2ASGDmkrUkKUspiIuCy5IL4qKQgnghdQVx"
- "ScKsxCKiaH8lIu99NOwAEFGsG4Dv5xeiQYOKBBYVUWJlFhIVVmIlEZGQJKVIYBbWoKqqwQN5"
- "nqdpuri42OMys6rGOG/X78yW0bXWNyLqcyyAEEIIYcYK3aB5Lazb4o5fsPc3ToFaloxBwMle"
- "6+9Pjfd7stda6HR85+dCPC86Y6ETcQEcHz32eZ7meZrnx0ePJnlk0vwenm70r/PkTgWdjjuV"
- "rnPPfvxaa+3NcL3GMaub7XdPtNFoZFn24tmX1/trAOLuM6aaFQwQYExAMPWNaUw1FW+eHj5/"
- "dbfZbDYajY33F7e1L4gUA5uo3fd8AWbQH70bjGqEyxLq3LoMYhKCgakCIWZoLLdkMRE43Iy0"
- "tWi9QOP8xoIFAyBUjF7dgOizb9iMhLmByxIAHbAGKYigUPX3hqog47hSvfCHfYRaDcNg3IzO"
- "7GmydRaGi37zMujrut/9l58nijROQ9yd3ZXLy8urq6vZWFmW9f+Yhrje++XlZR2keDpZa4f+"
- "H/pKkiR+/f9dDsDWgQW6QHcuxKg/ZbVtCjjzINkAAAAASUVORK5CYII=")
-""" VS2005 focused docking guide window down bitmap. """
-
-#----------------------------------------------------------------------
-left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACMElE"
- "QVRIib2WPYsTURSG3zv3ThKJRSqblDYLwU6wFMKCViIEtbKQ/QdWgrXt/oO4hZWCIEIKUfYH"
- "WFgIATuraewHM3PPh8XNZCaTSWI2oydwMx/kfeY959wzMbPZDC3FaDTavOi23Wgron8n/Z8A"
- "rnry/NmXk/vXAAhLZCNhYSYiJvbkiciHTwgiIk8uduSJ2BMJMzHzjd93zi9OmwEAbt5+TETd"
- "bpxlvtuNmZWIcpLcc55z5inLKM8p85RlnHnqxi7zlHsmEk/MLPj6LUmS4XDYDPjx8xezxs56"
- "4thZUWFWYmEWT0LEnoVJPIlnZlZrc2YlYhIVERHtAIvFYquDu7cIgI0kttY5xHHccdbZKHaR"
- "jSIAJ8Pru5M+GX+vnm4rslEDmMoFBYCXT9/uVt+MbQAFNCxQGINAe/XmSVuA8MgGxQKjaNVB"
- "CSmiLQe6kqtUQJfHjQ7unV0eAjCABnFdIrQoRZODBw/frRvdCygZpiABZmmo5mAynupaq/0l"
- "ACgzpYBZ9dOag8l4CuyT37EPoEXiYUyRg6qD95dn+8QbAWU+jYbqlmWv12DJMLtsNBU5cFZ7"
- "wJTgzS76+OHRzho3pij8QLVYwlM2dxGAT9PxgQCz9hU6KlSktZ2sqymxthXam0UmjJ7QnxVD"
- "Lc8is+oPsxx2V3BQf+G8fvH5UIkDAOcXp0mSVF94V4ter5emab/frwMADAaDcOOYSNO00+mE"
- "4zrgePWaiAMwn8+PF932//MPv0Uk8OspzrYAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window left bitmap. """
-
-#----------------------------------------------------------------------
-left_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACVElE"
- "QVRIibWWvW8TQRDF3+7Ors8ShSsaSpo0dEgoFcINVChSBFRUkajpIKKgiPgP0pqGJiAhITqE"
- "FIk2BQUVHT2VK+y7ndmhWN/5Ixcbh8tYWvtO8vvdm5mdPXPv+RmuMgjA670/RGSttdZ2q354"
- "YgkAERVF4b3vHABMCIC11nsfQiCiqwJYa4noxbNvOw/6AJIk62ySJMLMwhI5MnPMnxzMzJHJ"
- "E0dmicxJhEXk+uTO0fFuCME5h1yDxbh5+zEz93q+LGOv50WUmStOVZSqkjJyWXJVcRm5LKWM"
- "3PNURq6iMKfIIpJw9n08Hg8Gg36/3wL4+eu3iHpykcWTS5pElCWJpMiJWaIk4RQ5RRERda4S"
- "UWbhpCmllDQA0+k0pZQFVwF3bzEAZ5N3jgje+0COnPVknbUAdm5cW5/1/eGPxcuL2saoAczC"
- "DQWAV0/fr1c/HxcBFNC8QGEMMu3NuyddAfIjG9QLjKJTB3NIHV050EZuoQI6+93q4P7B6TYA"
- "A2gW1xlC61K0OXi492HZ6EbAnGFqEmBmhlYc7A9HutRq/wgA5plSwDT9tORgfzgCNsmv2QfQ"
- "OvEwps7BooOPpwebxFsB83wazdWdl321BjOGWWejrciZ0+wBMwef76LPnx6trXFrivIfVOsl"
- "P2V7FwH4MhpuCTBLX7mjckU628naTImlrdDdLDJ59OT+XDDU8SwyTX+Y2bC7hIPVA+fty6/b"
- "SmwBODreHY/H0+n0P0WLomjegJYAIYTBYNAcp5cOa20IoQXgnMuvAh0GATg8scAEmHQrneMv"
- "3LAo6X/e0vAAAAAASUVORK5CYII=")
-""" VS2005 focused docking guide window left bitmap. """
-
-#----------------------------------------------------------------------
-right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACMklE"
- "QVRIibWWvY7TUBCFz83vojSuKNiShgdAol8hQYWQkJaKAuUNtqWmoeANFgoqhJAQHRLaB6BA"
- "orC0HWnSUEURK2LPmRmKayeO4wTysydWbI+c+e7xzDgOo9EIK0rTdDW4m0Ij4FBK07R1fdmj"
- "rh3QqZ6cPf965+ENAKbWardMTZWkUoVCUuIniiSFnW6HQqqQpkpVvfnn3uu395sBAG7fPSXZ"
- "73ezTPr9rqqTzGm5aJ5rJswy5jkzYZZpJux3O5kwFyVNqKqGb9/H4/Hx8XEz4PLnL1XvdtpC"
- "7Xba5qbqVFM1oZEqakoTmqiqerudqzqpNDczM+8Bs9lsrYNXw1ub7+nl+DcAVaOa0HJVESM1"
- "VzVzAG9+LF2/dZFfPHsPAAgIAQAcgDsQ1ly/NeDlu6cAQnC4V7L6/GtfQHTgXuSONopdk4sd"
- "HRS5vFy0l6EVE5sAD4YXq8GyBh4xwZcTr5jY6CDg0eMPtVjhAPBQ5HXEW9RUgX8A3AE8OTlv"
- "chACAhy+WHJzH/1XDaqM0oFHPGKHxo7aoYviTz5eDOeRxRwsjUIoSVsCAryaveIACNVkPi/7"
- "VoDw+dNpLbTURfNlrNcmwJfzk9Vg4cCrzekbEDs/i7x4AMWt3B0AsDTJUR7LscMcNGkxByVj"
- "7YztBljMAYq1V8ahQfU/nNrc7q/6e9FkMplOpyKyT9Kjo6MkSQaDQZqmdQdJkiRJsk92AFdX"
- "V71eLx7XAQfRYDCYH68FHOr19C8Ad0k9S0aHzwAAAABJRU5ErkJggg==")
-""" VS2005 unfocused docking guide window right bitmap. """
-
-#----------------------------------------------------------------------
-right_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAAA3NCSVQICAjb4U/gAAACWElE"
- "QVRIibWWv2/TQBTHv3e+uyRbJwZWFv4AJNSRLjChSkhlYqrEzFZVDAwVC3PXsrAUISTExlKJ"
- "tQMSWzcmFqaqQqT2+8VwtuMkbiBp+mzF0pPz/dzX7z373IMXp7jJCABebf8JIXjvvffrVd8/"
- "9gFACGE4HMYY1w4AxgGA9z7GmFIKIdwUwHsfQth7/vXuoxEAFfWFV1ERZhYWYmJmykcOZmbi"
- "EAMTsxCzirCI3BrfPzjcTCkVRYFcg27cubfDzINBLEsaDKKIMXPFWpFUlZTEZclVxSVxWUpJ"
- "PIihJK5ImJVYRBSn387Pzzc2NkajUQ/g7McvEYuhIJYYCjUVMRYVUWJlFhIVVmIlERErikrE"
- "mIXVVFXVEnB5eamqWXAW8Gb39uKHevbzNwARZVFirUSIlFkqEVUD8Pb71P1Lt83LZ+8BAA7O"
- "AYABMAPcFfcvDXj97ikA5wxmHVVrf64LyA7Mau1so770uVjRQa1lzaKtSc2ZWAR4uHsyn2xq"
- "YBnjbFp4zsRCBw6Ptz/M5GoHgLla15AfUV8F/gEwA/Bk66jPgXNwMNhkyf199F816DIaB5bx"
- "yB2aO2qFLsp/+Xiy22YmczA1Cq4hLQlwsK56xwHgumLWln0pgPv8aWcmNdVF7TKujkWAL0db"
- "88nagXWb0xYgVn4XWf0CymdzWQNgapJzWC7HCnPQF5M5aBhXzthqgMkcoF57Zxx6YvaDMzO3"
- "148pwMHhJhFdXFwQ0XVEh8NhuwOaAqSUUkoxxvaLulp471NKPYC80ci7gXVFALB/7IExMF6j"
- "bht/AXIQRaTUgkiHAAAAAElFTkSuQmCC")
-""" VS2005 focused docking guide window right bitmap. """
-
-#----------------------------------------------------------------------
-tab = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAA3NCSVQICAjb4U/gAAACq0lE"
- "QVRIidWWTWgTQRTHJ+3ETEugERrtF6QhFhKsIlgQRITm5LkBvdiDhBZKc5DiRXryoAEPPRUi"
- "pTnVi4cee5NePAitFtFoVxSyheYDa02KCd3deW/Gw2Cy7MZaIz307TK7/Gfeb9587Nvx6LpO"
- "TsA6TgJ6glyqHgcHB4/ub0ZvdRFCBApCCCIAICAHDgBcXcoAADhQLwUOgBxAIAIinju89iRz"
- "gzHW5Pb09BBCImO3AcDn8xJCECUAWCAsjpaFJgfTBMsCk4NposnB56UmB4sjgOCAiIJsbJXL"
- "5b6+PsYYtQev5b8hSi/tJIQIKRAloEAUHAQAchQIgoPgiIiys9NClAAIQgohhJBnCKnX6wDQ"
- "jFfZ0+TA/8xpIv6+8e5cN61Qm05ltEJtOvVMK9QS8ewRpWqj2js4nsb+nbv3cnU9OZ3KzD2c"
- "/NdIF9IrS4sziXg2+aA/FAr5/X5nvG1AW3o5ufOTL9rgur2c3Mcrd9rgur1Oe7wL6edtcN1e"
- "7v1wtw2u2+u0z2978S6kV/7CbRmv6sxdquVSH7HTR/9tE+PLUsqp2cz27k/7PTWbkcezifHl"
- "tbW1XC6n6zp1dONeWaUk4tnjTwtx5F81KEcSaQxzdT1p1xPxrFtpwY3d7C6WKkuLMypVqg4U"
- "tFiqBEfNYqmi57er1WogEBgOx1oqDVoz/77e2Onu6hq7emGg/6w9imKp8ubt149a/mI0rGqV"
- "8u7DlyuXRuzKp8/5yzG/yr9NrmEYm1uFba2svTq0c0eu+2LR88z7Qy905PW9vZwvOGqGQ73D"
- "Q1Lf9eR3vitlONQbHpLBYHBwcJAx5rGfd6rV6v7+vmEY7nVgjDHGDMNo1LZUIpGIc34ppYFA"
- "gDGmfqgOo5RSSgGgUdtSUSUANLmqWp0q/mTK82hFcX4Bm24GMv+uL+EAAAAASUVORK5CYII=")
-""" VS2005 unfocused docking guide window center bitmap. """
-
-#----------------------------------------------------------------------
-tab_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAA3NCSVQICAjb4U/gAAAC10lE"
- "QVRIidWWT0gUcRTH387+ZveXZgzsbmvSsmqEfzBJSYz+gUsHCYJgISPytCQKFhJdpIN0qIUO"
- "ezIUaU/roQ5eEzp46ZT/DhG4haCXdSUPK+Wuzvze+02HgdFmFqMtD76Bx8yb3/v8vr/3Zn4z"
- "np6ReTgCYwAwdqfEGFMURVGU/wIdfaswAGCMcc5VVf1fXIBdBgCKoqiq+nxkobn3BABIkgBA"
- "hIiEJFAgorAOyxARBTKVoUAkgSiJkIhO73a/nLjGOd/nWkrPXbqLiH6/CgBEJiIaKA1BhkG6"
- "QF1Hw0BdoK6TLtCvMl2gIQhRCiQiCfPLm5ubtbW1YNXXtuzadyJTZV4AkKYkMpEkkRQoEUmQ"
- "JJQCpSAiMr1eg8hEJJSmlFJK0wdQLBYR0cl9laj7l6LGY5/tc2ejsrmdgeGJbG5nYHgym9uJ"
- "x9KHeGuMNd7B8fSMzCfvyerq6rHHn2bmEgPDE09G+/9WaSqZmRofisfSiadnotHoozclp94K"
- "oGWznNxn/e8q4LqznNwXmb4KuO6s4643lZyugOvOcj8PDyrgurOOe30r05tKZv7ALavXmszt"
- "rXZZL7EjhTmuU8lpRxNSyemZuUEAmJlLOPzU+CAAuKFluO7OWpF4LO1OPsTcejOOTcRepqXR"
- "tngs7Y6U4bbcqNrIF6bGh6yt0prAgm7kC6E2fSNfWF9b2d7e1jStvqGlbMSmeRsuP7zZZvp8"
- "PvCoW1s/a2qq7vddD57y3b7VZfmNfGFxadUQBgqztbWps7Pdy04uLq0WSyVJnoMRgUY45NM0"
- "bXZZ7OvtaA8vLOdeT85mP+4eXN35K/6W5nBjxFz5tv7+w8LWF3+oTW+IBpsavStf1+xIfTTY"
- "cNbknDPGfqsD5/xCa6AuDFe791xtEJyHIhHedTGw17tnj49EeFdH8GAkEAhwzgF+7HMZY5qm"
- "cc6tD6rDGGOMMUS075aN2Ho9R/R/9gsXZ7dKHM+ODQAAAABJRU5ErkJggg==")
-""" VS2005 focused docking guide window center bitmap. """
-
-#----------------------------------------------------------------------
-up = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACHUlE"
- "QVRIidWWP4vUQBjGn8mfcyGQYiM2W8mWsRcLm22uWw6uFpQt7WwVLPwKVsp+gFMsAwqynY2F"
- "oLAgNu4HsEiz3E7mfee1yN9Lcueu7oo+IcPMZN4fz7yZzEQlSYIDyAMQx/F+ocvl0tkvsdKh"
- "uF6z8eLsAwDLlpmImNiQISKTX7mIiAx5vkeGiA2RZSZmvnF++9nzO0EQ9HC/vj2fPr0PgFmI"
- "KCObGc4y1oa0piwjbUhr1oau+Z42lBkmsoaY2eLjpzRN+7kAvn3/wVasWGYhtszWkCViw5bJ"
- "GrKGmVlcN2MWIiYr1lpr5QjYbDb9eQBw95YBIBBVdDiAC/iAAAoKEOQ3AJRtQL38/OXS/ALw"
- "XKcxXKBUAVIOAIjUDxUApaQcecV7A3DkuYJG8EVX7VpdtNXm+p4jjfjcrsotdQFlslQH3OH6"
- "bj2tPCx3Dyk7S5jU3K7hHr91vNTDRUFBFfkt7Uk5p6763lsxYaWUiKjCbOFf6llImd2+DLe5"
- "ruM0UlA5uazS7S/Usz88vnf2G2VLKkmSap989OD9m8WsO2gbnU7mD5/cHI/H+C/3yR24p5P5"
- "/rk5dHv0VtzpyWsThiYMszCcnrzaD/d4ttDXIx0NdTTMoqGOouPZ4pdR7e+iq3fzyTYGWzrY"
- "etj7zwOAOI7/yjmPHRfpFVKr1apqrNfrNE2bx+pOGgwGo9Eor1/wGwRB9QPwh/oH9oed9BPW"
- "YyQlBOJt4AAAAABJRU5ErkJggg==")
-""" VS2005 unfocused docking guide window up bitmap. """
-#----------------------------------------------------------------------
-up_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAAA3NCSVQICAjb4U/gAAACTUlE"
- "QVRIic2WP28TMRjGH/85c1miqEF8CnbUgSFdukVRmZGQ+gW6Vgwd+hW60Yq1gMQMQzpHGZAg"
- "C6JS+QIMmUju/L5+Ge6ulzoRTcMh5TmdZfv8/vT4Pcu26h2N8R9kAZwMfltrtdZa60agx5fa"
- "ArDWpmmaJElTXGBmAWitkyRxzllrG+Zqra21bz+OAQQOzETExJ48EfniKURE5MkmljwRe6LA"
- "TMz8ZPbs9GzXOWeMQZHfW33/NOufvALALESUU8g95zlnnrKM8pwyT1nGmadHic085Z6Jgidm"
- "Dhh/mU6nnU6n1WrFXAA/fv7iIEECsxAH5uApELHnwBQ8Bc/MLMbkzELEFCSEEII4YD6fhxAK"
- "Tsx9/tQDEIgqOzRggAQQQEEBguIFgKoNqDdfvy1yYq41emG4QKkSpDQAiNQfFQClpBoZcaK2"
- "s0awEHzXVVyri1gxN7FaFuILu6qwtAyokqWWwEvcxNTTKsIK95Cqs4JJzV02vMJvHS/1cFFQ"
- "UGV+K3tSzWlZq/5bOWGllIio0mzpX+pZSJXdVRmOuabcItRC+ZfKcn+pFRvN65fvNihj9Y7G"
- "o9FoMplcX18f9M5lUx30zofD4WQyubm56R2Nm9oYY20B98XeRfPcAro+ei1uf/DBt9u+3c7b"
- "7f7gfTPc/cOr7HE36+5k3Z28u5N1u/uHV/dG3X+gfb7YW8dgpC1YD1vBjfP7oEW6Lvf0bHc6"
- "nc7n881YaZre3pjucJ1znU7n9qx+qLTWzrkVXGNMcav4d1kAx5camAGzRoiF/gCKPmudbgYP"
- "HQAAAABJRU5ErkJggg==")
-""" VS2005 focused docking guide window up bitmap. """
-
-#----------------------------------------------------------------------
-aero_dock_pane = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAGcAAABlCAMAAABnVw3AAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAb3WKdHqPdnyRd3+deYGge4OifISifoallZaWgIy1g463hZC5hZG6iJO8o6Sk"
- "pKSkpKWlpaampqenqKmpqaqqqqurq6ysrKysra6urq+vr7CwsLGxsbKysrOzs7S0tLS0tLW1"
- "tba2tre3t7i4uLm5uru7vLy8vL29vr6+iZfLjJrNjpzPjpzQkZ7PkJ/SlKHSkaHek6Pgk6Th"
- "labjmKjlnqzhnqzjoa/npbPov8DAwMDAwMHBwsLCwsPDw8TExMXFxsbGycnJycrKysvLzMzM"
- "zM3Nzc7Ozs/Pz9DQ0NDQ0NHR0dLS0tPT09TU1NTU1tbW1tfX0tTY19jY1tjd2NjY2dnZ2dra"
- "2tvb29zc29zf3Nzc3N3d3d7e3t/fxs7szNPt0NXo0dfu1djk09js2tzk3d/k3d/m2Nzv3N/r"
- "1Nr02N713OH13OL23+X43+X54ODg4eHh4eLi4+Pj4uPm4uPn4+Tk5OTk5OXl5ubm5+fn4eLo"
- "4uTs5eXp5efv5+jo6Ojo6enp6urq6+vr6Onv7Ozs7O3t7e7u7u/v4Ob55Oj16Ov37e/26+/9"
- "7/D28PDw8fHx8vLy8/Pz8/P09PT09fX19vb29vf38vT89ff9+Pj4+Pj5+vr6+vr7+/v8/Pz8"
- "/f39/v7+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAsPpcmgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAf+SURBVGhD7Zr7d9tEGoa9UKBZCiapneBQN3bUQlgo13DbhXBrnRQnS0LJNhDbUO7s"
- "ErCtZWWZm2Rj2YHdbWQsCSQL2/yjZkaypBlpdKH14XA4vL8kkuebx3PR6HtnHBtHkfxyZoGs"
- "zMtR4sfjWJRi0mJRHZGlFhej1BCNs1XyocDbpa0ooEjtSfcDOHp6apyFAMzop4XfF2f0K7Vn"
- "qpyhr0bT5AwHvhpOkzPQ/TVNjt73lT6c4jzQNV/1p8npq77SBlNsj6b4Sr1Ozmtr99xpvQpm"
- "6LKvquyMVezOe9Ze81uDfNbRHLUtiPaqNi8KvrqqztvlRGGbypFJRM7mMoOtnPNHDV8JisOB"
- "QczyJolE4qy/MMAX6Pl23VdNGeeMBi+sE0AEzsYl92tgXqj5ipNcnNHo0oYX5OVsnfe8beab"
- "VVQcelHveTij895XrJdD6SGc4b+HCIglcHTK0yAPJ4dPAYOJtUd/78b3dAdE4owYz6zzcM4Q"
- "3tEop/v18ePHv+7aICJndMbdIDdn93Iwp/vh7VAf2iAy5/KuC+TmPN0J5HQ+eNDUB51Ji8ic"
- "zjMhnAwpIbT7TfjXU4+ZeuqfbRNE5miZEE5qGNSe2g//s/RDLYgzSoVwiKlammMmvVTjLE0w"
- "NH+UJmV37peFe3yInM3NZp0liz/azk+NM0ptt3tkdXZSxGQ1vD3EDOpiep6s9EVSeW+y5e03"
- "/1Qt+ie/Fseb1HnaE5AS+ieL7k+IHMwTzqDDcDofkB+6P8qfRkPtpAEkD9Bbxsa4J+RHyCgo"
- "hZRRm/xi9sxZH61smMBUQUEiRzwyC6G3jLk8IY8PdvElWMdf/6745om9DQP0UhELxDjQW8Zc"
- "ntDF6Z8CdXSoID/XuxtyTmlBHD0dcy0ALs4oCRLrdiBHpmDuncT7wdWenxZ+I5xhEgxMWHvg"
- "2AW3Z+RpD4c/ChMO6WVhjZlMmRwscMjhQwo5WM9+hT8WgyQwCgIVtOLIFPQSSdyKDb7CpwXg"
- "DLGa2b49g/W+1jc4LSrgcR1IJgdYpL5tk/o6i4YMYL/hX6TmYD76XtN0k9MPAE044Pt9/5ED"
- "qmERQ8DBPWHNMlT6O08eaqqeBManRWn+vrEvUdAbJTVVO3zyHX0SrtXQCOAtAQd71BnVdFQ/"
- "fvnQ6qGq9BOyLDcp1d83aj0KFJETqqIerj705Y9muMqgEcBbxhZwT1iVJSjt/dvOrR4q8oQj"
- "+/tGtWtyFEk5XD132/saDJeVKhYxABwNFrNVMV7P2he3nDi3+oksaQkQxVMSVga7ABxYc0Lu"
- "yZ+snjtxyxcarECqoIVUHXBUowGWSl1RFKVXbrj5xP2rH0tdNQGCeKqLlcEuZJGCFSckUfp4"
- "9f4TN9/wigRq6JXQQjLkiC1U2xx0VOKnN91636MHQqN7EnxIL7exMthFm1+G1yeFunDw6H23"
- "3vSpCOK5xjZaqKMCTodHtVVjgGryu5DT5ETIqWabWBnsojnhNJkm5Lwrwwpq9S20UEsBnDaW"
- "mOWrhrOuaJ8/8MgBx1ydA8a0nOV9sjdwm6tnoXed48vcwSMPfK5VjHAmj0bwEuC0aFTrpaIp"
- "4coTB2y1Mwe+VznLYmWwC5bNwq8+xxbZgyeuCGZwqbKOFuIgB/eEueL+RI03vq2U27Ogt4vZ"
- "SZKLuUcrE65l4YjO1vYr377RmMQWyjm0LNsL4BQblf2yMAvaXwjhwC4CnP1Kw/qSETiFPUSA"
- "A4x2IRPcHujFZxk0br8U2h43B8ye/RAOnKHXxykJd4Dx3AvmZOCQ33Fd7Zlwlpx+oxnXjgX3"
- "Hyoap4XNohzWb6VWHHx62eHQbMt2WuY/teeegxXEw9qT5i2vZvAwzn6VT0CO02+McDpt6PSp"
- "U+bf9N+MuEQF/YL4PICeL7a12UK9Wr5SclTlN1YMjv2cgqfSeHHIWm4H/lX0s/8wOCvnmbIT"
- "WMbWA+D5NmNj3KuVOsgCyF2cMyq5i7NutjfOmtsyytkj46+wWDb7fW6DdSKFoxJi/zqXUvBc"
- "Jr+EHCHNzMUdJWBrgJ5fNDsL6O61lFF6MWsGUevW8K4knMDZBOoXlvLecybXMmRVUrBEWnq8"
- "98BCE+br8eUuWrWeUr95zr1JZNjQf5P3kpp8re05uXPks4F9tHOSALpGzsqu/z65sjuZlCju"
- "GjkJMYDThUuGS+GcVIP2hsVtzP+/sfRf654Kl0CX6t2w/SqwxARx3nr8YVOPvxnAofl22P7b"
- "0wXCu9Npj3LlL6auOD3pbQ/dpMP2E3fXsd1ps21xxc5ilbf/DPU2csfLqXXyYfuj42zL23Fx"
- "M7k3pHx27NixzxT7WlY8HJqXlsP2e8e5Hd4DiqPJ8nev/unV75AbHg7NdvbC96/HSy3PVIhL"
- "6Caf/LqMXbrbwzRF9ywg/S5gc80DiveABXAELYWtroRzaIbvPus9miGcl6xfEOp417k4GFTE"
- "OTTb7G4QDmaI5z9rnQbL0A4rLl71Fcqh6RrfEZ+NeP4zHm8uXT4SeM5O+We7ARwZpsaG6nzr"
- "qrSXiXyeBebkhcyFCmuPdkLq+qpnWD5DEkfnMhd+wfkcLArOG+20Yaaw66s92kkFfvl5I/6l"
- "FgLPAad4TtsJOgecIifgHBB4wun9PgT3lphvrHtSKCI20u9qfJI6Yy33vjr/4Fg98Ee/hZ8H"
- "k2bLAu4tsYRomvPN5S1RDvSEU3tOXd4S2yICnnBqHJe3RLMD6AmjKNJ64PKW6C8VoSeMop8B"
- "XFekjMjBOHUAAAAASUVORK5CYII=")
-
-#----------------------------------------------------------------------
-aero_dock_pane_denied = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAGcAAABlCAYAAABQif3yAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "ABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAELhJREFUeF7tnfmPHNURx81v"
- "hEsCIQQCxCnu60d+AH5BCCGBAAkEP/AHABKKkEhCCErCHcA4WGAIYJwYbOMrGHzgE9vYxvje"
- "9drYa+99etd7zHov766PSn3avFFvu3v6dU9Pz2Q9K5Vmtt9VVd9X76zqOWtSCf4NDw9LfX39"
- "pMbGxklHR0YKxuHvzj570tVXXz3ptttuO6tgjUykioeGhuTbRYukrr5eRkZG5OTJkwUj6qcd"
- "2ptIOiyYLFV79khDQ0PBAPEDm/Zot2BCTZSKFy9eLGNjY6mCc+zYMaHdiaLDgsmxYOHCVIHB"
- "kvij3YIJNVEqLoNTwkgWAxysp2w5Fp2iDI6FkoqVxYBz4sQJSYPM6q1sORaIoyRAOX78eCpE"
- "W+VhzQIYsgAOwLC8TYvK4EQAB1DY66RBtIX1lIc1C4BQEgobHR1NhegAZXAsgDHDGgrj3CsN"
- "ohMwjJYtxwIglITCjh49mgrRAc5YcGpqa2Xjxo2yZs0aWaiKR/m5aNonn0hLS4vodUEq1NTc"
- "LO3t7UK7YbzBP3IgD3JZ9LXSzLJj505Zvny57Nu3T7p7eqS/v9/qzGzBggVO3h4tkwb19fU5"
- "wyft2lxPGN6QC/mQszQR8OGqqqpKlv3wg7S2tloJ61UISjpy5IgcPnw4FaIDMITaguPlFzmR"
- "F7lLGqRdu3bJ1q1bnTHcphf65UFJvb29cujQoVSoq6tLuHmNCw4yIC9yI39JAlRRUSH7q6tj"
- "g5I9RlFw6M1tbW2pUEdHh3D7mg84hnfkRw8lBRC3iNu3b88bGGenruDQm5t1oo5KKDpqGSx0"
- "cHAwEXDgHz2U1K0qEyMbx7hDmbtcXHDYSDa3tDsbyigAsVJLEhz0gD5KwnpYrcSd/IPmnKiW"
- "MzZ2TOoaWuWPr051PvnfFqCkwUEm9FESq7jlK1YkYjHuOScKOAMDA9LRmZG/vj07S/zPcxuA"
- "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"
- "VvwtWIicAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_dock_pane_bottom = PyEmbeddedImage(
- "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")
-
-#----------------------------------------------------------------------
-aero_dock_pane_center = PyEmbeddedImage(
- "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"
- "AAAASUVORK5CYII=")
-
-#----------------------------------------------------------------------
-aero_dock_pane_left = PyEmbeddedImage(
- "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")
-
-#----------------------------------------------------------------------
-aero_dock_pane_right = PyEmbeddedImage(
- "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"
- "SBhbDwAAAABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_dock_pane_top = PyEmbeddedImage(
- "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")
-
-#----------------------------------------------------------------------
-aero_down = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1MTo0MyArMDEwMMndnrAAAAAHdElNRQfZAxkQNALaVrQp"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAhJJREFUeNrtl01v2kAQ"
- "ht81FgECjUQUyeKjBrfi0EOJktxzg0uOSaWe0lNP/Wk99lBy7A+oSiO1ORE+BChSTjGfBuPs"
- "rATCNSkmyHtpX2ll2czOs+OdWTMMXIPBwKnVaqjX6xiORghK0UgEuVwOhmEgFosx1u/3ncrV"
- "FYrFItKpFMLhcGBwy7LQ7nRQrVZRLpXAfl5fO4l4HLquBwb9U41GA2avB6V+e4t0Oi0NTMpk"
- "MiCuOuavQlXVtRNGFs+NobPWLhphiO783YZ4gut3tc3OEN9/9fDQt5+0ebEbwttCHG9eR335"
- "9A0v5LhDx0LlW+tJm6OTLAr59WDHcTaDiwXk96AqNj5/+eH57fzsEIa+t4k7KMur8TMMPYkP"
- "744xMO8Wg+7puZ/5HrhfMI3ZbIb9ZByX708xHt6LK93Tc78+XHu+alXrlNdT+PTxgpepBtu2"
- "fc8nu1AotB18Op1C0w7EdRMxxrwJtyn8uXOW9ezIt5ErctlwT+SUrTKkKIo7cvrUTSYTKXDK"
- "dEo6V+RULrLkipxeuSy4p9QILmvP5yfhAi4z4VbCZZXaMkfZws/W+g//R+Hz4046fIe3R3S6"
- "0YEftChIOtuJR1zRLvHiQ4r3afRxCbLeCRzhzWK73Rb/gNRXvGP8WqmILkLTtEAbRQqu0+3i"
- "980NyuUyxGabpila5GarhVGALTJF/TKbFS1yIpFgj6VqglrJraorAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_down_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1NDo1OSArMDEwMEcuCiQAAAAHdElNRQfZAxkQNxVyqGIt"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAABENJREFUeNrtV02IHEUU"
- "/qq6529nFnezLtGNEEk0O5NZI4GoQaLxoCJ4NgjBgAe9K/5c9SToQbx6UaJgQLyJXgIRDUkk"
- "t+iS1YDgwSWHMGOyO7Mz0z/l97qqZ3vGnd0ZYb1oDY9XXT39vve+eu9VtwJHo9H4+ufrK8+f"
- "XQ6xuh5jt8ZCReNM3Ue9uvjl3NzcKUXgH06fvX7C1B7H08cNDpQUSvxjXlGofWqPWo8JYCiR"
- "CCchdZe6Q71OudE2uPy9gv7tEj57qXpeXbh4yXzQfAzvnTQoGwWPKL4WMM4JrERgZdwhDgh/"
- "sRExCMURLhjOu1rjrW8M3tz3I/QnPwW4/4RCPrIPjRpaWad2Er2Nl+JELoox+xwguP6tDYOD"
- "RYW4sz1wnjzeaW3nnh2VKQXDvYpH/FUYWShpLBPXH4fGPCNaudHC+ctNNG6HI/+35y4fTx6b"
- "wZGlaYTRznb91BszQmR0aKhWrUDo+fSrX0YaO/XsImqHp9HK+GcyOq2jOM6CG0kGByhabmo7"
- "ly1kHqJNg/X6PF7xAnz48Xd/A37t1adwqDqP9cAM2jIZ+0NbkVSQgAUuI6VE0lLpZ2xs9Z2e"
- "waHFBbz7xjNYa/7eF7mWdbkfG/QlGpqL/SDeZEDbyPlQbKx2YuhRMocTt367F+PevTN45+0X"
- "0F5bTbRcy3r/WQzZyNplJIO0x7YMPIp2ks2XpM4zJXQr9FCvHcBH77+OBw7ux83OYJmmVKcM"
- "JlE7SbekD57SnaUs21iGu5s8vLoBzNy3P9HDI7vnm83GYqg0w7MJF2QiV8YhO52oLep2Y0Q5"
- "DQA6VgO332IvNNnIaSSIbB/3XaR9qmN3PUF/jV3kUZrA8WbCqeFSs3tiqEXY043tUHG6O2rr"
- "yEcNM1QtiV1hwLW9NNtt5KH1Ktl7bR9Mki6lHtv37K0iz+5zWr6h29KByM81DPaS9z0Fhemc"
- "QpnHWdGzbTWn7enmTQCenmI9onepW1xYC4Amy1Hx9wVtnUzBO4x8nTcKSicLXpKuPCA8m7GT"
- "gKeUC3iX4NKaNwjeZka3erbWgyDajLwb2PY5xasC1xl8QnNKtSRiPCG4ZHaPtrpOpDIEQ4KJ"
- "ogztkuotulrmYpEbnReqo836NhOCJ22UKD2JPpLorbRDY50bAA8t9V1Kj1T3tHt9cm8xySEz"
- "IXjax/sMOIxkDIDDlQV2Pl7HAd9KUtvZMe574a6M/8H/q+D63/Mii+Pfzc+jMmugwka+2w4U"
- "WdjlnMY054Lrv/xQDheuedj3RIQSi7/C7lLJASV2mIJnDxb/H/T2gC2xyN5e4PM5HpF5vqnM"
- "c71M0LlvFc4c9eEfXTq8Ur96pfr58nHUHjV4cEpjhqAVgvHDgocNHYDteOOCy6nGMwT8KEGL"
- "rP5JadCjX/mu98dFoBpfwbGHl2z3bDab5uq1ZZxbiXGztXufyPeUNV6sajxypI7Z2Vn1F7X+"
- "m7ZM/KBNAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_down_focus_single = aero_down_focus
-
-#----------------------------------------------------------------------
-aero_down_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1MTo0MyArMDEwMMndnrAAAAAHdElNRQfZAxkQNALaVrQp"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAhJJREFUeNrtl01v2kAQ"
- "ht81FgECjUQUyeKjBrfi0EOJktxzg0uOSaWe0lNP/Wk99lBy7A+oSiO1ORE+BChSTjGfBuPs"
- "rATCNSkmyHtpX2ll2czOs+OdWTMMXIPBwKnVaqjX6xiORghK0UgEuVwOhmEgFosx1u/3ncrV"
- "FYrFItKpFMLhcGBwy7LQ7nRQrVZRLpXAfl5fO4l4HLquBwb9U41GA2avB6V+e4t0Oi0NTMpk"
- "MiCuOuavQlXVtRNGFs+NobPWLhphiO783YZ4gut3tc3OEN9/9fDQt5+0ebEbwttCHG9eR335"
- "9A0v5LhDx0LlW+tJm6OTLAr59WDHcTaDiwXk96AqNj5/+eH57fzsEIa+t4k7KMur8TMMPYkP"
- "744xMO8Wg+7puZ/5HrhfMI3ZbIb9ZByX708xHt6LK93Tc78+XHu+alXrlNdT+PTxgpepBtu2"
- "fc8nu1AotB18Op1C0w7EdRMxxrwJtyn8uXOW9ezIt5ErctlwT+SUrTKkKIo7cvrUTSYTKXDK"
- "dEo6V+RULrLkipxeuSy4p9QILmvP5yfhAi4z4VbCZZXaMkfZws/W+g//R+Hz4046fIe3R3S6"
- "0YEftChIOtuJR1zRLvHiQ4r3afRxCbLeCRzhzWK73Rb/gNRXvGP8WqmILkLTtEAbRQqu0+3i"
- "980NyuUyxGabpila5GarhVGALTJF/TKbFS1yIpFgj6VqglrJraorAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0NDo0MCArMDEwMN+SkKkAAAAHdElNRQfZAxkQMBKjjWFJ"
- "AAAACXBIWXMAAAsRAAALEQF/ZF+RAAAABGdBTUEAALGPC/xhBQAAAkJJREFUeNrtV02P0lAU"
- "PS2lUEIlkxlHpCAEZ89Ol27M8A/czMK4duO/caeJiSZu3SgTN25M3DhBFkMmDhQJEK0apnwM"
- "0wK1t+Z1YOqyr2w8yWuT95qcc9+97/UeAS6m06nTarWg6zrOZzPwhJJMolQqoVwuI5VKCcJk"
- "MnFqh4eoVCrQcjnIssxVgGVZ6PX7qNfrqO7vQ/jSaDhqOo1isciV+Co6nQ5G4zFEvd2GpmmR"
- "khPy+TyIW7xwt0SSpMgFECdxi5EzX8HGBDiOs1kBDH7ymaKoIAjCpQAiXy6XXAlFUfR4aBA5"
- "EyBGET2R630LM+tvxpmQNQG8BpE3T8/w8cjEb3MREMe1BuLxOL4bY3z4NIAob/nzq1x+DYQt"
- "IBaLodM18PpNA0p6Fwn5kpzqjXZmTUCYRUiR//x1hucv3yOl3lhbY4Gyd+g7QJGffG3jxau3"
- "SCg7gXUWLH3nC6BfJI2wUC4V8OTxAZ4+qwXWiGexWPgp8J40EeYwTRM72xk8OrgfEMC+CRzD"
- "sEUYhoFi4ToePriDuBTzBdD20zqrOWl1Mmz0ej1kMhncu3sTn5u2XwORHEOG4XAIbfcazm0F"
- "aUXExdQO3oS8MXZbrz1t6ZL/gG3ba2uRtEKUYirMf2Hj/cB/AZ4A1hxsREDCdUKrVyNvULD0"
- "HyBO4vackXsokXNtGR0R3t0RkSddf0iX1Hw+h3TbNYnvajXPKGSzWe7ekILsDwY4bjZRrVbh"
- "JX80Gnnu+Fu3ixlnd0zR3yoUPHesqqrwB18A5ik1mQXQAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_left_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0NjozNCArMDEwMCXtbZ4AAAAHdElNRQfZAxkQLw561jOY"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAABAVJREFUeNrtV02IHEUY"
- "fVXTO70/M+yOExNd4oIRkgljDIiyQZR4FD0rQlDw6E1RDwkoIqiHXLzlKK4Iwb2peFDJHgxx"
- "dS+LcTMhhw0qJkvG7Jjsz8xOd1f5qqu6p9eNMB2Y9WLBm6+nf+p79X2vvqoSYFtdXf3ql8bl"
- "52aWQlxbVxhkmyxJvFz3UK8dmq1Wqy8IOv/+xEzjSV17AsePaTw0KjDCF4cFUKQtEB6vJSz6"
- "bWYYERFqoEvbpW3TXm1rfDsvIBsX8OlLte/E3PkL+vTqNN4/rlGCQEE6hzGEta5TkYOATsCf"
- "SBtCGqGy9wJ2+vo5jbcqP0J+fDHA/qcEisqyHnSL6MTjz+GnBYxv+SdDso/x1rvgPBudvb6A"
- "8Z0nrQNpXsJIZaxBNt/a/c8bJf0vME3pDAGlbG4ieikYLUgrPOV6MULU4i5EqK0j7XyYazMz"
- "RGYkXsImhbAvpIJ0Q8/jHM55MmLl+out6hFMCUR8OyCksiMX0kYj7gV26CInCZVxbvofKQhs"
- "0Jq6IPkkISKTFKQRcB9plWGtt+ujH8QRcBgfEmj+3sYe1hVTY0J3PyUQhYiLhHkQa8Hlalvo"
- "7hITRYErl5r44txNrNyMUGQkEpKZFLBUKiu2AjKhduKLLXKKkB9MjQn89kcLs18vo+Dvi++b"
- "gQZRTwtecjMk3UiaHAlb97VlGidfO2306dy8N+krNK5cx+kz51GamMKo77TB3Ea6Nw1lEoFA"
- "WSKR00SaBpU/Dff4EteuN/HOB5/dUZyh01hKwITEpMDAEAl0EpV/6KIPDDPHlxYX8eprH94x"
- "Oqb/bmT7TFMw09SodgJUWJ/HKZoSpWqmjU9BDMWrI1dJt0L20w7Wj+LMRyfxxtuf7Hi2fFvh"
- "V+45vuTYp9IUBMAaZ8IGmW0SbaKjLLZULzr9ovFXhMn778V7p07sIGD62wyxvQ6ABDZC+6BD"
- "bEUWXYdA5UOH33yzAhw++ADeffMZ+MVCSsD013YzIUMgIgHFkWt+TFBJW6TYpQ2IxOaB6efz"
- "qwHWS+N4/tkDGC95lgCfbdJXkNUA1E7RKbcoZStknqacKBeaIer7q5jurGGC+8Em05Msfr0I"
- "DLgttRRGDpQxe4Ob3s3tQ/F2g4BJ7Q90fivYuaP4z3dE/xOQye9uMjG+ksrg7RkRGKMwy0W5"
- "KyR8yr7M+r5GPRrf3itHhjC3WODhJILPyVv27FowSgy7tWAo51pgmqkBoVtlhyPEffmePX+U"
- "6bg8h/iM6D16pH6jvjC/9+zSMTw4rXGIZ8MJeivTMS/hmzOiMCTypSl2Trulbeldp71NIsu8"
- "cfEnoHZrHo8dfdjuMVqtll74eQlnLyusbAz2gHbfmMSLNYnHH6mjUqmIvwGdqbciWIcx6wAA"
- "AABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_left_focus_single = aero_left_focus
-
-#----------------------------------------------------------------------
-aero_left_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0NDo0MCArMDEwMN+SkKkAAAAHdElNRQfZAxkQMBKjjWFJ"
- "AAAACXBIWXMAAAsRAAALEQF/ZF+RAAAABGdBTUEAALGPC/xhBQAAAkJJREFUeNrtV02P0lAU"
- "PS2lUEIlkxlHpCAEZ89Ol27M8A/czMK4duO/caeJiSZu3SgTN25M3DhBFkMmDhQJEK0apnwM"
- "0wK1t+Z1YOqyr2w8yWuT95qcc9+97/UeAS6m06nTarWg6zrOZzPwhJJMolQqoVwuI5VKCcJk"
- "MnFqh4eoVCrQcjnIssxVgGVZ6PX7qNfrqO7vQ/jSaDhqOo1isciV+Co6nQ5G4zFEvd2GpmmR"
- "khPy+TyIW7xwt0SSpMgFECdxi5EzX8HGBDiOs1kBDH7ymaKoIAjCpQAiXy6XXAlFUfR4aBA5"
- "EyBGET2R630LM+tvxpmQNQG8BpE3T8/w8cjEb3MREMe1BuLxOL4bY3z4NIAob/nzq1x+DYQt"
- "IBaLodM18PpNA0p6Fwn5kpzqjXZmTUCYRUiR//x1hucv3yOl3lhbY4Gyd+g7QJGffG3jxau3"
- "SCg7gXUWLH3nC6BfJI2wUC4V8OTxAZ4+qwXWiGexWPgp8J40EeYwTRM72xk8OrgfEMC+CRzD"
- "sEUYhoFi4ToePriDuBTzBdD20zqrOWl1Mmz0ej1kMhncu3sTn5u2XwORHEOG4XAIbfcazm0F"
- "aUXExdQO3oS8MXZbrz1t6ZL/gG3ba2uRtEKUYirMf2Hj/cB/AZ4A1hxsREDCdUKrVyNvULD0"
- "HyBO4vackXsokXNtGR0R3t0RkSddf0iX1Hw+h3TbNYnvajXPKGSzWe7ekILsDwY4bjZRrVbh"
- "JX80Gnnu+Fu3ixlnd0zR3yoUPHesqqrwB18A5ik1mQXQAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0NToxOCArMDEwMEtfu5QAAAAHdElNRQfZAxkQLyM/CW/t"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAkpJREFUeNrtVz2PEkEY"
- "fnbZQ+AgGD+R5YSAxVkRLfwF5vgH11xlbeNPsbE2Ftf4C+RiY2OijeGu8GIusEjgiJ4Ej689"
- "YHedd8zgsBgt3Fkan+TNZnY3eZ55v2ZeDQzj8dir1+uwLAsT24ZKxGMxFAoFFItFJBIJTRuN"
- "Rl714ADlchlmNotoNKpUwHQ6RbvTQa1WQ2VnB9rh0ZGXSiaRz+eVEvvRbDYxGA6hW40GTNMM"
- "lZyQy+VA3PoFc4lhGKELIE7i1kNn9mFtAjzPW68AgUXwhaKwoGnaLwFE7rru4gOZWKsiFwJ0"
- "/+7tqQ6rw7JTVxcd4hOchvyCVPXOHbz9cA57soHtUhqO4yjxgMBSDogPo4mDN+/OcCVt4Ob1"
- "JGazmTJvLEIgu4Uwmzt48fI9mq2vPBzyP/9qlF9LZeh/KeP5/mucffuOSCTC/wnCBOcfPSDj"
- "6bN9fDppBOYJucJ4DtARSfbzKI6vCHjyeA+X05sYstMrCJA3RZVxAZTpwvx4tPcQ166m0ev1"
- "Ak2+lTIkctk1G0YEu7sPeBV0u91AyQmCyxALEiBUbcYjuH/vFnsC7XY7cHK5yS01Iqr3ZELH"
- "3VIc5g0X/X4/cHKx4d+ehiTgYvwFd0w3sIT7G1auQiRCZefzY+33gf8CuAD5eAxdwCXWfqkH"
- "qLyAyKDNUismTuLmkxErSmTZWEbZr/puSOQxNh9Sg5vP5zBKbEh8Va3yQSGTySifDWmTndNT"
- "fDw+RqVSAQ/+YDDg0/HnVgu24umYdn97a4tPx6lUSvsBjEDOU65zEi4AAAAASUVORK5CYII=")
-
-#----------------------------------------------------------------------
-aero_right_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0ODo0NiArMDEwMKZ+RR0AAAAHdElNRQfZAxkQMQU5RdXP"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAA/ZJREFUeNrtV09oVEcY"
- "/83sy27UfZhtNLWxKNaDK6sNlJZIabHgpdB7KYiCR28W7EEPIkLbgz1481hIaSt4a6UUWkyh"
- "Imm9hKbpSg7pIUVjotnGJG5235uZft+bmc1bk8A+NTn1W743b98bvt9vvn9vRoBkbm7uxp/V"
- "ux8Mjce4t6ixkdJflDhZCVApH7je29v7oSDwX48PVd8x5bdx9IjB/q0CW2hitwDyNOZIA7qX"
- "sNqp8DIUaWyAJo1NGus0/l03+GlEQFZv46sT5Z/F8K3b5vLcID49alCEQE46wESFHZ1RkYGA"
- "8UoXZZiQQazts4iMfnzT4JPSb5BfjkV49V2BvLasN1oUgQR0OfieAGPLh+SSl8nfZhPA097p"
- "KwgwdpawbogEnpFOjazpeBv3P6uXzDrKok2KgNY2NopQcpwL0iaedlY4EY14hiQ0Fsg4DL7n"
- "yhCplQSeTUuFndBKSLf0LOBw4H7F2tlLRr1CsEVA0eyIVNLLAi19K9VhnWvHOOc7UllI6BQ4"
- "21euHLkvSHrjiUgfAp7I9d9H/n44VUdPl1hhbdrzoxM1ZrV6W7FfmyegYiRNIp8TmH6k8N3N"
- "R5j4axalvGwj8TyqUupJrhDgdqktCZb5xRjXf5jEvw9q2EutudXNMgKyPT96jVgV2kNgX1Jc"
- "Ur2w0VS4+MWPqE5Mob+giAS9z6j84/jrVC7ERrcW0+aByJXi03Lhs69x7/4sXqLszOIBg7Xd"
- "7xPRpD3ALklCsE6nOX3mc1RHR9FNOaLWMLiWxs5e7O4jF+amsuoXm5Th0KxB73JEEwMMyNXF"
- "dvXKOQQ7dmFiXnVchp5IRC5oENgy/VmiZJ+n7zKtA9/T2ve0+kAELNDLZY1VH/1L54+j/5Wd"
- "+GVGZWrF3tVRAm71CWEsKQuq0x4AEWB2DdV6gkI+h7Nn38ee3SXcmIptvDJ0Ik8gcbu2thMi"
- "ZIr3HJFqI6CIgKaJtvNtLwY4duw1LBS349vJJgJC9puULASiBNwkMW/QAw4Dd1jpynGFgKvR"
- "Wfo+9+yUGBwIgd0hRmbipDXL9LehQ1mvCTEOL0alq8DLP080vpmOkd8XYqzWecI9j6zakEzX"
- "NW49iFGPs6TcCySw2fI/Aemvm8mEsXLuPtixRWAblURI3/7NIFGgwg+7JBYoxxk7OHW4C8Oj"
- "OTqcKBSoaEMq0iIpb8u6iSbNRRedkHLP0Ih8K+6mimZbhcCeP0ICDoeRnBGDNw5XZip3Rvqu"
- "jR/BvkGDA7QB6SG0kPeGBFjgM6JgEtnClIDT2OAzIZFYpPExEZmkB2O/A+X5Ebw5cMjuM2u1"
- "mrnzxziu3dWYXtrYA9qubRIflSXeer2CUqkk/gNN/sDRnOMoBAAAAABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_right_focus_single = aero_right_focus
-
-#----------------------------------------------------------------------
-aero_right_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo0NToxOCArMDEwMEtfu5QAAAAHdElNRQfZAxkQLyM/CW/t"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAkpJREFUeNrtVz2PEkEY"
- "fnbZQ+AgGD+R5YSAxVkRLfwF5vgH11xlbeNPsbE2Ftf4C+RiY2OijeGu8GIusEjgiJ4Ej689"
- "YHedd8zgsBgt3Fkan+TNZnY3eZ55v2ZeDQzj8dir1+uwLAsT24ZKxGMxFAoFFItFJBIJTRuN"
- "Rl714ADlchlmNotoNKpUwHQ6RbvTQa1WQ2VnB9rh0ZGXSiaRz+eVEvvRbDYxGA6hW40GTNMM"
- "lZyQy+VA3PoFc4lhGKELIE7i1kNn9mFtAjzPW68AgUXwhaKwoGnaLwFE7rru4gOZWKsiFwJ0"
- "/+7tqQ6rw7JTVxcd4hOchvyCVPXOHbz9cA57soHtUhqO4yjxgMBSDogPo4mDN+/OcCVt4Ob1"
- "JGazmTJvLEIgu4Uwmzt48fI9mq2vPBzyP/9qlF9LZeh/KeP5/mucffuOSCTC/wnCBOcfPSDj"
- "6bN9fDppBOYJucJ4DtARSfbzKI6vCHjyeA+X05sYstMrCJA3RZVxAZTpwvx4tPcQ166m0ev1"
- "Ak2+lTIkctk1G0YEu7sPeBV0u91AyQmCyxALEiBUbcYjuH/vFnsC7XY7cHK5yS01Iqr3ZELH"
- "3VIc5g0X/X4/cHKx4d+ehiTgYvwFd0w3sIT7G1auQiRCZefzY+33gf8CuAD5eAxdwCXWfqkH"
- "qLyAyKDNUismTuLmkxErSmTZWEbZr/puSOQxNh9Sg5vP5zBKbEh8Va3yQSGTySifDWmTndNT"
- "fDw+RqVSAQ/+YDDg0/HnVgu24umYdn97a4tPx6lUSvsBjEDOU65zEi4AAAAASUVORK5CYII=")
-
-#----------------------------------------------------------------------
-aero_tab = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAMAAACxiD++AAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFq6ysra6urq+vr7CwsLGxsbKysrOzs7S0tLS0tLW1tba2tre3t7i4uLm5uru7vL29"
- "v8DAwMDAwsPDxMXFxsbGycrKzc3Nzc7Ozs/P09TU19fX2dnZ2tra29vb3Nzc3N3d3t7e4ODg"
- "4uLi4+Pj4+Tk5OTk5OXl5ubm5+fn6Ojo6enp6+vr7Ozs7e3t7e7u7+/v8fHx8vLy8/Pz9PT0"
- "9fX19vb29vf3+Pj4+fn5+vr6+/v7/Pz8/f39/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAA0PbvAwAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2"
- "qefiJQAAAP9JREFUOE+t0tlSwjAUgOFjZQuxuOBSFURSSOyq0qYNEd//tUzCaIeLk9743Zyb"
- "f5LOSUH3AC3vyEWIuIw06KvHRmGqKIJ3+u1RzaD0BpL+S3DwfIO5oqAHDxPk1LOpr9oGe0/h"
- "ArXHmSCjLbpIpSobyBa3o5DSWqJaF+xqlPykEE/LHFWmU2AkS1GZCdYkFajkjZhAxCghCLwS"
- "zlCcE1j1BpOeE176gqU/mMBy3F0Rb/mpZENh0QWxyJNTfD6HRXfFthgNndFgcJzDa2aCv0WZ"
- "tUj7blLdP9nZ6PCZATtPft+qjELt/vAm/HCzCNYmuA2O5xqzmzOwAuIG0AfGfgDFvqY+8bKe"
- "lgAAAABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_tab_focus = PyEmbeddedImage(
- "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")
-
-#----------------------------------------------------------------------
-aero_tab_focus_single = aero_tab_focus
-
-#----------------------------------------------------------------------
-aero_tab_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAMAAACxiD++AAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFq6ysra6urq+vr7CwsLGxsbKysrOzs7S0tLS0tLW1tba2tre3t7i4uLm5uru7vL29"
- "v8DAwMDAwsPDxMXFxsbGycrKzc3Nzc7Ozs/P09TU19fX2dnZ2tra29vb3Nzc3N3d3t7e4ODg"
- "4uLi4+Pj4+Tk5OTk5OXl5ubm5+fn6Ojo6enp6+vr7Ozs7e3t7e7u7+/v8fHx8vLy8/Pz9PT0"
- "9fX19vb29vf3+Pj4+fn5+vr6+/v7/Pz8/f39/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAA0PbvAwAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2"
- "qefiJQAAAP9JREFUOE+t0tlSwjAUgOFjZQuxuOBSFURSSOyq0qYNEd//tUzCaIeLk9743Zyb"
- "f5LOSUH3AC3vyEWIuIw06KvHRmGqKIJ3+u1RzaD0BpL+S3DwfIO5oqAHDxPk1LOpr9oGe0/h"
- "ArXHmSCjLbpIpSobyBa3o5DSWqJaF+xqlPykEE/LHFWmU2AkS1GZCdYkFajkjZhAxCghCLwS"
- "zlCcE1j1BpOeE176gqU/mMBy3F0Rb/mpZENh0QWxyJNTfD6HRXfFthgNndFgcJzDa2aCv0WZ"
- "tUj7blLdP9nZ6PCZATtPft+qjELt/vAm/HCzCNYmuA2O5xqzmzOwAuIG0AfGfgDFvqY+8bKe"
- "lgAAAABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_up = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1MToxNCArMDEwMESarloAAAAHdElNRQfZAxkQMyBAd2MK"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAh9JREFUeNrFl0tv2kAU"
- "hY+NBXbAElS0QTwColKX4Q+gbvmDXXXVriq160olq7b7Rk2zICsejWyUqkmQgEIMxvWxZAti"
- "0eCoHo40ssZj+5vrO3fmXgmuut2u4zb0+33MZjPEJU3TUKvVUK/X2SRlOp067ZMTNBoNNJtN"
- "JJPJ2OCWZcEwTXw/OwO50o/zc0fPZFCtVmOD3tdgMMB4MoHc7/VQKpWEgalyuQxy5Tv3VyiK"
- "IhROHrmyUOo97QXuOM7+4L4CZ/uziVuSJG3CCRYFX5+AcDg5iURiP3Ba7bOE+3xde/H5huWi"
- "4SHLV6uVEKAsy5uW86hbLBZC4FzpoVCzbVsI3OcFcP5yUfBQqBEuyufkhFb7Y+BMubheHguX"
- "fXiURjH7sSw7yIKivh/Ao4g+KxQK6A1MvHr9wbuyv35a7arI8Gw2i+ubCd6++4KUlveu7PN+"
- "rPBcLoer33d48/4bDvTDoLHP+xyPop0zR13XYfxaov3VhJZ5Fhr/+NlE62UFh090jMfj/wdP"
- "p9O4uk3itDNB6iC/9bnTjoXjFxmUnu42AQ/+0GKZz+c4KuaQz6kPflBTJYxuRrtZnnJjlbsb"
- "N/xtsc7x2+thkIH8S6M/9tbdkkbyGxwn1yuX3OBDsVj0Dpc4j1aCVVWFYRhYLpdQnrsV46d2"
- "26siGK9xFoo0zhwO0bm4QKvVgudsd3F4JfLPy0vPv3GJVh9VKl6J7EaP9Be4+2JJRD7+lAAA"
- "AABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_up_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1NTo1MyArMDEwMAycPlQAAAAHdElNRQfZAxkQOBMcU9vX"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAABFhJREFUeNq1V82LHEUU"
- "/1VNz863yWyUyCSaEPzYuGtkwY8QYwLiQfTgwYsgBPMXeDJXvYmo+Qc8KEFIULyJHhQWNcSE"
- "3KLrLgqLoMYVkplIdmZ2PrrL36uqnulOsu50YB68ed3V3fV771fvvZpSoDSbzS9/Xll9+czy"
- "EFc3IkxLGlWNE/MBjj17RBljPlQE/uH1MytHzcEjeOGwwYGSQokvzigqbUCbo9UTAhhqKMqL"
- "IW2PdpN2g/pbx+DH7xX02gWcPblwWi2dv2Debz2Dd48bVIxCjiiBFjBeE1iJwumkIg4If5ER"
- "NRiKIxxgtOhpjVNfGby15xL0xz8NsP+owkzoPpqmiBP5MEL9RUBw9bWuwe6iwvRWOi2C0yhp"
- "CO6kSzkVCWJvzBYqopBtScwdruM8sHj+wkYuiWGMBxTrHxrvQdZcMCat0S33qcgFbMBBTau0"
- "y3CL6K0yfmxCibzDoYkz3pdelGbA0U53Ir4RqfHLmq9FcHVmSy1D+GbEphnNF5cdLFYuAR65"
- "MsgJqNcwMZkFzxB5THXcbGzUXk1iGS240BGmPEw3lqwlkcyfcbNxGHbOKEW7W/M4cpVYb7Em"
- "I+0pQM/qIHIq8w1NMnLyMwhdHw98pCOqI39/NwnnGY2tMKwwLjUL7tbE0Iqyp1Ot5/HqqOwJ"
- "FyYot/MKA5EZMTOOfOi8smuv3Yc26RLdRWeMPLnOoU++oV/SVOTnmuzv5H22oFDLK1S4nRVZ"
- "DTN0JK/d7pbLAB7vYn2i92jbHLg5AFp9KV6Fs5zreAy+ycg3+KDADiMDOZuuCibnMjYLeEy5"
- "gPcIvsmQuwTvMKPbfWNrfTAIx5H36FWHDpR5V+A4g7c0x1RLIkYZwSWz+5yr57UbOgwJJgwT"
- "tEuqt+lqhYNFLvSMUB2O69tkBB/adm1IuwBL9E47ZMA6lwIfOup71D6p7mv/98m3VvHC3AIu"
- "tzuYI//2zG27WJy8cW1bBjyGFQ8+al5RQs02Ksvxyr4Ae9t/WqvV9t8k548l858JYeOlhsLy"
- "yhrePHXaWrnPUg13DX5oNsDf/9zAO+99jnKtYa3cy/hUwRd3Bbj5xzre/uAb1Or7Rir3Mi7P"
- "s8jEbz+yI4fm79fxyRdrqO588LbnH322hjdezePRvbP4pRVONOdE4PtrGr2rHXx7qWup3krk"
- "+bGwjYceqNCB4bbzOnD9//yv86Tx/IEKGrvL205YLSssXds68iROcC+PRxXmf5WNfCsHpEF8"
- "xwlLE/DUve7a6Z2kyO8reY0arwU3OPl4HktXctjzHCenw1V2l2oeKLF2Cjm3scQNZzjByUKO"
- "WvfwoDdgSyyytxf4fZ5b5Az/qdxHnyoE3fW1wonFAMHiwmOr85cvzn26fBgHnzZ4uKyxk6BV"
- "gvFgwc2GDsB1vEnEdjj+cA8BDyVo0+Eb1CbZ+5Unxr/OA3PRRTz5xILrnq1Wy1y+soxzqxHW"
- "29M7ON1f0XhtTuOpQ/Oo1+vqPxxtdiUOpmR7AAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-aero_up_focus_single = aero_up_focus
-
-#----------------------------------------------------------------------
-aero_up_single = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAgCAYAAADqgqNBAAAALHRFWHRDcmVhdGlvbiBUaW1l"
- "AG1lciAyNSBtYXIgMjAwOSAxNzo1MToxNCArMDEwMESarloAAAAHdElNRQfZAxkQMyBAd2MK"
- "AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAh9JREFUeNrFl0tv2kAU"
- "hY+NBXbAElS0QTwColKX4Q+gbvmDXXXVriq160olq7b7Rk2zICsejWyUqkmQgEIMxvWxZAti"
- "0eCoHo40ssZj+5vrO3fmXgmuut2u4zb0+33MZjPEJU3TUKvVUK/X2SRlOp067ZMTNBoNNJtN"
- "JJPJ2OCWZcEwTXw/OwO50o/zc0fPZFCtVmOD3tdgMMB4MoHc7/VQKpWEgalyuQxy5Tv3VyiK"
- "IhROHrmyUOo97QXuOM7+4L4CZ/uziVuSJG3CCRYFX5+AcDg5iURiP3Ba7bOE+3xde/H5huWi"
- "4SHLV6uVEKAsy5uW86hbLBZC4FzpoVCzbVsI3OcFcP5yUfBQqBEuyufkhFb7Y+BMubheHguX"
- "fXiURjH7sSw7yIKivh/Ao4g+KxQK6A1MvHr9wbuyv35a7arI8Gw2i+ubCd6++4KUlveu7PN+"
- "rPBcLoer33d48/4bDvTDoLHP+xyPop0zR13XYfxaov3VhJZ5Fhr/+NlE62UFh090jMfj/wdP"
- "p9O4uk3itDNB6iC/9bnTjoXjFxmUnu42AQ/+0GKZz+c4KuaQz6kPflBTJYxuRrtZnnJjlbsb"
- "N/xtsc7x2+thkIH8S6M/9tbdkkbyGxwn1yuX3OBDsVj0Dpc4j1aCVVWFYRhYLpdQnrsV46d2"
- "26siGK9xFoo0zhwO0bm4QKvVgudsd3F4JfLPy0vPv3GJVh9VKl6J7EaP9Be4+2JJRD7+lAAA"
- "AABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-aero_denied = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAADxklEQVQ4jbWUzWuUVxTGn3Pe"
- "+955k8nMJE5m0vqRZCaUYomG0uJGjDR0UXBRUj+6Kqg7kSy6SBf5A7ropiB07aK4qIsWIYsu"
- "ioXBQoRKqWhJ1eq0sWqSmWQyk8y8H/e+p4t8oJ2YuPHA2dzD+fHwnHMuiQheR/BroQJQOxWv"
- "Z7N9cRB8nAA+dIEBAIiAvwPgJ04kro1Vq/Mv66XtrCgVi9osLEx1K/V57+HD6a5Dh8B9fSDH"
- "ga1WsXr7Niq3btVrUfS1yue/HH34MNwV/HM+n1HN5vd7+/vHsmfPQu3bt60i8+wZli5fxr/l"
- "8nXT2fnJBwsLK8/XX/B4ZnhYqWbzyv5icaz34kXwnj2IrYUoBXge4HkQpRBbC85kkL1wAfuH"
- "hsZUs3llZnhYvRQclMvnsqnUidTp04DWoEwGnE6DEwmQ44AcB5xIgNNpUCYDaI3UqVPIplIn"
- "gnL53LbgmULB9YCp9LFjcHM5KM8D+z6o0QD+l9RogH0fyvPg5nLIHD8OD5iaKRTcTd6W/KhS"
- "OZJOJgc7R0ag4ngd8gqhAHSOjMArlQbrlcoRAL+8oJhFjiaLRWhmrN29ixYzfNdF6LqIXBdG"
- "a1itEWsNaA24LoQZ5s4duAC6hobAIkfbFDOQ78jlQPU6zNIS3jh/Hqz1jmolDFE7eRIqk4GX"
- "zYKBfDtYJGDfB9VqkNXVV7IBAOT+fYjrrs9DJGgDE/Ns+OABkExCBQHmL10CM4OMAVkLAkAb"
- "3hEAIgJZC7YW9OgRwnodzDy7xds8kF97et70iMrFfF6T1gAzEEWAMburBvBwcTH0RQbfX15+"
- "Cjw3vIOl0tMgiq7VVlbA9Tq4VgOvrYGDYNes1esIoujawVLpaZtiAPitu/sta8yt/o6OVI/a"
- "8X/aimVj8E+r1XCUeu/dWu3+tmAA+D2dHvetvdqtlDrgOEgQbQsMRDBnLWrGGM9xzozU6z88"
- "X28D29VV/LF370d+HH/bFOntIkKGCJuLFwJYEcGqCDqJKh7zZ+88efKj09WFHcFbtuTzOW61"
- "vghEPo1EDtiNdweASzSnib6Tjo6vum/eXCwUCm39dO/ePUxMTDizs7Oq0WjoMAy1tVbHceyK"
- "iJsFOs4wv32AqF8AzMXx3FWRP5cAn4hCZo6YOdRah8lkMhwYGDCTk5NGzc/PY21tDcYYiuOY"
- "RIQ30gGgKiL4xpi/AJSxvsIWAIjIAaBEJBYRx1rLxhhqtVqoVqu0rRXT09N048YNPH78mKrV"
- "KjWbTfi+TwDgeZ4kEgn09vZKX1+fjI6OYnx8vA3yHxWIwp50Lj49AAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-auinotebook_preview = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0"
- "RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJXSURBVHjahFJRSBNxGP/d/+52"
- "W66ildPKJB9EMSwjFSNoUkS+GYg9pi9R9tJeopcgC3yKYvRUMHA+VBJUmpQPQSySKINqEGSB"
- "Np3aNjs3N8+7285d/7sxa9yw3/G777v/932/+76PP6PrOgw8D876dYImWJAEZPpW8l89nYea"
- "i8KGgMHRYPitvgkCw0G9qaNXD4x80Qs1BknRnzaBEfX1e+G758PQaEgvnP8VULA5lCS8/T7T"
- "NUQK4ApO4j/1l3s6N/zA8MiGTxiGgUGowGwkhqkfc5Bl1SKwlM6i90y75dzsoKX9fNPLF2Mt"
- "sZVGuMt3YPDpK7jsDnj7uiEIfH6ClAjF5rAKHD1xcW99a927C5e6hP3luwCGwONpRjwm4tqA"
- "H7du9pmJDG9HrsSeSE3dvmdnz512tFZVQaGjaCyBjedRubscxzva8PrNJzNR0xmsKsQq4KzY"
- "fqDW7UY8o4KjxRzLmpYlBLUNNZj48BVRMQlWA7I5yTqCvcyuq+s0qmkQiC1/QeiTo1ajNpWS"
- "oMoMVJVyXbZ2sDj9S5sMh2l7CjJUJGswq0HNZBCNLmEhPA0xsQpJUSHJJUZILCbuxuZF7fv8"
- "ApbTaaysrSEpSVgURdy//RDJxAp2RvzgMgkQzbpEziVEbgQfBeuXPY1dqcMS4W08cnIWY0Pj"
- "iIXjuNI2A0dsDmXyT3yUTtESZ5EAU3CuDvhD7ydDB1mWg6zQWelSj2ydwbE9v1Fd4TQZmHLj"
- "yTfBzP88PsgUCZTCne4qFycID7Zt4TuqK50TFaTmZMP1x5l/c/4IMABbKBvEcRELXgAAAABJ"
- "RU5ErkJggg==")
-
-#----------------------------------------------------------------------
-whidbey_down = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAMAAACCNBfsAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAaHWVZ3egZ3e1cYCncYa0dpC4cYXGcpDBc5fWd6Dld6Pwi5OzgJbUkJjQkqHC"
- "hafggqfwh7Dwk6Xgl7fwoKjWp7fXsbbWoLfnoLjwpMLwscHnsMfxtdD0wMHg5eTo5/D49/f3"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAverH2wAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAF4SURBVDhPbZTpYoIwEITRGqAQ1ChqOFrx/R8y3SObq8yvsHwZhglaOdH7HZbJIp1W"
- "YW7t7w68LOcwDaxd5+lhC3q18zwOMhTWIjtZ+3wGfFmWFYZjgJl9vWC/1x30AI2zzExzIcqz"
- "a2RxC2Ak2n4zJmEx1TgaY8R7AtHsdgMS1IivJRZHyN5lA6PMEgwZ2JVYs23bxwuWG3PGdF3X"
- "ImvtBO/KqAl38ytgO+WqMz1SDDz7KXaCbatU5YYARt+SbUHg61zT9/iMHsQZKHBI9A1S6njk"
- "fpuCRTjmJVQBymfxlfuCc5IX0cMhnhvCMYO8KCdCV0L9GbMz8Fhqous1ugbWw/32k2oDtFUn"
- "do2sz1ywqWvCElz6pq4pS3CRVxooMvjqsI2+v5LwXCVrljfrGclhqH2v5e+Nr6VnYltgBct7"
- "iDDExm+grvm0ouL/QwrjN1CHXvczYAz0xF5Pp9w168zfAhjeH9gSle8hnWutldL6H7rHOq2P"
- "agd1f/M7VhKuYPh3AAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_down_single = whidbey_down
-
-#----------------------------------------------------------------------
-whidbey_down_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAMAAACCNBfsAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagcHiYZ3egcHilUHjRQXLwR4DwU4Pw"
- "YIfTcYXGcIjVc5fWZpHxcJj3d6PwgJbUkJjAkJjQkqHChafggqfwh7Dgh7Dwl7fwoKjAqLDI"
- "sLDIl8D4pMLw4Of35/D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAQS37pgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAGeSURBVDhPfdOLUsIwEAVQCCixFSggVfBFQWpVjKJo+f8fi3ezSZq2jDsDhHB62Wyh"
- "o319Vctg9V2tO34p5H0bHw5D4Xe9FULK5bKhb6UcDs/cprNdMYiprhee30khaStx2NpudwCb"
- "JHG8WAhbEkU0cZgtUge0iYrjCEUuilheOWysS2U9GpluGJJ1mKyg1LHZn6NYNNYUCWuozSjr"
- "FVxnLGQUjZPJlLJKCk7piar0Nk2zS90RAhINVDZN5yUeNZuhbjq6BzmZomYoICr/Yr5mtcry"
- "fL2mfnvjSd2anvkSsqBZUazN2XS/YVNLrc2Qut3yHAj/10OWFwVRtrpPvZo5cL+28A7fnxfv"
- "G6Ps74GwsfXCsXKkMnWWko39DKukAbjUygKfskFqYLnnKvcHdQT9sA0EPdgD1ts9Vr2G/fpp"
- "pDMeAg3gWe2fgn9V9d+0yW5edCylQurnwJejZ/7VPJpZ7V+C1PBsFrPFXAul6rSRi2S2uFmq"
- "kdrK1frcWOq1kXrC6osHulnq963Wa3Nm9kOySrVpq1/yr5vNbtdK1foPGIxy6qmqIg0AAAAA"
- "SUVORK5CYII=")
-
-#----------------------------------------------------------------------
-whidbey_down_focus_single = whidbey_down_focus
-
-#----------------------------------------------------------------------
-whidbey_dock_pane = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAaHWVcHiYZ3egZ3e1cHilcYCncYa0dpC4ZobHcYXGcpDBc5fWcZjgd6Dld6Pw"
- "i5Ozl6e3q62xgIjQgpXEgJbUkJjAkJjQgJjggKDXkqHCk6TWhafggqfwh7Dwk6Xgk7Tkl7fw"
- "oKjAoKjWqLDIp7fXsLDIsbbWoLfnoLjwsLjjl8D4pMLwscHnsMfxtdD0wMHg6tTN4Njk5eTo"
- "4Of35/D48Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAA1jVbdgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAdFSURBVGhDtZpxe6I4EMbtbQVXrHJuaY8KWq/XW3Sr196u8v0/GTfzThICRIh9nssf"
- "u4rw42UyM5kJHVVXjDQah/EV51ejK05+SKMwjK/BX0Gfzu9ms2kY3PgL8qd/nc/vCB+GN/54"
- "b/p0sVjMaRA+9Mb70hku9GvUe9IBV3TC+9rejy5wTfdX70VneJ7LHRaLu7uIPNPL9j50hp+a"
- "w9NzPOhQfvrHHqeZn/phOmzeofvZfpA+zTFa2rNsFk2GPWeIruB5y+5En00mg1E7QNfw/CSP"
- "oEaZ51kWDavvpxu4phOWB+hJMqi+l17DFb0sBa+eJB3KOX30xLIFeAQXvKYTvtf2PfTVbrtd"
- "6xsonrKMoafhJAwu5/vL9NWO6Rp/iZ5OJsFlfI/2onh7oxvQYKOsaeALjTV944fK2DFn489o"
- "ryqmA69NDrtjWPSwZyHs9RlWr+h5Qzt9UdqzPvhATTBMn/Uu4QOxut9r24vFdzSUvUh+lk37"
- "6wMXfVNf8sF0mdrt9nGF8YbB3ppNl/WpK8eNHPTNxuCXHx/a9q+vZz3exZvW6+m5NPhi58B3"
- "6Yfj2zYRHcuSgOI5Bi0fDgeiT/nT8oxTi2K3U1dZz9ChH5gu+GXJ9HNRvP/dgoOfyEGox/Tn"
- "nVlo04kNm34DHPRfv7psxuujywqm4rBo41t0Vs4uvl4/PXHUNLj7/f6VRvte5RJTjxBo4Zv0"
- "A3sDxw2d+EeTcnzd4qnIdR43zZ/EbSUjNfEN+oHppFsiEZOmxn5/ZJOBvt1uNivrNyvk2nib"
- "fmA6W0W0Z6FGkL0sNvLYt0L/aKeLtnqLTvCD2FzRNR53VelSZ8l1IfhfdqqDbRaWcWo6nWZs"
- "zrk1SZLVvww40oBeZTG9oDwbOm6pDy8svKHzA9Y2Z3oUgU5WOSIXdOjAv/Nv1hLJ5aZRr+lQ"
- "XhNYevSEZye6ZJo2PZNpd9ANXtFFuYtOM0p50UnP4Dm2VeQZavVCZ6cqudziCOL/szSKYkh7"
- "hReu62UJv/MyS8+HM2AZuUwNgwcdTlVSkasrrppOgSL0Rg2ME9l6uD8/cqmWd643T0Y90xEO"
- "azku48RzCu0vau1z0lNEhJu++Epkoks4dOhjPPaL+Hl+gf4upmlplzaIPGdUIbewXls7OTvo"
- "xktbdK6auNyAWz266fOHaoQ4ZKNpOl940vRXHQN99BU9XMkzqylo3+7u0nTEdkHkKzoKRUNH"
- "tccxeoEOwxs6XQqK0GdRNFoVKkqEDo+8lk4Syq2UsDWd2ubxKHtm5dzVid1Fe5bOjCx4kUt7"
- "mohf8QPCMg3ttGERjp4z1Yk27O5HV15r6MbuVF1S2xbHo+pRNblNf88SaN9sVIpyaSfDYhnU"
- "dEQK7A54ELO/f6VJqC2joknF4bmfPgadw4UtY+hmo4Vj9ZanWNtd07PsRfmDuYqTgc43nAei"
- "e8TEu4OuWh7kGcb70kViKfR7phdvVA808gw34thHkBzJ+EZHSquH5NfzN5p1ZU+S/kM3fZxE"
- "owBnCF2lWFAivcWi8jvUYydDBujAZ0JX7XD5Q0yTMT0EnVf6emHh9FC3anptgu3nc5ueppC2"
- "0nfT//OdqRcOA5HeoVsbFGZdFbxFJ3/7C3ShyTPoz/C4PwHnhau+rLmxVdcEwNunRdEYNcFK"
- "8Wv6jO4cBL8DfuC1xbqssbVi1TOMN6chHoSu1Ws6ByLZBfDzObEX8yRqNvd2LaZsLzt3k8lY"
- "1g8aDw+Ukc3gfatAzMJjapTnOdEb2yqNOtLgSdwkMHBWGEIxxmQS/iYTqvAyGSmN9rZEswZW"
- "eJkaC0Af4/ieBrPHY6kWWniCh+0NoVb9DjzbPLhZNhH07f4+CIK4heYbT0V7d0ui3XvcSvLk"
- "QEbXROPnz859zFGOLGptZhRDru2UTt9EeB3ISj31TQ784fBIRwVeVTQtrq2gbs93G0Vfvtg9"
- "3/Ft92KqdXWfI1cpVCspOOMnjg3QLr0aRwpOxuGOj+i7orD6JarnqVugEE2sfnXs2khx0CsD"
- "r6rv33U3w/3MZvNCQ/dP3EI+1c2pa5fGRbfa2e/SApohXbw6RmFk0a2rzMd+ujRclAI0XnYh"
- "pBRH1ujfhuil6yZX6LTEmlEnl158H91uFVVtr+t7ne0o9iKXSdSxHjpvLJieqLmXar5xaPfs"
- "Ll2mP8IMWqRzTy/PSTplzIvqe7Qndit3gc4581Paq4p23lHpYP+dH6K5lyoZSce1U3+vz0xb"
- "dMZLgcD/AB5aode9Qb+/S5VmtEsDUNMH334MxKqpcxw+4/HWbIAuNSbXgc3RLIo+4zNyjeBR"
- "ZdbjRKuFKec+F03qqrpCtuieb/uGLGNXyDbdR7mugXsezlUhn06D3iJED+2qvkcDpCpUvzdl"
- "nnTVnSg6vavxfT/spb1Wz9qpnPN7Q+mrXTsmF1I+78j0PHpq13jOLR7v966mV6jS0BX0vAJq"
- "OZ+3dlLP8UnDH+7nkUpRHMf/399CVFUcf7nu7zj+A8yummsi9EdGAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_dock_pane_bottom = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagaHWVcHiYZ3egZ3e1cHilUHjRQXLw"
- "cYCncYa0dpC4R4DwU4PwZobHYIfTcYXGcIjVcpDBc5fWZpHxcZjgcJj3d6Dld6Pwi5Ozl6e3"
- "q62xgIjQgpXEgJbUkJjAkJjQgJjggKDXkqHCk6TWhafggqfwh7Dgh7Dwk6Xgk7Tkl7fwoKjA"
- "oKjWqLDIp7fXsLDIsbbWoLfnoLjwsLjjl8D4pMLwscHnsMfxtdD0wMHg6tTN4Njk5eTo4Of3"
- "5/D48Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAaHenigAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAejSURBVGhDpZkLe9o2FIYpTVeWrG3Srmy9stk0LTPJMKMhmYM9KOuSERqydAX8//+H"
- "dy6SLF+QRXeepwtg+9XnT+fotlqyRQRey+1vcX9S2+Lm08Bz3f42+C3ond5xt9txnRf2guzp"
- "b3u9Y8C77gt7vDW94/t+DwLwrjXelo5wpm+j3pJOcEEHvK33dnSGS7q9eis6wqOIW/D942MP"
- "MtPKexs6wlfZsMwcCzopX/2jx6prp76aTp4X6HbeV9I7EUVOexh2vXZ15lTRBTzK+Q70brtd"
- "WbUVdAmPVvwKIuIoCkOvWr2ZruCSDlgMog+HleqN9BQu6HHMePEmQdWYY6IPNS+IB3DGSzrg"
- "jd4b6KOr6XQsGxA84YyiB27bdTaP95vpoyukS/wmetBuO5vxBu2z2fU1NACBpowh6AvEGL7h"
- "S4WYmN3W12hPEqQTXlpOvlNodNcwERpzBtULepTRDl+E9tAEr1gTVNO7xim8olbnc+k9O34F"
- "IfwC+WHYMa8PyuiT9JHPSOeunU7PRhTXFJitYWeQ3joqaaiEPpko/ODzZ+n9xcVaxi1n03jc"
- "WccKP7sqwRfpi5vr6ZB1DGIAcuYoNH9YLIDewU+DNd06m11diae0dyjQF0hn/CBG+no2u73M"
- "wYk/5B9JPXV/VOiFPB3Y5Ol7ghN9uSyyES9/HSRkFZZFHp+jo3JM8fH4/ByrJsOdz+cXEPm2"
- "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")
-
-#----------------------------------------------------------------------
-whidbey_dock_pane_center = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAGDeAJUqQIEOkIkewJFKlJlayMlSiMle1K2G0LmnSNnDgR2OkQ2O1UGagUHCo"
- "VXSzaHWVZ3egZ3e1cHilQ2TAQHDAQnLSVnfFQXfgcYCncYa0dpC4VYTTRIDjVYbgZobHYIfT"
- "ZpPXcYXGcpDBc5fWYIjgYZHgcZjgd6Dld6Pwi5Ozq62xgIjQgJbUkJjAkJjQgJjggKDXkqHC"
- "k6TWlrDXhafggqfwh7Dwk6Xgk7Tkl7fwoKjWqLDIp7fXsLDIsbbWoLfnoLjwsLjjpMLwscHn"
- "sMfxtdD0wMHg6tTN4Njk5eTo4Of35/D48Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAXehG6QAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAdqSURBVGhDtZoNW9pIEMc5emrB651VUDRUpEkqb5d6SBOUXq9Q8dprke//aXLzsrvZ"
- "hGWz+NzN87RCzP74M5mZzGyspDvYOGh4wx3OTys7nPx+HHjecBf8DnS/3wtD37t47S7InX7V"
- "7/cA73mv3fHOdH8wGPTBAO85413pCGf6Luod6QQXdMC7+t6NznBJd1fvREd4kvAnDAa9XgCR"
- "6eR7FzrCV3lzjBwHOilf/a3bKnRTX04nn2/Q3XxfSvcTsoL2OA6DdnnklNEFPCn4Hehhu12a"
- "tSV0CU9W/BWErZMkjoNy9Xa6gks6YNGIHkWl6q30DC7o6zXjxTcZl9UcGz3SfEE8gDNe0gFv"
- "9b2FPlnMZlP5AYInPKPoY6/tXWyv99vpkwXSJX4bfdxuX2zHW7TP5w8P8AFg6JQpGL0Bm8I7"
- "/FIxBmbYeI72NEU64aXLye9kGt2z3AitMYPqBT3JaYc3Qntsg5f0BOX00HoLL8nVL1+k79nj"
- "CzDhL5Afx769PzDR77Il35DOl3Y2u5mQPZBhtMb+KDt1YvggA/3uTuFH375J33/69CTtK0fT"
- "dOo/rRV+vjDgN+nLx4dZxDpGawBy5Cg0v1guge7jq9ETnTqfLxZilfYdNuhLpDN+tEb603z+"
- "9a8CnPgRHyT1dPmTjatQpAObfPo7wYn+48cmG/Hy6CglV2FaFPEFOirHEJ9Ob28xazRuFIYt"
- "sjjOf9p6RJeeUqCAz9OXGA2YN3DiHzrjw4du66zT6VyCNZvNdzk+hy1XpDw+R18iHXRzJtJF"
- "Y4uvrrpdgBP98vJds9vNfqmlXBGv05dIR6+w9tiThLet62tkn50h+xzs8GVL/lIvF0X1Gh3g"
- "S/a5oEt8+PYtws/AFP2wxfgfeqkj3ww052R0OE35HGtrFEWTfxBwDUZ6NauDnSq6LNNM1/CK"
- "jl8w8znSg4DoEcDZG0U64b9indBukdhuKvWSTsqVV+iOH9zSBe0C3Eiv/3yFJxjoCi/orNxE"
- "73YBbqbXiS5vAJn+TD3TMajW2G5hBuHPeBwEQ1wbtjrklfuCoePrtVDgsV3QujWFJzoF1Rqa"
- "XNlxafSOoOO1zeye6TWkf8KvvBa3d+w3V8r3SKd0mPJxthVeU9Q+adno9Rco3kwfXAEZ6JwO"
- "G/QG6nKhg+cL2nkMgsippFRbUK+uHYKd6G/edDoUiPcmz9TrB3jSjZnef59WqLag0yQd262V"
- "pLfedC5L6RMImzXEPK1EjTS+9XrjcQX9Qpkv6NQoKnqzc8lZZNOu6LBUo4dBUJnMRV1hOkXk"
- "rnRIqPWMW9iMDmNzoxLfo3Kc6tjvrD0eh1Qhm5BI27XX9qt06YnOSzW673mV+1hMojm/P4+u"
- "/A7dJYxtw2ElvRFDbj7e44i0d09F9TL5vba/f6Rrp0yhq0rwiyHG+xVc4swzIpugijnQq0TH"
- "dEHPKLraaMFcPcEAkn6X9Dj+CAs/NM/PMedVzMhyg3Vg/6A6xhpsoIuRh+oM4rfSD/P0Q3qP"
- "dQbolEzzB+gHcnUGB3HaR+AaifjcRAp3j3iCS3svqV5J7Z37jL63R9IFXZRYogRyi0XUd1JP"
- "OxlsRCc8weuQTmwd/gGH9gUd7/SyjcCF+vaQvDeR7/t9nT4mZZNXzC8asKsBnrBB1zYo1H2V"
- "8RodEvnPrfRaDei/ERwb8GxZfmMr6wkIr58WBA3qCU5Pi7qJXf2V4Eu8X2rLclsrWj+DeHUa"
- "5QPTnwr0GhjQCQ4tQ+bzJImC/HCv92LC97xz1243qMKjvXpVq0n9NchQpRx/6SvlRM9tq+T6"
- "SIUPcfdFwZ8mk9oLVMxksJ+OKEnZfAywOB6DFbcl8j2wwPOlydbDq/DgYG8P/6Funa3wAPeK"
- "G0KF/p3w6POL16McHfQfHR1Uq9W9XwIKRM2GpB7gG1sSxdnjhIsnJjJNTWDfvxdo2lG8Y8Bo"
- "E0IOmbZTNuYmwMtEFuphbjLgl8sbOMrwNPXMG1mbM99JEBwf6zPf48Pi47zAf8QuJUK6GCm9"
- "sG3YAN2kp41AwME5OPEBfTGfa/Mq9PmPcBAmQ21ebZg2Ugz0VMHT9PNn3odAgyn57iPYjBta"
- "bKz922w4Ne3SmOjaOPuZR0BlPMWLY5BGGl1bpV7a6TxwQXmQeN6F4FacqoZ9G8JKl0Mu0++0"
- "75AVFyveRtdHRdHby/5eVjvIvcDkEnHMQseNBTUT5fdS1TtMbcvu0nb6TW6SM+7pJQlIh4K+"
- "Vb1Fe6SPclvoAdiztKcp7LxTp0P77+jp/F4qVySZ10b91pjxC3TEczeF/xHc01Jv8wPs8c5d"
- "mtLOA0BGL336UZKrqs8xxIzDU7MSOveY2AfmLd8UPSdmeA3jqcvMbAV3C9XOPS+bxKqsQ9bo"
- "jk/7yjyjd8g63UW57IEtX87UIa9WpdHCRAftor+nAYhbl//0OZ+cTgQdntW4Ph920p6pR+XQ"
- "zrk9oXT0jApMbKRcnpHJ6+ioXcY91haH53s701Pq0mgOtTwCKgSfs3ZQj/kJ5g53i0ihaDgc"
- "/n9/C5Gmw+Hxbn/H8S+cD8xcYY4GnAAAAABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-whidbey_dock_pane_left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagaHWVcHiYZ3egZ3e1cHilUHjRQXLw"
- "cYCncYa0dpC4R4DwU4PwZobHYIfTcYXGcIjVcpDBc5fWZpHxcZjgcJj3d6Dld6Pwi5Ozl6e3"
- "q62xgIjQgpXEgJbUkJjAkJjQgKDXkqHCk6TWhafggqfwh7Dgh7Dwk6Xgk7Tkl7fwoKjAoKjW"
- "qLDIp7fXsLDIsbbWoLfnoLjwsLjjl8D4pMLwscHnsMfxtdD0wMHg6tTN4Njk5eTo4Of35/D4"
- "8Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAA+wCLtAAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAeDSURBVGhDtZr/f9JGGMdprZPJnHSKm9OKI4DG0K5kWAptGIw5FGqpdQL5//+Q7Ply"
- "d7kkR3L4ms8PWmjyzifP3T33PM+1FO1gQ6/u+DtcH5V2uPh86DmOvwt+B7p7etLpuE7jmb0g"
- "e/qr09MTwDvOM3u8Nd3tdrunYIB3rPG2dIQzfRf1lnSCCzrgbX1vR2e4pNurt6IjfDTiJ3S7"
- "JycezEwr39vQEb5OmuXMsaCT8vUn3dYdO/XFdPJ5hm7n+0K6OyJLaQ+CjtcsnjlFdAEfpfwO"
- "9E6zWbhqC+gSPlrzKwgLR6Mg8IrV59MVXNIBi0b0fr9QfS49hgt6GDJevMmwKObk0fuaL4gH"
- "cMZLOuBzfZ9Dv1xMp2P5AMETnlH0odN0Gtvj/Xb65QLpEr+NPmw2G9vxOdrn8+treAAYOmUM"
- "Rh/AxvAJXyrAidmpf432KEI64aXLye9kGt3J2Qhz5wyqF/RRQjt8ENqDPHhBTlBM7+Ru4QVr"
- "9epK+p49vgAT/gL5QeDm5wcm+n58y2ek89BOp4NLsmsynK2B24svvTQ8yEC/s6/wvc+fpe9n"
- "s420W55N47G7CRV+vjDgs/Q7D+/fE/heCECeOQrNPyyXQHfxp96GNM/ni0U/oz5DP3iIdML3"
- "QqRv5vPb9yk48fv8Jamn4R9lRiFNPzg8rCJ+j+BEX62ybMTLb3sRuQqXRRqfogP88BDo9/b2"
- "LnDVJLhXV1czsPSzwh4NPS2BFD5JP3j0E1j1YeUeqE9SbmZTmikwdQaT5K942nJESuIT9INH"
- "TK9WAL+n46+ubm54HqJNJpcaX1tyabxOBzjR0fWofl8ilkudTXHs7Vz+Ug8XafUaHeFEl+ol"
- "frlcgmy5pjhKjueMX+mhjnzT1ZwT0w8eVcHwCfg/eqdc/hsBN2BMVNGeMH8pOj1Q7jNdDa/o"
- "oDxDr/+LMw/gpDtDJ/wt/k7bIjHdVOolHd2SpFcrv9K7A50jTZoe0FrdGOgKL+jkcyMdRhTi"
- "opEe0MzRvcLvEKtnOsJXutXQ7yRtRrNwHG9LIaVltO9xLCDPhPw1m8ITnZSv4M1XT9BqtRXS"
- "f8ZbYaEwPZEDfxJ0ws/QaaHY3jHfXCv1SP+OmCl65elTvPWd2PuM9KGznd59BWSgf0/wtPYK"
- "wYHO+/YW+i27JqWdyyCYOaXo5csamK79SW1V/fE+rVRc/DRXUnTMmjDduMCLBmb66XlUOm+3"
- "k3T0vaLPbOiX8HIhjizmgOh3Kt9OTobDknt8nKCvVjiq1Qprp2wvRzs5XtEBr9E7npem07Tc"
- "lQ4SwimnsDEdyuZ66WLUPW63flN+B+3o90qZtctlbvL7sO/58gXJMwnt0LBwgD46Pm614lHd"
- "ge6l6MrvkF1C2eb7pWhwDeqBv/qorSapfTIRIcqkHRxL2yAODmqnzJ5GleANH+f7ACLDcbtt"
- "pG/y6XWi44JL0FWjBddqf4r4BL1WuV8+Eo5XmjAYyHiDUcY7q+Mltwa6KHkozvTRNxl62Uhn"
- "B4RMP8NL5teQDyTiDBbi1EfgGAnqf1+vtSBZk47fvA107R9l0RcMPc9rULBgOsVIESk92WIR"
- "8R0KMJ45HCNrSC8/x3sDpotyOPzIrgmQ7hAd9lxtY8HwEJdqcm96MwXntFtM5m21Un5PvkE2"
- "1DD0FPyfDdgsPUPXGhRqX33TpXmp6LhrM13ydDrNONrTl7hxyX01qVz6HX3v/onqdfqDB/8Q"
- "XvBjegdmeqPxB8GXuLdo9ERrRctnoFWi06uVB/uYEyj1ko4LEfxC8M2mr2/mfS9Z3Ou5mBvg"
- "qmo9Qbc/flyt3uX7N5vz875m2LdqsFvQXKV8NAJ6oq2SyCNJfatFdA2OCh1STNZsOs95QAWe"
- "B2YIlm5LJHNgUk/0JBwwvn8Ghux6nSJjGg9wJ90QSuXvLvqG4b0kAj6dnTUaDT+Fxge7rD3b"
- "kkjXHp0O8GHW38Xag/lfvmSeo77FlQWlTQfWkKmdkqmbmE5RQqiHusmAXy4H8C3DowiGxdQK"
- "ytZ8r1+320dcvXHNd3O9eKeydfGcGywJIFcScMQ3DQ1QQ736uv2DLA1B/Rzpi/lcq5cgn4dq"
- "AZZoX6tX66ZGioEe/RLXnR8+yGoG65nJ5B2YrJ+whLyILzV1aUz0+I7oA1RLXCuxcRUvvoNl"
- "pNG1u9SP+XQuuCAESDp3ITiZp+CS34bIpcsil+mwxSqLg0suPo+ul4q08bCJ9J2kQ0bnmVwi"
- "vsuhY2NBJkupXqrqrGLCmNNd2k4fkBtk5Db29FA7Rsyt6nO0w1Ye2xY6xsyv0g67FZ90cP+d"
- "8oxEL5XTuSOxro36c+eMm6IjnhME/IfgTh68oKf3IqmdC4CYXnj6UbBWER97Rg0Day/qYOs5"
- "gXngST08wXB2UKi8mB4xvps+96C0oPDMqcAz8ELs+/SJ0P90ZsP4DN1GuYVnhPpvdlYm1FMB"
- "LTJUu5MyO+3S94IOZzW258PFo0ozVc571A7pnN0Jpa12oR5Phq3OyOTasdQu8RhbLM73dqZH"
- "L1A3VQU5R0CpBW+tHdTj+gSzh+/0txC+73+7v4WIIt8/2u3vOP4D32mBB1S/lsMAAAAASUVO"
- "RK5CYII=")
-
-#----------------------------------------------------------------------
-whidbey_dock_pane_right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagaHWVcHiYZ3egZ3e1cHilUHjRQXLw"
- "cYCncYa0dpC4R4DwU4PwZobHYIfTcYXGcIjVcpDBc5fWZpHxcZjgcJj3d6Dld6Pwi5Ozl6e3"
- "q62xgIjQgpXEgJbUkJjAkJjQgJjggKDXkqHCk6TWhafggqfwh7Dgh7Dwk6Xgk7Tkl7fwoKjA"
- "oKjWqLDIp7fXsLDIsbbWoLfnoLjwsLjjl8D4pMLwscHnsMfxtdD0wMHg6tTN4Njk5eTo4Of3"
- "5/D48Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAaHenigAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAe+SURBVGhDtZr/W9pWFMYtW1en67RzunWdpUvQlgWdMCoyJFkotbaRCrMryP//f2Tn"
- "yz25N19ILn2enV8Qkn7y5s2555570414jRh4dbezxvnxxhonXww81+2sg1+D3jw7bbWarvPM"
- "XpA9/eXZ2SngXfeZPd6a3my322cQgHet8bZ0hDN9HfWWdIIrOuBtvbejM1zo9uqt6AgPAr5C"
- "u3166kFmWnlvQ0f4Ih2WmWNBJ+WLf8xYtOzUV9PJ8xzdzvtKejOgyGj3/ZbXqM6cKrqCBxnf"
- "gd5qNCpHbQVd4MGCb0HFMgh836tWX05P4EIHLAbRe71K9aV0DVf05ZLx6k4GVTWnjN4zvCAe"
- "wBkvdMCXel9CH96Mx6FcQPGUMwl94DZcZ3W9X00f3iBd8Kvog0bDWY0v0R5Ft7dwAQg0JYSg"
- "LxAhfMOb8jExW/Uv0R7HSCe8WE6+Uxh0t2QiLM0ZVK/oQUo7fFHa/TJ4RU9QTW+VTuEVY3Uy"
- "Ee/Z8RsI5RfI9/1meX9QRB/pf/IJ6fxox+P+kOKWArPVb3b1qT8XXKiAPhol+O6nT+L99fW9"
- "xB1nUxg275cJ/rvjV3l8nj6d3Y57fGJ3CUDOnATNf0ynQG/iX917OjU6Pn6Vx+foU6QzvrtE"
- "+n0U3b3PwInf4x9JfbR/cHzSzj3iLB3Y5OlrghN9Ps+zES+/duO7h/tMz+IzdFSOKR6Gl5c4"
- "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"
- "AABJRU5ErkJggg==")
-
-#----------------------------------------------------------------------
-whidbey_dock_pane_top = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAMAAADwr5rxAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagaHWVcHiYZ3egZ3e1cHilUHjRQXLw"
- "cYCncYa0dpC4R4DwU4PwZobHYIfTcYXGcIjVcpDBc5fWZpHxcZjgcJj3d6Dld6Pwi5Ozl6e3"
- "q62xgIjQgpXEgJbUkJjAkJjQgJjggKDXkqHCk6TWhafggqfwh7Dgh7Dwk6Xgk7Tkl7fwoKjA"
- "oKjWqLDIp7fXsLDIsbbWoLfnoLjwsLjjl8D4pMLwscHnsMfxtdD0wMHg6tTN4Njk5eTo4Of3"
- "5/D48Ofh9/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAaHenigAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAe1SURBVGhDpZkNexJHEMcxrTVNao3G0PoSaXmJ4l1soBhCCUdBmkaPCDFWCN//e1z/"
- "M7O7t/fC3aHzPMqFu/3t/2ZnZmeTUrCBnZ83m2cbPB+UNni4NxweHx/9tsGIDei92bBF9B+L"
- "44vTu6T8AFb+oTC+ML07gfIjppe/L4ovSofy1nGjIfT9oviC9O6kBZ83flf0ovhi9NccLY2y"
- "sv39gvhC9NeT4R/HR5q+Xwa9GL4IvQmvLBcRK4gvQG/+DZcvP8JG2hYF1efTSflxY2HIdLHY"
- "gxVwTi696VGCptLz8Xl0Ud4oR90u2vOXNodOyjlYFjoa+VPT89Rn010ol+xXdP1Bq/oI9jA7"
- "azPprguX23T4R7QbejY+i/6q1YJXpLYwlZ0foz/4LqOkZdBfvaJgaZQzPbP3IAu/nv7rEYxi"
- "g+xgIfVrgX+44FV99HAP7J2dra216jO0/3RULkfpPAP9p+lg37u3Hp65r/oHByE9GvDy/e4u"
- "2Bnw7F3bD+kQbGbS1w/y4Dk9wd29vcePtc5dtp9/1rOQ8jt3MjfBnFwlPLtgd2dnG7YD291V"
- "88Et2fBU7eNQz2fgiU3kLWVPnhBflHfCRwcpb5GifTw2+M5n4Mkf21vbh7fanvzCPoLy25XB"
- "+9MUfJI+v55NuqKjswLw7v3729vPDVounj6ld6Grzi0/6vvTqRplvUOCPie64Dsrot9u3X//"
- "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"
- "gg==")
-
-#----------------------------------------------------------------------
-whidbey_left = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB4AAAArCAMAAABYWciOAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAaHWVZ3egZ3e1cHilcYCncYa0dpC4ZobHcYXGcpDBc5fWd6Dld6Pwi5OzgIjQ"
- "gJbUkJjQgJjggKDXkqHCk6TWhafggqfwh7Dwk6Xgk7Tkl7fwoKjWqLDIoLfnpMLwscHnsMfx"
- "tdD04Njk5/D49/f3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAQ3JLMwAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAF4SURBVDhPfdTbdoIwEAVQL6htAi0tElBaoVb+/xPTM5M7wc6LLvc6GTIJbnRel/DT"
- "ZkUvwXOefsahdqGMJ2LvSwaO4P7d5BdMWejQ9+dzzhOiY4/quu4z44kYSebudbH4REwLm7Q6"
- "Jr2hk+lrGR4e7Rb17ZRSdV23v55vxL4vsRCBOesXRrquBbZm0yb7jIHD/EDNKPpUjRBvbmOU"
- "Heb7/f6g/aISJhz6R8J4MJvmbM6FGSrPmRaM09i0YZ4zDdHxTN8909I8RMtzyu3NztgwbyxK"
- "qytlq6pK0qqROC/0vipGzx0v7ll/MAY2Y1G1SWv9UpXlCvNlpiPZlyjX2w4VJ/rlZk7+D3Oe"
- "DsoXwqoNV5HzKHtidJlUC3eXifuXZcxNE91U4xFLIb6jm8oeWIKLcFPN/jxLKY/HhM3+TUl5"
- "OhU48eQN9Y6VTwe6D+kLbJ0W3m5X3m926ntgXb7+eg/z2ZzJhcuusN4Lsds9/WfSuhBes94U"
- "C6r/AM3yZVcU56/qAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_left_single = whidbey_left
-
-#----------------------------------------------------------------------
-whidbey_left_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB4AAAArCAMAAABYWciOAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagcHiYZ3egcHilUHjRQXLwR4DwU4Pw"
- "YIfTcYXGcIjVc5fWZpHxcJj3d6PwgJbUkJjAkJjQkqHChafggqfwh7Dgh7Dwl7fwoKjAqLDI"
- "sLDIl8D4pMLw4Of35/D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAQS37pgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAGNSURBVDhPfdRrW8IgFAdwLyuXZLIUy67D6dK0pd3w+38xOuewAYOMN3ue/fbnwHZG"
- "R8ej5251Yu33nMfcHw8H1iNOxsiNh5xkGUfvmqIBg2YZ8KBrvM3J5BoGH7NBnW9xMjHMGTjl"
- "fQYlxvKYh/V5jErc5MEdJxMOAx/BKxZI0w/LkI340aZx5jZzdmdrU92TjKr8IbB2szHKqv1+"
- "r2Y4hFDINzWf082A2Xxu+II0TDNU4KcnAcNPz4TiV0P6pp1XKduM9R0XZdlipXBpnNXpgGl3"
- "Hu+qdSnzZ1sb0libpab2rqrKMs/d0tqstz+QhwfUt/dabFrrbYXzy1OsNwf0Fgs2TB+ad77B"
- "6SNOba9B/uV49D6ZqIvX3bJp1m++mEBO710rLg8wv8wNmVZj6ZdrxeWatmcZW9FjXbxj3ufR"
- "6NPr8wLyHnM28vtc6+INX08+w9LTKednwS9I+TwnJg3+UMoTGw3/7wKndxqyXq3gAdg9ZaO0"
- "1oab8yo+mRYLKe1p9se5tpCX/7G+dUfhL8vucupsrDz0AAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_left_focus_single = whidbey_left_focus
-
-#----------------------------------------------------------------------
-whidbey_right = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB4AAAArCAMAAABYWciOAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAaHWVcHilcYCncYa0dpC4ZobHcYXGcpDBc5fWcZjgd6Dld6Pwi5OzgJbUkJjA"
- "kJjQgKDXk6TWhafggqfwh7Dwl7fwp7fXoLfnoLjwsLjjpMLwscHntdD0wMHg4Of35/D49/f3"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAWZqHkAAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAFySURBVDhPddPbeoIwDABglDqoFDcVGBVw8P4PyXJoQ0sxN+L3m0NDzVaJx/YoT5k8"
- "9fbAhfve2luS77kfhq5rir077pkTZ34Ng7Vt2yRO/ELuUPeOTIWxdOrA3Fc46p/9AVobsgnm"
- "Z0b1xRsTeLa+EV1f+jCBQ+8DlnzgsDBX2fLxYFR8WeYtxJF/u65tF95KM0/TNEv+ZzZfkElL"
- "TbKhuDEVnJ/4Z1+cufpmfsBwC47newNV1fV6v8cMTqMx67Jkhs0s3YIRsNbqHDCePczWhVIx"
- "S28NoVRdRyxrMaR5zZPjdcDJha+opxOf+33ACthtrR/glkY7LzmXs5npjbn3VqqcFHmE2i0E"
- "934+fd9PjKXdvylbR7yn/q7FuVB8HOF9uMJUOsjF3retb9PcysuFZ+aA0QrJJXYzC6/Fk+IO"
- "Eee628IOquJcx5wP6nYV9cYvGpYBKucNRqNHpfW+r9+580uS63vjD855vvXcF4fvB7r+A9+i"
- "Xf4K/oDaAAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_right_single = whidbey_right
-
-#----------------------------------------------------------------------
-whidbey_right_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAAB4AAAArCAMAAABYWciOAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagcHiYZ3egcHilUHjRQXLwR4DwU4Pw"
- "YIfTcYXGcIjVc5fWZpHxcJj3d6PwgJbUkJjAkJjQkqHChafggqfwh7Dgh7Dwl7fwoKjAqLDI"
- "sLDIl8D4pMLw4Of35/D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAQS37pgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAGXSURBVDhPdZTZVoNADEDpaC2CFSqC1hVaxWoVqdv0/39szDIraF7gcHuTTCankbJx"
- "6V7tW2TfTprVmDvcNKsxt7ismnbzOPQ1npaMh5zxNMdo4Afr0CfMNK8Bv4UcMdBzwshDHzBS"
- "wlWN6QM/UmKecu68hBj40ed8nmrOuN28u/qR+op9XNfANw+mf8asow31ge8Mh9au4zhlRIF+"
- "1z2zjwcTiKWL/f6p2zFHHMdJWkpty77/lpCffcQ3IwzHY5+GitkDG8fTddv/MB2v+9n6dlVJ"
- "aBxq9/Dk/l+95IDgu8b3eD0GJ1ibTmYwzqFt12wTLn07xKc51XW16XqaF20D1jPVtRHf3XHn"
- "Sxyqm1ovC5r+MZ97OcJEj/TULuA+B3ZRFIdm5njd/o1JaSgmvzK7Bh8LXAt8kku1/8KaAr61"
- "u+ZsQ1X0Aauks1tsKdhCzGb4gzMKr66uTTzLFwuNnctjmUycb3t2m6om7JPtu3qZyE+yBURI"
- "+UogvwAM5QfUYOw/ybIhtVghPuBUXrg/LiHG1NmwcSNXqV+4tHLqnJPo+QAAAABJRU5ErkJg"
- "gg==")
-
-#----------------------------------------------------------------------
-whidbey_right_focus_single = whidbey_right_focus
-
-#----------------------------------------------------------------------
-whidbey_up = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAMAAACCNBfsAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAaHWVcHilcYCncYa0dpC4ZobHcYXGcpDBc5fWcZjgd6Dld6Pwi5OzgJbUkJjA"
- "kJjQgKDXk6TWhafggqfwh7Dwl7fwp7fXoLfnoLjwsLjjpMLwscHntdD0wMHg4Of35/D49/f3"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAWZqHkAAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAFmSURBVDhPhdTtdoMgDAZgW3GKWjsL2i/X2vu/SJaEBBXcWf6Jz3l5i9bMpdNXR3Xa"
- "Wc/StXNfKXXawaktm1rrUuWHJCWxX01TA1bqkODYlm3bNjCAVYwji9TbneStJcoWcNR5Yz0V"
- "mySvLVJrvW/buq7g7NadVxbpvJ3taSyWUuef9cx6kxwsdU3sprPY0tJEucboqginwZapjfqC"
- "1UUhT9BboXb28Twfa42pQjLZQMUCwiHbdZKMdqFsPx+PeZee3w2w3WpXugvUY7GAsXPmLvdx"
- "HITzXe4QbK8Klbvsckcr+C/bF0WeZ+52ez6Bw+D2AwxdwAxwhRsaPDp9hA4OLWGpSn1pVlZh"
- "X8Cg2dpNLlxwrgFKFpP/sRqZf26Ph3T2Te8w3AyijSlJ8fuA1v/Acfy+0Dxp8DyZig2dr9fw"
- "WXj5ExoGnxpy5TSi78c0gRUacvE0XjvfsGnqwuryH3q/d6hz07L6CxOEXf5LAPv7AAAAAElF"
- "TkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_up_single = whidbey_up
-
-#----------------------------------------------------------------------
-whidbey_up_focus = PyEmbeddedImage(
- "iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAMAAACCNBfsAAAAAXNSR0IArs4c6QAAAARnQU1B"
- "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
- "AwBQTFRFAAAAECBXFC9vECiQBS2oIDKMIDigC0CVJUqQIkewJFKlJlayMEiwMlSiK2G0JFTR"
- "LmnSKGHmKHDoInDwMGjgNnDgNXLwSFeKQFizR2OkUGagcHiYZ3egcHilUHjRQXLwR4DwU4Pw"
- "YIfTcYXGcIjVc5fWZpHxcJj3d6PwgJbUkJjAkJjQkqHChafggqfwh7Dgh7Dwl7fwoKjAqLDI"
- "sLDIl8D4pMLw4Of35/D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "AAAAAAAAAAAAAAAAAAAAAAAAQS37pgAAAQB0Uk5T////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////////////////////////////////////////////////////////"
- "////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn"
- "4iUAAAGTSURBVDhPfdQNV4IwFAZgpEyCVBRZaR8OUcI0yrLw//8xuvfuy22e7jkKZz68uxtg"
- "0Pm135fl24XxwB/bNU1VFS/+D77d/TY12lsPe3aLqTkUu3Gxa7cHSC3IsmsHOxZS64pzYTMH"
- "23Z7qKFXvpTWwZZd0w5wJivLbHxu14fmtSqUzRhYC5/ZEuY/tVbZ2NjyA1o9/UB9qmrtZG0x"
- "teKtdnjSplCmDWXLd7xZF63G0opUzux2Ra5eoLCYShvQqv2io7IymewGUsV9lVYdcG1TqAnd"
- "QbSbDbR6bqETkastYbCruob5xTNAhpp27PgK7WqFG8DZvz2kY8DBQwGF68XKW/HUtPCBE1rb"
- "dJKCjOMwDLq7gjHbkscvZUEOBiGtLc+NtTdYjCcJyFDsQ2cshOnr1PlYUmH7aTqbqYyEajRS"
- "12Bqr6f2V2CaLInjCCqGShJ5NTRAVOQSRokulDWfozap2gLGmaMwetIv7/yeulGpxnb94TCK"
- "Hp23fLHAedSgeS/C4fHo/y89R5qqfhF9+xJGvszoH5Xccuo6pVT3AAAAAElFTkSuQmCC")
-
-#----------------------------------------------------------------------
-whidbey_up_focus_single = whidbey_up_focus
-
-#----------------------------------------------------------------------
-
-whidbey_denied = aero_denied
-
-#----------------------------------------------------------------------
-
-# ------------------------ #
-# - AuiToolBar Constants - #
-# ------------------------ #
-
-ITEM_CONTROL = wx.ITEM_MAX
-""" The item in the AuiToolBar is a control. """
-ITEM_LABEL = ITEM_CONTROL + 1
-""" The item in the AuiToolBar is a text label. """
-ITEM_SPACER = ITEM_CONTROL + 2
-""" The item in the AuiToolBar is a spacer. """
-ITEM_SEPARATOR = wx.ITEM_SEPARATOR
-""" The item in the AuiToolBar is a separator. """
-ITEM_CHECK = wx.ITEM_CHECK
-""" The item in the AuiToolBar is a toolbar check item. """
-ITEM_NORMAL = wx.ITEM_NORMAL
-""" The item in the AuiToolBar is a standard toolbar item. """
-ITEM_RADIO = wx.ITEM_RADIO
-""" The item in the AuiToolBar is a toolbar radio item. """
-ID_RESTORE_FRAME = wx.ID_HIGHEST + 10000
-""" Identifier for restoring a minimized pane. """
-
-BUTTON_DROPDOWN_WIDTH = 10
-""" Width of the drop-down button in AuiToolBar. """
-
-DISABLED_TEXT_GREY_HUE = 153.0
-""" Hue text colour for the disabled text in AuiToolBar. """
-DISABLED_TEXT_COLOUR = wx.Colour(DISABLED_TEXT_GREY_HUE,
- DISABLED_TEXT_GREY_HUE,
- DISABLED_TEXT_GREY_HUE)
-""" Text colour for the disabled text in AuiToolBar. """
-
-AUI_TB_TEXT = 1 << 0
-""" Shows the text in the toolbar buttons; by default only icons are shown. """
-AUI_TB_NO_TOOLTIPS = 1 << 1
-""" Don't show tooltips on `AuiToolBar` items. """
-AUI_TB_NO_AUTORESIZE = 1 << 2
-""" Do not auto-resize the `AuiToolBar`. """
-AUI_TB_GRIPPER = 1 << 3
-""" Shows a gripper on the `AuiToolBar`. """
-AUI_TB_OVERFLOW = 1 << 4
-""" The `AuiToolBar` can contain overflow items. """
-AUI_TB_VERTICAL = 1 << 5
-""" The `AuiToolBar` is vertical. """
-AUI_TB_HORZ_LAYOUT = 1 << 6
-""" Shows the text and the icons alongside, not vertically stacked.
-This style must be used with ``AUI_TB_TEXT``. """
-AUI_TB_PLAIN_BACKGROUND = 1 << 7
-""" Don't draw a gradient background on the toolbar. """
-AUI_TB_CLOCKWISE = 1 << 8
-AUI_TB_COUNTERCLOCKWISE = 1 << 9
-
-AUI_TB_HORZ_TEXT = AUI_TB_HORZ_LAYOUT | AUI_TB_TEXT
-""" Combination of ``AUI_TB_HORZ_LAYOUT`` and ``AUI_TB_TEXT``. """
-AUI_TB_VERT_TEXT = AUI_TB_VERTICAL | AUI_TB_CLOCKWISE | AUI_TB_TEXT
-
-AUI_TB_DEFAULT_STYLE = 0
-""" `AuiToolBar` default style. """
-
-# AuiToolBar settings
-AUI_TBART_SEPARATOR_SIZE = 0
-""" Separator size in AuiToolBar. """
-AUI_TBART_GRIPPER_SIZE = 1
-""" Gripper size in AuiToolBar. """
-AUI_TBART_OVERFLOW_SIZE = 2
-""" Overflow button size in AuiToolBar. """
-
-# AuiToolBar text orientation
-AUI_TBTOOL_TEXT_LEFT = 0 # unused/unimplemented
-""" Text in AuiToolBar items is aligned left. """
-AUI_TBTOOL_TEXT_RIGHT = 1
-""" Text in AuiToolBar items is aligned right. """
-AUI_TBTOOL_TEXT_TOP = 2 # unused/unimplemented
-""" Text in AuiToolBar items is aligned top. """
-AUI_TBTOOL_TEXT_BOTTOM = 3
-""" Text in AuiToolBar items is aligned bottom. """
-
-# AuiToolBar tool orientation
-AUI_TBTOOL_HORIZONTAL = 0 # standard
-AUI_TBTOOL_VERT_CLOCKWISE = 1 # rotation of 90 on the right
-AUI_TBTOOL_VERT_COUNTERCLOCKWISE = 2 # rotation of 90 on the left
-
-
-# --------------------- #
-# - AuiMDI* Constants - #
-# --------------------- #
-
-wxWINDOWCLOSE = 4001
-""" Identifier for the AuiMDI "close window" menu. """
-wxWINDOWCLOSEALL = 4002
-""" Identifier for the AuiMDI "close all windows" menu. """
-wxWINDOWNEXT = 4003
-""" Identifier for the AuiMDI "next window" menu. """
-wxWINDOWPREV = 4004
-""" Identifier for the AuiMDI "previous window" menu. """
-
-# ----------------------------- #
-# - AuiDockingGuide Constants - #
-# ----------------------------- #
-
-colourTargetBorder = wx.Colour(180, 180, 180)
-colourTargetShade = wx.Colour(206, 206, 206)
-colourTargetBackground = wx.Colour(224, 224, 224)
-colourIconBorder = wx.Colour(82, 65, 156)
-colourIconBackground = wx.Colour(255, 255, 255)
-colourIconDockingPart1 = wx.Colour(215, 228, 243)
-colourIconDockingPart2 = wx.Colour(180, 201, 225)
-colourIconShadow = wx.Colour(198, 198, 198)
-colourIconArrow = wx.Colour(77, 79, 170)
-colourHintBackground = wx.Colour(0, 64, 255)
-guideSizeX, guideSizeY = 29, 32
-aeroguideSizeX, aeroguideSizeY = 31, 32
-whidbeySizeX, whidbeySizeY = 43, 30
-
-# ------------------------------- #
-# - AuiSwitcherDialog Constants - #
-# ------------------------------- #
-
-SWITCHER_TEXT_MARGIN_X = 4
-SWITCHER_TEXT_MARGIN_Y = 1
+++ /dev/null
-"""
-Description
-===========
-
-The idea of `SwitcherDialog` is to make it easier to implement keyboard
-navigation in AUI and other applications that have multiple panes and
-tabs.
-
-A key combination with a modifier (such as ``Ctrl`` + ``Tab``) shows the
-dialog, and the user holds down the modifier whilst navigating with
-``Tab`` and arrow keys before releasing the modifier to dismiss the dialog
-and activate the selected pane.
-
-The switcher dialog is a multi-column menu with no scrolling, implemented
-by the `MultiColumnListCtrl` class. You can have headings for your items
-for logical grouping, and you can force a column break if you need to.
-
-The modifier used for invoking and dismissing the dialog can be customised,
-as can the colours, number of rows, and the key used for cycling through
-the items. So you can use different keys on different platforms if
-required (especially since ``Ctrl`` + ``Tab`` is reserved on some platforms).
-
-Items are shown as names and optional 16x16 images.
-
-
-Base Functionalities
-====================
-
-To use the dialog, you set up the items in a `SwitcherItems` object,
-before passing this to the `SwitcherDialog` instance.
-
-Call L{SwitcherItems.AddItem} and optionally L{SwitcherItems.AddGroup} to add items and headings. These
-functions take a label (to be displayed to the user), an identifying name,
-an integer id, and a bitmap. The name and id are purely for application-defined
-identification. You may also set a description to be displayed when each
-item is selected; and you can set a window pointer for convenience when
-activating the desired window after the dialog returns.
-
-Have created the dialog, you call `ShowModal()`, and if the return value is
-``wx.ID_OK``, retrieve the selection from the dialog and activate the pane.
-
-The sample code below shows a generic method of finding panes and notebook
-tabs within the current L{AuiManager}, and using the pane name or notebook
-tab position to display the pane.
-
-The only other code to add is a menu item with the desired accelerator,
-whose modifier matches the one you pass to L{SwitcherDialog.SetModifierKey}
-(the default being ``wx.WXK_CONTROL``).
-
-
-Usage
-=====
-
-Menu item::
-
- if wx.Platform == "__WXMAC__":
- switcherAccel = "Alt+Tab"
- elif wx.Platform == "__WXGTK__":
- switcherAccel = "Ctrl+/"
- else:
- switcherAccel = "Ctrl+Tab"
-
- view_menu.Append(ID_SwitchPane, _("S&witch Window...") + "\t" + switcherAccel)
-
-
-Event handler::
-
- def OnSwitchPane(self, event):
-
- items = SwitcherItems()
- items.SetRowCount(12)
-
- # Add the main windows and toolbars, in two separate columns
- # We'll use the item 'id' to store the notebook selection, or -1 if not a page
-
- for k in xrange(2):
- if k == 0:
- items.AddGroup(_("Main Windows"), "mainwindows")
- else:
- items.AddGroup(_("Toolbars"), "toolbars").BreakColumn()
-
- for pane in self._mgr.GetAllPanes():
- name = pane.name
- caption = pane.caption
-
- toolbar = isinstance(info.window, wx.ToolBar) or isinstance(info.window, aui.AuiToolBar)
- if caption and (toolBar and k == 1) or (not toolBar and k == 0):
- items.AddItem(caption, name, -1).SetWindow(pane.window)
-
- # Now add the wxAuiNotebook pages
-
- items.AddGroup(_("Notebook Pages"), "pages").BreakColumn()
-
- for pane in self._mgr.GetAllPanes():
- nb = pane.window
- if isinstance(nb, aui.AuiNotebook):
- for j in xrange(nb.GetPageCount()):
-
- name = nb.GetPageText(j)
- win = nb.GetPage(j)
-
- items.AddItem(name, name, j, nb.GetPageBitmap(j)).SetWindow(win)
-
- # Select the focused window
-
- idx = items.GetIndexForFocus()
- if idx != wx.NOT_FOUND:
- items.SetSelection(idx)
-
- if wx.Platform == "__WXMAC__":
- items.SetBackgroundColour(wx.WHITE)
-
- # Show the switcher dialog
-
- dlg = SwitcherDialog(items, wx.GetApp().GetTopWindow())
-
- # In GTK+ we can't use Ctrl+Tab; we use Ctrl+/ instead and tell the switcher
- # to treat / in the same was as tab (i.e. cycle through the names)
-
- if wx.Platform == "__WXGTK__":
- dlg.SetExtraNavigationKey(wxT('/'))
-
- if wx.Platform == "__WXMAC__":
- dlg.SetBackgroundColour(wx.WHITE)
- dlg.SetModifierKey(wx.WXK_ALT)
-
- ans = dlg.ShowModal()
-
- if ans == wx.ID_OK and dlg.GetSelection() != -1:
- item = items.GetItem(dlg.GetSelection())
-
- if item.GetId() == -1:
- info = self._mgr.GetPane(item.GetName())
- info.Show()
- self._mgr.Update()
- info.window.SetFocus()
-
- else:
- nb = item.GetWindow().GetParent()
- win = item.GetWindow();
- if isinstance(nb, aui.AuiNotebook):
- nb.SetSelection(item.GetId())
- win.SetFocus()
-
-
-"""
-
-import wx
-
-import auibook
-from aui_utilities import FindFocusDescendant
-from aui_constants import SWITCHER_TEXT_MARGIN_X, SWITCHER_TEXT_MARGIN_Y
-
-
-# Define a translation function
-_ = wx.GetTranslation
-
-
-class SwitcherItem(object):
- """ An object containing information about one item. """
-
- def __init__(self, item=None):
- """ Default class constructor. """
-
- self._id = 0
- self._isGroup = False
- self._breakColumn = False
- self._rowPos = 0
- self._colPos = 0
- self._window = None
- self._description = ""
-
- self._textColour = wx.NullColour
- self._bitmap = wx.NullBitmap
- self._font = wx.NullFont
-
- if item:
- self.Copy(item)
-
-
- def Copy(self, item):
- """
- Copy operator between 2 L{SwitcherItem} instances.
-
- :param `item`: another instance of L{SwitcherItem}.
- """
-
- self._id = item._id
- self._name = item._name
- self._title = item._title
- self._isGroup = item._isGroup
- self._breakColumn = item._breakColumn
- self._rect = item._rect
- self._font = item._font
- self._textColour = item._textColour
- self._bitmap = item._bitmap
- self._description = item._description
- self._rowPos = item._rowPos
- self._colPos = item._colPos
- self._window = item._window
-
-
- def SetTitle(self, title):
-
- self._title = title
- return self
-
-
- def GetTitle(self):
-
- return self._title
-
-
- def SetName(self, name):
-
- self._name = name
- return self
-
-
- def GetName(self):
-
- return self._name
-
-
- def SetDescription(self, descr):
-
- self._description = descr
- return self
-
-
- def GetDescription(self):
-
- return self._description
-
-
- def SetId(self, id):
-
- self._id = id
- return self
-
-
- def GetId(self):
-
- return self._id
-
-
- def SetIsGroup(self, isGroup):
-
- self._isGroup = isGroup
- return self
-
-
- def GetIsGroup(self):
-
- return self._isGroup
-
-
- def BreakColumn(self, breakCol=True):
-
- self._breakColumn = breakCol
- return self
-
-
- def GetBreakColumn(self):
-
- return self._breakColumn
-
-
- def SetRect(self, rect):
-
- self._rect = rect
- return self
-
-
- def GetRect(self):
-
- return self._rect
-
-
- def SetTextColour(self, colour):
-
- self._textColour = colour
- return self
-
-
- def GetTextColour(self):
-
- return self._textColour
-
-
- def SetFont(self, font):
-
- self._font = font
- return self
-
-
- def GetFont(self):
-
- return self._font
-
-
- def SetBitmap(self, bitmap):
-
- self._bitmap = bitmap
- return self
-
-
- def GetBitmap(self):
-
- return self._bitmap
-
-
- def SetRowPos(self, pos):
-
- self._rowPos = pos
- return self
-
-
- def GetRowPos(self):
-
- return self._rowPos
-
-
- def SetColPos(self, pos):
-
- self._colPos = pos
- return self
-
-
- def GetColPos(self):
-
- return self._colPos
-
-
- def SetWindow(self, win):
-
- self._window = win
- return self
-
-
- def GetWindow(self):
-
- return self._window
-
-
-class SwitcherItems(object):
- """ An object containing switcher items. """
-
- def __init__(self, items=None):
- """ Default class constructor. """
-
- self._selection = -1
- self._rowCount = 10
- self._columnCount = 0
-
- self._backgroundColour = wx.NullColour
- self._textColour = wx.NullColour
- self._selectionColour = wx.NullColour
- self._selectionOutlineColour = wx.NullColour
- self._itemFont = wx.NullFont
-
- self._items = []
-
- if wx.Platform == "__WXMSW__":
- # If on Windows XP/Vista, use more appropriate colours
- self.SetSelectionOutlineColour(wx.Colour(49, 106, 197))
- self.SetSelectionColour(wx.Colour(193, 210, 238))
-
- if items:
- self.Copy(items)
-
-
- def Copy(self, items):
- """
- Copy operator between 2 L{SwitcherItems}.
-
- :param `items`: another instance of L{SwitcherItems}.
- """
-
- self.Clear()
-
- for item in items._items:
- self._items.append(item)
-
- self._selection = items._selection
- self._rowCount = items._rowCount
- self._columnCount = items._columnCount
-
- self._backgroundColour = items._backgroundColour
- self._textColour = items._textColour
- self._selectionColour = items._selectionColour
- self._selectionOutlineColour = items._selectionOutlineColour
- self._itemFont = items._itemFont
-
-
- def AddItem(self, titleOrItem, name=None, id=0, bitmap=wx.NullBitmap):
-
- if isinstance(titleOrItem, SwitcherItem):
- self._items.append(titleOrItem)
- return self._items[-1]
-
- item = SwitcherItem()
- item.SetTitle(titleOrItem)
- item.SetName(name)
- item.SetId(id)
- item.SetBitmap(bitmap)
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddGroup(self, title, name, id=0, bitmap=wx.NullBitmap):
-
- item = self.AddItem(title, name, id, bitmap)
- item.SetIsGroup(True)
-
- return item
-
-
- def Clear(self):
-
- self._items = []
-
-
- def FindItemByName(self, name):
-
- for i in xrange(len(self._items)):
- if self._items[i].GetName() == name:
- return i
-
- return wx.NOT_FOUND
-
-
- def FindItemById(self, id):
-
- for i in xrange(len(self._items)):
- if self._items[i].GetId() == id:
- return i
-
- return wx.NOT_FOUND
-
-
- def SetSelection(self, sel):
-
- self._selection = sel
-
-
- def SetSelectionByName(self, name):
-
- idx = self.FindItemByName(name)
- if idx != wx.NOT_FOUND:
- self.SetSelection(idx)
-
-
- def GetSelection(self):
-
- return self._selection
-
-
- def GetItem(self, i):
-
- return self._items[i]
-
-
- def GetItemCount(self):
-
- return len(self._items)
-
-
- def SetRowCount(self, rows):
-
- self._rowCount = rows
-
-
- def GetRowCount(self):
-
- return self._rowCount
-
-
- def SetColumnCount(self, cols):
-
- self._columnCount = cols
-
-
- def GetColumnCount(self):
-
- return self._columnCount
-
-
- def SetBackgroundColour(self, colour):
-
- self._backgroundColour = colour
-
-
- def GetBackgroundColour(self):
-
- return self._backgroundColour
-
-
- def SetTextColour(self, colour):
-
- self._textColour = colour
-
-
- def GetTextColour(self):
-
- return self._textColour
-
-
- def SetSelectionColour(self, colour):
-
- self._selectionColour = colour
-
-
- def GetSelectionColour(self):
-
- return self._selectionColour
-
-
- def SetSelectionOutlineColour(self, colour):
-
- self._selectionOutlineColour = colour
-
-
- def GetSelectionOutlineColour(self):
-
- return self._selectionOutlineColour
-
-
- def SetItemFont(self, font):
-
- self._itemFont = font
-
-
- def GetItemFont(self):
-
- return self._itemFont
-
-
- def PaintItems(self, dc, win):
-
- backgroundColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
- standardTextColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
- selectionColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)
- selectionOutlineColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
- standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- groupFont.SetWeight(wx.BOLD)
-
- if self.GetBackgroundColour().IsOk():
- backgroundColour = self.GetBackgroundColour()
-
- if self.GetTextColour().IsOk():
- standardTextColour = self.GetTextColour()
-
- if self.GetSelectionColour().IsOk():
- selectionColour = self.GetSelectionColour()
-
- if self.GetSelectionOutlineColour().IsOk():
- selectionOutlineColour = self.GetSelectionOutlineColour()
-
- if self.GetItemFont().IsOk():
-
- standardFont = self.GetItemFont()
- groupFont = wx.Font(standardFont.GetPointSize(), standardFont.GetFamily(), standardFont.GetStyle(),
- wx.BOLD, standardFont.GetUnderlined(), standardFont.GetFaceName())
-
- textMarginX = SWITCHER_TEXT_MARGIN_X
-
- dc.SetLogicalFunction(wx.COPY)
- dc.SetBrush(wx.Brush(backgroundColour))
- dc.SetPen(wx.TRANSPARENT_PEN)
- dc.DrawRectangleRect(win.GetClientRect())
- dc.SetBackgroundMode(wx.TRANSPARENT)
-
- for i in xrange(len(self._items)):
- item = self._items[i]
- if i == self._selection:
- dc.SetPen(wx.Pen(selectionOutlineColour))
- dc.SetBrush(wx.Brush(selectionColour))
- dc.DrawRectangleRect(item.GetRect())
-
- clippingRect = wx.Rect(*item.GetRect())
- clippingRect.Deflate(1, 1)
-
- dc.SetClippingRect(clippingRect)
-
- if item.GetTextColour().IsOk():
- dc.SetTextForeground(item.GetTextColour())
- else:
- dc.SetTextForeground(standardTextColour)
-
- if item.GetFont().IsOk():
- dc.SetFont(item.GetFont())
- else:
- if item.GetIsGroup():
- dc.SetFont(groupFont)
- else:
- dc.SetFont(standardFont)
-
- w, h = dc.GetTextExtent(item.GetTitle())
- x = item.GetRect().x
-
- x += textMarginX
-
- if not item.GetIsGroup():
- if item.GetBitmap().IsOk() and item.GetBitmap().GetWidth() <= 16 \
- and item.GetBitmap().GetHeight() <= 16:
- x -= textMarginX
- dc.DrawBitmap(item.GetBitmap(), x, item.GetRect().y + \
- (item.GetRect().height - item.GetBitmap().GetHeight())/2,
- True)
- x += 16 + textMarginX
- #x += textMarginX
-
- y = item.GetRect().y + (item.GetRect().height - h)/2
- dc.DrawText(item.GetTitle(), x, y)
- dc.DestroyClippingRegion()
-
-
- def CalculateItemSize(self, dc):
-
- # Start off allowing for an icon
- sz = wx.Size(150, 16)
- standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- groupFont.SetWeight(wx.BOLD)
-
- textMarginX = SWITCHER_TEXT_MARGIN_X
- textMarginY = SWITCHER_TEXT_MARGIN_Y
- maxWidth = 300
- maxHeight = 40
-
- if self.GetItemFont().IsOk():
- standardFont = self.GetItemFont()
-
- for item in self._items:
- if item.GetFont().IsOk():
- dc.SetFont(item.GetFont())
- else:
- if item.GetIsGroup():
- dc.SetFont(groupFont)
- else:
- dc.SetFont(standardFont)
-
- w, h = dc.GetTextExtent(item.GetTitle())
- w += 16 + 2*textMarginX
-
- if w > sz.x:
- sz.x = min(w, maxWidth)
- if h > sz.y:
- sz.y = min(h, maxHeight)
-
- if sz == wx.Size(16, 16):
- sz = wx.Size(100, 25)
- else:
- sz.x += textMarginX*2
- sz.y += textMarginY*2
-
- return sz
-
-
- def GetIndexForFocus(self):
-
- for i, item in enumerate(self._items):
- if item.GetWindow():
-
- if FindFocusDescendant(item.GetWindow()):
- return i
-
- return wx.NOT_FOUND
-
-
-class MultiColumnListCtrl(wx.PyControl):
- """ A control for displaying several columns (not scrollable). """
-
- def __init__(self, parent, aui_manager, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
- style=0, validator=wx.DefaultValidator, name="MultiColumnListCtrl"):
-
- wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name)
-
- self._overallSize = wx.Size(200, 100)
- self._modifierKey = wx.WXK_CONTROL
- self._extraNavigationKey = 0
- self._aui_manager = aui_manager
-
- self.SetInitialSize(size)
- self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
-
- self.Bind(wx.EVT_PAINT, self.OnPaint)
- self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
- self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouseEvent)
- self.Bind(wx.EVT_CHAR, self.OnChar)
- self.Bind(wx.EVT_KEY_DOWN, self.OnKey)
- self.Bind(wx.EVT_KEY_UP, self.OnKey)
-
-
- def __del__(self):
-
- self._aui_manager.HideHint()
-
-
- def DoGetBestSize(self):
-
- return self._overallSize
-
-
- def OnEraseBackground(self, event):
-
- pass
-
-
- def OnPaint(self, event):
-
- dc = wx.AutoBufferedPaintDC(self)
- rect = self.GetClientRect()
-
- if self._items.GetColumnCount() == 0:
- self.CalculateLayout(dc)
-
- if self._items.GetColumnCount() == 0:
- return
-
- self._items.PaintItems(dc, self)
-
-
- def OnMouseEvent(self, event):
-
- if event.LeftDown():
- self.SetFocus()
-
-
- def OnChar(self, event):
-
- event.Skip()
-
-
- def OnKey(self, event):
-
- if event.GetEventType() == wx.wxEVT_KEY_UP:
- if event.GetKeyCode() == self.GetModifierKey():
- topLevel = wx.GetTopLevelParent(self)
- closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
- closeEvent.SetEventObject(topLevel)
- closeEvent.SetCanVeto(False)
-
- topLevel.GetEventHandler().ProcessEvent(closeEvent)
- return
-
- event.Skip()
- return
-
- keyCode = event.GetKeyCode()
-
- if keyCode in [wx.WXK_ESCAPE, wx.WXK_RETURN]:
- if keyCode == wx.WXK_ESCAPE:
- self._items.SetSelection(-1)
-
- topLevel = wx.GetTopLevelParent(self)
- closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
- closeEvent.SetEventObject(topLevel)
- closeEvent.SetCanVeto(False)
-
- topLevel.GetEventHandler().ProcessEvent(closeEvent)
- return
-
- elif keyCode in [wx.WXK_TAB, self.GetExtraNavigationKey()]:
- if event.ShiftDown():
-
- self._items.SetSelection(self._items.GetSelection() - 1)
- if self._items.GetSelection() < 0:
- self._items.SetSelection(self._items.GetItemCount() - 1)
-
- self.AdvanceToNextSelectableItem(-1)
-
- else:
-
- self._items.SetSelection(self._items.GetSelection() + 1)
- if self._items.GetSelection() >= self._items.GetItemCount():
- self._items.SetSelection(0)
-
- self.AdvanceToNextSelectableItem(1)
-
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN]:
- self._items.SetSelection(self._items.GetSelection() + 1)
- if self._items.GetSelection() >= self._items.GetItemCount():
- self._items.SetSelection(0)
-
- self.AdvanceToNextSelectableItem(1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_UP, wx.WXK_NUMPAD_UP]:
- self._items.SetSelection(self._items.GetSelection() - 1)
- if self._items.GetSelection() < 0:
- self._items.SetSelection(self._items.GetItemCount() - 1)
-
- self.AdvanceToNextSelectableItem(-1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_HOME, wx.WXK_NUMPAD_HOME]:
- self._items.SetSelection(0)
- self.AdvanceToNextSelectableItem(1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_END, wx.WXK_NUMPAD_END]:
- self._items.SetSelection(self._items.GetItemCount() - 1)
- self.AdvanceToNextSelectableItem(-1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_LEFT, wx.WXK_NUMPAD_LEFT]:
- item = self._items.GetItem(self._items.GetSelection())
-
- row = item.GetRowPos()
- newCol = item.GetColPos() - 1
- if newCol < 0:
- newCol = self._items.GetColumnCount() - 1
-
- # Find the first item from the end whose row matches and whose column is equal or lower
- for i in xrange(self._items.GetItemCount()-1, -1, -1):
- item2 = self._items.GetItem(i)
- if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
- self._items.SetSelection(i)
- break
-
- self.AdvanceToNextSelectableItem(-1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- elif keyCode in [wx.WXK_RIGHT, wx.WXK_NUMPAD_RIGHT]:
- item = self._items.GetItem(self._items.GetSelection())
-
- row = item.GetRowPos()
- newCol = item.GetColPos() + 1
- if newCol >= self._items.GetColumnCount():
- newCol = 0
-
- # Find the first item from the end whose row matches and whose column is equal or lower
- for i in xrange(self._items.GetItemCount()-1, -1, -1):
- item2 = self._items.GetItem(i)
- if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
- self._items.SetSelection(i)
- break
-
- self.AdvanceToNextSelectableItem(1)
- self.GenerateSelectionEvent()
- self.Refresh()
-
- else:
- event.Skip()
-
-
- def AdvanceToNextSelectableItem(self, direction):
-
- if self._items.GetItemCount() < 2:
- return
-
- if self._items.GetSelection() == -1:
- self._items.SetSelection(0)
-
- oldSel = self._items.GetSelection()
-
- while 1:
-
- if self._items.GetItem(self._items.GetSelection()).GetIsGroup():
-
- self._items.SetSelection(self._items.GetSelection() + direction)
- if self._items.GetSelection() == -1:
- self._items.SetSelection(self._items.GetItemCount()-1)
- elif self._items.GetSelection() == self._items.GetItemCount():
- self._items.SetSelection(0)
- if self._items.GetSelection() == oldSel:
- break
-
- else:
- break
-
- self.SetTransparency()
- selection = self._items.GetItem(self._items.GetSelection()).GetWindow()
- pane = self._aui_manager.GetPane(selection)
-
- if not pane.IsOk():
- if isinstance(selection.GetParent(), auibook.AuiNotebook):
- self.SetTransparency(selection)
- self._aui_manager.ShowHint(selection.GetScreenRect())
- wx.CallAfter(self.SetFocus)
- self.SetFocus()
- return
- else:
- self._aui_manager.HideHint()
- return
- if not pane.IsShown():
- self._aui_manager.HideHint()
- return
-
- self.SetTransparency(selection)
- self._aui_manager.ShowHint(selection.GetScreenRect())
- # NOTE: this is odd but it is the only way for the focus to
- # work correctly on wxMac...
- wx.CallAfter(self.SetFocus)
- self.SetFocus()
-
-
- def SetTransparency(self, selection=None):
-
- if not self.GetParent().CanSetTransparent():
- return
-
- if selection is not None:
- intersects = False
- if selection.GetScreenRect().Intersects(self.GetParent().GetScreenRect()):
- intersects = True
- self.GetParent().SetTransparent(200)
- return
-
- self.GetParent().SetTransparent(255)
-
-
- def GenerateSelectionEvent(self):
-
- event = wx.CommandEvent(wx.wxEVT_COMMAND_LISTBOX_SELECTED, self.GetId())
- event.SetEventObject(self)
- event.SetInt(self._items.GetSelection())
- self.GetEventHandler().ProcessEvent(event)
-
-
- def CalculateLayout(self, dc=None):
-
- if dc is None:
- dc = wx.ClientDC(self)
-
- if self._items.GetSelection() == -1:
- self._items.SetSelection(0)
-
- columnCount = 1
-
- # Spacing between edge of window or between columns
- xMargin = 4
- yMargin = 4
-
- # Inter-row spacing
- rowSpacing = 2
-
- itemSize = self._items.CalculateItemSize(dc)
- self._overallSize = wx.Size(350, 200)
-
- currentRow = 0
- x = xMargin
- y = yMargin
-
- breaking = False
- i = 0
-
- while 1:
-
- oldOverallSize = self._overallSize
- item = self._items.GetItem(i)
-
- item.SetRect(wx.Rect(x, y, itemSize.x, itemSize.y))
- item.SetColPos(columnCount-1)
- item.SetRowPos(currentRow)
-
- if item.GetRect().GetBottom() > self._overallSize.y:
- self._overallSize.y = item.GetRect().GetBottom() + yMargin
-
- if item.GetRect().GetRight() > self._overallSize.x:
- self._overallSize.x = item.GetRect().GetRight() + xMargin
-
- currentRow += 1
-
- y += rowSpacing + itemSize.y
- stopBreaking = breaking
-
- if currentRow > self._items.GetRowCount() or (item.GetBreakColumn() and not breaking and currentRow != 1):
- currentRow = 0
- columnCount += 1
- x += xMargin + itemSize.x
- y = yMargin
-
- # Make sure we don't orphan a group
- if item.GetIsGroup() or (item.GetBreakColumn() and not breaking):
- self._overallSize = oldOverallSize
-
- if item.GetBreakColumn():
- breaking = True
-
- # Repeat the last item, in the next column
- i -= 1
-
- if stopBreaking:
- breaking = False
-
- i += 1
-
- if i >= self._items.GetItemCount():
- break
-
- self._items.SetColumnCount(columnCount)
- self.InvalidateBestSize()
-
-
- def SetItems(self, items):
-
- self._items = items
-
-
- def GetItems(self):
-
- return self._items
-
-
- def SetExtraNavigationKey(self, keyCode):
- """
- Set an extra key that can be used to cycle through items,
- in case not using the ``Ctrl`` + ``Tab`` combination.
- """
-
- self._extraNavigationKey = keyCode
-
-
- def GetExtraNavigationKey(self):
-
- return self._extraNavigationKey
-
-
- def SetModifierKey(self, modifierKey):
- """
- Set the modifier used to invoke the dialog, and therefore to test for
- release.
- """
-
- self._modifierKey = modifierKey
-
-
- def GetModifierKey(self):
-
- return self._modifierKey
-
-
-
-class SwitcherDialog(wx.Dialog):
- """
- SwitcherDialog shows a L{MultiColumnListCtrl} with a list of panes
- and tabs for the user to choose. ``Ctrl`` + ``Tab`` cycles through them.
- """
-
- def __init__(self, items, parent, aui_manager, id=wx.ID_ANY, title=_("Pane Switcher"), pos=wx.DefaultPosition,
- size=wx.DefaultSize, style=wx.STAY_ON_TOP|wx.DIALOG_NO_PARENT|wx.BORDER_SIMPLE):
- """ Default class constructor. """
-
- self._switcherBorderStyle = (style & wx.BORDER_MASK)
- if self._switcherBorderStyle == wx.BORDER_NONE:
- self._switcherBorderStyle = wx.BORDER_SIMPLE
-
- style &= wx.BORDER_MASK
- style |= wx.BORDER_NONE
-
- wx.Dialog.__init__(self, parent, id, title, pos, size, style)
-
- self._listCtrl = MultiColumnListCtrl(self, aui_manager,
- style=wx.WANTS_CHARS|wx.NO_BORDER)
- self._listCtrl.SetItems(items)
- self._listCtrl.CalculateLayout()
-
- self._descriptionCtrl = wx.html.HtmlWindow(self, size=(-1, 100), style=wx.BORDER_NONE)
- self._descriptionCtrl.SetBackgroundColour(self.GetBackgroundColour())
-
- if wx.Platform == "__WXGTK__":
- fontSize = 11
- self._descriptionCtrl.SetStandardFonts(fontSize)
-
- sizer = wx.BoxSizer(wx.VERTICAL)
- self.SetSizer(sizer)
- sizer.Add(self._listCtrl, 1, wx.ALL|wx.EXPAND, 10)
- sizer.Add(self._descriptionCtrl, 0, wx.ALL|wx.EXPAND, 10)
- sizer.SetSizeHints(self)
-
- self._listCtrl.SetFocus()
-
- self.Centre(wx.BOTH)
-
- if self._listCtrl.GetItems().GetSelection() == -1:
- self._listCtrl.GetItems().SetSelection(0)
-
- self._listCtrl.AdvanceToNextSelectableItem(1)
-
- self.ShowDescription(self._listCtrl.GetItems().GetSelection())
-
- self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
- self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
- self.Bind(wx.EVT_LISTBOX, self.OnSelectItem)
- self.Bind(wx.EVT_PAINT, self.OnPaint)
-
- # Attributes
- self._closing = False
- if wx.Platform == "__WXMSW__":
- self._borderColour = wx.Colour(49, 106, 197)
- else:
- self._borderColour = wx.BLACK
-
- self._aui_manager = aui_manager
-
-
- def OnCloseWindow(self, event):
-
- if self._closing:
- return
-
- if self.IsModal():
- self._closing = True
-
- if self.GetSelection() == -1:
- self.EndModal(wx.ID_CANCEL)
- else:
- self.EndModal(wx.ID_OK)
-
- self._aui_manager.HideHint()
-
-
- def GetSelection(self):
-
- return self._listCtrl.GetItems().GetSelection()
-
-
- def OnActivate(self, event):
-
- if not event.GetActive():
- if not self._closing:
- self._closing = True
- self.EndModal(wx.ID_CANCEL)
-
-
- def OnPaint(self, event):
-
- dc = wx.PaintDC(self)
-
- if self._switcherBorderStyle == wx.BORDER_SIMPLE:
-
- dc.SetPen(wx.Pen(self._borderColour))
- dc.SetBrush(wx.TRANSPARENT_BRUSH)
-
- rect = self.GetClientRect()
- dc.DrawRectangleRect(rect)
-
- # Draw border around the HTML control
- rect = wx.Rect(*self._descriptionCtrl.GetRect())
- rect.Inflate(1, 1)
- dc.DrawRectangleRect(rect)
-
-
- def OnSelectItem(self, event):
-
- self.ShowDescription(event.GetSelection())
-
-
-# Convert a colour to a 6-digit hex string
- def ColourToHexString(self, col):
-
- hx = '%02x%02x%02x' % tuple([int(c) for c in col])
- return hx
-
-
- def ShowDescription(self, i):
-
- item = self._listCtrl.GetItems().GetItem(i)
- colour = self._listCtrl.GetItems().GetBackgroundColour()
-
- if not colour.IsOk():
- colour = self.GetBackgroundColour()
-
- backgroundColourHex = self.ColourToHexString(colour)
- html = _("<body bgcolor=\"#") + backgroundColourHex + _("\"><b>") + item.GetTitle() + _("</b>")
-
- if item.GetDescription():
- html += _("<p>")
- html += item.GetDescription()
-
- html += _("</body>")
- self._descriptionCtrl.SetPage(html)
-
-
- def SetExtraNavigationKey(self, keyCode):
-
- self._extraNavigationKey = keyCode
- if self._listCtrl:
- self._listCtrl.SetExtraNavigationKey(keyCode)
-
-
- def GetExtraNavigationKey(self):
-
- return self._extraNavigationKey
-
-
- def SetModifierKey(self, modifierKey):
-
- self._modifierKey = modifierKey
- if self._listCtrl:
- self._listCtrl.SetModifierKey(modifierKey)
-
-
- def GetModifierKey(self):
-
- return self._modifierKey
-
-
- def SetBorderColour(self, colour):
-
- self._borderColour = colour
-
-
\ No newline at end of file
+++ /dev/null
-"""
-This module contains some common functions used by wxPython-AUI to
-manipulate colours, bitmaps, text, gradient shadings and custom
-dragging images for AuiNotebook tabs.
-"""
-
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
-__date__ = "31 March 2009"
-
-
-import wx
-
-from aui_constants import *
-
-
-if wx.Platform == "__WXMAC__":
- import Carbon.Appearance
-
-
-def BlendColour(fg, bg, alpha):
- """
- Blends the two colour component `fg` and `bg` into one colour component, adding
- an optional alpha channel.
-
- :param `fg`: the first colour component;
- :param `bg`: the second colour component;
- :param `alpha`: an optional transparency value.
- """
-
- result = bg + (alpha*(fg - bg))
-
- if result < 0.0:
- result = 0.0
- if result > 255:
- result = 255
-
- return result
-
-
-def StepColour(c, ialpha):
- """
- Darken/lighten the input colour `c`.
-
- :param `c`: a colour to darken/lighten;
- :param `ialpha`: a transparency value.
- """
-
- if ialpha == 100:
- return c
-
- r, g, b = c.Red(), c.Green(), c.Blue()
-
- # ialpha is 0..200 where 0 is completely black
- # and 200 is completely white and 100 is the same
- # convert that to normal alpha 0.0 - 1.0
- ialpha = min(ialpha, 200)
- ialpha = max(ialpha, 0)
- alpha = (ialpha - 100.0)/100.0
-
- if ialpha > 100:
-
- # blend with white
- bg = 255
- alpha = 1.0 - alpha # 0 = transparent fg 1 = opaque fg
-
- else:
-
- # blend with black
- bg = 0
- alpha = 1.0 + alpha # 0 = transparent fg 1 = opaque fg
-
- r = BlendColour(r, bg, alpha)
- g = BlendColour(g, bg, alpha)
- b = BlendColour(b, bg, alpha)
-
- return wx.Colour(r, g, b)
-
-
-def LightContrastColour(c):
- """
- Creates a new, lighter colour based on the input colour `c`.
-
- :param `c`: the input colour to analyze.
- """
-
- amount = 120
-
- # if the colour is especially dark, then
- # make the contrast even lighter
- if c.Red() < 128 and c.Green() < 128 and c.Blue() < 128:
- amount = 160
-
- return StepColour(c, amount)
-
-
-def ChopText(dc, text, max_size):
- """
- Chops the input `text` if its size does not fit in `max_size`, by cutting the
- text and adding ellipsis at the end.
-
- :param `dc`: a `wx.DC` device context;
- :param `text`: the text to chop;
- :param `max_size`: the maximum size in which the text should fit.
- """
-
- # first check if the text fits with no problems
- x, y, dummy = dc.GetMultiLineTextExtent(text)
-
- if x <= max_size:
- return text
-
- textLen = len(text)
- last_good_length = 0
-
- for i in xrange(textLen, -1, -1):
- s = text[0:i]
- s += "..."
-
- x, y = dc.GetTextExtent(s)
- last_good_length = i
-
- if x < max_size:
- break
-
- ret = text[0:last_good_length] + "..."
- return ret
-
-
-def BitmapFromBits(bits, w, h, colour):
- """
- BitmapFromBits() is a utility function that creates a
- masked bitmap from raw bits (XBM format).
-
- :param `bits`: a string containing the raw bits of the bitmap;
- :param `w`: the bitmap width;
- :param `h`: the bitmap height;
- :param `colour`: the colour which will replace all white pixels in the
- raw bitmap.
- """
-
- img = wx.BitmapFromBits(bits, w, h).ConvertToImage()
- img.Replace(0, 0, 0, 123, 123, 123)
- img.Replace(255, 255, 255, colour.Red(), colour.Green(), colour.Blue())
- img.SetMaskColour(123, 123, 123)
- return wx.BitmapFromImage(img)
-
-
-def IndentPressedBitmap(rect, button_state):
- """
- Indents the input rectangle `rect` based on the value of `button_state`.
-
- :param `rect`: an instance of wx.Rect;
- :param `button_state`: an L{AuiNotebook} button state.
- """
-
- if button_state == AUI_BUTTON_STATE_PRESSED:
- rect.x += 1
- rect.y += 1
-
- return rect
-
-
-def GetBaseColour():
- """
- Returns the face shading colour on push buttons/backgrounds, mimicking as closely
- as possible the platform UI colours.
- """
-
- if wx.Platform == "__WXMAC__":
-
- if hasattr(wx, 'MacThemeColour'):
- base_colour = wx.MacThemeColour(Carbon.Appearance.kThemeBrushToolbarBackground)
- else:
- brush = wx.Brush(wx.BLACK)
- brush.MacSetTheme(Carbon.Appearance.kThemeBrushToolbarBackground)
- base_colour = brush.GetColour()
-
- else:
-
- base_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
-
- # the base_colour is too pale to use as our base colour,
- # so darken it a bit
- if ((255-base_colour.Red()) +
- (255-base_colour.Green()) +
- (255-base_colour.Blue()) < 60):
-
- base_colour = StepColour(base_colour, 92)
-
- return base_colour
-
-
-def MakeDisabledBitmap(bitmap):
- """
- Convert the given image (in place) to a grayed-out version,
- appropriate for a 'disabled' appearance.
-
- :param `bitmap`: the bitmap to gray-out.
- """
-
- anImage = bitmap.ConvertToImage()
- factor = 0.7 # 0 < f < 1. Higher Is Grayer
-
- if anImage.HasMask():
- maskColour = (anImage.GetMaskRed(), anImage.GetMaskGreen(), anImage.GetMaskBlue())
- else:
- maskColour = None
-
- data = map(ord, list(anImage.GetData()))
-
- for i in range(0, len(data), 3):
-
- pixel = (data[i], data[i+1], data[i+2])
- pixel = MakeGray(pixel, factor, maskColour)
-
- for x in range(3):
- data[i+x] = pixel[x]
-
- anImage.SetData(''.join(map(chr, data)))
-
- return anImage.ConvertToBitmap()
-
-
-def MakeGray(rgbTuple, factor, maskColour):
- """
- Make a pixel grayed-out. If the pixel matches the `maskColour`, it won't be
- changed.
-
- :param `rgbTuple`: a tuple representing a pixel colour;
- :param `factor`: a graying-out factor;
- :param `maskColour`: a colour mask.
- """
-
- if rgbTuple != maskColour:
- r, g, b = rgbTuple
- return map(lambda x: int((230 - x) * factor) + x, (r, g, b))
- else:
- return rgbTuple
-
-
-def Clip(a, b, c):
- """
- Clips the value in `a` based on the extremes `b` and `c`.
-
- :param `a`: the value to analyze;
- :param `b`: a minimum value;
- :param `c`: a maximum value.
- """
-
- return ((a < b and [b]) or [(a > c and [c] or [a])[0]])[0]
-
-
-def LightColour(colour, percent):
- """
- Brighten input `colour` by `percent`.
-
- :param `colour`: the colour to be brightened;
- :param `percent`: brightening percentage.
- """
-
- end_colour = wx.WHITE
-
- rd = end_colour.Red() - colour.Red()
- gd = end_colour.Green() - colour.Green()
- bd = end_colour.Blue() - colour.Blue()
-
- high = 100
-
- # We take the percent way of the colour from colour -. white
- i = percent
- r = colour.Red() + ((i*rd*100)/high)/100
- g = colour.Green() + ((i*gd*100)/high)/100
- b = colour.Blue() + ((i*bd*100)/high)/100
- return wx.Colour(r, g, b)
-
-
-def PaneCreateStippleBitmap():
- """
- Creates a stipple bitmap to be used in a `wx.Brush`.
- This is used to draw sash resize hints.
- """
-
- data = [0, 0, 0, 192, 192, 192, 192, 192, 192, 0, 0, 0]
- img = wx.EmptyImage(2, 2)
- counter = 0
-
- for ii in xrange(2):
- for jj in xrange(2):
- img.SetRGB(ii, jj, data[counter], data[counter+1], data[counter+2])
- counter = counter + 3
-
- return img.ConvertToBitmap()
-
-
-def DrawMACCloseButton(colour, backColour=None):
- """
- Draws the wxMAC tab close button using `wx.GraphicsContext`.
-
- :param `colour`: the colour to use to draw the circle;
- :param `backColour`: the optional background colour for the circle.
- """
-
- bmp = wx.EmptyBitmapRGBA(16, 16)
- dc = wx.MemoryDC()
- dc.SelectObject(bmp)
-
- gc = wx.GraphicsContext.Create(dc)
- gc.SetBrush(wx.Brush(colour))
- path = gc.CreatePath()
- path.AddCircle(6.5, 7, 6.5)
- path.CloseSubpath()
- gc.FillPath(path)
-
- path = gc.CreatePath()
- if backColour is not None:
- pen = wx.Pen(backColour, 2)
- else:
- pen = wx.Pen("white", 2)
-
- pen.SetCap(wx.CAP_BUTT)
- pen.SetJoin(wx.JOIN_BEVEL)
- gc.SetPen(pen)
- path.MoveToPoint(3.5, 4)
- path.AddLineToPoint(9.5, 10)
- path.MoveToPoint(3.5, 10)
- path.AddLineToPoint(9.5, 4)
- path.CloseSubpath()
- gc.DrawPath(path)
-
- dc.SelectObject(wx.NullBitmap)
- return bmp
-
-
-def DarkenBitmap(bmp, caption_colour, new_colour):
- """
- Darkens the input bitmap on wxMAC using the input colour.
-
- :param `bmp`: the bitmap to be manipulated;
- :param `caption_colour`: the colour of the pane caption;
- :param `new_colour`: the colour used to darken the bitmap.
- """
-
- image = bmp.ConvertToImage()
- red = caption_colour.Red()/float(new_colour.Red())
- green = caption_colour.Green()/float(new_colour.Green())
- blue = caption_colour.Blue()/float(new_colour.Blue())
- image = image.AdjustChannels(red, green, blue)
- return image.ConvertToBitmap()
-
-
-def DrawGradientRectangle(dc, rect, start_colour, end_colour, direction, offset=0, length=0):
- """
- Draws a gradient-shaded rectangle.
-
- :param `dc`: a `wx.DC` device context;
- :param `rect`: the rectangle in which to draw the gradient;
- :param `start_colour`: the first colour of the gradient;
- :param `end_colour`: the second colour of the gradient;
- :param `direction`: the gradient direction (horizontal or vertical).
- """
-
- if direction == AUI_GRADIENT_VERTICAL:
- dc.GradientFillLinear(rect, start_colour, end_colour, wx.SOUTH)
- else:
- dc.GradientFillLinear(rect, start_colour, end_colour, wx.EAST)
-
-
-def FindFocusDescendant(ancestor):
- """
- Find a window with the focus, that is also a descendant of the given window.
- This is used to determine the window to initially send commands to.
-
- :param `ancestor`: the window to check for ancestry.
- """
-
- # Process events starting with the window with the focus, if any.
- focusWin = wx.Window.FindFocus()
- win = focusWin
-
- # Check if this is a descendant of this frame.
- # If not, win will be set to NULL.
- while win:
- if win == ancestor:
- break
- else:
- win = win.GetParent()
-
- if win is None:
- focusWin = None
-
- return focusWin
-
-
-def GetLabelSize(dc, label, vertical):
- """
- Returns the L{AuiToolBar} item label size.
-
- :param `label`: the toolbar tool label;
- :param `vertical`: whether the toolbar tool orientation is vertical or not.
- """
-
- text_width = text_height = 0
-
- # get the text height
- dummy, text_height = dc.GetTextExtent("ABCDHgj")
- # get the text width
- if label.strip():
- text_width, dummy = dc.GetTextExtent(label)
-
- if vertical:
- tmp = text_height
- text_height = text_width
- text_width = tmp
-
- return wx.Size(text_width, text_height)
-
-
-#---------------------------------------------------------------------------
-# TabDragImage implementation
-# This class handles the creation of a custom image when dragging
-# AuiNotebook tabs
-#---------------------------------------------------------------------------
-
-class TabDragImage(wx.DragImage):
- """
- This class handles the creation of a custom image in case of drag and
- drop of a notebook tab.
- """
-
- def __init__(self, notebook, page, button_state, tabArt):
- """
- Default class constructor.
-
- For internal use: do not call it in your code!
-
- :param `notebook`: an instance of L{AuiNotebook};
- :param `page`: the dragged L{AuiNotebook} page;
- :param `button_state`: the state of the close button on the tab;
- :param `tabArt`: an instance of L{AuiDefaultTabArt} or one of its derivations.
- """
-
- self._backgroundColour = wx.NamedColour("pink")
- self._bitmap = self.CreateBitmap(notebook, page, button_state, tabArt)
- wx.DragImage.__init__(self, self._bitmap)
-
-
- def CreateBitmap(self, notebook, page, button_state, tabArt):
- """
- Actually creates the drag and drop bitmap.
-
- :param `notebook`: an instance of L{AuiNotebook};
- :param `page`: the dragged L{AuiNotebook} page;
- :param `button_state`: the state of the close button on the tab;
- :param `tabArt`: an instance of L{AuiDefaultTabArt} or one of its derivations.
- """
-
- control = page.control
- memory = wx.MemoryDC(wx.EmptyBitmap(1, 1))
-
- tab_size, x_extent = tabArt.GetTabSize(memory, notebook, page.caption, page.bitmap, page.active,
- button_state, control)
-
- tab_width, tab_height = tab_size
- rect = wx.Rect(0, 0, tab_width, tab_height)
-
- bitmap = wx.EmptyBitmap(tab_width+1, tab_height+1)
- memory.SelectObject(bitmap)
-
- if wx.Platform == "__WXMAC__":
- memory.SetBackground(wx.TRANSPARENT_BRUSH)
- else:
- memory.SetBackground(wx.Brush(self._backgroundColour))
-
- memory.SetBackgroundMode(wx.TRANSPARENT)
- memory.Clear()
-
- paint_control = wx.Platform != "__WXMAC__"
- tabArt.DrawTab(memory, notebook, page, rect, button_state, paint_control=paint_control)
-
- memory.SetBrush(wx.TRANSPARENT_BRUSH)
- memory.SetPen(wx.BLACK_PEN)
- memory.DrawRoundedRectangle(0, 0, tab_width+1, tab_height+1, 2)
-
- memory.SelectObject(wx.NullBitmap)
-
- # Gtk and Windows unfortunatly don't do so well with transparent
- # drawing so this hack corrects the image to have a transparent
- # background.
- if wx.Platform != '__WXMAC__':
- timg = bitmap.ConvertToImage()
- if not timg.HasAlpha():
- timg.InitAlpha()
- for y in xrange(timg.GetHeight()):
- for x in xrange(timg.GetWidth()):
- pix = wx.Colour(timg.GetRed(x, y),
- timg.GetGreen(x, y),
- timg.GetBlue(x, y))
- if pix == self._backgroundColour:
- timg.SetAlpha(x, y, 0)
- bitmap = timg.ConvertToBitmap()
- return bitmap
-
-
-def GetDockingImage(direction, useAero, center):
- """
- Returns the correct name of the docking bitmap depending on the input parameters.
-
- :param `useAero`: whether L{AuiManager} is using Aero-style or Whidbey-style docking
- images or not;
- :param `center`: whether we are looking for the center diamond-shaped bitmap or not.
- """
-
- suffix = (center and [""] or ["_single"])[0]
- prefix = ""
- if useAero == 2:
- # Whidbey docking guides
- prefix = "whidbey_"
- elif useAero == 1:
- # Aero docking style
- prefix = "aero_"
-
- if direction == wx.TOP:
- bmp_unfocus = eval("%sup%s"%(prefix, suffix)).GetBitmap()
- bmp_focus = eval("%sup_focus%s"%(prefix, suffix)).GetBitmap()
- elif direction == wx.BOTTOM:
- bmp_unfocus = eval("%sdown%s"%(prefix, suffix)).GetBitmap()
- bmp_focus = eval("%sdown_focus%s"%(prefix, suffix)).GetBitmap()
- elif direction == wx.LEFT:
- bmp_unfocus = eval("%sleft%s"%(prefix, suffix)).GetBitmap()
- bmp_focus = eval("%sleft_focus%s"%(prefix, suffix)).GetBitmap()
- elif direction == wx.RIGHT:
- bmp_unfocus = eval("%sright%s"%(prefix, suffix)).GetBitmap()
- bmp_focus = eval("%sright_focus%s"%(prefix, suffix)).GetBitmap()
- else:
- bmp_unfocus = eval("%stab%s"%(prefix, suffix)).GetBitmap()
- bmp_focus = eval("%stab_focus%s"%(prefix, suffix)).GetBitmap()
-
- return bmp_unfocus, bmp_focus
-
-
-def TakeScreenShot(rect):
- """
- Takes a screenshot of the screen at given position and size (rect).
-
- :param `rect`: the screen rectangle for which we want to take a screenshot.
- """
-
- # Create a DC for the whole screen area
- dcScreen = wx.ScreenDC()
-
- # Create a Bitmap that will later on hold the screenshot image
- # Note that the Bitmap must have a size big enough to hold the screenshot
- # -1 means using the current default colour depth
- bmp = wx.EmptyBitmap(rect.width, rect.height)
-
- # Create a memory DC that will be used for actually taking the screenshot
- memDC = wx.MemoryDC()
-
- # Tell the memory DC to use our Bitmap
- # all drawing action on the memory DC will go to the Bitmap now
- memDC.SelectObject(bmp)
-
- # Blit (in this case copy) the actual screen on the memory DC
- # and thus the Bitmap
- memDC.Blit( 0, # Copy to this X coordinate
- 0, # Copy to this Y coordinate
- rect.width, # Copy this width
- rect.height, # Copy this height
- dcScreen, # From where do we copy?
- rect.x, # What's the X offset in the original DC?
- rect.y # What's the Y offset in the original DC?
- )
-
- # Select the Bitmap out of the memory DC by selecting a new
- # uninitialized Bitmap
- memDC.SelectObject(wx.NullBitmap)
-
- return bmp
-
-
-def RescaleScreenShot(bmp, thumbnail_size=200):
- """
- Rescales a bitmap to be 300 pixels wide (or tall) at maximum.
-
- :param `bmp`: the bitmap to rescale;
- :param `thumbnail_size`: the maximum size of every page thumbnail.
- """
-
- bmpW, bmpH = bmp.GetWidth(), bmp.GetHeight()
- img = bmp.ConvertToImage()
-
- newW, newH = bmpW, bmpH
-
- if bmpW > bmpH:
- if bmpW > thumbnail_size:
- ratio = bmpW/float(thumbnail_size)
- newW, newH = int(bmpW/ratio), int(bmpH/ratio)
- img.Rescale(newW, newH, wx.IMAGE_QUALITY_HIGH)
- else:
- if bmpH > thumbnail_size:
- ratio = bmpH/float(thumbnail_size)
- newW, newH = int(bmpW/ratio), int(bmpH/ratio)
- img.Rescale(newW, newH, wx.IMAGE_QUALITY_HIGH)
-
- newBmp = img.ConvertToBitmap()
- otherBmp = wx.EmptyBitmap(newW+5, newH+5)
-
- memDC = wx.MemoryDC()
- memDC.SelectObject(otherBmp)
- memDC.SetBackground(wx.WHITE_BRUSH)
- memDC.Clear()
-
- memDC.SetPen(wx.TRANSPARENT_PEN)
-
- pos = 0
- for i in xrange(5, 0, -1):
- brush = wx.Brush(wx.Colour(50*i, 50*i, 50*i))
- memDC.SetBrush(brush)
- memDC.DrawRoundedRectangle(0, 0, newW+5-pos, newH+5-pos, 2)
- pos += 1
-
- memDC.DrawBitmap(newBmp, 0, 0, True)
-
- # Select the Bitmap out of the memory DC by selecting a new
- # uninitialized Bitmap
- memDC.SelectObject(wx.NullBitmap)
-
- return otherBmp
-
-
-def GetSlidingPoints(rect, size, direction):
- """
- Returns the point at which the sliding in and out of a minimized pane begins.
-
- :param `rect`: the L{AuiToolBar} tool screen rectangle;
- :param `size`: the pane window size;
- :param `direction`: the pane docking direction.
- """
-
- if direction == AUI_DOCK_LEFT:
- startX, startY = rect.x + rect.width + 2, rect.y
- elif direction == AUI_DOCK_TOP:
- startX, startY = rect.x, rect.y + rect.height + 2
- elif direction == AUI_DOCK_RIGHT:
- startX, startY = rect.x - size.x - 2, rect.y
- elif direction == AUI_DOCK_BOTTOM:
- startX, startY = rect.x, rect.y - size.y - 2
- else:
- raise Exception("How did we get here?")
-
- caption_height = wx.SystemSettings.GetMetric(wx.SYS_CAPTION_Y)
- frame_border_x = wx.SystemSettings.GetMetric(wx.SYS_FRAMESIZE_X)
- frame_border_y = wx.SystemSettings.GetMetric(wx.SYS_FRAMESIZE_Y)
-
- stopX = size.x + caption_height + frame_border_x
- stopY = size.x + frame_border_y
-
- return startX, startY, stopX, stopY
-
-
-def CopyAttributes(newArt, oldArt):
- """
- Copies pens, brushes, colours and fonts from the old tab art to the new one.
-
- :param `newArt`: the new instance of L{AuiDefaultTabArt};
- :param `oldArt`: the old instance of L{AuiDefaultTabArt}.
- """
-
- attrs = dir(oldArt)
-
- for attr in attrs:
- if attr.startswith("_") and (attr.endswith("_colour") or attr.endswith("_font") or \
- attr.endswith("_font") or attr.endswith("_brush") or \
- attr.endswith("Pen") or attr.endswith("_pen")):
- setattr(newArt, attr, getattr(oldArt, attr))
-
- return newArt
-
+++ /dev/null
-"""
-auibar contains an implementation of L{AuiToolBar}, which is a completely owner-drawn
-toolbar perfectly integrated with the AUI layout system. This allows drag and drop of
-toolbars, docking/floating behaviour and the possibility to define "overflow" items
-in the toolbar itself.
-
-The default theme that is used is L{AuiDefaultToolBarArt}, which provides a modern,
-glossy look and feel. The theme can be changed by calling L{AuiToolBar.SetArtProvider}.
-"""
-
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
-__date__ = "31 March 2009"
-
-
-import wx
-import types
-
-from aui_utilities import BitmapFromBits, StepColour, GetLabelSize
-from aui_utilities import GetBaseColour, MakeDisabledBitmap
-
-import framemanager
-from aui_constants import *
-
-# wxPython version string
-_VERSION_STRING = wx.VERSION_STRING
-
-# AuiToolBar events
-wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN = wx.NewEventType()
-wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK = wx.NewEventType()
-wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK = wx.NewEventType()
-wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK = wx.NewEventType()
-wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG = wx.NewEventType()
-
-EVT_AUITOOLBAR_TOOL_DROPDOWN = wx.PyEventBinder(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, 1)
-""" A dropdown `AuiToolBarItem` is being shown. """
-EVT_AUITOOLBAR_OVERFLOW_CLICK = wx.PyEventBinder(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, 1)
-""" The user left-clicked on the overflow button in `AuiToolBar`. """
-EVT_AUITOOLBAR_RIGHT_CLICK = wx.PyEventBinder(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, 1)
-""" Fires an event when the user right-clicks on a `AuiToolBarItem`. """
-EVT_AUITOOLBAR_MIDDLE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, 1)
-""" Fires an event when the user middle-clicks on a `AuiToolBarItem`. """
-EVT_AUITOOLBAR_BEGIN_DRAG = wx.PyEventBinder(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, 1)
-""" A drag operation involving a toolbar item has started. """
-
-# ----------------------------------------------------------------------
-
-class CommandToolBarEvent(wx.PyCommandEvent):
- """ A specialized command event class for events sent by L{AuiToolBar}. """
-
- def __init__(self, command_type, win_id):
- """
- Default class constructor.
-
- :param `command_type`: the event kind or an instance of `wx.PyCommandEvent`.
- :param `win_id`: the window identification number.
- """
-
- if type(command_type) == types.IntType:
- wx.PyCommandEvent.__init__(self, command_type, win_id)
- else:
- wx.PyCommandEvent.__init__(self, command_type.GetEventType(), command_type.GetId())
-
- self.is_dropdown_clicked = False
- self.click_pt = wx.Point(-1, -1)
- self.rect = wx.Rect(-1, -1, 0, 0)
- self.tool_id = -1
-
-
- def IsDropDownClicked(self):
- """ Returns whether the drop down menu has been clicked. """
-
- return self.is_dropdown_clicked
-
-
- def SetDropDownClicked(self, c):
- """
- Sets whether the drop down menu has been clicked.
-
- :param `c`: ``True`` to set the drop down as clicked, ``False`` otherwise.
- """
-
- self.is_dropdown_clicked = c
-
-
- def GetClickPoint(self):
- """ Returns the point where the user clicked with the mouse. """
-
- return self.click_pt
-
-
- def SetClickPoint(self, p):
- """
- Sets the clicking point.
-
- :param `p`: a `wx.Point` object.
- """
-
- self.click_pt = p
-
-
- def GetItemRect(self):
- """ Returns the L{AuiToolBarItem} rectangle. """
-
- return self.rect
-
-
- def SetItemRect(self, r):
- """
- Sets the L{AuiToolBarItem} rectangle.
-
- :param `r`: an instance of `wx.Rect`.
- """
-
- self.rect = r
-
-
- def GetToolId(self):
- """ Returns the L{AuiToolBarItem} identifier. """
-
- return self.tool_id
-
-
- def SetToolId(self, id):
- """
- Sets the L{AuiToolBarItem} identifier.
-
- :param `id`: the toolbar item identifier.
- """
-
- self.tool_id = id
-
-
-# ----------------------------------------------------------------------
-
-class AuiToolBarEvent(CommandToolBarEvent):
- """ A specialized command event class for events sent by L{AuiToolBar}. """
-
- def __init__(self, command_type=None, win_id=0):
- """
- Default class constructor.
-
- :param `command_type`: the event kind or an instance of `wx.PyCommandEvent`.
- :param `win_id`: the window identification number.
- """
-
- CommandToolBarEvent.__init__(self, command_type, win_id)
-
- if type(command_type) == types.IntType:
- self.notify = wx.NotifyEvent(command_type, win_id)
- else:
- self.notify = wx.NotifyEvent(command_type.GetEventType(), command_type.GetId())
-
-
- def GetNotifyEvent(self):
- """ Returns the actual `wx.NotifyEvent`. """
-
- return self.notify
-
-
- def IsAllowed(self):
- """ Returns whether the event is allowed or not. """
-
- return self.notify.IsAllowed()
-
-
- def Veto(self):
- """
- Prevents the change announced by this event from happening.
-
- It is in general a good idea to notify the user about the reasons for
- vetoing the change because otherwise the applications behaviour (which
- just refuses to do what the user wants) might be quite surprising.
- """
-
- self.notify.Veto()
-
-
- def Allow(self):
- """
- This is the opposite of L{Veto}: it explicitly allows the event to be
- processed. For most events it is not necessary to call this method as the
- events are allowed anyhow but some are forbidden by default (this will
- be mentioned in the corresponding event description).
- """
-
- self.notify.Allow()
-
-
-# ----------------------------------------------------------------------
-
-class ToolbarCommandCapture(wx.PyEvtHandler):
- """ A class to handle the dropdown window menu. """
-
- def __init__(self):
- """ Default class constructor. """
-
- wx.PyEvtHandler.__init__(self)
- self._last_id = 0
-
-
- def GetCommandId(self):
- """ Returns the event command identifier. """
-
- return self._last_id
-
-
- def ProcessEvent(self, event):
- """
- Processes an event, searching event tables and calling zero or more suitable
- event handler function(s).
-
- :param `event`: the event to process.
-
- :note: Normally, your application would not call this function: it is called
- in the wxPython implementation to dispatch incoming user interface events
- to the framework (and application).
- However, you might need to call it if implementing new functionality (such as
- a new control) where you define new event types, as opposed to allowing the
- user to override functions.
-
- An instance where you might actually override the L{ProcessEvent} function is where
- you want to direct event processing to event handlers not normally noticed by
- wxPython. For example, in the document/view architecture, documents and views
- are potential event handlers. When an event reaches a frame, L{ProcessEvent} will
- need to be called on the associated document and view in case event handler
- functions are associated with these objects.
-
- The normal order of event table searching is as follows:
-
- 1. If the object is disabled (via a call to `SetEvtHandlerEnabled`) the function
- skips to step (6).
- 2. If the object is a `wx.Window`, L{ProcessEvent} is recursively called on the window's
- `wx.Validator`. If this returns ``True``, the function exits.
- 3. wxWidgets `SearchEventTable` is called for this event handler. If this fails, the
- base class table is tried, and so on until no more tables exist or an appropriate
- function was found, in which case the function exits.
- 4. The search is applied down the entire chain of event handlers (usually the chain
- has a length of one). If this succeeds, the function exits.
- 5. If the object is a `wx.Window` and the event is a `wx.CommandEvent`, L{ProcessEvent} is
- recursively applied to the parent window's event handler. If this returns ``True``,
- the function exits.
- 6. Finally, L{ProcessEvent} is called on the `wx.App` object.
- """
-
- if event.GetEventType() == wx.wxEVT_COMMAND_MENU_SELECTED:
- self._last_id = event.GetId()
- return True
-
- if self.GetNextHandler():
- return self.GetNextHandler().ProcessEvent(event)
-
- return False
-
-
-# ----------------------------------------------------------------------
-
-class AuiToolBarItem(object):
- """
- AuiToolBarItem is a toolbar element.
-
- It has a unique id (except for the separators which always have id = -1), the
- style (telling whether it is a normal button, separator or a control), the
- state (toggled or not, enabled or not) and short and long help strings. The
- default implementations use the short help string for the tooltip text which
- is popped up when the mouse pointer enters the tool and the long help string
- for the applications status bar.
- """
-
- def __init__(self, item=None):
- """
- Default class constructor.
-
- :param `item`: another instance of L{AuiToolBarItem}.
- """
-
- if item:
- self.Assign(item)
- return
-
- self.window = None
- self.clockwisebmp = wx.NullBitmap
- self.counterclockwisebmp = wx.NullBitmap
- self.clockwisedisbmp = wx.NullBitmap
- self.counterclockwisedisbmp = wx.NullBitmap
- self.sizer_item = None
- self.spacer_pixels = 0
- self.id = 0
- self.kind = ITEM_NORMAL
- self.state = 0 # normal, enabled
- self.proportion = 0
- self.active = True
- self.dropdown = True
- self.sticky = True
- self.user_data = 0
-
- self.label = ""
- self.bitmap = wx.NullBitmap
- self.disabled_bitmap = wx.NullBitmap
- self.hover_bitmap = wx.NullBitmap
- self.short_help = ""
- self.long_help = ""
- self.min_size = wx.Size(-1, -1)
- self.alignment = wx.ALIGN_CENTER
- self.orientation = AUI_TBTOOL_HORIZONTAL
-
-
- def Assign(self, c):
- """
- Assigns the properties of the L{AuiToolBarItem} `c` to `self`.
-
- :param `c`: another instance of L{AuiToolBarItem}.
- """
-
- self.window = c.window
- self.label = c.label
- self.bitmap = c.bitmap
- self.disabled_bitmap = c.disabled_bitmap
- self.hover_bitmap = c.hover_bitmap
- self.short_help = c.short_help
- self.long_help = c.long_help
- self.sizer_item = c.sizer_item
- self.min_size = c.min_size
- self.spacer_pixels = c.spacer_pixels
- self.id = c.id
- self.kind = c.kind
- self.state = c.state
- self.proportion = c.proportion
- self.active = c.active
- self.dropdown = c.dropdown
- self.sticky = c.sticky
- self.user_data = c.user_data
- self.alignment = c.alignment
- self.orientation = c.orientation
-
-
- def SetWindow(self, w):
- """
- Assigns a window to the toolbar item.
-
- :param `w`: an instance of `wx.Window`.
- """
-
- self.window = w
-
-
- def GetWindow(self):
- """ Returns window associated to the toolbar item. """
-
- return self.window
-
-
- def SetId(self, new_id):
- """
- Sets the toolbar item identifier.
-
- :param `new_id`: the new tool id.
- """
-
- self.id = new_id
-
-
- def GetId(self):
- """ Returns the toolbar item identifier. """
-
- return self.id
-
-
- def SetKind(self, new_kind):
- """
- Sets the L{AuiToolBarItem} kind.
-
- :param `new_kind`: can be one of the following items:
-
- ======================== =============================
- Item Kind Description
- ======================== =============================
- ``ITEM_CONTROL`` The item in the `AuiToolBar` is a control
- ``ITEM_LABEL`` The item in the `AuiToolBar` is a text label
- ``ITEM_SPACER`` The item in the `AuiToolBar` is a spacer
- ``ITEM_SEPARATOR`` The item in the `AuiToolBar` is a separator
- ``ITEM_CHECK`` The item in the `AuiToolBar` is a toolbar check item
- ``ITEM_NORMAL`` The item in the `AuiToolBar` is a standard toolbar item
- ``ITEM_RADIO`` The item in the `AuiToolBar` is a toolbar radio item
- ======================== =============================
- """
-
- self.kind = new_kind
-
-
- def GetKind(self):
- """ Returns the toolbar item kind. See L{SetKind} for more details. """
-
- return self.kind
-
-
- def SetState(self, new_state):
- """
- Sets the toolbar item state.
-
- :param `new_state`: can be one of the following states:
-
- ============================================ ======================================
- Button State Constant Description
- ============================================ ======================================
- ``AUI_BUTTON_STATE_NORMAL`` Normal button state
- ``AUI_BUTTON_STATE_HOVER`` Hovered button state
- ``AUI_BUTTON_STATE_PRESSED`` Pressed button state
- ``AUI_BUTTON_STATE_DISABLED`` Disabled button state
- ``AUI_BUTTON_STATE_HIDDEN`` Hidden button state
- ``AUI_BUTTON_STATE_CHECKED`` Checked button state
- ============================================ ======================================
-
- """
-
- self.state = new_state
-
-
- def GetState(self):
- """
- Returns the toolbar item state. See L{SetState} for more details.
-
- :see: L{SetState}
- """
-
- return self.state
-
-
- def SetSizerItem(self, s):
- """
- Associates a sizer item to this toolbar item.
-
- :param `s`: an instance of `wx.SizerItem`.
- """
-
- self.sizer_item = s
-
-
- def GetSizerItem(self):
- """ Returns the associated sizer item. """
-
- return self.sizer_item
-
-
- def SetLabel(self, s):
- """
- Sets the toolbar item label.
-
- :param `s`: a string specifying the toolbar item label.
- """
-
- self.label = s
-
-
- def GetLabel(self):
- """ Returns the toolbar item label. """
-
- return self.label
-
-
- def SetBitmap(self, bmp):
- """
- Sets the toolbar item bitmap.
-
- :param `bmp`: an instance of `wx.Bitmap`.
- """
-
- self.bitmap = bmp
-
-
- def GetBitmap(self):
- """ Returns the toolbar item bitmap. """
-
- return self.GetRotatedBitmap(False)
-
-
- def SetDisabledBitmap(self, bmp):
- """
- Sets the toolbar item disabled bitmap.
-
- :param `bmp`: an instance of `wx.Bitmap`.
- """
-
- self.disabled_bitmap = bmp
-
-
- def GetDisabledBitmap(self):
- """ Returns the toolbar item disabled bitmap. """
-
- return self.GetRotatedBitmap(True)
-
-
- def SetHoverBitmap(self, bmp):
- """
- Sets the toolbar item hover bitmap.
-
- :param `bmp`: an instance of `wx.Bitmap`.
- """
-
- self.hover_bitmap = bmp
-
-
- def SetOrientation(self, a):
- """
- Sets the toolbar tool orientation.
-
- :param `a`: one of ``AUI_TBTOOL_HORIZONTAL``, ``AUI_TBTOOL_VERT_CLOCKWISE`` or
- ``AUI_TBTOOL_VERT_COUNTERCLOCKWISE``.
- """
-
- self.orientation = a
-
-
- def GetOrientation(self):
- """ Returns the toolbar tool orientation. """
-
- return self.orientation
-
-
- def GetHoverBitmap(self):
- """ Returns the toolbar item hover bitmap. """
-
- return self.hover_bitmap
-
-
- def GetRotatedBitmap(self, disabled):
- """
- Returns the correct bitmap depending on the tool orientation.
-
- :param `disabled`: whether to return the disabled bitmap or not.
- """
-
- bitmap_to_rotate = (disabled and [self.disabled_bitmap] or [self.bitmap])[0]
- if not bitmap_to_rotate.IsOk() or self.orientation == AUI_TBTOOL_HORIZONTAL:
- return bitmap_to_rotate
-
- rotated_bitmap = wx.NullBitmap
- clockwise = True
- if self.orientation == AUI_TBTOOL_VERT_CLOCKWISE:
- rotated_bitmap = (disabled and [self.clockwisedisbmp] or [self.clockwisebmp])[0]
-
- elif self.orientation == AUI_TBTOOL_VERT_COUNTERCLOCKWISE:
- rotated_bitmap = (disabled and [self.counterclockwisedisbmp] or [self.counterclockwisebmp])[0]
- clockwise = False
-
- if not rotated_bitmap.IsOk():
- rotated_bitmap = wx.BitmapFromImage(bitmap_to_rotate.ConvertToImage().Rotate90(clockwise))
-
- return rotated_bitmap
-
-
- def SetShortHelp(self, s):
- """
- Sets the short help string for the L{AuiToolBarItem}, to be displayed in a
- `wx.ToolTip` when the mouse hover over the toolbar item.
-
- :param `s`: the tool short help string.
- """
-
- self.short_help = s
-
-
- def GetShortHelp(self):
- """ Returns the short help string for the L{AuiToolBarItem}. """
-
- return self.short_help
-
-
- def SetLongHelp(self, s):
- """
- Sets the long help string for the toolbar item. This string is shown in the
- statusbar (if any) of the parent frame when the mouse pointer is inside the
- tool.
-
- :param `s`: the tool long help string.
- """
-
- self.long_help = s
-
-
- def GetLongHelp(self):
- """ Returns the long help string for the L{AuiToolBarItem}. """
-
- return self.long_help
-
-
- def SetMinSize(self, s):
- """
- Sets the toolbar item minimum size.
-
- :param `s`: an instance of `wx.Size`.
- """
-
- self.min_size = wx.Size(*s)
-
-
- def GetMinSize(self):
- """ Returns the toolbar item minimum size. """
-
- return self.min_size
-
-
- def SetSpacerPixels(self, s):
- """
- Sets the number of pixels for a toolbar item with kind = ``ITEM_SEPARATOR``.
-
- :param `s`: number of pixels.
- """
-
- self.spacer_pixels = s
-
-
- def GetSpacerPixels(self):
- """ Returns the number of pixels for a toolbar item with kind = ``ITEM_SEPARATOR``. """
-
- return self.spacer_pixels
-
-
- def SetProportion(self, p):
- """
- Sets the L{AuiToolBarItem} proportion in the toolbar.
-
- :param `p`: the item proportion.
- """
-
- self.proportion = p
-
-
- def GetProportion(self):
- """ Returns the L{AuiToolBarItem} proportion in the toolbar. """
-
- return self.proportion
-
-
- def SetActive(self, b):
- """
- Activates/deactivates the toolbar item.
-
- :param `b`: ``True`` to activate the item, ``False`` to deactivate it.
- """
-
- self.active = b
-
-
- def IsActive(self):
- """ Returns whether the toolbar item is active or not. """
-
- return self.active
-
-
- def SetHasDropDown(self, b):
- """
- Sets whether the toolbar item has an associated dropdown menu.
-
- :param `b`: ``True`` to set a dropdown menu, ``False`` otherwise.
- """
-
- self.dropdown = b
-
-
- def HasDropDown(self):
- """ Returns whether the toolbar item has an associated dropdown menu or not. """
-
- return self.dropdown
-
-
- def SetSticky(self, b):
- """
- Sets whether the toolbar item is sticky (permanent highlight after mouse enter)
- or not.
-
- :param `b`: ``True`` to set the item as sticky, ``False`` otherwise.
- """
-
- self.sticky = b
-
-
- def IsSticky(self):
- """ Returns whether the toolbar item has a sticky behaviour or not. """
-
- return self.sticky
-
-
- def SetUserData(self, l):
- """
- Associates some kind of user data to the toolbar item.
-
- :param `l`: a Python object.
-
- :note: The user data can be any Python object.
- """
-
- self.user_data = l
-
-
- def GetUserData(self):
- """ Returns the associated user data. """
-
- return self.user_data
-
-
- def SetAlignment(self, l):
- """
- Sets the toolbar item alignment.
-
- :param `l`: the item alignment, which can be one of the available `wx.Sizer`
- alignments.
- """
-
- self.alignment = l
-
-
- def GetAlignment(self):
- """ Returns the toolbar item alignment. """
-
- return self.alignment
-
-
-# ----------------------------------------------------------------------
-
-class AuiDefaultToolBarArt(object):
- """
- Toolbar art provider code - a tab provider provides all drawing functionality to
- the L{AuiToolBar}. This allows the L{AuiToolBar} to have a plugable look-and-feel.
-
- By default, a L{AuiToolBar} uses an instance of this class called L{AuiDefaultToolBarArt}
- which provides bitmap art and a colour scheme that is adapted to the major platforms'
- look. You can either derive from that class to alter its behaviour or write a
- completely new tab art class. Call L{AuiToolBar.SetArtProvider} to make use this
- new tab art.
- """
-
- def __init__(self):
- """ Default class constructor. """
-
- self._base_colour = GetBaseColour()
-
- self._agwFlags = 0
- self._text_orientation = AUI_TBTOOL_TEXT_BOTTOM
- self._highlight_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)
-
- self._separator_size = 7
- self._orientation = AUI_TBTOOL_HORIZONTAL
- self._gripper_size = 7
- self._overflow_size = 16
-
- darker1_colour = StepColour(self._base_colour, 85)
- darker2_colour = StepColour(self._base_colour, 75)
- darker3_colour = StepColour(self._base_colour, 60)
- darker4_colour = StepColour(self._base_colour, 50)
- darker5_colour = StepColour(self._base_colour, 40)
-
- self._gripper_pen1 = wx.Pen(darker5_colour)
- self._gripper_pen2 = wx.Pen(darker3_colour)
- self._gripper_pen3 = wx.WHITE_PEN
-
- button_dropdown_bits = "\xe0\xf1\xfb"
- overflow_bits = "\x80\xff\x80\xc1\xe3\xf7"
-
- self._button_dropdown_bmp = BitmapFromBits(button_dropdown_bits, 5, 3, wx.BLACK)
- self._disabled_button_dropdown_bmp = BitmapFromBits(button_dropdown_bits, 5, 3,
- wx.Colour(128, 128, 128))
- self._overflow_bmp = BitmapFromBits(overflow_bits, 7, 6, wx.BLACK)
- self._disabled_overflow_bmp = BitmapFromBits(overflow_bits, 7, 6, wx.Colour(128, 128, 128))
-
- self._font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
-
-
- def Clone(self):
- """ Clones the L{AuiToolBar} art. """
-
- return AuiDefaultToolBarArt()
-
-
- def SetAGWFlags(self, agwFlags):
- """
- Sets the toolbar art flags.
-
- :param `agwFlags`: a combination of the following values:
-
- ==================================== ==================================
- Flag name Description
- ==================================== ==================================
- ``AUI_TB_TEXT`` Shows the text in the toolbar buttons; by default only icons are shown
- ``AUI_TB_NO_TOOLTIPS`` Don't show tooltips on `AuiToolBar` items
- ``AUI_TB_NO_AUTORESIZE`` Do not auto-resize the `AuiToolBar`
- ``AUI_TB_GRIPPER`` Shows a gripper on the `AuiToolBar`
- ``AUI_TB_OVERFLOW`` The `AuiToolBar` can contain overflow items
- ``AUI_TB_VERTICAL`` The `AuiToolBar` is vertical
- ``AUI_TB_HORZ_LAYOUT`` Shows the text and the icons alongside, not vertically stacked. This style must be used with ``AUI_TB_TEXT``
- ``AUI_TB_PLAIN_BACKGROUND`` Don't draw a gradient background on the toolbar
- ``AUI_TB_HORZ_TEXT`` Combination of ``AUI_TB_HORZ_LAYOUT`` and ``AUI_TB_TEXT``
- ==================================== ==================================
-
- """
-
- self._agwFlags = agwFlags
-
-
- def GetAGWFlags(self):
- """
- Returns the L{AuiDefaultToolBarArt} flags. See L{SetAGWFlags} for more
- details.
-
- :see: L{SetAGWFlags}
- """
-
- return self._agwFlags
-
-
- def SetFont(self, font):
- """
- Sets the L{AuiDefaultToolBarArt} font.
-
- :param `font`: a `wx.Font` object.
- """
-
- self._font = font
-
-
- def SetTextOrientation(self, orientation):
- """
- Sets the text orientation.
-
- :param `orientation`: can be one of the following constants:
-
- ==================================== ==================================
- Orientation Switches Description
- ==================================== ==================================
- ``AUI_TBTOOL_TEXT_LEFT`` Text in `AuiToolBar` items is aligned left
- ``AUI_TBTOOL_TEXT_RIGHT`` Text in `AuiToolBar` items is aligned right
- ``AUI_TBTOOL_TEXT_TOP`` Text in `AuiToolBar` items is aligned top
- ``AUI_TBTOOL_TEXT_BOTTOM`` Text in `AuiToolBar` items is aligned bottom
- ==================================== ==================================
-
- """
-
- self._text_orientation = orientation
-
-
- def GetFont(self):
- """ Returns the L{AuiDefaultToolBarArt} font. """
-
- return self._font
-
-
- def GetTextOrientation(self):
- """
- Returns the L{AuiDefaultToolBarArt} text orientation. See
- L{SetTextOrientation} for more details.
-
- :see: L{SetTextOrientation}
- """
-
- return self._text_orientation
-
-
- def SetOrientation(self, orientation):
- """
- Sets the toolbar tool orientation.
-
- :param `orientation`: one of ``AUI_TBTOOL_HORIZONTAL``, ``AUI_TBTOOL_VERT_CLOCKWISE`` or
- ``AUI_TBTOOL_VERT_COUNTERCLOCKWISE``.
- """
-
- self._orientation = orientation
-
-
- def GetOrientation(self):
- """ Returns the toolbar orientation. """
-
- return self._orientation
-
-
- def DrawBackground(self, dc, wnd, _rect, horizontal=True):
- """
- Draws a toolbar background with a gradient shading.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `_rect`: the L{AuiToolBar} rectangle;
- :param `horizontal`: ``True`` if the toolbar is horizontal, ``False`` if it is vertical.
- """
-
- rect = wx.Rect(*_rect)
-
- start_colour = StepColour(self._base_colour, 180)
- end_colour = StepColour(self._base_colour, 85)
- reflex_colour = StepColour(self._base_colour, 95)
-
- dc.GradientFillLinear(rect, start_colour, end_colour,
- (horizontal and [wx.SOUTH] or [wx.EAST])[0])
-
- left = rect.GetLeft()
- right = rect.GetRight()
- top = rect.GetTop()
- bottom = rect.GetBottom()
-
- dc.SetPen(wx.Pen(reflex_colour))
- if horizontal:
- dc.DrawLine(left, bottom, right+1, bottom)
- else:
- dc.DrawLine(right, top, right, bottom+1)
-
-
- def DrawPlainBackground(self, dc, wnd, _rect):
- """
- Draws a toolbar background with a plain colour.
-
- This method contrasts with the default behaviour of the L{AuiToolBar} that
- draws a background gradient and this break the window design when putting
- it within a control that has margin between the borders and the toolbar
- (example: put L{AuiToolBar} within a `wx.StaticBoxSizer` that has a plain background).
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `_rect`: the L{AuiToolBar} rectangle.
- """
-
- rect = wx.Rect(*_rect)
- rect.height += 1
-
- dc.SetBrush(wx.Brush(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)))
- dc.DrawRectangle(rect.x - 1, rect.y - 1, rect.width + 2, rect.height + 1)
-
-
- def DrawLabel(self, dc, wnd, item, rect):
- """
- Draws a toolbar item label.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the L{AuiToolBarItem} rectangle.
- """
-
- dc.SetFont(self._font)
- dc.SetTextForeground(wx.BLACK)
- orient = item.GetOrientation()
-
- horizontal = orient == AUI_TBTOOL_HORIZONTAL
- # we only care about the text height here since the text
- # will get cropped based on the width of the item
- label_size = GetLabelSize(dc, item.GetLabel(), not horizontal)
- text_width = label_size.GetWidth()
- text_height = label_size.GetHeight()
-
- if orient == AUI_TBTOOL_HORIZONTAL:
- text_x = rect.x
- text_y = rect.y + (rect.height-text_height)/2
- dc.DrawText(item.GetLabel(), text_x, text_y)
-
- elif orient == AUI_TBTOOL_VERT_CLOCKWISE:
- text_x = rect.x + (rect.width+text_width)/2
- text_y = rect.y
- dc.DrawRotatedText(item.GetLabel(), text_x, text_y, 270)
-
- elif AUI_TBTOOL_VERT_COUNTERCLOCKWISE:
- text_x = rect.x + (rect.width-text_width)/2
- text_y = rect.y + text_height
- dc.DrawRotatedText(item.GetLabel(), text_x, text_y, 90)
-
-
- def DrawButton(self, dc, wnd, item, rect):
- """
- Draws a toolbar item button.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the L{AuiToolBarItem} rectangle.
- """
-
- bmp_rect, text_rect = self.GetToolsPosition(dc, item, rect)
-
- if not item.GetState() & AUI_BUTTON_STATE_DISABLED:
-
- if item.GetState() & AUI_BUTTON_STATE_PRESSED:
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 150)))
- dc.DrawRectangleRect(rect)
-
- elif item.GetState() & AUI_BUTTON_STATE_HOVER or item.IsSticky():
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 170)))
-
- # draw an even lighter background for checked item hovers (since
- # the hover background is the same colour as the check background)
- if item.GetState() & AUI_BUTTON_STATE_CHECKED:
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 180)))
-
- dc.DrawRectangleRect(rect)
-
- elif item.GetState() & AUI_BUTTON_STATE_CHECKED:
-
- # it's important to put this code in an else statment after the
- # hover, otherwise hovers won't draw properly for checked items
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 170)))
- dc.DrawRectangleRect(rect)
-
- if item.GetState() & AUI_BUTTON_STATE_DISABLED:
- bmp = item.GetDisabledBitmap()
- else:
- bmp = item.GetBitmap()
-
- if bmp.IsOk():
- dc.DrawBitmap(bmp, bmp_rect.x, bmp_rect.y, True)
-
- # set the item's text colour based on if it is disabled
- dc.SetTextForeground(wx.BLACK)
- if item.GetState() & AUI_BUTTON_STATE_DISABLED:
- dc.SetTextForeground(DISABLED_TEXT_COLOUR)
-
- if self._agwFlags & AUI_TB_TEXT and item.GetLabel() != "":
- self.DrawLabel(dc, wnd, item, text_rect)
-
-
- def DrawDropDownButton(self, dc, wnd, item, rect):
- """
- Draws a toolbar dropdown button.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the L{AuiToolBarItem} rectangle.
- """
-
- dropbmp_x = dropbmp_y = 0
-
- button_rect = wx.Rect(rect.x, rect.y, rect.width-BUTTON_DROPDOWN_WIDTH, rect.height)
- dropdown_rect = wx.Rect(rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1, rect.y, BUTTON_DROPDOWN_WIDTH+1, rect.height)
-
- horizontal = item.GetOrientation() == AUI_TBTOOL_HORIZONTAL
-
- if horizontal:
- button_rect = wx.Rect(rect.x, rect.y, rect.width-BUTTON_DROPDOWN_WIDTH, rect.height)
- dropdown_rect = wx.Rect(rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1, rect.y, BUTTON_DROPDOWN_WIDTH+1, rect.height)
- else:
- button_rect = wx.Rect(rect.x, rect.y, rect.width, rect.height-BUTTON_DROPDOWN_WIDTH)
- dropdown_rect = wx.Rect(rect.x, rect.y+rect.height-BUTTON_DROPDOWN_WIDTH-1, rect.width, BUTTON_DROPDOWN_WIDTH+1)
-
- dropbmp_width = self._button_dropdown_bmp.GetWidth()
- dropbmp_height = self._button_dropdown_bmp.GetHeight()
- if not horizontal:
- tmp = dropbmp_width
- dropbmp_width = dropbmp_height
- dropbmp_height = tmp
-
- dropbmp_x = dropdown_rect.x + (dropdown_rect.width/2) - dropbmp_width/2
- dropbmp_y = dropdown_rect.y + (dropdown_rect.height/2) - dropbmp_height/2
-
- bmp_rect, text_rect = self.GetToolsPosition(dc, item, button_rect)
-
- if item.GetState() & AUI_BUTTON_STATE_PRESSED:
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 140)))
- dc.DrawRectangleRect(button_rect)
- dc.DrawRectangleRect(dropdown_rect)
-
- elif item.GetState() & AUI_BUTTON_STATE_HOVER or item.IsSticky():
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 170)))
- dc.DrawRectangleRect(button_rect)
- dc.DrawRectangleRect(dropdown_rect)
-
- elif item.GetState() & AUI_BUTTON_STATE_CHECKED:
- # it's important to put this code in an else statment after the
- # hover, otherwise hovers won't draw properly for checked items
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.SetBrush(wx.Brush(StepColour(self._highlight_colour, 170)))
- dc.DrawRectangle(button_rect)
- dc.DrawRectangle(dropdown_rect)
-
- if item.GetState() & AUI_BUTTON_STATE_DISABLED:
-
- bmp = item.GetDisabledBitmap()
- dropbmp = self._disabled_button_dropdown_bmp
-
- else:
-
- bmp = item.GetBitmap()
- dropbmp = self._button_dropdown_bmp
-
- if not bmp.IsOk():
- return
-
- dc.DrawBitmap(bmp, bmp_rect.x, bmp_rect.y, True)
- if horizontal:
- dc.DrawBitmap(dropbmp, dropbmp_x, dropbmp_y, True)
- else:
- dc.DrawBitmap(wx.BitmapFromImage(dropbmp.ConvertToImage().Rotate90(item.GetOrientation() == AUI_TBTOOL_VERT_CLOCKWISE)),
- dropbmp_x, dropbmp_y, True)
-
- # set the item's text colour based on if it is disabled
- dc.SetTextForeground(wx.BLACK)
- if item.GetState() & AUI_BUTTON_STATE_DISABLED:
- dc.SetTextForeground(DISABLED_TEXT_COLOUR)
-
- if self._agwFlags & AUI_TB_TEXT and item.GetLabel() != "":
- self.DrawLabel(dc, wnd, item, text_rect)
-
-
- def DrawControlLabel(self, dc, wnd, item, rect):
- """
- Draws a label for a toolbar control.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the L{AuiToolBarItem} rectangle.
- """
-
- label_size = GetLabelSize(dc, item.GetLabel(), item.GetOrientation() != AUI_TBTOOL_HORIZONTAL)
- text_height = label_size.GetHeight()
- text_width = label_size.GetWidth()
-
- dc.SetFont(self._font)
-
- if self._agwFlags & AUI_TB_TEXT:
-
- tx, text_height = dc.GetTextExtent("ABCDHgj")
-
- text_width, ty = dc.GetTextExtent(item.GetLabel())
-
- # don't draw the label if it is wider than the item width
- if text_width > rect.width:
- return
-
- # set the label's text colour
- dc.SetTextForeground(wx.BLACK)
-
- text_x = rect.x + (rect.width/2) - (text_width/2) + 1
- text_y = rect.y + rect.height - text_height - 1
-
- if self._agwFlags & AUI_TB_TEXT and item.GetLabel() != "":
- dc.DrawText(item.GetLabel(), text_x, text_y)
-
-
- def GetLabelSize(self, dc, wnd, item):
- """
- Returns the label size for a toolbar item.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem}.
- """
-
- dc.SetFont(self._font)
- label_size = GetLabelSize(dc, item.GetLabel(), self._orientation != AUI_TBTOOL_HORIZONTAL)
-
- return wx.Size(item.GetMinSize().GetWidth(), label_size.GetHeight())
-
-
- def GetToolSize(self, dc, wnd, item):
- """
- Returns the toolbar item size.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `item`: an instance of L{AuiToolBarItem}.
- """
-
- if not item.GetBitmap().IsOk() and not self._agwFlags & AUI_TB_TEXT:
- return wx.Size(16, 16)
-
- width = item.GetBitmap().GetWidth()
- height = item.GetBitmap().GetHeight()
-
- if self._agwFlags & AUI_TB_TEXT:
-
- dc.SetFont(self._font)
- label_size = GetLabelSize(dc, item.GetLabel(), self.GetOrientation() != AUI_TBTOOL_HORIZONTAL)
- padding = 6
-
- if self._text_orientation == AUI_TBTOOL_TEXT_BOTTOM:
-
- if self.GetOrientation() != AUI_TBTOOL_HORIZONTAL:
- height += 3 # space between top border and bitmap
- height += 3 # space between bitmap and text
- padding = 0
-
- height += label_size.GetHeight()
-
- if item.GetLabel() != "":
- width = max(width, label_size.GetWidth()+padding)
-
- elif self._text_orientation == AUI_TBTOOL_TEXT_RIGHT and item.GetLabel() != "":
-
- if self.GetOrientation() == AUI_TBTOOL_HORIZONTAL:
-
- width += 3 # space between left border and bitmap
- width += 3 # space between bitmap and text
- padding = 0
-
- width += label_size.GetWidth()
- height = max(height, label_size.GetHeight()+padding)
-
- # if the tool has a dropdown button, add it to the width
- if item.HasDropDown():
- if item.GetOrientation() == AUI_TBTOOL_HORIZONTAL:
- width += BUTTON_DROPDOWN_WIDTH+4
- else:
- height += BUTTON_DROPDOWN_WIDTH+4
-
- return wx.Size(width, height)
-
-
- def DrawSeparator(self, dc, wnd, _rect):
- """
- Draws a toolbar separator.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `_rect`: the L{AuiToolBarItem} rectangle.
- """
-
- horizontal = True
- if self._agwFlags & AUI_TB_VERTICAL:
- horizontal = False
-
- rect = wx.Rect(*_rect)
-
- if horizontal:
-
- rect.x += (rect.width/2)
- rect.width = 1
- new_height = (rect.height*3)/4
- rect.y += (rect.height/2) - (new_height/2)
- rect.height = new_height
-
- else:
-
- rect.y += (rect.height/2)
- rect.height = 1
- new_width = (rect.width*3)/4
- rect.x += (rect.width/2) - (new_width/2)
- rect.width = new_width
-
- start_colour = StepColour(self._base_colour, 80)
- end_colour = StepColour(self._base_colour, 80)
- dc.GradientFillLinear(rect, start_colour, end_colour, (horizontal and [wx.SOUTH] or [wx.EAST])[0])
-
-
- def DrawGripper(self, dc, wnd, rect):
- """
- Draws the toolbar gripper.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `rect`: the L{AuiToolBar} rectangle.
- """
-
- i = 0
- while 1:
-
- if self._agwFlags & AUI_TB_VERTICAL:
-
- x = rect.x + (i*4) + 4
- y = rect.y + 3
- if x > rect.GetWidth() - 4:
- break
-
- else:
-
- x = rect.x + 3
- y = rect.y + (i*4) + 4
- if y > rect.GetHeight() - 4:
- break
-
- dc.SetPen(self._gripper_pen1)
- dc.DrawPoint(x, y)
- dc.SetPen(self._gripper_pen2)
- dc.DrawPoint(x, y+1)
- dc.DrawPoint(x+1, y)
- dc.SetPen(self._gripper_pen3)
- dc.DrawPoint(x+2, y+1)
- dc.DrawPoint(x+2, y+2)
- dc.DrawPoint(x+1, y+2)
-
- i += 1
-
-
- def DrawOverflowButton(self, dc, wnd, rect, state):
- """
- Draws the overflow button for the L{AuiToolBar}.
-
- :param `dc`: a `wx.DC` device context;
- :param `wnd`: a `wx.Window` derived window;
- :param `rect`: the L{AuiToolBar} rectangle;
- :param `state`: the overflow button state.
- """
-
- if state & AUI_BUTTON_STATE_HOVER or state & AUI_BUTTON_STATE_PRESSED:
-
- cli_rect = wnd.GetClientRect()
- light_gray_bg = StepColour(self._highlight_colour, 170)
-
- if self._agwFlags & AUI_TB_VERTICAL:
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.DrawLine(rect.x, rect.y, rect.x+rect.width, rect.y)
- dc.SetPen(wx.Pen(light_gray_bg))
- dc.SetBrush(wx.Brush(light_gray_bg))
- dc.DrawRectangle(rect.x, rect.y+1, rect.width, rect.height)
-
- else:
-
- dc.SetPen(wx.Pen(self._highlight_colour))
- dc.DrawLine(rect.x, rect.y, rect.x, rect.y+rect.height)
- dc.SetPen(wx.Pen(light_gray_bg))
- dc.SetBrush(wx.Brush(light_gray_bg))
- dc.DrawRectangle(rect.x+1, rect.y, rect.width, rect.height)
-
- x = rect.x + 1 + (rect.width-self._overflow_bmp.GetWidth())/2
- y = rect.y + 1 + (rect.height-self._overflow_bmp.GetHeight())/2
- dc.DrawBitmap(self._overflow_bmp, x, y, True)
-
-
- def GetElementSize(self, element_id):
- """
- Returns the size of a UI element in the L{AuiToolBar}.
-
- :param `element_id`: can be one of the following:
-
- ==================================== ==================================
- Element Identifier Description
- ==================================== ==================================
- ``AUI_TBART_SEPARATOR_SIZE`` Separator size in `AuiToolBar`
- ``AUI_TBART_GRIPPER_SIZE`` Gripper size in `AuiToolBar`
- ``AUI_TBART_OVERFLOW_SIZE`` Overflow button size in `AuiToolBar`
- ==================================== ==================================
- """
-
- if element_id == AUI_TBART_SEPARATOR_SIZE:
- return self._separator_size
- elif element_id == AUI_TBART_GRIPPER_SIZE:
- return self._gripper_size
- elif element_id == AUI_TBART_OVERFLOW_SIZE:
- return self._overflow_size
-
- return 0
-
-
- def SetElementSize(self, element_id, size):
- """
- Sets the size of a UI element in the L{AuiToolBar}.
-
- :param `element_id`: can be one of the following:
-
- ==================================== ==================================
- Element Identifier Description
- ==================================== ==================================
- ``AUI_TBART_SEPARATOR_SIZE`` Separator size in `AuiToolBar`
- ``AUI_TBART_GRIPPER_SIZE`` Gripper size in `AuiToolBar`
- ``AUI_TBART_OVERFLOW_SIZE`` Overflow button size in `AuiToolBar`
- ==================================== ==================================
-
- :param `size`: the new size of the UI element.
- """
-
- if element_id == AUI_TBART_SEPARATOR_SIZE:
- self._separator_size = size
- elif element_id == AUI_TBART_GRIPPER_SIZE:
- self._gripper_size = size
- elif element_id == AUI_TBART_OVERFLOW_SIZE:
- self._overflow_size = size
-
-
- def ShowDropDown(self, wnd, items):
- """
- Shows the drop down window menu for overflow items.
-
- :param `wnd`: an instance of `wx.Window`;
- :param `items`: the overflow toolbar items (a Python list).
- """
-
- menuPopup = wx.Menu()
- items_added = 0
-
- for item in items:
-
- if item.GetKind() not in [ITEM_SEPARATOR, ITEM_SPACER, ITEM_CONTROL]:
-
- text = item.GetShortHelp()
- if text == "":
- text = item.GetLabel()
- if text == "":
- text = " "
-
- kind = item.GetKind()
- m = wx.MenuItem(menuPopup, item.GetId(), text, item.GetShortHelp(), kind)
- orientation = item.GetOrientation()
- item.SetOrientation(AUI_TBTOOL_HORIZONTAL)
-
- if kind not in [ITEM_CHECK, ITEM_RADIO]:
- m.SetBitmap(item.GetBitmap())
-
- item.SetOrientation(orientation)
-
- menuPopup.AppendItem(m)
- if kind in [ITEM_CHECK, ITEM_RADIO]:
- state = (item.state & AUI_BUTTON_STATE_CHECKED and [True] or [False])[0]
- m.Check(state)
-
- items_added += 1
-
- else:
-
- if items_added > 0 and item.GetKind() == ITEM_SEPARATOR:
- menuPopup.AppendSeparator()
-
- # find out where to put the popup menu of window items
- pt = wx.GetMousePosition()
- pt = wnd.ScreenToClient(pt)
-
- # find out the screen coordinate at the bottom of the tab ctrl
- cli_rect = wnd.GetClientRect()
- pt.y = cli_rect.y + cli_rect.height
-
- cc = ToolbarCommandCapture()
- wnd.PushEventHandler(cc)
-
- # Adjustments to get slightly better menu placement
- if wx.Platform == "__WXMAC__":
- pt.y += 5
- pt.x -= 5
-
- wnd.PopupMenu(menuPopup, pt)
- command = cc.GetCommandId()
- wnd.PopEventHandler(True)
-
- return command
-
-
- def GetToolsPosition(self, dc, item, rect):
- """
- Returns the bitmap and text rectangles for a toolbar item.
-
- :param `dc`: a `wx.DC` device context;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the tool rect.
- """
-
- text_width = text_height = 0
- horizontal = self._orientation == AUI_TBTOOL_HORIZONTAL
- text_bottom = self._text_orientation == AUI_TBTOOL_TEXT_BOTTOM
- text_right = self._text_orientation == AUI_TBTOOL_TEXT_RIGHT
- bmp_width = item.GetBitmap().GetWidth()
- bmp_height = item.GetBitmap().GetHeight()
-
- if self._agwFlags & AUI_TB_TEXT:
- dc.SetFont(self._font)
- label_size = GetLabelSize(dc, item.GetLabel(), not horizontal)
- text_height = label_size.GetHeight()
- text_width = label_size.GetWidth()
-
- bmp_x = bmp_y = text_x = text_y = 0
-
- if horizontal and text_bottom:
- bmp_x = rect.x + (rect.width/2) - (bmp_width/2)
- bmp_y = rect.y + 3
- text_x = rect.x + (rect.width/2) - (text_width/2)
- text_y = rect.y + ((bmp_y - rect.y) * 2) + bmp_height
-
- elif horizontal and text_right:
- bmp_x = rect.x + 3
- bmp_y = rect.y + (rect.height/2) - (bmp_height / 2)
- text_x = rect.x + ((bmp_x - rect.x) * 2) + bmp_width
- text_y = rect.y + (rect.height/2) - (text_height/2)
-
- elif not horizontal and text_bottom:
- bmp_x = rect.x + (rect.width / 2) - (bmp_width / 2)
- bmp_y = rect.y + 3
- text_x = rect.x + (rect.width / 2) - (text_width / 2)
- text_y = rect.y + ((bmp_y - rect.y) * 2) + bmp_height
-
- bmp_rect = wx.Rect(bmp_x, bmp_y, bmp_width, bmp_height)
- text_rect = wx.Rect(text_x, text_y, text_width, text_height)
-
- return bmp_rect, text_rect
-
-
-class AuiToolBar(wx.PyControl):
- """
- AuiToolBar is a completely owner-drawn toolbar perfectly integrated with the
- AUI layout system. This allows drag and drop of toolbars, docking/floating
- behaviour and the possibility to define "overflow" items in the toolbar itself.
-
- The default theme that is used is L{AuiDefaultToolBarArt}, which provides a modern,
- glossy look and feel. The theme can be changed by calling L{AuiToolBar.SetArtProvider}.
- """
-
- def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
- size=wx.DefaultSize, style=0, agwStyle=AUI_TB_DEFAULT_STYLE):
- """
- Default class constructor.
-
- :param `parent`: the L{AuiToolBar} parent;
- :param `id`: an identifier for the control: a value of -1 is taken to mean a default;
- :param `pos`: the control position. A value of (-1, -1) indicates a default position,
- chosen by either the windowing system or wxPython, depending on platform;
- :param `size`: the control size. A value of (-1, -1) indicates a default size,
- chosen by either the windowing system or wxPython, depending on platform;
- :param `style`: the control window style;
- :param `agwStyle`: the AGW-specific window style. This can be a combination of the
- following bits:
-
- ==================================== ==================================
- Flag name Description
- ==================================== ==================================
- ``AUI_TB_TEXT`` Shows the text in the toolbar buttons; by default only icons are shown
- ``AUI_TB_NO_TOOLTIPS`` Don't show tooltips on `AuiToolBar` items
- ``AUI_TB_NO_AUTORESIZE`` Do not auto-resize the `AuiToolBar`
- ``AUI_TB_GRIPPER`` Shows a gripper on the `AuiToolBar`
- ``AUI_TB_OVERFLOW`` The `AuiToolBar` can contain overflow items
- ``AUI_TB_VERTICAL`` The `AuiToolBar` is vertical
- ``AUI_TB_HORZ_LAYOUT`` Shows the text and the icons alongside, not vertically stacked. This style must be used with ``AUI_TB_TEXT``
- ``AUI_TB_PLAIN_BACKGROUND`` Don't draw a gradient background on the toolbar
- ``AUI_TB_HORZ_TEXT`` Combination of ``AUI_TB_HORZ_LAYOUT`` and ``AUI_TB_TEXT``
- ==================================== ==================================
-
- The default value for `agwStyle` is: ``AUI_TB_DEFAULT_STYLE`` = 0
-
- """
-
- wx.PyControl.__init__(self, parent, id, pos, size, style|wx.BORDER_NONE)
-
- self._sizer = wx.BoxSizer(wx.HORIZONTAL)
- self.SetSizer(self._sizer)
- self._button_width = -1
- self._button_height = -1
- self._sizer_element_count = 0
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
- self._tip_item = None
- self._art = AuiDefaultToolBarArt()
- self._tool_packing = 2
- self._tool_border_padding = 3
- self._tool_text_orientation = AUI_TBTOOL_TEXT_BOTTOM
- self._tool_orientation = AUI_TBTOOL_HORIZONTAL
- self._tool_alignment = wx.EXPAND
- self._gripper_sizer_item = None
- self._overflow_sizer_item = None
- self._dragging = False
-
- self._agwStyle = self._originalStyle = agwStyle
-
- self._gripper_visible = (self._agwStyle & AUI_TB_GRIPPER and [True] or [False])[0]
- self._overflow_visible = (self._agwStyle & AUI_TB_OVERFLOW and [True] or [False])[0]
- self._overflow_state = 0
- self._custom_overflow_prepend = []
- self._custom_overflow_append = []
-
- self._items = []
-
- self.SetMargins(5, 5, 2, 2)
- self.SetFont(wx.NORMAL_FONT)
- self._art.SetAGWFlags(self._agwStyle)
- self.SetExtraStyle(wx.WS_EX_PROCESS_IDLE)
-
- if agwStyle & AUI_TB_HORZ_LAYOUT:
- self.SetToolTextOrientation(AUI_TBTOOL_TEXT_RIGHT)
- elif agwStyle & AUI_TB_VERTICAL:
- if agwStyle & AUI_TB_CLOCKWISE:
- self.SetToolOrientation(AUI_TBTOOL_VERT_CLOCKWISE)
- elif agwStyle & AUI_TB_COUNTERCLOCKWISE:
- self.SetToolOrientation(AUI_TBTOOL_VERT_COUNTERCLOCKWISE)
-
- self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
-
- self.Bind(wx.EVT_SIZE, self.OnSize)
- self.Bind(wx.EVT_IDLE, self.OnIdle)
- self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
- self.Bind(wx.EVT_PAINT, self.OnPaint)
- self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
- self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown)
- self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
- self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
- self.Bind(wx.EVT_RIGHT_DCLICK, self.OnRightDown)
- self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
- self.Bind(wx.EVT_MIDDLE_DOWN, self.OnMiddleDown)
- self.Bind(wx.EVT_MIDDLE_DCLICK, self.OnMiddleDown)
- self.Bind(wx.EVT_MIDDLE_UP, self.OnMiddleUp)
- self.Bind(wx.EVT_MOTION, self.OnMotion)
- self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
- self.Bind(wx.EVT_SET_CURSOR, self.OnSetCursor)
-
-
- def SetWindowStyleFlag(self, style):
- """
- Sets the style of the window.
-
- :param `style`: the new window style.
-
- :note: Please note that some styles cannot be changed after the window
- creation and that `Refresh` might need to be be called after changing the
- others for the change to take place immediately.
-
- :note: Overridden from `wx.PyControl`.
- """
-
- wx.PyControl.SetWindowStyleFlag(self, style|wx.BORDER_NONE)
-
-
- def SetAGWWindowStyleFlag(self, agwStyle):
- """
- Sets the AGW-specific style of the window.
-
- :param `agwStyle`: the new window style. This can be a combination of the
- following bits:
-
- ==================================== ==================================
- Flag name Description
- ==================================== ==================================
- ``AUI_TB_TEXT`` Shows the text in the toolbar buttons; by default only icons are shown
- ``AUI_TB_NO_TOOLTIPS`` Don't show tooltips on `AuiToolBar` items
- ``AUI_TB_NO_AUTORESIZE`` Do not auto-resize the `AuiToolBar`
- ``AUI_TB_GRIPPER`` Shows a gripper on the `AuiToolBar`
- ``AUI_TB_OVERFLOW`` The `AuiToolBar` can contain overflow items
- ``AUI_TB_VERTICAL`` The `AuiToolBar` is vertical
- ``AUI_TB_HORZ_LAYOUT`` Shows the text and the icons alongside, not vertically stacked. This style must be used with ``AUI_TB_TEXT``
- ``AUI_TB_PLAIN_BACKGROUND`` Don't draw a gradient background on the toolbar
- ``AUI_TB_HORZ_TEXT`` Combination of ``AUI_TB_HORZ_LAYOUT`` and ``AUI_TB_TEXT``
- ==================================== ==================================
-
- :note: Please note that some styles cannot be changed after the window
- creation and that `Refresh` might need to be be called after changing the
- others for the change to take place immediately.
- """
-
- self._agwStyle = self._originalStyle = agwStyle
-
- if self._art:
- self._art.SetAGWFlags(self._agwStyle)
-
- if agwStyle & AUI_TB_GRIPPER:
- self._gripper_visible = True
- else:
- self._gripper_visible = False
-
- if agwStyle & AUI_TB_OVERFLOW:
- self._overflow_visible = True
- else:
- self._overflow_visible = False
-
- if agwStyle & AUI_TB_HORZ_LAYOUT:
- self.SetToolTextOrientation(AUI_TBTOOL_TEXT_RIGHT)
- else:
- self.SetToolTextOrientation(AUI_TBTOOL_TEXT_BOTTOM)
-
- if agwStyle & AUI_TB_VERTICAL:
- if agwStyle & AUI_TB_CLOCKWISE:
- self.SetToolOrientation(AUI_TBTOOL_VERT_CLOCKWISE)
- elif agwStyle & AUI_TB_COUNTERCLOCKWISE:
- self.SetToolOrientation(AUI_TBTOOL_VERT_COUNTERCLOCKWISE)
-
-
- def GetAGWWindowStyleFlag(self):
- """
- Returns the AGW-specific window style flag.
-
- :see: L{SetAGWWindowStyleFlag} for an explanation of various AGW-specific style.
- """
-
- return self._agwStyle
-
-
- def SetArtProvider(self, art):
- """
- Instructs L{AuiToolBar} to use art provider specified by parameter `art`
- for all drawing calls. This allows plugable look-and-feel features.
-
- :param `art`: an art provider.
-
- :note: The previous art provider object, if any, will be deleted by L{AuiToolBar}.
- """
-
- del self._art
- self._art = art
-
- if self._art:
- self._art.SetAGWFlags(self._agwStyle)
- self._art.SetTextOrientation(self._tool_text_orientation)
- self._art.SetOrientation(self._tool_orientation)
-
-
- def GetArtProvider(self):
- """ Returns the current art provider being used. """
-
- return self._art
-
-
- def AddSimpleTool(self, tool_id, label, bitmap, short_help_string="", kind=ITEM_NORMAL):
- """
- Adds a tool to the toolbar. This is the simplest method you can use to
- ass an item to the L{AuiToolBar}.
-
- :param `tool_id`: an integer by which the tool may be identified in subsequent operations;
- :param `label`: the toolbar tool label;
- :param `bitmap`: the primary tool bitmap;
- :param `short_help_string`: this string is used for the tools tooltip;
- :param `kind`: the item kind. Can be one of the following:
-
- ======================== =============================
- Item Kind Description
- ======================== =============================
- ``ITEM_CONTROL`` The item in the `AuiToolBar` is a control
- ``ITEM_LABEL`` The item in the `AuiToolBar` is a text label
- ``ITEM_SPACER`` The item in the `AuiToolBar` is a spacer
- ``ITEM_SEPARATOR`` The item in the `AuiToolBar` is a separator
- ``ITEM_CHECK`` The item in the `AuiToolBar` is a toolbar check item
- ``ITEM_NORMAL`` The item in the `AuiToolBar` is a standard toolbar item
- ``ITEM_RADIO`` The item in the `AuiToolBar` is a toolbar radio item
- ======================== =============================
- """
-
- return self.AddTool(tool_id, label, bitmap, wx.NullBitmap, kind, short_help_string, "", None)
-
-
- def AddToggleTool(self, tool_id, bitmap, disabled_bitmap, toggle=False, client_data=None, short_help_string="", long_help_string=""):
- """
- Adds a toggle tool to the toolbar.
-
- :param `tool_id`: an integer by which the tool may be identified in subsequent operations;
- :param `bitmap`: the primary tool bitmap;
- :param `disabled_bitmap`: the bitmap to use when the tool is disabled. If it is equal to
- `wx.NullBitmap`, the disabled bitmap is automatically generated by greing the normal one;
- :param `client_data`: whatever Python object to associate with the toolbar item;
- :param `short_help_string`: this string is used for the tools tooltip;
- :param `long_help_string`: this string is shown in the statusbar (if any) of the parent
- frame when the mouse pointer is inside the tool.
- """
-
- kind = (toggle and [ITEM_CHECK] or [ITEM_NORMAL])[0]
- return self.AddTool(tool_id, "", bitmap, disabled_bitmap, kind, short_help_string, long_help_string, client_data)
-
-
- def AddTool(self, tool_id, label, bitmap, disabled_bitmap, kind, short_help_string, long_help_string, client_data):
- """
- Adds a tool to the toolbar. This is the full feature version of L{AddTool}.
-
- :param `tool_id`: an integer by which the tool may be identified in subsequent operations;
- :param `label`: the toolbar tool label;
- :param `bitmap`: the primary tool bitmap;
- :param `disabled_bitmap`: the bitmap to use when the tool is disabled. If it is equal to
- `wx.NullBitmap`, the disabled bitmap is automatically generated by greing the normal one;
- :param `kind`: the item kind. Can be one of the following:
-
- ======================== =============================
- Item Kind Description
- ======================== =============================
- ``ITEM_CONTROL`` The item in the `AuiToolBar` is a control
- ``ITEM_LABEL`` The item in the `AuiToolBar` is a text label
- ``ITEM_SPACER`` The item in the `AuiToolBar` is a spacer
- ``ITEM_SEPARATOR`` The item in the `AuiToolBar` is a separator
- ``ITEM_CHECK`` The item in the `AuiToolBar` is a toolbar check item
- ``ITEM_NORMAL`` The item in the `AuiToolBar` is a standard toolbar item
- ``ITEM_RADIO`` The item in the `AuiToolBar` is a toolbar radio item
- ======================== =============================
-
- :param `short_help_string`: this string is used for the tools tooltip;
- :param `long_help_string`: this string is shown in the statusbar (if any) of the parent
- frame when the mouse pointer is inside the tool.
- :param `client_data`: whatever Python object to associate with the toolbar item.
- """
-
- item = AuiToolBarItem()
- item.window = None
- item.label = label
- item.bitmap = bitmap
- item.disabled_bitmap = disabled_bitmap
- item.short_help = short_help_string
- item.long_help = long_help_string
- item.active = True
- item.dropdown = False
- item.spacer_pixels = 0
-
- if tool_id == wx.ID_ANY:
- tool_id = wx.NewId()
-
- item.id = tool_id
- item.state = 0
- item.proportion = 0
- item.kind = kind
- item.sizer_item = None
- item.min_size = wx.Size(-1, -1)
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- if not item.disabled_bitmap.IsOk():
- # no disabled bitmap specified, we need to make one
- if item.bitmap.IsOk():
- item.disabled_bitmap = MakeDisabledBitmap(item.bitmap)
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddCheckTool(self, tool_id, label, bitmap, disabled_bitmap, short_help_string="", long_help_string="", client_data=None):
- """
- Adds a new check (or toggle) tool to the L{AuiToolBar}.
-
- :see: L{AddTool}.
- """
-
- return self.AddTool(tool_id, label, bitmap, disabled_bitmap, ITEM_CHECK, short_help_string, long_help_string, client_data)
-
-
- def AddRadioTool(self, tool_id, label, bitmap, disabled_bitmap, short_help_string="", long_help_string="", client_data=None):
- """
- Adds a new radio tool to the toolbar.
-
- Consecutive radio tools form a radio group such that exactly one button
- in the group is pressed at any moment, in other words whenever a button
- in the group is pressed the previously pressed button is automatically
- released. You should avoid having the radio groups of only one element
- as it would be impossible for the user to use such button.
-
- :note: By default, the first button in the radio group is initially pressed,
- the others are not.
-
- :see: L{AddTool}.
- """
-
- return self.AddTool(tool_id, label, bitmap, disabled_bitmap, ITEM_RADIO, short_help_string, long_help_string, client_data)
-
-
- def AddControl(self, control, label=""):
- """
- Adds any control to the toolbar, typically e.g. a combobox.
-
- :param `control`: the control to be added;
- :param `label`: the label which appears if the control goes into the
- overflow items in the toolbar.
- """
-
- item = AuiToolBarItem()
- item.window = control
- item.label = label
- item.bitmap = wx.NullBitmap
- item.disabled_bitmap = wx.NullBitmap
- item.active = True
- item.dropdown = False
- item.spacer_pixels = 0
- item.id = control.GetId()
- item.state = 0
- item.proportion = 0
- item.kind = ITEM_CONTROL
- item.sizer_item = None
- item.min_size = control.GetEffectiveMinSize()
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddLabel(self, tool_id, label="", width=0):
- """
- Adds a label tool to the L{AuiToolBar}.
-
- :param `tool_id`: an integer by which the tool may be identified in subsequent operations;
- :param `label`: the toolbar tool label;
- :param `width`: the tool width.
- """
-
- min_size = wx.Size(-1, -1)
-
- if width != -1:
- min_size.x = width
-
- item = AuiToolBarItem()
- item.window = None
- item.label = label
- item.bitmap = wx.NullBitmap
- item.disabled_bitmap = wx.NullBitmap
- item.active = True
- item.dropdown = False
- item.spacer_pixels = 0
-
- if tool_id == wx.ID_ANY:
- tool_id = wx.NewId()
-
- item.id = tool_id
- item.state = 0
- item.proportion = 0
- item.kind = ITEM_LABEL
- item.sizer_item = None
- item.min_size = min_size
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddSeparator(self):
- """ Adds a separator for spacing groups of tools. """
-
- item = AuiToolBarItem()
- item.window = None
- item.label = ""
- item.bitmap = wx.NullBitmap
- item.disabled_bitmap = wx.NullBitmap
- item.active = True
- item.dropdown = False
- item.id = -1
- item.state = 0
- item.proportion = 0
- item.kind = ITEM_SEPARATOR
- item.sizer_item = None
- item.min_size = wx.Size(-1, -1)
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddSpacer(self, pixels):
- """
- Adds a spacer for spacing groups of tools.
-
- :param `pixels`: the width of the spacer.
- """
-
- item = AuiToolBarItem()
- item.window = None
- item.label = ""
- item.bitmap = wx.NullBitmap
- item.disabled_bitmap = wx.NullBitmap
- item.active = True
- item.dropdown = False
- item.spacer_pixels = pixels
- item.id = -1
- item.state = 0
- item.proportion = 0
- item.kind = ITEM_SPACER
- item.sizer_item = None
- item.min_size = wx.Size(-1, -1)
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- self._items.append(item)
- return self._items[-1]
-
-
- def AddStretchSpacer(self, proportion=1):
- """
- Adds a stretchable spacer for spacing groups of tools.
-
- :param `proportion`: the stretchable spacer proportion.
- """
-
- item = AuiToolBarItem()
- item.window = None
- item.label = ""
- item.bitmap = wx.NullBitmap
- item.disabled_bitmap = wx.NullBitmap
- item.active = True
- item.dropdown = False
- item.spacer_pixels = 0
- item.id = -1
- item.state = 0
- item.proportion = proportion
- item.kind = ITEM_SPACER
- item.sizer_item = None
- item.min_size = wx.Size(-1, -1)
- item.user_data = 0
- item.sticky = False
- item.orientation = self._tool_orientation
-
- self._items.append(item)
- return self._items[-1]
-
-
- def Clear(self):
- """ Deletes all the tools in the L{AuiToolBar}. """
-
- self._items = []
- self._sizer_element_count = 0
-
-
- def ClearTools(self):
- """ Deletes all the tools in the L{AuiToolBar}. """
-
- self.Clear()
-
-
- def DeleteTool(self, tool_id):
- """
- Removes the specified tool from the toolbar and deletes it.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier.
-
- :returns: ``True`` if the tool was deleted, ``False`` otherwise.
-
- :note: Note that it is unnecessary to call L{Realize} for the change to
- take place, it will happen immediately.
- """
-
- idx = self.GetToolIndex(tool_id)
-
- if idx >= 0 and idx < len(self._items):
- self._items.pop(idx)
- self.Realize()
- return True
-
- return False
-
-
- def DeleteToolByPos(self, pos):
- """
- This function behaves like L{DeleteTool} but it deletes the tool at the
- specified position and not the one with the given id.
-
- :param `pos`: the tool position.
-
- :see: L{DeleteTool}
- """
-
- if pos >= 0 and pos < len(self._items):
-
- self._items.pop(pos)
- self.Realize()
- return True
-
- return False
-
-
- def FindControl(self, id):
- """
- Returns a pointer to the control identified by `id` or ``None`` if no corresponding
- control is found.
-
- :param `id`: the control identifier.
- """
-
- wnd = self.FindWindow(id)
- return wnd
-
-
- def FindTool(self, tool_id):
- """
- Finds a tool for the given tool id.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier.
- """
-
- for item in self._items:
- if item.id == tool_id:
- return item
-
- return None
-
-
- def FindToolForPosition(self, x, y):
- """
- Finds a tool for the given mouse position.
-
- :param `x`: mouse `x` position;
- :param `y`: mouse `y` position.
-
- :returns: a pointer to a L{AuiToolBarItem} if a tool is found, or ``None`` otherwise.
- """
-
- for i, item in enumerate(self._items):
- if not item.sizer_item:
- continue
-
- rect = item.sizer_item.GetRect()
- if rect.Contains((x,y)):
-
- # if the item doesn't fit on the toolbar, return None
- if not self.GetToolFitsByIndex(i):
- return None
-
- return item
-
- return None
-
-
- def FindToolForPositionWithPacking(self, x, y):
- """
- Finds a tool for the given mouse position, taking into account also the
- tool packing.
-
- :param `x`: mouse `x` position;
- :param `y`: mouse `y` position.
-
- :returns: a pointer to a L{AuiToolBarItem} if a tool is found, or ``None`` otherwise.
- """
-
- count = len(self._items)
-
- for i, item in enumerate(self._items):
- if not item.sizer_item:
- continue
-
- rect = item.sizer_item.GetRect()
-
- # apply tool packing
- if i+1 < count:
- rect.width += self._tool_packing
-
- if rect.Contains((x,y)):
-
- # if the item doesn't fit on the toolbar, return None
- if not self.GetToolFitsByIndex(i):
- return None
-
- return item
-
- return None
-
-
- def FindToolByIndex(self, pos):
- """
- Finds a tool for the given tool position in the L{AuiToolBar}.
-
- :param `pos`: the tool position in the toolbar.
-
- :returns: a pointer to a L{AuiToolBarItem} if a tool is found, or ``None`` otherwise.
- """
-
- if pos < 0 or pos >= len(self._items):
- return None
-
- return self._items[pos]
-
-
- def SetToolBitmapSize(self, size):
- """
- Sets the default size of each tool bitmap. The default bitmap size is
- 16 by 15 pixels.
-
- :param `size`: the size of the bitmaps in the toolbar.
-
- :note: This should be called to tell the toolbar what the tool bitmap
- size is. Call it before you add tools.
-
- :note: Note that this is the size of the bitmap you pass to L{AddTool},
- and not the eventual size of the tool button.
-
- :todo: Add `wx.ToolBar` compatibility, actually implementing this method.
- """
-
- # TODO: wx.ToolBar compatibility
- pass
-
-
- def GetToolBitmapSize(self):
- """
- Returns the size of bitmap that the toolbar expects to have. The default
- bitmap size is 16 by 15 pixels.
-
- :note: Note that this is the size of the bitmap you pass to L{AddTool},
- and not the eventual size of the tool button.
-
- :todo: Add `wx.ToolBar` compatibility, actually implementing this method.
- """
-
- # TODO: wx.ToolBar compatibility
- return wx.Size(16, 15)
-
-
- def SetToolProportion(self, tool_id, proportion):
- """
- Sets the tool proportion in the toolbar.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier;
- :param `proportion`: the tool proportion in the toolbar.
- """
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- item.proportion = proportion
-
-
- def GetToolProportion(self, tool_id):
- """
- Returns the tool proportion in the toolbar.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier.
- """
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- return item.proportion
-
-
- def SetToolSeparation(self, separation):
- """
- Sets the separator size for the toolbar.
-
- :param `separation`: the separator size in pixels.
- """
-
- if self._art:
- self._art.SetElementSize(AUI_TBART_SEPARATOR_SIZE, separation)
-
-
- def GetToolSeparation(self):
- """ Returns the separator size for the toolbar, in pixels. """
-
- if self._art:
- return self._art.GetElementSize(AUI_TBART_SEPARATOR_SIZE)
-
- return 5
-
-
- def SetToolDropDown(self, tool_id, dropdown):
- """
- Assigns a drop down window menu to the toolbar item.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier;
- :param `dropdown`: whether to assign a drop down menu or not.
- """
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- item.dropdown = dropdown
-
-
- def GetToolDropDown(self, tool_id):
- """
- Returns whether the toolbar item identified by `tool_id` has an associated
- drop down window menu or not.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier.
- """
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- return item.dropdown
-
-
- def SetToolSticky(self, tool_id, sticky):
- """
- Sets the toolbar item as sticky or non-sticky.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier;
- :param `sticky`: whether the tool should be sticky or not.
- """
-
- # ignore separators
- if tool_id == -1:
- return
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- if item.sticky == sticky:
- return
-
- item.sticky = sticky
-
- self.Refresh(False)
- self.Update()
-
-
- def GetToolSticky(self, tool_id):
- """
- Returns whether the toolbar item identified by `tool_id` has a sticky
- behaviour or not.
-
- :param `tool_id`: the L{AuiToolBarItem} identifier.
- """
-
- item = self.FindTool(tool_id)
- if not item:
- return
-
- return item.sticky
-
-
- def SetToolBorderPadding(self, padding):
- """
- Sets the padding between the tool border and the label.
-
- :param `padding`: the padding in pixels.
- """
-
- self._tool_border_padding = padding
-
-
- def GetToolBorderPadding(self):
- """ Returns the padding between the tool border and the label, in pixels. """
-
- return self._tool_border_padding
-
-
- def SetToolTextOrientation(self, orientation):
- """
- Sets the label orientation for the toolbar items.
-
- :param `orientation`: the L{AuiToolBarItem} label orientation.
- """
-
- self._tool_text_orientation = orientation
-
- if self._art:
- self._art.SetTextOrientation(orientation)
-
-
- def GetToolTextOrientation(self):
- """ Returns the label orientation for the toolbar items. """
-
- return self._tool_text_orientation
-
-
- def SetToolOrientation(self, orientation):
- """
- Sets the tool orientation for the toolbar items.
-
- :param `orientation`: the L{AuiToolBarItem} orientation.
- """
-
- self._tool_orientation = orientation
- if self._art:
- self._art.SetOrientation(orientation)
-
-
- def GetToolOrientation(self):
- """ Returns the orientation for the toolbar items. """
-
- return self._tool_orientation
-
-
- def SetToolPacking(self, packing):
- """
- Sets the value used for spacing tools. The default value is 1 pixel.
-
- :param `packing`: the value for packing.
- """
-
- self._tool_packing = packing
-
-
- def GetToolPacking(self):
- """ Returns the value used for spacing tools. The default value is 1 pixel. """
-
- return self._tool_packing
-
-
- def SetOrientation(self, orientation):
- """
- Sets the toolbar orientation.
-
- :param `orientation`: either ``wx.VERTICAL`` or ``wx.HORIZONTAL``.
-
- :note: This can be temporarily overridden by L{AuiManager} when floating and
- docking a L{AuiToolBar}.
- """
-
- pass
-
-
- def SetMargins(self, left=-1, right=-1, top=-1, bottom=-1):
- """
- Set the values to be used as margins for the toolbar.
-
- :param `left`: the left toolbar margin;
- :param `right`: the right toolbar margin;
- :param `top`: the top toolbar margin;
- :param `bottom`: the bottom toolbar margin.
- """
-
- if left != -1:
- self._left_padding = left
- if right != -1:
- self._right_padding = right
- if top != -1:
- self._top_padding = top
- if bottom != -1:
- self._bottom_padding = bottom
-
-
- def SetMarginsSize(self, size):
- """
- Set the values to be used as margins for the toolbar.
-
- :param `size`: the margin size (an instance of `wx.Size`).
- """
-
- self.SetMargins(size.x, size.x, size.y, size.y)
-
-
- def SetMarginsXY(self, x, y):
- """
- Set the values to be used as margins for the toolbar.
-
- :param `x`: left margin, right margin and inter-tool separation value;
- :param `y`: top margin, bottom margin and inter-tool separation value.
- """
-
- self.SetMargins(x, x, y, y)
-
-
- def GetGripperVisible(self):
- """ Returns whether the toolbar gripper is visible or not. """
-
- return self._gripper_visible
-
-
- def SetGripperVisible(self, visible):
- """
- Sets whether the toolbar gripper is visible or not.
-
- :param `visible`: ``True`` for a visible gripper, ``False`` otherwise.
- """
-
- self._gripper_visible = visible
- if visible:
- self._agwStyle |= AUI_TB_GRIPPER
- else:
- self._agwStyle &= ~AUI_TB_GRIPPER
-
- self.Realize()
- self.Refresh(False)
-
-
- def GetOverflowVisible(self):
- """ Returns whether the overflow button is visible or not. """
-
- return self._overflow_visible
-
-
- def SetOverflowVisible(self, visible):
- """
- Sets whether the overflow button is visible or not.
-
- :param `visible`: ``True`` for a visible overflow button, ``False`` otherwise.
- """
-
- self._overflow_visible = visible
- if visible:
- self._agwStyle |= AUI_TB_OVERFLOW
- else:
- self._agwStyle &= ~AUI_TB_OVERFLOW
-
- self.Refresh(False)
-
-
- def SetFont(self, font):
- """
- Sets the L{AuiToolBar} font.
-
- :param `font`: a `wx.Font` object.
-
- :note: Overridden from `wx.PyControl`.
- """
-
- res = wx.PyControl.SetFont(self, font)
-
- if self._art:
- self._art.SetFont(font)
-
- return res
-
-
- def SetHoverItem(self, pitem):
- """
- Sets a toolbar item to be currently hovered by the mouse.
-
- :param `pitem`: an instance of L{AuiToolBarItem}.
- """
-
- former_hover = None
-
- for item in self._items:
-
- if item.state & AUI_BUTTON_STATE_HOVER:
- former_hover = item
-
- item.state &= ~AUI_BUTTON_STATE_HOVER
-
- if pitem:
- pitem.state |= AUI_BUTTON_STATE_HOVER
-
- if former_hover != pitem:
- self.Refresh(False)
- self.Update()
-
-
- def SetPressedItem(self, pitem):
- """
- Sets a toolbar item to be currently in a "pressed" state.
-
- :param `pitem`: an instance of L{AuiToolBarItem}.
- """
-
- former_item = None
-
- for item in self._items:
-
- if item.state & AUI_BUTTON_STATE_PRESSED:
- former_item = item
-
- item.state &= ~AUI_BUTTON_STATE_PRESSED
-
- if pitem:
- pitem.state &= ~AUI_BUTTON_STATE_HOVER
- pitem.state |= AUI_BUTTON_STATE_PRESSED
-
- if former_item != pitem:
- self.Refresh(False)
- self.Update()
-
-
- def RefreshOverflowState(self):
- """ Refreshes the overflow button. """
-
- if not self._overflow_sizer_item:
- self._overflow_state = 0
- return
-
- overflow_state = 0
- overflow_rect = self.GetOverflowRect()
-
- # find out the mouse's current position
- pt = wx.GetMousePosition()
- pt = self.ScreenToClient(pt)
-
- # find out if the mouse cursor is inside the dropdown rectangle
- if overflow_rect.Contains((pt.x, pt.y)):
-
- if _VERSION_STRING < "2.9":
- leftDown = wx.GetMouseState().LeftDown()
- else:
- leftDown = wx.GetMouseState().LeftIsDown()
-
- if leftDown:
- overflow_state = AUI_BUTTON_STATE_PRESSED
- else:
- overflow_state = AUI_BUTTON_STATE_HOVER
-
- if overflow_state != self._overflow_state:
- self._overflow_state = overflow_state
- self.Refresh(False)
- self.Update()
-
- self._overflow_state = overflow_state
-
-
- def ToggleTool(self, tool_id, state):
- """
- Toggles a tool on or off. This does not cause any event to get emitted.
-
- :param `tool_id`: tool in question.
- :param `state`: if ``True``, toggles the tool on, otherwise toggles it off.
-
- :note: This only applies to a tool that has been specified as a toggle tool.
- """
-
- tool = self.FindTool(tool_id)
-
- if tool:
- if tool.kind not in [ITEM_CHECK, ITEM_RADIO]:
- return
-
- if tool.kind == ITEM_RADIO:
- idx = self.GetToolIndex(tool_id)
- if idx >= 0 and idx < len(self._items):
- for i in xrange(idx, len(self._items)):
- tool = self.FindToolByIndex(i)
- if tool.kind != ITEM_RADIO:
- break
- tool.state &= ~AUI_BUTTON_STATE_CHECKED
-
- for i in xrange(idx, -1, -1):
- tool = self.FindToolByIndex(i)
- if tool.kind != ITEM_RADIO:
- break
- tool.state &= ~AUI_BUTTON_STATE_CHECKED
-
- tool = self.FindTool(tool_id)
- tool.state |= AUI_BUTTON_STATE_CHECKED
- else:
- if state == True:
- tool.state |= AUI_BUTTON_STATE_CHECKED
- else:
- tool.state &= ~AUI_BUTTON_STATE_CHECKED
-
-
- def GetToolToggled(self, tool_id):
- """
- Returns whether a tool is toggled or not.
-
- :param `tool_id`: the toolbar item identifier.
-
- :note: This only applies to a tool that has been specified as a toggle tool.
- """
-
- tool = self.FindTool(tool_id)
-
- if tool:
- if tool.kind not in [ITEM_CHECK, ITEM_RADIO]:
- return False
-
- return (tool.state & AUI_BUTTON_STATE_CHECKED and [True] or [False])[0]
-
- return False
-
-
- def EnableTool(self, tool_id, state):
- """
- Enables or disables the tool.
-
- :param `tool_id`: identifier for the tool to enable or disable.
- :param `state`: if ``True``, enables the tool, otherwise disables it.
- """
-
- tool = self.FindTool(tool_id)
-
- if tool:
-
- if state == True:
- tool.state &= ~AUI_BUTTON_STATE_DISABLED
- else:
- tool.state |= AUI_BUTTON_STATE_DISABLED
-
-
- def GetToolEnabled(self, tool_id):
- """
- Returns whether the tool identified by `tool_id` is enabled or not.
-
- :param `tool_id`: the tool identifier.
- """
-
- tool = self.FindTool(tool_id)
-
- if tool:
- return (tool.state & AUI_BUTTON_STATE_DISABLED and [False] or [True])[0]
-
- return False
-
-
- def GetToolLabel(self, tool_id):
- """
- Returns the tool label for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier.
- """
-
- tool = self.FindTool(tool_id)
- if not tool:
- return ""
-
- return tool.label
-
-
- def SetToolLabel(self, tool_id, label):
- """
- Sets the tool label for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier;
- :param `label`: the new toolbar item label.
- """
-
- tool = self.FindTool(tool_id)
- if tool:
- tool.label = label
-
-
- def GetToolBitmap(self, tool_id):
- """
- Returns the tool bitmap for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier.
- """
-
- tool = self.FindTool(tool_id)
- if not tool:
- return wx.NullBitmap
-
- return tool.bitmap
-
-
- def SetToolBitmap(self, tool_id, bitmap):
- """
- Sets the tool bitmap for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier;
- :param `bitmap`: the new bitmap for the toolbar item (an instance of `wx.Bitmap`).
- """
-
- tool = self.FindTool(tool_id)
- if tool:
- tool.bitmap = bitmap
-
-
- def SetToolNormalBitmap(self, tool_id, bitmap):
- """
- Sets the tool bitmap for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier;
- :param `bitmap`: the new bitmap for the toolbar item (an instance of `wx.Bitmap`).
- """
-
- self.SetToolBitmap(tool_id, bitmap)
-
-
- def SetToolDisabledBitmap(self, tool_id, bitmap):
- """
- Sets the tool disabled bitmap for the tool identified by `tool_id`.
-
- :param `tool_id`: the tool identifier;
- :param `bitmap`: the new disabled bitmap for the toolbar item (an instance of `wx.Bitmap`).
- """
-
- tool = self.FindTool(tool_id)
- if tool:
- tool.disabled_bitmap = bitmap
-
-
- def GetToolShortHelp(self, tool_id):
- """
- Returns the short help for the given tool.
-
- :param `tool_id`: the tool identifier.
- """
-
- tool = self.FindTool(tool_id)
- if not tool:
- return ""
-
- return tool.short_help
-
-
- def SetToolShortHelp(self, tool_id, help_string):
- """
- Sets the short help for the given tool.
-
- :param `tool_id`: the tool identifier;
- :param `help_string`: the string for the short help.
- """
-
- tool = self.FindTool(tool_id)
- if tool:
- tool.short_help = help_string
-
-
- def GetToolLongHelp(self, tool_id):
- """
- Returns the long help for the given tool.
-
- :param `tool_id`: the tool identifier.
- """
-
- tool = self.FindTool(tool_id)
- if not tool:
- return ""
-
- return tool.long_help
-
-
- def SetToolAlignment(self, alignment=wx.EXPAND):
- """
- This sets the alignment for all of the tools within the
- toolbar (only has an effect when the toolbar is expanded).
-
- :param `alignment`: `wx.Sizer` alignment value
- (``wx.ALIGN_CENTER_HORIZONTAL`` or ``wx.ALIGN_CENTER_VERTICAL``).
- """
-
- self._tool_alignment = alignment
-
-
-
- def SetToolLongHelp(self, tool_id, help_string):
- """
- Sets the long help for the given tool.
-
- :param `tool_id`: the tool identifier;
- :param `help_string`: the string for the long help.
- """
-
- tool = self.FindTool(tool_id)
- if tool:
- tool.long_help = help_string
-
-
- def SetCustomOverflowItems(self, prepend, append):
- """
- Sets the two lists `prepend` and `append` as custom overflow items.
-
- :param `prepend`: a list of L{AuiToolBarItem} to be prepended;
- :param `append`: a list of L{AuiToolBarItem} to be appended.
- """
-
- self._custom_overflow_prepend = prepend
- self._custom_overflow_append = append
-
-
- def GetToolCount(self):
- """ Returns the number of tools in the L{AuiToolBar}. """
-
- return len(self._items)
-
-
- def GetToolIndex(self, tool_id):
- """
- Returns the position of the tool in the toolbar given its identifier.
-
- :param `tool_id`: the toolbar item identifier.
- """
-
- # this will prevent us from returning the index of the
- # first separator in the toolbar since its id is equal to -1
- if tool_id == -1:
- return wx.NOT_FOUND
-
- for i, item in enumerate(self._items):
- if item.id == tool_id:
- return i
-
- return wx.NOT_FOUND
-
-
- def GetToolPos(self, tool_id):
- """
- Returns the position of the tool in the toolbar given its identifier.
-
- :param `tool_id`: the toolbar item identifier.
- """
-
- return self.GetToolIndex(tool_id)
-
-
- def GetToolFitsByIndex(self, tool_id):
- """
- Returns whether the tool identified by `tool_id` fits into the toolbar or not.
-
- :param `tool_id`: the toolbar item identifier.
- """
-
- if tool_id < 0 or tool_id >= len(self._items):
- return False
-
- if not self._items[tool_id].sizer_item:
- return False
-
- cli_w, cli_h = self.GetClientSize()
- rect = self._items[tool_id].sizer_item.GetRect()
-
- if self._agwStyle & AUI_TB_VERTICAL:
- # take the dropdown size into account
- if self._overflow_visible:
- cli_h -= self._overflow_sizer_item.GetSize().y
-
- if rect.y+rect.height < cli_h:
- return True
-
- else:
-
- # take the dropdown size into account
- if self._overflow_visible:
- cli_w -= self._overflow_sizer_item.GetSize().x
-
- if rect.x+rect.width < cli_w:
- return True
-
- return False
-
-
- def GetToolFits(self, tool_id):
- """
- Returns whether the tool identified by `tool_id` fits into the toolbar or not.
-
- :param `tool_id`: the toolbar item identifier.
- """
-
- return self.GetToolFitsByIndex(self.GetToolIndex(tool_id))
-
-
- def GetToolRect(self, tool_id):
- """
- Returns the toolbar item rectangle
-
- :param `tool_id`: the toolbar item identifier.
- """
-
- tool = self.FindTool(tool_id)
- if tool and tool.sizer_item:
- return tool.sizer_item.GetRect()
-
- return wx.Rect()
-
-
- def GetToolBarFits(self):
- """ Returns whether the L{AuiToolBar} size fits in a specified size. """
-
- if len(self._items) == 0:
- # empty toolbar always 'fits'
- return True
-
- # entire toolbar content fits if the last tool fits
- return self.GetToolFitsByIndex(len(self._items) - 1)
-
-
- def Realize(self):
- """ Realizes the toolbar. This function should be called after you have added tools. """
-
- dc = wx.ClientDC(self)
-
- if not dc.IsOk():
- return False
-
- horizontal = True
- if self._agwStyle & AUI_TB_VERTICAL:
- horizontal = False
-
- # create the new sizer to add toolbar elements to
- sizer = wx.BoxSizer((horizontal and [wx.HORIZONTAL] or [wx.VERTICAL])[0])
-
- # add gripper area
- separator_size = self._art.GetElementSize(AUI_TBART_SEPARATOR_SIZE)
- gripper_size = self._art.GetElementSize(AUI_TBART_GRIPPER_SIZE)
-
- if gripper_size > 0 and self._gripper_visible:
- if horizontal:
- self._gripper_sizer_item = sizer.Add((gripper_size, 1), 0, wx.EXPAND)
- else:
- self._gripper_sizer_item = sizer.Add((1, gripper_size), 0, wx.EXPAND)
- else:
- self._gripper_sizer_item = None
-
- # add "left" padding
- if self._left_padding > 0:
- if horizontal:
- sizer.Add((self._left_padding, 1))
- else:
- sizer.Add((1, self._left_padding))
-
- count = len(self._items)
- for i, item in enumerate(self._items):
-
- sizer_item = None
- kind = item.kind
-
- if kind == ITEM_LABEL:
-
- size = self._art.GetLabelSize(dc, self, item)
- sizer_item = sizer.Add((size.x + (self._tool_border_padding*2),
- size.y + (self._tool_border_padding*2)),
- item.proportion,
- item.alignment)
- if i+1 < count:
- sizer.AddSpacer(self._tool_packing)
-
-
- elif kind in [ITEM_CHECK, ITEM_NORMAL, ITEM_RADIO]:
-
- size = self._art.GetToolSize(dc, self, item)
- sizer_item = sizer.Add((size.x + (self._tool_border_padding*2),
- size.y + (self._tool_border_padding*2)),
- 0,
- item.alignment)
- # add tool packing
- if i+1 < count:
- sizer.AddSpacer(self._tool_packing)
-
- elif kind == ITEM_SEPARATOR:
-
- if horizontal:
- sizer_item = sizer.Add((separator_size, 1), 0, wx.EXPAND)
- else:
- sizer_item = sizer.Add((1, separator_size), 0, wx.EXPAND)
-
- # add tool packing
- if i+1 < count:
- sizer.AddSpacer(self._tool_packing)
-
- elif kind == ITEM_SPACER:
-
- if item.proportion > 0:
- sizer_item = sizer.AddStretchSpacer(item.proportion)
- else:
- sizer_item = sizer.Add((item.spacer_pixels, 1))
-
- elif kind == ITEM_CONTROL:
-
- vert_sizer = wx.BoxSizer(wx.VERTICAL)
- vert_sizer.AddStretchSpacer(1)
- ctrl_sizer_item = vert_sizer.Add(item.window, 0, wx.EXPAND)
- vert_sizer.AddStretchSpacer(1)
-
- if self._agwStyle & AUI_TB_TEXT and \
- self._tool_text_orientation == AUI_TBTOOL_TEXT_BOTTOM and \
- item.GetLabel() != "":
-
- s = self.GetLabelSize(item.GetLabel())
- vert_sizer.Add((1, s.y))
-
- sizer_item = sizer.Add(vert_sizer, item.proportion, wx.EXPAND)
- min_size = item.min_size
-
- # proportional items will disappear from the toolbar if
- # their min width is not set to something really small
- if item.proportion != 0:
- min_size.x = 1
-
- if min_size.IsFullySpecified():
- sizer.SetItemMinSize(vert_sizer, min_size)
- vert_sizer.SetItemMinSize(item.window, min_size)
-
- # add tool packing
- if i+1 < count:
- sizer.AddSpacer(self._tool_packing)
-
- item.sizer_item = sizer_item
-
-
- # add "right" padding
- if self._right_padding > 0:
- if horizontal:
- sizer.Add((self._right_padding, 1))
- else:
- sizer.Add((1, self._right_padding))
-
- # add drop down area
- self._overflow_sizer_item = None
-
- if self._agwStyle & AUI_TB_OVERFLOW:
-
- overflow_size = self._art.GetElementSize(AUI_TBART_OVERFLOW_SIZE)
- if overflow_size > 0 and self._overflow_visible:
-
- if horizontal:
- self._overflow_sizer_item = sizer.Add((overflow_size, 1), 0, wx.EXPAND)
- else:
- self._overflow_sizer_item = sizer.Add((1, overflow_size), 0, wx.EXPAND)
-
- else:
-
- self._overflow_sizer_item = None
-
- # the outside sizer helps us apply the "top" and "bottom" padding
- outside_sizer = wx.BoxSizer((horizontal and [wx.VERTICAL] or [wx.HORIZONTAL])[0])
-
- # add "top" padding
- if self._top_padding > 0:
-
- if horizontal:
- outside_sizer.Add((1, self._top_padding))
- else:
- outside_sizer.Add((self._top_padding, 1))
-
- # add the sizer that contains all of the toolbar elements
- outside_sizer.Add(sizer, 1, self._tool_alignment)
-
- # add "bottom" padding
- if self._bottom_padding > 0:
-
- if horizontal:
- outside_sizer.Add((1, self._bottom_padding))
- else:
- outside_sizer.Add((self._bottom_padding, 1))
-
- del self._sizer # remove old sizer
- self._sizer = outside_sizer
- self.SetSizer(outside_sizer)
-
- # calculate the rock-bottom minimum size
- for item in self._items:
-
- if item.sizer_item and item.proportion > 0 and item.min_size.IsFullySpecified():
- item.sizer_item.SetMinSize((0, 0))
-
- self._absolute_min_size = self._sizer.GetMinSize()
-
- # reset the min sizes to what they were
- for item in self._items:
-
- if item.sizer_item and item.proportion > 0 and item.min_size.IsFullySpecified():
- item.sizer_item.SetMinSize(item.min_size)
-
- # set control size
- size = self._sizer.GetMinSize()
- self.SetMinSize(size)
- self._minWidth = size.x
- self._minHeight = size.y
-
- if self._agwStyle & AUI_TB_NO_AUTORESIZE == 0:
-
- cur_size = self.GetClientSize()
- new_size = self.GetMinSize()
-
- if new_size != cur_size:
-
- self.SetClientSize(new_size)
-
- else:
-
- self._sizer.SetDimension(0, 0, cur_size.x, cur_size.y)
-
- else:
-
- cur_size = self.GetClientSize()
- self._sizer.SetDimension(0, 0, cur_size.x, cur_size.y)
-
- self.Refresh(False)
- return True
-
-
- def GetOverflowState(self):
- """ Returns the state of the overflow button. """
-
- return self._overflow_state
-
-
- def GetOverflowRect(self):
- """ Returns the rectangle of the overflow button. """
-
- cli_rect = wx.RectPS(wx.Point(0, 0), self.GetClientSize())
- overflow_rect = wx.Rect(*self._overflow_sizer_item.GetRect())
- overflow_size = self._art.GetElementSize(AUI_TBART_OVERFLOW_SIZE)
-
- if self._agwStyle & AUI_TB_VERTICAL:
-
- overflow_rect.y = cli_rect.height - overflow_size
- overflow_rect.x = 0
- overflow_rect.width = cli_rect.width
- overflow_rect.height = overflow_size
-
- else:
-
- overflow_rect.x = cli_rect.width - overflow_size
- overflow_rect.y = 0
- overflow_rect.width = overflow_size
- overflow_rect.height = cli_rect.height
-
- return overflow_rect
-
-
- def GetLabelSize(self, label):
- """
- Returns the standard size of a toolbar item.
-
- :param `label`: a test label.
- """
-
- dc = wx.ClientDC(self)
- dc.SetFont(self._font)
-
- return GetLabelSize(dc, label, self._tool_orientation != AUI_TBTOOL_HORIZONTAL)
-
-
- def GetAuiManager(self):
- """ Returns the L{AuiManager} which manages the toolbar. """
-
- try:
- return self._auiManager
- except AttributeError:
- return False
-
-
- def SetAuiManager(self, auiManager):
- """ Sets the L{AuiManager} which manages the toolbar. """
-
- self._auiManager = auiManager
-
-
- def DoIdleUpdate(self):
- """ Updates the toolbar during idle times. """
-
- handler = self.GetEventHandler()
- if not handler:
- return
-
- need_refresh = False
-
- for item in self._items:
-
- if item.id == -1:
- continue
-
- evt = wx.UpdateUIEvent(item.id)
- evt.SetEventObject(self)
-
- if handler.ProcessEvent(evt):
-
- if evt.GetSetEnabled():
-
- if item.window:
- is_enabled = item.window.IsEnabled()
- else:
- is_enabled = (item.state & AUI_BUTTON_STATE_DISABLED and [False] or [True])[0]
-
- new_enabled = evt.GetEnabled()
- if new_enabled != is_enabled:
-
- if item.window:
- item.window.Enable(new_enabled)
- else:
- if new_enabled:
- item.state &= ~AUI_BUTTON_STATE_DISABLED
- else:
- item.state |= AUI_BUTTON_STATE_DISABLED
-
- need_refresh = True
-
- if evt.GetSetChecked():
-
- # make sure we aren't checking an item that can't be
- if item.kind != ITEM_CHECK and item.kind != ITEM_RADIO:
- continue
-
- is_checked = (item.state & AUI_BUTTON_STATE_CHECKED and [True] or [False])[0]
- new_checked = evt.GetChecked()
-
- if new_checked != is_checked:
-
- if new_checked:
- item.state |= AUI_BUTTON_STATE_CHECKED
- else:
- item.state &= ~AUI_BUTTON_STATE_CHECKED
-
- need_refresh = True
-
- if need_refresh:
- self.Refresh(False)
-
-
- def OnSize(self, event):
- """
- Handles the ``wx.EVT_SIZE`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.SizeEvent` event to be processed.
- """
-
- x, y = self.GetClientSize()
- realize = False
-
- if x > y:
- self.SetOrientation(wx.HORIZONTAL)
- else:
- self.SetOrientation(wx.VERTICAL)
-
- if (x >= y and self._absolute_min_size.x > x) or (y > x and self._absolute_min_size.y > y):
-
- # hide all flexible items
- for item in self._items:
- if item.sizer_item and item.proportion > 0 and item.sizer_item.IsShown():
- item.sizer_item.Show(False)
- item.sizer_item.SetProportion(0)
-
- if self._originalStyle & AUI_TB_OVERFLOW:
- if not self.GetOverflowVisible():
- self.SetOverflowVisible(True)
- realize = True
-
- else:
-
- if self._originalStyle & AUI_TB_OVERFLOW and not self._custom_overflow_append and \
- not self._custom_overflow_prepend:
- if self.GetOverflowVisible():
- self.SetOverflowVisible(False)
- realize = True
-
- # show all flexible items
- for item in self._items:
- if item.sizer_item and item.proportion > 0 and not item.sizer_item.IsShown():
- item.sizer_item.Show(True)
- item.sizer_item.SetProportion(item.proportion)
-
- self._sizer.SetDimension(0, 0, x, y)
-
- if realize:
- self.Realize()
- else:
- self.Refresh(False)
-
- self.Update()
-
-
- def DoSetSize(self, x, y, width, height, sizeFlags=wx.SIZE_AUTO):
- """
- Sets the position and size of the window in pixels. The `sizeFlags`
- parameter indicates the interpretation of the other params if they are
- equal to -1.
-
- :param `x`: the window `x` position;
- :param `y`: the window `y` position;
- :param `width`: the window width;
- :param `height`: the window height;
- :param `sizeFlags`: may have one of this bit set:
-
- =================================== ======================================
- Size Flags Description
- =================================== ======================================
- ``wx.SIZE_AUTO`` A -1 indicates that a class-specific default should be used.
- ``wx.SIZE_AUTO_WIDTH`` A -1 indicates that a class-specific default should be used for the width.
- ``wx.SIZE_AUTO_HEIGHT`` A -1 indicates that a class-specific default should be used for the height.
- ``wx.SIZE_USE_EXISTING`` Existing dimensions should be used if -1 values are supplied.
- ``wx.SIZE_ALLOW_MINUS_ONE`` Allow dimensions of -1 and less to be interpreted as real dimensions, not default values.
- ``wx.SIZE_FORCE`` Normally, if the position and the size of the window are already the same as the parameters of this function, nothing is done. but with this flag a window resize may be forced even in this case (supported in wx 2.6.2 and later and only implemented for MSW and ignored elsewhere currently)
- =================================== ======================================
-
- :note: Overridden from `wx.PyControl`.
- """
-
- parent_size = self.GetParent().GetClientSize()
- if x + width > parent_size.x:
- width = max(0, parent_size.x - x)
- if y + height > parent_size.y:
- height = max(0, parent_size.y - y)
-
- wx.PyControl.DoSetSize(self, x, y, width, height, sizeFlags)
-
-
- def OnIdle(self, event):
- """
- Handles the ``wx.EVT_IDLE`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.IdleEvent` event to be processed.
- """
-
- self.DoIdleUpdate()
- event.Skip()
-
-
- def DoGetBestSize(self):
- """
- Gets the size which best suits the window: for a control, it would be the
- minimal size which doesn't truncate the control, for a panel - the same
- size as it would have after a call to `Fit()`.
-
- :note: Overridden from `wx.PyControl`.
- """
-
- return self._absolute_min_size
-
-
- def OnPaint(self, event):
- """
- Handles the ``wx.EVT_PAINT`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.PaintEvent` event to be processed.
- """
-
- dc = wx.AutoBufferedPaintDC(self)
- cli_rect = wx.RectPS(wx.Point(0, 0), self.GetClientSize())
-
- horizontal = True
- if self._agwStyle & AUI_TB_VERTICAL:
- horizontal = False
-
- if self._agwStyle & AUI_TB_PLAIN_BACKGROUND:
- self._art.DrawPlainBackground(dc, self, cli_rect)
- else:
- self._art.DrawBackground(dc, self, cli_rect, horizontal)
-
- gripper_size = self._art.GetElementSize(AUI_TBART_GRIPPER_SIZE)
- dropdown_size = self._art.GetElementSize(AUI_TBART_OVERFLOW_SIZE)
-
- # paint the gripper
- if gripper_size > 0 and self._gripper_sizer_item:
- gripper_rect = wx.Rect(*self._gripper_sizer_item.GetRect())
- if horizontal:
- gripper_rect.width = gripper_size
- else:
- gripper_rect.height = gripper_size
-
- self._art.DrawGripper(dc, self, gripper_rect)
-
- # calculated how far we can draw items
- if horizontal:
- last_extent = cli_rect.width
- else:
- last_extent = cli_rect.height
-
- if self._overflow_visible:
- last_extent -= dropdown_size
-
- # paint each individual tool
- for item in self._items:
-
- if not item.sizer_item:
- continue
-
- item_rect = wx.Rect(*item.sizer_item.GetRect())
-
- if (horizontal and item_rect.x + item_rect.width >= last_extent) or \
- (not horizontal and item_rect.y + item_rect.height >= last_extent):
-
- break
-
- if item.kind == ITEM_SEPARATOR:
- # draw a separator
- self._art.DrawSeparator(dc, self, item_rect)
-
- elif item.kind == ITEM_LABEL:
- # draw a text label only
- self._art.DrawLabel(dc, self, item, item_rect)
-
- elif item.kind == ITEM_NORMAL:
- # draw a regular button or dropdown button
- if not item.dropdown:
- self._art.DrawButton(dc, self, item, item_rect)
- else:
- self._art.DrawDropDownButton(dc, self, item, item_rect)
-
- elif item.kind == ITEM_CHECK:
- # draw a regular toggle button or a dropdown one
- if not item.dropdown:
- self._art.DrawButton(dc, self, item, item_rect)
- else:
- self._art.DrawDropDownButton(dc, self, item, item_rect)
-
- elif item.kind == ITEM_RADIO:
- # draw a toggle button
- self._art.DrawButton(dc, self, item, item_rect)
-
- elif item.kind == ITEM_CONTROL:
- # draw the control's label
- self._art.DrawControlLabel(dc, self, item, item_rect)
-
- # fire a signal to see if the item wants to be custom-rendered
- self.OnCustomRender(dc, item, item_rect)
-
- # paint the overflow button
- if dropdown_size > 0 and self._overflow_sizer_item:
- dropdown_rect = self.GetOverflowRect()
- self._art.DrawOverflowButton(dc, self, dropdown_rect, self._overflow_state)
-
-
- def OnEraseBackground(self, event):
- """
- Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.EraseEvent` event to be processed.
-
- :note: This is intentionally empty, to reduce flicker.
- """
-
- pass
-
-
- def OnLeftDown(self, event):
- """
- Handles the ``wx.EVT_LEFT_DOWN`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- cli_rect = wx.RectPS(wx.Point(0, 0), self.GetClientSize())
- self.StopPreviewTimer()
-
- if self._gripper_sizer_item:
-
- gripper_rect = wx.Rect(*self._gripper_sizer_item.GetRect())
- if gripper_rect.Contains(event.GetPosition()):
-
- # find aui manager
- manager = self.GetAuiManager()
- if not manager:
- return
-
- x_drag_offset = event.GetX() - gripper_rect.GetX()
- y_drag_offset = event.GetY() - gripper_rect.GetY()
-
- clientPt = wx.Point(*event.GetPosition())
- screenPt = self.ClientToScreen(clientPt)
- managedWindow = manager.GetManagedWindow()
- managerClientPt = managedWindow.ScreenToClient(screenPt)
-
- # gripper was clicked
- manager.OnGripperClicked(self, managerClientPt, wx.Point(x_drag_offset, y_drag_offset))
- return
-
- if self._overflow_sizer_item:
- overflow_rect = self.GetOverflowRect()
-
- if self._art and self._overflow_visible and overflow_rect.Contains(event.GetPosition()):
-
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, -1)
- e.SetEventObject(self)
- e.SetToolId(-1)
- e.SetClickPoint(event.GetPosition())
- processed = self.ProcessEvent(e)
-
- if processed:
- self.DoIdleUpdate()
- else:
- overflow_items = []
-
- # add custom overflow prepend items, if any
- count = len(self._custom_overflow_prepend)
- for i in xrange(count):
- overflow_items.append(self._custom_overflow_prepend[i])
-
- # only show items that don't fit in the dropdown
- count = len(self._items)
- for i in xrange(count):
-
- if not self.GetToolFitsByIndex(i):
- overflow_items.append(self._items[i])
-
- # add custom overflow append items, if any
- count = len(self._custom_overflow_append)
- for i in xrange(count):
- overflow_items.append(self._custom_overflow_append[i])
-
- res = self._art.ShowDropDown(self, overflow_items)
- self._overflow_state = 0
- self.Refresh(False)
- if res != -1:
- e = wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, res)
- e.SetEventObject(self)
- if not self.GetParent().ProcessEvent(e):
- tool = self.FindTool(res)
- if tool:
- state = (tool.state & AUI_BUTTON_STATE_CHECKED and [True] or [False])[0]
- self.ToggleTool(res, not state)
-
- return
-
- self._dragging = False
- self._action_pos = wx.Point(*event.GetPosition())
- self._action_item = self.FindToolForPosition(*event.GetPosition())
-
- if self._action_item:
-
- if self._action_item.state & AUI_BUTTON_STATE_DISABLED:
-
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
- return
-
- self.SetPressedItem(self._action_item)
-
- # fire the tool dropdown event
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, self._action_item.id)
- e.SetEventObject(self)
- e.SetToolId(self._action_item.id)
- e.SetDropDownClicked(False)
-
- mouse_x, mouse_y = event.GetX(), event.GetY()
- rect = wx.Rect(*self._action_item.sizer_item.GetRect())
-
- if self._action_item.dropdown:
- if (self._action_item.orientation == AUI_TBTOOL_HORIZONTAL and \
- mouse_x >= (rect.x+rect.width-BUTTON_DROPDOWN_WIDTH-1) and \
- mouse_x < (rect.x+rect.width)) or \
- (self._action_item.orientation != AUI_TBTOOL_HORIZONTAL and \
- mouse_y >= (rect.y+rect.height-BUTTON_DROPDOWN_WIDTH-1) and \
- mouse_y < (rect.y+rect.height)):
-
- e.SetDropDownClicked(True)
-
- e.SetClickPoint(event.GetPosition())
- e.SetItemRect(rect)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
-
- def OnLeftUp(self, event):
- """
- Handles the ``wx.EVT_LEFT_UP`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- self.SetPressedItem(None)
-
- hit_item = self.FindToolForPosition(*event.GetPosition())
-
- if hit_item and not hit_item.state & AUI_BUTTON_STATE_DISABLED:
- self.SetHoverItem(hit_item)
-
- if self._dragging:
- # reset drag and drop member variables
- self._dragging = False
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
-
- else:
-
- if self._action_item and hit_item == self._action_item:
- self.SetToolTipString("")
-
- if hit_item.kind in [ITEM_CHECK, ITEM_RADIO]:
- toggle = not (self._action_item.state & AUI_BUTTON_STATE_CHECKED)
- self.ToggleTool(self._action_item.id, toggle)
-
- # repaint immediately
- self.Refresh(False)
- self.Update()
-
- e = wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, self._action_item.id)
- e.SetEventObject(self)
- e.SetInt(toggle)
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
-
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
- else:
-
- if self._action_item.id == ID_RESTORE_FRAME:
- # find aui manager
- manager = self.GetAuiManager()
-
- if not manager:
- return
-
- pane = manager.GetPane(self)
- e = framemanager.AuiManagerEvent(framemanager.wxEVT_AUI_PANE_MIN_RESTORE)
-
- e.SetManager(manager)
- e.SetPane(pane)
-
- manager.ProcessEvent(e)
- self.DoIdleUpdate()
-
- else:
-
- e = wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, self._action_item.id)
- e.SetEventObject(self)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
- # reset drag and drop member variables
- self._dragging = False
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
-
-
- def OnRightDown(self, event):
- """
- Handles the ``wx.EVT_RIGHT_DOWN`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- cli_rect = wx.RectPS(wx.Point(0, 0), self.GetClientSize())
-
- if self._gripper_sizer_item:
- gripper_rect = self._gripper_sizer_item.GetRect()
- if gripper_rect.Contains(event.GetPosition()):
- return
-
- if self._overflow_sizer_item:
-
- dropdown_size = self._art.GetElementSize(AUI_TBART_OVERFLOW_SIZE)
- if dropdown_size > 0 and event.m_x > cli_rect.width - dropdown_size and \
- event.m_y >= 0 and event.m_y < cli_rect.height and self._art:
- return
-
- self._action_pos = wx.Point(*event.GetPosition())
- self._action_item = self.FindToolForPosition(*event.GetPosition())
-
- if self._action_item:
- if self._action_item.state & AUI_BUTTON_STATE_DISABLED:
-
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
- return
-
-
- def OnRightUp(self, event):
- """
- Handles the ``wx.EVT_RIGHT_UP`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- hit_item = self.FindToolForPosition(*event.GetPosition())
-
- if self._action_item and hit_item == self._action_item:
-
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, self._action_item.id)
- e.SetEventObject(self)
- e.SetToolId(self._action_item.id)
- e.SetClickPoint(self._action_pos)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
- else:
-
- # right-clicked on the invalid area of the toolbar
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, -1)
- e.SetEventObject(self)
- e.SetToolId(-1)
- e.SetClickPoint(self._action_pos)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
- # reset member variables
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
-
-
- def OnMiddleDown(self, event):
- """
- Handles the ``wx.EVT_MIDDLE_DOWN`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- cli_rect = wx.RectPS(wx.Point(0, 0), self.GetClientSize())
-
- if self._gripper_sizer_item:
-
- gripper_rect = self._gripper_sizer_item.GetRect()
- if gripper_rect.Contains(event.GetPosition()):
- return
-
- if self._overflow_sizer_item:
-
- dropdown_size = self._art.GetElementSize(AUI_TBART_OVERFLOW_SIZE)
- if dropdown_size > 0 and event.m_x > cli_rect.width - dropdown_size and \
- event.m_y >= 0 and event.m_y < cli_rect.height and self._art:
- return
-
- self._action_pos = wx.Point(*event.GetPosition())
- self._action_item = self.FindToolForPosition(*event.GetPosition())
-
- if self._action_item:
- if self._action_item.state & AUI_BUTTON_STATE_DISABLED:
-
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
- return
-
-
- def OnMiddleUp(self, event):
- """
- Handles the ``wx.EVT_MIDDLE_UP`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- hit_item = self.FindToolForPosition(*event.GetPosition())
-
- if self._action_item and hit_item == self._action_item:
- if hit_item.kind == ITEM_NORMAL:
-
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, self._action_item.id)
- e.SetEventObject(self)
- e.SetToolId(self._action_item.id)
- e.SetClickPoint(self._action_pos)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
-
- # reset member variables
- self._action_pos = wx.Point(-1, -1)
- self._action_item = None
-
-
- def OnMotion(self, event):
- """
- Handles the ``wx.EVT_MOTION`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- # start a drag event
- if not self._dragging and self._action_item != None and self._action_pos != wx.Point(-1, -1) and \
- abs(event.m_x - self._action_pos.x) + abs(event.m_y - self._action_pos.y) > 5:
-
- self.SetToolTipString("")
- self._dragging = True
-
- e = AuiToolBarEvent(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, self.GetId())
- e.SetEventObject(self)
- e.SetToolId(self._action_item.id)
- self.ProcessEvent(e)
- self.DoIdleUpdate()
- return
-
- hit_item = self.FindToolForPosition(*event.GetPosition())
-
- if hit_item:
- if not hit_item.state & AUI_BUTTON_STATE_DISABLED:
- self.SetHoverItem(hit_item)
- else:
- self.SetHoverItem(None)
-
- else:
- # no hit item, remove any hit item
- self.SetHoverItem(hit_item)
-
- # figure out tooltips
- packing_hit_item = self.FindToolForPositionWithPacking(*event.GetPosition())
-
- if packing_hit_item:
-
- if packing_hit_item != self._tip_item:
- self._tip_item = packing_hit_item
-
- if packing_hit_item.short_help != "":
- self.StartPreviewTimer()
- self.SetToolTipString(packing_hit_item.short_help)
- else:
- self.SetToolTipString("")
- self.StopPreviewTimer()
-
- else:
-
- self.SetToolTipString("")
- self._tip_item = None
- self.StopPreviewTimer()
-
- # if we've pressed down an item and we're hovering
- # over it, make sure it's state is set to pressed
- if self._action_item:
-
- if self._action_item == hit_item:
- self.SetPressedItem(self._action_item)
- else:
- self.SetPressedItem(None)
-
- # figure out the dropdown button state (are we hovering or pressing it?)
- self.RefreshOverflowState()
-
-
- def OnLeaveWindow(self, event):
- """
- Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.MouseEvent` event to be processed.
- """
-
- self.RefreshOverflowState()
- self.SetHoverItem(None)
- self.SetPressedItem(None)
-
- self._tip_item = None
- self.StopPreviewTimer()
-
-
- def OnSetCursor(self, event):
- """
- Handles the ``wx.EVT_SET_CURSOR`` event for L{AuiToolBar}.
-
- :param `event`: a `wx.SetCursorEvent` event to be processed.
- """
-
- cursor = wx.NullCursor
-
- if self._gripper_sizer_item:
-
- gripper_rect = self._gripper_sizer_item.GetRect()
- if gripper_rect.Contains((event.GetX(), event.GetY())):
- cursor = wx.StockCursor(wx.CURSOR_SIZING)
-
- event.SetCursor(cursor)
-
-
- def OnCustomRender(self, dc, item, rect):
- """
- Handles custom render for single L{AuiToolBar} items.
-
- :param `dc`: a `wx.DC` device context;
- :param `item`: an instance of L{AuiToolBarItem};
- :param `rect`: the toolbar item rect.
-
- :note: This method must be overridden to provide custom rendering of items.
- """
-
- pass
-
-
- def IsPaneMinimized(self):
- """ Returns whether this L{AuiToolBar} contains a minimized pane tool. """
-
- manager = self.GetAuiManager()
- if not manager:
- return False
-
- if manager.GetAGWFlags() & AUI_MGR_PREVIEW_MINIMIZED_PANES == 0:
- # No previews here
- return False
-
- self_name = manager.GetPane(self).name
-
- if not self_name.endswith("_min"):
- # Wrong tool name
- return False
-
- return self_name[0:-4]
-
-
- def StartPreviewTimer(self):
- """ Starts a timer in L{AuiManager} to slide-in/slide-out the minimized pane. """
-
- self_name = self.IsPaneMinimized()
- if not self_name:
- return
-
- manager = self.GetAuiManager()
- manager.StartPreviewTimer(self)
-
-
- def StopPreviewTimer(self):
- """ Stops a timer in L{AuiManager} to slide-in/slide-out the minimized pane. """
-
- self_name = self.IsPaneMinimized()
- if not self_name:
- return
-
- manager = self.GetAuiManager()
- manager.StopPreviewTimer()
-
+++ /dev/null
-"""
-auibook contains a notebook control which implements many features common in
-applications with dockable panes. Specifically, L{AuiNotebook} implements functionality
-which allows the user to rearrange tab order via drag-and-drop, split the tab window
-into many different splitter configurations, and toggle through different themes to
-customize the control's look and feel.
-
-An effort has been made to try to maintain an API as similar to that of `wx.Notebook`.
-
-The default theme that is used is L{AuiDefaultTabArt}, which provides a modern, glossy
-look and feel. The theme can be changed by calling L{AuiNotebook.SetArtProvider}.
-"""
-
-__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
-__date__ = "31 March 2009"
-
-
-import wx
-import types
-import datetime
-
-from wx.lib.expando import ExpandoTextCtrl
-
-import framemanager
-import tabart as TA
-
-from aui_utilities import LightColour, MakeDisabledBitmap, TabDragImage
-from aui_utilities import TakeScreenShot, RescaleScreenShot
-
-from aui_constants import *
-
-# AuiNotebook events
-wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BUTTON = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_END_DRAG = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_TAB_DCLICK = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BG_MIDDLE_DOWN = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BG_MIDDLE_UP = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BG_RIGHT_DOWN = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BG_RIGHT_UP = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK = wx.NewEventType()
-
-# Define a new event for a drag cancelled
-wxEVT_COMMAND_AUINOTEBOOK_CANCEL_DRAG = wx.NewEventType()
-
-# Define events for editing a tab label
-wxEVT_COMMAND_AUINOTEBOOK_BEGIN_LABEL_EDIT = wx.NewEventType()
-wxEVT_COMMAND_AUINOTEBOOK_END_LABEL_EDIT = wx.NewEventType()
-
-# Create event binders
-EVT_AUINOTEBOOK_PAGE_CLOSE = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 1)
-""" A tab in `AuiNotebook` is being closed. Can be vetoed by calling `Veto()`. """
-EVT_AUINOTEBOOK_PAGE_CLOSED = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 1)
-""" A tab in `AuiNotebook` has been closed. """
-EVT_AUINOTEBOOK_PAGE_CHANGED = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 1)
-""" The page selection was changed. """
-EVT_AUINOTEBOOK_PAGE_CHANGING = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 1)
-""" The page selection is being changed. """
-EVT_AUINOTEBOOK_BUTTON = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 1)
-""" The user clicked on a button in the `AuiNotebook` tab area. """
-EVT_AUINOTEBOOK_BEGIN_DRAG = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 1)
-""" A drag-and-drop operation on a notebook tab has started. """
-EVT_AUINOTEBOOK_END_DRAG = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 1)
-""" A drag-and-drop operation on a notebook tab has finished. """
-EVT_AUINOTEBOOK_DRAG_MOTION = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 1)
-""" A drag-and-drop operation on a notebook tab is ongoing. """
-EVT_AUINOTEBOOK_ALLOW_DND = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 1)
-""" Fires an event asking if it is OK to drag and drop a tab. """
-EVT_AUINOTEBOOK_DRAG_DONE = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 1)
-""" A drag-and-drop operation on a notebook tab has finished. """
-EVT_AUINOTEBOOK_TAB_MIDDLE_DOWN = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 1)
-""" The user clicked with the middle mouse button on a tab. """
-EVT_AUINOTEBOOK_TAB_MIDDLE_UP = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 1)
-""" The user clicked with the middle mouse button on a tab. """
-EVT_AUINOTEBOOK_TAB_RIGHT_DOWN = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 1)
-""" The user clicked with the right mouse button on a tab. """
-EVT_AUINOTEBOOK_TAB_RIGHT_UP = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 1)
-""" The user clicked with the right mouse button on a tab. """
-EVT_AUINOTEBOOK_BG_MIDDLE_DOWN = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BG_MIDDLE_DOWN, 1)
-""" The user middle-clicked in the tab area but not over a tab or a button. """
-EVT_AUINOTEBOOK_BG_MIDDLE_UP = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BG_MIDDLE_UP, 1)
-""" The user middle-clicked in the tab area but not over a tab or a button. """
-EVT_AUINOTEBOOK_BG_RIGHT_DOWN = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BG_RIGHT_DOWN, 1)
-""" The user right-clicked in the tab area but not over a tab or a button. """
-EVT_AUINOTEBOOK_BG_RIGHT_UP = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BG_RIGHT_UP, 1)
-""" The user right-clicked in the tab area but not over a tab or a button. """
-EVT_AUINOTEBOOK_BG_DCLICK = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 1)
-""" The user left-clicked on the tab area not occupied by `AuiNotebook` tabs. """
-EVT_AUINOTEBOOK_CANCEL_DRAG = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_CANCEL_DRAG, 1)
-""" A drag and drop operation has been cancelled. """
-EVT_AUINOTEBOOK_TAB_DCLICK = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_TAB_DCLICK, 1)
-""" The user double-clicked with the left mouse button on a tab. """
-EVT_AUINOTEBOOK_BEGIN_LABEL_EDIT = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_LABEL_EDIT, 1)
-""" The user double-clicked with the left mouse button on a tab which text is editable. """
-EVT_AUINOTEBOOK_END_LABEL_EDIT = wx.PyEventBinder(wxEVT_COMMAND_AUINOTEBOOK_END_LABEL_EDIT, 1)
-""" The user finished editing a tab label. """
-
-
-# -----------------------------------------------------------------------------
-# Auxiliary class: TabTextCtrl
-# This is the temporary ExpandoTextCtrl created when you edit the text of a tab
-# -----------------------------------------------------------------------------
-
-class TabTextCtrl(ExpandoTextCtrl):
- """ Control used for in-place edit. """
-
- def __init__(self, owner, tab, page_index):
- """
- Default class constructor.
- For internal use: do not call it in your code!
-
- :param `owner`: the L{AuiTabCtrl} owning the tab;
- :param `tab`: the actual L{AuiNotebookPage} tab;
- :param `page_index`: the L{AuiNotebook} page index for the tab.
- """
-
- self._owner = owner
- self._tabEdited = tab
- self._pageIndex = page_index
- self._startValue = tab.caption
- self._finished = False
- self._aboutToFinish = False
- self._currentValue = self._startValue
-
- x, y, w, h = self._tabEdited.rect
-
- wnd = self._tabEdited.control
- if wnd:
- &nb