+%
+% automatically generated by HelpGen $Revision$ from
+% controlbar.h at 05/Jan/02 22:50:58
+%
+
+
+\section{\class{wxFrameLayout}}\label{wxframelayout}
+
+
+wxFrameLayout manages containment and docking of control bars.
+ which can be docked along top, bottom, righ, or left side of the
+ parent frame
+
+\wxheading{Derived from}
+
+\helpref{wxEvtHandler}{wxevthandler}
+
+\wxheading{Data structures}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxFrameLayout::wxFrameLayout}\label{wxframelayoutwxframelayout}
+
+\func{}{wxFrameLayout}{\param{wxWindow* }{pParentFrame}, \param{wxWindow* }{pFrameClient = NULL}, \param{bool }{activateNow = TRUE}}
+
+
+\func{}{wxFrameLayout}{\void}
+
+used only while serializing
+
+
+\membersection{wxFrameLayout::\destruct{wxFrameLayout}}\label{wxframelayoutdtor}
+
+\func{}{\destruct{wxFrameLayout}}{\void}
+
+(doesn't destroy bar windows)
+
+
+\membersection{wxFrameLayout::Activate}\label{wxframelayoutactivate}
+
+\func{void}{Activate}{\void}
+
+Can be called after some other layout has been deactivated,
+and this one must "take over" the current contents of frame window.
+Effectively hooks itself to the frame window, re-displays all not-hidden
+bar-windows and repaints decorations
+
+
+\membersection{wxFrameLayout::AddBar}\label{wxframelayoutaddbar}
+
+\func{void}{AddBar}{\param{wxWindow* }{pBarWnd}, \param{const cbDimInfo\& }{dimInfo}, \param{int }{alignment = FL\_ALIGN\_TOP}, \param{int }{rowNo = 0}, \param{int }{columnPos = 0}, \param{const wxString\& }{name = "bar"}, \param{bool }{spyEvents = FALSE}, \param{int }{state = wxCBAR\_DOCKED\_HORIZONTALLY}}
+
+Adds bar information to frame-layout, appearence of layout is not refreshed
+immediately, RefreshNow() can be called if necessary.
+NOTES:: argument pBarWnd can by NULL, resulting bar decorations to be drawn
+around the empty rectangle (filled with default background colour).
+Argument dimInfo, can be re-used for adding any number of bars, since
+it is not used directly, instead it's members are copied. If dimensions-
+handler is present, it's instance shared (reference counted). Dimension
+handler should always be allocated on the heap!)
+
+
+\membersection{wxFrameLayout::AddPlugin}\label{wxframelayoutaddplugin}
+
+\func{void}{AddPlugin}{\param{wxClassInfo* }{pPlInfo}, \param{int }{paneMask = wxALL\_PANES}}
+
+"Advanced" methods for plugin-configuration using their dynamic class information (e.g. CLASSINFO(pluginClass) ) first checks if plugin of the given class is already "hooked up",
+if not, adds it to the top of plugins chain
+
+
+\membersection{wxFrameLayout::AddPluginBefore}\label{wxframelayoutaddpluginbefore}
+
+\func{void}{AddPluginBefore}{\param{wxClassInfo* }{pNextPlInfo}, \param{wxClassInfo* }{pPlInfo}, \param{int }{paneMask = wxALL\_PANES}}
+
+first checks if plugin of the givne class already hooked,
+if so, removes it, and then inserts it to the chain
+before plugin of the class given by "pNextPlInfo"
+NOTE:: this method is "handy" in some cases, where the order
+of plugin-chain could be important, e.g. one plugin overrides
+some functionallity of the other already hooked plugin,
+thefore the former should be hooked before the one
+who's functionality is being overriden
+
+
+\membersection{wxFrameLayout::ApplyBarProperties}\label{wxframelayoutapplybarproperties}
+
+\func{void}{ApplyBarProperties}{\param{cbBarInfo* }{pBar}}
+
+reflects changes in bar information structure visually
+(e.g. moves bar, changes it's dimension info, pane to which it is docked)
+
+
+\membersection{wxFrameLayout::CanReparent}\label{wxframelayoutcanreparent}
+
+\func{bool}{CanReparent}{\void}
+
+NOTE:: reparenting of windows may NOT work on all platforms
+(reparenting allows control-bars to be floated)
+
+
+\membersection{wxFrameLayout::CaptureEventsForPane}\label{wxframelayoutcaptureeventsforpane}
+
+\func{void}{CaptureEventsForPane}{\param{cbDockPane* }{toPane}}
+
+called by plugins ( also captures/releases mouse in parent frame)
+
+
+\membersection{wxFrameLayout::CaptureEventsForPlugin}\label{wxframelayoutcaptureeventsforplugin}
+
+\func{void}{CaptureEventsForPlugin}{\param{cbPluginBase* }{pPlugin}}
+
+captures/releases user-input event's for the given plugin
+Input events are: mouse movement, mouse clicks, keyboard input
+
+
+\membersection{wxFrameLayout::CreateCursors}\label{wxframelayoutcreatecursors}
+
+\func{void}{CreateCursors}{\void}
+
+
+\membersection{wxFrameLayout::CreateUpdatesManager}\label{wxframelayoutcreateupdatesmanager}
+
+\func{cbUpdatesManagerBase*}{CreateUpdatesManager}{\void}
+
+factory method
+
+
+\membersection{wxFrameLayout::Deactivate}\label{wxframelayoutdeactivate}
+
+\func{void}{Deactivate}{\void}
+
+unhooks itself from frame window, and hides all not-hidden windows
+NOTE:: two frame-layouts should not be active at the same time in the
+same frame window, it would cause messy overlapping of bar windows
+from both layouts
+
+
+\membersection{wxFrameLayout::DestroyBarWindows}\label{wxframelayoutdestroybarwindows}
+
+\func{void}{DestroyBarWindows}{\void}
+
+
+\membersection{wxFrameLayout::DoSetBarState}\label{wxframelayoutdosetbarstate}
+
+\func{void}{DoSetBarState}{\param{cbBarInfo* }{pBar}}
+
+
+\membersection{wxFrameLayout::EnableFloating}\label{wxframelayoutenablefloating}
+
+\func{void}{EnableFloating}{\param{bool }{enable = TRUE}}
+
+(by default floating of control-bars is ON)
+
+
+\membersection{wxFrameLayout::FindBarByName}\label{wxframelayoutfindbarbyname}
+
+\func{cbBarInfo*}{FindBarByName}{\param{const wxString\& }{name}}
+
+methods for access and modification of bars in frame layout
+
+
+\membersection{wxFrameLayout::FindBarByWindow}\label{wxframelayoutfindbarbywindow}
+
+\func{cbBarInfo*}{FindBarByWindow}{\param{const wxWindow* }{pWnd}}
+
+
+\membersection{wxFrameLayout::FindPlugin}\label{wxframelayoutfindplugin}
+
+\func{cbPluginBase*}{FindPlugin}{\param{wxClassInfo* }{pPlInfo}}
+
+returns NULL, if plugin of the given class is not hooked
+
+
+\membersection{wxFrameLayout::FirePluginEvent}\label{wxframelayoutfirepluginevent}
+
+\func{void}{FirePluginEvent}{\param{cbPluginEvent\& }{event}}
+
+plugin-related methods **should be used, instead of passing the event to ProcessEvent(..) method
+of the top-plugin directly. This method checks if events are currently
+captured and ensures that plugin-event is routed correctly.
+
+
+\membersection{wxFrameLayout::ForwardMouseEvent}\label{wxframelayoutforwardmouseevent}
+
+\func{void}{ForwardMouseEvent}{\param{wxMouseEvent\& }{event}, \param{cbDockPane* }{pToPane}, \param{int }{eventType}}
+
+delegated from "bar-spy"
+
+
+\membersection{wxFrameLayout::GetBarPane}\label{wxframelayoutgetbarpane}
+
+\func{cbDockPane*}{GetBarPane}{\param{cbBarInfo* }{pBar}}
+
+returns panes, to which the given bar belongs
+
+
+\membersection{wxFrameLayout::GetBars}\label{wxframelayoutgetbars}
+
+\func{BarArrayT\&}{GetBars}{\void}
+
+
+\membersection{wxFrameLayout::GetClientHeight}\label{wxframelayoutgetclientheight}
+
+\func{int}{GetClientHeight}{\void}
+
+
+\membersection{wxFrameLayout::GetClientRect}\label{wxframelayoutgetclientrect}
+
+\func{wxRect\&}{GetClientRect}{\void}
+
+
+\membersection{wxFrameLayout::GetClientWidth}\label{wxframelayoutgetclientwidth}
+
+\func{int}{GetClientWidth}{\void}
+
+
+\membersection{wxFrameLayout::GetFrameClient}\label{wxframelayoutgetframeclient}
+
+\func{wxWindow*}{GetFrameClient}{\void}
+
+
+\membersection{wxFrameLayout::GetPane}\label{wxframelayoutgetpane}
+
+\func{cbDockPane*}{GetPane}{\param{int }{alignment}}
+
+see pane alignment types
+
+
+\membersection{wxFrameLayout::GetPaneProperties}\label{wxframelayoutgetpaneproperties}
+
+\func{void}{GetPaneProperties}{\param{cbCommonPaneProperties\& }{props}, \param{int }{alignment = FL\_ALIGN\_TOP}}
+
+NOTE:: changing properties of panes, does not result immediate on-screen update
+
+
+\membersection{wxFrameLayout::GetPanesArray}\label{wxframelayoutgetpanesarray}
+
+\func{cbDockPane**}{GetPanesArray}{\void}
+
+used by updates-managers
+
+
+\membersection{wxFrameLayout::GetParentFrame}\label{wxframelayoutgetparentframe}
+
+\func{wxWindow\&}{GetParentFrame}{\void}
+
+
+\membersection{wxFrameLayout::GetPrevClientRect}\label{wxframelayoutgetprevclientrect}
+
+\func{wxRect\&}{GetPrevClientRect}{\void}
+
+
+\membersection{wxFrameLayout::GetTopPlugin}\label{wxframelayoutgettopplugin}
+
+\func{cbPluginBase\&}{GetTopPlugin}{\void}
+
+returns current top-level plugin (the one which receives events first,
+with an exception if input-events are currently captured by some other plugin)
+
+
+\membersection{wxFrameLayout::GetUpdatesManager}\label{wxframelayoutgetupdatesmanager}
+
+\func{cbUpdatesManagerBase\&}{GetUpdatesManager}{\void}
+
+NOTE:: in future ubdates-manager will become a normal plugin
+
+
+\membersection{wxFrameLayout::HasTopPlugin}\label{wxframelayouthastopplugin}
+
+\func{bool}{HasTopPlugin}{\void}
+
+
+\membersection{wxFrameLayout::HideBarWindows}\label{wxframelayouthidebarwindows}
+
+\func{void}{HideBarWindows}{\void}
+
+also hides the client window if presents
+
+
+\membersection{wxFrameLayout::HitTestPane}\label{wxframelayouthittestpane}
+
+\func{bool}{HitTestPane}{\param{cbDockPane* }{pPane}, \param{int }{x}, \param{int }{y}}
+
+
+\membersection{wxFrameLayout::HitTestPanes}\label{wxframelayouthittestpanes}
+
+\func{cbDockPane*}{HitTestPanes}{\param{const wxRect\& }{rect}, \param{cbDockPane* }{pCurPane}}
+
+
+\membersection{wxFrameLayout::HookUpToFrame}\label{wxframelayouthookuptoframe}
+
+\func{void}{HookUpToFrame}{\void}
+
+
+\membersection{wxFrameLayout::InverseVisibility}\label{wxframelayoutinversevisibility}
+
+\func{void}{InverseVisibility}{\param{cbBarInfo* }{pBar}}
+
+
+\membersection{wxFrameLayout::LocateBar}\label{wxframelayoutlocatebar}
+
+\func{bool}{LocateBar}{\param{cbBarInfo* }{pBarInfo}, \param{cbRowInfo** }{ppRow}, \param{cbDockPane** }{ppPane}}
+
+
+\membersection{wxFrameLayout::OnActivate}\label{wxframelayoutonactivate}
+
+\func{void}{OnActivate}{\param{wxActivateEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnEraseBackground}\label{wxframelayoutonerasebackground}
+
+\func{void}{OnEraseBackground}{\param{wxEraseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnIdle}\label{wxframelayoutonidle}
+
+\func{void}{OnIdle}{\param{wxIdleEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnKillFocus}\label{wxframelayoutonkillfocus}
+
+\func{void}{OnKillFocus}{\param{wxFocusEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnLButtonDown}\label{wxframelayoutonlbuttondown}
+
+\func{void}{OnLButtonDown}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnLButtonUp}\label{wxframelayoutonlbuttonup}
+
+\func{void}{OnLButtonUp}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnLDblClick}\label{wxframelayoutonldblclick}
+
+\func{void}{OnLDblClick}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnMouseMove}\label{wxframelayoutonmousemove}
+
+\func{void}{OnMouseMove}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnPaint}\label{wxframelayoutonpaint}
+
+\func{void}{OnPaint}{\param{wxPaintEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnRButtonDown}\label{wxframelayoutonrbuttondown}
+
+\func{void}{OnRButtonDown}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnRButtonUp}\label{wxframelayoutonrbuttonup}
+
+\func{void}{OnRButtonUp}{\param{wxMouseEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnSetFocus}\label{wxframelayoutonsetfocus}
+
+\func{void}{OnSetFocus}{\param{wxFocusEvent\& }{event}}
+
+
+\membersection{wxFrameLayout::OnSize}\label{wxframelayoutonsize}
+
+\func{void}{OnSize}{\param{wxSizeEvent\& }{event}}
+
+event handlers
+
+
+\membersection{wxFrameLayout::PopAllPlugins}\label{wxframelayoutpopallplugins}
+
+\func{void}{PopAllPlugins}{\void}
+
+
+\membersection{wxFrameLayout::PopPlugin}\label{wxframelayoutpopplugin}
+
+\func{void}{PopPlugin}{\void}
+
+
+\membersection{wxFrameLayout::PositionClientWindow}\label{wxframelayoutpositionclientwindow}
+
+\func{void}{PositionClientWindow}{\void}
+
+called to set calculated layout to window objects
+
+
+\membersection{wxFrameLayout::PositionPanes}\label{wxframelayoutpositionpanes}
+
+\func{void}{PositionPanes}{\void}
+
+
+\membersection{wxFrameLayout::PushDefaultPlugins}\label{wxframelayoutpushdefaultplugins}
+
+\func{void}{PushDefaultPlugins}{\void}
+
+default plugins are : cbPaneDrawPlugin, cbRowLayoutPlugin, cbBarDragPlugin,
+cbAntiflickerPlugin, cbSimpleCustomizePlugin
+this method is automatically invoked, if no plugins were found upon
+fireing of the first plugin-event, i.e. wxFrameLayout *CONFIGURES* itself
+
+
+\membersection{wxFrameLayout::PushPlugin}\label{wxframelayoutpushplugin}
+
+\func{void}{PushPlugin}{\param{cbPluginBase* }{pPugin}}
+
+similar to wxWindow's "push/pop-event-handler" methods, execept
+that plugin is *deleted* upon "popping"
+
+
+\membersection{wxFrameLayout::RecalcLayout}\label{wxframelayoutrecalclayout}
+
+\func{void}{RecalcLayout}{\param{bool }{repositionBarsNow = FALSE}}
+
+recalcualtes layout of panes, and all bars/rows in each pane
+
+
+\membersection{wxFrameLayout::RedockBar}\label{wxframelayoutredockbar}
+
+\func{bool}{RedockBar}{\param{cbBarInfo* }{pBar}, \param{const wxRect\& }{shapeInParent}, \param{cbDockPane* }{pToPane = NULL}, \param{bool }{updateNow = TRUE}}
+
+can be used for repositioning already existing bars. The given bar is first removed
+from the pane it currently belongs to, and inserted into the pane, which "matches"
+the given recantular area. If pToPane is not NULL, bar is docked to this given pane
+to dock the bar which is floated, use wxFrameLayout::DockBar(..) method
+
+
+\membersection{wxFrameLayout::RefreshNow}\label{wxframelayoutrefreshnow}
+
+\func{void}{RefreshNow}{\param{bool }{recalcLayout = TRUE}}
+
+recalculates layoute and performs on-screen update of all panes
+
+
+\membersection{wxFrameLayout::ReleaseEventsFromPane}\label{wxframelayoutreleaseeventsfrompane}
+
+\func{void}{ReleaseEventsFromPane}{\param{cbDockPane* }{fromPane}}
+
+
+\membersection{wxFrameLayout::ReleaseEventsFromPlugin}\label{wxframelayoutreleaseeventsfromplugin}
+
+\func{void}{ReleaseEventsFromPlugin}{\param{cbPluginBase* }{pPlugin}}
+
+
+\membersection{wxFrameLayout::RemoveBar}\label{wxframelayoutremovebar}
+
+\func{void}{RemoveBar}{\param{cbBarInfo* }{pBar}}
+
+removes bar from layout permanently, hides it's corresponding window if present
+
+
+\membersection{wxFrameLayout::RemovePlugin}\label{wxframelayoutremoveplugin}
+
+\func{void}{RemovePlugin}{\param{wxClassInfo* }{pPlInfo}}
+
+checks if plugin of the given class is hooked, removes
+it if found
+@param pPlInfo class information structure for the plugin
+@note
+@see wxFrameLayout::Method
+
+
+\membersection{wxFrameLayout::ReparentWindow}\label{wxframelayoutreparentwindow}
+
+\func{void}{ReparentWindow}{\param{wxWindow* }{pChild}, \param{wxWindow* }{pNewParent}}
+
+
+\membersection{wxFrameLayout::RepositionFloatedBar}\label{wxframelayoutrepositionfloatedbar}
+
+\func{void}{RepositionFloatedBar}{\param{cbBarInfo* }{pBar}}
+
+
+\membersection{wxFrameLayout::RouteMouseEvent}\label{wxframelayoutroutemouseevent}
+
+\func{void}{RouteMouseEvent}{\param{wxMouseEvent\& }{event}, \param{int }{pluginEvtType}}
+
+
+\membersection{wxFrameLayout::SetBarState}\label{wxframelayoutsetbarstate}
+
+\func{void}{SetBarState}{\param{cbBarInfo* }{pBar}, \param{int }{newStatem}, \param{bool }{updateNow}}
+
+changes bar's docking state (see possible control bar states)
+
+
+\membersection{wxFrameLayout::SetFrameClient}\label{wxframelayoutsetframeclient}
+
+\func{void}{SetFrameClient}{\param{wxWindow* }{pFrameClient}}
+
+passes the client window (e.g. MDI-client frame) to be controled by
+frame layout, the size and position of which should be adjusted to be
+surrounded by controlbar panes, whenever frame is resized, or dimensions
+of control panes change
+
+
+\membersection{wxFrameLayout::SetMargins}\label{wxframelayoutsetmargins}
+
+\func{void}{SetMargins}{\param{int }{top}, \param{int }{bottom}, \param{int }{left}, \param{int }{right}, \param{int }{paneMask = wxALL\_PANES}}
+
+TODO:: margins should go into cbCommonPaneProperties in the future
+NOTE:: this method should be called before any custom plugins are attached
+
+
+\membersection{wxFrameLayout::SetPaneBackground}\label{wxframelayoutsetpanebackground}
+
+\func{void}{SetPaneBackground}{\param{const wxColour\& }{colour}}
+
+
+\membersection{wxFrameLayout::SetPaneProperties}\label{wxframelayoutsetpaneproperties}
+
+\func{void}{SetPaneProperties}{\param{const cbCommonPaneProperties\& }{props}, \param{int }{paneMask = wxALL\_PANES}}
+
+
+\membersection{wxFrameLayout::SetTopPlugin}\label{wxframelayoutsettopplugin}
+
+\func{void}{SetTopPlugin}{\param{cbPluginBase* }{pPlugin}}
+
+hooking custom plugins to frame layout
+NOTE:: when hooking one plugin on top of the other -
+use SetNextHandler(..) or similar methods
+of wxEvtHandler class to compose the chain of plugins,
+than pass the left-most handler in this chain to
+the above methods (assuming that events are delegated
+from left-most towards right-most handler)
+NOTE2:: this secenario is very inconvenient and "low-level",
+use Add/Push/PopPlugin methods instead
+
+
+\membersection{wxFrameLayout::SetUpdatesManager}\label{wxframelayoutsetupdatesmanager}
+
+\func{void}{SetUpdatesManager}{\param{cbUpdatesManagerBase* }{pUMgr}}
+
+destroys the previous manager if any, set the new one
+
+
+\membersection{wxFrameLayout::ShowFloatedWindows}\label{wxframelayoutshowfloatedwindows}
+
+\func{void}{ShowFloatedWindows}{\param{bool }{show}}
+
+
+\membersection{wxFrameLayout::UnhookFromFrame}\label{wxframelayoutunhookfromframe}
+
+\func{void}{UnhookFromFrame}{\void}
+