]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/spinctrl.cpp
move code ignoring VK_SPACE and VK_RETURN WM_CHAR messages to MSWDefWindowProc()...
[wxWidgets.git] / src / os2 / spinctrl.cpp
index ed056cafaf5b1f5c975a81dba26a99c5a3890be0..7a05daa6356a6e5aba5e2b3b1e32604d48ea1db0 100644 (file)
@@ -31,7 +31,7 @@
     #include "wx/wx.h"
 #endif
 
     #include "wx/wx.h"
 #endif
 
-#if wxUSE_SPINBTN
+#if wxUSE_SPINCTRL
 
 #include "wx/spinctrl.h"
 #include "wx/os2/private.h"
 
 #include "wx/spinctrl.h"
 #include "wx/os2/private.h"
@@ -44,11 +44,14 @@ extern void  wxAssociateWinWithHandle( HWND         hWnd
                                       ,wxWindowOS2* pWin
                                      );
 static WXFARPROC fnWndProcSpinCtrl = (WXFARPROC)NULL;
                                       ,wxWindowOS2* pWin
                                      );
 static WXFARPROC fnWndProcSpinCtrl = (WXFARPROC)NULL;
+wxArraySpins                        wxSpinCtrl::m_svAllSpins;
 
 IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
 
 BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton)
 
 IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
 
 BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton)
-    EVT_SPIN(-1, wxSpinCtrl::OnSpinChange)
+    EVT_CHAR(wxSpinCtrl::OnChar)
+    EVT_SPIN(wxID_ANY, wxSpinCtrl::OnSpinChange)
+    EVT_SET_FOCUS(wxSpinCtrl::OnSetFocus)
 END_EVENT_TABLE()
 // ----------------------------------------------------------------------------
 // constants
 END_EVENT_TABLE()
 // ----------------------------------------------------------------------------
 // constants
@@ -70,8 +73,7 @@ MRESULT EXPENTRY wxSpinCtrlWndProc(
     wxSpinCtrl*                    pSpin = (wxSpinCtrl *)::WinQueryWindowULong( hWnd
                                                                                ,QWL_USER
                                                                               );
     wxSpinCtrl*                    pSpin = (wxSpinCtrl *)::WinQueryWindowULong( hWnd
                                                                                ,QWL_USER
                                                                               );
-    bool                            bProccesed = FALSE;
-    MRESULT                         rc = (MRESULT)0;
+
     //
     // Forward some messages (the key ones only so far) to the spin ctrl
     //
     //
     // Forward some messages (the key ones only so far) to the spin ctrl
     //
@@ -128,7 +130,9 @@ bool wxSpinCtrl::Create(
 , const wxString&                   rsName
 )
 {
 , const wxString&                   rsName
 )
 {
-    if (vId == -1)
+    SWP                             vSwp;
+
+    if (vId == wxID_ANY)
         m_windowId = NewControlId();
     else
         m_windowId = vId;
         m_windowId = NewControlId();
     else
         m_windowId = vId;
@@ -170,12 +174,20 @@ bool wxSpinCtrl::Create(
                                       );
     if (m_hWnd == 0)
     {
                                       );
     if (m_hWnd == 0)
     {
-        return FALSE;
+        return false;
     }
     m_hWndBuddy = m_hWnd; // One in the same for OS/2
     if(pParent)
         pParent->AddChild((wxSpinButton *)this);
     }
     m_hWndBuddy = m_hWnd; // One in the same for OS/2
     if(pParent)
         pParent->AddChild((wxSpinButton *)this);
-    SetFont(pParent->GetFont());
+    wxFont*                          pTextFont = new wxFont( 10
+                                                            ,wxMODERN
+                                                            ,wxNORMAL
+                                                            ,wxNORMAL
+                                                           );
+    SetFont(*pTextFont);
+    ::WinQueryWindowPos(m_hWnd, &vSwp);
+    SetXComp(vSwp.x);
+    SetYComp(vSwp.y);
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
@@ -194,20 +206,22 @@ bool wxSpinCtrl::Create(
     ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this);
     fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc);
     m_svAllSpins.Add(this);
     ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this);
     fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc);
     m_svAllSpins.Add(this);
-    return TRUE;
+    delete pTextFont;
+    return true;
 } // end of wxSpinCtrl::Create
 
 wxSize wxSpinCtrl::DoGetBestSize() const
 {
     wxSize                          vSizeBtn = wxSpinButton::DoGetBestSize();
     int                             nHeight;
 } // end of wxSpinCtrl::Create
 
 wxSize wxSpinCtrl::DoGetBestSize() const
 {
     wxSize                          vSizeBtn = wxSpinButton::DoGetBestSize();
     int                             nHeight;
+    wxFont                          vFont = (wxFont)GetFont();
 
     vSizeBtn.x += DEFAULT_ITEM_WIDTH + MARGIN_BETWEEN;
 
     wxGetCharSize( GetHWND()
                   ,NULL
                   ,&nHeight
 
     vSizeBtn.x += DEFAULT_ITEM_WIDTH + MARGIN_BETWEEN;
 
     wxGetCharSize( GetHWND()
                   ,NULL
                   ,&nHeight
-                  ,(wxFont*)&GetFont()
+                  ,&vFont
                  );
     nHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nHeight);
 
                  );
     nHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nHeight);
 
