X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a23fd0e1d1329a4a258b4defb3e0b0001b700c6e..1f86850d45e786987db4884ba9403eec510625f7:/src/msw/slider95.cpp diff --git a/src/msw/slider95.cpp b/src/msw/slider95.cpp index f9aa9ea5c1..116e2e5647 100644 --- a/src/msw/slider95.cpp +++ b/src/msw/slider95.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -20,10 +20,12 @@ #pragma hdrstop #endif +#if wxUSE_SLIDER + #ifndef WX_PRECOMP -#include -#include -#include +#include "wx/utils.h" +#include "wx/brush.h" +#include "wx/slider.h" #endif #ifdef __WIN95__ @@ -31,13 +33,11 @@ #include "wx/msw/slider95.h" #include "wx/msw/private.h" -#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) -#include +#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) + #include #endif -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxSlider95, wxControl) -#endif // Slider wxSlider95::wxSlider95() @@ -60,7 +60,9 @@ bool wxSlider95::Create(wxWindow *parent, wxWindowID id, const wxString& name) { SetName(name); +#if wxUSE_VALIDATORS SetValidator(validator); +#endif // wxUSE_VALIDATORS if (parent) parent->AddChild(this); SetBackgroundColour(parent->GetBackgroundColour()) ; @@ -84,29 +86,40 @@ bool wxSlider95::Create(wxWindow *parent, wxWindowID id, int width = size.x; int height = size.y; - long msStyle ; + long msStyle=0 ; + long wstyle=0 ; + + if ( m_windowStyle & wxCLIP_SIBLINGS ) + msStyle |= WS_CLIPSIBLINGS; if ( m_windowStyle & wxSL_LABELS ) { - msStyle = WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER; + msStyle |= WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER; bool want3D; WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ; - m_staticValue = (WXHWND) CreateWindowEx(exStyle, "STATIC", NULL, + m_staticValue = (WXHWND) CreateWindowEx(exStyle, wxT("STATIC"), NULL, msStyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); // Now create min static control - sprintf(wxBuffer, "%d", minValue); - m_staticMin = (WXHWND) CreateWindowEx(0, "STATIC", wxBuffer, - STATIC_FLAGS, + wxSprintf(wxBuffer, wxT("%d"), minValue); + wstyle = STATIC_FLAGS; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + msStyle |= WS_CLIPSIBLINGS; + m_staticMin = (WXHWND) CreateWindowEx(0, wxT("STATIC"), wxBuffer, + wstyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); } msStyle = 0; + + if ( m_windowStyle & wxCLIP_SIBLINGS ) + msStyle |= WS_CLIPSIBLINGS; + if (m_windowStyle & wxSL_VERTICAL) msStyle = TBS_VERT | WS_CHILD | WS_VISIBLE | WS_TABSTOP ; else @@ -149,16 +162,19 @@ bool wxSlider95::Create(wxWindow *parent, wxWindowID id, SubclassWin(GetHWND()); - SetWindowText((HWND) m_hWnd, ""); + SetWindowText((HWND) m_hWnd, wxT("")); SetFont(parent->GetFont()); if ( m_windowStyle & wxSL_LABELS ) { // Finally, create max value static item - sprintf(wxBuffer, "%d", maxValue); - m_staticMax = (WXHWND) CreateWindowEx(0, "STATIC", wxBuffer, - STATIC_FLAGS, + wxSprintf(wxBuffer, wxT("%d"), maxValue); + wstyle = STATIC_FLAGS; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + msStyle |= WS_CLIPSIBLINGS; + m_staticMax = (WXHWND) CreateWindowEx(0, wxT("STATIC"), wxBuffer, + wstyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); @@ -187,62 +203,43 @@ bool wxSlider95::Create(wxWindow *parent, wxWindowID id, } bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam, - WXWORD pos, WXHWND control) + WXWORD WXUNUSED(pos), WXHWND control) { - int position = 0; // Dummy - not used in this mode - - int nScrollInc; - wxEventType scrollEvent = wxEVT_NULL; + wxEventType scrollEvent; switch ( wParam ) { case SB_TOP: - nScrollInc = m_rangeMax - position; scrollEvent = wxEVT_SCROLL_TOP; break; case SB_BOTTOM: - nScrollInc = - position; scrollEvent = wxEVT_SCROLL_BOTTOM; break; case SB_LINEUP: - nScrollInc = - GetLineSize(); scrollEvent = wxEVT_SCROLL_LINEUP; break; case SB_LINEDOWN: - nScrollInc = GetLineSize(); scrollEvent = wxEVT_SCROLL_LINEDOWN; break; case SB_PAGEUP: - nScrollInc = -GetPageSize(); scrollEvent = wxEVT_SCROLL_PAGEUP; break; case SB_PAGEDOWN: - nScrollInc = GetPageSize(); scrollEvent = wxEVT_SCROLL_PAGEDOWN; break; case SB_THUMBTRACK: case SB_THUMBPOSITION: -#ifdef __WIN32__ - nScrollInc = (signed short)pos - position; -#else // Win16 - nScrollInc = pos - position; -#endif // Win32/16 scrollEvent = wxEVT_SCROLL_THUMBTRACK; break; default: - nScrollInc = 0; - } - - if ( nScrollInc == 0 ) - { - // no event... - return FALSE; + // unknown scroll event? + return FALSE; } int newPos = (int)::SendMessage((HWND) control, TBM_GETPOS, 0, 0); @@ -260,6 +257,7 @@ bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam, GetEventHandler()->ProcessEvent(event); wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, GetId() ); + cevent.SetInt( newPos ); cevent.SetEventObject( this ); return GetEventHandler()->ProcessEvent( cevent ); @@ -277,15 +275,15 @@ wxSlider95::~wxSlider95() int wxSlider95::GetValue() const { - return ::SendMessage((HWND) GetHWND(), TBM_GETPOS, 0, 0); + return ::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0); } void wxSlider95::SetValue(int value) { - ::SendMessage((HWND) GetHWND(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)value); + ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)value); if (m_staticValue) { - sprintf(wxBuffer, "%d", value); + wxSprintf(wxBuffer, wxT("%d"), value); SetWindowText((HWND) m_staticValue, wxBuffer); } } @@ -344,6 +342,8 @@ void wxSlider95::GetPosition(int *x, int *y) const *y = point.y; } +// TODO one day, make sense of all this horros and replace it with a readable +// DoGetBestSize() void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) { int x1 = x; @@ -353,14 +353,14 @@ void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) int currentX, currentY; GetPosition(¤tX, ¤tY); - if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) x1 = currentX; - if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) y1 = currentY; AdjustForParentClientOrigin(x1, y1, sizeFlags); - char buf[300]; + wxChar buf[300]; int x_offset = x; int y_offset = y; @@ -413,7 +413,7 @@ void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (slider_length < 100) slider_length = 100; - MoveWindow((HWND) GetHWND(), x_offset, y_offset, slider_length, slider_height, TRUE); + MoveWindow(GetHwnd(), x_offset, y_offset, slider_length, slider_height, TRUE); x_offset += slider_length + cx; MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE); @@ -430,7 +430,7 @@ void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) w1 = 200; if ( h1 < 0 ) h1 = 20; - MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, TRUE); + MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE); } } else @@ -479,7 +479,7 @@ void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (slider_length < 100) slider_length = 100; - MoveWindow((HWND) GetHWND(), x_offset, y_offset, slider_width, slider_length, TRUE); + MoveWindow(GetHwnd(), x_offset, y_offset, slider_width, slider_length, TRUE); y_offset += slider_length; MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE); @@ -496,7 +496,7 @@ void wxSlider95::DoSetSize(int x, int y, int width, int height, int sizeFlags) w1 = 20; if ( h1 < 0 ) h1 = 200; - MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, TRUE); + MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE); } } } @@ -506,18 +506,18 @@ void wxSlider95::SetRange(int minValue, int maxValue) m_rangeMin = minValue; m_rangeMax = maxValue; - ::SendMessage((HWND) GetHWND(), TBM_SETRANGE, TRUE, MAKELONG(minValue, maxValue)); + ::SendMessage(GetHwnd(), TBM_SETRANGE, TRUE, MAKELONG(minValue, maxValue)); - char buf[40]; + wxChar buf[40]; if ( m_staticMin ) { - sprintf(buf, "%d", m_rangeMin); + wxSprintf(buf, wxT("%d"), m_rangeMin); SetWindowText((HWND) m_staticMin, buf); } if ( m_staticMax ) { - sprintf(buf, "%d", m_rangeMax); + wxSprintf(buf, wxT("%d"), m_rangeMax); SetWindowText((HWND) m_staticMax, buf); } } @@ -529,28 +529,19 @@ WXHBRUSH wxSlider95::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, return 0; // Otherwise, it's a static - if (GetParent()->GetTransparentBackground()) - SetBkMode((HDC) pDC, TRANSPARENT); - else - SetBkMode((HDC) pDC, OPAQUE); - - ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); - - wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); - return (WXHBRUSH) backgroundBrush->GetResourceHandle(); + return wxControl::OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); } // For trackbars only void wxSlider95::SetTickFreq(int n, int pos) { m_tickFreq = n; - ::SendMessage( (HWND) GetHWND(), TBM_SETTICFREQ, (WPARAM) n, (LPARAM) pos ); + ::SendMessage( GetHwnd(), TBM_SETTICFREQ, (WPARAM) n, (LPARAM) pos ); } void wxSlider95::SetPageSize(int pageSize) { - ::SendMessage( (HWND) GetHWND(), TBM_SETPAGESIZE, (WPARAM) 0, (LPARAM) pageSize ); + ::SendMessage( GetHwnd(), TBM_SETPAGESIZE, (WPARAM) 0, (LPARAM) pageSize ); m_pageSize = pageSize; } @@ -561,53 +552,53 @@ int wxSlider95::GetPageSize() const void wxSlider95::ClearSel() { - ::SendMessage( (HWND) GetHWND(), TBM_CLEARSEL, (WPARAM) TRUE, (LPARAM) 0 ); + ::SendMessage( GetHwnd(), TBM_CLEARSEL, (WPARAM) TRUE, (LPARAM) 0 ); } void wxSlider95::ClearTicks() { - ::SendMessage( (HWND) GetHWND(), TBM_CLEARTICS, (WPARAM) TRUE, (LPARAM) 0 ); + ::SendMessage( GetHwnd(), TBM_CLEARTICS, (WPARAM) TRUE, (LPARAM) 0 ); } void wxSlider95::SetLineSize(int lineSize) { m_lineSize = lineSize; - ::SendMessage( (HWND) GetHWND(), TBM_SETLINESIZE, (WPARAM) 0, (LPARAM) lineSize ); + ::SendMessage( GetHwnd(), TBM_SETLINESIZE, (WPARAM) 0, (LPARAM) lineSize ); } int wxSlider95::GetLineSize() const { - return (int) ::SendMessage( (HWND) GetHWND(), TBM_GETLINESIZE, (WPARAM) 0, (LPARAM) 0 ); + return (int) ::SendMessage( GetHwnd(), TBM_GETLINESIZE, (WPARAM) 0, (LPARAM) 0 ); } int wxSlider95::GetSelEnd() const { - return (int) ::SendMessage( (HWND) GetHWND(), TBM_SETSELEND, (WPARAM) 0, (LPARAM) 0 ); + return (int) ::SendMessage( GetHwnd(), TBM_SETSELEND, (WPARAM) 0, (LPARAM) 0 ); } int wxSlider95::GetSelStart() const { - return (int) ::SendMessage( (HWND) GetHWND(), TBM_GETSELSTART, (WPARAM) 0, (LPARAM) 0 ); + return (int) ::SendMessage( GetHwnd(), TBM_GETSELSTART, (WPARAM) 0, (LPARAM) 0 ); } void wxSlider95::SetSelection(int minPos, int maxPos) { - ::SendMessage( (HWND) GetHWND(), TBM_SETSEL, (WPARAM) TRUE, (LPARAM) MAKELONG( minPos, maxPos) ); + ::SendMessage( GetHwnd(), TBM_SETSEL, (WPARAM) TRUE, (LPARAM) MAKELONG( minPos, maxPos) ); } void wxSlider95::SetThumbLength(int len) { - ::SendMessage( (HWND) GetHWND(), TBM_SETTHUMBLENGTH, (WPARAM) len, (LPARAM) 0 ); + ::SendMessage( GetHwnd(), TBM_SETTHUMBLENGTH, (WPARAM) len, (LPARAM) 0 ); } int wxSlider95::GetThumbLength() const { - return (int) ::SendMessage( (HWND) GetHWND(), TBM_GETTHUMBLENGTH, (WPARAM) 0, (LPARAM) 0 ); + return (int) ::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH, (WPARAM) 0, (LPARAM) 0 ); } void wxSlider95::SetTick(int tickPos) { - ::SendMessage( (HWND) GetHWND(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos ); + ::SendMessage( GetHwnd(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos ); } bool wxSlider95::ContainsHWND(WXHWND hWnd) const @@ -643,3 +634,4 @@ bool wxSlider95::Show(bool show) #endif // __WIN95__ +#endif // wxUSE_SLIDER