X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7520f3da332d64a676b6f7d27a56004fabf2db36..5bf3f27fc91ff3288000c0134ac4bdfdf2e7db4f:/src/os2/combobox.cpp?ds=sidebyside diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index 5e86909cb9..d3ff05da08 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -14,11 +14,12 @@ #if wxUSE_COMBOBOX +#include "wx/combobox.h" + #ifndef WX_PRECOMP #include "wx/settings.h" #endif -#include "wx/combobox.h" #include "wx/clipbrd.h" #include "wx/os2/private.h" @@ -36,41 +37,35 @@ static WXFARPROC gfnWndprocEdit = (WXFARPROC)NULL; IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) -bool wxComboBox::OS2Command( - WXUINT uParam -, WXWORD WXUNUSED(wId) -) +bool wxComboBox::OS2Command( WXUINT uParam, WXWORD WXUNUSED(wId) ) { - long lSel = -1L; - wxString sValue; + long lSel = GetSelection(); + wxString sValue; switch (uParam) { case CBN_LBSELECT: - if (GetSelection() > -1) + if (lSel > -1) { - wxCommandEvent vEvent( wxEVT_COMMAND_COMBOBOX_SELECTED - ,GetId() - ); + wxCommandEvent vEvent( wxEVT_COMMAND_COMBOBOX_SELECTED, GetId() ); - vEvent.SetInt(GetSelection()); + vEvent.SetInt(lSel); vEvent.SetEventObject(this); vEvent.SetString(GetStringSelection()); + ProcessCommand(vEvent); } break; case CBN_EFCHANGE: { - wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED - ,GetId() - ); + wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED, GetId() ); if (lSel == -1L) sValue = GetValue(); else - SetValue(sValue); - vEvent.SetString(GetValue()); + sValue = GetStringSelection(); + vEvent.SetString(sValue); vEvent.SetEventObject(this); ProcessCommand(vEvent); } @@ -134,8 +129,9 @@ bool wxComboBox::Create( lSstyle = WS_TABSTOP | WS_VISIBLE; - if (lStyle & wxCLIP_SIBLINGS ) - lSstyle |= WS_CLIPSIBLINGS; + // clipping siblings does not yet work + // if (lStyle & wxCLIP_SIBLINGS ) + // lSstyle |= WS_CLIPSIBLINGS; if (lStyle & wxCB_READONLY) lSstyle |= CBS_DROPDOWNLIST; else if (lStyle & wxCB_SIMPLE) @@ -165,6 +161,14 @@ bool wxComboBox::Create( ,rSize.x ,rSize.y ); + + // Set height to use with sizers i.e. without the dropdown listbox + wxFont vFont = GetFont(); + int nEditHeight; + wxGetCharSize( GetHWND(), NULL, &nEditHeight, &vFont ); + nEditHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nEditHeight); + SetInitialSize(wxSize(-1,nEditHeight+4)); // +2x2 for the border + if (!rsValue.empty()) { SetValue(rsValue); @@ -177,6 +181,11 @@ bool wxComboBox::Create( return true; } // end of wxComboBox::Create +wxString wxComboBox::GetValue() const +{ + return wxGetWindowText(GetHwnd()); +} + void wxComboBox::SetValue( const wxString& rsValue ) @@ -184,7 +193,7 @@ void wxComboBox::SetValue( if ( HasFlag(wxCB_READONLY) ) SetStringSelection(rsValue); else - ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str()); + ::WinSetWindowText(GetHwnd(), rsValue.c_str()); } // end of wxComboBox::SetValue // @@ -290,7 +299,7 @@ void wxComboBox::Replace( long lFrom, // Now replace with 'value', by pasting. // wxSetClipboardData( wxDF_TEXT - ,(wxObject *)rsValue.c_str() + ,rsValue.c_str() ,0 ,0 ); @@ -319,14 +328,11 @@ void wxComboBox::Remove( long lFrom, long lTo) #endif } // end of wxComboBox::Remove -void wxComboBox::SetSelection( - long lFrom -, long lTo -) +void wxComboBox::SetSelection( long lFrom, long lTo ) { - HWND hWnd = GetHwnd(); - long lFromChar = 0; - long lToChar = 0; + HWND hWnd = GetHwnd(); + long lFromChar = 0; + long lToChar = 0; // // If from and to are both -1, it means @@ -346,22 +352,6 @@ void wxComboBox::SetSelection( ); } // end of wxComboBox::SetSelection -void wxComboBox::DoSetSize( - int nX -, int nY -, int nWidth -, int nHeight -, int nSizeFlags -) -{ - wxControl::DoSetSize( nX - ,nY - ,nWidth - ,nHeight - ,nSizeFlags - ); -} // end of wxComboBox::DoSetSize - bool wxComboBox::ProcessEditMsg( WXUINT uMsg , WXWPARAM wParam @@ -399,7 +389,7 @@ bool wxComboBox::ProcessEditMsg( return(HandleKillFocus((WXHWND)(HWND)wParam)); } return false; -} // end of WinGuiBase_CComboBox::ProcessEditMsg +} // end of wxComboBox::ProcessEditMsg MRESULT EXPENTRY wxComboEditWndProc( HWND hWnd