]> git.saurik.com Git - wxWidgets.git/blame - src/os2/slider.cpp
Rotated text patch from Hans-Joachim Baader (with some corrections)
[wxWidgets.git] / src / os2 / slider.cpp
CommitLineData
0e320a79
DW
1/////////////////////////////////////////////////////////////////////////////
2// Name: slider.cpp
3// Purpose: wxSlider
409c9842 4// Author: David Webster
0e320a79 5// Modified by:
409c9842 6// Created: 10/15/99
0e320a79 7// RCS-ID: $Id$
409c9842
DW
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
0e320a79
DW
10/////////////////////////////////////////////////////////////////////////////
11
409c9842
DW
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16#pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20#include <stdio.h>
21#include <wx/utils.h>
22#include <wx/brush.h>
0e320a79
DW
23#endif
24
25#include "wx/slider.h"
409c9842 26#include "wx/os2/private.h"
0e320a79
DW
27
28#if !USE_SHARED_LIBRARY
29IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
04701dd9 30#endif
0e320a79 31
0e320a79
DW
32// Slider
33wxSlider::wxSlider()
34{
409c9842
DW
35 m_staticValue = 0;
36 m_staticMin = 0;
37 m_staticMax = 0;
0e320a79
DW
38 m_pageSize = 1;
39 m_lineSize = 1;
40 m_rangeMax = 0;
41 m_rangeMin = 0;
42 m_tickFreq = 0;
43}
44
45bool wxSlider::Create(wxWindow *parent, wxWindowID id,
46 int value, int minValue, int maxValue,
47 const wxPoint& pos,
48 const wxSize& size, long style,
5d4b632b 49#if wxUSE_VALIDATORS
0e320a79 50 const wxValidator& validator,
5d4b632b 51#endif
0e320a79
DW
52 const wxString& name)
53{
54 SetName(name);
5d4b632b 55#if wxUSE_VALIDATORS
0e320a79 56 SetValidator(validator);
5d4b632b 57#endif
0e320a79
DW
58
59 if (parent) parent->AddChild(this);
60
61 m_lineSize = 1;
62 m_windowStyle = style;
63 m_tickFreq = 0;
64
65 if ( id == -1 )
66 m_windowId = (int)NewControlId();
67 else
68 m_windowId = id;
69
70 m_rangeMax = maxValue;
71 m_rangeMin = minValue;
72
73 m_pageSize = (int)((maxValue-minValue)/10);
74
75 // TODO create slider
76
77 return FALSE;
78}
79
409c9842
DW
80bool wxSlider::OS2OnScroll(int WXUNUSED(orientation), WXWORD wParam,
81 WXWORD pos, WXHWND control)
82{
83 int position = 0; // Dummy - not used in this mode
84
85 int nScrollInc;
86 wxEventType scrollEvent = wxEVT_NULL;
87// TODO:
88/*
89 switch ( wParam )
90 {
91 case SB_TOP:
92 nScrollInc = m_rangeMax - position;
93 scrollEvent = wxEVT_SCROLL_TOP;
94 break;
95
96 case SB_BOTTOM:
97 nScrollInc = - position;
98 scrollEvent = wxEVT_SCROLL_BOTTOM;
99 break;
100
101 case SB_LINEUP:
102 nScrollInc = - GetLineSize();
103 scrollEvent = wxEVT_SCROLL_LINEUP;
104 break;
105
106 case SB_LINEDOWN:
107 nScrollInc = GetLineSize();
108 scrollEvent = wxEVT_SCROLL_LINEDOWN;
109 break;
110
111 case SB_PAGEUP:
112 nScrollInc = -GetPageSize();
113 scrollEvent = wxEVT_SCROLL_PAGEUP;
114 break;
115
116 case SB_PAGEDOWN:
117 nScrollInc = GetPageSize();
118 scrollEvent = wxEVT_SCROLL_PAGEDOWN;
119 break;
120
121 case SB_THUMBTRACK:
122 case SB_THUMBPOSITION:
123#ifdef __WIN32__
124 nScrollInc = (signed short)pos - position;
125#else // Win16
126 nScrollInc = pos - position;
127#endif // Win32/16
128 scrollEvent = wxEVT_SCROLL_THUMBTRACK;
129 break;
130
131 default:
132 nScrollInc = 0;
133 }
134
135 if ( nScrollInc == 0 )
136 {
137 // no event...
138 return FALSE;
139 }
140
141 int newPos = (int)::SendMessage((HWND) control, TBM_GETPOS, 0, 0);
142 if ( (newPos < GetMin()) || (newPos > GetMax()) )
143 {
144 // out of range - but we did process it
145 return TRUE;
146 }
147*/
04701dd9 148 int newPos = 0; //temporary
409c9842
DW
149 SetValue(newPos);
150
151 wxScrollEvent event(scrollEvent, m_windowId);
152 event.SetPosition(newPos);
153 event.SetEventObject( this );
154 GetEventHandler()->ProcessEvent(event);
155
156 wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, GetId() );
157 cevent.SetEventObject( this );
158
159 return GetEventHandler()->ProcessEvent( cevent );
160}
161
0e320a79
DW
162wxSlider::~wxSlider()
163{
409c9842 164 // TODO:
0e320a79
DW
165}
166
167int wxSlider::GetValue() const
168{
169 // TODO
170 return 0;
171}
172
173void wxSlider::SetValue(int value)
174{
175 // TODO
176}
177
178void wxSlider::GetSize(int *width, int *height) const
179{
180 // TODO
181}
182
183void wxSlider::GetPosition(int *x, int *y) const
184{
185 // TODO
186}
187
409c9842
DW
188// TODO one day, make sense of all this horros and replace it with a readable
189// DoGetBestSize()
190void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
0e320a79 191{
409c9842
DW
192 int x1 = x;
193 int y1 = y;
194 int w1 = width;
195 int h1 = height;
196
197 int currentX, currentY;
198 GetPosition(&currentX, &currentY);
199 if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
200 x1 = currentX;
201 if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
202 y1 = currentY;
203
204// TODO:
205/*
206
207 AdjustForParentClientOrigin(x1, y1, sizeFlags);
208
209 wxChar buf[300];
210
211 int x_offset = x;
212 int y_offset = y;
213
214 int cx; // slider,min,max sizes
215 int cy;
216 int cyf;
217
218 wxGetCharSize(GetHWND(), &cx, &cy, & this->GetFont());
219
220 if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL)
221 {
222 if ( m_windowStyle & wxSL_LABELS )
223 {
224 int min_len = 0;
225
226 GetWindowText((HWND) m_staticMin, buf, 300);
227 GetTextExtent(buf, &min_len, &cyf,NULL,NULL, & this->GetFont());
228
229 int max_len = 0;
230
231 GetWindowText((HWND) m_staticMax, buf, 300);
232 GetTextExtent(buf, &max_len, &cyf,NULL,NULL, & this->GetFont());
233 if (m_staticValue)
234 {
235 int new_width = (int)(wxMax(min_len, max_len));
236 int valueHeight = (int)cyf;
237#ifdef __WIN32__
238 // For some reason, under Win95, the text edit control has
239 // a lot of space before the first character
240 new_width += 3*cx;
241#endif
242 // The height needs to be a bit bigger under Win95 if using native
243 // 3D effects.
244 valueHeight = (int) (valueHeight * 1.5) ;
245 MoveWindow((HWND) m_staticValue, x_offset, y_offset, new_width, valueHeight, TRUE);
246 x_offset += new_width + cx;
247 }
248
249 MoveWindow((HWND) m_staticMin, x_offset, y_offset, (int)min_len, cy, TRUE);
250 x_offset += (int)(min_len + cx);
251
252 int slider_length = (int)(w1 - x_offset - max_len - cx);
253
254 int slider_height = h1;
255 if (slider_height < 0 )
256 slider_height = 20;
257
258 // Slider must have a minimum/default length/height
259 if (slider_length < 100)
260 slider_length = 100;
261
262 MoveWindow(GetHwnd(), x_offset, y_offset, slider_length, slider_height, TRUE);
263 x_offset += slider_length + cx;
264
265 MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE);
266 }
267 else
268 {
269 // No labels
270 // If we're prepared to use the existing size, then...
271 if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
272 {
273 GetSize(&w1, &h1);
274 }
275 if ( w1 < 0 )
276 w1 = 200;
277 if ( h1 < 0 )
278 h1 = 20;
279 MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE);
280 }
281 }
282 else
283 {
284 if ( m_windowStyle & wxSL_LABELS )
285 {
286 int min_len;
287 GetWindowText((HWND) m_staticMin, buf, 300);
288 GetTextExtent(buf, &min_len, &cyf,NULL,NULL, & this->GetFont());
289
290 int max_len;
291 GetWindowText((HWND) m_staticMax, buf, 300);
292 GetTextExtent(buf, &max_len, &cyf,NULL,NULL, & this->GetFont());
293
294 if (m_staticValue)
295 {
296 int new_width = (int)(wxMax(min_len, max_len));
297 int valueHeight = (int)cyf;
298//// Suggested change by George Tasker - remove this block...
299#ifdef __WIN32__
300 // For some reason, under Win95, the text edit control has
301 // a lot of space before the first character
302 new_width += 3*cx;
303#endif
304 ... and replace with following line:
305 new_width += cx;
306
307 // The height needs to be a bit bigger under Win95 if using native
308 // 3D effects.
309 valueHeight = (int) (valueHeight * 1.5) ;
310
311 MoveWindow((HWND) m_staticValue, x_offset, y_offset, new_width, valueHeight, TRUE);
312 y_offset += valueHeight;
313 }
314
315 MoveWindow((HWND) m_staticMin, x_offset, y_offset, (int)min_len, cy, TRUE);
316 y_offset += cy;
317
318 int slider_length = (int)(h1 - y_offset - cy - cy);
319
320 int slider_width = w1;
321 if (slider_width < 0 )
322 slider_width = 20;
323
324 // Slider must have a minimum/default length
325 if (slider_length < 100)
326 slider_length = 100;
327
328 MoveWindow(GetHwnd(), x_offset, y_offset, slider_width, slider_length, TRUE);
329 y_offset += slider_length;
330
331 MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE);
332 }
333 else
334 {
335 // No labels
336 // If we're prepared to use the existing size, then...
337 if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
338 {
339 GetSize(&w1, &h1);
340 }
341 if ( w1 < 0 )
342 w1 = 20;
343 if ( h1 < 0 )
344 h1 = 200;
345 MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE);
346 }
347 }
348*/
0e320a79
DW
349}
350
351void wxSlider::SetRange(int minValue, int maxValue)
352{
353 m_rangeMin = minValue;
354 m_rangeMax = maxValue;
355
356 // TODO
357}
358
409c9842
DW
359WXHBRUSH wxSlider::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
360 WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
361{
362 // TODO:
363/*
364 if ( nCtlColor == CTLCOLOR_SCROLLBAR )
365 return 0;
366
367 // Otherwise, it's a static
368 if (GetParent()->GetTransparentBackground())
369 SetBkMode((HDC) pDC, TRANSPARENT);
370 else
371 SetBkMode((HDC) pDC, OPAQUE);
372
373 ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
374 ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue()));
375
376 wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID);
377 return (WXHBRUSH) backgroundBrush->GetResourceHandle();
378*/
379 return (WXHBRUSH)0;
380}
381
0e320a79
DW
382// For trackbars only
383void wxSlider::SetTickFreq(int n, int pos)
384{
385 // TODO
386 m_tickFreq = n;
387}
388
389void wxSlider::SetPageSize(int pageSize)
390{
391 // TODO
392 m_pageSize = pageSize;
393}
394
395int wxSlider::GetPageSize() const
396{
397 return m_pageSize;
398}
399
400void wxSlider::ClearSel()
401{
402 // TODO
403}
404
405void wxSlider::ClearTicks()
406{
407 // TODO
408}
409
410void wxSlider::SetLineSize(int lineSize)
411{
412 m_lineSize = lineSize;
413 // TODO
414}
415
416int wxSlider::GetLineSize() const
417{
418 // TODO
419 return 0;
420}
421
422int wxSlider::GetSelEnd() const
423{
424 // TODO
425 return 0;
426}
427
428int wxSlider::GetSelStart() const
429{
430 // TODO
431 return 0;
432}
433
434void wxSlider::SetSelection(int minPos, int maxPos)
435{
436 // TODO
437}
438
439void wxSlider::SetThumbLength(int len)
440{
441 // TODO
442}
443
444int wxSlider::GetThumbLength() const
445{
446 // TODO
447 return 0;
448}
449
450void wxSlider::SetTick(int tickPos)
451{
452 // TODO
453}
454
409c9842
DW
455bool wxSlider::ContainsHWND(WXHWND hWnd) const
456{
457 return ( hWnd == GetStaticMin() || hWnd == GetStaticMax() || hWnd == GetEditValue() );
458}
459
0e320a79
DW
460void wxSlider::Command (wxCommandEvent & event)
461{
462 SetValue (event.GetInt());
463 ProcessCommand (event);
464}
465
466bool wxSlider::Show(bool show)
467{
468 // TODO
469 return TRUE;
470}
471