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