1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: cbBarDragPlugin class
4 // Author: Aleksandras Gluchovas
8 // Copyright: (c) Aleksandras Gluchovas
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef __BARDRAGPL_G__
13 #define __BARDRAGPL_G__
15 #include "wx/fl/controlbar.h"
16 #include "wx/fl/toolwnd.h"
19 Plugin class implementing bar dragging.
22 class WXDLLIMPEXP_FL cbBarDragPlugin
: public cbPluginBase
24 DECLARE_DYNAMIC_CLASS( cbBarDragPlugin
)
27 // plugin is active only in bar-dragging state
29 bool mCanStick
; // flag used to prevent "bouncing" of hint-rectangle
30 wxScreenDC
* mpScrDc
; // created while tracking hint-rect
31 wxCursor
* mpCurCursor
;
33 // rectangle shows the position/dimensions of the bar,
34 // if it would be docked now
43 cbDockPane
* mpSrcPane
; // pane, from which the bar was originally taken
44 int mBarWidthInSrcPane
;
46 cbDockPane
* mpCurPane
;
48 cbBarInfo
* mpDraggedBar
; // bar, which is being dragged
50 wxRect mFloatedBarBounds
;
52 public: /*** public properties ***/
54 int mInClientHintBorder
; // when hint-rect moves within client window area,
55 // the thicker rectangle is drawn using hatched brush,
56 // the default border width for this rectangle is 8 pix.
60 // Internal implementation function.
61 void AdjustHintRect( wxPoint
& mousePos
);
63 // Internal implementation function.
64 void ClipRectInFrame( wxRect
& rect
);
66 // Internal implementation function.
67 void ClipPosInFrame( wxPoint
& pos
);
69 // Internal implementation function. Finds the pane
70 // under the specified rectangle.
71 cbDockPane
* HitTestPanes( wxRect
& rect
);
73 // Internal implementation function. Finds the pane
74 // under the specified point.
75 cbDockPane
* HitTestPanes( wxPoint
& pos
);
77 // Internal implementation function.
78 bool HitsPane( cbDockPane
* pPane
, wxRect
& rect
);
80 // Internal implementation function.
81 void CalcOnScreenDims( wxRect
& rect
);
83 // Internal implementation function.
84 int GetDistanceToPane( cbDockPane
* pPane
, wxPoint
& mousePos
);
86 // Internal implementation function.
87 bool IsInOtherPane ( wxPoint
& mousePos
);
89 // Internal implementation function.
90 bool IsInClientArea( wxPoint
& mousePos
);
92 // Internal implementation function.
93 bool IsInClientArea( wxRect
& rect
);
95 // Internal implementation function.
96 void StickToPane( cbDockPane
* pPane
, wxPoint
& mousePos
);
98 // Internal implementation function.
99 void UnstickFromPane( cbDockPane
* pPane
, wxPoint
& mousePos
);
101 // Internal implementation function.
102 int GetBarWidthInPane( cbDockPane
* pPane
);
104 // Internal implementation function.
105 int GetBarHeightInPane( cbDockPane
* pPane
);
107 // on-screen hint-tracking related methods
109 // Internal implementation function.
110 // Start showing a visual hint while dragging.
111 void StartTracking();
113 // Internal implementation function.
114 // Draw the visual hint while dragging.
115 void DrawHintRect ( wxRect
& rect
, bool isInClientRect
);
117 // Internal implementation function.
118 // Erase the visual hint while dragging.
119 void EraseHintRect( wxRect
& rect
, bool isInClientRect
);
121 // Internal implementation function.
122 // Stop showing the visual hint while dragging.
123 void FinishTracking();
125 // Internal implementation function.
126 // Draw the hint rectangle.
127 void DoDrawHintRect( wxRect
& rect
, bool isInClientRect
);
129 // Internal implementation function.
130 // Converts the given rectangle from window to screen coordinates.
131 void RectToScr( wxRect
& frameRect
, wxRect
& scrRect
);
133 // Internal implementation function.
134 // Show the hint; called within OnMouseMove.
135 void ShowHint( bool prevWasInClient
);
138 // Default constructor.
139 cbBarDragPlugin(void);
141 // Constructor taking a parent frame, and flag. See cbPluginBase.
142 cbBarDragPlugin( wxFrameLayout
* pPanel
, int paneMask
= wxALL_PANES
);
145 virtual ~cbBarDragPlugin();
147 // Handler for plugin event.
148 void OnMouseMove( cbMotionEvent
& event
);
150 // Handler for plugin event.
151 void OnLButtonUp( cbLeftUpEvent
& event
);
153 // Handler for plugin event.
154 void OnLButtonDown( cbLeftDownEvent
& event
);
156 // Handler for plugin event.
157 void OnLDblClick( cbLeftDClickEvent
& event
);
159 // Handles event, which originates from itself.
160 void OnDrawHintRect( cbDrawHintRectEvent
& event
);
162 // Handler for plugin event.
163 void OnStartBarDragging( cbStartBarDraggingEvent
& event
);
165 DECLARE_EVENT_TABLE()
168 #endif /* __BARDRAGPL_G__ */