8907154c1a
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35650 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2271 lines
69 KiB
C++
2271 lines
69 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: controlbar.h
|
|
// Purpose: Central header file for control-bar related classes
|
|
//
|
|
// Author: Aleksandras Gluchovas <mailto:alex@soften.ktu.lt>
|
|
// Modified by:
|
|
// Created: 06/09/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Aleksandras Gluchovas
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __CONTROLBAR_G__
|
|
#define __CONTROLBAR_G__
|
|
|
|
#include "wx/defs.h"
|
|
#include "wx/string.h"
|
|
#include "wx/pen.h"
|
|
#include "wx/window.h"
|
|
#include "wx/dynarray.h"
|
|
#include "wx/fl/fldefs.h"
|
|
|
|
#define WXCONTROLBAR_VERSION 1.3
|
|
|
|
// forward declarations
|
|
|
|
class WXDLLIMPEXP_FL wxFrameLayout;
|
|
|
|
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 WXDLLIMPEXP_FL cbBarInfo;
|
|
class WXDLLIMPEXP_FL cbRowInfo;
|
|
class WXDLLIMPEXP_FL cbDimInfo;
|
|
class WXDLLIMPEXP_FL cbCommonPaneProperties;
|
|
|
|
typedef cbBarInfo* BarInfoPtrT;
|
|
typedef cbRowInfo* RowInfoPtrT;
|
|
|
|
WXFL_DEFINE_ARRAY_PTR( BarInfoPtrT, BarArrayT );
|
|
WXFL_DEFINE_ARRAY_PTR( RowInfoPtrT, RowArrayT );
|
|
|
|
// control bar states
|
|
|
|
#define wxCBAR_DOCKED_HORIZONTALLY 0
|
|
#define wxCBAR_DOCKED_VERTICALLY 1
|
|
#define wxCBAR_FLOATING 2
|
|
#define wxCBAR_HIDDEN 3
|
|
|
|
// the states are enumerated above
|
|
#define MAX_BAR_STATES 4
|
|
|
|
// control bar alignments
|
|
|
|
#if !defined(FL_ALIGN_TOP)
|
|
|
|
#define FL_ALIGN_TOP 0
|
|
#define FL_ALIGN_BOTTOM 1
|
|
#define FL_ALIGN_LEFT 2
|
|
#define FL_ALIGN_RIGHT 3
|
|
|
|
#endif
|
|
|
|
// one pane for each alignment
|
|
#define MAX_PANES 4
|
|
|
|
// masks for each pane
|
|
|
|
#define FL_ALIGN_TOP_PANE 0x0001
|
|
#define FL_ALIGN_BOTTOM_PANE 0x0002
|
|
#define FL_ALIGN_LEFT_PANE 0x0004
|
|
#define FL_ALIGN_RIGHT_PANE 0x0008
|
|
|
|
#define wxALL_PANES 0x000F
|
|
|
|
// enumeration of hittest results, see cbDockPane::HitTestPaneItems(..)
|
|
|
|
enum CB_HITTEST_RESULT
|
|
{
|
|
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
|
|
};
|
|
|
|
/*
|
|
Helper class, used for spying for unhandled mouse events on control bars
|
|
and forwarding them to the frame layout.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_FL cbBarSpy : public wxEvtHandler
|
|
{
|
|
public:
|
|
DECLARE_DYNAMIC_CLASS( cbBarSpy )
|
|
|
|
wxFrameLayout* mpLayout;
|
|
wxWindow* mpBarWnd;
|
|
|
|
public:
|
|
// Default constructor.
|
|
|
|
cbBarSpy(void);
|
|
|
|
// Constructor, taking a parent pane.
|
|
|
|
cbBarSpy( wxFrameLayout* pPanel );
|
|
|
|
// Sets the bar window.
|
|
|
|
void SetBarWindow( wxWindow* pWnd );
|
|
|
|
// Performs special event processing.
|
|
|
|
virtual bool ProcessEvent(wxEvent& event);
|
|
};
|
|
|
|
/*
|
|
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 WXDLLIMPEXP_FL wxFrameLayout : public wxEvtHandler
|
|
{
|
|
public:
|
|
// 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();
|
|
|
|
// 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.
|
|
|
|
void SetFrameClient( wxWindow* pFrameClient );
|
|
|
|
// Returns the frame client, or NULL if not present.
|
|
|
|
wxWindow* GetFrameClient();
|
|
|
|
// Returns the parent frame.
|
|
|
|
wxWindow& GetParentFrame() { return *mpFrame; }
|
|
|
|
// Returns an array of panes. Used by update managers.
|
|
|
|
cbDockPane** GetPanesArray() { return mPanes; }
|
|
|
|
// Returns a pane for the given alignment. See pane alignment types.
|
|
|
|
cbDockPane* GetPane( int alignment )
|
|
|
|
{ return mPanes[alignment]; }
|
|
|
|
// 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.
|
|
|
|
// pBarWnd is the window to be managed.
|
|
|
|
// dimInfo contains dimension information.
|
|
|
|
// alignment is a value such as FL_ALIGN_TOP.
|
|
|
|
// rowNo is the vertical position or row in the pane (if in docked state).
|
|
|
|
// columnPos is the horizontal position within the row in pixels (if in docked state).
|
|
|
|
// name is a name by which the bar can be referred in layout customization dialogs.
|
|
|
|
// 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,
|
|
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.
|
|
|
|
int GetClientHeight();
|
|
|
|
// Returns the client width.
|
|
|
|
int GetClientWidth();
|
|
|
|
// Returns the client's rectangle.
|
|
|
|
wxRect& GetClientRect() { return mClntWndBounds; }
|
|
|
|
// Returns a reference to the updates manager.
|
|
// Note: in future, the updates manager will become a normal plugin.
|
|
|
|
cbUpdatesManagerBase& GetUpdatesManager();
|
|
|
|
// Destroys the previous manager if any, and sets the new one.
|
|
|
|
void SetUpdatesManager( cbUpdatesManagerBase* pUMgr );
|
|
|
|
// Gets the pane properties for the given alignment.
|
|
|
|
virtual void GetPaneProperties( cbCommonPaneProperties& props, int alignment = FL_ALIGN_TOP );
|
|
|
|
// Sets the pane properties for the given alignment.
|
|
// Note: changing properties of panes does not result immediate on-screen update.
|
|
|
|
virtual void SetPaneProperties( const cbCommonPaneProperties& props,
|
|
int paneMask = wxALL_PANES );
|
|
|
|
// 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.
|
|
|
|
virtual void SetMargins( int top, int bottom, int left, int right,
|
|
int paneMask = wxALL_PANES );
|
|
|
|
// Sets the pane background colour.
|
|
|
|
virtual void SetPaneBackground( const wxColour& colour );
|
|
|
|
// Recalculates layout and performs on-screen update of all panes.
|
|
|
|
void RefreshNow( bool recalcLayout = true );
|
|
|
|
// Event handler for a size event.
|
|
|
|
void OnSize ( wxSizeEvent& event );
|
|
|
|
// Event handler for a left down button event.
|
|
|
|
void OnLButtonDown( wxMouseEvent& event );
|
|
|
|
// Event handler for a left doubleclick button event.
|
|
|
|
void OnLDblClick ( wxMouseEvent& event );
|
|
|
|
// Event handler for a left button up event.
|
|
|
|
void OnLButtonUp ( wxMouseEvent& event );
|
|
|
|
// Event handler for a right button down event.
|
|
|
|
void OnRButtonDown( wxMouseEvent& event );
|
|
|
|
// Event handler for a right button up event.
|
|
|
|
void OnRButtonUp ( wxMouseEvent& event );
|
|
|
|
// Event handler for a mouse move event.
|
|
|
|
void OnMouseMove ( wxMouseEvent& event );
|
|
|
|
// 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.
|
|
|
|
virtual void FirePluginEvent( cbPluginEvent& event );
|
|
|
|
// Captures user input events for the given plugin.
|
|
// Input events are: mouse movement, mouse clicks, keyboard input.
|
|
|
|
virtual void CaptureEventsForPlugin ( cbPluginBase* pPlugin );
|
|
|
|
// Releases user input events for the given plugin.
|
|
// Input events are: mouse movement, mouse clicks, keyboard input
|
|
|
|
virtual void ReleaseEventsFromPlugin( cbPluginBase* pPlugin );
|
|
|
|
// Called by plugins; also captures the mouse in the parent frame.
|
|
|
|
void CaptureEventsForPane( cbDockPane* toPane );
|
|
|
|
// Called by plugins; also releases mouse in the parent frame.
|
|
|
|
void ReleaseEventsFromPane( cbDockPane* fromPane );
|
|
|
|
// Returns the current top-level plugin (the one that receives events first,
|
|
// except if input events are currently captured by some other plugin).
|
|
|
|
virtual cbPluginBase& GetTopPlugin();
|
|
|
|
// 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.
|
|
|
|
virtual void SetTopPlugin( cbPluginBase* pPlugin );
|
|
|
|
// Similar to wxWindow's "push/pop-event-handler" methods, execept
|
|
// that the plugin is deleted upon "popping".
|
|
|
|
virtual void PushPlugin( cbPluginBase* pPugin );
|
|
|
|
// Similar to wxWindow's "push/pop-event-handler" methods, execept
|
|
// that the plugin is deleted upon "popping".
|
|
|
|
virtual void PopPlugin();
|
|
|
|
// Pop all plugins.
|
|
virtual void PopAllPlugins();
|
|
|
|
// 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.
|
|
|
|
virtual void PushDefaultPlugins();
|
|
|
|
// 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;
|
|
|
|
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
|
|
|
|
// 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 mNullPen; // transparent pen
|
|
|
|
// pane to which the all mouse input is currently directed (caputred)
|
|
|
|
cbDockPane* mpPaneInFocus;
|
|
|
|
// pane, from which mouse pointer had just left
|
|
|
|
cbDockPane* mpLRUPane;
|
|
|
|
// bounds of client window in parent frame's coordinates
|
|
|
|
wxRect mClntWndBounds;
|
|
wxRect mPrevClntWndBounds;
|
|
|
|
bool mFloatingOn;
|
|
wxPoint mNextFloatedWndPos;
|
|
wxSize mFloatingPosStep;
|
|
|
|
// current plugin (right-most) plugin which receives events first
|
|
|
|
cbPluginBase* mpTopPlugin;
|
|
|
|
// plugin, which currently has captured all input events, otherwise NULL
|
|
|
|
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
|
|
|
|
wxList mBarSpyList;
|
|
|
|
// list of top-most frames which contain floated bars
|
|
|
|
wxList mFloatedFrames;
|
|
|
|
// linked list of references to all bars (docked/floated/hidden)
|
|
|
|
BarArrayT mAllBars;
|
|
|
|
// FOR NOW:: dirty stuff...
|
|
bool mClientWndRefreshPending;
|
|
bool mRecalcPending;
|
|
bool mCheckFocusWhenIdle;
|
|
|
|
public: /* protected really (accessed only by plugins) */
|
|
|
|
// 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 );
|
|
|
|
// Returns the previous client window rectangle.
|
|
|
|
wxRect& GetPrevClientRect() { return mPrevClntWndBounds; }
|
|
|
|
// Handles paint events, calling PaintPane for each pane.
|
|
|
|
void OnPaint( wxPaintEvent& event );
|
|
|
|
// Handles background erase events. Currently does nothing.
|
|
|
|
void OnEraseBackground( wxEraseEvent& event );
|
|
|
|
// Handles focus kill events. Currently does nothing.
|
|
|
|
void OnKillFocus( wxFocusEvent& event );
|
|
|
|
// Handles focus set events. Currently does nothing.
|
|
|
|
void OnSetFocus( wxFocusEvent& event );
|
|
|
|
// Handles activation events. Currently does nothing.
|
|
|
|
void OnActivate( wxActivateEvent& event );
|
|
|
|
// Handles idle events.
|
|
|
|
void OnIdle( wxIdleEvent& event );
|
|
|
|
// Returns a new cbGCUpdatesMgr object.
|
|
|
|
virtual cbUpdatesManagerBase* CreateUpdatesManager();
|
|
};
|
|
|
|
/*
|
|
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 WXDLLIMPEXP_FL cbUpdateMgrData : public wxObject
|
|
{
|
|
DECLARE_DYNAMIC_CLASS( cbUpdateMgrData )
|
|
public:
|
|
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.
|
|
|
|
// Default constructor. Is-dirty flag is set true initially.
|
|
|
|
cbUpdateMgrData();
|
|
|
|
// Store the item state.
|
|
|
|
void StoreItemState( const wxRect& boundsInParent );
|
|
|
|
// Set the dirty flag.
|
|
|
|
void SetDirty( bool isDirty = true );
|
|
|
|
// Set custom data.
|
|
|
|
void SetCustomData( wxObject* pCustomData );
|
|
|
|
// Returns the is-dirty flag.
|
|
|
|
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 )
|
|
|
|
public:
|
|
int mRefCount; // since one dim-handler can be assigned
|
|
// to multiple bars, it's instance is
|
|
// reference-counted
|
|
public:
|
|
|
|
// Default constructor. The initial reference count is 0, since
|
|
// the handler is not used until the first invocation of AddRef().
|
|
|
|
cbBarDimHandlerBase();
|
|
|
|
// Increments the reference count.
|
|
|
|
void AddRef();
|
|
|
|
// Decrements the reference count, and if the count is at zero,
|
|
// delete 'this'.
|
|
|
|
void RemoveRef();
|
|
|
|
// Responds to "bar-state-changes" notifications.
|
|
|
|
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 )
|
|
public:
|
|
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
|
|
|
|
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
|
|
|
|
int mVertGap;
|
|
|
|
// 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
|
|
|
|
// 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;
|
|
|
|
cbBarDimHandlerBase* mpHandler; // NULL, if no handler present
|
|
|
|
public:
|
|
|
|
// 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,
|
|
|
|
cbBarDimHandlerBase* pDimHandler = NULL
|
|
);
|
|
|
|
// Constructor.
|
|
|
|
cbDimInfo( int x, int y,
|
|
bool isFixed = true,
|
|
int gap = 6,
|
|
cbBarDimHandlerBase* pDimHandler = NULL
|
|
);
|
|
|
|
// Destructor. Destroys handler automatically, if present.
|
|
|
|
~cbDimInfo();
|
|
|
|
// Assignment operator.
|
|
|
|
const cbDimInfo& operator=( const cbDimInfo& other );
|
|
|
|
// Returns the handler, if any.
|
|
|
|
inline cbBarDimHandlerBase* GetDimHandler() { return mpHandler; }
|
|
};
|
|
|
|
// 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 )
|
|
public:
|
|
|
|
BarArrayT mBars; // row content
|
|
|
|
// row flags (set up according to row-relations)
|
|
|
|
bool mHasUpperHandle;
|
|
bool mHasLowerHandle;
|
|
bool mHasOnlyFixedBars;
|
|
int mNotFixedBarsCnt;
|
|
|
|
int mRowWidth;
|
|
int mRowHeight;
|
|
int mRowY;
|
|
|
|
// stores precalculated row's bounds in parent frame's coordinates
|
|
wxRect mBoundsInParent;
|
|
|
|
// info stored for updates-manager
|
|
cbUpdateMgrData mUMgrData;
|
|
|
|
cbRowInfo* mpNext;
|
|
cbRowInfo* mpPrev;
|
|
|
|
cbBarInfo* mpExpandedBar; // NULL, if non of the bars is currently expanded
|
|
|
|
cbArrayFloat mSavedRatios; // length-ratios bofore some of the bars was expanded
|
|
|
|
public:
|
|
// Constructor.
|
|
|
|
cbRowInfo(void);
|
|
|
|
// Destructor.
|
|
|
|
~cbRowInfo();
|
|
|
|
// Returns the first bar.
|
|
|
|
inline cbBarInfo* GetFirstBar()
|
|
|
|
{ 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 )
|
|
public:
|
|
// textual name, by which this bar is referred in layout-customization dialogs
|
|
wxString mName;
|
|
|
|
// stores bar's bounds in pane's coordinates
|
|
wxRect mBounds;
|
|
|
|
// stores precalculated bar's bounds in parent frame's coordinates
|
|
wxRect mBoundsInParent;
|
|
|
|
// 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;
|
|
|
|
// 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)
|
|
|
|
int mAlignment; // alignment of the pane to which this
|
|
// bar is currently placed
|
|
|
|
int mRowNo; // row, into which this bar would be placed,
|
|
// when in the docking state
|
|
|
|
wxWindow* mpBarWnd; // the actual window object, NULL if no window
|
|
// is attached to the control bar (possible!)
|
|
|
|
double mLenRatio; // length ratio among not-fixed-size bars
|
|
|
|
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:
|
|
// Constructor.
|
|
|
|
cbBarInfo(void);
|
|
|
|
// Destructor.
|
|
|
|
~cbBarInfo();
|
|
|
|
// Returns true if this bar is fixed.
|
|
|
|
inline bool IsFixed() const { return mDimInfo.mIsFixed; }
|
|
|
|
// Returns true if this bar is expanded.
|
|
|
|
inline bool IsExpanded() const { return this == mpRow->mpExpandedBar; }
|
|
};
|
|
|
|
/*
|
|
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;
|
|
};
|
|
|
|
/*
|
|
Used for traversing through all bars of all rows in the pane.
|
|
*/
|
|
|
|
class wxBarIterator
|
|
{
|
|
RowArrayT* mpRows;
|
|
cbRowInfo* mpRow;
|
|
cbBarInfo* mpBar;
|
|
|
|
public:
|
|
// 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();
|
|
|
|
// Returns a reference to the currently traversed row.
|
|
|
|
cbRowInfo& RowInfo();
|
|
};
|
|
|
|
/*
|
|
A structure holding configuration options,
|
|
which are usually the same for all panes in
|
|
a frame layout.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_FL cbCommonPaneProperties : public wxObject
|
|
{
|
|
DECLARE_DYNAMIC_CLASS( cbCommonPaneProperties )
|
|
|
|
// look-and-feel configuration
|
|
|
|
bool mRealTimeUpdatesOn; // default: ON
|
|
bool mOutOfPaneDragOn; // default: ON
|
|
bool mExactDockPredictionOn; // default: OFF
|
|
bool mNonDestructFrictionOn; // default: OFF
|
|
|
|
bool mShow3DPaneBorderOn; // default: ON
|
|
|
|
// FOR NOW:: the below properties are reserved for the "future"
|
|
|
|
bool mBarFloatingOn; // default: OFF
|
|
bool mRowProportionsOn; // default: OFF
|
|
bool mColProportionsOn; // default: ON
|
|
bool mBarCollapseIconsOn; // default: OFF
|
|
bool mBarDragHintsOn; // default: OFF
|
|
|
|
// minimal dimensions for not-fixed bars in this pane (16x16 default)
|
|
|
|
wxSize mMinCBarDim;
|
|
|
|
// width/height of resizing sash
|
|
|
|
int mResizeHandleSize;
|
|
|
|
// Default constructor.
|
|
|
|
cbCommonPaneProperties(void);
|
|
|
|
// Copy constructor
|
|
|
|
cbCommonPaneProperties(const cbCommonPaneProperties&);
|
|
|
|
// Assignment operator
|
|
|
|
cbCommonPaneProperties& operator=(const cbCommonPaneProperties&);
|
|
};
|
|
|
|
/*
|
|
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 )
|
|
|
|
// look-and-feel configuration for this pane
|
|
cbCommonPaneProperties mProps;
|
|
|
|
// 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
|
|
|
|
public:
|
|
// position of the pane in frame's coordinates
|
|
wxRect mBoundsInParent;
|
|
|
|
// pane width and height in pane's coordinates
|
|
int mPaneWidth;
|
|
int mPaneHeight;
|
|
|
|
int mAlignment;
|
|
|
|
// info stored for updates-manager
|
|
cbUpdateMgrData mUMgrData;
|
|
|
|
public: /* protected really */
|
|
|
|
RowArrayT mRows;
|
|
wxFrameLayout* mpLayout; // back-ref
|
|
|
|
// transient properties
|
|
|
|
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;
|
|
|
|
public: /* protected really (accessed only by plugins) */
|
|
|
|
// 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 );
|
|
|
|
// Returns true if there are any variable-sized rows above this one.
|
|
// Internal function called by plugins.
|
|
|
|
bool HasNotFixedRowsAbove( cbRowInfo* pRow );
|
|
|
|
// Returns true if there are any variable-sized rows below this one.
|
|
// Internal function called by plugins.
|
|
|
|
bool HasNotFixedRowsBelow( cbRowInfo* pRow );
|
|
|
|
// Returns true if there are any variable-sized rows to the left of this one.
|
|
// Internal function called by plugins.
|
|
|
|
bool HasNotFixedBarsLeft ( cbBarInfo* pBar );
|
|
|
|
// Returns true if there are any variable-sized rows to the right of this one.
|
|
// Internal function called by plugins.
|
|
|
|
bool HasNotFixedBarsRight( cbBarInfo* pBar );
|
|
|
|
// Calculate lengths.
|
|
// Internal function called by plugins.
|
|
|
|
virtual void CalcLengthRatios( cbRowInfo* pInRow );
|
|
|
|
// Generates a cbLayoutRowEvent event to recalculate row layouts.
|
|
// Internal function called by plugins.
|
|
|
|
virtual void RecalcRowLayout( cbRowInfo* pRow );
|
|
|
|
// Expands the bar.
|
|
// Internal function called by plugins.
|
|
|
|
virtual void ExpandBar( cbBarInfo* pBar );
|
|
|
|
// Contracts the bar.
|
|
// Internal function called by plugins.
|
|
|
|
virtual void ContractBar( cbBarInfo* pBar );
|
|
|
|
// 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) */
|
|
|
|
// 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 */
|
|
|
|
// 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.
|
|
|
|
virtual void RemoveRow( cbRowInfo* pRow );
|
|
|
|
// 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 void InsertRow( cbRowInfo* pRow, cbRowInfo* pBeforeRow );
|
|
|
|
// Sets pane's width in the pane's coordinates (including margins).
|
|
|
|
void SetPaneWidth(int width);
|
|
|
|
// Set the position and dimensions of the pane in the parent frame's coordinates.
|
|
|
|
void SetBoundsInParent( const wxRect& rect );
|
|
|
|
// Returns the bounds of the pane, in parent coordinates.
|
|
|
|
inline wxRect& GetRealRect() { return mBoundsInParent; }
|
|
|
|
// Returns an array of rows. Used by updates-managers.
|
|
|
|
inline RowArrayT& GetRowList() { return mRows; }
|
|
|
|
// Returns the first row.
|
|
|
|
inline cbRowInfo* GetFirstRow()
|
|
|
|
{ return mRows.GetCount() ? mRows[0] : NULL; }
|
|
|
|
// Returns true if the given bar is present in this pane.
|
|
|
|
bool BarPresent( cbBarInfo* pBar );
|
|
|
|
// Returns the height in the pane's coordinates.
|
|
|
|
int GetPaneHeight();
|
|
|
|
// Returns the alignment for this pane. The value is one of
|
|
// FL_ALIGN_TOP, FL_ALIGN_BOTTOM, FL_ALIGN_LEFT, FL_ALIGN_RIGHT.
|
|
|
|
int GetAlignment();
|
|
|
|
// Returns true if the given mask matches the pane's mask.
|
|
|
|
bool MatchesMask( int paneMask );
|
|
|
|
// Returns true if the pane is aligned to the top or bottom.
|
|
|
|
inline bool IsHorizontal()
|
|
{
|
|
return (mAlignment == FL_ALIGN_TOP ||
|
|
mAlignment == FL_ALIGN_BOTTOM );
|
|
}
|
|
|
|
// Generates events to perform layout calculations.
|
|
|
|
virtual void RecalcLayout();
|
|
|
|
// Returns wxCBAR_DOCKED_HORIZONTALLY if the alignment is top or bottom,
|
|
// or wxCBAR_DOCKED_VERTICALLY otherwise.
|
|
|
|
virtual int GetDockingState();
|
|
|
|
// 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-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 ResizeRow( cbRowInfo* pRow, int ofs, bool forUpperHandle );
|
|
|
|
// Row/bar resizing related helper-method.
|
|
|
|
void ResizeBar( cbBarInfo* pBar, int ofs, bool forLeftHandle );
|
|
|
|
// 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.
|
|
|
|
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 );
|
|
};
|
|
|
|
/*
|
|
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 WXDLLIMPEXP_FL cbUpdatesManagerBase : public wxObject
|
|
{
|
|
DECLARE_ABSTRACT_CLASS( cbUpdatesManagerBase )
|
|
|
|
public: /* protected really, accessed by serializer (if any) */
|
|
|
|
wxFrameLayout* mpLayout;
|
|
|
|
public:
|
|
// Default constructor
|
|
|
|
cbUpdatesManagerBase(void)
|
|
: mpLayout( 0 ) {}
|
|
|
|
// Constructor taking layout panel.
|
|
|
|
cbUpdatesManagerBase( wxFrameLayout* pPanel )
|
|
: mpLayout( pPanel ) {}
|
|
|
|
// Destructor.
|
|
|
|
virtual ~cbUpdatesManagerBase() {}
|
|
|
|
// Sets the associated layout.
|
|
|
|
void SetLayout( wxFrameLayout* pLayout ) { mpLayout = pLayout; }
|
|
|
|
// 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.
|
|
|
|
virtual void OnStartChanges() = 0;
|
|
|
|
// 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.
|
|
|
|
virtual void OnRowWillChange( cbRowInfo* WXUNUSED(pRow), cbDockPane* WXUNUSED(pInPane) ) {}
|
|
|
|
// 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.
|
|
|
|
virtual void OnBarWillChange( cbBarInfo* WXUNUSED(pBar), cbRowInfo* WXUNUSED(pInRow), cbDockPane* WXUNUSED(pInPane) ) {}
|
|
|
|
// 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.
|
|
|
|
virtual void OnPaneMarginsWillChange( cbDockPane* WXUNUSED(pPane) ) {}
|
|
|
|
// 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.
|
|
|
|
virtual void OnPaneWillChange( cbDockPane* WXUNUSED(pPane) ) {}
|
|
|
|
// 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.
|
|
|
|
virtual void OnFinishChanges() {}
|
|
|
|
// Refreshes parts of the frame layout that need an update.
|
|
|
|
virtual void UpdateNow() = 0;
|
|
};
|
|
|
|
/*
|
|
Base class for all control-bar plugin events.
|
|
This is not a dynamically-creatable class.
|
|
*/
|
|
|
|
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; }
|
|
|
|
// Constructor, taking event type and pane.
|
|
|
|
cbPluginEvent( wxEventType eventType, cbDockPane* pPane )
|
|
: mpPane( pPane )
|
|
|
|
{ m_eventType = eventType; }
|
|
};
|
|
|
|
// event types handled by plugins
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_LEFT_DOWN;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_LEFT_UP;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_RIGHT_DOWN;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_RIGHT_UP;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_MOTION;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_LEFT_DCLICK;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_LAYOUT_ROW;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_RESIZE_ROW;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_LAYOUT_ROWS;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_INSERT_BAR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_RESIZE_BAR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_REMOVE_BAR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_SIZE_BAR_WND;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_BAR_DECOR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_ROW_DECOR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_PANE_DECOR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_BAR_HANDLES;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_ROW_HANDLES;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_ROW_BKGROUND;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_PANE_BKGROUND;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_START_BAR_DRAGGING;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_DRAW_HINT_RECT;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_START_DRAW_IN_AREA;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_FINISH_DRAW_IN_AREA;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_CUSTOMIZE_BAR;
|
|
extern WXDLLIMPEXP_FL wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT;
|
|
|
|
extern WXDLLIMPEXP_FL wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT;
|
|
|
|
// Forward declarations, separated by categories.
|
|
|
|
class cbLeftDownEvent;
|
|
class cbLeftUpEvent;
|
|
class cbRightDownEvent;
|
|
class cbRightUpEvent;
|
|
class cbMotionEvent;
|
|
class cbLeftDClickEvent;
|
|
|
|
class cbLayoutRowEvent;
|
|
class cbResizeRowEvent;
|
|
class cbLayoutRowsEvent;
|
|
class cbInsertBarEvent;
|
|
class cbResizeBarEvent;
|
|
class cbRemoveBarEvent;
|
|
class cbSizeBarWndEvent;
|
|
|
|
class cbDrawBarDecorEvent;
|
|
class cbDrawRowDecorEvent;
|
|
class cbDrawPaneDecorEvent;
|
|
class cbDrawBarHandlesEvent;
|
|
class cbDrawRowHandlesEvent;
|
|
class cbDrawRowBkGroundEvent;
|
|
class cbDrawPaneBkGroundEvent;
|
|
|
|
class cbStartBarDraggingEvent;
|
|
class cbDrawHintRectEvent;
|
|
|
|
class cbStartDrawInAreaEvent;
|
|
class cbFinishDrawInAreaEvent;
|
|
|
|
class cbCustomizeBarEvent;
|
|
class cbCustomizeLayoutEvent;
|
|
|
|
// Definitions for for handler-methods.
|
|
|
|
typedef void (wxEvtHandler::*cbLeftDownHandler )(cbLeftDownEvent&);
|
|
typedef void (wxEvtHandler::*cbLeftUpHandler )(cbLeftUpEvent&);
|
|
typedef void (wxEvtHandler::*cbRightDownHandler )(cbRightDownEvent&);
|
|
typedef void (wxEvtHandler::*cbRightUpHandler )(cbRightUpEvent&);
|
|
typedef void (wxEvtHandler::*cbMotionHandler )(cbMotionEvent&);
|
|
typedef void (wxEvtHandler::*cbLeftDClickHandler )(cbLeftDClickEvent&);
|
|
|
|
typedef void (wxEvtHandler::*cbLayoutRowHandler )(cbLayoutRowEvent&);
|
|
typedef void (wxEvtHandler::*cbResizeRowHandler )(cbResizeRowEvent&);
|
|
typedef void (wxEvtHandler::*cbLayoutRowsHandler )(cbLayoutRowsEvent&);
|
|
typedef void (wxEvtHandler::*cbInsertBarHandler )(cbInsertBarEvent&);
|
|
typedef void (wxEvtHandler::*cbResizeBarHandler )(cbResizeBarEvent&);
|
|
typedef void (wxEvtHandler::*cbRemoveBarHandler )(cbRemoveBarEvent&);
|
|
typedef void (wxEvtHandler::*cbSizeBarWndHandler )(cbSizeBarWndEvent&);
|
|
|
|
typedef void (wxEvtHandler::*cbDrawBarDecorHandler )(cbDrawBarDecorEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawRowDecorHandler )(cbDrawRowDecorEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawPaneDecorHandler )(cbDrawPaneDecorEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawBarHandlesHandler )(cbDrawBarHandlesEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawRowHandlesHandler )(cbDrawRowHandlesEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawRowBkGroundHandler )(cbDrawRowBkGroundEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawPaneBkGroundHandler)(cbDrawPaneBkGroundEvent&);
|
|
|
|
typedef void (wxEvtHandler::*cbStartBarDraggingHandler )(cbStartBarDraggingEvent&);
|
|
typedef void (wxEvtHandler::*cbDrawHintRectHandler )(cbDrawHintRectEvent&);
|
|
|
|
typedef void (wxEvtHandler::*cbStartDrawInAreaHandler )(cbStartDrawInAreaEvent&);
|
|
typedef void (wxEvtHandler::*cbFinishDrawInAreaHandler)(cbFinishDrawInAreaEvent&);
|
|
|
|
typedef void (wxEvtHandler::*cbCustomizeBarHandler )(cbCustomizeBarEvent&);
|
|
typedef void (wxEvtHandler::*cbCustomizeLayoutHandler )(cbCustomizeLayoutEvent&);
|
|
|
|
// 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 )
|
|
public:
|
|
// Back-reference to the frame layout.
|
|
|
|
wxFrameLayout* mpLayout;
|
|
|
|
// Specifies panes for which this plugin receives events
|
|
// (see pane masks definitions).
|
|
|
|
int mPaneMask;
|
|
|
|
// Is true when plugin is ready to handle events.
|
|
|
|
bool mIsReady;
|
|
|
|
public:
|
|
// Default constructor.
|
|
|
|
cbPluginBase()
|
|
|
|
: mpLayout ( 0 ),
|
|
mPaneMask( wxALL_PANES ),
|
|
mIsReady ( false )
|
|
{}
|
|
|
|
// Constructor taking layout panel and a mask.
|
|
|
|
cbPluginBase( wxFrameLayout* pPanel, int paneMask = wxALL_PANES )
|
|
|
|
: mpLayout ( pPanel ),
|
|
mPaneMask( paneMask ),
|
|
mIsReady ( false )
|
|
{}
|
|
|
|
// Returns the pane mask.
|
|
|
|
inline int GetPaneMask() { return mPaneMask; }
|
|
|
|
// Destructor. Destroys the whole plugin chain of connected plugins.
|
|
|
|
virtual ~cbPluginBase();
|
|
|
|
// 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; }
|
|
|
|
// Returns true if the plugin is ready to receive events.
|
|
|
|
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;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
cbMotionEvent( const wxPoint& pos, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_MOTION, pPane ),
|
|
mPos( pos )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for mouse left double click events.
|
|
*/
|
|
|
|
class cbLeftDClickEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
wxPoint mPos;
|
|
|
|
// Constructor, taking mouse position and pane.
|
|
|
|
cbLeftDClickEvent( const wxPoint& pos, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_LEFT_DCLICK, pPane ),
|
|
mPos( pos )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for single row layout events.
|
|
*/
|
|
|
|
class cbLayoutRowEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
cbRowInfo* mpRow;
|
|
|
|
// Constructor, taking row information and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking row information, two parameters of currently unknown use, and pane.
|
|
|
|
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:
|
|
|
|
// Constructor, taking pane.
|
|
|
|
cbLayoutRowsEvent( cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_LAYOUT_ROWS, pPane )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for bar insertion events.
|
|
*/
|
|
|
|
class cbInsertBarEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
cbBarInfo* mpBar;
|
|
cbRowInfo* mpRow;
|
|
|
|
// Constructor, taking bar information, row information, and pane.
|
|
|
|
cbInsertBarEvent( cbBarInfo* pBar, cbRowInfo* pIntoRow, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_INSERT_BAR, pPane ),
|
|
|
|
mpBar( pBar ),
|
|
mpRow( pIntoRow )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for bar resize events.
|
|
*/
|
|
|
|
class cbResizeBarEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
cbBarInfo* mpBar;
|
|
cbRowInfo* mpRow;
|
|
|
|
// Constructor, taking bar information, row information, and pane.
|
|
|
|
cbResizeBarEvent( cbBarInfo* pBar, cbRowInfo* pRow, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_RESIZE_BAR, pPane ),
|
|
mpBar( pBar ),
|
|
mpRow( pRow )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for bar removal events.
|
|
*/
|
|
|
|
class cbRemoveBarEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
cbBarInfo* mpBar;
|
|
|
|
// Constructor, taking bar information and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking bar information and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking bar information, device context, and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking row information, device context, and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking device context and pane.
|
|
|
|
cbDrawPaneDecorEvent( wxDC& dc, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_DRAW_PANE_DECOR, pPane ),
|
|
mpDc( &dc )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for bar handles drawing events.
|
|
*/
|
|
|
|
class cbDrawBarHandlesEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
cbBarInfo* mpBar;
|
|
wxDC* mpDc;
|
|
|
|
// Constructor, taking bar information, device context, and pane.
|
|
|
|
cbDrawBarHandlesEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
|
|
|
|
: 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;
|
|
|
|
// Constructor, taking row information, device context, and pane.
|
|
|
|
cbDrawRowHandlesEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
|
|
|
|
: 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;
|
|
|
|
// Constructor, taking row information, device context, and pane.
|
|
|
|
cbDrawRowBkGroundEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
|
|
|
|
: cbPluginEvent( cbEVT_PL_DRAW_ROW_BKGROUND, pPane ),
|
|
mpRow( pRow ),
|
|
mpDc( &dc )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
Class for pane background drawing events.
|
|
*/
|
|
|
|
class cbDrawPaneBkGroundEvent : public cbPluginEvent
|
|
{
|
|
public:
|
|
wxDC* mpDc;
|
|
|
|
// Constructor, taking device context and pane.
|
|
|
|
cbDrawPaneBkGroundEvent( wxDC& dc, cbDockPane* pPane )
|
|
|
|
: 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
|
|
|
|
// Constructor, taking bar information, mouse position, and pane.
|
|
|
|
cbStartBarDraggingEvent( cbBarInfo* pBar, const wxPoint& pos, cbDockPane* pPane )
|
|
|
|
: 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
|
|
|
|
|
|
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
|
|
|
|
|
|
// Constructor, taking hint rectangle and three flags.
|
|
|
|
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 )
|
|
{}
|
|
};
|
|
|
|
/*
|
|
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
|
|
|
|
// Constructor, taking rectangular area, device context pointer to a pointer, and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking rectangular area and pane.
|
|
|
|
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;
|
|
|
|
// Constructor, taking bar information, mouse position, and pane.
|
|
|
|
cbCustomizeBarEvent( cbBarInfo* pBar, const wxPoint& clickPos, cbDockPane* pPane )
|
|
|
|
: 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
|
|
|
|
// Constructor, taking mouse position.
|
|
|
|
cbCustomizeLayoutEvent( const wxPoint& clickPos )
|
|
|
|
: cbPluginEvent( cbEVT_PL_CUSTOMIZE_LAYOUT, 0 ),
|
|
mClickPos( clickPos )
|
|
{}
|
|
};
|
|
|
|
#endif /* __CONTROLBAR_G__ */
|
|
|