X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a086de984d366b97e91b39aaba7acd84430d963a..2b0246530d08cf7724d94c70d631c166f9717c2c:/src/os2/combobox.cpp diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index d1861e80f0..ccd8e120d9 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -9,13 +9,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#include "wx/combobox.h" - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifndef WX_PRECOMP - #include "wx/setup.h" + #include "wx/defs.h" #include "wx/settings.h" #endif @@ -49,7 +47,7 @@ bool wxComboBox::OS2Command( switch (uParam) { - case LN_SELECT: + case CBN_LBSELECT: if (GetSelection() > -1) { wxCommandEvent vEvent( wxEVT_COMMAND_COMBOBOX_SELECTED @@ -58,12 +56,12 @@ bool wxComboBox::OS2Command( vEvent.SetInt(GetSelection()); vEvent.SetEventObject(this); - vEvent.SetString((char*)GetStringSelection().c_str()); + vEvent.SetString(GetStringSelection()); ProcessCommand(vEvent); } break; - case EN_CHANGE: + case CBN_EFCHANGE: { wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED ,GetId() @@ -73,7 +71,7 @@ bool wxComboBox::OS2Command( sValue = GetValue(); else SetValue(sValue); - vEvent.SetString((char*)GetValue().c_str()); + vEvent.SetString(GetValue()); vEvent.SetEventObject(this); ProcessCommand(vEvent); } @@ -81,11 +79,29 @@ bool wxComboBox::OS2Command( } // // There is no return value for the CBN_ notifications, so always return - // FALSE from here to pass the message to DefWindowProc() + // false from here to pass the message to DefWindowProc() // - return FALSE; + return false; } // end of wxComboBox::OS2Command +bool wxComboBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxString& rsValue +, const wxPoint& rPos +, const wxSize& rSize +, const wxArrayString& asChoices +, long lStyle +, const wxValidator& rValidator +, const wxString& rsName +) +{ + wxCArrayString chs(asChoices); + + return Create(pParent, vId, rsValue, rPos, rSize, chs.GetCount(), + chs.GetStrings(), lStyle, rValidator, rsName); +} + bool wxComboBox::Create( wxWindow* pParent , wxWindowID vId @@ -95,24 +111,21 @@ bool wxComboBox::Create( , int n , const wxString asChoices[] , long lStyle -#if wxUSE_VALIDATORS , const wxValidator& rValidator -#endif , const wxString& rsName ) { + m_isShown = false; if (!CreateControl( pParent ,vId ,rPos ,rSize ,lStyle -#if wxUSE_VALIDATORS ,rValidator -#endif ,rsName )) - return FALSE; + return false; // // Get the right style @@ -132,10 +145,10 @@ bool wxComboBox::Create( lSstyle |= CBS_DROPDOWN; - if (!OS2CreateControl( "COMBOBOX" + if (!OS2CreateControl( _T("COMBOBOX") ,lSstyle )) - return FALSE; + return false; // // A choice/combobox normally has a white background (or other, depending @@ -143,12 +156,7 @@ bool wxComboBox::Create( // SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - wxFont* pTextFont = new wxFont( 10 - ,wxMODERN - ,wxNORMAL - ,wxNORMAL - ); - SetFont(*pTextFont); + SetFont(*wxSMALL_FONT); int i; for (i = 0; i < n; i++) @@ -161,7 +169,7 @@ bool wxComboBox::Create( ,rSize.x ,rSize.y ); - if (!rsValue.IsEmpty()) + if (!rsValue.empty()) { SetValue(rsValue); } @@ -169,47 +177,18 @@ bool wxComboBox::Create( ,(PFNWP)wxComboEditWndProc ); ::WinSetWindowULong(GetHwnd(), QWL_USER, (ULONG)this); - delete pTextFont; - return TRUE; + Show(true); + return true; } // end of wxComboBox::Create void wxComboBox::SetValue( const wxString& rsValue ) { - // - // If newlines are denoted by just 10, must stick 13 in front. - // - int nSingletons = 0; - int nLen = rsValue.Length(); - int i; - - for (i = 0; i < nLen; i ++) - { - if ((i > 0) && (rsValue[i] == 10) && (rsValue[i - 1] != 13)) - nSingletons ++; - } - if (nSingletons > 0) - { - wxChar* zTmp = new wxChar[nLen + nSingletons + 1]; - int j = 0; - - for (i = 0; i < nLen; i ++) - { - if ((i > 0) && (rsValue[i] == 10) && (rsValue[i - 1] != 13)) - { - zTmp[j] = 13; - j++; - } - zTmp[j] = rsValue[i]; - j++; - } - zTmp[j] = 0; - ::WinSetWindowText(GetHwnd(), zTmp); - delete[] zTmp; - } + if ( HasFlag(wxCB_READONLY) ) + SetStringSelection(rsValue); else - ::WinSetWindowText(GetHwnd(), rsValue.c_str()); + ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str()); } // end of wxComboBox::SetValue // @@ -256,7 +235,7 @@ void wxComboBox::SetInsertionPoint( void wxComboBox::SetInsertionPointEnd() { - long lPos = GetLastPosition(); + wxTextPos lPos = GetLastPosition(); SetInsertionPoint(lPos); } // end of wxComboBox::SetInsertionPointEnd @@ -273,9 +252,8 @@ long wxComboBox::GetInsertionPoint() const return lPos; } // end of wxComboBox::GetInsertionPoint -long wxComboBox::GetLastPosition() const +wxTextPos wxComboBox::GetLastPosition() const { - HWND hEditWnd = GetHwnd(); long lLineLength = 0L; WNDPARAMS vParams; @@ -299,16 +277,12 @@ long wxComboBox::GetLastPosition() const return lLineLength; } // end of wxComboBox::GetLastPosition -void wxComboBox::Replace( - long lFrom -, long lTo -, const wxString& rsValue -) +void wxComboBox::Replace( long lFrom, + long lTo, + const wxString& rsValue ) { #if wxUSE_CLIPBOARD HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; // // Set selection and remove it @@ -329,21 +303,23 @@ void wxComboBox::Replace( // Paste into edit control // ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0L); +#else + wxUnusedVar(lFrom); + wxUnusedVar(lTo); + wxUnusedVar(rsValue); #endif } // end of wxComboBox::Replace -void wxComboBox::Remove( - long lFrom -, long lTo -) +void wxComboBox::Remove( long lFrom, long lTo) { #if wxUSE_CLIPBOARD HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0); ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); +#else + wxUnusedVar(lFrom); + wxUnusedVar(lTo); #endif } // end of wxComboBox::Remove @@ -353,12 +329,12 @@ void wxComboBox::SetSelection( ) { HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; + long lFromChar = 0; + long lToChar = 0; // // If from and to are both -1, it means - // (in wxWindows) that all text should be selected. + // (in wxWidgets) that all text should be selected. // This translates into Windows convention // if ((lFrom == -1L) && (lTo == -1L)) @@ -403,9 +379,9 @@ bool wxComboBox::ProcessEditMsg( switch(vFlag) { case KC_CHAR: - return (HandleChar( SHORT1FROMMP(wParam) + return (HandleChar( wParam ,lParam - ,TRUE /* isASCII */ + ,true /* isASCII */ )); case KC_PREVDOWN: @@ -419,8 +395,14 @@ bool wxComboBox::ProcessEditMsg( )); } break; + + case WM_SETFOCUS: + if (SHORT1FROMMP((MPARAM)lParam) == TRUE) + return(HandleSetFocus((WXHWND)(HWND)wParam)); + else + return(HandleKillFocus((WXHWND)(HWND)wParam)); } - return FALSE; + return false; } // end of WinGuiBase_CComboBox::ProcessEditMsg MRESULT EXPENTRY wxComboEditWndProc( @@ -430,21 +412,17 @@ MRESULT EXPENTRY wxComboEditWndProc( , MPARAM lParam ) { - HWND hWndCombo; - wxWindow* pWin = NULL; - - hWndCombo = ::WinQueryWindow(hWnd, QW_PARENT); - pWin = (wxWindow*)wxFindWinFromHandle((WXHWND)hWndCombo); switch (uMessage) { // // Forward some messages to the combobox // + case WM_SETFOCUS: case WM_CHAR: { - wxComboBox* pCombo = wxDynamicCast( pWin - ,wxComboBox - ); + wxComboBox* pCombo = (wxComboBox *)::WinQueryWindowULong( hWnd + ,QWL_USER + ); if (pCombo->ProcessEditMsg( uMessage ,wParam @@ -463,4 +441,3 @@ MRESULT EXPENTRY wxComboEditWndProc( #endif // wxUSE_COMBOBOX -