X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e58dab20ce995856303154a367bcca904066525c..223862cbd39bf964c146c90cb055c5409c07d07d:/src/os2/spinctrl.cpp diff --git a/src/os2/spinctrl.cpp b/src/os2/spinctrl.cpp index bfda23f725..2771654ab0 100644 --- a/src/os2/spinctrl.cpp +++ b/src/os2/spinctrl.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/spinctrl.cpp -// Purpose: wxSpinCtrl class implementation for Win32 +// Name: src/os2/spinctrl.cpp +// Purpose: wxSpinCtrl class implementation for OS/2 // Author: David Webster // Modified by: // Created: 10/15/99 @@ -13,12 +13,6 @@ // declarations // ============================================================================ - -#ifdef __GNUG__ - #pragma implementation "spinctrlbase.h" - #pragma implementation "spinctrl.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -31,7 +25,7 @@ #include "wx/wx.h" #endif -#if wxUSE_SPINBTN +#if wxUSE_SPINCTRL #include "wx/spinctrl.h" #include "wx/os2/private.h" @@ -46,10 +40,10 @@ extern void wxAssociateWinWithHandle( HWND hWnd static WXFARPROC fnWndProcSpinCtrl = (WXFARPROC)NULL; wxArraySpins wxSpinCtrl::m_svAllSpins; -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 @@ -71,8 +65,7 @@ MRESULT EXPENTRY wxSpinCtrlWndProc( 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 // @@ -116,32 +109,31 @@ wxSpinCtrl::~wxSpinCtrl() // construction // ---------------------------------------------------------------------------- -bool wxSpinCtrl::Create( - wxWindow* pParent -, wxWindowID vId -, const wxString& rsValue -, const wxPoint& rPos -, const wxSize& rSize -, long lStyle -, int nMin -, int nMax -, int nInitial -, const wxString& rsName -) +bool wxSpinCtrl::Create( wxWindow* pParent, + wxWindowID vId, + const wxString& WXUNUSED(rsValue), + const wxPoint& rPos, + const wxSize& rSize, + long lStyle, + int nMin, + int nMax, + int nInitial, + const wxString& rsName ) { - SWP vSwp; - - if (vId == -1) + if (vId == wxID_ANY) 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; - int lSstyle = 0L; + int lSstyle = 0L; lSstyle = WS_VISIBLE | WS_TABSTOP | @@ -151,15 +143,6 @@ bool wxSpinCtrl::Create( 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); @@ -182,20 +165,16 @@ bool wxSpinCtrl::Create( ); 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); + SetFont(*wxSMALL_FONT); - ::WinQueryWindowPos(m_hWnd, &vSwp); - SetXComp(vSwp.x); - SetYComp(vSwp.y); - SetSize( rPos.x - ,rPos.y - ,rSize.x - ,rSize.y - ); + SetXComp(0); + SetYComp(0); + SetSize( rPos.x, rPos.y, rSize.x, rSize.y ); SetRange(nMin, nMax); SetValue(nInitial); @@ -209,22 +188,23 @@ bool wxSpinCtrl::Create( ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this); fnWndProcSpinCtrl = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxSpinCtrlWndProc); m_svAllSpins.Add(this); - return TRUE; + return true; } // 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 - ,(wxFont*)&GetFont() + ,&vFont ); - nHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nHeight); + nHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nHeight)+4; if (vSizeBtn.y < nHeight) { @@ -241,13 +221,7 @@ void wxSpinCtrl::DoGetPosition( , int* pnY ) const { - WXHWND hWnd = GetHWND(); - - wxConstCast(this, wxSpinCtrl)->m_hWnd = m_hWndBuddy; - wxSpinButton::DoGetPosition( pnX - ,pnY - ); - wxConstCast(this, wxSpinCtrl)->m_hWnd = hWnd; + wxSpinButton::DoGetPosition( pnX,pnY ); } // end of wxpinCtrl::DoGetPosition void wxSpinCtrl::DoGetSize( @@ -303,10 +277,10 @@ bool wxSpinCtrl::Enable( { if (!wxControl::Enable(bEnable)) { - return FALSE; + return false; } ::WinEnableWindow(GetHwnd(), bEnable); - return TRUE; + return true; } // end of wxSpinCtrl::Enable wxSpinCtrl* wxSpinCtrl::GetSpinForTextCtrl( @@ -323,7 +297,7 @@ wxSpinCtrl* wxSpinCtrl::GetSpinForTextCtrl( // sanity check wxASSERT_MSG( pSpin->m_hWndBuddy == hWndBuddy, - _T("wxSpinCtrl has incorrect buddy HWND!") ); + wxT("wxSpinCtrl has incorrect buddy HWND!") ); return pSpin; } // end of wxSpinCtrl::GetSpinForTextCtrl @@ -340,15 +314,15 @@ int wxSpinCtrl::GetValue() const ,SPBQ_UPDATEIFVALID ) ); - lVal - atol(zVal); - return lVal; + lVal = atol(zVal); + return (int)lVal; } // end of wxSpinCtrl::GetValue void wxSpinCtrl::OnChar ( wxKeyEvent& rEvent ) { - switch (rEvent.KeyCode()) + switch (rEvent.GetKeyCode()) { case WXK_RETURN: { @@ -358,9 +332,9 @@ void wxSpinCtrl::OnChar ( wxString sVal = wxGetWindowText(m_hWndBuddy); InitCommandEvent(vEvent); - vEvent.SetString((char*)sVal.c_str()); + vEvent.SetString(sVal); vEvent.SetInt(GetValue()); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) return; break; } @@ -378,7 +352,7 @@ void wxSpinCtrl::OnChar ( vEventNav.SetDirection(!rEvent.ShiftDown()); vEventNav.SetWindowChange(rEvent.ControlDown()); vEventNav.SetEventObject(this); - if (GetParent()->GetEventHandler()->ProcessEvent(vEventNav)) + if (GetParent()->HandleWindowEvent(vEventNav)) return; } break; @@ -400,43 +374,51 @@ void wxSpinCtrl::OnSpinChange( vEvent.SetEventObject(this); vEvent.SetInt(rEventSpin.GetPosition()); - (void)GetEventHandler()->ProcessEvent(vEvent); + (void)HandleWindowEvent(vEvent); if (rEventSpin.GetSkipped()) { vEvent.Skip(); } } // end of wxSpinCtrl::OnSpinChange -bool wxSpinCtrl::ProcessTextCommand( - WXWORD wCmd -, WXWORD wId +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 WXUNUSED(wId) ) { switch (wCmd) { case SPBN_CHANGE: { - wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED - ,GetId() - ); + wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED, GetId() ); vEvent.SetEventObject(this); - wxString sVal = wxGetWindowText(m_hWndBuddy); + wxString sVal = wxGetWindowText(m_hWndBuddy); - vEvent.SetString((char*)sVal.c_str()); + vEvent.SetString(sVal); vEvent.SetInt(GetValue()); - return (GetEventHandler()->ProcessEvent(vEvent)); + return (HandleWindowEvent(vEvent)); } case SPBN_SETFOCUS: case SPBN_KILLFOCUS: { - wxFocusEvent vEvent( wCmd == EN_KILLFOCUS ? wxEVT_KILL_FOCUS : wxEVT_SET_FOCUS - ,m_windowId - ); + wxFocusEvent vEvent( wCmd == EN_KILLFOCUS ? wxEVT_KILL_FOCUS : wxEVT_SET_FOCUS + ,m_windowId + ); vEvent.SetEventObject(this); - return(GetEventHandler()->ProcessEvent(vEvent)); + return(HandleWindowEvent(vEvent)); } default: break; @@ -445,7 +427,7 @@ bool wxSpinCtrl::ProcessTextCommand( // // Not processed // - return FALSE; + return false; } // end of wxSpinCtrl::ProcessTextCommand void wxSpinCtrl::SetFocus() @@ -460,14 +442,13 @@ bool wxSpinCtrl::SetFont( if (!wxWindowBase::SetFont(rFont)) { // nothing to do - return FALSE; + return false; } - WXHANDLE hFont = GetFont().GetResourceHandle(); wxOS2SetFont( m_hWnd ,rFont ); - return TRUE; + return true; } // end of wxSpinCtrl::SetFont void wxSpinCtrl::SetValue( @@ -486,9 +467,25 @@ bool wxSpinCtrl::Show( { if (!wxControl::Show(bShow)) { - return FALSE; + return false; } - return TRUE; + return true; } // 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