1///////////////////////////////////////////////////////////////////////////// 2// Name: tabpgwin.h 3// Purpose: Contrib. demo 4// Author: Aleksandras Gluchovas 5// Modified by: 19990908 : mj 6// 19990909 : 7// - rename to tabpgwin 8// - restruction of Variable declaration 9// - to prevent Warnings under MingGW32 10// Modified by: 19990909 : mj 11// - mNoVertScroll true = no / false = Original Code 12// the Original Code Paints a Vertical Scroll in wxPagedWindow 13// which is not needed in this Version. Use true for this. 14// Created: 07/09/98 15// RCS-ID: $Id: tabpgwin.h 35650 2005-09-23 12:56:45Z MR $ 16// Copyright: (c) Aleksandras Gluchovas 17// Licence: wxWindows license 18///////////////////////////////////////////////////////////////////////////// 19 20#ifndef __TABPGWIN_G__ 21#define __TABPGWIN_G__ 22 23#include "wx/defs.h" 24#include "wx/window.h" 25#include "wx/string.h" 26 27#define WXCONTROLAREA_VERSION 1.0 28 29// layout types for title bars of the tabs 30// (are selected up by evaluating the available free space ) 31 32class twTabInfo; // forward decl. 33 34#define wxTITLE_IMG_AND_TEXT 0 35#define wxTITLE_IMG_ONLY 1 36#define wxTITLE_BORDER_ONLY 2 37 38/* 39 * class manages and decorates contained "tab"-windows. 40 * Draws decorations similar to those in "Project Workplace" 41 * of Microsoft Developer Studio 4.xx 42 */ 43 44class wxTabbedWindow : public wxPanel 45{ 46 DECLARE_DYNAMIC_CLASS( wxTabbedWindow ) 47 48public: 49 50 friend class wxTabbedWindowSerializer; 51 52 wxList mTabs; 53 void HideInactiveTabs( bool andRepaint ); 54 55 // overrride,to provide different font for tab-labels 56 57 virtual wxFont GetLabelingFont(); 58 59 // FOR NOW:: scrollbars are actually related to wxPagedWindow 60 61 wxScrollBar* mpTabScroll; 62 wxScrollBar* mpHorizScroll; 63 wxScrollBar* mpVertScroll; 64 65public: 66 67 // public properties (invoke ReclaclLayout(true) to apply changes) 68 69 int mVertGap; // default: 3 70 int mHorizGap; // default: 5 71 int mTitleVertGap; // default: 3 72 int mTitleHorizGap; // default: 4 73 int mImageTextGap; // default: 2 74 int mFirstTitleGap; // default: 11 75 int mBorderOnlyWidth; // default: 8 76 77 wxPen mWhitePen; // default: RGB(255,255,255) 78 wxPen mGrayPen; // default: RGB(192,192,192) 79 wxPen mDarkPen; // default: RGB(128,128,128) 80 wxPen mBlackPen; // default: RGB( 0, 0, 0) 81 82 size_t mActiveTab; 83 int mTitleHeight; 84 int mLayoutType; 85 86 // notifications (can be handled by derivatives) 87 88 virtual void OnTabAdded( twTabInfo* WXUNUSED(pInfo) ) {} 89 90 virtual void SizeTabs(int x,int y, int width, int height, bool repant); 91 92public: 93 wxTabbedWindow(); 94 virtual ~wxTabbedWindow(); 95 96 // tabs can be also added when the window is 97 // already displayed - "on the fly" 98 99 virtual void AddTab( wxWindow* pContent, // contained window 100 wxString tabText, // tab label 101 wxString imageFileName = _T(""), // if "", only text label is displayed 102 wxBitmapType imageType = wxBITMAP_TYPE_BMP ); 103 104 // NOTE:: if this AddTab(..) overload is called, the 105 // image bitmap will not be serialized (if performed), 106 // use the above method instead, so that images could 107 // be restored using the given file names 108 109 virtual void AddTab( wxWindow* pContent, 110 wxString tabText, 111 wxBitmap* pImage ); 112 113 virtual void RemoveTab( int tabNo ); 114 115 /* misc accessors */ 116 117 virtual int GetTabCount(); 118 virtual wxWindow* GetTab( int tabNo ); 119 virtual wxWindow* GetActiveTab(); 120 virtual void SetActiveTab( int tabNo ); 121 122 void DrawShadedRect( int x, int y, int width, int height, 123 wxPen& upperPen, wxPen& lowerPen, wxDC& dc ); 124 125 virtual void DrawDecorations( wxDC& dc ); 126 127 // return -1, if non of the title bars was hitted, 128 // otherwise the index of the hitted tab title bar 129 130 virtual int HitTest( const wxPoint& pos ); 131 132 // should be invoked to redisplay window with changed properties 133 134 virtual void RecalcLayout( bool andRepaint = true ); 135 136 // event handlers 137 138 void OnPaint( wxPaintEvent& event ); 139 void OnSize ( wxSizeEvent& event ); 140 141 void OnBkErase( wxEraseEvent& event ); 142 void OnLButtonDown( wxMouseEvent& event ); 143 144 DECLARE_EVENT_TABLE() 145}; 146 147/* 148 * class manages and decorates contained "sheets" (or pages). 149 * Draws decorations similar to those in "Output window" 150 * of Microsoft Developer Studio 4.xx 151 */ 152 153class wxPagedWindow : public wxTabbedWindow 154{ 155 DECLARE_DYNAMIC_CLASS( wxPagedWindow ) 156 // the protected: public: changes prevents Warnings in gcc 157protected: 158 bool mScrollEventInProgress; 159public: 160 int mTabTrianGap; 161 wxBrush mWhiteBrush; 162 wxBrush mGrayBrush; 163 int mCurentRowOfs; 164 int mAdjustableTitleRowLen; // setup by dragging mini-sash 165 // with the mosue pointer 166protected: 167 // drag&drop state variables 168 bool mIsDragged; 169 int mDagOrigin; 170 bool mCursorChanged; 171 wxCursor mResizeCursor; 172 wxCursor mNormalCursor; 173 int mOriginalTitleRowLen; 174 175public: 176 int mTitleRowStart; 177 int mResizeNailGap; 178 int mTitleRowLen; // actual title row length 179 int mNoVertScroll; // No Vertical Scroll true/false 180 181 void DrawPaperBar( twTabInfo& tab, int x, int y, 182 wxBrush& brush, wxPen& pen, wxDC& dc ); 183 184 int GetWholeTabRowLen(); 185 186 // adjusts scorllbars to fit around tabs 187 188 virtual void OnTabAdded( twTabInfo* pInfo ); 189 190 // sets smaller font for page-labels 191 192 virtual wxFont GetLabelingFont(); 193 194public: 195 196 197public: 198 wxPagedWindow(); 199 ~wxPagedWindow(){}; 200 201 // NOTE:: use public methods of the base class 202 // to add "pages" to this window 203 204 /* misc accessors */ 205 206 // below two methods should be called after 207 // the tabs were added (AddTab(..)). Set up 208 // these scrollbars to match the needs of the 209 // tabs added into this area 210 211 wxScrollBar& GetVerticalScrollBar(); 212 wxScrollBar& GetHorizontalScrollBar(); 213 214 virtual void DrawDecorations( wxDC& dc ); 215 216 // return -1, if non of the title bars was hitted, 217 // otherwise the index of the hitted tab title bar 218 219 virtual int HitTest( const wxPoint& pos ); 220 221 virtual void RecalcLayout( bool andRepaint = true ); 222 223 // event handlers 224 225 void OnPaint( wxPaintEvent& event ); 226 void OnSize ( wxSizeEvent& event ); 227 void OnLButtonDown( wxMouseEvent& event ); 228 void OnLButtonUp ( wxMouseEvent& event ); 229 void OnMouseMove ( wxMouseEvent& event ); 230 void OnScroll ( wxScrollEvent& event ); 231 232 DECLARE_EVENT_TABLE() 233}; 234 235// helper structure of wxTabbedWindow 236 237class twTabInfo : public wxObject 238{ 239 DECLARE_DYNAMIC_CLASS( twTabInfo ) 240public: 241 twTabInfo(); 242 ~twTabInfo(){}; 243 244 int ImgWidth(); 245 int ImgHeight(); 246 int ImageToTxtGap( int prefGap ); 247 248 bool HasImg(); 249 wxBitmap& GetImg(); 250 // bool HasText(); 251 unsigned int HasText(); 252 wxString& GetText(); 253 wxWindow& GetContent(); 254 255public: 256 wxWindow* mpContent; 257 wxBitmap mBitMap; 258 259 wxString mText; 260 wxSize mDims; 261 262 // used for serialization 263 wxString mImageFile; 264 long mImageType; 265 266}; 267 268#endif 269