]>
Commit | Line | Data |
---|---|---|
1 | ///////////////////////////////////////////////////////////////////////////// | |
2 | // Name: bardragpl.h | |
3 | // Purpose: cbBarDragPlugin class | |
4 | // Author: Aleksandras Gluchovas | |
5 | // Modified by: | |
6 | // Created: 23/09/98 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Aleksandras Gluchovas | |
9 | // Licence: wxWindows licence | |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | #ifndef __BARDRAGPL_G__ | |
13 | #define __BARDRAGPL_G__ | |
14 | ||
15 | #include "wx/fl/controlbar.h" | |
16 | #include "wx/fl/toolwnd.h" | |
17 | ||
18 | /* | |
19 | Plugin class implementing bar dragging. | |
20 | */ | |
21 | ||
22 | class WXDLLIMPEXP_FL cbBarDragPlugin : public cbPluginBase | |
23 | { | |
24 | DECLARE_DYNAMIC_CLASS( cbBarDragPlugin ) | |
25 | protected: | |
26 | ||
27 | // plugin is active only in bar-dragging state | |
28 | bool mBarDragStarted; | |
29 | bool mCanStick; // flag used to prevent "bouncing" of hint-rectangle | |
30 | wxScreenDC* mpScrDc; // created while tracking hint-rect | |
31 | wxCursor* mpCurCursor; | |
32 | ||
33 | // rectangle shows the position/dimensions of the bar, | |
34 | // if it would be docked now | |
35 | ||
36 | wxRect mPrevHintRect; | |
37 | wxRect mHintRect; | |
38 | ||
39 | ||
40 | int mMouseInRectX; | |
41 | int mMouseInRectY; | |
42 | ||
43 | cbDockPane* mpSrcPane; // pane, from which the bar was originally taken | |
44 | int mBarWidthInSrcPane; | |
45 | ||
46 | cbDockPane* mpCurPane; | |
47 | ||
48 | cbBarInfo* mpDraggedBar; // bar, which is being dragged | |
49 | bool mBarWasFloating; | |
50 | wxRect mFloatedBarBounds; | |
51 | ||
52 | public: /*** public properties ***/ | |
53 | ||
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. | |
57 | ||
58 | protected: | |
59 | ||
60 | // Internal implementation function. | |
61 | void AdjustHintRect( wxPoint& mousePos ); | |
62 | ||
63 | // Internal implementation function. | |
64 | void ClipRectInFrame( wxRect& rect ); | |
65 | ||
66 | // Internal implementation function. | |
67 | void ClipPosInFrame( wxPoint& pos ); | |
68 | ||
69 | // Internal implementation function. Finds the pane | |
70 | // under the specified rectangle. | |
71 | cbDockPane* HitTestPanes( wxRect& rect ); | |
72 | ||
73 | // Internal implementation function. Finds the pane | |
74 | // under the specified point. | |
75 | cbDockPane* HitTestPanes( wxPoint& pos ); | |
76 | ||
77 | // Internal implementation function. | |
78 | bool HitsPane( cbDockPane* pPane, wxRect& rect ); | |
79 | ||
80 | // Internal implementation function. | |
81 | void CalcOnScreenDims( wxRect& rect ); | |
82 | ||
83 | // Internal implementation function. | |
84 | int GetDistanceToPane( cbDockPane* pPane, wxPoint& mousePos ); | |
85 | ||
86 | // Internal implementation function. | |
87 | bool IsInOtherPane ( wxPoint& mousePos ); | |
88 | ||
89 | // Internal implementation function. | |
90 | bool IsInClientArea( wxPoint& mousePos ); | |
91 | ||
92 | // Internal implementation function. | |
93 | bool IsInClientArea( wxRect& rect ); | |
94 | ||
95 | // Internal implementation function. | |
96 | void StickToPane( cbDockPane* pPane, wxPoint& mousePos ); | |
97 | ||
98 | // Internal implementation function. | |
99 | void UnstickFromPane( cbDockPane* pPane, wxPoint& mousePos ); | |
100 | ||
101 | // Internal implementation function. | |
102 | int GetBarWidthInPane( cbDockPane* pPane ); | |
103 | ||
104 | // Internal implementation function. | |
105 | int GetBarHeightInPane( cbDockPane* pPane ); | |
106 | ||
107 | // on-screen hint-tracking related methods | |
108 | ||
109 | // Internal implementation function. | |
110 | // Start showing a visual hint while dragging. | |
111 | void StartTracking(); | |
112 | ||
113 | // Internal implementation function. | |
114 | // Draw the visual hint while dragging. | |
115 | void DrawHintRect ( wxRect& rect, bool isInClientRect); | |
116 | ||
117 | // Internal implementation function. | |
118 | // Erase the visual hint while dragging. | |
119 | void EraseHintRect( wxRect& rect, bool isInClientRect); | |
120 | ||
121 | // Internal implementation function. | |
122 | // Stop showing the visual hint while dragging. | |
123 | void FinishTracking(); | |
124 | ||
125 | // Internal implementation function. | |
126 | // Draw the hint rectangle. | |
127 | void DoDrawHintRect( wxRect& rect, bool isInClientRect); | |
128 | ||
129 | // Internal implementation function. | |
130 | // Converts the given rectangle from window to screen coordinates. | |
131 | void RectToScr( wxRect& frameRect, wxRect& scrRect ); | |
132 | ||
133 | // Internal implementation function. | |
134 | // Show the hint; called within OnMouseMove. | |
135 | void ShowHint( bool prevWasInClient ); | |
136 | ||
137 | public: | |
138 | // Default constructor. | |
139 | cbBarDragPlugin(void); | |
140 | ||
141 | // Constructor taking a parent frame, and flag. See cbPluginBase. | |
142 | cbBarDragPlugin( wxFrameLayout* pPanel, int paneMask = wxALL_PANES ); | |
143 | ||
144 | // Destructor. | |
145 | virtual ~cbBarDragPlugin(); | |
146 | ||
147 | // Handler for plugin event. | |
148 | void OnMouseMove( cbMotionEvent& event ); | |
149 | ||
150 | // Handler for plugin event. | |
151 | void OnLButtonUp( cbLeftUpEvent& event ); | |
152 | ||
153 | // Handler for plugin event. | |
154 | void OnLButtonDown( cbLeftDownEvent& event ); | |
155 | ||
156 | // Handler for plugin event. | |
157 | void OnLDblClick( cbLeftDClickEvent& event ); | |
158 | ||
159 | // Handles event, which originates from itself. | |
160 | void OnDrawHintRect( cbDrawHintRectEvent& event ); | |
161 | ||
162 | // Handler for plugin event. | |
163 | void OnStartBarDragging( cbStartBarDraggingEvent& event ); | |
164 | ||
165 | DECLARE_EVENT_TABLE() | |
166 | }; | |
167 | ||
168 | #endif /* __BARDRAGPL_G__ */ | |
169 |