Skip to content

Commit 6ecc8e6

Browse files
author
Ram Rachum
committed
-
1 parent 9ea919b commit 6ecc8e6

File tree

10 files changed

+28715
-0
lines changed

10 files changed

+28715
-0
lines changed
Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
"""
2+
AUI is an Advanced User Interface library that aims to implement "cutting-edge"
3+
interface usability and design features so developers can quickly and easily create
4+
beautiful and usable application interfaces.
5+
6+
7+
Vision and Design Principles
8+
============================
9+
10+
AUI attempts to encapsulate the following aspects of the user interface:
11+
12+
* **Frame Management**: Frame management provides the means to open, move and hide common
13+
controls that are needed to interact with the document, and allow these configurations
14+
to be saved into different perspectives and loaded at a later time.
15+
16+
* **Toolbars**: Toolbars are a specialized subset of the frame management system and should
17+
behave similarly to other docked components. However, they also require additional
18+
functionality, such as "spring-loaded" rebar support, "chevron" buttons and end-user
19+
customizability.
20+
21+
* **Modeless Controls**: Modeless controls expose a tool palette or set of options that
22+
float above the application content while allowing it to be accessed. Usually accessed
23+
by the toolbar, these controls disappear when an option is selected, but may also be
24+
"torn off" the toolbar into a floating frame of their own.
25+
26+
* **Look and Feel**: Look and feel encompasses the way controls are drawn, both when shown
27+
statically as well as when they are being moved. This aspect of user interface design
28+
incorporates "special effects" such as transparent window dragging as well as frame animation.
29+
30+
AUI adheres to the following principles:
31+
32+
- Use native floating frames to obtain a native look and feel for all platforms;
33+
- Use existing wxPython code where possible, such as sizer implementation for frame management;
34+
- Use standard wxPython coding conventions.
35+
36+
37+
Usage
38+
=====
39+
40+
The following example shows a simple implementation that uses L{AuiManager} to manage
41+
three text controls in a frame window::
42+
43+
class MyFrame(wx.Frame):
44+
45+
def __init__(self, parent, id=-1, title="AUI Test", pos=wx.DefaultPosition,
46+
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
47+
48+
wx.Frame.__init__(self, parent, id, title, pos, size, style)
49+
50+
self._mgr = aui.AuiManager()
51+
52+
# notify AUI which frame to use
53+
self._mgr.SetManagedWindow(self)
54+
55+
# create several text controls
56+
text1 = wx.TextCtrl(self, -1, "Pane 1 - sample text",
57+
wx.DefaultPosition, wx.Size(200,150),
58+
wx.NO_BORDER | wx.TE_MULTILINE)
59+
60+
text2 = wx.TextCtrl(self, -1, "Pane 2 - sample text",
61+
wx.DefaultPosition, wx.Size(200,150),
62+
wx.NO_BORDER | wx.TE_MULTILINE)
63+
64+
text3 = wx.TextCtrl(self, -1, "Main content window",
65+
wx.DefaultPosition, wx.Size(200,150),
66+
wx.NO_BORDER | wx.TE_MULTILINE)
67+
68+
# add the panes to the manager
69+
self._mgr.AddPane(text1, AuiPaneInfo().Left().Caption("Pane Number One"))
70+
self._mgr.AddPane(text2, AuiPaneInfo().Bottom().Caption("Pane Number Two"))
71+
self._mgr.AddPane(text3, AuiPaneInfo().CenterPane())
72+
73+
# tell the manager to "commit" all the changes just made
74+
self._mgr.Update()
75+
76+
self.Bind(wx.EVT_CLOSE, self.OnClose)
77+
78+
79+
def OnClose(self, event):
80+
81+
# deinitialize the frame manager
82+
self._mgr.UnInit()
83+
84+
self.Destroy()
85+
event.Skip()
86+
87+
88+
# our normal wxApp-derived class, as usual
89+
90+
app = wx.PySimpleApp()
91+
92+
frame = MyFrame(None)
93+
app.SetTopWindow(frame)
94+
frame.Show()
95+
96+
app.MainLoop()
97+
98+
99+
What's New
100+
==========
101+
102+
Current wxAUI Version Tracked: wxWidgets 2.9.0 (SVN HEAD)
103+
104+
The wxPython AUI version fixes the following bugs or implement the following
105+
missing features (the list is not exhaustive):
106+
107+
- Visual Studio 2005 style docking: http://www.kirix.com/forums/viewtopic.php?f=16&t=596
108+
- Dock and Pane Resizing: http://www.kirix.com/forums/viewtopic.php?f=16&t=582
109+
- Patch concerning dock resizing: http://www.kirix.com/forums/viewtopic.php?f=16&t=610
110+
- Patch to effect wxAuiToolBar orientation switch: http://www.kirix.com/forums/viewtopic.php?f=16&t=641
111+
- AUI: Core dump when loading a perspective in wxGTK (MSW OK): http://www.kirix.com/forums/viewtopic.php?f=15&t=627
112+
- wxAuiNotebook reordered AdvanceSelection(): http://www.kirix.com/forums/viewtopic.php?f=16&t=617
113+
- Vertical Toolbar Docking Issue: http://www.kirix.com/forums/viewtopic.php?f=16&t=181
114+
- Patch to show the resize hint on mouse-down in aui: http://trac.wxwidgets.org/ticket/9612
115+
- The Left/Right and Top/Bottom Docks over draw each other: http://trac.wxwidgets.org/ticket/3516
116+
- MinSize() not honoured: http://trac.wxwidgets.org/ticket/3562
117+
- Layout problem with wxAUI: http://trac.wxwidgets.org/ticket/3597
118+
- Resizing children ignores current window size: http://trac.wxwidgets.org/ticket/3908
119+
- Resizing panes under Vista does not repaint background: http://trac.wxwidgets.org/ticket/4325
120+
- Resize sash resizes in response to click: http://trac.wxwidgets.org/ticket/4547
121+
- "Illegal" resizing of the AuiPane? (wxPython): http://trac.wxwidgets.org/ticket/4599
122+
- Floating wxAUIPane Resize Event doesn't update its position: http://trac.wxwidgets.org/ticket/9773
123+
- Don't hide floating panels when we maximize some other panel: http://trac.wxwidgets.org/ticket/4066
124+
- wxAUINotebook incorrect ALLOW_ACTIVE_PANE handling: http://trac.wxwidgets.org/ticket/4361
125+
- Page changing veto doesn't work, (patch supplied): http://trac.wxwidgets.org/ticket/4518
126+
- Show and DoShow are mixed around in wxAuiMDIChildFrame: http://trac.wxwidgets.org/ticket/4567
127+
- wxAuiManager & wxToolBar - ToolBar Of Size Zero: http://trac.wxwidgets.org/ticket/9724
128+
- wxAuiNotebook doesn't behave properly like a container as far as...: http://trac.wxwidgets.org/ticket/9911
129+
- Serious layout bugs in wxAUI: http://trac.wxwidgets.org/ticket/10620
130+
- wAuiDefaultTabArt::Clone() should just use copy contructor: http://trac.wxwidgets.org/ticket/11388
131+
- Drop down button for check tool on wxAuiToolbar: http://trac.wxwidgets.org/ticket/11139
132+
133+
Plus the following features:
134+
135+
- AuiManager:
136+
137+
(a) Implementation of a simple minimize pane system: Clicking on this minimize button causes a new
138+
AuiToolBar to be created and added to the frame manager, (currently the implementation is such
139+
that panes at West will have a toolbar at the right, panes at South will have toolbars at the
140+
bottom etc...) and the pane is hidden in the manager.
141+
Clicking on the restore button on the newly created toolbar will result in the toolbar being
142+
removed and the original pane being restored;
143+
(b) Panes can be docked on top of each other to form `AuiNotebooks`; `AuiNotebooks` tabs can be torn
144+
off to create floating panes;
145+
(c) On Windows XP, use the nice sash drawing provided by XP while dragging the sash;
146+
(d) Possibility to set an icon on docked panes;
147+
(e) Possibility to draw a sash visual grip, for enhanced visualization of sashes;
148+
(f) Implementation of a native docking art (`ModernDockArt`). Windows XP only, **requires** Mark Hammond's
149+
pywin32 package (winxptheme);
150+
(g) Possibility to set a transparency for floating panes (a la Paint .NET);
151+
(h) Snapping the main frame to the screen in any positin specified by horizontal and vertical
152+
alignments;
153+
(i) Snapping floating panes on left/right/top/bottom or any combination of directions, a la Winamp;
154+
(j) "Fly-out" floating panes, i.e. panes which show themselves only when the mouse hover them;
155+
(k) Ability to set custom bitmaps for pane buttons (close, maximize, etc...);
156+
(l) Implementation of the style ``AUI_MGR_ANIMATE_FRAMES``, which fade-out floating panes when
157+
they are closed (all platforms which support frames transparency) and show a moving rectangle
158+
when they are docked and minimized (Windows < Vista and GTK only);
159+
(m) A pane switcher dialog is available to cycle through existing AUI panes;
160+
(n) Some flags which allow to choose the orientation and the position of the minimized panes;
161+
(o) The functions [Get]MinimizeMode() in `AuiPaneInfo` which allow to set/get the flags described above;
162+
(p) Events like ``EVT_AUI_PANE_DOCKING``, ``EVT_AUI_PANE_DOCKED``, ``EVT_AUI_PANE_FLOATING`` and ``EVT_AUI_PANE_FLOATED`` are
163+
available for all panes *except* toolbar panes;
164+
(q) Implementation of the RequestUserAttention method for panes;
165+
(r) Ability to show the caption bar of docked panes on the left instead of on the top (with caption
166+
text rotated by 90 degrees then). This is similar to what `wxDockIt` did. To enable this feature on any
167+
given pane, simply call `CaptionVisible(True, left=True)`;
168+
(s) New Aero-style docking guides: you can enable them by using the `AuiManager` style ``AUI_MGR_AERO_DOCKING_GUIDES``;
169+
(t) A slide-in/slide-out preview of minimized panes can be seen by enabling the `AuiManager` style
170+
``AUI_MGR_PREVIEW_MINIMIZED_PANES`` and by hovering with the mouse on the minimized pane toolbar tool;
171+
(s) New Whidbey-style docking guides: you can enable them by using the `AuiManager` style ``AUI_MGR_WHIDBEY_DOCKING_GUIDES``;
172+
(t) Native of custom-drawn mini frames can be used as floating panes, depending on the ``AUI_MGR_USE_NATIVE_MINIFRAMES`` style;
173+
(u) A "smooth docking effect" can be obtained by using the ``AUI_MGR_SMOOTH_DOCKING`` style (similar to PyQT docking style).
174+
175+
|
176+
177+
- AuiNotebook:
178+
179+
(a) Implementation of the style ``AUI_NB_HIDE_ON_SINGLE_TAB``, a la `wx.lib.agw.flatnotebook`;
180+
(b) Implementation of the style ``AUI_NB_SMART_TABS``, a la `wx.lib.agw.flatnotebook`;
181+
(c) Implementation of the style ``AUI_NB_USE_IMAGES_DROPDOWN``, which allows to show tab images
182+
on the tab dropdown menu instead of bare check menu items (a la `wx.lib.agw.flatnotebook`);
183+
(d) 6 different tab arts are available, namely:
184+
185+
(1) Default "glossy" theme (as in `wx.aui.AuiNotebook`)
186+
(2) Simple theme (as in `wx.aui.AuiNotebook`)
187+
(3) Firefox 2 theme
188+
(4) Visual Studio 2003 theme (VC71)
189+
(5) Visual Studio 2005 theme (VC81)
190+
(6) Google Chrome theme
191+
192+
(e) Enabling/disabling tabs;
193+
(f) Setting the colour of the tab's text;
194+
(g) Implementation of the style ``AUI_NB_CLOSE_ON_TAB_LEFT``, which draws the tab close button on
195+
the left instead of on the right (a la Camino browser);
196+
(h) Ability to save and load perspectives in `AuiNotebook` (experimental);
197+
(i) Possibility to add custom buttons in the `AuiNotebook` tab area;
198+
(j) Implementation of the style ``AUI_NB_TAB_FLOAT``, which allows the floating of single tabs.
199+
Known limitation: when the notebook is more or less full screen, tabs cannot be dragged far
200+
enough outside of the notebook to become floating pages;
201+
(k) Implementation of the style ``AUI_NB_DRAW_DND_TAB`` (on by default), which draws an image
202+
representation of a tab while dragging;
203+
(l) Implementation of the style ``AUI_NB_SASH_DCLICK_UNSPLIT``, which unsplit a splitted AuiNotebook
204+
when double-clicking on a sash;
205+
(m) Possibility to hide all the tabs by calling `HideAllTAbs`;
206+
(n) wxPython controls can now be added inside page tabs by calling `AddControlToPage`, and they can be
207+
removed by calling `RemoveControlFromPage`;
208+
(o) Possibility to preview all the pages in a `AuiNotebook` (as thumbnails) by using the `NotebookPreview`
209+
method of `AuiNotebook`;
210+
(p) Tab labels can be edited by calling the `SetRenamable` method on a `AuiNotebook` page;
211+
(q) Support for multi-lines tab labels in `AuiNotebook`.
212+
213+
|
214+
215+
- AuiToolBar:
216+
217+
(a) ``AUI_TB_PLAIN_BACKGROUND`` style that allows to easy setup a plain background to the AUI toolbar,
218+
without the need to override drawing methods. This style contrasts with the default behaviour
219+
of the `wx.aui.AuiToolBar` that draws a background gradient and this break the window design when
220+
putting it within a control that has margin between the borders and the toolbar (example: put
221+
`wx.aui.AuiToolBar` within a `wx.StaticBoxSizer` that has a plain background);
222+
(b) `AuiToolBar` allow item alignment: http://trac.wxwidgets.org/ticket/10174;
223+
(c) `AUIToolBar` `DrawButton()` improvement: http://trac.wxwidgets.org/ticket/10303;
224+
(d) `AuiToolBar` automatically assign new id for tools: http://trac.wxwidgets.org/ticket/10173;
225+
(e) `AuiToolBar` Allow right-click on any kind of button: http://trac.wxwidgets.org/ticket/10079;
226+
(f) `AuiToolBar` idle update only when visible: http://trac.wxwidgets.org/ticket/10075;
227+
(g) Ability of creating `AuiToolBar` tools with [counter]clockwise rotation. This allows to propose a
228+
variant of the minimizing functionality with a rotated button which keeps the caption of the pane
229+
as label;
230+
(h) Allow setting the alignment of all tools in a toolbar that is expanded.
231+
232+
233+
TODOs
234+
=====
235+
236+
- Documentation, documentation and documentation;
237+
- Fix `tabmdi.AuiMDIParentFrame` and friends, they do not work correctly at present;
238+
- Allow specification of `CaptionLeft()` to `AuiPaneInfo` to show the caption bar of docked panes
239+
on the left instead of on the top (with caption text rotated by 90 degrees then). This is
240+
similar to what `wxDockIt` did - DONE;
241+
- Make developer-created `AuiNotebooks` and automatic (framemanager-created) `AuiNotebooks` behave
242+
the same way (undocking of tabs) - DONE, to some extent;
243+
- Find a way to dock panes in already floating panes (`AuiFloatingFrames`), as they already have
244+
their own `AuiManager`;
245+
- Add more gripper styles (see, i.e., PlusDock 4.0);
246+
- Add an "AutoHide" feature to docked panes, similar to fly-out floating panes (see, i.e., PlusDock 4.0);
247+
- Add events for panes when they are about to float or to be docked (something like
248+
``EVT_AUI_PANE_FLOATING/ED`` and ``EVT_AUI_PANE_DOCKING/ED``) - DONE, to some extent;
249+
- Implement the 4-ways splitter behaviour for horizontal and vertical sashes if they intersect;
250+
- Extend `tabart.py` with more aui tab arts;
251+
- Implement ``AUI_NB_LEFT`` and ``AUI_NB_RIGHT`` tab locations in `AuiNotebook`;
252+
- Move `AuiDefaultToolBarArt` into a separate module (as with `tabart.py` and `dockart.py`) and
253+
provide more arts for toolbars (maybe from `wx.lib.agw.flatmenu`?)
254+
- Support multiple-rows/multiple columns toolbars;
255+
- Integrate as much as possible with `wx.lib.agw.flatmenu`, from dropdown menus in `AuiNotebook` to
256+
toolbars and menu positioning;
257+
- Possibly handle minimization of panes in a different way (or provide an option to switch to
258+
another way of minimizing panes);
259+
- Clean up/speed up the code, especially time-consuming for-loops;
260+
- Possibly integrate `wxPyRibbon` (still on development), at least on Windows.
261+
262+
263+
License And Version
264+
===================
265+
266+
AUI library is distributed under the wxPython license.
267+
268+
Latest revision: Andrea Gavana @ 05 Jan 2010, 16.00 GMT
269+
270+
Version 1.1.
271+
272+
"""
273+
274+
__author__ = "Andrea Gavana <andrea.gavana@gmail.com>"
275+
__date__ = "31 March 2009"
276+
277+
278+
from aui_constants import *
279+
from aui_utilities import *
280+
from auibar import *
281+
from auibook import *
282+
from tabart import *
283+
from dockart import *
284+
from framemanager import *
285+
from tabmdi import *

0 commit comments

Comments
 (0)