Using Docking Bars
Most GUI applications include docking bars. Their behavior is slightly different from that of standard docking panes.
This section introduces you to docking bars. It covers the following topics:
Using the IlvAbstractBarPane Class
The class IlvAbstractBarPane defines a pane specifically designed for handling toolbars and menu bars. This class is a subclass of the IlvGraphicPane class which encapsulates an IlvAbstractBar object. It is responsible for managing the bar orientation.
When a docking bar is docked, its direction must change according to its new location.
The following illustrations show the same toolbar oriented horizontally and vertically.
Horizontal Toolbar
Vertical Toolbar
Note
This class manages its own subclass of IlvDockable and, therefore, must not be modified. |
Customizing Docking Bars
The IlvAbstractBarPane class has virtual member functions that you can redefine to meet your specific needs:
-
orientationChanged—Is called each time the orientation of the toolbar encapsulated by the pane changes.
-
geometryChanged—Is called each time the geometry of the toolbar encapsulated by the pane changes. See Notifying the Bar About Geometry Changes.
The following example shows a subclass of the IlvAbstractBarPane class that changes the orientation of the labels according to the bar orientation:
class MyMainMenuBarPane
: public IlvAbstractBarPane
{
public:
MyMainMenuBarPane(const char* name, IlvAbstractBar* bar)
: IlvAbstractBarPane(name, bar) {}
virtual void setContainer(IlvPanedContainer* container)
{
IlvAbstractBarPane::setContainer(container);
if (container)
checkLabelOrientation();
}
virtual void orientationChanged()
{
checkLabelOrientation();
IlvAbstractBarPane::orientationChanged();
}
void checkLabelOrientation()
{
IlvDockable* dockable = IlvDockable::GetDockable(this);
getBar()->setLabelOrientation(dockable && dockable->isDocked()
? getBar()->getOrientation()
: IlvHorizontal,
IlFalse,
IlFalse);
}
};
The checkLabelOrientation member function is called each time the bar orientation changes. It sets the orientation of the bar labels to the bar orientation if the pane is docked, or to IlvHorizontal if the bar is undocked.