@@ -261,12 +275,9 @@ void wxSpinCtrl::DoMoveWindow(
 
     if (pParent)
     {
 
     if (pParent)
     {
-        if (pParent->IsKindOf(CLASSINFO(wxFrame)))
-        {
-            nY = pParent->GetClientSize().y - (nY + nHeight);
-        }
-        else
-            nY = pParent->GetSize().y - (nY + nHeight);
+        int                         nOS2Height = GetOS2ParentHeight(pParent);
+
+        nY = nOS2Height - (nY + nHeight);
     }
     else
     {
     }
     else
     {
@@ -291,10 +302,10 @@ bool wxSpinCtrl::Enable(
 {
     if (!wxControl::Enable(bEnable))
     {
 {
     if (!wxControl::Enable(bEnable))
     {
-        return FALSE;
+        return false;
     }
     ::WinEnableWindow(GetHwnd(), bEnable);
     }
     ::WinEnableWindow(GetHwnd(), bEnable);
-    return TRUE;
+    return true;
 } // end of wxSpinCtrl::Enable
 
 wxSpinCtrl* wxSpinCtrl::GetSpinForTextCtrl(
 } // end of wxSpinCtrl::Enable
 
 wxSpinCtrl* wxSpinCtrl::GetSpinForTextCtrl(
@@ -328,15 +339,15 @@ int wxSpinCtrl::GetValue() const
                                ,SPBQ_UPDATEIFVALID
                               )
                 );
                                ,SPBQ_UPDATEIFVALID
                               )
                 );
-    lVal - atol(zVal);
-    return lVal;
+    lVal = atol(zVal);
+    return (int)lVal;
 } // end of wxSpinCtrl::GetValue
 
 void wxSpinCtrl::OnChar (
   wxKeyEvent&                       rEvent
 )
 {
 } // end of wxSpinCtrl::GetValue
 
 void wxSpinCtrl::OnChar (
   wxKeyEvent&                       rEvent
 )
 {
-    switch (rEvent.KeyCode())
+    switch (rEvent.GetKeyCode())
     {
         case WXK_RETURN:
             {
     {
         case WXK_RETURN:
             {
@@ -395,6 +406,18 @@ void wxSpinCtrl::OnSpinChange(
     }
 } // end of wxSpinCtrl::OnSpinChange
 
     }
 } // end of wxSpinCtrl::OnSpinChange
 
+void wxSpinCtrl::OnSetFocus (
+  wxFocusEvent&                     rEvent
+)
+{
+    //
+    // When we get focus, give it to our buddy window as it needs it more than
+    // we do
+    //
+    ::WinSetFocus(HWND_DESKTOP, (HWND)m_hWndBuddy);
+    rEvent.Skip();
+} // end of wxSpinCtrl::OnSetFocus
+
 bool wxSpinCtrl::ProcessTextCommand(
   WXWORD                            wCmd
 , WXWORD                            wId
 bool wxSpinCtrl::ProcessTextCommand(
   WXWORD                            wCmd
 , WXWORD                            wId
@@ -433,7 +456,7 @@ bool wxSpinCtrl::ProcessTextCommand(
     //
     // Not processed
     //
     //
     // Not processed
     //
-    return FALSE;
+    return false;
 } // end of wxSpinCtrl::ProcessTextCommand
 
 void wxSpinCtrl::SetFocus()
 } // end of wxSpinCtrl::ProcessTextCommand
 
 void wxSpinCtrl::SetFocus()
@@ -448,14 +471,13 @@ bool wxSpinCtrl::SetFont(
     if (!wxWindowBase::SetFont(rFont))
     {
         // nothing to do
     if (!wxWindowBase::SetFont(rFont))
     {
         // nothing to do
-        return FALSE;
+        return false;
     }
 
     }
 
-    WXHANDLE                        hFont = GetFont().GetResourceHandle();
     wxOS2SetFont( m_hWnd
                  ,rFont
                 );
     wxOS2SetFont( m_hWnd
                  ,rFont
                 );
-    return TRUE;
+    return true;
 } // end of wxSpinCtrl::SetFont
 
 void wxSpinCtrl::SetValue(
 } // end of wxSpinCtrl::SetFont
 
 void wxSpinCtrl::SetValue(
@@ -474,9 +496,25 @@ bool wxSpinCtrl::Show(
 {
     if (!wxControl::Show(bShow))
     {
 {
     if (!wxControl::Show(bShow))
     {
-        return FALSE;
+        return false;
     }
     }
-    return TRUE;
+    return true;
 } // end of wxSpinCtrl::Show
 
 } // end of wxSpinCtrl::Show
 
-#endif //wxUSE_SPINBTN
\ No newline at end of file
+void wxSpinCtrl::SetSelection (
+  long                              lFrom
+, long                              lTo
+)
+{
+    //
+    // If from and to are both -1, it means (in wxWidgets) that all text should
+    // be selected - translate into Windows convention
+    //
+    if ((lFrom == -1) && (lTo == -1))
+    {
+        lFrom = 0;
+    }
+    ::WinSendMsg(m_hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), (MPARAM)0);
+} // end of wxSpinCtrl::SetSelection
+
+#endif //wxUSE_SPINCTRL