]> git.saurik.com Git - wxWidgets.git/blob - src/os2/tabctrl.cpp
Fix for crash when opening empty node
[wxWidgets.git] / src / os2 / tabctrl.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/os2/tabctrl.cpp
3 // Purpose: wxTabCtrl
4 // Author: David Webster
5 // Modified by:
6 // Created: 10/17/99
7 // RCS-ID: $Id$
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
14
15 #if wxUSE_TAB_DIALOG
16
17 #ifndef WX_PRECOMP
18 #include "wx/wx.h"
19 #include "wx/app.h"
20 #endif
21
22 #include "malloc.h"
23
24 #define INCL_PM
25 #include <os2.h>
26
27 //#include "wx/msw/dib.h"
28 #include "wx/os2/tabctrl.h"
29 #include "wx/os2/private.h"
30 #include "wx/imaglist.h"
31
32 IMPLEMENT_DYNAMIC_CLASS(wxTabCtrl, wxControl)
33
34 BEGIN_EVENT_TABLE(wxTabCtrl, wxControl)
35 END_EVENT_TABLE()
36
37 wxTabCtrl::wxTabCtrl()
38 {
39 m_imageList = NULL;
40 }
41
42 bool wxTabCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
43 long style, const wxString& name)
44 {
45 m_imageList = NULL;
46
47 m_backgroundColour = *wxWHITE; // TODO: wxColour(GetRValue(GetSysColor(COLOR_BTNFACE)),
48 // GetGValue(GetSysColor(COLOR_BTNFACE)), GetBValue(GetSysColor(COLOR_BTNFACE)));
49 m_foregroundColour = *wxBLACK ;
50
51 SetName(name);
52
53 int x = pos.x;
54 int y = pos.y;
55 int width = size.x;
56 int height = size.y;
57
58 m_windowStyle = style;
59
60 SetFont(* (wxTheFontList->FindOrCreateFont(11, wxSWISS, wxNORMAL, wxNORMAL)));
61
62 SetParent(parent);
63
64 if (width <= 0)
65 width = 100;
66 if (height <= 0)
67 height = 30;
68 if (x < 0)
69 x = 0;
70 if (y < 0)
71 y = 0;
72
73 m_windowId = (id < 0 ? NewControlId() : id);
74
75 // Create the toolbar control.
76 HWND hWndTabCtrl = 0;
77 // TODO: create tab control
78
79 m_hWnd = (WXHWND) hWndTabCtrl;
80 if (parent) parent->AddChild(this);
81
82 SubclassWin((WXHWND) hWndTabCtrl);
83
84 return false;
85 }
86
87 wxTabCtrl::~wxTabCtrl()
88 {
89 UnsubclassWin();
90 }
91
92 bool wxTabCtrl::OS2OnNotify(int idCtrl,
93 WXLPARAM WXUNUSED(lParam),
94 WXLPARAM *WXUNUSED(result) )
95 {
96 wxTabEvent event(wxEVT_NULL, m_windowId);
97 wxEventType eventType = wxEVT_NULL;
98 // TODO:
99 /*
100 NMHDR* hdr1 = (NMHDR*) lParam;
101 switch ( hdr1->code )
102 {
103 case TCN_SELCHANGE:
104 eventType = wxEVT_COMMAND_TAB_SEL_CHANGED;
105 break;
106
107 case TCN_SELCHANGING:
108 eventType = wxEVT_COMMAND_TAB_SEL_CHANGING;
109 break;
110
111 case TTN_NEEDTEXT:
112 {
113 // TODO
114 // if (tool->m_shortHelpString != "")
115 // ttText->lpszText = (char *) (const char *)tool->m_shortHelpString;
116 }
117
118 default :
119 return wxControl::OS2OnNotify(idCtrl, lParam, result);
120 }
121 */
122 event.SetEventObject( this );
123 event.SetEventType(eventType);
124 event.SetInt(idCtrl) ;
125
126 return ProcessEvent(event);
127 }
128
129 // Responds to colour changes, and passes event on to children.
130 void wxTabCtrl::OnSysColourChanged(wxSysColourChangedEvent& event)
131 {
132 // TODO:
133 /*
134 m_backgroundColour = wxColour(GetRValue(GetSysColor(COLOR_BTNFACE)),
135 GetGValue(GetSysColor(COLOR_BTNFACE)),
136 GetBValue(GetSysColor(COLOR_BTNFACE)));
137
138 Refresh();
139 */
140 // Propagate the event to the non-top-level children
141 wxWindow::OnSysColourChanged(event);
142 }
143
144
145 // Delete all items
146 bool wxTabCtrl::DeleteAllItems()
147 {
148 // TODO
149 return false;
150 }
151
152 // Delete an item
153 bool wxTabCtrl::DeleteItem(int WXUNUSED(item))
154 {
155 // TODO
156 return false;
157 }
158
159 // Get the selection
160 int wxTabCtrl::GetSelection() const
161 {
162 // TODO
163 return 0;
164 }
165
166 // Get the tab with the current keyboard focus
167 int wxTabCtrl::GetCurFocus() const
168 {
169 // TODO
170 return 0;
171 }
172
173 // Get the associated image list
174 wxImageList* wxTabCtrl::GetImageList() const
175 {
176 return m_imageList;
177 }
178
179 // Get the number of items
180 int wxTabCtrl::GetItemCount() const
181 {
182 // TODO
183 return 0;
184 }
185
186 // Get the rect corresponding to the tab
187 bool wxTabCtrl::GetItemRect(int WXUNUSED(item),
188 wxRect& WXUNUSED(wxrect)) const
189 {
190 // TODO
191 return false;
192 }
193
194 // Get the number of rows
195 int wxTabCtrl::GetRowCount() const
196 {
197 // TODO
198 return 0;
199 }
200
201 // Get the item text
202 wxString wxTabCtrl::GetItemText(int WXUNUSED(item)) const
203 {
204 // TODO
205 return wxEmptyString;
206 }
207
208 // Get the item image
209 int wxTabCtrl::GetItemImage(int WXUNUSED(item)) const
210 {
211 // TODO
212 return 0;
213 }
214
215 // Get the item data
216 void* wxTabCtrl::GetItemData(int WXUNUSED(item)) const
217 {
218 // TODO
219 return NULL;
220 }
221
222 // Hit test
223 int wxTabCtrl::HitTest(const wxPoint& WXUNUSED(pt), long& WXUNUSED(flags))
224 {
225 // TODO
226 return 0;
227 }
228
229 // Insert an item
230 bool wxTabCtrl::InsertItem(int WXUNUSED(item),
231 const wxString& WXUNUSED(text),
232 int WXUNUSED(imageId),
233 void* WXUNUSED(data))
234 {
235 // TODO
236 return false;
237 }
238
239 // Set the selection
240 int wxTabCtrl::SetSelection(int WXUNUSED(item))
241 {
242 // TODO
243 return 0;
244 }
245
246 // Set the image list
247 void wxTabCtrl::SetImageList(wxImageList* WXUNUSED(imageList))
248 {
249 // TODO
250 }
251
252 // Set the text for an item
253 bool wxTabCtrl::SetItemText(int WXUNUSED(item), const wxString& WXUNUSED(text))
254 {
255 // TODO
256 return false;
257 }
258
259 // Set the image for an item
260 bool wxTabCtrl::SetItemImage(int WXUNUSED(item), int WXUNUSED(image))
261 {
262 // TODO
263 return false;
264 }
265
266 // Set the data for an item
267 bool wxTabCtrl::SetItemData(int WXUNUSED(item), void* WXUNUSED(data))
268 {
269 // TODO
270 return false;
271 }
272
273 // Set the size for a fixed-width tab control
274 void wxTabCtrl::SetItemSize(const wxSize& WXUNUSED(size))
275 {
276 // TODO
277 }
278
279 // Set the padding between tabs
280 void wxTabCtrl::SetPadding(const wxSize& WXUNUSED(padding))
281 {
282 // TODO
283 }
284
285 #if 0
286 // These are the default colors used to map the bitmap colors
287 // to the current system colors
288
289 #define BGR_BUTTONTEXT (RGB(000,000,000)) // black
290 #define BGR_BUTTONSHADOW (RGB(128,128,128)) // dark grey
291 #define BGR_BUTTONFACE (RGB(192,192,192)) // bright grey
292 #define BGR_BUTTONHILIGHT (RGB(255,255,255)) // white
293 #define BGR_BACKGROUNDSEL (RGB(255,000,000)) // blue
294 #define BGR_BACKGROUND (RGB(255,000,255)) // magenta
295
296 void wxMapBitmap(HBITMAP hBitmap, int width, int height)
297 {
298 COLORMAP ColorMap[] = {
299 {BGR_BUTTONTEXT, COLOR_BTNTEXT}, // black
300 {BGR_BUTTONSHADOW, COLOR_BTNSHADOW}, // dark grey
301 {BGR_BUTTONFACE, COLOR_BTNFACE}, // bright grey
302 {BGR_BUTTONHILIGHT, COLOR_BTNHIGHLIGHT},// white
303 {BGR_BACKGROUNDSEL, COLOR_HIGHLIGHT}, // blue
304 {BGR_BACKGROUND, COLOR_WINDOW} // magenta
305 };
306
307 int NUM_MAPS = (sizeof(ColorMap)/sizeof(COLORMAP));
308 int n;
309 for ( n = 0; n < NUM_MAPS; n++)
310 {
311 ColorMap[n].to = ::GetSysColor(ColorMap[n].to);
312 }
313
314 HBITMAP hbmOld;
315 HDC hdcMem = CreateCompatibleDC(NULL);
316
317 if (hdcMem)
318 {
319 hbmOld = SelectObject(hdcMem, hBitmap);
320
321 int i, j, k;
322 for ( i = 0; i < width; i++)
323 {
324 for ( j = 0; j < height; j++)
325 {
326 COLORREF pixel = ::GetPixel(hdcMem, i, j);
327 /*
328 BYTE red = GetRValue(pixel);
329 BYTE green = GetGValue(pixel);
330 BYTE blue = GetBValue(pixel);
331 */
332
333 for ( k = 0; k < NUM_MAPS; k ++)
334 {
335 if ( ColorMap[k].from == pixel )
336 {
337 /* COLORREF actualPixel = */ ::SetPixel(hdcMem, i, j, ColorMap[k].to);
338 break;
339 }
340 }
341 }
342 }
343
344
345 SelectObject(hdcMem, hbmOld);
346 DeleteObject(hdcMem);
347 }
348
349 }
350 #endif
351
352 // Tab event
353 IMPLEMENT_DYNAMIC_CLASS(wxTabEvent, wxCommandEvent)
354
355 wxTabEvent::wxTabEvent(wxEventType commandType, int id)
356 :wxCommandEvent(commandType, id)
357 {
358 }
359
360 #endif // wxUSE_TAB_DIALOG