/////////////////////////////////////////////////////////////////////////////
-// Name: spinbutt.cpp
+// Name: src/os2/spinbutt.cpp
// Purpose: wxSpinButton
// Author: David Webster
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
- #pragma implementation "spinbutt.h"
- #pragma implementation "spinbutbase.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
extern void wxAssociateWinWithHandle( HWND hWnd
,wxWindowOS2* pWin
);
-static WXFARPROC fnWndProcSpinCtrl = (WXFARPROC)NULL;
-
-IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxNotifyEvent)
#include "wx/os2/private.h"
// wxWin macros
// ----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl)
-
bool wxSpinButton::Create(
wxWindow* pParent
, wxWindowID vId
m_windowId = NewControlId();
else
m_windowId = vId;
- m_backgroundColour = pParent->GetBackgroundColour();
- m_foregroundColour = pParent->GetForegroundColour();
+ if (pParent)
+ {
+ m_backgroundColour = pParent->GetBackgroundColour();
+ m_foregroundColour = pParent->GetForegroundColour();
+ }
SetName(rsName);
SetParent(pParent);
m_windowStyle = lStyle;
if (m_windowStyle & wxCLIP_SIBLINGS )
lSstyle |= WS_CLIPSIBLINGS;
- //
- // If the parent is a scrolled window the controls must
- // have this style or they will overlap the scrollbars
- //
- if (pParent)
- if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
- pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
- lSstyle |= WS_CLIPSIBLINGS;
-
- SPBCDATA vCtrlData;
-
- vCtrlData.cbSize = sizeof(SPBCDATA);
- vCtrlData.ulTextLimit = 10L;
- vCtrlData.lLowerLimit = 0L;
- vCtrlData.lUpperLimit = 100L;
- vCtrlData.idMasterSpb = vId;
- vCtrlData.pHWXCtlData = NULL;
-
m_hWnd = (WXHWND)::WinCreateWindow( GetWinHwnd(pParent)
,WC_SPINBUTTON
,(PSZ)NULL
,GetWinHwnd(pParent)
,HWND_TOP
,(HMENU)vId
- ,(PVOID)&vCtrlData
+ ,NULL
,NULL
);
if (m_hWnd == 0)
{
return FALSE;
}
+ SetRange(m_min, m_max);
if(pParent)
pParent->AddChild((wxSpinButton *)this);
::WinQueryWindowPos(m_hWnd, &vSwp);
SetXComp(vSwp.x);
- SetYComp(vSwp.y);
+ SetYComp(vSwp.y-5); // compensate for the associated TextControl border
+
SetFont(*wxSMALL_FONT);
//
// For OS/2 we want to hide the text portion so we can substitute an
- // independent text ctrl in its place. 10 device units does this
+ // independent text ctrl in its place.
+ // Therefore we must override any user given width with our best guess.
//
- SetSize( nX
- ,nY
- ,10L
+ SetSize( nX - GetXComp()
+ ,nY - GetYComp()
+ ,nWidth
,nHeight
);
wxAssociateWinWithHandle( m_hWnd
,(wxWindowOS2*)this
);
+#if 0
+ // FIXME:
+ // Apparently, this does not work, as it crashes in setvalue/setrange calls
+ // What's it supposed to do anyway?
::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this);
fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc);
+#endif
return TRUE;
} // end of wxSpinButton::Create
wxSize wxSpinButton::DoGetBestSize() const
{
//
- // OS/2 PM does not really have system metrics so we'll just set our best guess
- // Also we have no horizontal spin buttons.
+ // OS/2 PM does not really have system metrics so we'll just set it to
+ // a square based on its height.
//
- return (wxSize(10,20));
+ RECTL vRect;
+ ::WinQueryWindowRect(GetHwnd(),&vRect);
+ return wxSize(vRect.yTop,vRect.yTop);
} // end of wxSpinButton::DoGetBestSize
// ----------------------------------------------------------------------------
int wxSpinButton::GetValue() const
{
- int nVal = 0;
long lVal = 0L;
char zVal[10];
return ((int)lVal);
} // end of wxSpinButton::GetValue
-bool wxSpinButton::OS2OnScroll(
- int nOrientation
-, WXWORD wParam
-, WXWORD wPos
-, WXHWND hControl
-)
+bool wxSpinButton::OS2OnScroll( int WXUNUSED(nOrientation),
+ WXWORD WXUNUSED(wParam),
+ WXWORD wPos,
+ WXHWND hControl )
{
- wxCHECK_MSG(hControl, FALSE, wxT("scrolling what?") )
+ wxCHECK_MSG(hControl, false, wxT("scrolling what?") );
- wxSpinEvent vEvent( wxEVT_SCROLL_THUMBTRACK
- ,m_windowId
- );
- int nVal = (int)wPos; // cast is important for negative values!
+ wxSpinEvent vEvent( wxEVT_SCROLL_THUMBTRACK, m_windowId );
+ int nVal = (int)wPos; // cast is important for negative values!
vEvent.SetPosition(nVal);
vEvent.SetEventObject(this);
- return(GetEventHandler()->ProcessEvent(vEvent));
+ return(HandleWindowEvent(vEvent));
} // end of wxSpinButton::OS2OnScroll
-bool wxSpinButton::OS2Command(
- WXUINT uCmd
-, WXWORD wId
-)
+bool wxSpinButton::OS2Command( WXUINT WXUNUSED(uCmd),
+ WXWORD WXUNUSED(wId) )
{
- return FALSE;
+ return false;
} // end of wxSpinButton::OS2Command
void wxSpinButton::SetRange(