]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/spinbutt.cpp
add support for alpha in color dialog on OSX, see #14127
[wxWidgets.git] / src / os2 / spinbutt.cpp
index 28661af11a3393538f3e96aa523fc0bbfdc3a97b..05af314aa86a4ad33277d90543837633637e4b0a 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        spinbutt.cpp
+// Name:        src/os2/spinbutt.cpp
 // Purpose:     wxSpinButton
 // Author:      David Webster
 // Modified by:
 // Purpose:     wxSpinButton
 // Author:      David Webster
 // Modified by:
@@ -28,8 +28,6 @@ extern void  wxAssociateWinWithHandle( HWND         hWnd
                                       ,wxWindowOS2* pWin
                                      );
 
                                       ,wxWindowOS2* pWin
                                      );
 
-IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxNotifyEvent)
-
 #include "wx/os2/private.h"
 
 // ============================================================================
 #include "wx/os2/private.h"
 
 // ============================================================================
@@ -40,8 +38,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxNotifyEvent)
 // wxWin macros
 // ----------------------------------------------------------------------------
 
 // wxWin macros
 // ----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl)
-
 bool wxSpinButton::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
 bool wxSpinButton::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
@@ -63,8 +59,11 @@ bool wxSpinButton::Create(
         m_windowId = NewControlId();
     else
         m_windowId = 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;
     SetName(rsName);
     SetParent(pParent);
     m_windowStyle      = lStyle;
@@ -86,12 +85,10 @@ bool wxSpinButton::Create(
     if (nY < 0 )
         nY = 0;
 
     if (nY < 0 )
         nY = 0;
 
-    long                            lSstyle = 0L;
-
-    lSstyle = WS_VISIBLE      |
-              WS_TABSTOP      |
-              SPBS_MASTER     | // We use only single field spin buttons
-              SPBS_NUMERICONLY; // We default to numeric data
+    long lSstyle = WS_VISIBLE      |
+                   WS_TABSTOP      |
+                   SPBS_MASTER     | // We use only single field spin buttons
+                   SPBS_NUMERICONLY; // We default to numeric data
 
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lSstyle |= WS_CLIPSIBLINGS;
 
     if (m_windowStyle & wxCLIP_SIBLINGS )
         lSstyle |= WS_CLIPSIBLINGS;
@@ -117,20 +114,17 @@ bool wxSpinButton::Create(
 
     ::WinQueryWindowPos(m_hWnd, &vSwp);
     SetXComp(vSwp.x);
 
     ::WinQueryWindowPos(m_hWnd, &vSwp);
     SetXComp(vSwp.x);
-    SetYComp(vSwp.y);
-    wxFont*                          pTextFont = new wxFont( 10
-                                                            ,wxMODERN
-                                                            ,wxNORMAL
-                                                            ,wxNORMAL
-                                                           );
-    SetFont(*pTextFont);
+    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
     //
     // 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
             ,nHeight
            );
     wxAssociateWinWithHandle( m_hWnd
@@ -143,7 +137,6 @@ bool wxSpinButton::Create(
     ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this);
     fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc);
 #endif
     ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this);
     fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc);
 #endif
-    delete pTextFont;
     return TRUE;
 } // end of wxSpinButton::Create
 
     return TRUE;
 } // end of wxSpinButton::Create
 
@@ -158,12 +151,12 @@ wxSpinButton::~wxSpinButton()
 wxSize wxSpinButton::DoGetBestSize() const
 {
     //
 wxSize wxSpinButton::DoGetBestSize() const
 {
     //
-    // OS/2 PM does not really have system metrics so we'll just set  it to
-    // 24x20 which is the size of the buttons and the borders.
-    // 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.
     //
     //
-    wxSize best(24,20);
-    return best;
+    RECTL   vRect;
+    ::WinQueryWindowRect(GetHwnd(),&vRect);
+    return wxSize(vRect.yTop,vRect.yTop);
 } // end of wxSpinButton::DoGetBestSize
 
 // ----------------------------------------------------------------------------
 } // end of wxSpinButton::DoGetBestSize
 
 // ----------------------------------------------------------------------------
@@ -191,14 +184,14 @@ bool wxSpinButton::OS2OnScroll( int    WXUNUSED(nOrientation),
                                 WXWORD wPos,
                                 WXHWND hControl )
 {
                                 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!
 
     vEvent.SetPosition(nVal);
     vEvent.SetEventObject(this);
 
     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 WXUNUSED(uCmd),
 } // end of wxSpinButton::OS2OnScroll
 
 bool wxSpinButton::OS2Command( WXUINT WXUNUSED(uCmd),