Difference between revisions of "GSoC 2008 - Transitioning To wxAUI"

From Audacity Wiki
Jump to: navigation, search
(Flexibility)
Line 44: Line 44:
  
 
===Flexibility===
 
===Flexibility===
When transition to a new framework this should give you more flexibility than your old implementation.
+
When transition to a new framework this should give you more flexibility than your old implementation.
 +
At this area there are big impairments of wxAUI.  
  
There are big impairments of wxAUI. There is no simple way to create multiple-row panes. When ever you drag a
+
There is no simple way to create multiple-row panes. When ever you drag a
smaler pane beneath a multiple-row pane it is expanded to the height of the biggest pane in the row.
+
smaler pane beneath a multiple-row pane it is expanded to the height of the biggest pane in the row. Even
 +
with MaxSize() you can not stop that behavior, so you will end up in having streched toolbars.
 +
 
 +
[[Image:wxAUI4.png|thumb|wxAUI: a 'resizable' toolbar]]
 +
There is a resizable attribute for panes, but it is not a resizable as used in the meter bar of Audacity. It makes
 +
the whole pane resizable, in case of toolbars the whole docking area of the toolbars, not only the toolbar itself.
 +
So with toolbars you get some strange behavior with the resizable attribute, e.g. you can not always drag toolbars
 +
to a floatable position. The resizable pane additionally always fills the whole left width of the docking area.

Revision as of 23:57, 26 June 2008

Summer of Code 2008 logo
wxAUI (Advanced User Interface) is an addition to the wxWidgets GUI framework, which

gives the user a more modern and user-customizable interface with floatable windows. It is also themeable and specific configurations of controls can be saved. Since the workflow of an audio editor like Audacity is largely dependent on the task the user is performing Audacity could benefit a lot from having a customizable user interface. The natural way of achieving this is using the usual framework and since wxAUI is integrated into wxWidgets in its newer versions wxAUI is the natural way. Today Audacity uses its own implemtation of floatable windows and toolbars. This document should discuss the pros and cons of transitioning Audacity to the wxAUI framework and should show problems which may occur while doing it.


wxAUI: docked toolbars

Global differences

The main difference to normal wxWidgets programs is that you need a framemanager (wxAuiMan- ager) which manages all frames and toolbars. Though you can recursively add managed windows in Audacity one global wxAuiManager should do the job. After creating a wxAuiManager you have to add panes to it. This is a similar concept to sizers, which are widely used in Audacity. A pane is simply a wxWindow or a derived class. Though you can recursively add managed windows in Audacity one global wxAuiManager should do the job. Each Pane can have a lot of attributes, which are defined in a special wxAuiPaneInfo Object.

All this is a very perspicuous concept, which is easy to use. Its documentation is well done, as most of the wxWidgets docs.


wxAUI: docking of toolbars

Look and Feel

A major benefit from using wxAUI is the native look of the floating windows as well as the docked toolbars. wxAUI uses native widgets to show the windows and therefore adapt very well into the native look and feel of the platforms. Compared to the user-drawn toolbars of Audacity this would be much more common to the end-user.

The docking of panels is not native and even not as nice as Audacitys way.

wxAUI: named floating toolbars

Accessibility

One important thing is the compliance of wxAUI with accessibility features in Audacity. wxAUI uses normal wxWindows for showing the pane's content, so all accessibility features controlled by the wxWindow will work without any major changes. Most of them will even work without any change at all.

Screen reader functionality in fact will benefit from the use of wxAUI, since control-panels can be named, which is read by screen readers.

Flexibility

When transition to a new framework this should give you more flexibility than your old implementation. At this area there are big impairments of wxAUI.

There is no simple way to create multiple-row panes. When ever you drag a smaler pane beneath a multiple-row pane it is expanded to the height of the biggest pane in the row. Even with MaxSize() you can not stop that behavior, so you will end up in having streched toolbars.

wxAUI: a 'resizable' toolbar

There is a resizable attribute for panes, but it is not a resizable as used in the meter bar of Audacity. It makes the whole pane resizable, in case of toolbars the whole docking area of the toolbars, not only the toolbar itself. So with toolbars you get some strange behavior with the resizable attribute, e.g. you can not always drag toolbars to a floatable position. The resizable pane additionally always fills the whole left width of the docking area.