]> git.saurik.com Git - wxWidgets.git/blame - contrib/include/wx/fl/controlbar.h
Fixed toolbar crash for MinGW/Cygwin
[wxWidgets.git] / contrib / include / wx / fl / controlbar.h
CommitLineData
8e08b761 1/////////////////////////////////////////////////////////////////////////////
e598303a 2// Name: controlbar.h
8e08b761
JS
3// Purpose: Central header file for control-bar related classes
4//
5// Author: Aleksandras Gluchovas <mailto:alex@soften.ktu.lt>
6// Modified by:
7// Created: 06/09/98
8// RCS-ID: $Id$
9// Copyright: (c) Aleksandras Gluchovas
4cbc57f0 10// Licence: wxWindows licence
8e08b761
JS
11/////////////////////////////////////////////////////////////////////////////
12
13#ifndef __CONTROLBAR_G__
14#define __CONTROLBAR_G__
15
16#ifdef __GNUG__
17 #pragma interface "controlbar.h"
18#endif
19
20#include "wx/defs.h"
21#include "wx/string.h"
22#include "wx/window.h"
23#include "wx/dynarray.h"
24
25#define WXCONTROLBAR_VERSION 1.3
26
27// forward declarations
28
29class wxFrameLayout;
30
31class cbDockPane;
32class cbUpdatesManagerBase;
33class cbBarDimHandlerBase;
34class cbPluginBase;
35class cbPluginEvent;
36class cbPaneDrawPlugin;
37
38class cbBarInfo;
39class cbRowInfo;
40class cbDimInfo;
41class cbCommonPaneProperties;
42
43typedef cbBarInfo* BarInfoPtrT;
44typedef cbRowInfo* RowInfoPtrT;
45
46WX_DEFINE_ARRAY( BarInfoPtrT, BarArrayT );
47WX_DEFINE_ARRAY( RowInfoPtrT, RowArrayT );
48
49// control bar states
50
51#define wxCBAR_DOCKED_HORIZONTALLY 0
52#define wxCBAR_DOCKED_VERTICALLY 1
53#define wxCBAR_FLOATING 2
54#define wxCBAR_HIDDEN 3
55
56// the states are enumerated above
57#define MAX_BAR_STATES 4
58
59// control bar alignments
60
61#if !defined(FL_ALIGN_TOP)
62
63#define FL_ALIGN_TOP 0
64#define FL_ALIGN_BOTTOM 1
65#define FL_ALIGN_LEFT 2
66#define FL_ALIGN_RIGHT 3
67
68#endif
69
70// one pane for each alignment
71#define MAX_PANES 4
72
73// masks for each pane
74
4cbc57f0 75#define FL_ALIGN_TOP_PANE 0x0001
8e08b761 76#define FL_ALIGN_BOTTOM_PANE 0x0002
4cbc57f0 77#define FL_ALIGN_LEFT_PANE 0x0004
8e08b761
JS
78#define FL_ALIGN_RIGHT_PANE 0x0008
79
80#define wxALL_PANES 0x000F
81
ffc6ce3f 82// enumeration of hittest results, see cbDockPane::HitTestPaneItems(..)
8e08b761
JS
83
84enum CB_HITTEST_RESULT
85{
4cbc57f0 86 CB_NO_ITEMS_HITTED,
8e08b761 87
4cbc57f0
JS
88 CB_UPPER_ROW_HANDLE_HITTED,
89 CB_LOWER_ROW_HANDLE_HITTED,
90 CB_LEFT_BAR_HANDLE_HITTED,
91 CB_RIGHT_BAR_HANDLE_HITTED,
92 CB_BAR_CONTENT_HITTED
8e08b761
JS
93};
94
e598303a
JS
95/*
96Helper class, used for spying for unhandled mouse events on control bars
97and forwarding them to the frame layout.
98*/
8e08b761 99
ffc6ce3f 100class cbBarSpy : public wxEvtHandler
8e08b761
JS
101{
102public:
4cbc57f0 103 DECLARE_DYNAMIC_CLASS( cbBarSpy )
8e08b761 104
4cbc57f0
JS
105 wxFrameLayout* mpLayout;
106 wxWindow* mpBarWnd;
8e08b761
JS
107
108public:
4cbc57f0 109 // Default constructor.
e598303a 110
4cbc57f0 111 cbBarSpy(void);
8e08b761 112
4cbc57f0 113 // Constructor, taking a parent pane.
e598303a 114
4cbc57f0 115 cbBarSpy( wxFrameLayout* pPanel );
8e08b761 116
4cbc57f0 117 // Sets the bar window.
e598303a 118
4cbc57f0 119 void SetBarWindow( wxWindow* pWnd );
8e08b761 120
4cbc57f0 121 // Performs special event processing.
8e08b761 122
4cbc57f0 123 virtual bool ProcessEvent(wxEvent& event);
8e08b761
JS
124};
125
e598303a
JS
126/*
127wxFrameLayout manages containment and docking of control bars,
128which can be docked along the top, bottom, right, or left side of the
129parent frame.
130*/
8e08b761
JS
131
132class wxFrameLayout : public wxEvtHandler
133{
134public:
4cbc57f0 135 // Default constructor, used only for serialization.
e598303a 136
4cbc57f0 137 wxFrameLayout();
e598303a 138
4cbc57f0
JS
139 // Constructor, taking parent window, the (MDI) client of the parent if there
140 // is one, and flag specifying whether to activate the layout.
8e08b761 141
4cbc57f0
JS
142 wxFrameLayout( wxWindow* pParentFrame,
143 wxWindow* pFrameClient = NULL,
144 bool activateNow = TRUE );
8e08b761 145
4cbc57f0 146 // Destructor. It does not destroy the bar windows.
e598303a 147
4cbc57f0 148 virtual ~wxFrameLayout();
8e08b761 149
4cbc57f0 150 // Enables floating behaviour. By default floating of control bars is on.
e598303a 151
4cbc57f0 152 virtual void EnableFloating( bool enable = TRUE );
8e08b761 153
4cbc57f0
JS
154 // Activate can be called after some other layout has been deactivated,
155 // and this one must take over the current contents of the frame window.
156 //
157 // Effectively hooks itself to the frame window, re-displays all non-hidden
158 // bar windows and repaints the decorations.
8e08b761 159
4cbc57f0 160 virtual void Activate();
8e08b761 161
4cbc57f0
JS
162 // Deactivate unhooks itself from frame window, and hides all non-hidden windows.
163 //
164 // Note: two frame layouts should not be active at the same time in the
165 // same frame window, since it would cause messy overlapping of bar windows
166 // from both layouts.
8e08b761 167
4cbc57f0 168 virtual void Deactivate();
8e08b761 169
4cbc57f0 170 // Hides the bar windows, and also the client window if present.
8e08b761 171
4cbc57f0 172 void HideBarWindows();
8e08b761 173
4cbc57f0 174 // Destroys the bar windows.
e598303a 175
4cbc57f0 176 virtual void DestroyBarWindows();
8e08b761 177
4cbc57f0
JS
178 // Passes the client window (e.g. MDI client window) to be controlled by
179 // frame layout, the size and position of which should be adjusted to be
180 // surrounded by controlbar panes, whenever the frame is resized or the dimensions
181 // of control panes change.
8e08b761 182
4cbc57f0 183 void SetFrameClient( wxWindow* pFrameClient );
8e08b761 184
4cbc57f0 185 // Returns the frame client, or NULL if not present.
e598303a 186
4cbc57f0 187 wxWindow* GetFrameClient();
8e08b761 188
4cbc57f0 189 // Returns the parent frame.
e598303a 190
4cbc57f0 191 wxWindow& GetParentFrame() { return *mpFrame; }
8e08b761 192
4cbc57f0 193 // Returns an array of panes. Used by update managers.
e598303a 194
4cbc57f0 195 cbDockPane** GetPanesArray() { return mPanes; }
8e08b761 196
4cbc57f0 197 // Returns a pane for the given alignment. See pane alignment types.
e598303a 198
4cbc57f0 199 cbDockPane* GetPane( int alignment )
8e08b761 200
4cbc57f0 201 { return mPanes[alignment]; }
8e08b761 202
4cbc57f0
JS
203 // Adds bar information to the frame layout. The appearance of the layout is not refreshed
204 // immediately; RefreshNow() can be called if necessary.
205 //
206 // Notes: the argument pBarWnd can by NULL, resulting in bar decorations to be drawn
207 // around the empty rectangle (filled with default background colour).
208 // Argument dimInfo can be reused for adding any number of bars, since
209 // it is not used directly - instead its members are copied. If the dimensions
210 // handler is present, its instance is shared (reference counted). The dimension
211 // handler should always be allocated on the heap.
e598303a 212
4cbc57f0 213 // pBarWnd is the window to be managed.
e598303a 214
4cbc57f0 215 // dimInfo contains dimension information.
e598303a 216
4cbc57f0 217 // alignment is a value such as FL_ALIGN_TOP.
e598303a 218
4cbc57f0 219 // rowNo is the vertical position or row in the pane (if in docked state).
e598303a 220
4cbc57f0 221 // columnPos is the horizontal position within the row in pixels (if in docked state).
e598303a 222
4cbc57f0 223 // name is a name by which the bar can be referred in layout customization dialogs.
e598303a 224
4cbc57f0
JS
225 // If spyEvents is TRUE, input events for the bar should be "spyed" in order
226 // to forward unhandled mouse clicks to the frame layout, for example to enable
227 // easy draggablity of toolbars just by clicking on their interior regions.
228 // For widgets like text/tree control this value should be FALSE,
229 // since there's no certain way to detect whether the event was actually handled.
e598303a 230
4cbc57f0
JS
231 // state is the initial state, such as wxCBAR_DOCKED_HORIZONTALLY,
232 // wxCBAR_FLOATING, wxCBAR_HIDDEN.
8e08b761 233
4cbc57f0 234 virtual void AddBar( wxWindow* pBarWnd,
8e08b761
JS
235 const cbDimInfo& dimInfo,
236
4cbc57f0
JS
237 // defaults:
238 int alignment = FL_ALIGN_TOP,
239 int rowNo = 0,
240 int columnPos = 0,
241 const wxString& name="bar",
242 bool spyEvents = FALSE,
243 int state = wxCBAR_DOCKED_HORIZONTALLY
244 );
8e08b761 245
4cbc57f0
JS
246 // ReddockBar can be used for repositioning existing bars. The given bar is first removed
247 // from the pane it currently belongs to, and inserted into the pane, which "matches"
248 // the given rectangular area. If pToPane is not NULL, the bar is docked to this given pane.
249 // To dock a bar which is floating, use the wxFrameLayout::DockBar method.
8e08b761 250
4cbc57f0
JS
251 virtual bool RedockBar( cbBarInfo* pBar, const wxRect& shapeInParent,
252 cbDockPane* pToPane = NULL, bool updateNow = TRUE );
8e08b761 253
4cbc57f0 254 // Finds the bar in the framelayout, by name.
8e08b761 255
4cbc57f0 256 cbBarInfo* FindBarByName( const wxString& name );
8e08b761 257
4cbc57f0 258 // Finds the bar in the framelayout, by window.
e598303a 259
4cbc57f0 260 cbBarInfo* FindBarByWindow( const wxWindow* pWnd );
8e08b761 261
4cbc57f0 262 // Gets an array of bars.
e598303a 263
4cbc57f0 264 BarArrayT& GetBars();
8e08b761 265
4cbc57f0 266 // Changes the bar's docking state (see possible control bar states).
8e08b761 267
4cbc57f0 268 void SetBarState( cbBarInfo* pBar, int newStatem, bool updateNow );
8e08b761 269
4cbc57f0 270 // Toggles the bar between visible and hidden.
e598303a 271
4cbc57f0 272 void InverseVisibility( cbBarInfo* pBar );
8e08b761 273
4cbc57f0
JS
274 // Reflects changes in bar information structure visually.
275 // For example, moves the bar, changes its dimension information,
276 // or changes the pane to which it is docked.
8e08b761 277
4cbc57f0 278 void ApplyBarProperties( cbBarInfo* pBar );
8e08b761 279
4cbc57f0 280 // Removes the bar from the layout permanently, and hides its corresponding window if present.
8e08b761 281
4cbc57f0 282 void RemoveBar( cbBarInfo* pBar );
8e08b761 283
4cbc57f0 284 // Recalculates the layout of panes, and all bars/rows in each pane.
8e08b761 285
4cbc57f0 286 virtual void RecalcLayout( bool repositionBarsNow = FALSE );
8e08b761 287
4cbc57f0 288 // Returns the client height.
e598303a 289
4cbc57f0 290 int GetClientHeight();
e598303a 291
4cbc57f0 292 // Returns the client width.
e598303a 293
4cbc57f0 294 int GetClientWidth();
e598303a 295
4cbc57f0 296 // Returns the client's rectangle.
e598303a 297
4cbc57f0 298 wxRect& GetClientRect() { return mClntWndBounds; }
8e08b761 299
4cbc57f0
JS
300 // Returns a reference to the updates manager.
301 // Note: in future, the updates manager will become a normal plugin.
ffc6ce3f 302
4cbc57f0 303 cbUpdatesManagerBase& GetUpdatesManager();
ffc6ce3f 304
4cbc57f0 305 // Destroys the previous manager if any, and sets the new one.
8e08b761 306
4cbc57f0 307 void SetUpdatesManager( cbUpdatesManagerBase* pUMgr );
8e08b761 308
4cbc57f0 309 // Gets the pane properties for the given alignment.
8e08b761 310
4cbc57f0 311 virtual void GetPaneProperties( cbCommonPaneProperties& props, int alignment = FL_ALIGN_TOP );
8e08b761 312
4cbc57f0
JS
313 // Sets the pane properties for the given alignment.
314 // Note: changing properties of panes does not result immediate on-screen update.
e598303a 315
4cbc57f0
JS
316 virtual void SetPaneProperties( const cbCommonPaneProperties& props,
317 int paneMask = wxALL_PANES );
8e08b761 318
4cbc57f0
JS
319 // Sets the margins for the given panes.
320 // The margins should go into cbCommonPaneProperties in the future.
321 //
322 // Note: this method should be called before any custom plugins are attached.
8e08b761 323
4cbc57f0
JS
324 virtual void SetMargins( int top, int bottom, int left, int right,
325 int paneMask = wxALL_PANES );
8e08b761 326
4cbc57f0 327 // Sets the pane background colour.
e598303a 328
4cbc57f0 329 virtual void SetPaneBackground( const wxColour& colour );
8e08b761 330
4cbc57f0 331 // Recalculates layout and performs on-screen update of all panes.
8e08b761 332
4cbc57f0 333 void RefreshNow( bool recalcLayout = TRUE );
8e08b761 334
4cbc57f0 335 // Event handler for a size event.
8e08b761 336
4cbc57f0 337 void OnSize ( wxSizeEvent& event );
e598303a 338
4cbc57f0 339 // Event handler for a left down button event.
e598303a 340
4cbc57f0 341 void OnLButtonDown( wxMouseEvent& event );
e598303a 342
4cbc57f0 343 // Event handler for a left doubleclick button event.
e598303a 344
4cbc57f0 345 void OnLDblClick ( wxMouseEvent& event );
e598303a 346
4cbc57f0 347 // Event handler for a left button up event.
e598303a 348
4cbc57f0 349 void OnLButtonUp ( wxMouseEvent& event );
e598303a 350
4cbc57f0 351 // Event handler for a right button down event.
e598303a 352
4cbc57f0 353 void OnRButtonDown( wxMouseEvent& event );
e598303a 354
4cbc57f0 355 // Event handler for a right button up event.
e598303a 356
4cbc57f0 357 void OnRButtonUp ( wxMouseEvent& event );
8e08b761 358
4cbc57f0 359 // Event handler for a mouse move event.
8e08b761 360
4cbc57f0 361 void OnMouseMove ( wxMouseEvent& event );
e598303a 362
4cbc57f0
JS
363 // This function should be used instead of passing the event to the ProcessEvent method
364 // of the top-level plugin directly. This method checks if events are currently
365 // captured and ensures that plugin-event is routed correctly.
8e08b761 366
4cbc57f0 367 virtual void FirePluginEvent( cbPluginEvent& event );
ffc6ce3f 368
4cbc57f0
JS
369 // Captures user input events for the given plugin.
370 // Input events are: mouse movement, mouse clicks, keyboard input.
8e08b761 371
4cbc57f0 372 virtual void CaptureEventsForPlugin ( cbPluginBase* pPlugin );
e598303a 373
4cbc57f0
JS
374 // Releases user input events for the given plugin.
375 // Input events are: mouse movement, mouse clicks, keyboard input
e598303a 376
4cbc57f0 377 virtual void ReleaseEventsFromPlugin( cbPluginBase* pPlugin );
8e08b761 378
4cbc57f0 379 // Called by plugins; also captures the mouse in the parent frame.
e598303a 380
4cbc57f0 381 void CaptureEventsForPane( cbDockPane* toPane );
e598303a 382
4cbc57f0 383 // Called by plugins; also releases mouse in the parent frame.
e598303a 384
4cbc57f0 385 void ReleaseEventsFromPane( cbDockPane* fromPane );
8e08b761 386
4cbc57f0
JS
387 // Returns the current top-level plugin (the one that receives events first,
388 // except if input events are currently captured by some other plugin).
ffc6ce3f 389
4cbc57f0 390 virtual cbPluginBase& GetTopPlugin();
8e08b761 391
4cbc57f0
JS
392 // Hooking custom plugins to frame layout.
393 //
394 // Note: when hooking one plugin on top of the other,
395 // use SetNextHandler or similar methods
396 // of wxEvtHandler class to compose the chain of plugins,
397 // than pass the left-most handler in this chain to
398 // the above methods (assuming that events are delegated
399 // from left-most towards right-most handler).
400 //
401 // This secenario is very inconvenient and "low-level",
402 // so use the Add/Push/PopPlugin methods instead.
8e08b761 403
4cbc57f0 404 virtual void SetTopPlugin( cbPluginBase* pPlugin );
8e08b761 405
4cbc57f0
JS
406 // Similar to wxWindow's "push/pop-event-handler" methods, execept
407 // that the plugin is deleted upon "popping".
8e08b761 408
4cbc57f0 409 virtual void PushPlugin( cbPluginBase* pPugin );
e598303a 410
4cbc57f0
JS
411 // Similar to wxWindow's "push/pop-event-handler" methods, execept
412 // that the plugin is deleted upon "popping".
e598303a 413
4cbc57f0 414 virtual void PopPlugin();
8e08b761 415
4cbc57f0
JS
416 // Pop all plugins.
417 virtual void PopAllPlugins();
8e08b761 418
4cbc57f0
JS
419 // Adds the default plugins. These are cbPaneDrawPlugin, cbRowLayoutPlugin, cbBarDragPlugin,
420 // cbAntiflickerPlugin, cbSimpleCustomizePlugin.
421 //
422 // This method is automatically invoked if no plugins were found upon
423 // firing of the first plugin-event, i.e. when wxFrameLayout configures itself.
8e08b761 424
4cbc57f0 425 virtual void PushDefaultPlugins();
8e08b761 426
4cbc57f0
JS
427 // An advanced methods for plugin configuration using their
428 // dynamic class information, for example CLASSINFO(pluginClass).
8e08b761 429
4cbc57f0
JS
430 // First checks if the plugin of the given class is already "hooked up".
431 // If not, adds it to the top of the plugins chain.
8e08b761 432
4cbc57f0 433 virtual void AddPlugin( wxClassInfo* pPlInfo, int paneMask = wxALL_PANES );
8e08b761 434
4cbc57f0
JS
435 // First checks if the plugin of the given class is already hooked.
436 // If so, removes it, and then inserts it into the chain
437 // before the plugin of the class given by pNextPlInfo.
438 //
439 // Note: this method is handy in some cases where the order
440 // of the plugin-chain could be important, for example when one plugin overrides
441 // some functionality of another already-hooked plugin,
442 // so that the former plugin should be hooked before the one
443 // whose functionality is being overridden.
8e08b761 444
4cbc57f0
JS
445 virtual void AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo,
446 int paneMask = wxALL_PANES );
8e08b761 447
4cbc57f0
JS
448 // Checks if the plugin of the given class is hooked, and removes
449 // it if found.
8e08b761 450
4cbc57f0 451 virtual void RemovePlugin( wxClassInfo* pPlInfo );
8e08b761 452
4cbc57f0
JS
453 // Finds a plugin with the given class, or returns NULL if a plugin of the given
454 // class is not hooked.
8e08b761 455
4cbc57f0 456 virtual cbPluginBase* FindPlugin( wxClassInfo* pPlInfo );
8e08b761 457
4cbc57f0 458 // Returns true if there is a top plugin.
e598303a 459
4cbc57f0 460 bool HasTopPlugin();
8e08b761 461
4cbc57f0
JS
462 DECLARE_EVENT_TABLE()
463 DECLARE_DYNAMIC_CLASS( wxFrameLayout )
8e08b761
JS
464
465public: /* protected really, acessed only by plugins and serializers */
466
4cbc57f0
JS
467 friend class cbDockPane;
468 friend class wxBarHandler;
8e08b761 469
4cbc57f0
JS
470 wxWindow* mpFrame; // parent frame
471 wxWindow* mpFrameClient; // client window
472 cbDockPane* mPanes[MAX_PANES]; // panes in the panel
8e08b761 473
4cbc57f0
JS
474 // misc. cursors
475 wxCursor* mpHorizCursor;
476 wxCursor* mpVertCursor;
477 wxCursor* mpNormalCursor;
478 wxCursor* mpDragCursor;
479 wxCursor* mpNECursor; // no-entry cursor
8e08b761 480
4cbc57f0 481 // pens for decoration and shades
8e08b761 482
4cbc57f0
JS
483 wxPen mDarkPen; // default wxSYS_COLOUR_3DSHADOW
484 wxPen mLightPen; // default wxSYS_COLOUR_3DHILIGHT
485 wxPen mGrayPen; // default wxSYS_COLOUR_3DFACE
486 wxPen mBlackPen; // default wxColour( 0, 0, 0)
487 wxPen mBorderPen; // default wxSYS_COLOUR_3DFACE
8e08b761 488
4cbc57f0 489 wxPen mNullPen; // transparent pen
8e08b761 490
4cbc57f0 491 // pane to which the all mouse input is currently directed (caputred)
8e08b761 492
4cbc57f0 493 cbDockPane* mpPaneInFocus;
8e08b761 494
4cbc57f0 495 // pane, from which mouse pointer had just left
8e08b761 496
4cbc57f0 497 cbDockPane* mpLRUPane;
8e08b761 498
4cbc57f0 499 // bounds of client window in parent frame's coordinates
8e08b761 500
4cbc57f0
JS
501 wxRect mClntWndBounds;
502 wxRect mPrevClntWndBounds;
8e08b761 503
4cbc57f0
JS
504 bool mFloatingOn;
505 wxPoint mNextFloatedWndPos;
506 wxSize mFloatingPosStep;
8e08b761 507
4cbc57f0 508 // current plugin (right-most) plugin which receives events first
8e08b761 509
4cbc57f0 510 cbPluginBase* mpTopPlugin;
8e08b761 511
4cbc57f0 512 // plugin, which currently has captured all input events, otherwise NULL
8e08b761 513
4cbc57f0 514 cbPluginBase* mpCaputesInput;
8e08b761 515
4cbc57f0
JS
516 // list of event handlers which are "pushed" onto each bar, to catch
517 // mouse events which are not handled by bars, and froward them to the ,
518 // frome-layout and further to plugins
8e08b761 519
4cbc57f0 520 wxList mBarSpyList;
8e08b761 521
4cbc57f0 522 // list of top-most frames which contain floated bars
8e08b761 523
4cbc57f0 524 wxList mFloatedFrames;
8e08b761 525
4cbc57f0 526 // linked list of references to all bars (docked/floated/hidden)
8e08b761 527
4cbc57f0 528 BarArrayT mAllBars;
8e08b761 529
4cbc57f0
JS
530 // FOR NOW:: dirty stuff...
531 bool mClientWndRefreshPending;
532 bool mRecalcPending;
533 bool mCheckFocusWhenIdle;
8e08b761
JS
534
535public: /* protected really (accessed only by plugins) */
536
4cbc57f0
JS
537 // refrence to custom updates manager
538 cbUpdatesManagerBase* mpUpdatesMgr;
8e08b761 539
4cbc57f0 540 // Called to apply the calculated layout to window objects.
e598303a 541
4cbc57f0 542 void PositionClientWindow();
e598303a 543
4cbc57f0 544 // Called to apply the calculated layout to window objects.
e598303a 545
4cbc57f0 546 void PositionPanes();
e598303a 547
4cbc57f0 548 // Creates the cursors.
e598303a 549
4cbc57f0 550 void CreateCursors();
8e08b761 551
4cbc57f0 552 // Applies the calculated layout to a floating bar.
e598303a 553
4cbc57f0 554 void RepositionFloatedBar( cbBarInfo* pBar );
e598303a 555
4cbc57f0 556 // Applies the state to the window objects.
e598303a 557
4cbc57f0 558 void DoSetBarState( cbBarInfo* pBar );
8e08b761 559
4cbc57f0 560 // The purpose of this function is unknown.
e598303a 561
4cbc57f0
JS
562 bool LocateBar( cbBarInfo* pBarInfo,
563 cbRowInfo** ppRow,
564 cbDockPane** ppPane );
8e08b761
JS
565
566
4cbc57f0 567 // Returns TRUE if the position is within the given pane.
e598303a 568
4cbc57f0 569 bool HitTestPane( cbDockPane* pPane, int x, int y );
e598303a 570
4cbc57f0
JS
571 // Returns the pane for which the rectangle hit test succeeds, giving
572 // preference to the given pane if supplied.
e598303a 573
4cbc57f0 574 cbDockPane* HitTestPanes( const wxRect& rect, cbDockPane* pCurPane );
8e08b761 575
4cbc57f0 576 // Returns the pane to which the given bar belongs.
8e08b761 577
4cbc57f0 578 cbDockPane* GetBarPane( cbBarInfo* pBar );
8e08b761 579
4cbc57f0
JS
580 // Delegated from "bar-spy".
581 void ForwardMouseEvent( wxMouseEvent& event,
582 cbDockPane* pToPane,
583 int eventType );
8e08b761 584
4cbc57f0 585 // Routes the mouse event to the appropriate pane.
e598303a 586
4cbc57f0 587 void RouteMouseEvent( wxMouseEvent& event, int pluginEvtType );
8e08b761 588
4cbc57f0 589 // Shows all floated windows.
e598303a 590
4cbc57f0 591 void ShowFloatedWindows( bool show );
8e08b761 592
4cbc57f0 593 // Unhooks the layout from the frame.
e598303a 594
4cbc57f0 595 void UnhookFromFrame();
e598303a 596
4cbc57f0
JS
597 // Hooks the layout up to the frame (pushes the layout onto the
598 // frame's event handler stack).
e598303a 599
4cbc57f0 600 void HookUpToFrame();
8e08b761 601
4cbc57f0
JS
602 // Returns TRUE if the platform allows reparenting. This may not return TRUE
603 // for all platforms. Reparenting allows control bars to be floated.
8e08b761 604
4cbc57f0 605 bool CanReparent();
e598303a 606
4cbc57f0 607 // Reparents pChild to have parent pNewParent.
e598303a 608
4cbc57f0 609 void ReparentWindow( wxWindow* pChild, wxWindow* pNewParent );
8e08b761 610
4cbc57f0 611 // Returns the previous client window rectangle.
e598303a 612
4cbc57f0 613 wxRect& GetPrevClientRect() { return mPrevClntWndBounds; }
8e08b761 614
4cbc57f0 615 // Handles paint events, calling PaintPane for each pane.
e598303a 616
4cbc57f0 617 void OnPaint( wxPaintEvent& event );
e598303a 618
4cbc57f0 619 // Handles background erase events. Currently does nothing.
e598303a 620
4cbc57f0 621 void OnEraseBackground( wxEraseEvent& event );
e598303a 622
4cbc57f0 623 // Handles focus kill events. Currently does nothing.
e598303a 624
4cbc57f0 625 void OnKillFocus( wxFocusEvent& event );
e598303a 626
4cbc57f0 627 // Handles focus set events. Currently does nothing.
e598303a 628
4cbc57f0 629 void OnSetFocus( wxFocusEvent& event );
e598303a 630
4cbc57f0 631 // Handles activation events. Currently does nothing.
e598303a 632
4cbc57f0 633 void OnActivate( wxActivateEvent& event );
e598303a 634
4cbc57f0 635 // Handles idle events.
e598303a 636
4cbc57f0 637 void OnIdle( wxIdleEvent& event );
8e08b761 638
4cbc57f0 639 // Returns a new cbGCUpdatesMgr object.
e598303a 640
4cbc57f0 641 virtual cbUpdatesManagerBase* CreateUpdatesManager();
8e08b761
JS
642};
643
e598303a
JS
644/*
645A structure that is present in each item of layout,
646used by any particular updates-manager to store
647auxiliary information to be used by its updating algorithm.
648*/
8e08b761
JS
649
650class cbUpdateMgrData : public wxObject
651{
4cbc57f0 652 DECLARE_DYNAMIC_CLASS( cbUpdateMgrData )
8e08b761 653public:
4cbc57f0 654 wxRect mPrevBounds; // previous state of layout item (in parent frame's coordinates)
8e08b761 655
4cbc57f0
JS
656 bool mIsDirty; // overrides result of current-against-previous bounds comparison,
657 // i.e. requires item to be updated, regardless of it's current area
ffc6ce3f 658
4cbc57f0 659 wxObject* mpCustomData; // any custom data stored by specific updates mgr.
8e08b761 660
4cbc57f0 661 // Default constructor. Is-dirty flag is set TRUE initially.
e598303a 662
4cbc57f0 663 cbUpdateMgrData();
e598303a 664
4cbc57f0 665 // Store the item state.
8e08b761 666
4cbc57f0 667 void StoreItemState( const wxRect& boundsInParent );
8e08b761 668
4cbc57f0 669 // Set the dirty flag.
e598303a 670
4cbc57f0 671 void SetDirty( bool isDirty = TRUE );
8e08b761 672
4cbc57f0 673 // Set custom data.
e598303a 674
4cbc57f0 675 void SetCustomData( wxObject* pCustomData );
8e08b761 676
4cbc57f0 677 // Returns the is-dirty flag.
e598303a 678
4cbc57f0 679 inline bool IsDirty() { return mIsDirty; }
8e08b761
JS
680};
681
e598303a
JS
682/*
683Abstract interface for bar-size handler classes.
684These objects receive notifications whenever the docking
685state of the bar is changed, thus they provide the possibility
686to adjust the values in cbDimInfo::mSizes accordingly.
687Specific handlers can be hooked up to specific types of bar.
688*/
8e08b761
JS
689
690class cbBarDimHandlerBase : public wxObject
691{
4cbc57f0 692 DECLARE_ABSTRACT_CLASS( cbBarDimHandlerBase )
8e08b761
JS
693
694public:
4cbc57f0
JS
695 int mRefCount; // since one dim-handler can be assigned
696 // to multiple bars, it's instance is
697 // reference-counted
8e08b761
JS
698public:
699
4cbc57f0
JS
700 // Default constructor. The initial reference count is 0, since
701 // the handler is not used until the first invocation of AddRef().
8e08b761 702
4cbc57f0 703 cbBarDimHandlerBase();
8e08b761 704
4cbc57f0 705 // Increments the reference count.
8e08b761 706
4cbc57f0
JS
707 void AddRef();
708
709 // Decrements the reference count, and if the count is at zero,
710 // delete 'this'.
711
712 void RemoveRef();
8e08b761 713
4cbc57f0
JS
714 // Responds to "bar-state-changes" notifications.
715
716 virtual void OnChangeBarState(cbBarInfo* pBar, int newState ) = 0;
717
718 // Responds to bar resize notifications.
719
720 virtual void OnResizeBar( cbBarInfo* pBar, const wxSize& given, wxSize& preferred ) = 0;
721};
8e08b761 722
4cbc57f0
JS
723/*
724Helper class used internally by the wxFrameLayout class.
725Holds and manages information about bar dimensions.
726*/
8e08b761
JS
727
728class cbDimInfo : public wxObject
729{
4cbc57f0 730 DECLARE_DYNAMIC_CLASS( cbDimInfo )
8e08b761 731public:
4cbc57f0 732 wxSize mSizes[MAX_BAR_STATES]; // preferred sizes for each possible bar state
8e08b761 733
4cbc57f0
JS
734 wxRect mBounds[MAX_BAR_STATES]; // saved positions and sizes for each
735 // possible state, values contain (-1)s if
736 // not initialized yet
8e08b761 737
4cbc57f0
JS
738 int mLRUPane; // pane to which this bar was docked before it was floated
739 // (FL_ALIGN_TOP,FL_ALIGN_BOTTOM,..)
8e08b761 740
4cbc57f0
JS
741 // top/bottom gap, separates decorations
742 // from the bar's actual window, filled
743 // with frame's beckground color, default: 0
8e08b761 744
4cbc57f0 745 int mVertGap;
8e08b761 746
4cbc57f0
JS
747 // left/right gap, separates decorations
748 // from the bar's actual wndow, filled
749 // with frame's beckground colour, default: 0
8e08b761 750
4cbc57f0 751 int mHorizGap; // NOTE:: gaps are given in frame's coord. orientation
8e08b761 752
4cbc57f0
JS
753 // TRUE, if vertical/horizontal dimensions cannot be mannualy adjusted
754 // by user using resizing handles. If FALSE, the frame-layout
755 // *automatically* places resizing handles among not-fixed bars
8e08b761 756
4cbc57f0 757 bool mIsFixed;
8e08b761 758
4cbc57f0 759 cbBarDimHandlerBase* mpHandler; // NULL, if no handler present
8e08b761
JS
760
761public:
762
4cbc57f0
JS
763 // Default constructor.
764
765 cbDimInfo(void);
8e08b761 766
4cbc57f0
JS
767 // Constructor.
768 // isFixed is TRUE if vertical/horizontal dimensions cannot be manually adjusted
769 // by the user using resizing handles. If FALSE, the frame-layout
770 // automatically places resizing handles among bars that do are not fixed.
771
772 cbDimInfo( cbBarDimHandlerBase* pDimHandler,
773 bool isFixed // (see comments on mIsFixed member)
774 );
8e08b761 775
4cbc57f0
JS
776 // Constructor taking dimenstion information.
777 //
778 // dh_x, dh_y are the dimensions when docked horizontally.
779 //
780 // dv_x, dv_y are the dimensions when docked vertically.
781 //
782 // f_x, f_y are the dimensions when floating.
783 //
784 // For information on isFixed, see comments above.
785 //
786 // horizGap is the left/right gap, separating decorations
787 // from the bar's actual wndow, filled with the frame's background colour.
788 // The dimension is given in the frame's coordinates.
789 //
790 // vertGap is the top/bottom gap, separating decorations
791 // from the bar's actual wndow, filled with the frame's background colour.
792 // The dimension is given in the frame's coordinates.
793
794 cbDimInfo( int dh_x, int dh_y,
795 int dv_x, int dv_y,
796 int f_x, int f_y,
8e08b761 797
4cbc57f0
JS
798 bool isFixed = TRUE,
799 int horizGap = 6,
800 int vertGap = 6,
801
802 cbBarDimHandlerBase* pDimHandler = NULL
803 );
8e08b761 804
4cbc57f0 805 // Constructor.
8e08b761 806
ffc6ce3f
JS
807 cbDimInfo( int x, int y,
808 bool isFixed = TRUE,
809 int gap = 6,
8e08b761 810 cbBarDimHandlerBase* pDimHandler = NULL
ffc6ce3f 811 );
8e08b761 812
4cbc57f0 813 // Destructor. Destroys handler automatically, if present.
8e08b761 814
4cbc57f0 815 ~cbDimInfo();
8e08b761 816
4cbc57f0
JS
817 // Assignment operator.
818
819 const cbDimInfo& operator=( const cbDimInfo& other );
820
821 // Returns the handler, if any.
822
823 inline cbBarDimHandlerBase* GetDimHandler() { return mpHandler; }
8e08b761
JS
824};
825
826WX_DEFINE_ARRAY(float, cbArrayFloat);
827
4cbc57f0
JS
828/*
829Helper class used internally by the wxFrameLayout class.
830Holds and manages information about bar rows.
831*/
832
8e08b761
JS
833class cbRowInfo : public wxObject
834{
4cbc57f0 835 DECLARE_DYNAMIC_CLASS( cbRowInfo )
8e08b761
JS
836public:
837
4cbc57f0 838 BarArrayT mBars; // row content
8e08b761 839
4cbc57f0 840 // row flags (set up according to row-relations)
8e08b761 841
4cbc57f0
JS
842 bool mHasUpperHandle;
843 bool mHasLowerHandle;
844 bool mHasOnlyFixedBars;
845 int mNotFixedBarsCnt;
8e08b761 846
4cbc57f0
JS
847 int mRowWidth;
848 int mRowHeight;
849 int mRowY;
8e08b761 850
4cbc57f0
JS
851 // stores precalculated row's bounds in parent frame's coordinates
852 wxRect mBoundsInParent;
8e08b761 853
4cbc57f0
JS
854 // info stored for updates-manager
855 cbUpdateMgrData mUMgrData;
8e08b761 856
4cbc57f0
JS
857 cbRowInfo* mpNext;
858 cbRowInfo* mpPrev;
8e08b761 859
4cbc57f0 860 cbBarInfo* mpExpandedBar; // NULL, if non of the bars is currently expanded
8e08b761 861
4cbc57f0 862 cbArrayFloat mSavedRatios; // length-ratios bofore some of the bars was expanded
8e08b761
JS
863
864public:
4cbc57f0
JS
865 // Constructor.
866
867 cbRowInfo(void);
8e08b761 868
4cbc57f0 869 // Destructor.
8e08b761 870
4cbc57f0 871 ~cbRowInfo();
8e08b761 872
4cbc57f0 873 // Returns the first bar.
8e08b761 874
4cbc57f0
JS
875 inline cbBarInfo* GetFirstBar()
876
877 { return mBars.GetCount() ? mBars[0] : NULL; }
8e08b761
JS
878};
879
4cbc57f0
JS
880/*
881Helper class used internally by the wxFrameLayout class.
882Holds and manages bar information.
883*/
884
8e08b761
JS
885class cbBarInfo : public wxObject
886{
4cbc57f0 887 DECLARE_DYNAMIC_CLASS( cbBarInfo )
8e08b761 888public:
4cbc57f0
JS
889 // textual name, by which this bar is refered in layout-customization dialogs
890 wxString mName;
8e08b761 891
4cbc57f0
JS
892 // stores bar's bounds in pane's coordinates
893 wxRect mBounds;
8e08b761 894
4cbc57f0
JS
895 // stores precalculated bar's bounds in parent frame's coordinates
896 wxRect mBoundsInParent;
8e08b761 897
4cbc57f0
JS
898 // back-ref to the row, which contains this bar
899 cbRowInfo* mpRow;
8e08b761 900
4cbc57f0
JS
901 // are set up according to the types of the surrounding bars in the row
902 bool mHasLeftHandle;
903 bool mHasRightHandle;
8e08b761 904
4cbc57f0 905 cbDimInfo mDimInfo; // preferred sizes for each, control bar state
ffc6ce3f 906
4cbc57f0 907 int mState; // (see definition of controlbar states)
8e08b761 908
4cbc57f0
JS
909 int mAlignment; // alignment of the pane to which this
910 // bar is currently placed
8e08b761 911
4cbc57f0
JS
912 int mRowNo; // row, into which this bar would be placed,
913 // when in the docking state
8e08b761 914
4cbc57f0
JS
915 wxWindow* mpBarWnd; // the actual window object, NULL if no window
916 // is attached to the control bar (possible!)
8e08b761 917
4cbc57f0 918 double mLenRatio; // length ratio among not-fixed-size bars
8e08b761 919
4cbc57f0
JS
920 wxPoint mPosIfFloated; // stored last position when bar was in "floated" state
921 // poistion is stored in parent-window's coordinates
ffc6ce3f 922
4cbc57f0 923 cbUpdateMgrData mUMgrData; // info stored for updates-manager
8e08b761 924
4cbc57f0
JS
925 cbBarInfo* mpNext; // next. bar in the row
926 cbBarInfo* mpPrev; // prev. bar in the row
8e08b761
JS
927
928public:
4cbc57f0
JS
929 // Constructor.
930
931 cbBarInfo(void);
932
933 // Destructor.
8e08b761 934
4cbc57f0 935 ~cbBarInfo();
8e08b761 936
4cbc57f0 937 // Returns TRUE if this bar is fixed.
8e08b761 938
4cbc57f0
JS
939 inline bool IsFixed() const { return mDimInfo.mIsFixed; }
940
941 // Returns TRUE if this bar is expanded.
942
943 inline bool IsExpanded() const { return this == mpRow->mpExpandedBar; }
8e08b761
JS
944};
945
4cbc57f0
JS
946/*
947Used for storing the original bar's positions in the row, when the 'non-destructive-friction'
948option is turned on.
949*/
8e08b761
JS
950
951class cbBarShapeData : public wxObject
952{
953public:
4cbc57f0
JS
954 wxRect mBounds;
955 double mLenRatio;
8e08b761
JS
956};
957
4cbc57f0
JS
958/*
959Used for traversing through all bars of all rows in the pane.
960*/
8e08b761
JS
961
962class wxBarIterator
963{
4cbc57f0
JS
964 RowArrayT* mpRows;
965 cbRowInfo* mpRow;
966 cbBarInfo* mpBar;
8e08b761
JS
967
968public:
4cbc57f0
JS
969 // Constructor, taking row array.
970
971 wxBarIterator( RowArrayT& rows );
972
973 // Resets the iterator to the start of the first row.
974
975 void Reset();
8e08b761 976
4cbc57f0 977 // Advances the iterator and returns TRUE if a bar is available.
ffc6ce3f 978
4cbc57f0 979 bool Next();
8e08b761 980
4cbc57f0
JS
981 // Gets the current bar information.
982
983 cbBarInfo& BarInfo();
984
985 // Returns a reference to the currently traversed row.
986
987 cbRowInfo& RowInfo();
8e08b761
JS
988};
989
4cbc57f0
JS
990/*
991A structure holding configuration options,
992which are usually the same for all panes in
993a frame layout.
994*/
8e08b761
JS
995
996class cbCommonPaneProperties : public wxObject
997{
4cbc57f0
JS
998 DECLARE_DYNAMIC_CLASS( cbCommonPaneProperties )
999
1000 // look-and-feel configuration
8e08b761 1001
4cbc57f0
JS
1002 bool mRealTimeUpdatesOn; // default: ON
1003 bool mOutOfPaneDragOn; // default: ON
1004 bool mExactDockPredictionOn; // default: OFF
6e8515a3 1005 bool mNonDestructFrictionOn; // default: OFF
8e08b761 1006
4cbc57f0 1007 bool mShow3DPaneBorderOn; // default: ON
8e08b761 1008
4cbc57f0 1009 // FOR NOW:: the below properties are reserved for the "future"
8e08b761 1010
4cbc57f0
JS
1011 bool mBarFloatingOn; // default: OFF
1012 bool mRowProportionsOn; // default: OFF
1013 bool mColProportionsOn; // default: ON
1014 bool mBarCollapseIconsOn; // default: OFF
1015 bool mBarDragHintsOn; // default: OFF
8e08b761 1016
4cbc57f0 1017 // minimal dimensions for not-fixed bars in this pane (16x16 default)
8e08b761 1018
4cbc57f0 1019 wxSize mMinCBarDim;
8e08b761 1020
4cbc57f0 1021 // width/height of resizing sash
8e08b761 1022
4cbc57f0 1023 int mResizeHandleSize;
ffc6ce3f 1024
4cbc57f0 1025 // Default constructor.
8e08b761 1026
4cbc57f0 1027 cbCommonPaneProperties(void);
8e08b761
JS
1028};
1029
4cbc57f0
JS
1030/*
1031This class manages containment and control of control bars
1032along one of the four edges of the parent frame.
1033*/
8e08b761
JS
1034
1035class cbDockPane : public wxObject
1036{
1037public:
4cbc57f0 1038 DECLARE_DYNAMIC_CLASS( cbDockPane )
8e08b761 1039
4cbc57f0
JS
1040 // look-and-feel configuration for this pane
1041 cbCommonPaneProperties mProps;
8e08b761 1042
4cbc57f0 1043 // pane margins (in frame's coordinate-syst. orientation)
8e08b761 1044
4cbc57f0
JS
1045 int mLeftMargin; // default: 2 pixels
1046 int mRightMargin; // default: 2 pixels
1047 int mTopMargin; // default: 2 pixels
1048 int mBottomMargin; // default: 2 pixels
ffc6ce3f 1049
8e08b761 1050public:
4cbc57f0
JS
1051 // position of the pane in frame's coordinates
1052 wxRect mBoundsInParent;
8e08b761 1053
4cbc57f0
JS
1054 // pane width and height in pane's coordinates
1055 int mPaneWidth;
1056 int mPaneHeight;
8e08b761 1057
4cbc57f0 1058 int mAlignment;
8e08b761 1059
4cbc57f0
JS
1060 // info stored for updates-manager
1061 cbUpdateMgrData mUMgrData;
8e08b761
JS
1062
1063public: /* protected really */
1064
4cbc57f0
JS
1065 RowArrayT mRows;
1066 wxFrameLayout* mpLayout; // back-ref
8e08b761 1067
4cbc57f0 1068 // transient properties
8e08b761 1069
4cbc57f0 1070 wxList mRowShapeData; // shapes of bars of recently modified row,
6e8515a3 1071 // stored when in "non-destructive-friction" mode
4cbc57f0 1072 cbRowInfo* mpStoredRow; // row-info for which the shapes are stored
8e08b761 1073
4cbc57f0 1074 friend class wxFrameLayout;
8e08b761
JS
1075
1076public: /* protected really (accessed only by plugins) */
1077
4cbc57f0
JS
1078 // Returns the row info for a row index. Internal function called by plugins.
1079
1080 cbRowInfo* GetRow( int row );
1081
1082 // Returns the row index for the given row info. Internal function called by plugins.
1083
1084 int GetRowIndex( cbRowInfo* pRow );
1085
1086 // Returns the row at the given vertical position.
1087 // Returns -1 if the row is not present at given vertical position.
1088 // Internal function called by plugins.
1089
1090 int GetRowAt( int paneY );
1091
1092 // Returns the row between the given vertical positions.
1093 // Returns -1 if the row is not present.
1094 // Internal function called by plugins.
1095
1096 int GetRowAt( int upperY, int lowerY );
1097
1098 // Sets up flags in the row information structure, so that
1099 // they match the changed state of row items correctly.
1100 // Internal function called by plugins.
1101
1102 void SyncRowFlags( cbRowInfo* pRow );
1103
1104 // Returns TRUE if the bar's dimension information indicates a fixed size.
1105 // Internal function called by plugins.
1106
1107 bool IsFixedSize( cbBarInfo* pInfo );
1108
1109 // Returns the number of bars whose size is not fixed.
1110 // Internal function called by plugins.
1111
1112 int GetNotFixedBarsCount( cbRowInfo* pRow );
1113
1114 // Gets the vertical position at the given row.
1115 // Internal function called by plugins.
1116
1117 int GetRowY( cbRowInfo* pRow );
1118
1119 // Returns TRUE if there are any variable-sized rows above this one.
1120 // Internal function called by plugins.
1121
1122 bool HasNotFixedRowsAbove( cbRowInfo* pRow );
1123
1124 // Returns TRUE if there are any variable-sized rows below this one.
1125 // Internal function called by plugins.
1126
1127 bool HasNotFixedRowsBelow( cbRowInfo* pRow );
1128
1129 // Returns TRUE if there are any variable-sized rows to the left of this one.
1130 // Internal function called by plugins.
1131
1132 bool HasNotFixedBarsLeft ( cbBarInfo* pBar );
1133
1134 // Returns TRUE if there are any variable-sized rows to the right of this one.
1135 // Internal function called by plugins.
8e08b761 1136
4cbc57f0 1137 bool HasNotFixedBarsRight( cbBarInfo* pBar );
8e08b761 1138
4cbc57f0
JS
1139 // Calculate lengths.
1140 // Internal function called by plugins.
8e08b761 1141
4cbc57f0 1142 virtual void CalcLengthRatios( cbRowInfo* pInRow );
8e08b761 1143
4cbc57f0
JS
1144 // Generates a cbLayoutRowEvent event to recalculate row layouts.
1145 // Internal function called by plugins.
8e08b761 1146
4cbc57f0 1147 virtual void RecalcRowLayout( cbRowInfo* pRow );
8e08b761 1148
4cbc57f0
JS
1149 // Expands the bar.
1150 // Internal function called by plugins.
8e08b761 1151
4cbc57f0 1152 virtual void ExpandBar( cbBarInfo* pBar );
8e08b761 1153
4cbc57f0
JS
1154 // Contracts the bar.
1155 // Internal function called by plugins.
8e08b761 1156
4cbc57f0 1157 virtual void ContractBar( cbBarInfo* pBar );
8e08b761 1158
4cbc57f0
JS
1159 // Sets up links between bars.
1160 // Internal function called by plugins.
8e08b761 1161
4cbc57f0 1162 void InitLinksForRow( cbRowInfo* pRow );
8e08b761 1163
4cbc57f0
JS
1164 // Sets up links between bars.
1165 // Internal function called by plugins.
8e08b761 1166
4cbc57f0 1167 void InitLinksForRows();
8e08b761 1168
4cbc57f0
JS
1169 // Coordinate translation between parent's frame and this pane.
1170 // Internal function called by plugins.
8e08b761 1171
4cbc57f0 1172 void FrameToPane( int* x, int* y );
8e08b761 1173
4cbc57f0
JS
1174 // Coordinate translation between parent's frame and this pane.
1175 // Internal function called by plugins.
8e08b761 1176
4cbc57f0
JS
1177 void PaneToFrame( int* x, int* y );
1178
1179 // Coordinate translation between parent's frame and this pane.
1180 // Internal function called by plugins.
1181
1182 void FrameToPane( wxRect* pRect );
1183
1184 // Coordinate translation between parent's frame and this pane.
1185 // Internal function called by plugins.
1186
1187 void PaneToFrame( wxRect* pRect );
1188
1189 // Returns TRUE if pos is within the given rectangle.
1190 // Internal function called by plugins.
1191
1192 inline bool HasPoint( const wxPoint& pos, int x, int y, int width, int height );
1193
1194 // Returns the minimal row height for the given row.
1195 // Internal function called by plugins.
1196
1197 int GetMinimalRowHeight( cbRowInfo* pRow );
1198
1199 // Sets the row height for the given height. newHeight includes the height of row handles, if present.
1200 // Internal function called by plugins.
1201
1202 void SetRowHeight( cbRowInfo* pRow, int newHeight );
1203
1204 // Inserts the bar at the given row number.
1205 // Internal function called by plugins.
1206
1207 void DoInsertBar( cbBarInfo* pBar, int rowNo );
8e08b761
JS
1208
1209public: /* protected really (accessed only by plugins) */
1210
4cbc57f0
JS
1211 // Generates a cbDrawBarDecorEvent and sends it to the layout to paint the bar decorations.
1212 // Internal function called by plugins.
1213
1214 virtual void PaintBarDecorations( cbBarInfo* pBar, wxDC& dc );
1215
1216 // Generates a cbDrawBarHandlesEvent and sends it to the layout to paint the bar handles.
1217 // Internal function called by plugins.
1218
1219 virtual void PaintBarHandles( cbBarInfo* pBar, wxDC& dc );
1220
1221 // Calls PaintBarDecorations and PaintBarHandles.
1222 // Internal function called by plugins.
1223
1224 virtual void PaintBar( cbBarInfo* pBar, wxDC& dc );
1225
1226 // Generates cbDrawRowHandlesEvent and cbDrawRowDecorEvent and sends them to the layout.
1227 // Internal function called by plugins.
1228
1229 virtual void PaintRowHandles( cbRowInfo* pRow, wxDC& dc );
1230
1231 // Generates cbDrawRowBkGroundEvent and sends it to the layout.
1232 // Internal function called by plugins.
1233
1234 virtual void PaintRowBackground ( cbRowInfo* pRow, wxDC& dc );
1235
1236 // Calls PaintBarDecorations for each row.
1237 // Internal function called by plugins.
1238
1239 virtual void PaintRowDecorations( cbRowInfo* pRow, wxDC& dc );
1240
1241 // Calls PaintRowBackground, PaintRowDecorations, PaintRowHandles.
1242 // Internal function called by plugins.
1243
1244 virtual void PaintRow( cbRowInfo* pRow, wxDC& dc );
1245
1246 // Generates cbDrawPaneBkGroundEvent and sends it to the layout.
1247 // Internal function called by plugins.
1248
1249 virtual void PaintPaneBackground( wxDC& dc );
1250
1251 // Generates cbDrawPaneDecorEvent and sends it to the layout.
1252 // Internal function called by plugins.
1253
1254 virtual void PaintPaneDecorations( wxDC& dc );
1255
1256 // Paints the pane background, the row background and decorations,
1257 // and finally the pane decorations.
1258 // Internal function called by plugins.
1259
1260 virtual void PaintPane( wxDC& dc );
1261
1262 // Generates a cbSizeBarWndEvent and sends it to the layout.
1263 // Internal function called by plugins.
1264
1265 virtual void SizeBar( cbBarInfo* pBar );
1266
1267 // Calls SizeBar for each bar in the row.
1268 // Internal function called by plugins.
1269
1270 virtual void SizeRowObjects( cbRowInfo* pRow );
1271
1272 // Calls SizeRowObjects for each row.
1273 // Internal function called by plugins.
1274
1275 virtual void SizePaneObjects();
1276
1277 // Generates cbStartDrawInAreaEvent and sends it to the layout.
1278 // Internal function called by plugins.
1279
1280 virtual wxDC* StartDrawInArea ( const wxRect& area );
1281
1282 // Generates cbFinishDrawInAreaEvent and sends it to the layout.
1283 // Internal function called by plugins.
1284
1285 virtual void FinishDrawInArea( const wxRect& area );
8e08b761
JS
1286
1287public: /* public members */
1288
4cbc57f0
JS
1289 // Default constructor.
1290
1291 cbDockPane(void);
1292
1293 // Constructor, taking alignment and layout panel.
1294
1295 cbDockPane( int alignment, wxFrameLayout* pPanel );
1296
1297 // Sets pane's margins in frame's coordinate orientations.
1298
1299 void SetMargins( int top, int bottom, int left, int right );
1300
1301 // Destructor.
1302
1303 virtual ~cbDockPane();
1304
1305 // Removes the bar from this pane. Does not destroy the bar.
1306
1307 virtual void RemoveBar( cbBarInfo* pBar );
1308
1309 // Inserts the bar into this pane. rect is given in the parent frame's coordinates.
1310
1311 virtual void InsertBar( cbBarInfo* pBar, const wxRect& rect );
8e08b761 1312
4cbc57f0
JS
1313 // Inserts the bar into the given row, with dimensions and position
1314 // stored in pBarInfo->mBounds. Returns the node of inserted bar.
8e08b761 1315
4cbc57f0 1316 virtual void InsertBar( cbBarInfo* pBar, cbRowInfo* pIntoRow );
8e08b761 1317
4cbc57f0
JS
1318 // Inserts bar and sets its position according to the preferred settings
1319 // given in pBarInfo.
8e08b761 1320
4cbc57f0 1321 virtual void InsertBar( cbBarInfo* pBarInfo );
8e08b761 1322
4cbc57f0 1323 // Removes the row from this pane. Does not destroy the row object.
8e08b761 1324
4cbc57f0 1325 virtual void RemoveRow( cbRowInfo* pRow );
ffc6ce3f 1326
4cbc57f0
JS
1327 // Inserts a row. Does not refresh the inserted row immediately.
1328 // If pBeforeRowNode is NULL, the row is appended to the end of pane's row list.
8e08b761 1329
4cbc57f0 1330 virtual void InsertRow( cbRowInfo* pRow, cbRowInfo* pBeforeRow );
8e08b761 1331
4cbc57f0 1332 // Sets pane's width in the pane's coordinates (including margins).
8e08b761 1333
4cbc57f0 1334 void SetPaneWidth(int width);
8e08b761 1335
4cbc57f0 1336 // Set the position and dimensions of the pane in the parent frame's coordinates.
8e08b761 1337
4cbc57f0 1338 void SetBoundsInParent( const wxRect& rect );
ffc6ce3f 1339
4cbc57f0 1340 // Returns the bounds of the pane, in parent coordinates.
8e08b761 1341
4cbc57f0 1342 inline wxRect& GetRealRect() { return mBoundsInParent; }
8e08b761 1343
4cbc57f0 1344 // Returns an array of rows. Used by updates-managers.
8e08b761 1345
4cbc57f0 1346 inline RowArrayT& GetRowList() { return mRows; }
8e08b761 1347
4cbc57f0 1348 // Returns the first row.
8e08b761 1349
4cbc57f0 1350 inline cbRowInfo* GetFirstRow()
8e08b761 1351
4cbc57f0 1352 { return mRows.GetCount() ? mRows[0] : NULL; }
ffc6ce3f 1353
4cbc57f0 1354 // Returns TRUE if the given bar is present in this pane.
8e08b761 1355
4cbc57f0 1356 bool BarPresent( cbBarInfo* pBar );
8e08b761 1357
4cbc57f0 1358 // Returns the height in the pane's coordinates.
8e08b761 1359
4cbc57f0 1360 int GetPaneHeight();
8e08b761 1361
4cbc57f0
JS
1362 // Returns the alignment for this pane. The value is one of
1363 // FL_ALIGN_TOP, FL_ALIGN_BOTTOM, FL_ALIGN_LEFT, FL_ALIGN_RIGHT.
8e08b761 1364
4cbc57f0 1365 int GetAlignment();
8e08b761 1366
4cbc57f0 1367 // Returns TRUE if the given mask matches the pane's mask.
8e08b761 1368
4cbc57f0 1369 bool MatchesMask( int paneMask );
8e08b761 1370
4cbc57f0 1371 // Returns TRUE if the pane is aligned to the top or bottom.
8e08b761 1372
4cbc57f0
JS
1373 inline bool IsHorizontal()
1374 {
1375 return (mAlignment == FL_ALIGN_TOP ||
1376 mAlignment == FL_ALIGN_BOTTOM );
1377 }
8e08b761 1378
4cbc57f0 1379 // Generates events to perform layout calculations.
8e08b761 1380
4cbc57f0 1381 virtual void RecalcLayout();
8e08b761 1382
4cbc57f0
JS
1383 // Returns wxCBAR_DOCKED_HORIZONTALLY if the alignment is top or bottom,
1384 // or wxCBAR_DOCKED_VERTICALLY otherwise.
1385
1386 virtual int GetDockingState();
1387
1388 // Returns the result of hit-testing items in the pane.
1389 // See CB_HITTEST_RESULT enumerated type.
1390 // pos is the position in this pane's coordinates.
1391
1392 virtual int HitTestPaneItems( const wxPoint& pos,
1393 cbRowInfo** ppRow,
1394 cbBarInfo** ppBar
1395 );
1396
1397 // Returns the bar's resize range.
1398
1399 void GetBarResizeRange( cbBarInfo* pBar, int* from, int *till, bool forLeftHandle );
1400
1401 // Returns the row's resize range.
1402
1403 void GetRowResizeRange( cbRowInfo* pRow, int* from, int* till, bool forUpperHandle );
1404
1405 // Finds the bar information by corresponding window.
1406
1407 cbBarInfo* GetBarInfoByWindow( wxWindow* pBarWnd );
8e08b761
JS
1408
1409public: /* protected really (accessed only by plugins) */
1410
4cbc57f0 1411 // Row/bar resizing related helper-method.
8e08b761 1412
4cbc57f0 1413 void DrawVertHandle ( wxDC& dc, int x, int y, int height );
8e08b761 1414
4cbc57f0 1415 // Row/bar resizing related helper-method.
8e08b761 1416
4cbc57f0 1417 void DrawHorizHandle( wxDC& dc, int x, int y, int width );
8e08b761 1418
4cbc57f0 1419 // Row/bar resizing related helper-method.
8e08b761 1420
4cbc57f0
JS
1421 void ResizeRow( cbRowInfo* pRow, int ofs, bool forUpperHandle );
1422
1423 // Row/bar resizing related helper-method.
1424
1425 void ResizeBar( cbBarInfo* pBar, int ofs, bool forLeftHandle );
1426
1427 // Returns row shape data.
1428 // cbBarShapeData objects will be added to the given pLst.
1429 // cbBarShapeData is used for storing the original bar's positions in the row,
1430 // when the 'non-destructive-friction' option is turned on.
1431
1432 void GetRowShapeData( cbRowInfo* pRow, wxList* pLst );
1433
1434 // Sets the shape data for the given row, using the data provided in pLst.
1435 // cbBarShapeData is used for storing the original bar's positions in the row,
1436 // when the 'non-destructive-friction' option is turned on.
1437
1438 void SetRowShapeData( cbRowInfo* pRowNode, wxList* pLst );
8e08b761
JS
1439};
1440
1441/*
4cbc57f0
JS
1442This class declares an abstract interface for optimized logic that should refresh
1443areas of frame layout that actually need to be updated. This should be extended in future
1444to implement a custom updating strategy.
1445*/
8e08b761
JS
1446
1447class cbUpdatesManagerBase : public wxObject
1448{
4cbc57f0 1449 DECLARE_ABSTRACT_CLASS( cbUpdatesManagerBase )
8e08b761
JS
1450
1451public: /* protected really, accessed by serializer (if any) */
1452
4cbc57f0 1453 wxFrameLayout* mpLayout;
8e08b761
JS
1454
1455public:
4cbc57f0 1456 // Default constructor
8e08b761 1457
4cbc57f0
JS
1458 cbUpdatesManagerBase(void)
1459 : mpLayout( 0 ) {}
8e08b761 1460
4cbc57f0 1461 // Constructor taking layout panel.
ffc6ce3f 1462
4cbc57f0
JS
1463 cbUpdatesManagerBase( wxFrameLayout* pPanel )
1464 : mpLayout( pPanel ) {}
8e08b761 1465
4cbc57f0 1466 // Destructor.
8e08b761 1467
4cbc57f0 1468 virtual ~cbUpdatesManagerBase() {}
8e08b761 1469
4cbc57f0 1470 // Sets the associated layout.
8e08b761 1471
4cbc57f0 1472 void SetLayout( wxFrameLayout* pLayout ) { mpLayout = pLayout; }
8e08b761 1473
4cbc57f0
JS
1474 // This function receives a notification from the frame layout (in the order in which
1475 // they would usually be invoked). Custom updates-managers may utilize
1476 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1477
4cbc57f0 1478 virtual void OnStartChanges() = 0;
8e08b761 1479
4cbc57f0
JS
1480 // This function receives a notification from the frame layout (in the order in which
1481 // they would usually be invoked). Custom updates-managers may utilize
1482 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1483
4cbc57f0 1484 virtual void OnRowWillChange( cbRowInfo* pRow, cbDockPane* pInPane ) {}
8e08b761 1485
4cbc57f0
JS
1486 // This function receives a notification from the frame layout (in the order in which
1487 // they would usually be invoked). Custom updates-managers may utilize
1488 // these notifications to implement a more fine-grained updating strategy.
ffc6ce3f 1489
4cbc57f0 1490 virtual void OnBarWillChange( cbBarInfo* pBar, cbRowInfo* pInRow, cbDockPane* pInPane ) {}
ffc6ce3f 1491
4cbc57f0
JS
1492 // This function receives a notification from the frame layout (in the order in which
1493 // they would usually be invoked). Custom updates-managers may utilize
1494 // these notifications to implement a more fine-grained updating strategy.
ffc6ce3f 1495
4cbc57f0 1496 virtual void OnPaneMarginsWillChange( cbDockPane* pPane ) {}
8e08b761 1497
4cbc57f0
JS
1498 // This function receives a notification from the frame layout (in the order in which
1499 // they would usually be invoked). Custom updates-managers may utilize
1500 // these notifications to implement a more fine-grained updating strategy.
1501
1502 virtual void OnPaneWillChange( cbDockPane* pPane ) {}
1503
1504 // This function receives a notification from the frame layout (in the order in which
1505 // they would usually be invoked). Custom updates-managers may utilize
1506 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1507
4cbc57f0 1508 virtual void OnFinishChanges() {}
8e08b761 1509
4cbc57f0 1510 // Refreshes parts of the frame layout that need an update.
8e08b761 1511
4cbc57f0
JS
1512 virtual void UpdateNow() = 0;
1513};
8e08b761 1514
4cbc57f0
JS
1515/*
1516Base class for all control-bar plugin events.
1517This is not a dynamically-creatable class.
1518*/
8e08b761 1519
4cbc57f0
JS
1520class cbPluginEvent : public wxEvent
1521{
1522public:
1523 // NULL if event is not addressed to any specific pane.
8e08b761 1524
4cbc57f0 1525 cbDockPane* mpPane;
8e08b761 1526
4cbc57f0 1527 // Not used, but required.
8e08b761 1528
4cbc57f0 1529 virtual wxEvent* Clone() const { return NULL; }
8e08b761 1530
4cbc57f0 1531 // Constructor, taking event type and pane.
8e08b761 1532
4cbc57f0
JS
1533 cbPluginEvent( wxEventType eventType, cbDockPane* pPane )
1534 : mpPane( pPane )
8e08b761 1535
4cbc57f0
JS
1536 { m_eventType = eventType; }
1537};
8e08b761 1538
4cbc57f0 1539// event types handled by plugins
8e08b761 1540
4cbc57f0
JS
1541extern wxEventType cbEVT_PL_LEFT_DOWN;
1542extern wxEventType cbEVT_PL_LEFT_UP;
1543extern wxEventType cbEVT_PL_RIGHT_DOWN;
1544extern wxEventType cbEVT_PL_RIGHT_UP;
1545extern wxEventType cbEVT_PL_MOTION;
8e08b761 1546
4cbc57f0 1547extern wxEventType cbEVT_PL_LEFT_DCLICK;
8e08b761 1548
4cbc57f0
JS
1549extern wxEventType cbEVT_PL_LAYOUT_ROW;
1550extern wxEventType cbEVT_PL_RESIZE_ROW;
1551extern wxEventType cbEVT_PL_LAYOUT_ROWS;
1552extern wxEventType cbEVT_PL_INSERT_BAR;
1553extern wxEventType cbEVT_PL_RESIZE_BAR;
1554extern wxEventType cbEVT_PL_REMOVE_BAR;
1555extern wxEventType cbEVT_PL_SIZE_BAR_WND;
8e08b761 1556
4cbc57f0
JS
1557extern wxEventType cbEVT_PL_DRAW_BAR_DECOR;
1558extern wxEventType cbEVT_PL_DRAW_ROW_DECOR;
1559extern wxEventType cbEVT_PL_DRAW_PANE_DECOR;
1560extern wxEventType cbEVT_PL_DRAW_BAR_HANDLES;
1561extern wxEventType cbEVT_PL_DRAW_ROW_HANDLES;
1562extern wxEventType cbEVT_PL_DRAW_ROW_BKGROUND;
1563extern wxEventType cbEVT_PL_DRAW_PANE_BKGROUND;
8e08b761 1564
4cbc57f0
JS
1565extern wxEventType cbEVT_PL_START_BAR_DRAGGING;
1566extern wxEventType cbEVT_PL_DRAW_HINT_RECT;
8e08b761 1567
4cbc57f0
JS
1568extern wxEventType cbEVT_PL_START_DRAW_IN_AREA;
1569extern wxEventType cbEVT_PL_FINISH_DRAW_IN_AREA;
8e08b761 1570
4cbc57f0
JS
1571extern wxEventType cbEVT_PL_CUSTOMIZE_BAR;
1572extern wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT;
8e08b761 1573
4cbc57f0
JS
1574extern wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT;
1575
1576// Forward declarations, separated by categories.
8e08b761
JS
1577
1578class cbLeftDownEvent;
1579class cbLeftUpEvent;
1580class cbRightDownEvent;
1581class cbRightUpEvent;
1582class cbMotionEvent;
1583class cbLeftDClickEvent;
1584
1585class cbLayoutRowEvent;
1586class cbResizeRowEvent;
1587class cbLayoutRowsEvent;
1588class cbInsertBarEvent;
1589class cbResizeBarEvent;
1590class cbRemoveBarEvent;
1591class cbSizeBarWndEvent;
1592
1593class cbDrawBarDecorEvent;
1594class cbDrawRowDecorEvent;
1595class cbDrawPaneDecorEvent;
1596class cbDrawBarHandlesEvent;
1597class cbDrawRowHandlesEvent;
1598class cbDrawRowBkGroundEvent;
1599class cbDrawPaneBkGroundEvent;
1600
1601class cbStartBarDraggingEvent;
1602class cbDrawHintRectEvent;
1603
1604class cbStartDrawInAreaEvent;
1605class cbFinishDrawInAreaEvent;
1606
1607class cbCustomizeBarEvent;
1608class cbCustomizeLayoutEvent;
1609
4cbc57f0 1610// Definitions for for handler-methods.
ffc6ce3f 1611
8e08b761
JS
1612typedef void (wxEvtHandler::*cbLeftDownHandler )(cbLeftDownEvent&);
1613typedef void (wxEvtHandler::*cbLeftUpHandler )(cbLeftUpEvent&);
1614typedef void (wxEvtHandler::*cbRightDownHandler )(cbRightDownEvent&);
1615typedef void (wxEvtHandler::*cbRightUpHandler )(cbRightUpEvent&);
1616typedef void (wxEvtHandler::*cbMotionHandler )(cbMotionEvent&);
1617typedef void (wxEvtHandler::*cbLeftDClickHandler )(cbLeftDClickEvent&);
1618
1619typedef void (wxEvtHandler::*cbLayoutRowHandler )(cbLayoutRowEvent&);
1620typedef void (wxEvtHandler::*cbResizeRowHandler )(cbResizeRowEvent&);
1621typedef void (wxEvtHandler::*cbLayoutRowsHandler )(cbLayoutRowsEvent&);
1622typedef void (wxEvtHandler::*cbInsertBarHandler )(cbInsertBarEvent&);
1623typedef void (wxEvtHandler::*cbResizeBarHandler )(cbResizeBarEvent&);
1624typedef void (wxEvtHandler::*cbRemoveBarHandler )(cbRemoveBarEvent&);
1625typedef void (wxEvtHandler::*cbSizeBarWndHandler )(cbSizeBarWndEvent&);
1626
1627typedef void (wxEvtHandler::*cbDrawBarDecorHandler )(cbDrawBarDecorEvent&);
1628typedef void (wxEvtHandler::*cbDrawRowDecorHandler )(cbDrawRowDecorEvent&);
1629typedef void (wxEvtHandler::*cbDrawPaneDecorHandler )(cbDrawPaneDecorEvent&);
1630typedef void (wxEvtHandler::*cbDrawBarHandlesHandler )(cbDrawBarHandlesEvent&);
1631typedef void (wxEvtHandler::*cbDrawRowHandlesHandler )(cbDrawRowHandlesEvent&);
1632typedef void (wxEvtHandler::*cbDrawRowBkGroundHandler )(cbDrawRowBkGroundEvent&);
1633typedef void (wxEvtHandler::*cbDrawPaneBkGroundHandler)(cbDrawPaneBkGroundEvent&);
1634
1635typedef void (wxEvtHandler::*cbStartBarDraggingHandler )(cbStartBarDraggingEvent&);
1636typedef void (wxEvtHandler::*cbDrawHintRectHandler )(cbDrawHintRectEvent&);
1637
1638typedef void (wxEvtHandler::*cbStartDrawInAreaHandler )(cbStartDrawInAreaEvent&);
1639typedef void (wxEvtHandler::*cbFinishDrawInAreaHandler)(cbFinishDrawInAreaEvent&);
1640
1641typedef void (wxEvtHandler::*cbCustomizeBarHandler )(cbCustomizeBarEvent&);
1642typedef void (wxEvtHandler::*cbCustomizeLayoutHandler )(cbCustomizeLayoutEvent&);
1643
4cbc57f0
JS
1644// Macros for creating event table entries for plugin-events.
1645
1646#define EVT_PL_LEFT_DOWN(func) wxEventTableEntry( cbEVT_PL_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDownHandler ) & func, (wxObject *) NULL ),
1647#define EVT_PL_LEFT_UP(func) wxEventTableEntry( cbEVT_PL_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftUpHandler ) & func, (wxObject *) NULL ),
1648#define EVT_PL_RIGHT_DOWN(func) wxEventTableEntry( cbEVT_PL_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightDownHandler ) & func, (wxObject *) NULL ),
1649#define EVT_PL_RIGHT_UP(func) wxEventTableEntry( cbEVT_PL_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightUpHandler ) & func, (wxObject *) NULL ),
1650#define EVT_PL_MOTION(func) wxEventTableEntry( cbEVT_PL_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbMotionHandler ) & func, (wxObject *) NULL ),
1651#define EVT_PL_LEFT_DCLICK(func) wxEventTableEntry( cbEVT_PL_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDClickHandler ) & func, (wxObject *) NULL ),
1652
1653#define EVT_PL_LAYOUT_ROW(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowHandler ) & func, (wxObject *) NULL ),
1654#define EVT_PL_RESIZE_ROW(func) wxEventTableEntry( cbEVT_PL_RESIZE_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeRowHandler ) & func, (wxObject *) NULL ),
1655#define EVT_PL_LAYOUT_ROWS(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROWS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowsHandler ) & func, (wxObject *) NULL ),
1656#define EVT_PL_INSERT_BAR(func) wxEventTableEntry( cbEVT_PL_INSERT_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbInsertBarHandler ) & func, (wxObject *) NULL ),
1657#define EVT_PL_RESIZE_BAR(func) wxEventTableEntry( cbEVT_PL_RESIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeBarHandler ) & func, (wxObject *) NULL ),
1658#define EVT_PL_REMOVE_BAR(func) wxEventTableEntry( cbEVT_PL_REMOVE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRemoveBarHandler ) & func, (wxObject *) NULL ),
1659#define EVT_PL_SIZE_BAR_WND(func) wxEventTableEntry( cbEVT_PL_SIZE_BAR_WND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbSizeBarWndHandler ) & func, (wxObject *) NULL ),
1660
1661#define EVT_PL_DRAW_BAR_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarDecorHandler ) & func, (wxObject *) NULL ),
1662#define EVT_PL_DRAW_ROW_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowDecorHandler ) & func, (wxObject *) NULL ),
1663#define EVT_PL_DRAW_PANE_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneDecorHandler ) & func, (wxObject *) NULL ),
1664#define EVT_PL_DRAW_BAR_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarHandlesHandler ) & func, (wxObject *) NULL ),
1665#define EVT_PL_DRAW_ROW_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowHandlesHandler ) & func, (wxObject *) NULL ),
1666#define EVT_PL_DRAW_ROW_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowBkGroundHandler ) & func, (wxObject *) NULL ),
1667#define EVT_PL_DRAW_PANE_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneBkGroundHandler) & func, (wxObject *) NULL ),
1668
1669#define EVT_PL_START_BAR_DRAGGING(func) wxEventTableEntry( cbEVT_PL_START_BAR_DRAGGING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartBarDraggingHandler) & func, (wxObject *) NULL ),
1670#define EVT_PL_DRAW_HINT_RECT(func) wxEventTableEntry( cbEVT_PL_DRAW_HINT_RECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawHintRectHandler ) & func, (wxObject *) NULL ),
1671
1672
1673#define EVT_PL_START_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_START_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartDrawInAreaHandler) & func, (wxObject *) NULL ),
1674#define EVT_PL_FINISH_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_FINISH_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbFinishDrawInAreaHandler) & func, (wxObject *) NULL ),
1675
1676#define EVT_PL_CUSTOMIZE_BAR(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeBarHandler) & func, (wxObject *) NULL ),
1677#define EVT_PL_CUSTOMIZE_LAYOUT(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeLayoutHandler) & func, (wxObject *) NULL ),
1678
ffc6ce3f 1679/*
4cbc57f0
JS
1680Abstract base class for all control-bar related plugins.
1681Note: pointer positions of mouse events sent to plugins
1682are always in the pane's coordinates (the pane to which
1683this plugin is hooked).
1684*/
8e08b761
JS
1685
1686class cbPluginBase : public wxEvtHandler
1687{
4cbc57f0 1688 DECLARE_ABSTRACT_CLASS( cbPluginBase )
8e08b761 1689public:
4cbc57f0
JS
1690 // Back-reference to the frame layout.
1691
1692 wxFrameLayout* mpLayout;
1693
1694 // Specifies panes for which this plugin receives events
1695 // (see pane masks definitions).
8e08b761 1696
4cbc57f0 1697 int mPaneMask;
8e08b761 1698
4cbc57f0 1699 // Is TRUE when plugin is ready to handle events.
8e08b761 1700
4cbc57f0 1701 bool mIsReady;
8e08b761
JS
1702
1703public:
4cbc57f0 1704 // Default constructor.
8e08b761 1705
4cbc57f0 1706 cbPluginBase()
8e08b761 1707
4cbc57f0
JS
1708 : mpLayout ( 0 ),
1709 mPaneMask( wxALL_PANES ),
1710 mIsReady ( FALSE )
1711 {}
8e08b761 1712
4cbc57f0 1713 // Constructor taking layout panel and a mask.
8e08b761 1714
4cbc57f0 1715 cbPluginBase( wxFrameLayout* pPanel, int paneMask = wxALL_PANES )
8e08b761 1716
4cbc57f0
JS
1717 : mpLayout ( pPanel ),
1718 mPaneMask( paneMask ),
1719 mIsReady ( FALSE )
1720 {}
8e08b761 1721
4cbc57f0 1722 // Returns the pane mask.
8e08b761 1723
4cbc57f0 1724 inline int GetPaneMask() { return mPaneMask; }
8e08b761 1725
4cbc57f0 1726 // Destructor. Destroys the whole plugin chain of connected plugins.
8e08b761 1727
4cbc57f0 1728 virtual ~cbPluginBase();
8e08b761 1729
4cbc57f0
JS
1730 // Override this method to do plugin-specific initialization.
1731 // At this point plugin is already attached to the frame layout,
1732 // and pane masks are set.
1733
1734 virtual void OnInitPlugin() { mIsReady = TRUE; }
1735
1736 // Returns TRUE if the plugin is ready to receive events.
1737
1738 bool IsReady() { return mIsReady; }
8e08b761 1739
4cbc57f0
JS
1740 // Overridden to determine whether the target pane specified in the
1741 // event matches the pane mask of this plugin (specific plugins
1742 // do not override this method).
8e08b761 1743
4cbc57f0
JS
1744 virtual bool ProcessEvent(wxEvent& event);
1745};
1746
1747/*
1748Class for mouse left down events.
1749*/
8e08b761
JS
1750
1751class cbLeftDownEvent : public cbPluginEvent
1752{
1753public:
4cbc57f0
JS
1754 wxPoint mPos;
1755
1756 // Constructor, taking mouse position and pane.
8e08b761 1757
4cbc57f0 1758 cbLeftDownEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1759
4cbc57f0
JS
1760 : cbPluginEvent( cbEVT_PL_LEFT_DOWN, pPane ),
1761 mPos( pos )
1762 {}
8e08b761
JS
1763};
1764
4cbc57f0
JS
1765/*
1766Class for mouse left up events.
1767*/
1768
8e08b761
JS
1769class cbLeftUpEvent : public cbPluginEvent
1770{
1771public:
4cbc57f0
JS
1772 wxPoint mPos;
1773
1774 // Constructor, taking mouse position and pane.
8e08b761 1775
4cbc57f0 1776 cbLeftUpEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1777
4cbc57f0
JS
1778 : cbPluginEvent( cbEVT_PL_LEFT_UP, pPane ),
1779 mPos( pos )
1780 {}
8e08b761
JS
1781};
1782
4cbc57f0
JS
1783/*
1784Class for mouse right down events.
1785*/
1786
8e08b761
JS
1787class cbRightDownEvent : public cbPluginEvent
1788{
1789public:
4cbc57f0 1790 wxPoint mPos;
8e08b761 1791
4cbc57f0 1792 // Constructor, taking mouse position and pane.
8e08b761 1793
4cbc57f0
JS
1794 cbRightDownEvent( const wxPoint& pos, cbDockPane* pPane )
1795
1796 : cbPluginEvent( cbEVT_PL_RIGHT_DOWN, pPane ),
1797 mPos( pos )
1798 {}
8e08b761
JS
1799};
1800
4cbc57f0
JS
1801/*
1802Class for mouse right up events.
1803*/
1804
8e08b761
JS
1805class cbRightUpEvent : public cbPluginEvent
1806{
1807public:
4cbc57f0 1808 wxPoint mPos;
8e08b761 1809
4cbc57f0 1810 // Constructor, taking mouse position and pane.
8e08b761 1811
4cbc57f0
JS
1812 cbRightUpEvent( const wxPoint& pos, cbDockPane* pPane )
1813
1814 : cbPluginEvent( cbEVT_PL_RIGHT_UP, pPane ),
1815 mPos( pos )
1816 {}
8e08b761
JS
1817};
1818
4cbc57f0
JS
1819/*
1820Class for mouse motion events.
1821*/
1822
8e08b761
JS
1823class cbMotionEvent : public cbPluginEvent
1824{
1825public:
4cbc57f0
JS
1826 wxPoint mPos;
1827
1828 // Constructor, taking mouse position and pane.
8e08b761 1829
4cbc57f0 1830 cbMotionEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1831
4cbc57f0
JS
1832 : cbPluginEvent( cbEVT_PL_MOTION, pPane ),
1833 mPos( pos )
1834 {}
8e08b761
JS
1835};
1836
4cbc57f0
JS
1837/*
1838Class for mouse left double click events.
1839*/
1840
8e08b761
JS
1841class cbLeftDClickEvent : public cbPluginEvent
1842{
1843public:
4cbc57f0
JS
1844 wxPoint mPos;
1845
1846 // Constructor, taking mouse position and pane.
8e08b761 1847
4cbc57f0 1848 cbLeftDClickEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1849
4cbc57f0
JS
1850 : cbPluginEvent( cbEVT_PL_LEFT_DCLICK, pPane ),
1851 mPos( pos )
1852 {}
8e08b761
JS
1853};
1854
4cbc57f0
JS
1855/*
1856Class for single row layout events.
1857*/
8e08b761
JS
1858
1859class cbLayoutRowEvent : public cbPluginEvent
1860{
1861public:
4cbc57f0 1862 cbRowInfo* mpRow;
8e08b761 1863
4cbc57f0 1864 // Constructor, taking row information and pane.
8e08b761 1865
4cbc57f0
JS
1866 cbLayoutRowEvent( cbRowInfo* pRow, cbDockPane* pPane )
1867
1868 : cbPluginEvent( cbEVT_PL_LAYOUT_ROW, pPane ),
1869 mpRow( pRow )
1870 {}
8e08b761
JS
1871};
1872
4cbc57f0
JS
1873/*
1874Class for row resize events.
1875*/
1876
8e08b761
JS
1877class cbResizeRowEvent : public cbPluginEvent
1878{
1879public:
4cbc57f0
JS
1880 cbRowInfo* mpRow;
1881 int mHandleOfs;
1882 bool mForUpperHandle;
8e08b761 1883
4cbc57f0 1884 // Constructor, taking row information, two parameters of currently unknown use, and pane.
8e08b761 1885
4cbc57f0
JS
1886 cbResizeRowEvent( cbRowInfo* pRow, int handleOfs, bool forUpperHandle, cbDockPane* pPane )
1887
1888 : cbPluginEvent( cbEVT_PL_RESIZE_ROW, pPane ),
1889 mpRow( pRow ),
1890 mHandleOfs( handleOfs ),
1891 mForUpperHandle( forUpperHandle )
1892 {}
8e08b761
JS
1893};
1894
4cbc57f0
JS
1895/*
1896Class for multiple rows layout events.
1897*/
1898
8e08b761
JS
1899class cbLayoutRowsEvent : public cbPluginEvent
1900{
1901public:
1902
4cbc57f0 1903 // Constructor, taking pane.
8e08b761 1904
4cbc57f0
JS
1905 cbLayoutRowsEvent( cbDockPane* pPane )
1906
1907 : cbPluginEvent( cbEVT_PL_LAYOUT_ROWS, pPane )
1908 {}
8e08b761
JS
1909};
1910
4cbc57f0
JS
1911/*
1912Class for bar insertion events.
1913*/
1914
8e08b761
JS
1915class cbInsertBarEvent : public cbPluginEvent
1916{
1917public:
4cbc57f0
JS
1918 cbBarInfo* mpBar;
1919 cbRowInfo* mpRow;
1920
1921 // Constructor, taking bar information, row information, and pane.
8e08b761 1922
4cbc57f0 1923 cbInsertBarEvent( cbBarInfo* pBar, cbRowInfo* pIntoRow, cbDockPane* pPane )
8e08b761 1924
4cbc57f0 1925 : cbPluginEvent( cbEVT_PL_INSERT_BAR, pPane ),
8e08b761 1926
4cbc57f0
JS
1927 mpBar( pBar ),
1928 mpRow( pIntoRow )
1929 {}
8e08b761
JS
1930};
1931
4cbc57f0
JS
1932/*
1933Class for bar resize events.
1934*/
1935
8e08b761
JS
1936class cbResizeBarEvent : public cbPluginEvent
1937{
1938public:
4cbc57f0
JS
1939 cbBarInfo* mpBar;
1940 cbRowInfo* mpRow;
1941
1942 // Constructor, taking bar information, row information, and pane.
8e08b761 1943
4cbc57f0 1944 cbResizeBarEvent( cbBarInfo* pBar, cbRowInfo* pRow, cbDockPane* pPane )
8e08b761 1945
4cbc57f0
JS
1946 : cbPluginEvent( cbEVT_PL_RESIZE_BAR, pPane ),
1947 mpBar( pBar ),
1948 mpRow( pRow )
1949 {}
8e08b761
JS
1950};
1951
4cbc57f0
JS
1952/*
1953Class for bar removal events.
1954*/
1955
8e08b761
JS
1956class cbRemoveBarEvent : public cbPluginEvent
1957{
1958public:
4cbc57f0 1959 cbBarInfo* mpBar;
8e08b761 1960
4cbc57f0 1961 // Constructor, taking bar information and pane.
8e08b761 1962
4cbc57f0
JS
1963 cbRemoveBarEvent( cbBarInfo* pBar, cbDockPane* pPane )
1964
1965 : cbPluginEvent( cbEVT_PL_REMOVE_BAR, pPane ),
1966 mpBar( pBar )
1967 {}
8e08b761
JS
1968};
1969
4cbc57f0
JS
1970/*
1971Class for bar window resize events.
1972*/
1973
8e08b761
JS
1974class cbSizeBarWndEvent : public cbPluginEvent
1975{
1976public:
4cbc57f0
JS
1977 cbBarInfo* mpBar;
1978 wxRect mBoundsInParent;
8e08b761 1979
4cbc57f0 1980 // Constructor, taking bar information and pane.
8e08b761 1981
4cbc57f0
JS
1982 cbSizeBarWndEvent( cbBarInfo* pBar, cbDockPane* pPane )
1983
1984 : cbPluginEvent( cbEVT_PL_SIZE_BAR_WND, pPane ),
1985 mpBar( pBar ),
1986 mBoundsInParent( pBar->mBoundsInParent )
1987 {}
8e08b761
JS
1988};
1989
4cbc57f0
JS
1990/*
1991Class for bar decoration drawing events.
1992*/
1993
8e08b761
JS
1994class cbDrawBarDecorEvent : public cbPluginEvent
1995{
1996public:
4cbc57f0
JS
1997 cbBarInfo* mpBar;
1998 wxDC* mpDc;
1999 wxRect mBoundsInParent;
2000
2001 // Constructor, taking bar information, device context, and pane.
8e08b761 2002
4cbc57f0 2003 cbDrawBarDecorEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
8e08b761 2004
4cbc57f0
JS
2005 : cbPluginEvent( cbEVT_PL_DRAW_BAR_DECOR, pPane ),
2006 mpBar( pBar ),
2007 mpDc( &dc ),
2008 mBoundsInParent( pBar->mBoundsInParent )
2009 {}
8e08b761
JS
2010};
2011
4cbc57f0
JS
2012/*
2013Class for row decoration drawing events.
2014*/
2015
8e08b761
JS
2016class cbDrawRowDecorEvent : public cbPluginEvent
2017{
2018public:
4cbc57f0
JS
2019 cbRowInfo* mpRow;
2020 wxDC* mpDc;
2021
2022 // Constructor, taking row information, device context, and pane.
8e08b761 2023
4cbc57f0 2024 cbDrawRowDecorEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
8e08b761 2025
4cbc57f0
JS
2026 : cbPluginEvent( cbEVT_PL_DRAW_ROW_DECOR, pPane ),
2027 mpRow( pRow ),
2028 mpDc( &dc )
2029 {}
8e08b761
JS
2030};
2031
4cbc57f0
JS
2032/*
2033Class for pane decoration drawing events.
2034*/
2035
8e08b761
JS
2036class cbDrawPaneDecorEvent : public cbPluginEvent
2037{
2038public:
4cbc57f0
JS
2039 wxDC* mpDc;
2040
2041 // Constructor, taking device context and pane.
8e08b761 2042
4cbc57f0 2043 cbDrawPaneDecorEvent( wxDC& dc, cbDockPane* pPane )
8e08b761 2044
4cbc57f0
JS
2045 : cbPluginEvent( cbEVT_PL_DRAW_PANE_DECOR, pPane ),
2046 mpDc( &dc )
2047 {}
8e08b761
JS
2048};
2049
4cbc57f0
JS
2050/*
2051Class for bar handles drawing events.
2052*/
2053
8e08b761
JS
2054class cbDrawBarHandlesEvent : public cbPluginEvent
2055{
2056public:
4cbc57f0
JS
2057 cbBarInfo* mpBar;
2058 wxDC* mpDc;
2059
2060 // Constructor, taking bar information, device context, and pane.
8e08b761 2061
4cbc57f0 2062 cbDrawBarHandlesEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
8e08b761 2063
4cbc57f0
JS
2064 : cbPluginEvent( cbEVT_PL_DRAW_BAR_HANDLES, pPane ),
2065 mpBar( pBar ),
2066 mpDc( &dc )
2067 {}
8e08b761
JS
2068};
2069
4cbc57f0
JS
2070/*
2071Class for row handles drawing events.
2072*/
2073
8e08b761
JS
2074class cbDrawRowHandlesEvent : public cbPluginEvent
2075{
2076public:
4cbc57f0
JS
2077 cbRowInfo* mpRow;
2078 wxDC* mpDc;
2079
2080 // Constructor, taking row information, device context, and pane.
8e08b761 2081
4cbc57f0 2082 cbDrawRowHandlesEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
8e08b761 2083
4cbc57f0
JS
2084 : cbPluginEvent( cbEVT_PL_DRAW_ROW_HANDLES, pPane ),
2085 mpRow( pRow ),
2086 mpDc( &dc )
2087 {}
8e08b761
JS
2088};
2089
4cbc57f0
JS
2090/*
2091Class for row background drawing events.
2092*/
2093
8e08b761
JS
2094class cbDrawRowBkGroundEvent : public cbPluginEvent
2095{
2096public:
4cbc57f0
JS
2097 cbRowInfo* mpRow;
2098 wxDC* mpDc;
8e08b761 2099
4cbc57f0 2100 // Constructor, taking row information, device context, and pane.
8e08b761 2101
4cbc57f0
JS
2102 cbDrawRowBkGroundEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
2103
2104 : cbPluginEvent( cbEVT_PL_DRAW_ROW_BKGROUND, pPane ),
2105 mpRow( pRow ),
2106 mpDc( &dc )
2107 {}
8e08b761
JS
2108};
2109
4cbc57f0
JS
2110/*
2111Class for pane background drawing events.
2112*/
2113
8e08b761
JS
2114class cbDrawPaneBkGroundEvent : public cbPluginEvent
2115{
2116public:
4cbc57f0 2117 wxDC* mpDc;
8e08b761 2118
4cbc57f0 2119 // Constructor, taking device context and pane.
8e08b761 2120
4cbc57f0
JS
2121 cbDrawPaneBkGroundEvent( wxDC& dc, cbDockPane* pPane )
2122
2123 : cbPluginEvent( cbEVT_PL_DRAW_PANE_BKGROUND, pPane ),
2124 mpDc( &dc )
2125 {}
8e08b761
JS
2126};
2127
4cbc57f0
JS
2128/*
2129Class for start-bar-dragging events.
2130*/
2131
8e08b761
JS
2132class cbStartBarDraggingEvent : public cbPluginEvent
2133{
2134public:
4cbc57f0
JS
2135 cbBarInfo* mpBar;
2136 wxPoint mPos; // is given in frame's coordinates
8e08b761 2137
4cbc57f0 2138 // Constructor, taking bar information, mouse position, and pane.
8e08b761 2139
4cbc57f0
JS
2140 cbStartBarDraggingEvent( cbBarInfo* pBar, const wxPoint& pos, cbDockPane* pPane )
2141
2142 : cbPluginEvent( cbEVT_PL_START_BAR_DRAGGING, pPane ),
2143 mpBar( pBar ),
2144 mPos( pos )
2145 {}
8e08b761
JS
2146};
2147
4cbc57f0
JS
2148/*
2149Class for hint-rectangle drawing events.
2150*/
2151
8e08b761
JS
2152class cbDrawHintRectEvent : public cbPluginEvent
2153{
2154public:
4cbc57f0 2155 wxRect mRect; // is given in frame's coordinates
8e08b761
JS
2156
2157
4cbc57f0
JS
2158 bool mLastTime; // indicates that this event finishes "session" of on-screen drawing,
2159 // thus associated resources can be freed now
2160 bool mEraseRect; // does not have any impact, if recangle is drawn using XOR-mask
8e08b761 2161
4cbc57f0
JS
2162 bool mIsInClient;// in cleint area hint could be drawn differently,
2163 // e.g. with fat/hatched border
8e08b761
JS
2164
2165
4cbc57f0 2166 // Constructor, taking hint rectangle and three flags.
8e08b761 2167
4cbc57f0
JS
2168 cbDrawHintRectEvent( const wxRect& rect, bool isInClient, bool eraseRect, bool lastTime )
2169
2170 : cbPluginEvent( cbEVT_PL_DRAW_HINT_RECT, 0 ),
2171 mRect ( rect ),
2172 mLastTime ( lastTime ),
2173 mEraseRect ( eraseRect ),
2174 mIsInClient( isInClient )
2175 {}
8e08b761
JS
2176};
2177
4cbc57f0
JS
2178/*
2179Class for start drawing in area events.
2180*/
2181
8e08b761
JS
2182class cbStartDrawInAreaEvent : public cbPluginEvent
2183{
2184public:
4cbc57f0
JS
2185 wxRect mArea;
2186 wxDC** mppDc; // points to pointer, where the reference
2187 // to the obtained buffer-context should be placed
2188
2189 // Constructor, taking rectangular area, device context pointer to a pointer, and pane.
8e08b761 2190
4cbc57f0 2191 cbStartDrawInAreaEvent( const wxRect& area, wxDC** ppDCForArea, cbDockPane* pPane )
8e08b761 2192
4cbc57f0
JS
2193 : cbPluginEvent( cbEVT_PL_START_DRAW_IN_AREA, pPane ),
2194 mArea( area ),
2195 mppDc( ppDCForArea )
2196 {}
8e08b761
JS
2197};
2198
4cbc57f0
JS
2199/*
2200Class for finish drawing in area events.
2201*/
2202
8e08b761
JS
2203class cbFinishDrawInAreaEvent : public cbPluginEvent
2204{
2205public:
4cbc57f0
JS
2206 wxRect mArea;
2207
2208 // Constructor, taking rectangular area and pane.
8e08b761 2209
4cbc57f0 2210 cbFinishDrawInAreaEvent( const wxRect& area, cbDockPane* pPane )
8e08b761 2211
4cbc57f0
JS
2212 : cbPluginEvent( cbEVT_PL_FINISH_DRAW_IN_AREA, pPane ),
2213 mArea( area )
2214 {}
8e08b761
JS
2215};
2216
4cbc57f0
JS
2217/*
2218Class for bar customization events.
2219*/
2220
8e08b761
JS
2221class cbCustomizeBarEvent : public cbPluginEvent
2222{
2223public:
4cbc57f0
JS
2224 wxPoint mClickPos; // in parent frame's coordinates
2225 cbBarInfo* mpBar;
2226
2227 // Constructor, taking bar information, mouse position, and pane.
8e08b761 2228
4cbc57f0 2229 cbCustomizeBarEvent( cbBarInfo* pBar, const wxPoint& clickPos, cbDockPane* pPane )
8e08b761 2230
4cbc57f0
JS
2231 : cbPluginEvent( cbEVT_PL_CUSTOMIZE_BAR, pPane ),
2232 mClickPos( clickPos ),
2233 mpBar( pBar )
2234 {}
8e08b761
JS
2235};
2236
4cbc57f0
JS
2237/*
2238Class for layout customization events.
2239*/
2240
8e08b761
JS
2241class cbCustomizeLayoutEvent : public cbPluginEvent
2242{
2243public:
4cbc57f0
JS
2244 wxPoint mClickPos; // in parent frame's coordinates
2245
2246 // Constructor, taking mouse position.
8e08b761 2247
4cbc57f0 2248 cbCustomizeLayoutEvent( const wxPoint& clickPos )
8e08b761 2249
4cbc57f0
JS
2250 : cbPluginEvent( cbEVT_PL_CUSTOMIZE_LAYOUT, 0 ),
2251 mClickPos( clickPos )
2252 {}
8e08b761
JS
2253};
2254
2255#endif /* __CONTROLBAR_G__ */
2256