/////////////////////////////////////////////////////////////////////////////
-// Name: No names yet.
+// Name: controlbar.h
// Purpose: Central header file for control-bar related classes
//
// Author: Aleksandras Gluchovas <mailto:alex@soften.ktu.lt>
// Created: 06/09/98
// RCS-ID: $Id$
// Copyright: (c) Aleksandras Gluchovas
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __CONTROLBAR_G__
#define __CONTROLBAR_G__
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "controlbar.h"
#endif
#include "wx/string.h"
#include "wx/window.h"
#include "wx/dynarray.h"
+#include "wx/fl/fldefs.h"
#define WXCONTROLBAR_VERSION 1.3
// forward declarations
-class wxFrameLayout;
+class WXDLLIMPEXP_FL wxFrameLayout;
-class cbDockPane;
-class cbUpdatesManagerBase;
-class cbBarDimHandlerBase;
-class cbPluginBase;
-class cbPluginEvent;
-class cbPaneDrawPlugin;
+class WXDLLIMPEXP_FL cbDockPane;
+class WXDLLIMPEXP_FL cbUpdatesManagerBase;
+class WXDLLIMPEXP_FL cbBarDimHandlerBase;
+class WXDLLIMPEXP_FL cbPluginBase;
+class WXDLLIMPEXP_FL cbPluginEvent;
+class WXDLLIMPEXP_FL cbPaneDrawPlugin;
-class cbBarInfo;
-class cbRowInfo;
-class cbDimInfo;
-class cbCommonPaneProperties;
+class WXDLLIMPEXP_FL cbBarInfo;
+class WXDLLIMPEXP_FL cbRowInfo;
+class WXDLLIMPEXP_FL cbDimInfo;
+class WXDLLIMPEXP_FL cbCommonPaneProperties;
typedef cbBarInfo* BarInfoPtrT;
typedef cbRowInfo* RowInfoPtrT;
-WX_DEFINE_ARRAY( BarInfoPtrT, BarArrayT );
-WX_DEFINE_ARRAY( RowInfoPtrT, RowArrayT );
+WXFL_DEFINE_ARRAY_PTR( BarInfoPtrT, BarArrayT );
+WXFL_DEFINE_ARRAY_PTR( RowInfoPtrT, RowArrayT );
// control bar states
// masks for each pane
-#define FL_ALIGN_TOP_PANE 0x0001
+#define FL_ALIGN_TOP_PANE 0x0001
#define FL_ALIGN_BOTTOM_PANE 0x0002
-#define FL_ALIGN_LEFT_PANE 0x0004
+#define FL_ALIGN_LEFT_PANE 0x0004
#define FL_ALIGN_RIGHT_PANE 0x0008
#define wxALL_PANES 0x000F
-// enumeration of hittest results, see cbDockPane::HitTestPaneItems(..)
+// enumeration of hittest results, see cbDockPane::HitTestPaneItems(..)
enum CB_HITTEST_RESULT
{
- CB_NO_ITEMS_HITTED,
+ CB_NO_ITEMS_HITTED,
- CB_UPPER_ROW_HANDLE_HITTED,
- CB_LOWER_ROW_HANDLE_HITTED,
- CB_LEFT_BAR_HANDLE_HITTED,
- CB_RIGHT_BAR_HANDLE_HITTED,
- CB_BAR_CONTENT_HITTED
+ CB_UPPER_ROW_HANDLE_HITTED,
+ CB_LOWER_ROW_HANDLE_HITTED,
+ CB_LEFT_BAR_HANDLE_HITTED,
+ CB_RIGHT_BAR_HANDLE_HITTED,
+ CB_BAR_CONTENT_HITTED
};
-// FIXME:: somehow in debug v. originall wxASSERT's are not compiled in...
-
-//#undef wxASSERT
-//#define wxASSERT(x) if ( !(x) ) throw;
-
-// helper class, used for spying for not-handled mouse events on control-bars
-// and forwarding them to the frame layout
+/*
+Helper class, used for spying for unhandled mouse events on control bars
+and forwarding them to the frame layout.
+*/
-class cbBarSpy : public wxEvtHandler
+class WXDLLIMPEXP_FL cbBarSpy : public wxEvtHandler
{
public:
- DECLARE_DYNAMIC_CLASS( cbBarSpy )
+ DECLARE_DYNAMIC_CLASS( cbBarSpy )
- wxFrameLayout* mpLayout;
- wxWindow* mpBarWnd;
+ wxFrameLayout* mpLayout;
+ wxWindow* mpBarWnd;
public:
- cbBarSpy(void);
+ // Default constructor.
+
+ cbBarSpy(void);
+
+ // Constructor, taking a parent pane.
+
+ cbBarSpy( wxFrameLayout* pPanel );
- cbBarSpy( wxFrameLayout* pPanel );
+ // Sets the bar window.
- void SetBarWindow( wxWindow* pWnd );
+ void SetBarWindow( wxWindow* pWnd );
- // overriden
+ // Performs special event processing.
- virtual bool ProcessEvent(wxEvent& event);
+ virtual bool ProcessEvent(wxEvent& event);
};
-/* wxFrameLayout manages containment and docking of control bars.
- * which can be docked along top, bottom, righ, or left side of the
- * parent frame
- */
+/*
+wxFrameLayout manages containment and docking of control bars,
+which can be docked along the top, bottom, right, or left side of the
+parent frame.
+*/
-class wxFrameLayout : public wxEvtHandler
+class WXDLLIMPEXP_FL wxFrameLayout : public wxEvtHandler
{
public:
- wxFrameLayout(void); // used only while serializing
+ // Default constructor, used only for serialization.
+
+ wxFrameLayout();
+
+ // Constructor, taking parent window, the (MDI) client of the parent if there
+ // is one, and flag specifying whether to activate the layout.
+
+ wxFrameLayout( wxWindow* pParentFrame,
+ wxWindow* pFrameClient = NULL,
+ bool activateNow = true );
+
+ // Destructor. It does not destroy the bar windows.
+
+ virtual ~wxFrameLayout();
+
+ // Enables floating behaviour. By default floating of control bars is on.
+
+ virtual void EnableFloating( bool enable = true );
+
+ // Activate can be called after some other layout has been deactivated,
+ // and this one must take over the current contents of the frame window.
+ //
+ // Effectively hooks itself to the frame window, re-displays all non-hidden
+ // bar windows and repaints the decorations.
+
+ virtual void Activate();
+
+ // Deactivate unhooks itself from frame window, and hides all non-hidden windows.
+ //
+ // Note: two frame layouts should not be active at the same time in the
+ // same frame window, since it would cause messy overlapping of bar windows
+ // from both layouts.
+
+ virtual void Deactivate();
+
+ // Hides the bar windows, and also the client window if present.
+
+ void HideBarWindows();
+
+ // Destroys the bar windows.
+
+ virtual void DestroyBarWindows();
- wxFrameLayout( wxWindow* pParentFrame,
- wxWindow* pFrameClient = NULL,
- bool activateNow = TRUE );
+ // Passes the client window (e.g. MDI client window) to be controlled by
+ // frame layout, the size and position of which should be adjusted to be
+ // surrounded by controlbar panes, whenever the frame is resized or the dimensions
+ // of control panes change.
- // (doesn't destroy bar windows)
- virtual ~wxFrameLayout();
+ void SetFrameClient( wxWindow* pFrameClient );
- // (by default floating of control-bars is ON)
- virtual void EnableFloating( bool enable = TRUE );
+ // Returns the frame client, or NULL if not present.
- // 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
+ wxWindow* GetFrameClient();
- virtual void Activate();
+ // Returns the parent frame.
- // 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
+ wxWindow& GetParentFrame() { return *mpFrame; }
- virtual void Deactivate();
+ // Returns an array of panes. Used by update managers.
- // also hides the client window if presents
+ cbDockPane** GetPanesArray() { return mPanes; }
- void HideBarWindows();
+ // Returns a pane for the given alignment. See pane alignment types.
- virtual void DestroyBarWindows();
+ cbDockPane* GetPane( int alignment )
- // 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
+ { return mPanes[alignment]; }
- void SetFrameClient( wxWindow* pFrameClient );
+ // Adds bar information to the frame layout. The appearance of the layout is not refreshed
+ // immediately; RefreshNow() can be called if necessary.
+ //
+ // Notes: the argument pBarWnd can by NULL, resulting in bar decorations to be drawn
+ // around the empty rectangle (filled with default background colour).
+ // Argument dimInfo can be reused for adding any number of bars, since
+ // it is not used directly - instead its members are copied. If the dimensions
+ // handler is present, its instance is shared (reference counted). The dimension
+ // handler should always be allocated on the heap.
- wxWindow* GetFrameClient();
+ // pBarWnd is the window to be managed.
- wxWindow& GetParentFrame() { return *mpFrame; }
+ // dimInfo contains dimension information.
- // used by updates-managers
- cbDockPane** GetPanesArray() { return mPanes; }
+ // alignment is a value such as FL_ALIGN_TOP.
- // see pane alignment types
- cbDockPane* GetPane( int alignment )
+ // rowNo is the vertical position or row in the pane (if in docked state).
- { return mPanes[alignment]; }
+ // columnPos is the horizontal position within the row in pixels (if in docked state).
- // 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!)
+ // name is a name by which the bar can be referred in layout customization dialogs.
- virtual void AddBar( wxWindow* pBarWnd,
+ // If spyEvents is true, input events for the bar should be "spyed" in order
+ // to forward unhandled mouse clicks to the frame layout, for example to enable
+ // easy draggablity of toolbars just by clicking on their interior regions.
+ // For widgets like text/tree control this value should be false,
+ // since there's no certain way to detect whether the event was actually handled.
+
+ // state is the initial state, such as wxCBAR_DOCKED_HORIZONTALLY,
+ // wxCBAR_FLOATING, wxCBAR_HIDDEN.
+
+ virtual void AddBar( wxWindow* pBarWnd,
const cbDimInfo& dimInfo,
- // defaults:
- int alignment = FL_ALIGN_TOP,
- int rowNo = 0, // vert. position - row in the pane (if docked state)
- int columnPos = 0, // horiz. position in the row in pixels (if docked state)
- const wxString& name="bar",// name, by which the bar could be referred
- // in layout customization dialogs
+ // defaults:
+ int alignment = FL_ALIGN_TOP,
+ int rowNo = 0,
+ int columnPos = 0,
+ const wxString& name = wxT("bar"),
+ bool spyEvents = false,
+ int state = wxCBAR_DOCKED_HORIZONTALLY
+ );
+
+ // ReddockBar can be used for repositioning existing bars. The given bar is first removed
+ // from the pane it currently belongs to, and inserted into the pane, which "matches"
+ // the given rectangular area. If pToPane is not NULL, the bar is docked to this given pane.
+ // To dock a bar which is floating, use the wxFrameLayout::DockBar method.
+
+ virtual bool RedockBar( cbBarInfo* pBar, const wxRect& shapeInParent,
+ cbDockPane* pToPane = NULL, bool updateNow = true );
+
+ // Finds the bar in the framelayout, by name.
+
+ cbBarInfo* FindBarByName( const wxString& name );
+
+ // Finds the bar in the framelayout, by window.
+
+ cbBarInfo* FindBarByWindow( const wxWindow* pWnd );
+
+ // Gets an array of bars.
+
+ BarArrayT& GetBars();
+
+ // Changes the bar's docking state (see possible control bar states).
+
+ void SetBarState( cbBarInfo* pBar, int newStatem, bool updateNow );
+
+ // Toggles the bar between visible and hidden.
+
+ void InverseVisibility( cbBarInfo* pBar );
+
+ // Reflects changes in bar information structure visually.
+ // For example, moves the bar, changes its dimension information,
+ // or changes the pane to which it is docked.
+
+ void ApplyBarProperties( cbBarInfo* pBar );
+
+ // Removes the bar from the layout permanently, and hides its corresponding window if present.
+
+ void RemoveBar( cbBarInfo* pBar );
+
+ // Recalculates the layout of panes, and all bars/rows in each pane.
+
+ virtual void RecalcLayout( bool repositionBarsNow = false );
+
+ // Returns the client height.
- bool spyEvents = FALSE, // if TRUE - input events for the bar should
- // be "spyed" in order to forward not-handled
- // mouse clicks to frame layout (e.g. to enable
- // easy-draggablity of toolbars just by clicking
- // on their interior regions). For widgets like
- // text/tree control this value should be FALSE
- // (since there's _no_ certain way to detect
- // whether the event was actually handled...)
+ int GetClientHeight();
- int state = wxCBAR_DOCKED_HORIZONTALLY // e.g. wxCBAR_FLOATING
- // or wxCBAR_HIDDEN
- );
+ // Returns the client width.
- // 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
+ int GetClientWidth();
- virtual bool RedockBar( cbBarInfo* pBar, const wxRect& shapeInParent,
- cbDockPane* pToPane = NULL, bool updateNow = TRUE );
+ // Returns the client's rectangle.
- // methods for access and modification of bars in frame layout
+ wxRect& GetClientRect() { return mClntWndBounds; }
- cbBarInfo* FindBarByName( const wxString& name );
+ // Returns a reference to the updates manager.
+ // Note: in future, the updates manager will become a normal plugin.
- cbBarInfo* FindBarByWindow( const wxWindow* pWnd );
+ cbUpdatesManagerBase& GetUpdatesManager();
- BarArrayT& GetBars();
+ // Destroys the previous manager if any, and sets the new one.
- // changes bar's docking state (see possible control bar states)
+ void SetUpdatesManager( cbUpdatesManagerBase* pUMgr );
- void SetBarState( cbBarInfo* pBar, int newStatem, bool updateNow );
+ // Gets the pane properties for the given alignment.
- void InverseVisibility( cbBarInfo* pBar );
+ virtual void GetPaneProperties( cbCommonPaneProperties& props, int alignment = FL_ALIGN_TOP );
- // reflects changes in bar information structure visually
- // (e.g. moves bar, changes it's dimension info, pane to which it is docked)
+ // Sets the pane properties for the given alignment.
+ // Note: changing properties of panes does not result immediate on-screen update.
- void ApplyBarProperties( cbBarInfo* pBar );
+ virtual void SetPaneProperties( const cbCommonPaneProperties& props,
+ int paneMask = wxALL_PANES );
- // removes bar from layout permanently, hides it's corresponding window if present
+ // Sets the margins for the given panes.
+ // The margins should go into cbCommonPaneProperties in the future.
+ //
+ // Note: this method should be called before any custom plugins are attached.
- void RemoveBar( cbBarInfo* pBar );
+ virtual void SetMargins( int top, int bottom, int left, int right,
+ int paneMask = wxALL_PANES );
- // recalcualtes layout of panes, and all bars/rows in each pane
+ // Sets the pane background colour.
- virtual void RecalcLayout( bool repositionBarsNow = FALSE );
+ virtual void SetPaneBackground( const wxColour& colour );
- int GetClientHeight();
- int GetClientWidth();
- wxRect& GetClientRect() { return mClntWndBounds; }
+ // Recalculates layout and performs on-screen update of all panes.
- // NOTE:: in future ubdates-manager will become a normal plugin
-
- cbUpdatesManagerBase& GetUpdatesManager();
-
- // destroys the previous manager if any, set the new one
+ void RefreshNow( bool recalcLayout = true );
- void SetUpdatesManager( cbUpdatesManagerBase* pUMgr );
+ // Event handler for a size event.
- // NOTE:: changing properties of panes, does not result immediate on-screen update
+ void OnSize ( wxSizeEvent& event );
- virtual void GetPaneProperties( cbCommonPaneProperties& props, int alignment = FL_ALIGN_TOP );
+ // Event handler for a left down button event.
- virtual void SetPaneProperties( const cbCommonPaneProperties& props,
- int paneMask = wxALL_PANES );
+ void OnLButtonDown( wxMouseEvent& event );
- // TODO:: margins should go into cbCommonPaneProperties in the future
- //
- // NOTE:: this method should be called before any custom plugins are attached
+ // Event handler for a left doubleclick button event.
- virtual void SetMargins( int top, int bottom, int left, int right,
- int paneMask = wxALL_PANES );
+ void OnLDblClick ( wxMouseEvent& event );
- virtual void SetPaneBackground( const wxColour& colour );
+ // Event handler for a left button up event.
- // recalculates layoute and performs on-screen update of all panes
+ void OnLButtonUp ( wxMouseEvent& event );
- void RefreshNow( bool recalcLayout = TRUE );
+ // Event handler for a right button down event.
- // event handlers
+ void OnRButtonDown( wxMouseEvent& event );
- void OnSize ( wxSizeEvent& event );
- void OnLButtonDown( wxMouseEvent& event );
- void OnLDblClick ( wxMouseEvent& event );
- void OnLButtonUp ( wxMouseEvent& event );
- void OnRButtonDown( wxMouseEvent& event );
- void OnRButtonUp ( wxMouseEvent& event );
- void OnMouseMove ( wxMouseEvent& event );
+ // Event handler for a right button up event.
- /*** plugin-related methods ***/
+ void OnRButtonUp ( wxMouseEvent& event );
- // 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.
+ // Event handler for a mouse move event.
- virtual void FirePluginEvent( cbPluginEvent& event );
-
- // captures/releases user-input event's for the given plugin
- // Input events are: mouse movement, mouse clicks, keyboard input
+ void OnMouseMove ( wxMouseEvent& event );
- virtual void CaptureEventsForPlugin ( cbPluginBase* pPlugin );
- virtual void ReleaseEventsFromPlugin( cbPluginBase* pPlugin );
+ // This function should be used instead of passing the event to the ProcessEvent method
+ // of the top-level plugin directly. This method checks if events are currently
+ // captured and ensures that plugin-event is routed correctly.
- // called by plugins ( also captures/releases mouse in parent frame)
- void CaptureEventsForPane( cbDockPane* toPane );
- void ReleaseEventsFromPane( cbDockPane* fromPane );
+ virtual void FirePluginEvent( cbPluginEvent& event );
- // returns current top-level plugin (the one which receives events first,
- // with an exception if input-events are currently captured by some other plugin)
-
- virtual cbPluginBase& GetTopPlugin();
+ // Captures user input events for the given plugin.
+ // Input events are: mouse movement, mouse clicks, keyboard input.
- // 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
+ virtual void CaptureEventsForPlugin ( cbPluginBase* pPlugin );
- virtual void SetTopPlugin( cbPluginBase* pPlugin );
+ // Releases user input events for the given plugin.
+ // Input events are: mouse movement, mouse clicks, keyboard input
- // similar to wxWindow's "push/pop-event-handler" methods, execept
- // that plugin is *deleted* upon "popping"
+ virtual void ReleaseEventsFromPlugin( cbPluginBase* pPlugin );
- virtual void PushPlugin( cbPluginBase* pPugin );
- virtual void PopPlugin();
+ // Called by plugins; also captures the mouse in the parent frame.
- virtual void PopAllPlugins();
+ void CaptureEventsForPane( cbDockPane* toPane );
- // 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
+ // Called by plugins; also releases mouse in the parent frame.
- virtual void PushDefaultPlugins();
+ void ReleaseEventsFromPane( cbDockPane* fromPane );
- /* "Advanced" methods for plugin-configuration using their */
- /* dynamic class information (e.g. CLASSINFO(pluginClass) ) */
+ // Returns the current top-level plugin (the one that receives events first,
+ // except if input events are currently captured by some other plugin).
- // first checks if plugin of the given class is already "hooked up",
- // if not, adds it to the top of plugins chain
+ virtual cbPluginBase& GetTopPlugin();
- virtual void AddPlugin( wxClassInfo* pPlInfo, int paneMask = wxALL_PANES );
+ // 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).
+ //
+ // This secenario is very inconvenient and "low-level",
+ // so use the Add/Push/PopPlugin methods instead.
- // 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
+ virtual void SetTopPlugin( cbPluginBase* pPlugin );
- virtual void AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo,
- int paneMask = wxALL_PANES );
+ // Similar to wxWindow's "push/pop-event-handler" methods, execept
+ // that the plugin is deleted upon "popping".
- // 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
+ virtual void PushPlugin( cbPluginBase* pPugin );
+ // Similar to wxWindow's "push/pop-event-handler" methods, execept
+ // that the plugin is deleted upon "popping".
- virtual void RemovePlugin( wxClassInfo* pPlInfo );
+ virtual void PopPlugin();
- // returns NULL, if plugin of the given class is not hooked
+ // Pop all plugins.
+ virtual void PopAllPlugins();
- virtual cbPluginBase* FindPlugin( wxClassInfo* pPlInfo );
+ // Adds the default plugins. These are cbPaneDrawPlugin, cbRowLayoutPlugin, cbBarDragPlugin,
+ // cbAntiflickerPlugin, cbSimpleCustomizePlugin.
+ //
+ // This method is automatically invoked if no plugins were found upon
+ // firing of the first plugin-event, i.e. when wxFrameLayout configures itself.
- bool HasTopPlugin();
+ virtual void PushDefaultPlugins();
- DECLARE_EVENT_TABLE()
- DECLARE_DYNAMIC_CLASS( wxFrameLayout )
+ // An advanced methods for plugin configuration using their
+ // dynamic class information, for example CLASSINFO(pluginClass).
+
+ // First checks if the plugin of the given class is already "hooked up".
+ // If not, adds it to the top of the plugins chain.
+
+ virtual void AddPlugin( wxClassInfo* pPlInfo, int paneMask = wxALL_PANES );
+
+ // First checks if the plugin of the given class is already hooked.
+ // If so, removes it, and then inserts it into the chain
+ // before the plugin of the class given by pNextPlInfo.
+ //
+ // Note: this method is handy in some cases where the order
+ // of the plugin-chain could be important, for example when one plugin overrides
+ // some functionality of another already-hooked plugin,
+ // so that the former plugin should be hooked before the one
+ // whose functionality is being overridden.
+
+ virtual void AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo,
+ int paneMask = wxALL_PANES );
+
+ // Checks if the plugin of the given class is hooked, and removes
+ // it if found.
+
+ virtual void RemovePlugin( wxClassInfo* pPlInfo );
+
+ // Finds a plugin with the given class, or returns NULL if a plugin of the given
+ // class is not hooked.
+
+ virtual cbPluginBase* FindPlugin( wxClassInfo* pPlInfo );
+
+ // Returns true if there is a top plugin.
+
+ bool HasTopPlugin();
+
+ DECLARE_EVENT_TABLE()
+ DECLARE_DYNAMIC_CLASS( wxFrameLayout )
public: /* protected really, acessed only by plugins and serializers */
- friend class cbDockPane;
- friend class wxBarHandler;
+ friend class cbDockPane;
+ friend class wxBarHandler;
- wxWindow* mpFrame; // parent frame
- wxWindow* mpFrameClient; // client window
- cbDockPane* mPanes[MAX_PANES]; // panes in the panel
+ wxWindow* mpFrame; // parent frame
+ wxWindow* mpFrameClient; // client window
+ cbDockPane* mPanes[MAX_PANES]; // panes in the panel
- // misc. cursors
- wxCursor* mpHorizCursor;
- wxCursor* mpVertCursor;
- wxCursor* mpNormalCursor;
- wxCursor* mpDragCursor;
- wxCursor* mpNECursor; // no-entry cursor
+ // misc. cursors
+ wxCursor* mpHorizCursor;
+ wxCursor* mpVertCursor;
+ wxCursor* mpNormalCursor;
+ wxCursor* mpDragCursor;
+ wxCursor* mpNECursor; // no-entry cursor
- // pens for decoration and shades
+ // pens for decoration and shades
- wxPen mDarkPen; // default wxSYS_COLOUR_3DSHADOW
- wxPen mLightPen; // default wxSYS_COLOUR_3DHILIGHT
- wxPen mGrayPen; // default wxSYS_COLOUR_3DFACE
- wxPen mBlackPen; // default wxColour( 0, 0, 0)
- wxPen mBorderPen; // default wxSYS_COLOUR_3DFACE
+ wxPen mDarkPen; // default wxSYS_COLOUR_3DSHADOW
+ wxPen mLightPen; // default wxSYS_COLOUR_3DHILIGHT
+ wxPen mGrayPen; // default wxSYS_COLOUR_3DFACE
+ wxPen mBlackPen; // default wxColour( 0, 0, 0)
+ wxPen mBorderPen; // default wxSYS_COLOUR_3DFACE
- wxPen mNullPen; // transparent pen
+ wxPen mNullPen; // transparent pen
- // pane to which the all mouse input is currently directed (caputred)
+ // pane to which the all mouse input is currently directed (caputred)
- cbDockPane* mpPaneInFocus;
+ cbDockPane* mpPaneInFocus;
- // pane, from which mouse pointer had just left
+ // pane, from which mouse pointer had just left
- cbDockPane* mpLRUPane;
+ cbDockPane* mpLRUPane;
- // bounds of client window in parent frame's coordinates
+ // bounds of client window in parent frame's coordinates
- wxRect mClntWndBounds;
- wxRect mPrevClntWndBounds;
+ wxRect mClntWndBounds;
+ wxRect mPrevClntWndBounds;
- bool mFloatingOn;
- wxPoint mNextFloatedWndPos;
- wxSize mFloatingPosStep;
+ bool mFloatingOn;
+ wxPoint mNextFloatedWndPos;
+ wxSize mFloatingPosStep;
- // current plugin (right-most) plugin which receives events first
+ // current plugin (right-most) plugin which receives events first
- cbPluginBase* mpTopPlugin;
+ cbPluginBase* mpTopPlugin;
- // plugin, which currently has captured all input events, otherwise NULL
+ // plugin, which currently has captured all input events, otherwise NULL
- cbPluginBase* mpCaputesInput;
+ cbPluginBase* mpCaputesInput;
- // list of event handlers which are "pushed" onto each bar, to catch
- // mouse events which are not handled by bars, and froward them to the ,
- // frome-layout and further to plugins
+ // list of event handlers which are "pushed" onto each bar, to catch
+ // mouse events which are not handled by bars, and froward them to the ,
+ // frome-layout and further to plugins
- wxList mBarSpyList;
+ wxList mBarSpyList;
- // list of top-most frames which contain floated bars
+ // list of top-most frames which contain floated bars
- wxList mFloatedFrames;
+ wxList mFloatedFrames;
- // linked list of references to all bars (docked/floated/hidden)
+ // linked list of references to all bars (docked/floated/hidden)
- BarArrayT mAllBars;
+ BarArrayT mAllBars;
- // FOR NOW:: dirty stuff...
- bool mClientWndRefreshPending;
- bool mRecalcPending;
- bool mCheckFocusWhenIdle;
+ // FOR NOW:: dirty stuff...
+ bool mClientWndRefreshPending;
+ bool mRecalcPending;
+ bool mCheckFocusWhenIdle;
public: /* protected really (accessed only by plugins) */
- // refrence to custom updates manager
- cbUpdatesManagerBase* mpUpdatesMgr;
+ // refrence to custom updates manager
+ cbUpdatesManagerBase* mpUpdatesMgr;
+
+ // Called to apply the calculated layout to window objects.
+
+ void PositionClientWindow();
+
+ // Called to apply the calculated layout to window objects.
+
+ void PositionPanes();
+
+ // Creates the cursors.
+
+ void CreateCursors();
+
+ // Applies the calculated layout to a floating bar.
+
+ void RepositionFloatedBar( cbBarInfo* pBar );
+
+ // Applies the state to the window objects.
+
+ void DoSetBarState( cbBarInfo* pBar );
+
+ // The purpose of this function is unknown.
+
+ bool LocateBar( cbBarInfo* pBarInfo,
+ cbRowInfo** ppRow,
+ cbDockPane** ppPane );
+
+
+ // Returns true if the position is within the given pane.
+
+ bool HitTestPane( cbDockPane* pPane, int x, int y );
+
+ // Returns the pane for which the rectangle hit test succeeds, giving
+ // preference to the given pane if supplied.
+
+ cbDockPane* HitTestPanes( const wxRect& rect, cbDockPane* pCurPane );
+
+ // Returns the pane to which the given bar belongs.
+
+ cbDockPane* GetBarPane( cbBarInfo* pBar );
+
+ // Delegated from "bar-spy".
+ void ForwardMouseEvent( wxMouseEvent& event,
+ cbDockPane* pToPane,
+ int eventType );
+
+ // Routes the mouse event to the appropriate pane.
+
+ void RouteMouseEvent( wxMouseEvent& event, int pluginEvtType );
+
+ // Shows all floated windows.
+
+ void ShowFloatedWindows( bool show );
+
+ // Unhooks the layout from the frame.
+
+ void UnhookFromFrame();
+
+ // Hooks the layout up to the frame (pushes the layout onto the
+ // frame's event handler stack).
+
+ void HookUpToFrame();
+
+ // Returns true if the platform allows reparenting. This may not return true
+ // for all platforms. Reparenting allows control bars to be floated.
+
+ bool CanReparent();
+
+ // Reparents pChild to have parent pNewParent.
+
+ void ReparentWindow( wxWindow* pChild, wxWindow* pNewParent );
- // called to set calculated layout to window objects
- void PositionClientWindow();
- void PositionPanes();
- void CreateCursors();
+ // Returns the previous client window rectangle.
- void RepositionFloatedBar( cbBarInfo* pBar );
- void DoSetBarState( cbBarInfo* pBar );
+ wxRect& GetPrevClientRect() { return mPrevClntWndBounds; }
- bool LocateBar( cbBarInfo* pBarInfo,
- cbRowInfo** ppRow,
- cbDockPane** ppPane );
+ // Handles paint events, calling PaintPane for each pane.
+ void OnPaint( wxPaintEvent& event );
- bool HitTestPane( cbDockPane* pPane, int x, int y );
- cbDockPane* HitTestPanes( const wxRect& rect, cbDockPane* pCurPane );
+ // Handles background erase events. Currently does nothing.
- // returns panes, to which the given bar belongs
+ void OnEraseBackground( wxEraseEvent& event );
- cbDockPane* GetBarPane( cbBarInfo* pBar );
+ // Handles focus kill events. Currently does nothing.
- // delegated from "bar-spy"
- void ForwardMouseEvent( wxMouseEvent& event,
- cbDockPane* pToPane,
- int eventType );
+ void OnKillFocus( wxFocusEvent& event );
- void RouteMouseEvent( wxMouseEvent& event, int pluginEvtType );
+ // Handles focus set events. Currently does nothing.
- void ShowFloatedWindows( bool show );
+ void OnSetFocus( wxFocusEvent& event );
- void UnhookFromFrame();
- void HookUpToFrame();
+ // Handles activation events. Currently does nothing.
- // NOTE:: reparenting of windows may NOT work on all platforms
- // (reparenting allows control-bars to be floated)
+ void OnActivate( wxActivateEvent& event );
- bool CanReparent();
- void ReparentWindow( wxWindow* pChild, wxWindow* pNewParent );
+ // Handles idle events.
- wxRect& GetPrevClientRect() { return mPrevClntWndBounds; }
+ void OnIdle( wxIdleEvent& event );
- void OnPaint( wxPaintEvent& event );
- void OnEraseBackground( wxEraseEvent& event );
- void OnKillFocus( wxFocusEvent& event );
- void OnSetFocus( wxFocusEvent& event );
- void OnActivate( wxActivateEvent& event );
- void OnIdle( wxIdleEvent& event );
+ // Returns a new cbGCUpdatesMgr object.
- // factory method
- virtual cbUpdatesManagerBase* CreateUpdatesManager();
+ virtual cbUpdatesManagerBase* CreateUpdatesManager();
};
-/* structure, which is present in each item of layout,
- * it used by any specific updates-manager to store
- * auxilary information to be used by it's specific
- * updating algorithm
- */
+/*
+A structure that is present in each item of layout,
+used by any particular updates-manager to store
+auxiliary information to be used by its updating algorithm.
+*/
-class cbUpdateMgrData : public wxObject
+class WXDLLIMPEXP_FL cbUpdateMgrData : public wxObject
{
- DECLARE_DYNAMIC_CLASS( cbUpdateMgrData )
+ DECLARE_DYNAMIC_CLASS( cbUpdateMgrData )
public:
- wxRect mPrevBounds; // previous state of layout item (in parent frame's coordinates)
+ wxRect mPrevBounds; // previous state of layout item (in parent frame's coordinates)
- bool mIsDirty; // overrides result of current-against-previous bounds comparison,
- // i.e. requires item to be updated, regardless of it's current area
-
- wxObject* mpCustomData; // any custom data stored by specific updates mgr.
+ bool mIsDirty; // overrides result of current-against-previous bounds comparison,
+ // i.e. requires item to be updated, regardless of it's current area
- cbUpdateMgrData(); // is-dirty flag is set TRUE initially
+ wxObject* mpCustomData; // any custom data stored by specific updates mgr.
- void StoreItemState( const wxRect& boundsInParent );
+ // Default constructor. Is-dirty flag is set true initially.
- void SetDirty( bool isDirty = TRUE );
+ cbUpdateMgrData();
- void SetCustomData( wxObject* pCustomData );
+ // Store the item state.
- inline bool IsDirty() { return mIsDirty; }
-};
+ void StoreItemState( const wxRect& boundsInParent );
+
+ // Set the dirty flag.
+
+ void SetDirty( bool isDirty = true );
+
+ // Set custom data.
+
+ void SetCustomData( wxObject* pCustomData );
-/* Abstract interface for bar-size handler classes.
- * These objects receive notifications, whenever the docking
- * state of the bar is changed, thus they have a possibility
- * to adjust the values in cbDimInfo::mSizes accordingly.
- * Specific handlers can be hooked to specific types of bars.
- */
+ // Returns the is-dirty flag.
-class cbBarDimHandlerBase : public wxObject
+ inline bool IsDirty() { return mIsDirty; }
+};
+
+/*
+Abstract interface for bar-size handler classes.
+These objects receive notifications whenever the docking
+state of the bar is changed, thus they provide the possibility
+to adjust the values in cbDimInfo::mSizes accordingly.
+Specific handlers can be hooked up to specific types of bar.
+*/
+
+class WXDLLIMPEXP_FL cbBarDimHandlerBase : public wxObject
{
- DECLARE_ABSTRACT_CLASS( cbBarDimHandlerBase )
+ DECLARE_ABSTRACT_CLASS( cbBarDimHandlerBase )
public:
- int mRefCount; // since one dim-handler can be assigned
- // to multiple bars, it's instance is
- // reference-counted
+ int mRefCount; // since one dim-handler can be assigned
+ // to multiple bars, it's instance is
+ // reference-counted
public:
- // initial reference count is 0, since handler is not used, until the
- // first invocation of AddRef()
+ // Default constructor. The initial reference count is 0, since
+ // the handler is not used until the first invocation of AddRef().
- cbBarDimHandlerBase();
+ cbBarDimHandlerBase();
- void AddRef();
- void RemoveRef();
+ // Increments the reference count.
- // "bar-state-changes" notification
- virtual void OnChangeBarState(cbBarInfo* pBar, int newState ) = 0;
- virtual void OnResizeBar( cbBarInfo* pBar, const wxSize& given, wxSize& preferred ) = 0;
-};
+ void AddRef();
+
+ // Decrements the reference count, and if the count is at zero,
+ // delete 'this'.
-/* helper classes (used internally by wxFrameLayout class) */
+ void RemoveRef();
-// holds and manages information about bar dimensions
+ // Responds to "bar-state-changes" notifications.
-class cbDimInfo : public wxObject
+ virtual void OnChangeBarState(cbBarInfo* pBar, int newState ) = 0;
+
+ // Responds to bar resize notifications.
+
+ virtual void OnResizeBar( cbBarInfo* pBar, const wxSize& given, wxSize& preferred ) = 0;
+};
+
+/*
+Helper class used internally by the wxFrameLayout class.
+Holds and manages information about bar dimensions.
+*/
+
+class WXDLLIMPEXP_FL cbDimInfo : public wxObject
{
- DECLARE_DYNAMIC_CLASS( cbDimInfo )
+ DECLARE_DYNAMIC_CLASS( cbDimInfo )
public:
- wxSize mSizes[MAX_BAR_STATES]; // preferred sizes for each possible bar state
+ wxSize mSizes[MAX_BAR_STATES]; // preferred sizes for each possible bar state
- wxRect mBounds[MAX_BAR_STATES]; // saved positions and sizes for each
- // possible state, values contain (-1)s if
- // not initialized yet
+ wxRect mBounds[MAX_BAR_STATES]; // saved positions and sizes for each
+ // possible state, values contain (-1)s if
+ // not initialized yet
- int mLRUPane; // pane to which this bar was docked before it was floated
- // (FL_ALIGN_TOP,FL_ALIGN_BOTTOM,..)
+ int mLRUPane; // pane to which this bar was docked before it was floated
+ // (FL_ALIGN_TOP,FL_ALIGN_BOTTOM,..)
- // top/bottom gap, separates decorations
- // from the bar's actual window, filled
- // with frame's beckground color, default: 0
+ // top/bottom gap, separates decorations
+ // from the bar's actual window, filled
+ // with frame's beckground color, default: 0
- int mVertGap;
+ int mVertGap;
- // left/right gap, separates decorations
- // from the bar's actual window, filled
- // with frame's beckground colour, default: 0
+ // left/right gap, separates decorations
+ // from the bar's actual wndow, filled
+ // with frame's beckground colour, default: 0
- int mHorizGap; // NOTE:: gaps are given in frame's coord. orientation
+ int mHorizGap; // NOTE:: gaps are given in frame's coord. orientation
- // TRUE, if vertical/horizotal dimensions cannot be mannualy adjusted
- // by user using resizing handles. If FALSE, the frame-layout
- // *automatically* places resizing handles among not-fixed bars
+ // true, if vertical/horizontal dimensions cannot be mannualy adjusted
+ // by user using resizing handles. If false, the frame-layout
+ // *automatically* places resizing handles among not-fixed bars
- bool mIsFixed;
+ bool mIsFixed;
- cbBarDimHandlerBase* mpHandler; // NULL, if no handler present
+ cbBarDimHandlerBase* mpHandler; // NULL, if no handler present
public:
- cbDimInfo(void);
+ // Default constructor.
+
+ cbDimInfo(void);
+
+ // Constructor.
+ // isFixed is true if vertical/horizontal dimensions cannot be manually adjusted
+ // by the user using resizing handles. If false, the frame-layout
+ // automatically places resizing handles among bars that do are not fixed.
+
+ cbDimInfo( cbBarDimHandlerBase* pDimHandler,
+ bool isFixed // (see comments on mIsFixed member)
+ );
+
+ // Constructor taking dimenstion information.
+ //
+ // dh_x, dh_y are the dimensions when docked horizontally.
+ //
+ // dv_x, dv_y are the dimensions when docked vertically.
+ //
+ // f_x, f_y are the dimensions when floating.
+ //
+ // For information on isFixed, see comments above.
+ //
+ // horizGap is the left/right gap, separating decorations
+ // from the bar's actual wndow, filled with the frame's background colour.
+ // The dimension is given in the frame's coordinates.
+ //
+ // vertGap is the top/bottom gap, separating decorations
+ // from the bar's actual wndow, filled with the frame's background colour.
+ // The dimension is given in the frame's coordinates.
+
+ cbDimInfo( int dh_x, int dh_y,
+ int dv_x, int dv_y,
+ int f_x, int f_y,
+
+ bool isFixed = true,
+ int horizGap = 6,
+ int vertGap = 6,
- cbDimInfo( cbBarDimHandlerBase* pDimHandler,
- bool isFixed // (see comments on mIsFixed member)
- );
+ cbBarDimHandlerBase* pDimHandler = NULL
+ );
- cbDimInfo( int dh_x, int dh_y, // dims when docked horizontally
- int dv_x, int dv_y, // dims when docked vertically
- int f_x, int f_y, // dims when floating
+ // Constructor.
- bool isFixed = TRUE,// (see comments on mIsFixed member)
- int horizGap = 6, // (see comments on mHorizGap member)
- int vertGap = 6, // -/-
+ cbDimInfo( int x, int y,
+ bool isFixed = true,
+ int gap = 6,
+ cbBarDimHandlerBase* pDimHandler = NULL
+ );
- cbBarDimHandlerBase* pDimHandler = NULL
- );
+ // Destructor. Destroys handler automatically, if present.
- cbDimInfo( int x, int y,
- bool isFixed = TRUE,
- int gap = 6,
- cbBarDimHandlerBase* pDimHandler = NULL
- );
+ ~cbDimInfo();
- const cbDimInfo& operator=( const cbDimInfo& other );
+ // Assignment operator.
- // destroys handler automatically, if present
- ~cbDimInfo();
+ const cbDimInfo& operator=( const cbDimInfo& other );
- inline cbBarDimHandlerBase* GetDimHandler() { return mpHandler; }
+ // Returns the handler, if any.
+
+ inline cbBarDimHandlerBase* GetDimHandler() { return mpHandler; }
};
-WX_DEFINE_ARRAY(float, cbArrayFloat);
+// FIXME: this array definition compiles but probably doesn't do what was intended (GD)
+WXFL_DEFINE_ARRAY_LONG(float, cbArrayFloat);
+
+/*
+Helper class used internally by the wxFrameLayout class.
+Holds and manages information about bar rows.
+*/
class cbRowInfo : public wxObject
{
- DECLARE_DYNAMIC_CLASS( cbRowInfo )
+ DECLARE_DYNAMIC_CLASS( cbRowInfo )
public:
- BarArrayT mBars; // row content
+ BarArrayT mBars; // row content
- // row flags (set up according to row-relations)
+ // row flags (set up according to row-relations)
- bool mHasUpperHandle;
- bool mHasLowerHandle;
- bool mHasOnlyFixedBars;
- int mNotFixedBarsCnt;
+ bool mHasUpperHandle;
+ bool mHasLowerHandle;
+ bool mHasOnlyFixedBars;
+ int mNotFixedBarsCnt;
- int mRowWidth;
- int mRowHeight;
- int mRowY;
+ int mRowWidth;
+ int mRowHeight;
+ int mRowY;
- // stores precalculated row's bounds in parent frame's coordinates
- wxRect mBoundsInParent;
+ // stores precalculated row's bounds in parent frame's coordinates
+ wxRect mBoundsInParent;
- // info stored for updates-manager
- cbUpdateMgrData mUMgrData;
+ // info stored for updates-manager
+ cbUpdateMgrData mUMgrData;
- cbRowInfo* mpNext;
- cbRowInfo* mpPrev;
+ cbRowInfo* mpNext;
+ cbRowInfo* mpPrev;
- cbBarInfo* mpExpandedBar; // NULL, if non of the bars is currently expanded
+ cbBarInfo* mpExpandedBar; // NULL, if non of the bars is currently expanded
- cbArrayFloat mSavedRatios; // length-ratios bofore some of the bars was expanded
+ cbArrayFloat mSavedRatios; // length-ratios bofore some of the bars was expanded
public:
- cbRowInfo(void);
+ // Constructor.
+
+ cbRowInfo(void);
+
+ // Destructor.
- ~cbRowInfo();
+ ~cbRowInfo();
- // convenience method
+ // Returns the first bar.
- inline cbBarInfo* GetFirstBar()
+ inline cbBarInfo* GetFirstBar()
- { return mBars.GetCount() ? mBars[0] : NULL; }
+ { return mBars.GetCount() ? mBars[0] : NULL; }
};
+/*
+Helper class used internally by the wxFrameLayout class.
+Holds and manages bar information.
+*/
+
class cbBarInfo : public wxObject
{
- DECLARE_DYNAMIC_CLASS( cbBarInfo )
+ DECLARE_DYNAMIC_CLASS( cbBarInfo )
public:
- // textual name, by which this bar is refered in layout-customization dialogs
- wxString mName;
+ // textual name, by which this bar is refered in layout-customization dialogs
+ wxString mName;
+
+ // stores bar's bounds in pane's coordinates
+ wxRect mBounds;
- // stores bar's bounds in pane's coordinates
- wxRect mBounds;
+ // stores precalculated bar's bounds in parent frame's coordinates
+ wxRect mBoundsInParent;
- // stores precalculated bar's bounds in parent frame's coordinates
- wxRect mBoundsInParent;
+ // back-ref to the row, which contains this bar
+ cbRowInfo* mpRow;
- // back-ref to the row, which contains this bar
- cbRowInfo* mpRow;
+ // are set up according to the types of the surrounding bars in the row
+ bool mHasLeftHandle;
+ bool mHasRightHandle;
- // are set up according to the types of the surrounding bars in the row
- bool mHasLeftHandle;
- bool mHasRightHandle;
+ // determines if this bar can float. The layout's setting as priority. For
+ // example, if the layout's mFloatingOn is false, this setting is irrelevant
+ // since nothing will float at all. If the layout's floating is on, use this
+ // setting to prevent specific bars from floating. In other words, all bars
+ // float by default and floating can be turned off on individual bars.
+ bool mFloatingOn; // default: ON (which is also the layout's mFloatingOn default setting)
- cbDimInfo mDimInfo; // preferred sizes for each, control bar state
-
- int mState; // (see definition of controlbar states)
+ cbDimInfo mDimInfo; // preferred sizes for each, control bar state
- int mAlignment; // alignment of the pane to which this
- // bar is currently placed
+ int mState; // (see definition of controlbar states)
- int mRowNo; // row, into which this bar would be placed,
- // when in the docking state
+ int mAlignment; // alignment of the pane to which this
+ // bar is currently placed
- wxWindow* mpBarWnd; // the actual window object, NULL if no window
- // is attached to the control bar (possible!)
+ int mRowNo; // row, into which this bar would be placed,
+ // when in the docking state
- double mLenRatio; // length ratio among not-fixed-size bars
+ wxWindow* mpBarWnd; // the actual window object, NULL if no window
+ // is attached to the control bar (possible!)
- wxPoint mPosIfFloated; // stored last position when bar was in "floated" state
- // poistion is stored in parent-window's coordinates
-
- cbUpdateMgrData mUMgrData; // info stored for updates-manager
+ double mLenRatio; // length ratio among not-fixed-size bars
- cbBarInfo* mpNext; // next. bar in the row
- cbBarInfo* mpPrev; // prev. bar in the row
+ wxPoint mPosIfFloated; // stored last position when bar was in "floated" state
+ // poistion is stored in parent-window's coordinates
+
+ cbUpdateMgrData mUMgrData; // info stored for updates-manager
+
+ cbBarInfo* mpNext; // next. bar in the row
+ cbBarInfo* mpPrev; // prev. bar in the row
public:
- cbBarInfo(void);
+ // Constructor.
+
+ cbBarInfo(void);
+
+ // Destructor.
+
+ ~cbBarInfo();
- ~cbBarInfo();
+ // Returns true if this bar is fixed.
- inline bool IsFixed() const { return mDimInfo.mIsFixed; }
+ inline bool IsFixed() const { return mDimInfo.mIsFixed; }
- inline bool IsExpanded() const { return this == mpRow->mpExpandedBar; }
+ // Returns true if this bar is expanded.
+
+ inline bool IsExpanded() const { return this == mpRow->mpExpandedBar; }
};
-// used for storing original bar's postions in the row, when the "non-destructive-friction"
-// option is turned ON
+/*
+Used for storing the original bar's positions in the row, when the 'non-destructive-friction'
+option is turned on.
+*/
class cbBarShapeData : public wxObject
{
public:
- wxRect mBounds;
- double mLenRatio;
+ wxRect mBounds;
+ double mLenRatio;
};
-// used for traversing through all bars of all rows in the pane
+/*
+Used for traversing through all bars of all rows in the pane.
+*/
class wxBarIterator
{
- RowArrayT* mpRows;
- cbRowInfo* mpRow;
- cbBarInfo* mpBar;
+ RowArrayT* mpRows;
+ cbRowInfo* mpRow;
+ cbBarInfo* mpBar;
public:
- wxBarIterator( RowArrayT& rows );
+ // Constructor, taking row array.
+
+ wxBarIterator( RowArrayT& rows );
+
+ // Resets the iterator to the start of the first row.
+
+ void Reset();
+
+ // Advances the iterator and returns true if a bar is available.
+
+ bool Next();
+
+ // Gets the current bar information.
+
+ cbBarInfo& BarInfo();
- void Reset();
- bool Next(); // TRUE, if next bar is available
-
- cbBarInfo& BarInfo();
+ // Returns a reference to the currently traversed row.
- // returns reference to currently traversed row
- cbRowInfo& RowInfo();
+ cbRowInfo& RowInfo();
};
-/* structure holds configuration options,
- * which are usually the same for all panes in
- * frame layout
- */
+/*
+A structure holding configuration options,
+which are usually the same for all panes in
+a frame layout.
+*/
class cbCommonPaneProperties : public wxObject
{
- DECLARE_DYNAMIC_CLASS( cbCommonPaneProperties )
+ DECLARE_DYNAMIC_CLASS( cbCommonPaneProperties )
+
+ // look-and-feel configuration
+
+ bool mRealTimeUpdatesOn; // default: ON
+ bool mOutOfPaneDragOn; // default: ON
+ bool mExactDockPredictionOn; // default: OFF
+ bool mNonDestructFrictionOn; // default: OFF
- // look-and-feel configuration
+ bool mShow3DPaneBorderOn; // default: ON
- bool mRealTimeUpdatesOn; // default: ON
- bool mOutOfPaneDragOn; // default: ON
- bool mExactDockPredictionOn; // default: OFF
- bool mNonDestructFirctionOn; // default: OFF
+ // FOR NOW:: the below properties are reserved for the "future"
- bool mShow3DPaneBorderOn; // default: ON
+ bool mBarFloatingOn; // default: OFF
+ bool mRowProportionsOn; // default: OFF
+ bool mColProportionsOn; // default: ON
+ bool mBarCollapseIconsOn; // default: OFF
+ bool mBarDragHintsOn; // default: OFF
- // FOR NOW:: the below properties are reserved for the "future"
+ // minimal dimensions for not-fixed bars in this pane (16x16 default)
- bool mBarFloatingOn; // default: OFF
- bool mRowProportionsOn; // default: OFF
- bool mColProportionsOn; // default: ON
- bool mBarCollapseIconsOn; // default: OFF
- bool mBarDragHintsOn; // default: OFF
+ wxSize mMinCBarDim;
- // minimal dimensions for not-fixed bars in this pane (16x16 default)
+ // width/height of resizing sash
- wxSize mMinCBarDim;
+ int mResizeHandleSize;
- // width/height of resizing sash
-
- int mResizeHandleSize;
+ // Default constructor.
- cbCommonPaneProperties(void);
+ cbCommonPaneProperties(void);
+
+ // Copy constructor
+
+ cbCommonPaneProperties(const cbCommonPaneProperties&);
+
+ // Assignment operator
+
+ cbCommonPaneProperties& operator=(const cbCommonPaneProperties&);
};
-/* class manages containment and control of control-bars
- * along one of the four edges of the parent frame
- */
+/*
+This class manages containment and control of control bars
+along one of the four edges of the parent frame.
+*/
class cbDockPane : public wxObject
{
public:
- DECLARE_DYNAMIC_CLASS( cbDockPane )
+ DECLARE_DYNAMIC_CLASS( cbDockPane )
- // look-and-feel configuration for this pane
- cbCommonPaneProperties mProps;
+ // look-and-feel configuration for this pane
+ cbCommonPaneProperties mProps;
- // pane margins (in frame's coordinate-syst. orientation)
+ // pane margins (in frame's coordinate-syst. orientation)
+
+ int mLeftMargin; // default: 2 pixels
+ int mRightMargin; // default: 2 pixels
+ int mTopMargin; // default: 2 pixels
+ int mBottomMargin; // default: 2 pixels
- int mLeftMargin; // default: 2 pixels
- int mRightMargin; // default: 2 pixels
- int mTopMargin; // default: 2 pixels
- int mBottomMargin; // default: 2 pixels
-
public:
- // position of the pane in frame's coordinates
- wxRect mBoundsInParent;
+ // position of the pane in frame's coordinates
+ wxRect mBoundsInParent;
- // pane width and height in pane's coordinates
- int mPaneWidth;
- int mPaneHeight;
+ // pane width and height in pane's coordinates
+ int mPaneWidth;
+ int mPaneHeight;
- int mAlignment;
+ int mAlignment;
- // info stored for updates-manager
- cbUpdateMgrData mUMgrData;
+ // info stored for updates-manager
+ cbUpdateMgrData mUMgrData;
public: /* protected really */
- RowArrayT mRows;
- wxFrameLayout* mpLayout; // back-ref
+ RowArrayT mRows;
+ wxFrameLayout* mpLayout; // back-ref
- // transient properties
+ // transient properties
- wxList mRowShapeData; // shapes of bars of recently modified row,
- // stored when in "non-destructive-firction" mode
- cbRowInfo* mpStoredRow; // row-info for which the shapes are stored
+ wxList mRowShapeData; // shapes of bars of recently modified row,
+ // stored when in "non-destructive-friction" mode
+ cbRowInfo* mpStoredRow; // row-info for which the shapes are stored
- friend class wxFrameLayout;
+ friend class wxFrameLayout;
public: /* protected really (accessed only by plugins) */
- cbRowInfo* GetRow( int row );
+ // Returns the row info for a row index. Internal function called by plugins.
+
+ cbRowInfo* GetRow( int row );
+
+ // Returns the row index for the given row info. Internal function called by plugins.
+
+ int GetRowIndex( cbRowInfo* pRow );
+
+ // Returns the row at the given vertical position.
+ // Returns -1 if the row is not present at given vertical position.
+ // Internal function called by plugins.
+
+ int GetRowAt( int paneY );
+
+ // Returns the row between the given vertical positions.
+ // Returns -1 if the row is not present.
+ // Internal function called by plugins.
+
+ int GetRowAt( int upperY, int lowerY );
+
+ // Sets up flags in the row information structure, so that
+ // they match the changed state of row items correctly.
+ // Internal function called by plugins.
+
+ void SyncRowFlags( cbRowInfo* pRow );
+
+ // Returns true if the bar's dimension information indicates a fixed size.
+ // Internal function called by plugins.
+
+ bool IsFixedSize( cbBarInfo* pInfo );
+
+ // Returns the number of bars whose size is not fixed.
+ // Internal function called by plugins.
+
+ int GetNotFixedBarsCount( cbRowInfo* pRow );
+
+ // Gets the vertical position at the given row.
+ // Internal function called by plugins.
+
+ int GetRowY( cbRowInfo* pRow );
- int GetRowIndex( cbRowInfo* pRow );
+ // Returns true if there are any variable-sized rows above this one.
+ // Internal function called by plugins.
- // return -1, if row is not present at given vertical position
- int GetRowAt( int paneY );
- int GetRowAt( int upperY, int lowerY );
+ bool HasNotFixedRowsAbove( cbRowInfo* pRow );
- // re-setups flags in the row-information structure, so that
- // the would match the changed state of row-items correctly
- void SyncRowFlags( cbRowInfo* pRow );
+ // Returns true if there are any variable-sized rows below this one.
+ // Internal function called by plugins.
- // layout "AI" helpers:
+ bool HasNotFixedRowsBelow( cbRowInfo* pRow );
- bool IsFixedSize( cbBarInfo* pInfo );
- int GetNotFixedBarsCount( cbRowInfo* pRow );
+ // Returns true if there are any variable-sized rows to the left of this one.
+ // Internal function called by plugins.
- int GetRowWidth( wxList* pRow );
+ bool HasNotFixedBarsLeft ( cbBarInfo* pBar );
- int GetRowY( cbRowInfo* pRow );
+ // Returns true if there are any variable-sized rows to the right of this one.
+ // Internal function called by plugins.
- bool HasNotFixedRowsAbove( cbRowInfo* pRow );
- bool HasNotFixedRowsBelow( cbRowInfo* pRow );
- bool HasNotFixedBarsLeft ( cbBarInfo* pBar );
- bool HasNotFixedBarsRight( cbBarInfo* pBar );
+ bool HasNotFixedBarsRight( cbBarInfo* pBar );
- virtual void CalcLengthRatios( cbRowInfo* pInRow );
- virtual void RecalcRowLayout( cbRowInfo* pRow );
+ // Calculate lengths.
+ // Internal function called by plugins.
- virtual void ExpandBar( cbBarInfo* pBar );
- virtual void ContractBar( cbBarInfo* pBar );
+ virtual void CalcLengthRatios( cbRowInfo* pInRow );
- void InitLinksForRow( cbRowInfo* pRow );
- void InitLinksForRows();
+ // Generates a cbLayoutRowEvent event to recalculate row layouts.
+ // Internal function called by plugins.
- // coordinate translation between parent's frame and this pane
+ virtual void RecalcRowLayout( cbRowInfo* pRow );
- void FrameToPane( int* x, int* y );
- void PaneToFrame( int* x, int* y );
- void FrameToPane( wxRect* pRect );
- void PaneToFrame( wxRect* pRect );
+ // Expands the bar.
+ // Internal function called by plugins.
- inline bool HasPoint( const wxPoint& pos, int x, int y, int width, int height );
+ virtual void ExpandBar( cbBarInfo* pBar );
- int GetMinimalRowHeight( cbRowInfo* pRow );
+ // Contracts the bar.
+ // Internal function called by plugins.
- // given row height includes height of row handles, if present
- void SetRowHeight( cbRowInfo* pRow, int newHeight );
+ virtual void ContractBar( cbBarInfo* pBar );
- void DoInsertBar( cbBarInfo* pBar, int rowNo );
+ // Sets up links between bars.
+ // Internal function called by plugins.
+
+ void InitLinksForRow( cbRowInfo* pRow );
+
+ // Sets up links between bars.
+ // Internal function called by plugins.
+
+ void InitLinksForRows();
+
+ // Coordinate translation between parent's frame and this pane.
+ // Internal function called by plugins.
+
+ void FrameToPane( int* x, int* y );
+
+ // Coordinate translation between parent's frame and this pane.
+ // Internal function called by plugins.
+
+ void PaneToFrame( int* x, int* y );
+
+ // Coordinate translation between parent's frame and this pane.
+ // Internal function called by plugins.
+
+ void FrameToPane( wxRect* pRect );
+
+ // Coordinate translation between parent's frame and this pane.
+ // Internal function called by plugins.
+
+ void PaneToFrame( wxRect* pRect );
+
+ // Returns true if pos is within the given rectangle.
+ // Internal function called by plugins.
+
+ inline bool HasPoint( const wxPoint& pos, int x, int y, int width, int height );
+
+ // Returns the minimal row height for the given row.
+ // Internal function called by plugins.
+
+ int GetMinimalRowHeight( cbRowInfo* pRow );
+
+ // Sets the row height for the given height. newHeight includes the height of row handles, if present.
+ // Internal function called by plugins.
+
+ void SetRowHeight( cbRowInfo* pRow, int newHeight );
+
+ // Inserts the bar at the given row number.
+ // Internal function called by plugins.
+
+ void DoInsertBar( cbBarInfo* pBar, int rowNo );
public: /* protected really (accessed only by plugins) */
- // methods for incramental on-screen refreshing of the pane
- // (simply, they are wrappers around corresponding plugin-events)
-
- virtual void PaintBarDecorations( cbBarInfo* pBar, wxDC& dc );
- virtual void PaintBarHandles( cbBarInfo* pBar, wxDC& dc );
- virtual void PaintBar( cbBarInfo* pBar, wxDC& dc );
- virtual void PaintRowHandles( cbRowInfo* pRow, wxDC& dc );
- virtual void PaintRowBackground ( cbRowInfo* pRow, wxDC& dc );
- virtual void PaintRowDecorations( cbRowInfo* pRow, wxDC& dc );
- virtual void PaintRow( cbRowInfo* pRow, wxDC& dc );
- virtual void PaintPaneBackground( wxDC& dc );
- virtual void PaintPaneDecorations( wxDC& dc );
- virtual void PaintPane( wxDC& dc );
- virtual void SizeBar( cbBarInfo* pBar );
- virtual void SizeRowObjects( cbRowInfo* pRow );
- virtual void SizePaneObjects();
-
- virtual wxDC* StartDrawInArea ( const wxRect& area );
- virtual void FinishDrawInArea( const wxRect& area );
+ // Generates a cbDrawBarDecorEvent and sends it to the layout to paint the bar decorations.
+ // Internal function called by plugins.
+
+ virtual void PaintBarDecorations( cbBarInfo* pBar, wxDC& dc );
+
+ // Generates a cbDrawBarHandlesEvent and sends it to the layout to paint the bar handles.
+ // Internal function called by plugins.
+
+ virtual void PaintBarHandles( cbBarInfo* pBar, wxDC& dc );
+
+ // Calls PaintBarDecorations and PaintBarHandles.
+ // Internal function called by plugins.
+
+ virtual void PaintBar( cbBarInfo* pBar, wxDC& dc );
+
+ // Generates cbDrawRowHandlesEvent and cbDrawRowDecorEvent and sends them to the layout.
+ // Internal function called by plugins.
+
+ virtual void PaintRowHandles( cbRowInfo* pRow, wxDC& dc );
+
+ // Generates cbDrawRowBkGroundEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual void PaintRowBackground ( cbRowInfo* pRow, wxDC& dc );
+
+ // Calls PaintBarDecorations for each row.
+ // Internal function called by plugins.
+
+ virtual void PaintRowDecorations( cbRowInfo* pRow, wxDC& dc );
+
+ // Calls PaintRowBackground, PaintRowDecorations, PaintRowHandles.
+ // Internal function called by plugins.
+
+ virtual void PaintRow( cbRowInfo* pRow, wxDC& dc );
+
+ // Generates cbDrawPaneBkGroundEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual void PaintPaneBackground( wxDC& dc );
+
+ // Generates cbDrawPaneDecorEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual void PaintPaneDecorations( wxDC& dc );
+
+ // Paints the pane background, the row background and decorations,
+ // and finally the pane decorations.
+ // Internal function called by plugins.
+
+ virtual void PaintPane( wxDC& dc );
+
+ // Generates a cbSizeBarWndEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual void SizeBar( cbBarInfo* pBar );
+
+ // Calls SizeBar for each bar in the row.
+ // Internal function called by plugins.
+
+ virtual void SizeRowObjects( cbRowInfo* pRow );
+
+ // Calls SizeRowObjects for each row.
+ // Internal function called by plugins.
+
+ virtual void SizePaneObjects();
+
+ // Generates cbStartDrawInAreaEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual wxDC* StartDrawInArea ( const wxRect& area );
+
+ // Generates cbFinishDrawInAreaEvent and sends it to the layout.
+ // Internal function called by plugins.
+
+ virtual void FinishDrawInArea( const wxRect& area );
public: /* public members */
- cbDockPane(void);
+ // Default constructor.
+
+ cbDockPane(void);
+
+ // Constructor, taking alignment and layout panel.
+
+ cbDockPane( int alignment, wxFrameLayout* pPanel );
+
+ // Sets pane's margins in frame's coordinate orientations.
+
+ void SetMargins( int top, int bottom, int left, int right );
+
+ // Destructor.
+
+ virtual ~cbDockPane();
+
+ // Removes the bar from this pane. Does not destroy the bar.
+
+ virtual void RemoveBar( cbBarInfo* pBar );
+
+ // Inserts the bar into this pane. rect is given in the parent frame's coordinates.
+
+ virtual void InsertBar( cbBarInfo* pBar, const wxRect& rect );
+
+ // Inserts the bar into the given row, with dimensions and position
+ // stored in pBarInfo->mBounds. Returns the node of inserted bar.
+
+ virtual void InsertBar( cbBarInfo* pBar, cbRowInfo* pIntoRow );
+
+ // Inserts bar and sets its position according to the preferred settings
+ // given in pBarInfo.
+
+ virtual void InsertBar( cbBarInfo* pBarInfo );
+
+ // Removes the row from this pane. Does not destroy the row object.
- cbDockPane( int alignment, wxFrameLayout* pPanel );
+ virtual void RemoveRow( cbRowInfo* pRow );
- // sets pane's margins in frame's coordinate orientations
- void SetMargins( int top, int bottom, int left, int right );
+ // Inserts a row. Does not refresh the inserted row immediately.
+ // If pBeforeRowNode is NULL, the row is appended to the end of pane's row list.
- virtual ~cbDockPane();
+ virtual void InsertRow( cbRowInfo* pRow, cbRowInfo* pBeforeRow );
- // does not destroys the info bar , only removes it's reference
- // from this pane
+ // Sets pane's width in the pane's coordinates (including margins).
- virtual void RemoveBar( cbBarInfo* pBar );
+ void SetPaneWidth(int width);
- // rect given in the parent frame's coordinates
-
- virtual void InsertBar( cbBarInfo* pBar, const wxRect& atRect );
+ // Set the position and dimensions of the pane in the parent frame's coordinates.
- // inserts bar into the given row, with dimensions and position
- // stored in pBarInfo->mBounds. Returns the node of inserted bar
+ void SetBoundsInParent( const wxRect& rect );
- virtual void InsertBar( cbBarInfo* pBar, cbRowInfo* pIntoRow );
+ // Returns the bounds of the pane, in parent coordinates.
- // inserts bar, sets its position according to the preferred settings
- // given in (*pBarInfo) structure
+ inline wxRect& GetRealRect() { return mBoundsInParent; }
- virtual void InsertBar( cbBarInfo* pBarInfo );
+ // Returns an array of rows. Used by updates-managers.
- // does not destroy the row object, only removes the corresponding
- // node from this pane
- virtual void RemoveRow( cbRowInfo* pRow );
-
- // does not refresh the inserted row immediately,
- // if pBeforeRowNode arg. is NULL, row is appended to the end of pane's row list
- virtual void InsertRow( cbRowInfo* pRow, cbRowInfo* pBeforeRow );
+ inline RowArrayT& GetRowList() { return mRows; }
- // sets pane's width in pane's coordinates (including margins)
- void SetPaneWidth(int width);
+ // Returns the first row.
- // set the position and dims. of the pane in parent frame's coordinates
- void SetBoundsInParent( const wxRect& rect );
+ inline cbRowInfo* GetFirstRow()
- inline wxRect& GetRealRect() { return mBoundsInParent; }
+ { return mRows.GetCount() ? mRows[0] : NULL; }
- // used by updates-managers
- inline RowArrayT& GetRowList() { return mRows; }
+ // Returns true if the given bar is present in this pane.
- // convenience method
+ bool BarPresent( cbBarInfo* pBar );
- inline cbRowInfo* GetFirstRow()
-
- { return mRows.GetCount() ? mRows[0] : NULL; }
+ // Returns the height in the pane's coordinates.
- // TRUE, if the given bar node presents in this pane
+ int GetPaneHeight();
- bool BarPresent( cbBarInfo* pBar );
+ // Returns the alignment for this pane. The value is one of
+ // FL_ALIGN_TOP, FL_ALIGN_BOTTOM, FL_ALIGN_LEFT, FL_ALIGN_RIGHT.
- // retuns height, in pane's coordinates
- int GetPaneHeight();
+ int GetAlignment();
- int GetAlignment();
+ // Returns true if the given mask matches the pane's mask.
- bool MatchesMask( int paneMask );
+ bool MatchesMask( int paneMask );
- inline bool IsHorizontal()
- {
- return (mAlignment == FL_ALIGN_TOP ||
- mAlignment == FL_ALIGN_BOTTOM );
- }
+ // Returns true if the pane is aligned to the top or bottom.
- virtual void RecalcLayout();
+ inline bool IsHorizontal()
+ {
+ return (mAlignment == FL_ALIGN_TOP ||
+ mAlignment == FL_ALIGN_BOTTOM );
+ }
- virtual int GetDockingState();
+ // Generates events to perform layout calculations.
- // returns result of hit-testing items in the pane,
- // see CB_HITTEST_RESULTS enumeration
+ virtual void RecalcLayout();
- virtual int HitTestPaneItems( const wxPoint& pos, // position in pane's coordinates
- cbRowInfo** ppRow,
- cbBarInfo** ppBar
- );
+ // Returns wxCBAR_DOCKED_HORIZONTALLY if the alignment is top or bottom,
+ // or wxCBAR_DOCKED_VERTICALLY otherwise.
- void GetBarResizeRange( cbBarInfo* pBar, int* from, int *till, bool forLeftHandle );
- void GetRowResizeRange( cbRowInfo* pRow, int* from, int* till, bool forUpperHandle );
+ virtual int GetDockingState();
- cbBarInfo* GetBarInfoByWindow( wxWindow* pBarWnd );
+ // Returns the result of hit-testing items in the pane.
+ // See CB_HITTEST_RESULT enumerated type.
+ // pos is the position in this pane's coordinates.
+
+ virtual int HitTestPaneItems( const wxPoint& pos,
+ cbRowInfo** ppRow,
+ cbBarInfo** ppBar
+ );
+
+ // Returns the bar's resize range.
+
+ void GetBarResizeRange( cbBarInfo* pBar, int* from, int *till, bool forLeftHandle );
+
+ // Returns the row's resize range.
+
+ void GetRowResizeRange( cbRowInfo* pRow, int* from, int* till, bool forUpperHandle );
+
+ // Finds the bar information by corresponding window.
+
+ cbBarInfo* GetBarInfoByWindow( wxWindow* pBarWnd );
public: /* protected really (accessed only by plugins) */
- // row/bar resizing related helper-methods
+ // Row/bar resizing related helper-method.
+
+ void DrawVertHandle ( wxDC& dc, int x, int y, int height );
+
+ // Row/bar resizing related helper-method.
+
+ void DrawHorizHandle( wxDC& dc, int x, int y, int width );
+
+ // Row/bar resizing related helper-method.
- void DrawVertHandle ( wxDC& dc, int x, int y, int height );
- void DrawHorizHandle( wxDC& dc, int x, int y, int width );
+ void ResizeRow( cbRowInfo* pRow, int ofs, bool forUpperHandle );
- void ResizeRow( cbRowInfo* pRow, int ofs, bool forUpperHandle );
- void ResizeBar( cbBarInfo* pBar, int ofs, bool forLeftHandle );
+ // Row/bar resizing related helper-method.
- // cbBarShapeData objects will be placed to given pLst (see comments on cbBarShapeData)
+ void ResizeBar( cbBarInfo* pBar, int ofs, bool forLeftHandle );
- void GetRowShapeData( cbRowInfo* pRow, wxList* pLst );
+ // Returns row shape data.
+ // cbBarShapeData objects will be added to the given pLst.
+ // cbBarShapeData is used for storing the original bar's positions in the row,
+ // when the 'non-destructive-friction' option is turned on.
- // sets the shape to the given row, using the data provided in pLst
- void SetRowShapeData( cbRowInfo* pRowNode, wxList* pLst );
+ void GetRowShapeData( cbRowInfo* pRow, wxList* pLst );
+
+ // Sets the shape data for the given row, using the data provided in pLst.
+ // cbBarShapeData is used for storing the original bar's positions in the row,
+ // when the 'non-destructive-friction' option is turned on.
+
+ void SetRowShapeData( cbRowInfo* pRowNode, wxList* pLst );
};
/*
- * class declares abstract interface for optimized logic, which should refresh
- * areas of frame layout - that actually need to be updated. Should be extended,
- * to implement custom updating strategy
- */
+This class declares an abstract interface for optimized logic that should refresh
+areas of frame layout that actually need to be updated. This should be extended in future
+to implement a custom updating strategy.
+*/
class cbUpdatesManagerBase : public wxObject
{
- DECLARE_ABSTRACT_CLASS( cbUpdatesManagerBase )
+ DECLARE_ABSTRACT_CLASS( cbUpdatesManagerBase )
public: /* protected really, accessed by serializer (if any) */
- wxFrameLayout* mpLayout;
+ wxFrameLayout* mpLayout;
public:
- cbUpdatesManagerBase(void)
- : mpLayout( 0 ) {}
+ // Default constructor
- cbUpdatesManagerBase( wxFrameLayout* pPanel )
- : mpLayout( pPanel ) {}
+ cbUpdatesManagerBase(void)
+ : mpLayout( 0 ) {}
- virtual ~cbUpdatesManagerBase() {}
-
- void SetLayout( wxFrameLayout* pLayout ) { mpLayout = pLayout; }
+ // Constructor taking layout panel.
- // notificiactions received from frame-layout (in the order, in which
- // they usually would be invoked). Custom updates-managers may utilize
- // these notifications to implement more "fine-grained" updating strategy
+ cbUpdatesManagerBase( wxFrameLayout* pPanel )
+ : mpLayout( pPanel ) {}
- virtual void OnStartChanges() = 0;
+ // Destructor.
- virtual void OnRowWillChange( cbRowInfo* pRow, cbDockPane* pInPane ) {}
- virtual void OnBarWillChange( cbBarInfo* pBar, cbRowInfo* pInRow, cbDockPane* pInPane ) {}
- virtual void OnPaneMarginsWillChange( cbDockPane* pPane ) {}
- virtual void OnPaneWillChange( cbDockPane* pPane ) {}
+ virtual ~cbUpdatesManagerBase() {}
- virtual void OnFinishChanges() {}
+ // Sets the associated layout.
- // refreshes parts of the frame layout, which need an update
- virtual void UpdateNow() = 0;
-};
+ void SetLayout( wxFrameLayout* pLayout ) { mpLayout = pLayout; }
-/*------------------------------------------------------------
- * "API" for developing custom plugins of Frame Layout Engine
- * TODO:: documentation
- *------------------------------------------------------------
- */
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
-// base class for all control-bar plugin events
+ virtual void OnStartChanges() = 0;
-class cbPluginEvent : public wxEvent
-{
- // NOTE:: plugin-event does not need to be a dynamic class
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
-public:
- cbDockPane* mpPane; // NULL, if event is not addressed to any specific pane
-
- /* OLD STUFF::
- // FOR NOW FOR NOW:: all-in-one plugin event structure
- wxNode* mpObjNode;
- wxNode* mpObjNodeAux;
- wxPoint mPos;
- wxSize mSize;
- wxDC* mpDC;
- bool mAuxBoolVal;
- */
-
-#if wxCHECK_VERSION(2,3,0)
- cbPluginEvent( wxEventType eventType, cbDockPane* pPane )
- : mpPane( pPane )
-
- { m_eventType = eventType; }
-#else
- cbPluginEvent( int eventType, cbDockPane* pPane )
- : mpPane( pPane )
-
- { m_eventType = eventType; }
-#endif
-};
+ virtual void OnRowWillChange( cbRowInfo* WXUNUSED(pRow), cbDockPane* WXUNUSED(pInPane) ) {}
-// event types handled by plugins
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
-#if wxCHECK_VERSION(2,3,0)
+ virtual void OnBarWillChange( cbBarInfo* WXUNUSED(pBar), cbRowInfo* WXUNUSED(pInRow), cbDockPane* WXUNUSED(pInPane) ) {}
- extern wxEventType cbEVT_PL_LEFT_DOWN;
- extern wxEventType cbEVT_PL_LEFT_UP;
- extern wxEventType cbEVT_PL_RIGHT_DOWN;
- extern wxEventType cbEVT_PL_RIGHT_UP;
- extern wxEventType cbEVT_PL_MOTION;
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
- extern wxEventType cbEVT_PL_LEFT_DCLICK;
+ virtual void OnPaneMarginsWillChange( cbDockPane* WXUNUSED(pPane) ) {}
- extern wxEventType cbEVT_PL_LAYOUT_ROW;
- extern wxEventType cbEVT_PL_RESIZE_ROW;
- extern wxEventType cbEVT_PL_LAYOUT_ROWS;
- extern wxEventType cbEVT_PL_INSERT_BAR;
- extern wxEventType cbEVT_PL_RESIZE_BAR;
- extern wxEventType cbEVT_PL_REMOVE_BAR;
- extern wxEventType cbEVT_PL_SIZE_BAR_WND;
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
- extern wxEventType cbEVT_PL_DRAW_BAR_DECOR;
- extern wxEventType cbEVT_PL_DRAW_ROW_DECOR;
- extern wxEventType cbEVT_PL_DRAW_PANE_DECOR;
- extern wxEventType cbEVT_PL_DRAW_BAR_HANDLES;
- extern wxEventType cbEVT_PL_DRAW_ROW_HANDLES;
- extern wxEventType cbEVT_PL_DRAW_ROW_BKGROUND;
- extern wxEventType cbEVT_PL_DRAW_PANE_BKGROUND;
+ virtual void OnPaneWillChange( cbDockPane* WXUNUSED(pPane) ) {}
- extern wxEventType cbEVT_PL_START_BAR_DRAGGING;
- extern wxEventType cbEVT_PL_DRAW_HINT_RECT;
+ // This function receives a notification from the frame layout (in the order in which
+ // they would usually be invoked). Custom updates-managers may utilize
+ // these notifications to implement a more fine-grained updating strategy.
- extern wxEventType cbEVT_PL_START_DRAW_IN_AREA;
- extern wxEventType cbEVT_PL_FINISH_DRAW_IN_AREA;
+ virtual void OnFinishChanges() {}
- extern wxEventType cbEVT_PL_CUSTOMIZE_BAR;
- extern wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT;
+ // Refreshes parts of the frame layout that need an update.
- extern wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT;
+ virtual void UpdateNow() = 0;
+};
-#else
+/*
+Base class for all control-bar plugin events.
+This is not a dynamically-creatable class.
+*/
- #define cbEVT_PL_LEFT_DOWN 0
- #define cbEVT_PL_LEFT_UP 1
- #define cbEVT_PL_RIGHT_DOWN 2
- #define cbEVT_PL_RIGHT_UP 3
- #define cbEVT_PL_MOTION 4
+class cbPluginEvent : public wxEvent
+{
+public:
+ // NULL if event is not addressed to any specific pane.
+
+ cbDockPane* mpPane;
+
+ // Not used, but required.
+
+ virtual wxEvent* Clone() const { return NULL; }
- #define cbEVT_PL_LEFT_DCLICK 5
+ // Constructor, taking event type and pane.
+
+ cbPluginEvent( wxEventType eventType, cbDockPane* pPane )
+ : mpPane( pPane )
+
+ { m_eventType = eventType; }
+};
+
+// event types handled by plugins
- #define cbEVT_PL_LAYOUT_ROW 6
- #define cbEVT_PL_RESIZE_ROW 7
- #define cbEVT_PL_LAYOUT_ROWS 8
- #define cbEVT_PL_INSERT_BAR 9
- #define cbEVT_PL_RESIZE_BAR 10
- #define cbEVT_PL_REMOVE_BAR 11
- #define cbEVT_PL_SIZE_BAR_WND 12
+extern wxEventType cbEVT_PL_LEFT_DOWN;
+extern wxEventType cbEVT_PL_LEFT_UP;
+extern wxEventType cbEVT_PL_RIGHT_DOWN;
+extern wxEventType cbEVT_PL_RIGHT_UP;
+extern wxEventType cbEVT_PL_MOTION;
- #define cbEVT_PL_DRAW_BAR_DECOR 13
- #define cbEVT_PL_DRAW_ROW_DECOR 14
- #define cbEVT_PL_DRAW_PANE_DECOR 15
- #define cbEVT_PL_DRAW_BAR_HANDLES 16
- #define cbEVT_PL_DRAW_ROW_HANDLES 17
- #define cbEVT_PL_DRAW_ROW_BKGROUND 18
- #define cbEVT_PL_DRAW_PANE_BKGROUND 19
+extern wxEventType cbEVT_PL_LEFT_DCLICK;
- #define cbEVT_PL_START_BAR_DRAGGING 20
- #define cbEVT_PL_DRAW_HINT_RECT 21
+extern wxEventType cbEVT_PL_LAYOUT_ROW;
+extern wxEventType cbEVT_PL_RESIZE_ROW;
+extern wxEventType cbEVT_PL_LAYOUT_ROWS;
+extern wxEventType cbEVT_PL_INSERT_BAR;
+extern wxEventType cbEVT_PL_RESIZE_BAR;
+extern wxEventType cbEVT_PL_REMOVE_BAR;
+extern wxEventType cbEVT_PL_SIZE_BAR_WND;
- #define cbEVT_PL_START_DRAW_IN_AREA 22
- #define cbEVT_PL_FINISH_DRAW_IN_AREA 23
+extern wxEventType cbEVT_PL_DRAW_BAR_DECOR;
+extern wxEventType cbEVT_PL_DRAW_ROW_DECOR;
+extern wxEventType cbEVT_PL_DRAW_PANE_DECOR;
+extern wxEventType cbEVT_PL_DRAW_BAR_HANDLES;
+extern wxEventType cbEVT_PL_DRAW_ROW_HANDLES;
+extern wxEventType cbEVT_PL_DRAW_ROW_BKGROUND;
+extern wxEventType cbEVT_PL_DRAW_PANE_BKGROUND;
- #define cbEVT_PL_CUSTOMIZE_BAR 24
- #define cbEVT_PL_CUSTOMIZE_LAYOUT 25
+extern wxEventType cbEVT_PL_START_BAR_DRAGGING;
+extern wxEventType cbEVT_PL_DRAW_HINT_RECT;
- #define wxCUSTOM_CB_PLUGIN_EVENTS_START_AT 100
+extern wxEventType cbEVT_PL_START_DRAW_IN_AREA;
+extern wxEventType cbEVT_PL_FINISH_DRAW_IN_AREA;
-#endif // wxCHECK_VERSION(2,3,0) else
+extern wxEventType cbEVT_PL_CUSTOMIZE_BAR;
+extern wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT;
-// forward decls, separated by categories
+extern wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT;
+
+// Forward declarations, separated by categories.
class cbLeftDownEvent;
class cbLeftUpEvent;
class cbCustomizeBarEvent;
class cbCustomizeLayoutEvent;
-// defs. for handler-methods
-
+// Definitions for for handler-methods.
+
typedef void (wxEvtHandler::*cbLeftDownHandler )(cbLeftDownEvent&);
typedef void (wxEvtHandler::*cbLeftUpHandler )(cbLeftUpEvent&);
typedef void (wxEvtHandler::*cbRightDownHandler )(cbRightDownEvent&);
typedef void (wxEvtHandler::*cbCustomizeBarHandler )(cbCustomizeBarEvent&);
typedef void (wxEvtHandler::*cbCustomizeLayoutHandler )(cbCustomizeLayoutEvent&);
-// macros for creating event table entries for plugin-events
-
-#if wxCHECK_VERSION(2,3,0)
- #define EVT_PL_LEFT_DOWN(func) wxEventTableEntry( cbEVT_PL_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDownHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_LEFT_UP(func) wxEventTableEntry( cbEVT_PL_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftUpHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_RIGHT_DOWN(func) wxEventTableEntry( cbEVT_PL_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightDownHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_RIGHT_UP(func) wxEventTableEntry( cbEVT_PL_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightUpHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_MOTION(func) wxEventTableEntry( cbEVT_PL_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbMotionHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_LEFT_DCLICK(func) wxEventTableEntry( cbEVT_PL_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDClickHandler ) & func, (wxObject *) NULL ),
-
- #define EVT_PL_LAYOUT_ROW(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_RESIZE_ROW(func) wxEventTableEntry( cbEVT_PL_RESIZE_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeRowHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_LAYOUT_ROWS(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROWS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowsHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_INSERT_BAR(func) wxEventTableEntry( cbEVT_PL_INSERT_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbInsertBarHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_RESIZE_BAR(func) wxEventTableEntry( cbEVT_PL_RESIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeBarHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_REMOVE_BAR(func) wxEventTableEntry( cbEVT_PL_REMOVE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRemoveBarHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_SIZE_BAR_WND(func) wxEventTableEntry( cbEVT_PL_SIZE_BAR_WND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbSizeBarWndHandler ) & func, (wxObject *) NULL ),
-
- #define EVT_PL_DRAW_BAR_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarDecorHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_ROW_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowDecorHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_PANE_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneDecorHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_BAR_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarHandlesHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_ROW_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowHandlesHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_ROW_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowBkGroundHandler ) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_PANE_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneBkGroundHandler) & func, (wxObject *) NULL ),
-
- #define EVT_PL_START_BAR_DRAGGING(func) wxEventTableEntry( cbEVT_PL_START_BAR_DRAGGING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartBarDraggingHandler) & func, (wxObject *) NULL ),
- #define EVT_PL_DRAW_HINT_RECT(func) wxEventTableEntry( cbEVT_PL_DRAW_HINT_RECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawHintRectHandler ) & func, (wxObject *) NULL ),
-
-
- #define EVT_PL_START_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_START_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartDrawInAreaHandler) & func, (wxObject *) NULL ),
- #define EVT_PL_FINISH_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_FINISH_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbFinishDrawInAreaHandler) & func, (wxObject *) NULL ),
-
- #define EVT_PL_CUSTOMIZE_BAR(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeBarHandler) & func, (wxObject *) NULL ),
- #define EVT_PL_CUSTOMIZE_LAYOUT(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeLayoutHandler) & func, (wxObject *) NULL ),
-#else
- #define EVT_PL_LEFT_DOWN(func) { cbEVT_PL_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDownHandler ) & func },
- #define EVT_PL_LEFT_UP(func) { cbEVT_PL_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftUpHandler ) & func },
- #define EVT_PL_RIGHT_DOWN(func) { cbEVT_PL_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightDownHandler ) & func },
- #define EVT_PL_RIGHT_UP(func) { cbEVT_PL_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightUpHandler ) & func },
- #define EVT_PL_MOTION(func) { cbEVT_PL_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbMotionHandler ) & func },
- #define EVT_PL_LEFT_DCLICK(func) { cbEVT_PL_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDClickHandler ) & func },
-
- #define EVT_PL_LAYOUT_ROW(func) { cbEVT_PL_LAYOUT_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowHandler ) & func },
- #define EVT_PL_RESIZE_ROW(func) { cbEVT_PL_RESIZE_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeRowHandler ) & func },
- #define EVT_PL_LAYOUT_ROWS(func) { cbEVT_PL_LAYOUT_ROWS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowsHandler ) & func },
- #define EVT_PL_INSERT_BAR(func) { cbEVT_PL_INSERT_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbInsertBarHandler ) & func },
- #define EVT_PL_RESIZE_BAR(func) { cbEVT_PL_RESIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeBarHandler ) & func },
- #define EVT_PL_REMOVE_BAR(func) { cbEVT_PL_REMOVE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRemoveBarHandler ) & func },
- #define EVT_PL_SIZE_BAR_WND(func) { cbEVT_PL_SIZE_BAR_WND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbSizeBarWndHandler ) & func },
-
- #define EVT_PL_DRAW_BAR_DECOR(func) { cbEVT_PL_DRAW_BAR_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarDecorHandler ) & func },
- #define EVT_PL_DRAW_ROW_DECOR(func) { cbEVT_PL_DRAW_ROW_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowDecorHandler ) & func },
- #define EVT_PL_DRAW_PANE_DECOR(func) { cbEVT_PL_DRAW_PANE_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneDecorHandler ) & func },
- #define EVT_PL_DRAW_BAR_HANDLES(func) { cbEVT_PL_DRAW_BAR_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarHandlesHandler ) & func },
- #define EVT_PL_DRAW_ROW_HANDLES(func) { cbEVT_PL_DRAW_ROW_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowHandlesHandler ) & func },
- #define EVT_PL_DRAW_ROW_BKGROUND(func) { cbEVT_PL_DRAW_ROW_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowBkGroundHandler ) & func },
- #define EVT_PL_DRAW_PANE_BKGROUND(func) { cbEVT_PL_DRAW_PANE_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneBkGroundHandler) & func },
-
- #define EVT_PL_START_BAR_DRAGGING(func) { cbEVT_PL_START_BAR_DRAGGING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartBarDraggingHandler) & func },
- #define EVT_PL_DRAW_HINT_RECT(func) { cbEVT_PL_DRAW_HINT_RECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawHintRectHandler ) & func },
-
- #define EVT_PL_START_DRAW_IN_AREA(func) { cbEVT_PL_START_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartDrawInAreaHandler) & func },
- #define EVT_PL_FINISH_DRAW_IN_AREA(func) { cbEVT_PL_FINISH_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbFinishDrawInAreaHandler) & func },
-
- #define EVT_PL_CUSTOMIZE_BAR(func) { cbEVT_PL_CUSTOMIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeBarHandler) & func },
- #define EVT_PL_CUSTOMIZE_LAYOUT(func) { cbEVT_PL_CUSTOMIZE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeLayoutHandler) & func },
-#endif
-/*
- * abstract base class for all control-bar related plugins
- */
+// Macros for creating event table entries for plugin-events.
+
+#define EVT_PL_LEFT_DOWN(func) wxEventTableEntry( cbEVT_PL_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDownHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_LEFT_UP(func) wxEventTableEntry( cbEVT_PL_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftUpHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_RIGHT_DOWN(func) wxEventTableEntry( cbEVT_PL_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightDownHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_RIGHT_UP(func) wxEventTableEntry( cbEVT_PL_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightUpHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_MOTION(func) wxEventTableEntry( cbEVT_PL_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbMotionHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_LEFT_DCLICK(func) wxEventTableEntry( cbEVT_PL_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDClickHandler ) & func, (wxObject *) NULL ),
+
+#define EVT_PL_LAYOUT_ROW(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_RESIZE_ROW(func) wxEventTableEntry( cbEVT_PL_RESIZE_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeRowHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_LAYOUT_ROWS(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROWS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowsHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_INSERT_BAR(func) wxEventTableEntry( cbEVT_PL_INSERT_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbInsertBarHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_RESIZE_BAR(func) wxEventTableEntry( cbEVT_PL_RESIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeBarHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_REMOVE_BAR(func) wxEventTableEntry( cbEVT_PL_REMOVE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRemoveBarHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_SIZE_BAR_WND(func) wxEventTableEntry( cbEVT_PL_SIZE_BAR_WND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbSizeBarWndHandler ) & func, (wxObject *) NULL ),
+
+#define EVT_PL_DRAW_BAR_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarDecorHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_ROW_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowDecorHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_PANE_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneDecorHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_BAR_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarHandlesHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_ROW_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowHandlesHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_ROW_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowBkGroundHandler ) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_PANE_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneBkGroundHandler) & func, (wxObject *) NULL ),
+
+#define EVT_PL_START_BAR_DRAGGING(func) wxEventTableEntry( cbEVT_PL_START_BAR_DRAGGING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartBarDraggingHandler) & func, (wxObject *) NULL ),
+#define EVT_PL_DRAW_HINT_RECT(func) wxEventTableEntry( cbEVT_PL_DRAW_HINT_RECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawHintRectHandler ) & func, (wxObject *) NULL ),
+
+
+#define EVT_PL_START_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_START_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartDrawInAreaHandler) & func, (wxObject *) NULL ),
+#define EVT_PL_FINISH_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_FINISH_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbFinishDrawInAreaHandler) & func, (wxObject *) NULL ),
+
+#define EVT_PL_CUSTOMIZE_BAR(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeBarHandler) & func, (wxObject *) NULL ),
+#define EVT_PL_CUSTOMIZE_LAYOUT(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeLayoutHandler) & func, (wxObject *) NULL ),
+
+/*
+Abstract base class for all control-bar related plugins.
+Note: pointer positions of mouse events sent to plugins
+are always in the pane's coordinates (the pane to which
+this plugin is hooked).
+*/
class cbPluginBase : public wxEvtHandler
{
- DECLARE_ABSTRACT_CLASS( cbPluginBase )
+ DECLARE_ABSTRACT_CLASS( cbPluginBase )
public:
+ // Back-reference to the frame layout.
+
+ wxFrameLayout* mpLayout;
- wxFrameLayout* mpLayout; // back-reference to the frame layout
+ // Specifies panes for which this plugin receives events
+ // (see pane masks definitions).
- // specifies panes, for which this plugin receives events
- // (see pane masks definitions)
- int mPaneMask;
+ int mPaneMask;
- bool mIsReady; // is TRUE, when plugin is ready to handle events
+ // Is true when plugin is ready to handle events.
+
+ bool mIsReady;
public:
- cbPluginBase(void)
+ // Default constructor.
- : mpLayout ( 0 ),
- mPaneMask( wxALL_PANES ),
- mIsReady ( FALSE )
- {}
+ cbPluginBase()
- cbPluginBase( wxFrameLayout* pPanel, int paneMask = wxALL_PANES )
+ : mpLayout ( 0 ),
+ mPaneMask( wxALL_PANES ),
+ mIsReady ( false )
+ {}
- : mpLayout ( pPanel ),
- mPaneMask( paneMask ),
- mIsReady ( FALSE )
- {}
+ // Constructor taking layout panel and a mask.
- inline int GetPaneMask() { return mPaneMask; }
+ cbPluginBase( wxFrameLayout* pPanel, int paneMask = wxALL_PANES )
- // NOTE:: pointer positions of mouse-events sent to plugins
- // are always in pane's coordinates (pane's to which
- // this plugin is hooked)
+ : mpLayout ( pPanel ),
+ mPaneMask( paneMask ),
+ mIsReady ( false )
+ {}
- // destroys the whole plugin chain of connected plagins
- virtual ~cbPluginBase();
+ // Returns the pane mask.
- // override this method to do plugin-specific initialization
- // (at this point plugin is already attached to the frame layout,
- // and pane masks are set)
- virtual void OnInitPlugin() { mIsReady = TRUE; }
+ inline int GetPaneMask() { return mPaneMask; }
- bool IsReady() { return mIsReady; }
+ // Destructor. Destroys the whole plugin chain of connected plugins.
- // overriden, to determine whether the target pane specified in the
- // event, matches the pane mask of this plugin (specific plugins
- // do not override this method)
+ virtual ~cbPluginBase();
- virtual bool ProcessEvent(wxEvent& event);
-};
+ // Override this method to do plugin-specific initialization.
+ // At this point plugin is already attached to the frame layout,
+ // and pane masks are set.
+
+ virtual void OnInitPlugin() { mIsReady = true; }
-/*** event classes, for each corresponding event type (24 currnetly...uhh) ***/
+ // Returns true if the plugin is ready to receive events.
-// mouse-events category
+ bool IsReady() { return mIsReady; }
+
+ // Overridden to determine whether the target pane specified in the
+ // event matches the pane mask of this plugin (specific plugins
+ // do not override this method).
+
+ virtual bool ProcessEvent(wxEvent& event);
+};
+
+/*
+Class for mouse left down events.
+*/
class cbLeftDownEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
- cbLeftDownEvent( const wxPoint& pos, cbDockPane* pPane )
+ // Constructor, taking mouse position and pane.
- : cbPluginEvent( cbEVT_PL_LEFT_DOWN, pPane ),
- mPos( pos )
- {}
+ cbLeftDownEvent( const wxPoint& pos, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_LEFT_DOWN, pPane ),
+ mPos( pos )
+ {}
};
+/*
+Class for mouse left up events.
+*/
+
class cbLeftUpEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
- cbLeftUpEvent( const wxPoint& pos, cbDockPane* pPane )
+ // Constructor, taking mouse position and pane.
- : cbPluginEvent( cbEVT_PL_LEFT_UP, pPane ),
- mPos( pos )
- {}
+ cbLeftUpEvent( const wxPoint& pos, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_LEFT_UP, pPane ),
+ mPos( pos )
+ {}
};
+/*
+Class for mouse right down events.
+*/
+
class cbRightDownEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
- cbRightDownEvent( const wxPoint& pos, cbDockPane* pPane )
+ // Constructor, taking mouse position and pane.
- : cbPluginEvent( cbEVT_PL_RIGHT_DOWN, pPane ),
- mPos( pos )
- {}
+ cbRightDownEvent( const wxPoint& pos, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_RIGHT_DOWN, pPane ),
+ mPos( pos )
+ {}
};
+/*
+Class for mouse right up events.
+*/
+
class cbRightUpEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
- cbRightUpEvent( const wxPoint& pos, cbDockPane* pPane )
+ // Constructor, taking mouse position and pane.
- : cbPluginEvent( cbEVT_PL_RIGHT_UP, pPane ),
- mPos( pos )
- {}
+ cbRightUpEvent( const wxPoint& pos, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_RIGHT_UP, pPane ),
+ mPos( pos )
+ {}
};
+/*
+Class for mouse motion events.
+*/
+
class cbMotionEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
+
+ // Constructor, taking mouse position and pane.
- cbMotionEvent( const wxPoint& pos, cbDockPane* pPane )
+ cbMotionEvent( const wxPoint& pos, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_MOTION, pPane ),
- mPos( pos )
- {}
+ : cbPluginEvent( cbEVT_PL_MOTION, pPane ),
+ mPos( pos )
+ {}
};
+/*
+Class for mouse left double click events.
+*/
+
class cbLeftDClickEvent : public cbPluginEvent
{
public:
- wxPoint mPos;
+ wxPoint mPos;
+
+ // Constructor, taking mouse position and pane.
- cbLeftDClickEvent( const wxPoint& pos, cbDockPane* pPane )
+ cbLeftDClickEvent( const wxPoint& pos, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_LEFT_DCLICK, pPane ),
- mPos( pos )
- {}
+ : cbPluginEvent( cbEVT_PL_LEFT_DCLICK, pPane ),
+ mPos( pos )
+ {}
};
-// bar/row events category
+/*
+Class for single row layout events.
+*/
class cbLayoutRowEvent : public cbPluginEvent
{
public:
- cbRowInfo* mpRow;
+ cbRowInfo* mpRow;
- cbLayoutRowEvent( cbRowInfo* pRow, cbDockPane* pPane )
+ // Constructor, taking row information and pane.
- : cbPluginEvent( cbEVT_PL_LAYOUT_ROW, pPane ),
- mpRow( pRow )
- {}
+ cbLayoutRowEvent( cbRowInfo* pRow, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_LAYOUT_ROW, pPane ),
+ mpRow( pRow )
+ {}
};
+/*
+Class for row resize events.
+*/
+
class cbResizeRowEvent : public cbPluginEvent
{
public:
- cbRowInfo* mpRow;
- int mHandleOfs;
- bool mForUpperHandle;
+ cbRowInfo* mpRow;
+ int mHandleOfs;
+ bool mForUpperHandle;
- cbResizeRowEvent( cbRowInfo* pRow, int handleOfs, bool forUpperHandle, cbDockPane* pPane )
+ // Constructor, taking row information, two parameters of currently unknown use, and pane.
- : cbPluginEvent( cbEVT_PL_RESIZE_ROW, pPane ),
- mpRow( pRow ),
- mHandleOfs( handleOfs ),
- mForUpperHandle( forUpperHandle )
- {}
+ cbResizeRowEvent( cbRowInfo* pRow, int handleOfs, bool forUpperHandle, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_RESIZE_ROW, pPane ),
+ mpRow( pRow ),
+ mHandleOfs( handleOfs ),
+ mForUpperHandle( forUpperHandle )
+ {}
};
+/*
+Class for multiple rows layout events.
+*/
+
class cbLayoutRowsEvent : public cbPluginEvent
{
public:
- cbLayoutRowsEvent( cbDockPane* pPane )
+ // Constructor, taking pane.
+
+ cbLayoutRowsEvent( cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_LAYOUT_ROWS, pPane )
- {}
+ : cbPluginEvent( cbEVT_PL_LAYOUT_ROWS, pPane )
+ {}
};
+/*
+Class for bar insertion events.
+*/
+
class cbInsertBarEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- cbRowInfo* mpRow;
+ cbBarInfo* mpBar;
+ cbRowInfo* mpRow;
+
+ // Constructor, taking bar information, row information, and pane.
- cbInsertBarEvent( cbBarInfo* pBar, cbRowInfo* pIntoRow, cbDockPane* pPane )
+ cbInsertBarEvent( cbBarInfo* pBar, cbRowInfo* pIntoRow, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_INSERT_BAR, pPane ),
+ : cbPluginEvent( cbEVT_PL_INSERT_BAR, pPane ),
- mpBar( pBar ),
- mpRow( pIntoRow )
- {}
+ mpBar( pBar ),
+ mpRow( pIntoRow )
+ {}
};
+/*
+Class for bar resize events.
+*/
+
class cbResizeBarEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- cbRowInfo* mpRow;
+ cbBarInfo* mpBar;
+ cbRowInfo* mpRow;
+
+ // Constructor, taking bar information, row information, and pane.
- cbResizeBarEvent( cbBarInfo* pBar, cbRowInfo* pRow, cbDockPane* pPane )
+ cbResizeBarEvent( cbBarInfo* pBar, cbRowInfo* pRow, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_RESIZE_BAR, pPane ),
- mpBar( pBar ),
- mpRow( pRow )
- {}
+ : cbPluginEvent( cbEVT_PL_RESIZE_BAR, pPane ),
+ mpBar( pBar ),
+ mpRow( pRow )
+ {}
};
+/*
+Class for bar removal events.
+*/
+
class cbRemoveBarEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
+ cbBarInfo* mpBar;
- cbRemoveBarEvent( cbBarInfo* pBar, cbDockPane* pPane )
+ // Constructor, taking bar information and pane.
- : cbPluginEvent( cbEVT_PL_REMOVE_BAR, pPane ),
- mpBar( pBar )
- {}
+ cbRemoveBarEvent( cbBarInfo* pBar, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_REMOVE_BAR, pPane ),
+ mpBar( pBar )
+ {}
};
+/*
+Class for bar window resize events.
+*/
+
class cbSizeBarWndEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- wxRect mBoundsInParent;
+ cbBarInfo* mpBar;
+ wxRect mBoundsInParent;
- cbSizeBarWndEvent( cbBarInfo* pBar, cbDockPane* pPane )
+ // Constructor, taking bar information and pane.
- : cbPluginEvent( cbEVT_PL_SIZE_BAR_WND, pPane ),
- mpBar( pBar ),
- mBoundsInParent( pBar->mBoundsInParent )
- {}
+ cbSizeBarWndEvent( cbBarInfo* pBar, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_SIZE_BAR_WND, pPane ),
+ mpBar( pBar ),
+ mBoundsInParent( pBar->mBoundsInParent )
+ {}
};
+/*
+Class for bar decoration drawing events.
+*/
+
class cbDrawBarDecorEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- wxDC* mpDc;
- wxRect mBoundsInParent;
+ cbBarInfo* mpBar;
+ wxDC* mpDc;
+ wxRect mBoundsInParent;
- cbDrawBarDecorEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
+ // Constructor, taking bar information, device context, and pane.
- : cbPluginEvent( cbEVT_PL_DRAW_BAR_DECOR, pPane ),
- mpBar( pBar ),
- mpDc( &dc ),
- mBoundsInParent( pBar->mBoundsInParent )
- {}
+ cbDrawBarDecorEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_DRAW_BAR_DECOR, pPane ),
+ mpBar( pBar ),
+ mpDc( &dc ),
+ mBoundsInParent( pBar->mBoundsInParent )
+ {}
};
+/*
+Class for row decoration drawing events.
+*/
+
class cbDrawRowDecorEvent : public cbPluginEvent
{
public:
- cbRowInfo* mpRow;
- wxDC* mpDc;
+ cbRowInfo* mpRow;
+ wxDC* mpDc;
- cbDrawRowDecorEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
+ // Constructor, taking row information, device context, and pane.
- : cbPluginEvent( cbEVT_PL_DRAW_ROW_DECOR, pPane ),
- mpRow( pRow ),
- mpDc( &dc )
- {}
+ cbDrawRowDecorEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_DRAW_ROW_DECOR, pPane ),
+ mpRow( pRow ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for pane decoration drawing events.
+*/
+
class cbDrawPaneDecorEvent : public cbPluginEvent
{
public:
- wxDC* mpDc;
+ wxDC* mpDc;
+
+ // Constructor, taking device context and pane.
- cbDrawPaneDecorEvent( wxDC& dc, cbDockPane* pPane )
+ cbDrawPaneDecorEvent( wxDC& dc, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_DRAW_PANE_DECOR, pPane ),
- mpDc( &dc )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_PANE_DECOR, pPane ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for bar handles drawing events.
+*/
+
class cbDrawBarHandlesEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- wxDC* mpDc;
+ cbBarInfo* mpBar;
+ wxDC* mpDc;
+
+ // Constructor, taking bar information, device context, and pane.
- cbDrawBarHandlesEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
+ cbDrawBarHandlesEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_DRAW_BAR_HANDLES, pPane ),
- mpBar( pBar ),
- mpDc( &dc )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_BAR_HANDLES, pPane ),
+ mpBar( pBar ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for row handles drawing events.
+*/
+
class cbDrawRowHandlesEvent : public cbPluginEvent
{
public:
- cbRowInfo* mpRow;
- wxDC* mpDc;
+ cbRowInfo* mpRow;
+ wxDC* mpDc;
+
+ // Constructor, taking row information, device context, and pane.
- cbDrawRowHandlesEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
+ cbDrawRowHandlesEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_DRAW_ROW_HANDLES, pPane ),
- mpRow( pRow ),
- mpDc( &dc )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_ROW_HANDLES, pPane ),
+ mpRow( pRow ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for row background drawing events.
+*/
+
class cbDrawRowBkGroundEvent : public cbPluginEvent
{
public:
- cbRowInfo* mpRow;
- wxDC* mpDc;
+ cbRowInfo* mpRow;
+ wxDC* mpDc;
+
+ // Constructor, taking row information, device context, and pane.
- cbDrawRowBkGroundEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
+ cbDrawRowBkGroundEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_DRAW_ROW_BKGROUND, pPane ),
- mpRow( pRow ),
- mpDc( &dc )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_ROW_BKGROUND, pPane ),
+ mpRow( pRow ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for pane background drawing events.
+*/
+
class cbDrawPaneBkGroundEvent : public cbPluginEvent
{
public:
- wxDC* mpDc;
+ wxDC* mpDc;
+
+ // Constructor, taking device context and pane.
- cbDrawPaneBkGroundEvent( wxDC& dc, cbDockPane* pPane )
+ cbDrawPaneBkGroundEvent( wxDC& dc, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_DRAW_PANE_BKGROUND, pPane ),
- mpDc( &dc )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_PANE_BKGROUND, pPane ),
+ mpDc( &dc )
+ {}
};
+/*
+Class for start-bar-dragging events.
+*/
+
class cbStartBarDraggingEvent : public cbPluginEvent
{
public:
- cbBarInfo* mpBar;
- wxPoint mPos; // is given in frame's coordinates
+ cbBarInfo* mpBar;
+ wxPoint mPos; // is given in frame's coordinates
+
+ // Constructor, taking bar information, mouse position, and pane.
- cbStartBarDraggingEvent( cbBarInfo* pBar, const wxPoint& pos, cbDockPane* pPane )
+ cbStartBarDraggingEvent( cbBarInfo* pBar, const wxPoint& pos, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_START_BAR_DRAGGING, pPane ),
- mpBar( pBar ),
- mPos( pos )
- {}
+ : cbPluginEvent( cbEVT_PL_START_BAR_DRAGGING, pPane ),
+ mpBar( pBar ),
+ mPos( pos )
+ {}
};
+/*
+Class for hint-rectangle drawing events.
+*/
+
class cbDrawHintRectEvent : public cbPluginEvent
{
public:
- wxRect mRect; // is given in frame's coordinates
+ wxRect mRect; // is given in frame's coordinates
+
+ bool mLastTime; // indicates that this event finishes "session" of on-screen drawing,
+ // thus associated resources can be freed now
+ bool mEraseRect; // does not have any impact, if recangle is drawn using XOR-mask
- bool mLastTime; // indicates that this event finishes "session" of on-screen drawing,
- // thus associated resources can be freed now
- bool mEraseRect; // does not have any impact, if recangle is drawn using XOR-mask
+ bool mIsInClient;// in cleint area hint could be drawn differently,
+ // e.g. with fat/hatched border
- bool mIsInClient;// in cleint area hint could be drawn differently,
- // e.g. with fat/hatched border
+ // Constructor, taking hint rectangle and three flags.
- cbDrawHintRectEvent( const wxRect& rect, bool isInClient, bool eraseRect, bool lastTime )
+ cbDrawHintRectEvent( const wxRect& rect, bool isInClient, bool eraseRect, bool lastTime )
- : cbPluginEvent( cbEVT_PL_DRAW_HINT_RECT, 0 ),
- mRect ( rect ),
- mLastTime ( lastTime ),
- mEraseRect ( eraseRect ),
- mIsInClient( isInClient )
- {}
+ : cbPluginEvent( cbEVT_PL_DRAW_HINT_RECT, 0 ),
+ mRect ( rect ),
+ mLastTime ( lastTime ),
+ mEraseRect ( eraseRect ),
+ mIsInClient( isInClient )
+ {}
};
+/*
+Class for start drawing in area events.
+*/
+
class cbStartDrawInAreaEvent : public cbPluginEvent
{
public:
- wxRect mArea;
- wxDC** mppDc; // points to pointer, where the reference
- // to the obtained buffer-context should be placed
+ wxRect mArea;
+ wxDC** mppDc; // points to pointer, where the reference
+ // to the obtained buffer-context should be placed
- cbStartDrawInAreaEvent( const wxRect& area, wxDC** ppDCForArea, cbDockPane* pPane )
+ // Constructor, taking rectangular area, device context pointer to a pointer, and pane.
- : cbPluginEvent( cbEVT_PL_START_DRAW_IN_AREA, pPane ),
- mArea( area ),
- mppDc( ppDCForArea )
- {}
+ cbStartDrawInAreaEvent( const wxRect& area, wxDC** ppDCForArea, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_START_DRAW_IN_AREA, pPane ),
+ mArea( area ),
+ mppDc( ppDCForArea )
+ {}
};
+/*
+Class for finish drawing in area events.
+*/
+
class cbFinishDrawInAreaEvent : public cbPluginEvent
{
public:
- wxRect mArea;
+ wxRect mArea;
- cbFinishDrawInAreaEvent( const wxRect& area, cbDockPane* pPane )
+ // Constructor, taking rectangular area and pane.
- : cbPluginEvent( cbEVT_PL_FINISH_DRAW_IN_AREA, pPane ),
- mArea( area )
- {}
+ cbFinishDrawInAreaEvent( const wxRect& area, cbDockPane* pPane )
+
+ : cbPluginEvent( cbEVT_PL_FINISH_DRAW_IN_AREA, pPane ),
+ mArea( area )
+ {}
};
+/*
+Class for bar customization events.
+*/
+
class cbCustomizeBarEvent : public cbPluginEvent
{
public:
- wxPoint mClickPos; // in parent frame's coordinates
- cbBarInfo* mpBar;
+ wxPoint mClickPos; // in parent frame's coordinates
+ cbBarInfo* mpBar;
+
+ // Constructor, taking bar information, mouse position, and pane.
- cbCustomizeBarEvent( cbBarInfo* pBar, const wxPoint& clickPos, cbDockPane* pPane )
+ cbCustomizeBarEvent( cbBarInfo* pBar, const wxPoint& clickPos, cbDockPane* pPane )
- : cbPluginEvent( cbEVT_PL_CUSTOMIZE_BAR, pPane ),
- mClickPos( clickPos ),
- mpBar( pBar )
- {}
+ : cbPluginEvent( cbEVT_PL_CUSTOMIZE_BAR, pPane ),
+ mClickPos( clickPos ),
+ mpBar( pBar )
+ {}
};
+/*
+Class for layout customization events.
+*/
+
class cbCustomizeLayoutEvent : public cbPluginEvent
{
public:
- wxPoint mClickPos; // in parent frame's coordinates
+ wxPoint mClickPos; // in parent frame's coordinates
+
+ // Constructor, taking mouse position.
- cbCustomizeLayoutEvent( const wxPoint& clickPos )
+ cbCustomizeLayoutEvent( const wxPoint& clickPos )
- : cbPluginEvent( cbEVT_PL_CUSTOMIZE_LAYOUT, 0 ),
- mClickPos( clickPos )
- {}
+ : cbPluginEvent( cbEVT_PL_CUSTOMIZE_LAYOUT, 0 ),
+ mClickPos( clickPos )
+ {}
};
#endif /* __CONTROLBAR_G__ */