1/////////////////////////////////////////////////////////////////////////////
2// Name:        toolwnd.h
3// Purpose:     wxToolWindow, cbMiniButton, cbCloseBox, cbCollapseBox,
4//              cbDockBox, cbFloatedBarWindow class declarations.
5// Author:      Aleksandras Gluchovas
6// Modified by:
7// Created:     06/09/98
8// RCS-ID:      $Id: toolwnd.h 35650 2005-09-23 12:56:45Z MR $
9// Copyright:   (c) Aleksandras Gluchovas
10// Licence:     wxWindows licence
11/////////////////////////////////////////////////////////////////////////////
12
13#ifndef __TOOLWND_G__
14#define __TOOLWND_G__
15
16#include "wx/frame.h"
17#include "wx/dynarray.h"
18#include "wx/fl/fldefs.h"
19
20// fixed settings
21
22#define BTN_BOX_HEIGHT       12
23#define BTN_BOX_WIDTH        12
24#define BTN_X_WEIGHT         2
25
26class WXDLLIMPEXP_FL cbMiniButton;
27
28typedef cbMiniButton* cbMinitButtonPtrT;
29
30WXFL_DEFINE_ARRAY_PTR( cbMinitButtonPtrT, cbMiniButtonArrayT );
31
32/*
33A tool window is a special kind of frame that paints its own title, and
34can be used to implement small floating windows.
35*/
36
37class WXDLLIMPEXP_FL wxToolWindow : public wxFrame
38{
39    DECLARE_DYNAMIC_CLASS( wxToolWindow )
40
41public:    /** protected really, accessed only by serializers **/
42
43    cbMiniButtonArrayT mButtons;
44    wxWindow* mpClientWnd;
45
46    wxFont    mTitleFont;
47
48    int       mTitleHeight;
49    int       mClntHorizGap;
50    int       mClntVertGap;
51    int       mWndVertGap;
52    int       mWndHorizGap;
53    int       mButtonGap;
54    int       mInTitleMargin;
55    int       mHintBorder;
56
57    bool      mResizeStarted;
58    bool      mRealTimeUpdatesOn;
59
60    int       mMTolerance;
61
62    int       mCursorType;
63    bool      mMouseCaptured;
64
65    // drag&drop state variables
66
67    wxPoint     mDragOrigin;
68    wxRect      mInitialRect;
69    wxRect      mPrevHintRect;
70    wxScreenDC* mpScrDc;
71
72protected:
73        // Maps client coordinates to screen coordinates.
74    void GetScrWindowRect( wxRect& r );
75
76        // Gets the mouse position in screen coordinates.
77    void GetScrMousePos  ( wxMouseEvent& event, wxPoint& pos );
78
79        // Sets the hint cursor.
80    void SetHintCursor   ( int type );
81
82        // Calculate resized rectangle.
83    void CalcResizedRect( wxRect& rect, wxPoint& delta, const wxSize& minDim );
84
85        // Helper function.
86    void AdjustRectPos( const wxRect& original, const wxSize& newDim, wxRect& newRect );
87
88        // Helper function.
89    wxSize GetMinimalWndDim();
90
91        // Draws the hint rectangle.
92    void DrawHintRect( const wxRect& r );
93
94        // Tests if the mouse position is in this window.
95    int HitTestWindow( wxMouseEvent& event );
96
97        // Lays out the buttons.
98    void LayoutMiniButtons();
99
100public:
101
102        // Default constructor.
103    wxToolWindow();
104
105        // Destructor.
106    ~wxToolWindow();
107
108        // Sets the client for this tool window.
109    void SetClient( wxWindow* pWnd );
110
111        // Returns the client window.
112    wxWindow* GetClient();
113
114        // Sets the title font.
115    void SetTitleFont( wxFont& font );
116
117        // Adds a button. Buttons are added in right-to-left order.
118    void AddMiniButton( cbMiniButton* pBtn );
119
120        // Responds to a paint event.
121    void OnPaint( wxPaintEvent& event );
122
123        // Responds to a mouse move event.
124    void OnMotion( wxMouseEvent& event );
125
126        // Responds to a mouse left down event.
127    void OnLeftDown( wxMouseEvent& event );
128
129        // Responds to a mouse left up event.
130    void OnLeftUp( wxMouseEvent& event );
131
132        // Responds to a size event.
133    void OnSize( wxSizeEvent& event );
134
135        // Responds to an erase background event.
136    void OnEraseBackground( wxEraseEvent& event );
137
138        // Returns the preferred size for the window.
139    virtual wxSize GetPreferredSize( const wxSize& given );
140
141        // Called when a mini button is clicked.
142        // By default, does nothing.
143    virtual void OnMiniButtonClicked( int WXUNUSED(btnIdx) ) {}
144
145        // Handles clicking on the title. By default, does nothing.
146    virtual bool HandleTitleClick( wxMouseEvent& WXUNUSED(event) ) { return false; }
147
148    DECLARE_EVENT_TABLE()
149};
150
151// FIXME:: the code below should be moved to a separate file
152
153#include "wx/fl/controlbar.h"
154
155/*
156cbMiniButton is the base class for a small button that can be placed in a wxToolWindow
157titlebar.
158*/
159
160class cbMiniButton : public wxObject
161{
162public:
163    wxPoint   mPos;
164    wxSize    mDim;
165    bool      mVisible;
166    bool      mEnabled;
167
168    wxFrameLayout* mpLayout;
169    cbDockPane*    mpPane;
170    cbPluginBase*  mpPlugin;
171
172    wxWindow*      mpWnd;
173
174    bool      mWasClicked;
175    bool      mDragStarted;
176
177    bool      mPressed;
178public:
179        // Default constructor.
180    cbMiniButton();
181
182        // Set the position of the button.
183    void SetPos( const wxPoint& pos );
184
185        // Returns true if the given position was over the button.
186    bool HitTest( const wxPoint& pos );
187
188        // Responds to a left down event.
189    void OnLeftDown( const wxPoint& pos );
190
191        // Responds to a left up event.
192    void OnLeftUp( const wxPoint& pos );
193
194        // Responds to a mouse move event.
195    void OnMotion( const wxPoint& pos );
196
197        // Refreshes the button.
198    void Refresh();
199
200        // Draws the button. Override this to implement
201        // the desired appearance.
202    virtual void Draw( wxDC& dc );
203
204        // Returns true if the button was clicked.
205    bool WasClicked();
206
207        // Reset the button.
208    void Reset();
209
210        // Enable or disable the button.
211    void Enable( bool enable ) { mEnabled = enable; }
212
213        // Returns true if this button is pressed.
214    bool IsPressed() { return mPressed; }
215};
216
217/*
218cbCloseBox is a window close button, used in a wxToolWindow titlebar.
219*/
220
221class WXDLLIMPEXP_FL cbCloseBox : public cbMiniButton
222{
223public:
224        // Draws the close button appearance.
225    virtual void Draw( wxDC& dc );
226};
227
228/*
229cbCollapseBox is a window collapse button, used in a wxToolWindow titlebar.
230*/
231
232class WXDLLIMPEXP_FL cbCollapseBox  : public cbMiniButton
233{
234public:
235    bool mIsAtLeft;
236
237        // Draws the collapse button appearance.
238    virtual void Draw( wxDC& dc );
239};
240
241/*
242cbDockBox is a window dock button, used in a wxToolWindow titlebar.
243*/
244
245class WXDLLIMPEXP_FL cbDockBox : public cbMiniButton
246{
247public:
248        // Draws the dock button appearance.
249    virtual void Draw( wxDC& dc );
250};
251
252/*
253cbFloatedBarWindow is a kind of wxToolWindow,
254implementing floating toolbars.
255*/
256
257class WXDLLIMPEXP_FL cbFloatedBarWindow : public wxToolWindow
258{
259    DECLARE_DYNAMIC_CLASS( cbFloatedBarWindow )
260protected:
261    cbBarInfo*     mpBar;
262    wxFrameLayout* mpLayout;
263
264    friend class cbFloatedBarWindowSerializer;
265
266public:
267        // Default constructor.
268    cbFloatedBarWindow();
269
270        // Sets the bar information for this window.
271    void SetBar( cbBarInfo* pBar );
272
273        // Sets the layout for this window.
274    void SetLayout( wxFrameLayout* pLayout );
275
276        // Returns the bar information for this window.
277    cbBarInfo* GetBar();
278
279        // Position the floating window. The given coordinates
280        // are those of the bar itself; the floated container window's
281        // position and size are ajusted accordingly.
282    void PositionFloatedWnd( int scrX,  int scrY,
283                             int width, int height );
284
285        // Overridden function returning the preferred size.
286    virtual wxSize GetPreferredSize( const wxSize& given );
287
288        // Overridden function responding to mouse clicks on mini-buttons.
289    virtual void OnMiniButtonClicked( int btnIdx );
290
291        // Overridden function responding to mouse button clicks on the titlebar.
292    virtual bool HandleTitleClick( wxMouseEvent& event );
293
294        // Responds to double-click mouse events.
295    void OnDblClick( wxMouseEvent& event );
296
297    DECLARE_EVENT_TABLE()
298};
299
300#endif /* __TOOLWND_G__ */
301
302
303