]> git.saurik.com Git - wxWidgets.git/blame - contrib/include/wx/fl/controlbar.h
Added name to wxShapeCanvas ctor for consistency
[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
41b3c966
GD
826// FIXME: this array definition compiles but probably doesn't do what was intended (GD)
827WX_DEFINE_ARRAY_LONG(float, cbArrayFloat);
8e08b761 828
4cbc57f0
JS
829/*
830Helper class used internally by the wxFrameLayout class.
831Holds and manages information about bar rows.
832*/
833
8e08b761
JS
834class cbRowInfo : public wxObject
835{
4cbc57f0 836 DECLARE_DYNAMIC_CLASS( cbRowInfo )
8e08b761
JS
837public:
838
4cbc57f0 839 BarArrayT mBars; // row content
8e08b761 840
4cbc57f0 841 // row flags (set up according to row-relations)
8e08b761 842
4cbc57f0
JS
843 bool mHasUpperHandle;
844 bool mHasLowerHandle;
845 bool mHasOnlyFixedBars;
846 int mNotFixedBarsCnt;
8e08b761 847
4cbc57f0
JS
848 int mRowWidth;
849 int mRowHeight;
850 int mRowY;
8e08b761 851
4cbc57f0
JS
852 // stores precalculated row's bounds in parent frame's coordinates
853 wxRect mBoundsInParent;
8e08b761 854
4cbc57f0
JS
855 // info stored for updates-manager
856 cbUpdateMgrData mUMgrData;
8e08b761 857
4cbc57f0
JS
858 cbRowInfo* mpNext;
859 cbRowInfo* mpPrev;
8e08b761 860
4cbc57f0 861 cbBarInfo* mpExpandedBar; // NULL, if non of the bars is currently expanded
8e08b761 862
4cbc57f0 863 cbArrayFloat mSavedRatios; // length-ratios bofore some of the bars was expanded
8e08b761
JS
864
865public:
4cbc57f0
JS
866 // Constructor.
867
868 cbRowInfo(void);
8e08b761 869
4cbc57f0 870 // Destructor.
8e08b761 871
4cbc57f0 872 ~cbRowInfo();
8e08b761 873
4cbc57f0 874 // Returns the first bar.
8e08b761 875
4cbc57f0
JS
876 inline cbBarInfo* GetFirstBar()
877
878 { return mBars.GetCount() ? mBars[0] : NULL; }
8e08b761
JS
879};
880
4cbc57f0
JS
881/*
882Helper class used internally by the wxFrameLayout class.
883Holds and manages bar information.
884*/
885
8e08b761
JS
886class cbBarInfo : public wxObject
887{
4cbc57f0 888 DECLARE_DYNAMIC_CLASS( cbBarInfo )
8e08b761 889public:
4cbc57f0
JS
890 // textual name, by which this bar is refered in layout-customization dialogs
891 wxString mName;
8e08b761 892
4cbc57f0
JS
893 // stores bar's bounds in pane's coordinates
894 wxRect mBounds;
8e08b761 895
4cbc57f0
JS
896 // stores precalculated bar's bounds in parent frame's coordinates
897 wxRect mBoundsInParent;
8e08b761 898
4cbc57f0
JS
899 // back-ref to the row, which contains this bar
900 cbRowInfo* mpRow;
8e08b761 901
4cbc57f0
JS
902 // are set up according to the types of the surrounding bars in the row
903 bool mHasLeftHandle;
904 bool mHasRightHandle;
8e08b761 905
4cbc57f0 906 cbDimInfo mDimInfo; // preferred sizes for each, control bar state
ffc6ce3f 907
4cbc57f0 908 int mState; // (see definition of controlbar states)
8e08b761 909
4cbc57f0
JS
910 int mAlignment; // alignment of the pane to which this
911 // bar is currently placed
8e08b761 912
4cbc57f0
JS
913 int mRowNo; // row, into which this bar would be placed,
914 // when in the docking state
8e08b761 915
4cbc57f0
JS
916 wxWindow* mpBarWnd; // the actual window object, NULL if no window
917 // is attached to the control bar (possible!)
8e08b761 918
4cbc57f0 919 double mLenRatio; // length ratio among not-fixed-size bars
8e08b761 920
4cbc57f0
JS
921 wxPoint mPosIfFloated; // stored last position when bar was in "floated" state
922 // poistion is stored in parent-window's coordinates
ffc6ce3f 923
4cbc57f0 924 cbUpdateMgrData mUMgrData; // info stored for updates-manager
8e08b761 925
4cbc57f0
JS
926 cbBarInfo* mpNext; // next. bar in the row
927 cbBarInfo* mpPrev; // prev. bar in the row
8e08b761
JS
928
929public:
4cbc57f0
JS
930 // Constructor.
931
932 cbBarInfo(void);
933
934 // Destructor.
8e08b761 935
4cbc57f0 936 ~cbBarInfo();
8e08b761 937
4cbc57f0 938 // Returns TRUE if this bar is fixed.
8e08b761 939
4cbc57f0
JS
940 inline bool IsFixed() const { return mDimInfo.mIsFixed; }
941
942 // Returns TRUE if this bar is expanded.
943
944 inline bool IsExpanded() const { return this == mpRow->mpExpandedBar; }
8e08b761
JS
945};
946
4cbc57f0
JS
947/*
948Used for storing the original bar's positions in the row, when the 'non-destructive-friction'
949option is turned on.
950*/
8e08b761
JS
951
952class cbBarShapeData : public wxObject
953{
954public:
4cbc57f0
JS
955 wxRect mBounds;
956 double mLenRatio;
8e08b761
JS
957};
958
4cbc57f0
JS
959/*
960Used for traversing through all bars of all rows in the pane.
961*/
8e08b761
JS
962
963class wxBarIterator
964{
4cbc57f0
JS
965 RowArrayT* mpRows;
966 cbRowInfo* mpRow;
967 cbBarInfo* mpBar;
8e08b761
JS
968
969public:
4cbc57f0
JS
970 // Constructor, taking row array.
971
972 wxBarIterator( RowArrayT& rows );
973
974 // Resets the iterator to the start of the first row.
975
976 void Reset();
8e08b761 977
4cbc57f0 978 // Advances the iterator and returns TRUE if a bar is available.
ffc6ce3f 979
4cbc57f0 980 bool Next();
8e08b761 981
4cbc57f0
JS
982 // Gets the current bar information.
983
984 cbBarInfo& BarInfo();
985
986 // Returns a reference to the currently traversed row.
987
988 cbRowInfo& RowInfo();
8e08b761
JS
989};
990
4cbc57f0
JS
991/*
992A structure holding configuration options,
993which are usually the same for all panes in
994a frame layout.
995*/
8e08b761
JS
996
997class cbCommonPaneProperties : public wxObject
998{
4cbc57f0
JS
999 DECLARE_DYNAMIC_CLASS( cbCommonPaneProperties )
1000
1001 // look-and-feel configuration
8e08b761 1002
4cbc57f0
JS
1003 bool mRealTimeUpdatesOn; // default: ON
1004 bool mOutOfPaneDragOn; // default: ON
1005 bool mExactDockPredictionOn; // default: OFF
6e8515a3 1006 bool mNonDestructFrictionOn; // default: OFF
8e08b761 1007
4cbc57f0 1008 bool mShow3DPaneBorderOn; // default: ON
8e08b761 1009
4cbc57f0 1010 // FOR NOW:: the below properties are reserved for the "future"
8e08b761 1011
4cbc57f0
JS
1012 bool mBarFloatingOn; // default: OFF
1013 bool mRowProportionsOn; // default: OFF
1014 bool mColProportionsOn; // default: ON
1015 bool mBarCollapseIconsOn; // default: OFF
1016 bool mBarDragHintsOn; // default: OFF
8e08b761 1017
4cbc57f0 1018 // minimal dimensions for not-fixed bars in this pane (16x16 default)
8e08b761 1019
4cbc57f0 1020 wxSize mMinCBarDim;
8e08b761 1021
4cbc57f0 1022 // width/height of resizing sash
8e08b761 1023
4cbc57f0 1024 int mResizeHandleSize;
ffc6ce3f 1025
4cbc57f0 1026 // Default constructor.
8e08b761 1027
4cbc57f0 1028 cbCommonPaneProperties(void);
69b8ed1b
GD
1029
1030 // Copy constructor
1031
1032 cbCommonPaneProperties(const cbCommonPaneProperties&);
1033
1034 // Assignment operator
1035
1036 cbCommonPaneProperties& operator=(const cbCommonPaneProperties&);
8e08b761
JS
1037};
1038
4cbc57f0
JS
1039/*
1040This class manages containment and control of control bars
1041along one of the four edges of the parent frame.
1042*/
8e08b761
JS
1043
1044class cbDockPane : public wxObject
1045{
1046public:
4cbc57f0 1047 DECLARE_DYNAMIC_CLASS( cbDockPane )
8e08b761 1048
4cbc57f0
JS
1049 // look-and-feel configuration for this pane
1050 cbCommonPaneProperties mProps;
8e08b761 1051
4cbc57f0 1052 // pane margins (in frame's coordinate-syst. orientation)
8e08b761 1053
4cbc57f0
JS
1054 int mLeftMargin; // default: 2 pixels
1055 int mRightMargin; // default: 2 pixels
1056 int mTopMargin; // default: 2 pixels
1057 int mBottomMargin; // default: 2 pixels
ffc6ce3f 1058
8e08b761 1059public:
4cbc57f0
JS
1060 // position of the pane in frame's coordinates
1061 wxRect mBoundsInParent;
8e08b761 1062
4cbc57f0
JS
1063 // pane width and height in pane's coordinates
1064 int mPaneWidth;
1065 int mPaneHeight;
8e08b761 1066
4cbc57f0 1067 int mAlignment;
8e08b761 1068
4cbc57f0
JS
1069 // info stored for updates-manager
1070 cbUpdateMgrData mUMgrData;
8e08b761
JS
1071
1072public: /* protected really */
1073
4cbc57f0
JS
1074 RowArrayT mRows;
1075 wxFrameLayout* mpLayout; // back-ref
8e08b761 1076
4cbc57f0 1077 // transient properties
8e08b761 1078
4cbc57f0 1079 wxList mRowShapeData; // shapes of bars of recently modified row,
6e8515a3 1080 // stored when in "non-destructive-friction" mode
4cbc57f0 1081 cbRowInfo* mpStoredRow; // row-info for which the shapes are stored
8e08b761 1082
4cbc57f0 1083 friend class wxFrameLayout;
8e08b761
JS
1084
1085public: /* protected really (accessed only by plugins) */
1086
4cbc57f0
JS
1087 // Returns the row info for a row index. Internal function called by plugins.
1088
1089 cbRowInfo* GetRow( int row );
1090
1091 // Returns the row index for the given row info. Internal function called by plugins.
1092
1093 int GetRowIndex( cbRowInfo* pRow );
1094
1095 // Returns the row at the given vertical position.
1096 // Returns -1 if the row is not present at given vertical position.
1097 // Internal function called by plugins.
1098
1099 int GetRowAt( int paneY );
1100
1101 // Returns the row between the given vertical positions.
1102 // Returns -1 if the row is not present.
1103 // Internal function called by plugins.
1104
1105 int GetRowAt( int upperY, int lowerY );
1106
1107 // Sets up flags in the row information structure, so that
1108 // they match the changed state of row items correctly.
1109 // Internal function called by plugins.
1110
1111 void SyncRowFlags( cbRowInfo* pRow );
1112
1113 // Returns TRUE if the bar's dimension information indicates a fixed size.
1114 // Internal function called by plugins.
1115
1116 bool IsFixedSize( cbBarInfo* pInfo );
1117
1118 // Returns the number of bars whose size is not fixed.
1119 // Internal function called by plugins.
1120
1121 int GetNotFixedBarsCount( cbRowInfo* pRow );
1122
1123 // Gets the vertical position at the given row.
1124 // Internal function called by plugins.
1125
1126 int GetRowY( cbRowInfo* pRow );
1127
1128 // Returns TRUE if there are any variable-sized rows above this one.
1129 // Internal function called by plugins.
1130
1131 bool HasNotFixedRowsAbove( cbRowInfo* pRow );
1132
1133 // Returns TRUE if there are any variable-sized rows below this one.
1134 // Internal function called by plugins.
1135
1136 bool HasNotFixedRowsBelow( cbRowInfo* pRow );
1137
1138 // Returns TRUE if there are any variable-sized rows to the left of this one.
1139 // Internal function called by plugins.
1140
1141 bool HasNotFixedBarsLeft ( cbBarInfo* pBar );
1142
1143 // Returns TRUE if there are any variable-sized rows to the right of this one.
1144 // Internal function called by plugins.
8e08b761 1145
4cbc57f0 1146 bool HasNotFixedBarsRight( cbBarInfo* pBar );
8e08b761 1147
4cbc57f0
JS
1148 // Calculate lengths.
1149 // Internal function called by plugins.
8e08b761 1150
4cbc57f0 1151 virtual void CalcLengthRatios( cbRowInfo* pInRow );
8e08b761 1152
4cbc57f0
JS
1153 // Generates a cbLayoutRowEvent event to recalculate row layouts.
1154 // Internal function called by plugins.
8e08b761 1155
4cbc57f0 1156 virtual void RecalcRowLayout( cbRowInfo* pRow );
8e08b761 1157
4cbc57f0
JS
1158 // Expands the bar.
1159 // Internal function called by plugins.
8e08b761 1160
4cbc57f0 1161 virtual void ExpandBar( cbBarInfo* pBar );
8e08b761 1162
4cbc57f0
JS
1163 // Contracts the bar.
1164 // Internal function called by plugins.
8e08b761 1165
4cbc57f0 1166 virtual void ContractBar( cbBarInfo* pBar );
8e08b761 1167
4cbc57f0
JS
1168 // Sets up links between bars.
1169 // Internal function called by plugins.
8e08b761 1170
4cbc57f0 1171 void InitLinksForRow( cbRowInfo* pRow );
8e08b761 1172
4cbc57f0
JS
1173 // Sets up links between bars.
1174 // Internal function called by plugins.
8e08b761 1175
4cbc57f0 1176 void InitLinksForRows();
8e08b761 1177
4cbc57f0
JS
1178 // Coordinate translation between parent's frame and this pane.
1179 // Internal function called by plugins.
8e08b761 1180
4cbc57f0 1181 void FrameToPane( int* x, int* y );
8e08b761 1182
4cbc57f0
JS
1183 // Coordinate translation between parent's frame and this pane.
1184 // Internal function called by plugins.
8e08b761 1185
4cbc57f0
JS
1186 void PaneToFrame( int* x, int* y );
1187
1188 // Coordinate translation between parent's frame and this pane.
1189 // Internal function called by plugins.
1190
1191 void FrameToPane( wxRect* pRect );
1192
1193 // Coordinate translation between parent's frame and this pane.
1194 // Internal function called by plugins.
1195
1196 void PaneToFrame( wxRect* pRect );
1197
1198 // Returns TRUE if pos is within the given rectangle.
1199 // Internal function called by plugins.
1200
1201 inline bool HasPoint( const wxPoint& pos, int x, int y, int width, int height );
1202
1203 // Returns the minimal row height for the given row.
1204 // Internal function called by plugins.
1205
1206 int GetMinimalRowHeight( cbRowInfo* pRow );
1207
1208 // Sets the row height for the given height. newHeight includes the height of row handles, if present.
1209 // Internal function called by plugins.
1210
1211 void SetRowHeight( cbRowInfo* pRow, int newHeight );
1212
1213 // Inserts the bar at the given row number.
1214 // Internal function called by plugins.
1215
1216 void DoInsertBar( cbBarInfo* pBar, int rowNo );
8e08b761
JS
1217
1218public: /* protected really (accessed only by plugins) */
1219
4cbc57f0
JS
1220 // Generates a cbDrawBarDecorEvent and sends it to the layout to paint the bar decorations.
1221 // Internal function called by plugins.
1222
1223 virtual void PaintBarDecorations( cbBarInfo* pBar, wxDC& dc );
1224
1225 // Generates a cbDrawBarHandlesEvent and sends it to the layout to paint the bar handles.
1226 // Internal function called by plugins.
1227
1228 virtual void PaintBarHandles( cbBarInfo* pBar, wxDC& dc );
1229
1230 // Calls PaintBarDecorations and PaintBarHandles.
1231 // Internal function called by plugins.
1232
1233 virtual void PaintBar( cbBarInfo* pBar, wxDC& dc );
1234
1235 // Generates cbDrawRowHandlesEvent and cbDrawRowDecorEvent and sends them to the layout.
1236 // Internal function called by plugins.
1237
1238 virtual void PaintRowHandles( cbRowInfo* pRow, wxDC& dc );
1239
1240 // Generates cbDrawRowBkGroundEvent and sends it to the layout.
1241 // Internal function called by plugins.
1242
1243 virtual void PaintRowBackground ( cbRowInfo* pRow, wxDC& dc );
1244
1245 // Calls PaintBarDecorations for each row.
1246 // Internal function called by plugins.
1247
1248 virtual void PaintRowDecorations( cbRowInfo* pRow, wxDC& dc );
1249
1250 // Calls PaintRowBackground, PaintRowDecorations, PaintRowHandles.
1251 // Internal function called by plugins.
1252
1253 virtual void PaintRow( cbRowInfo* pRow, wxDC& dc );
1254
1255 // Generates cbDrawPaneBkGroundEvent and sends it to the layout.
1256 // Internal function called by plugins.
1257
1258 virtual void PaintPaneBackground( wxDC& dc );
1259
1260 // Generates cbDrawPaneDecorEvent and sends it to the layout.
1261 // Internal function called by plugins.
1262
1263 virtual void PaintPaneDecorations( wxDC& dc );
1264
1265 // Paints the pane background, the row background and decorations,
1266 // and finally the pane decorations.
1267 // Internal function called by plugins.
1268
1269 virtual void PaintPane( wxDC& dc );
1270
1271 // Generates a cbSizeBarWndEvent and sends it to the layout.
1272 // Internal function called by plugins.
1273
1274 virtual void SizeBar( cbBarInfo* pBar );
1275
1276 // Calls SizeBar for each bar in the row.
1277 // Internal function called by plugins.
1278
1279 virtual void SizeRowObjects( cbRowInfo* pRow );
1280
1281 // Calls SizeRowObjects for each row.
1282 // Internal function called by plugins.
1283
1284 virtual void SizePaneObjects();
1285
1286 // Generates cbStartDrawInAreaEvent and sends it to the layout.
1287 // Internal function called by plugins.
1288
1289 virtual wxDC* StartDrawInArea ( const wxRect& area );
1290
1291 // Generates cbFinishDrawInAreaEvent and sends it to the layout.
1292 // Internal function called by plugins.
1293
1294 virtual void FinishDrawInArea( const wxRect& area );
8e08b761
JS
1295
1296public: /* public members */
1297
4cbc57f0
JS
1298 // Default constructor.
1299
1300 cbDockPane(void);
1301
1302 // Constructor, taking alignment and layout panel.
1303
1304 cbDockPane( int alignment, wxFrameLayout* pPanel );
1305
1306 // Sets pane's margins in frame's coordinate orientations.
1307
1308 void SetMargins( int top, int bottom, int left, int right );
1309
1310 // Destructor.
1311
1312 virtual ~cbDockPane();
1313
1314 // Removes the bar from this pane. Does not destroy the bar.
1315
1316 virtual void RemoveBar( cbBarInfo* pBar );
1317
1318 // Inserts the bar into this pane. rect is given in the parent frame's coordinates.
1319
1320 virtual void InsertBar( cbBarInfo* pBar, const wxRect& rect );
8e08b761 1321
4cbc57f0
JS
1322 // Inserts the bar into the given row, with dimensions and position
1323 // stored in pBarInfo->mBounds. Returns the node of inserted bar.
8e08b761 1324
4cbc57f0 1325 virtual void InsertBar( cbBarInfo* pBar, cbRowInfo* pIntoRow );
8e08b761 1326
4cbc57f0
JS
1327 // Inserts bar and sets its position according to the preferred settings
1328 // given in pBarInfo.
8e08b761 1329
4cbc57f0 1330 virtual void InsertBar( cbBarInfo* pBarInfo );
8e08b761 1331
4cbc57f0 1332 // Removes the row from this pane. Does not destroy the row object.
8e08b761 1333
4cbc57f0 1334 virtual void RemoveRow( cbRowInfo* pRow );
ffc6ce3f 1335
4cbc57f0
JS
1336 // Inserts a row. Does not refresh the inserted row immediately.
1337 // If pBeforeRowNode is NULL, the row is appended to the end of pane's row list.
8e08b761 1338
4cbc57f0 1339 virtual void InsertRow( cbRowInfo* pRow, cbRowInfo* pBeforeRow );
8e08b761 1340
4cbc57f0 1341 // Sets pane's width in the pane's coordinates (including margins).
8e08b761 1342
4cbc57f0 1343 void SetPaneWidth(int width);
8e08b761 1344
4cbc57f0 1345 // Set the position and dimensions of the pane in the parent frame's coordinates.
8e08b761 1346
4cbc57f0 1347 void SetBoundsInParent( const wxRect& rect );
ffc6ce3f 1348
4cbc57f0 1349 // Returns the bounds of the pane, in parent coordinates.
8e08b761 1350
4cbc57f0 1351 inline wxRect& GetRealRect() { return mBoundsInParent; }
8e08b761 1352
4cbc57f0 1353 // Returns an array of rows. Used by updates-managers.
8e08b761 1354
4cbc57f0 1355 inline RowArrayT& GetRowList() { return mRows; }
8e08b761 1356
4cbc57f0 1357 // Returns the first row.
8e08b761 1358
4cbc57f0 1359 inline cbRowInfo* GetFirstRow()
8e08b761 1360
4cbc57f0 1361 { return mRows.GetCount() ? mRows[0] : NULL; }
ffc6ce3f 1362
4cbc57f0 1363 // Returns TRUE if the given bar is present in this pane.
8e08b761 1364
4cbc57f0 1365 bool BarPresent( cbBarInfo* pBar );
8e08b761 1366
4cbc57f0 1367 // Returns the height in the pane's coordinates.
8e08b761 1368
4cbc57f0 1369 int GetPaneHeight();
8e08b761 1370
4cbc57f0
JS
1371 // Returns the alignment for this pane. The value is one of
1372 // FL_ALIGN_TOP, FL_ALIGN_BOTTOM, FL_ALIGN_LEFT, FL_ALIGN_RIGHT.
8e08b761 1373
4cbc57f0 1374 int GetAlignment();
8e08b761 1375
4cbc57f0 1376 // Returns TRUE if the given mask matches the pane's mask.
8e08b761 1377
4cbc57f0 1378 bool MatchesMask( int paneMask );
8e08b761 1379
4cbc57f0 1380 // Returns TRUE if the pane is aligned to the top or bottom.
8e08b761 1381
4cbc57f0
JS
1382 inline bool IsHorizontal()
1383 {
1384 return (mAlignment == FL_ALIGN_TOP ||
1385 mAlignment == FL_ALIGN_BOTTOM );
1386 }
8e08b761 1387
4cbc57f0 1388 // Generates events to perform layout calculations.
8e08b761 1389
4cbc57f0 1390 virtual void RecalcLayout();
8e08b761 1391
4cbc57f0
JS
1392 // Returns wxCBAR_DOCKED_HORIZONTALLY if the alignment is top or bottom,
1393 // or wxCBAR_DOCKED_VERTICALLY otherwise.
1394
1395 virtual int GetDockingState();
1396
1397 // Returns the result of hit-testing items in the pane.
1398 // See CB_HITTEST_RESULT enumerated type.
1399 // pos is the position in this pane's coordinates.
1400
1401 virtual int HitTestPaneItems( const wxPoint& pos,
1402 cbRowInfo** ppRow,
1403 cbBarInfo** ppBar
1404 );
1405
1406 // Returns the bar's resize range.
1407
1408 void GetBarResizeRange( cbBarInfo* pBar, int* from, int *till, bool forLeftHandle );
1409
1410 // Returns the row's resize range.
1411
1412 void GetRowResizeRange( cbRowInfo* pRow, int* from, int* till, bool forUpperHandle );
1413
1414 // Finds the bar information by corresponding window.
1415
1416 cbBarInfo* GetBarInfoByWindow( wxWindow* pBarWnd );
8e08b761
JS
1417
1418public: /* protected really (accessed only by plugins) */
1419
4cbc57f0 1420 // Row/bar resizing related helper-method.
8e08b761 1421
4cbc57f0 1422 void DrawVertHandle ( wxDC& dc, int x, int y, int height );
8e08b761 1423
4cbc57f0 1424 // Row/bar resizing related helper-method.
8e08b761 1425
4cbc57f0 1426 void DrawHorizHandle( wxDC& dc, int x, int y, int width );
8e08b761 1427
4cbc57f0 1428 // Row/bar resizing related helper-method.
8e08b761 1429
4cbc57f0
JS
1430 void ResizeRow( cbRowInfo* pRow, int ofs, bool forUpperHandle );
1431
1432 // Row/bar resizing related helper-method.
1433
1434 void ResizeBar( cbBarInfo* pBar, int ofs, bool forLeftHandle );
1435
1436 // Returns row shape data.
1437 // cbBarShapeData objects will be added to the given pLst.
1438 // cbBarShapeData is used for storing the original bar's positions in the row,
1439 // when the 'non-destructive-friction' option is turned on.
1440
1441 void GetRowShapeData( cbRowInfo* pRow, wxList* pLst );
1442
1443 // Sets the shape data for the given row, using the data provided in pLst.
1444 // cbBarShapeData is used for storing the original bar's positions in the row,
1445 // when the 'non-destructive-friction' option is turned on.
1446
1447 void SetRowShapeData( cbRowInfo* pRowNode, wxList* pLst );
8e08b761
JS
1448};
1449
1450/*
4cbc57f0
JS
1451This class declares an abstract interface for optimized logic that should refresh
1452areas of frame layout that actually need to be updated. This should be extended in future
1453to implement a custom updating strategy.
1454*/
8e08b761
JS
1455
1456class cbUpdatesManagerBase : public wxObject
1457{
4cbc57f0 1458 DECLARE_ABSTRACT_CLASS( cbUpdatesManagerBase )
8e08b761
JS
1459
1460public: /* protected really, accessed by serializer (if any) */
1461
4cbc57f0 1462 wxFrameLayout* mpLayout;
8e08b761
JS
1463
1464public:
4cbc57f0 1465 // Default constructor
8e08b761 1466
4cbc57f0
JS
1467 cbUpdatesManagerBase(void)
1468 : mpLayout( 0 ) {}
8e08b761 1469
4cbc57f0 1470 // Constructor taking layout panel.
ffc6ce3f 1471
4cbc57f0
JS
1472 cbUpdatesManagerBase( wxFrameLayout* pPanel )
1473 : mpLayout( pPanel ) {}
8e08b761 1474
4cbc57f0 1475 // Destructor.
8e08b761 1476
4cbc57f0 1477 virtual ~cbUpdatesManagerBase() {}
8e08b761 1478
4cbc57f0 1479 // Sets the associated layout.
8e08b761 1480
4cbc57f0 1481 void SetLayout( wxFrameLayout* pLayout ) { mpLayout = pLayout; }
8e08b761 1482
4cbc57f0
JS
1483 // This function receives a notification from the frame layout (in the order in which
1484 // they would usually be invoked). Custom updates-managers may utilize
1485 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1486
4cbc57f0 1487 virtual void OnStartChanges() = 0;
8e08b761 1488
4cbc57f0
JS
1489 // This function receives a notification from the frame layout (in the order in which
1490 // they would usually be invoked). Custom updates-managers may utilize
1491 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1492
4cbc57f0 1493 virtual void OnRowWillChange( cbRowInfo* pRow, cbDockPane* pInPane ) {}
8e08b761 1494
4cbc57f0
JS
1495 // This function receives a notification from the frame layout (in the order in which
1496 // they would usually be invoked). Custom updates-managers may utilize
1497 // these notifications to implement a more fine-grained updating strategy.
ffc6ce3f 1498
4cbc57f0 1499 virtual void OnBarWillChange( cbBarInfo* pBar, cbRowInfo* pInRow, cbDockPane* pInPane ) {}
ffc6ce3f 1500
4cbc57f0
JS
1501 // This function receives a notification from the frame layout (in the order in which
1502 // they would usually be invoked). Custom updates-managers may utilize
1503 // these notifications to implement a more fine-grained updating strategy.
ffc6ce3f 1504
4cbc57f0 1505 virtual void OnPaneMarginsWillChange( cbDockPane* pPane ) {}
8e08b761 1506
4cbc57f0
JS
1507 // This function receives a notification from the frame layout (in the order in which
1508 // they would usually be invoked). Custom updates-managers may utilize
1509 // these notifications to implement a more fine-grained updating strategy.
1510
1511 virtual void OnPaneWillChange( cbDockPane* pPane ) {}
1512
1513 // This function receives a notification from the frame layout (in the order in which
1514 // they would usually be invoked). Custom updates-managers may utilize
1515 // these notifications to implement a more fine-grained updating strategy.
8e08b761 1516
4cbc57f0 1517 virtual void OnFinishChanges() {}
8e08b761 1518
4cbc57f0 1519 // Refreshes parts of the frame layout that need an update.
8e08b761 1520
4cbc57f0
JS
1521 virtual void UpdateNow() = 0;
1522};
8e08b761 1523
4cbc57f0
JS
1524/*
1525Base class for all control-bar plugin events.
1526This is not a dynamically-creatable class.
1527*/
8e08b761 1528
4cbc57f0
JS
1529class cbPluginEvent : public wxEvent
1530{
1531public:
1532 // NULL if event is not addressed to any specific pane.
8e08b761 1533
4cbc57f0 1534 cbDockPane* mpPane;
8e08b761 1535
4cbc57f0 1536 // Not used, but required.
8e08b761 1537
4cbc57f0 1538 virtual wxEvent* Clone() const { return NULL; }
8e08b761 1539
4cbc57f0 1540 // Constructor, taking event type and pane.
8e08b761 1541
4cbc57f0
JS
1542 cbPluginEvent( wxEventType eventType, cbDockPane* pPane )
1543 : mpPane( pPane )
8e08b761 1544
4cbc57f0
JS
1545 { m_eventType = eventType; }
1546};
8e08b761 1547
4cbc57f0 1548// event types handled by plugins
8e08b761 1549
4cbc57f0
JS
1550extern wxEventType cbEVT_PL_LEFT_DOWN;
1551extern wxEventType cbEVT_PL_LEFT_UP;
1552extern wxEventType cbEVT_PL_RIGHT_DOWN;
1553extern wxEventType cbEVT_PL_RIGHT_UP;
1554extern wxEventType cbEVT_PL_MOTION;
8e08b761 1555
4cbc57f0 1556extern wxEventType cbEVT_PL_LEFT_DCLICK;
8e08b761 1557
4cbc57f0
JS
1558extern wxEventType cbEVT_PL_LAYOUT_ROW;
1559extern wxEventType cbEVT_PL_RESIZE_ROW;
1560extern wxEventType cbEVT_PL_LAYOUT_ROWS;
1561extern wxEventType cbEVT_PL_INSERT_BAR;
1562extern wxEventType cbEVT_PL_RESIZE_BAR;
1563extern wxEventType cbEVT_PL_REMOVE_BAR;
1564extern wxEventType cbEVT_PL_SIZE_BAR_WND;
8e08b761 1565
4cbc57f0
JS
1566extern wxEventType cbEVT_PL_DRAW_BAR_DECOR;
1567extern wxEventType cbEVT_PL_DRAW_ROW_DECOR;
1568extern wxEventType cbEVT_PL_DRAW_PANE_DECOR;
1569extern wxEventType cbEVT_PL_DRAW_BAR_HANDLES;
1570extern wxEventType cbEVT_PL_DRAW_ROW_HANDLES;
1571extern wxEventType cbEVT_PL_DRAW_ROW_BKGROUND;
1572extern wxEventType cbEVT_PL_DRAW_PANE_BKGROUND;
8e08b761 1573
4cbc57f0
JS
1574extern wxEventType cbEVT_PL_START_BAR_DRAGGING;
1575extern wxEventType cbEVT_PL_DRAW_HINT_RECT;
8e08b761 1576
4cbc57f0
JS
1577extern wxEventType cbEVT_PL_START_DRAW_IN_AREA;
1578extern wxEventType cbEVT_PL_FINISH_DRAW_IN_AREA;
8e08b761 1579
4cbc57f0
JS
1580extern wxEventType cbEVT_PL_CUSTOMIZE_BAR;
1581extern wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT;
8e08b761 1582
4cbc57f0
JS
1583extern wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT;
1584
1585// Forward declarations, separated by categories.
8e08b761
JS
1586
1587class cbLeftDownEvent;
1588class cbLeftUpEvent;
1589class cbRightDownEvent;
1590class cbRightUpEvent;
1591class cbMotionEvent;
1592class cbLeftDClickEvent;
1593
1594class cbLayoutRowEvent;
1595class cbResizeRowEvent;
1596class cbLayoutRowsEvent;
1597class cbInsertBarEvent;
1598class cbResizeBarEvent;
1599class cbRemoveBarEvent;
1600class cbSizeBarWndEvent;
1601
1602class cbDrawBarDecorEvent;
1603class cbDrawRowDecorEvent;
1604class cbDrawPaneDecorEvent;
1605class cbDrawBarHandlesEvent;
1606class cbDrawRowHandlesEvent;
1607class cbDrawRowBkGroundEvent;
1608class cbDrawPaneBkGroundEvent;
1609
1610class cbStartBarDraggingEvent;
1611class cbDrawHintRectEvent;
1612
1613class cbStartDrawInAreaEvent;
1614class cbFinishDrawInAreaEvent;
1615
1616class cbCustomizeBarEvent;
1617class cbCustomizeLayoutEvent;
1618
4cbc57f0 1619// Definitions for for handler-methods.
ffc6ce3f 1620
8e08b761
JS
1621typedef void (wxEvtHandler::*cbLeftDownHandler )(cbLeftDownEvent&);
1622typedef void (wxEvtHandler::*cbLeftUpHandler )(cbLeftUpEvent&);
1623typedef void (wxEvtHandler::*cbRightDownHandler )(cbRightDownEvent&);
1624typedef void (wxEvtHandler::*cbRightUpHandler )(cbRightUpEvent&);
1625typedef void (wxEvtHandler::*cbMotionHandler )(cbMotionEvent&);
1626typedef void (wxEvtHandler::*cbLeftDClickHandler )(cbLeftDClickEvent&);
1627
1628typedef void (wxEvtHandler::*cbLayoutRowHandler )(cbLayoutRowEvent&);
1629typedef void (wxEvtHandler::*cbResizeRowHandler )(cbResizeRowEvent&);
1630typedef void (wxEvtHandler::*cbLayoutRowsHandler )(cbLayoutRowsEvent&);
1631typedef void (wxEvtHandler::*cbInsertBarHandler )(cbInsertBarEvent&);
1632typedef void (wxEvtHandler::*cbResizeBarHandler )(cbResizeBarEvent&);
1633typedef void (wxEvtHandler::*cbRemoveBarHandler )(cbRemoveBarEvent&);
1634typedef void (wxEvtHandler::*cbSizeBarWndHandler )(cbSizeBarWndEvent&);
1635
1636typedef void (wxEvtHandler::*cbDrawBarDecorHandler )(cbDrawBarDecorEvent&);
1637typedef void (wxEvtHandler::*cbDrawRowDecorHandler )(cbDrawRowDecorEvent&);
1638typedef void (wxEvtHandler::*cbDrawPaneDecorHandler )(cbDrawPaneDecorEvent&);
1639typedef void (wxEvtHandler::*cbDrawBarHandlesHandler )(cbDrawBarHandlesEvent&);
1640typedef void (wxEvtHandler::*cbDrawRowHandlesHandler )(cbDrawRowHandlesEvent&);
1641typedef void (wxEvtHandler::*cbDrawRowBkGroundHandler )(cbDrawRowBkGroundEvent&);
1642typedef void (wxEvtHandler::*cbDrawPaneBkGroundHandler)(cbDrawPaneBkGroundEvent&);
1643
1644typedef void (wxEvtHandler::*cbStartBarDraggingHandler )(cbStartBarDraggingEvent&);
1645typedef void (wxEvtHandler::*cbDrawHintRectHandler )(cbDrawHintRectEvent&);
1646
1647typedef void (wxEvtHandler::*cbStartDrawInAreaHandler )(cbStartDrawInAreaEvent&);
1648typedef void (wxEvtHandler::*cbFinishDrawInAreaHandler)(cbFinishDrawInAreaEvent&);
1649
1650typedef void (wxEvtHandler::*cbCustomizeBarHandler )(cbCustomizeBarEvent&);
1651typedef void (wxEvtHandler::*cbCustomizeLayoutHandler )(cbCustomizeLayoutEvent&);
1652
4cbc57f0
JS
1653// Macros for creating event table entries for plugin-events.
1654
1655#define EVT_PL_LEFT_DOWN(func) wxEventTableEntry( cbEVT_PL_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDownHandler ) & func, (wxObject *) NULL ),
1656#define EVT_PL_LEFT_UP(func) wxEventTableEntry( cbEVT_PL_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftUpHandler ) & func, (wxObject *) NULL ),
1657#define EVT_PL_RIGHT_DOWN(func) wxEventTableEntry( cbEVT_PL_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightDownHandler ) & func, (wxObject *) NULL ),
1658#define EVT_PL_RIGHT_UP(func) wxEventTableEntry( cbEVT_PL_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRightUpHandler ) & func, (wxObject *) NULL ),
1659#define EVT_PL_MOTION(func) wxEventTableEntry( cbEVT_PL_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbMotionHandler ) & func, (wxObject *) NULL ),
1660#define EVT_PL_LEFT_DCLICK(func) wxEventTableEntry( cbEVT_PL_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLeftDClickHandler ) & func, (wxObject *) NULL ),
1661
1662#define EVT_PL_LAYOUT_ROW(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowHandler ) & func, (wxObject *) NULL ),
1663#define EVT_PL_RESIZE_ROW(func) wxEventTableEntry( cbEVT_PL_RESIZE_ROW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeRowHandler ) & func, (wxObject *) NULL ),
1664#define EVT_PL_LAYOUT_ROWS(func) wxEventTableEntry( cbEVT_PL_LAYOUT_ROWS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbLayoutRowsHandler ) & func, (wxObject *) NULL ),
1665#define EVT_PL_INSERT_BAR(func) wxEventTableEntry( cbEVT_PL_INSERT_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbInsertBarHandler ) & func, (wxObject *) NULL ),
1666#define EVT_PL_RESIZE_BAR(func) wxEventTableEntry( cbEVT_PL_RESIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbResizeBarHandler ) & func, (wxObject *) NULL ),
1667#define EVT_PL_REMOVE_BAR(func) wxEventTableEntry( cbEVT_PL_REMOVE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbRemoveBarHandler ) & func, (wxObject *) NULL ),
1668#define EVT_PL_SIZE_BAR_WND(func) wxEventTableEntry( cbEVT_PL_SIZE_BAR_WND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbSizeBarWndHandler ) & func, (wxObject *) NULL ),
1669
1670#define EVT_PL_DRAW_BAR_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarDecorHandler ) & func, (wxObject *) NULL ),
1671#define EVT_PL_DRAW_ROW_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowDecorHandler ) & func, (wxObject *) NULL ),
1672#define EVT_PL_DRAW_PANE_DECOR(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_DECOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneDecorHandler ) & func, (wxObject *) NULL ),
1673#define EVT_PL_DRAW_BAR_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_BAR_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawBarHandlesHandler ) & func, (wxObject *) NULL ),
1674#define EVT_PL_DRAW_ROW_HANDLES(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_HANDLES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowHandlesHandler ) & func, (wxObject *) NULL ),
1675#define EVT_PL_DRAW_ROW_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_ROW_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawRowBkGroundHandler ) & func, (wxObject *) NULL ),
1676#define EVT_PL_DRAW_PANE_BKGROUND(func) wxEventTableEntry( cbEVT_PL_DRAW_PANE_BKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawPaneBkGroundHandler) & func, (wxObject *) NULL ),
1677
1678#define EVT_PL_START_BAR_DRAGGING(func) wxEventTableEntry( cbEVT_PL_START_BAR_DRAGGING, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartBarDraggingHandler) & func, (wxObject *) NULL ),
1679#define EVT_PL_DRAW_HINT_RECT(func) wxEventTableEntry( cbEVT_PL_DRAW_HINT_RECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbDrawHintRectHandler ) & func, (wxObject *) NULL ),
1680
1681
1682#define EVT_PL_START_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_START_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbStartDrawInAreaHandler) & func, (wxObject *) NULL ),
1683#define EVT_PL_FINISH_DRAW_IN_AREA(func) wxEventTableEntry( cbEVT_PL_FINISH_DRAW_IN_AREA, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbFinishDrawInAreaHandler) & func, (wxObject *) NULL ),
1684
1685#define EVT_PL_CUSTOMIZE_BAR(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_BAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeBarHandler) & func, (wxObject *) NULL ),
1686#define EVT_PL_CUSTOMIZE_LAYOUT(func) wxEventTableEntry( cbEVT_PL_CUSTOMIZE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (cbCustomizeLayoutHandler) & func, (wxObject *) NULL ),
1687
ffc6ce3f 1688/*
4cbc57f0
JS
1689Abstract base class for all control-bar related plugins.
1690Note: pointer positions of mouse events sent to plugins
1691are always in the pane's coordinates (the pane to which
1692this plugin is hooked).
1693*/
8e08b761
JS
1694
1695class cbPluginBase : public wxEvtHandler
1696{
4cbc57f0 1697 DECLARE_ABSTRACT_CLASS( cbPluginBase )
8e08b761 1698public:
4cbc57f0
JS
1699 // Back-reference to the frame layout.
1700
1701 wxFrameLayout* mpLayout;
1702
1703 // Specifies panes for which this plugin receives events
1704 // (see pane masks definitions).
8e08b761 1705
4cbc57f0 1706 int mPaneMask;
8e08b761 1707
4cbc57f0 1708 // Is TRUE when plugin is ready to handle events.
8e08b761 1709
4cbc57f0 1710 bool mIsReady;
8e08b761
JS
1711
1712public:
4cbc57f0 1713 // Default constructor.
8e08b761 1714
4cbc57f0 1715 cbPluginBase()
8e08b761 1716
4cbc57f0
JS
1717 : mpLayout ( 0 ),
1718 mPaneMask( wxALL_PANES ),
1719 mIsReady ( FALSE )
1720 {}
8e08b761 1721
4cbc57f0 1722 // Constructor taking layout panel and a mask.
8e08b761 1723
4cbc57f0 1724 cbPluginBase( wxFrameLayout* pPanel, int paneMask = wxALL_PANES )
8e08b761 1725
4cbc57f0
JS
1726 : mpLayout ( pPanel ),
1727 mPaneMask( paneMask ),
1728 mIsReady ( FALSE )
1729 {}
8e08b761 1730
4cbc57f0 1731 // Returns the pane mask.
8e08b761 1732
4cbc57f0 1733 inline int GetPaneMask() { return mPaneMask; }
8e08b761 1734
4cbc57f0 1735 // Destructor. Destroys the whole plugin chain of connected plugins.
8e08b761 1736
4cbc57f0 1737 virtual ~cbPluginBase();
8e08b761 1738
4cbc57f0
JS
1739 // Override this method to do plugin-specific initialization.
1740 // At this point plugin is already attached to the frame layout,
1741 // and pane masks are set.
1742
1743 virtual void OnInitPlugin() { mIsReady = TRUE; }
1744
1745 // Returns TRUE if the plugin is ready to receive events.
1746
1747 bool IsReady() { return mIsReady; }
8e08b761 1748
4cbc57f0
JS
1749 // Overridden to determine whether the target pane specified in the
1750 // event matches the pane mask of this plugin (specific plugins
1751 // do not override this method).
8e08b761 1752
4cbc57f0
JS
1753 virtual bool ProcessEvent(wxEvent& event);
1754};
1755
1756/*
1757Class for mouse left down events.
1758*/
8e08b761
JS
1759
1760class cbLeftDownEvent : public cbPluginEvent
1761{
1762public:
4cbc57f0
JS
1763 wxPoint mPos;
1764
1765 // Constructor, taking mouse position and pane.
8e08b761 1766
4cbc57f0 1767 cbLeftDownEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1768
4cbc57f0
JS
1769 : cbPluginEvent( cbEVT_PL_LEFT_DOWN, pPane ),
1770 mPos( pos )
1771 {}
8e08b761
JS
1772};
1773
4cbc57f0
JS
1774/*
1775Class for mouse left up events.
1776*/
1777
8e08b761
JS
1778class cbLeftUpEvent : public cbPluginEvent
1779{
1780public:
4cbc57f0
JS
1781 wxPoint mPos;
1782
1783 // Constructor, taking mouse position and pane.
8e08b761 1784
4cbc57f0 1785 cbLeftUpEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1786
4cbc57f0
JS
1787 : cbPluginEvent( cbEVT_PL_LEFT_UP, pPane ),
1788 mPos( pos )
1789 {}
8e08b761
JS
1790};
1791
4cbc57f0
JS
1792/*
1793Class for mouse right down events.
1794*/
1795
8e08b761
JS
1796class cbRightDownEvent : public cbPluginEvent
1797{
1798public:
4cbc57f0 1799 wxPoint mPos;
8e08b761 1800
4cbc57f0 1801 // Constructor, taking mouse position and pane.
8e08b761 1802
4cbc57f0
JS
1803 cbRightDownEvent( const wxPoint& pos, cbDockPane* pPane )
1804
1805 : cbPluginEvent( cbEVT_PL_RIGHT_DOWN, pPane ),
1806 mPos( pos )
1807 {}
8e08b761
JS
1808};
1809
4cbc57f0
JS
1810/*
1811Class for mouse right up events.
1812*/
1813
8e08b761
JS
1814class cbRightUpEvent : public cbPluginEvent
1815{
1816public:
4cbc57f0 1817 wxPoint mPos;
8e08b761 1818
4cbc57f0 1819 // Constructor, taking mouse position and pane.
8e08b761 1820
4cbc57f0
JS
1821 cbRightUpEvent( const wxPoint& pos, cbDockPane* pPane )
1822
1823 : cbPluginEvent( cbEVT_PL_RIGHT_UP, pPane ),
1824 mPos( pos )
1825 {}
8e08b761
JS
1826};
1827
4cbc57f0
JS
1828/*
1829Class for mouse motion events.
1830*/
1831
8e08b761
JS
1832class cbMotionEvent : public cbPluginEvent
1833{
1834public:
4cbc57f0
JS
1835 wxPoint mPos;
1836
1837 // Constructor, taking mouse position and pane.
8e08b761 1838
4cbc57f0 1839 cbMotionEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1840
4cbc57f0
JS
1841 : cbPluginEvent( cbEVT_PL_MOTION, pPane ),
1842 mPos( pos )
1843 {}
8e08b761
JS
1844};
1845
4cbc57f0
JS
1846/*
1847Class for mouse left double click events.
1848*/
1849
8e08b761
JS
1850class cbLeftDClickEvent : public cbPluginEvent
1851{
1852public:
4cbc57f0
JS
1853 wxPoint mPos;
1854
1855 // Constructor, taking mouse position and pane.
8e08b761 1856
4cbc57f0 1857 cbLeftDClickEvent( const wxPoint& pos, cbDockPane* pPane )
8e08b761 1858
4cbc57f0
JS
1859 : cbPluginEvent( cbEVT_PL_LEFT_DCLICK, pPane ),
1860 mPos( pos )
1861 {}
8e08b761
JS
1862};
1863
4cbc57f0
JS
1864/*
1865Class for single row layout events.
1866*/
8e08b761
JS
1867
1868class cbLayoutRowEvent : public cbPluginEvent
1869{
1870public:
4cbc57f0 1871 cbRowInfo* mpRow;
8e08b761 1872
4cbc57f0 1873 // Constructor, taking row information and pane.
8e08b761 1874
4cbc57f0
JS
1875 cbLayoutRowEvent( cbRowInfo* pRow, cbDockPane* pPane )
1876
1877 : cbPluginEvent( cbEVT_PL_LAYOUT_ROW, pPane ),
1878 mpRow( pRow )
1879 {}
8e08b761
JS
1880};
1881
4cbc57f0
JS
1882/*
1883Class for row resize events.
1884*/
1885
8e08b761
JS
1886class cbResizeRowEvent : public cbPluginEvent
1887{
1888public:
4cbc57f0
JS
1889 cbRowInfo* mpRow;
1890 int mHandleOfs;
1891 bool mForUpperHandle;
8e08b761 1892
4cbc57f0 1893 // Constructor, taking row information, two parameters of currently unknown use, and pane.
8e08b761 1894
4cbc57f0
JS
1895 cbResizeRowEvent( cbRowInfo* pRow, int handleOfs, bool forUpperHandle, cbDockPane* pPane )
1896
1897 : cbPluginEvent( cbEVT_PL_RESIZE_ROW, pPane ),
1898 mpRow( pRow ),
1899 mHandleOfs( handleOfs ),
1900 mForUpperHandle( forUpperHandle )
1901 {}
8e08b761
JS
1902};
1903
4cbc57f0
JS
1904/*
1905Class for multiple rows layout events.
1906*/
1907
8e08b761
JS
1908class cbLayoutRowsEvent : public cbPluginEvent
1909{
1910public:
1911
4cbc57f0 1912 // Constructor, taking pane.
8e08b761 1913
4cbc57f0
JS
1914 cbLayoutRowsEvent( cbDockPane* pPane )
1915
1916 : cbPluginEvent( cbEVT_PL_LAYOUT_ROWS, pPane )
1917 {}
8e08b761
JS
1918};
1919
4cbc57f0
JS
1920/*
1921Class for bar insertion events.
1922*/
1923
8e08b761
JS
1924class cbInsertBarEvent : public cbPluginEvent
1925{
1926public:
4cbc57f0
JS
1927 cbBarInfo* mpBar;
1928 cbRowInfo* mpRow;
1929
1930 // Constructor, taking bar information, row information, and pane.
8e08b761 1931
4cbc57f0 1932 cbInsertBarEvent( cbBarInfo* pBar, cbRowInfo* pIntoRow, cbDockPane* pPane )
8e08b761 1933
4cbc57f0 1934 : cbPluginEvent( cbEVT_PL_INSERT_BAR, pPane ),
8e08b761 1935
4cbc57f0
JS
1936 mpBar( pBar ),
1937 mpRow( pIntoRow )
1938 {}
8e08b761
JS
1939};
1940
4cbc57f0
JS
1941/*
1942Class for bar resize events.
1943*/
1944
8e08b761
JS
1945class cbResizeBarEvent : public cbPluginEvent
1946{
1947public:
4cbc57f0
JS
1948 cbBarInfo* mpBar;
1949 cbRowInfo* mpRow;
1950
1951 // Constructor, taking bar information, row information, and pane.
8e08b761 1952
4cbc57f0 1953 cbResizeBarEvent( cbBarInfo* pBar, cbRowInfo* pRow, cbDockPane* pPane )
8e08b761 1954
4cbc57f0
JS
1955 : cbPluginEvent( cbEVT_PL_RESIZE_BAR, pPane ),
1956 mpBar( pBar ),
1957 mpRow( pRow )
1958 {}
8e08b761
JS
1959};
1960
4cbc57f0
JS
1961/*
1962Class for bar removal events.
1963*/
1964
8e08b761
JS
1965class cbRemoveBarEvent : public cbPluginEvent
1966{
1967public:
4cbc57f0 1968 cbBarInfo* mpBar;
8e08b761 1969
4cbc57f0 1970 // Constructor, taking bar information and pane.
8e08b761 1971
4cbc57f0
JS
1972 cbRemoveBarEvent( cbBarInfo* pBar, cbDockPane* pPane )
1973
1974 : cbPluginEvent( cbEVT_PL_REMOVE_BAR, pPane ),
1975 mpBar( pBar )
1976 {}
8e08b761
JS
1977};
1978
4cbc57f0
JS
1979/*
1980Class for bar window resize events.
1981*/
1982
8e08b761
JS
1983class cbSizeBarWndEvent : public cbPluginEvent
1984{
1985public:
4cbc57f0
JS
1986 cbBarInfo* mpBar;
1987 wxRect mBoundsInParent;
8e08b761 1988
4cbc57f0 1989 // Constructor, taking bar information and pane.
8e08b761 1990
4cbc57f0
JS
1991 cbSizeBarWndEvent( cbBarInfo* pBar, cbDockPane* pPane )
1992
1993 : cbPluginEvent( cbEVT_PL_SIZE_BAR_WND, pPane ),
1994 mpBar( pBar ),
1995 mBoundsInParent( pBar->mBoundsInParent )
1996 {}
8e08b761
JS
1997};
1998
4cbc57f0
JS
1999/*
2000Class for bar decoration drawing events.
2001*/
2002
8e08b761
JS
2003class cbDrawBarDecorEvent : public cbPluginEvent
2004{
2005public:
4cbc57f0
JS
2006 cbBarInfo* mpBar;
2007 wxDC* mpDc;
2008 wxRect mBoundsInParent;
2009
2010 // Constructor, taking bar information, device context, and pane.
8e08b761 2011
4cbc57f0 2012 cbDrawBarDecorEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
8e08b761 2013
4cbc57f0
JS
2014 : cbPluginEvent( cbEVT_PL_DRAW_BAR_DECOR, pPane ),
2015 mpBar( pBar ),
2016 mpDc( &dc ),
2017 mBoundsInParent( pBar->mBoundsInParent )
2018 {}
8e08b761
JS
2019};
2020
4cbc57f0
JS
2021/*
2022Class for row decoration drawing events.
2023*/
2024
8e08b761
JS
2025class cbDrawRowDecorEvent : public cbPluginEvent
2026{
2027public:
4cbc57f0
JS
2028 cbRowInfo* mpRow;
2029 wxDC* mpDc;
2030
2031 // Constructor, taking row information, device context, and pane.
8e08b761 2032
4cbc57f0 2033 cbDrawRowDecorEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
8e08b761 2034
4cbc57f0
JS
2035 : cbPluginEvent( cbEVT_PL_DRAW_ROW_DECOR, pPane ),
2036 mpRow( pRow ),
2037 mpDc( &dc )
2038 {}
8e08b761
JS
2039};
2040
4cbc57f0
JS
2041/*
2042Class for pane decoration drawing events.
2043*/
2044
8e08b761
JS
2045class cbDrawPaneDecorEvent : public cbPluginEvent
2046{
2047public:
4cbc57f0
JS
2048 wxDC* mpDc;
2049
2050 // Constructor, taking device context and pane.
8e08b761 2051
4cbc57f0 2052 cbDrawPaneDecorEvent( wxDC& dc, cbDockPane* pPane )
8e08b761 2053
4cbc57f0
JS
2054 : cbPluginEvent( cbEVT_PL_DRAW_PANE_DECOR, pPane ),
2055 mpDc( &dc )
2056 {}
8e08b761
JS
2057};
2058
4cbc57f0
JS
2059/*
2060Class for bar handles drawing events.
2061*/
2062
8e08b761
JS
2063class cbDrawBarHandlesEvent : public cbPluginEvent
2064{
2065public:
4cbc57f0
JS
2066 cbBarInfo* mpBar;
2067 wxDC* mpDc;
2068
2069 // Constructor, taking bar information, device context, and pane.
8e08b761 2070
4cbc57f0 2071 cbDrawBarHandlesEvent( cbBarInfo* pBar, wxDC& dc, cbDockPane* pPane )
8e08b761 2072
4cbc57f0
JS
2073 : cbPluginEvent( cbEVT_PL_DRAW_BAR_HANDLES, pPane ),
2074 mpBar( pBar ),
2075 mpDc( &dc )
2076 {}
8e08b761
JS
2077};
2078
4cbc57f0
JS
2079/*
2080Class for row handles drawing events.
2081*/
2082
8e08b761
JS
2083class cbDrawRowHandlesEvent : public cbPluginEvent
2084{
2085public:
4cbc57f0
JS
2086 cbRowInfo* mpRow;
2087 wxDC* mpDc;
2088
2089 // Constructor, taking row information, device context, and pane.
8e08b761 2090
4cbc57f0 2091 cbDrawRowHandlesEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
8e08b761 2092
4cbc57f0
JS
2093 : cbPluginEvent( cbEVT_PL_DRAW_ROW_HANDLES, pPane ),
2094 mpRow( pRow ),
2095 mpDc( &dc )
2096 {}
8e08b761
JS
2097};
2098
4cbc57f0
JS
2099/*
2100Class for row background drawing events.
2101*/
2102
8e08b761
JS
2103class cbDrawRowBkGroundEvent : public cbPluginEvent
2104{
2105public:
4cbc57f0
JS
2106 cbRowInfo* mpRow;
2107 wxDC* mpDc;
8e08b761 2108
4cbc57f0 2109 // Constructor, taking row information, device context, and pane.
8e08b761 2110
4cbc57f0
JS
2111 cbDrawRowBkGroundEvent( cbRowInfo* pRow, wxDC& dc, cbDockPane* pPane )
2112
2113 : cbPluginEvent( cbEVT_PL_DRAW_ROW_BKGROUND, pPane ),
2114 mpRow( pRow ),
2115 mpDc( &dc )
2116 {}
8e08b761
JS
2117};
2118
4cbc57f0
JS
2119/*
2120Class for pane background drawing events.
2121*/
2122
8e08b761
JS
2123class cbDrawPaneBkGroundEvent : public cbPluginEvent
2124{
2125public:
4cbc57f0 2126 wxDC* mpDc;
8e08b761 2127
4cbc57f0 2128 // Constructor, taking device context and pane.
8e08b761 2129
4cbc57f0
JS
2130 cbDrawPaneBkGroundEvent( wxDC& dc, cbDockPane* pPane )
2131
2132 : cbPluginEvent( cbEVT_PL_DRAW_PANE_BKGROUND, pPane ),
2133 mpDc( &dc )
2134 {}
8e08b761
JS
2135};
2136
4cbc57f0
JS
2137/*
2138Class for start-bar-dragging events.
2139*/
2140
8e08b761
JS
2141class cbStartBarDraggingEvent : public cbPluginEvent
2142{
2143public:
4cbc57f0
JS
2144 cbBarInfo* mpBar;
2145 wxPoint mPos; // is given in frame's coordinates
8e08b761 2146
4cbc57f0 2147 // Constructor, taking bar information, mouse position, and pane.
8e08b761 2148
4cbc57f0
JS
2149 cbStartBarDraggingEvent( cbBarInfo* pBar, const wxPoint& pos, cbDockPane* pPane )
2150
2151 : cbPluginEvent( cbEVT_PL_START_BAR_DRAGGING, pPane ),
2152 mpBar( pBar ),
2153 mPos( pos )
2154 {}
8e08b761
JS
2155};
2156
4cbc57f0
JS
2157/*
2158Class for hint-rectangle drawing events.
2159*/
2160
8e08b761
JS
2161class cbDrawHintRectEvent : public cbPluginEvent
2162{
2163public:
4cbc57f0 2164 wxRect mRect; // is given in frame's coordinates
8e08b761
JS
2165
2166
4cbc57f0
JS
2167 bool mLastTime; // indicates that this event finishes "session" of on-screen drawing,
2168 // thus associated resources can be freed now
2169 bool mEraseRect; // does not have any impact, if recangle is drawn using XOR-mask
8e08b761 2170
4cbc57f0
JS
2171 bool mIsInClient;// in cleint area hint could be drawn differently,
2172 // e.g. with fat/hatched border
8e08b761
JS
2173
2174
4cbc57f0 2175 // Constructor, taking hint rectangle and three flags.
8e08b761 2176
4cbc57f0
JS
2177 cbDrawHintRectEvent( const wxRect& rect, bool isInClient, bool eraseRect, bool lastTime )
2178
2179 : cbPluginEvent( cbEVT_PL_DRAW_HINT_RECT, 0 ),
2180 mRect ( rect ),
2181 mLastTime ( lastTime ),
2182 mEraseRect ( eraseRect ),
2183 mIsInClient( isInClient )
2184 {}
8e08b761
JS
2185};
2186
4cbc57f0
JS
2187/*
2188Class for start drawing in area events.
2189*/
2190
8e08b761
JS
2191class cbStartDrawInAreaEvent : public cbPluginEvent
2192{
2193public:
4cbc57f0
JS
2194 wxRect mArea;
2195 wxDC** mppDc; // points to pointer, where the reference
2196 // to the obtained buffer-context should be placed
2197
2198 // Constructor, taking rectangular area, device context pointer to a pointer, and pane.
8e08b761 2199
4cbc57f0 2200 cbStartDrawInAreaEvent( const wxRect& area, wxDC** ppDCForArea, cbDockPane* pPane )
8e08b761 2201
4cbc57f0
JS
2202 : cbPluginEvent( cbEVT_PL_START_DRAW_IN_AREA, pPane ),
2203 mArea( area ),
2204 mppDc( ppDCForArea )
2205 {}
8e08b761
JS
2206};
2207
4cbc57f0
JS
2208/*
2209Class for finish drawing in area events.
2210*/
2211
8e08b761
JS
2212class cbFinishDrawInAreaEvent : public cbPluginEvent
2213{
2214public:
4cbc57f0
JS
2215 wxRect mArea;
2216
2217 // Constructor, taking rectangular area and pane.
8e08b761 2218
4cbc57f0 2219 cbFinishDrawInAreaEvent( const wxRect& area, cbDockPane* pPane )
8e08b761 2220
4cbc57f0
JS
2221 : cbPluginEvent( cbEVT_PL_FINISH_DRAW_IN_AREA, pPane ),
2222 mArea( area )
2223 {}
8e08b761
JS
2224};
2225
4cbc57f0
JS
2226/*
2227Class for bar customization events.
2228*/
2229
8e08b761
JS
2230class cbCustomizeBarEvent : public cbPluginEvent
2231{
2232public:
4cbc57f0
JS
2233 wxPoint mClickPos; // in parent frame's coordinates
2234 cbBarInfo* mpBar;
2235
2236 // Constructor, taking bar information, mouse position, and pane.
8e08b761 2237
4cbc57f0 2238 cbCustomizeBarEvent( cbBarInfo* pBar, const wxPoint& clickPos, cbDockPane* pPane )
8e08b761 2239
4cbc57f0
JS
2240 : cbPluginEvent( cbEVT_PL_CUSTOMIZE_BAR, pPane ),
2241 mClickPos( clickPos ),
2242 mpBar( pBar )
2243 {}
8e08b761
JS
2244};
2245
4cbc57f0
JS
2246/*
2247Class for layout customization events.
2248*/
2249
8e08b761
JS
2250class cbCustomizeLayoutEvent : public cbPluginEvent
2251{
2252public:
4cbc57f0
JS
2253 wxPoint mClickPos; // in parent frame's coordinates
2254
2255 // Constructor, taking mouse position.
8e08b761 2256
4cbc57f0 2257 cbCustomizeLayoutEvent( const wxPoint& clickPos )
8e08b761 2258
4cbc57f0
JS
2259 : cbPluginEvent( cbEVT_PL_CUSTOMIZE_LAYOUT, 0 ),
2260 mClickPos( clickPos )
2261 {}
8e08b761
JS
2262};
2263
2264#endif /* __CONTROLBAR_G__ */
2265