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