X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/331f1e07ce3bf25c6f6848eac04a7551c0345d25..2e14066008229145e2da7b9f05a478ce38631f83:/src/os2/combobox.cpp?ds=inline diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index cc804d4354..81590e0f99 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -35,8 +35,6 @@ MRESULT EXPENTRY wxComboEditWndProc( HWND hWnd // static WXFARPROC gfnWndprocEdit = (WXFARPROC)NULL; -IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) - bool wxComboBox::OS2Command( WXUINT uParam, WXWORD WXUNUSED(wId) ) { long lSel = GetSelection(); @@ -129,8 +127,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) @@ -139,7 +138,7 @@ bool wxComboBox::Create( lSstyle |= CBS_DROPDOWN; - if (!OS2CreateControl( _T("COMBOBOX") + if (!OS2CreateControl( wxT("COMBOBOX") ,lSstyle )) return false; @@ -163,10 +162,10 @@ bool wxComboBox::Create( // Set height to use with sizers i.e. without the dropdown listbox wxFont vFont = GetFont(); - int nCx,nCy; - wxGetCharSize( GetHWND(), &nCx, &nCy, &vFont ); - int nEditHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy); - SetBestFittingSize(wxSize(-1,nEditHeight)); + 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()) { @@ -182,174 +181,29 @@ bool wxComboBox::Create( wxString wxComboBox::GetValue() const { - return wxGetWindowText(GetHwnd()); + return HasFlag(wxCB_READONLY) ? GetStringSelection() + : wxTextEntry::GetValue(); } -void wxComboBox::SetValue( - const wxString& rsValue -) +void wxComboBox::SetValue(const wxString& value) { if ( HasFlag(wxCB_READONLY) ) - SetStringSelection(rsValue); + SetStringSelection(value); else - ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str()); -} // end of wxComboBox::SetValue - -// -// Clipboard operations -// -void wxComboBox::Copy() -{ - HWND hWnd = GetHwnd(); - - ::WinSendMsg(hWnd, EM_COPY, (MPARAM)0, (MPARAM)0); -} // end of wxComboBox::Copy - -void wxComboBox::Cut() -{ - HWND hWnd = GetHwnd(); - - ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); -} // end of wxComboBox::Cut - -void wxComboBox::Paste() -{ - HWND hWnd = GetHwnd(); - - ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0); -} // end of wxComboBox::Paste - -void wxComboBox::SetEditable( - bool bEditable -) -{ - HWND hWnd = GetHwnd(); - - ::WinSendMsg(hWnd, EM_SETREADONLY, (MPARAM)!bEditable, (MPARAM)0L); -} // end of wxComboBox::SetEditable - -void wxComboBox::SetInsertionPoint( - long lPos -) -{ - HWND hWnd = GetHwnd(); - - ::WinSendMsg(hWnd, EM_SETFIRSTCHAR, MPFROMLONG(lPos), (MPARAM)0); -} // end of wxComboBox::SetInsertionPoint - -void wxComboBox::SetInsertionPointEnd() -{ - wxTextPos lPos = GetLastPosition(); - - SetInsertionPoint(lPos); -} // end of wxComboBox::SetInsertionPointEnd - -long wxComboBox::GetInsertionPoint() const -{ - long lPos = LONGFROMMR(::WinSendMsg( GetHwnd() - ,LM_QUERYSELECTION - ,(MPARAM)0 - ,(MPARAM)0 - )); - if (lPos == LIT_NONE) - return wxNOT_FOUND; - return lPos; -} // end of wxComboBox::GetInsertionPoint - -wxTextPos wxComboBox::GetLastPosition() const -{ - long lLineLength = 0L; - WNDPARAMS vParams; - - // - // Get number of characters in the last (only) line. We'll add this to the character - // index for the last line, 1st position. - // - - - vParams.fsStatus = WPM_CCHTEXT; - if (::WinSendMsg( GetHwnd() - ,WM_QUERYWINDOWPARAMS - ,&vParams - ,0 - )) - { - lLineLength = (long)vParams.cchText; - } - else - lLineLength = 0L; - return lLineLength; -} // end of wxComboBox::GetLastPosition - -void wxComboBox::Replace( long lFrom, - long lTo, - const wxString& rsValue ) -{ -#if wxUSE_CLIPBOARD - HWND hWnd = GetHwnd(); - - // - // Set selection and remove it - // - ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0); - ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); - - // - // Now replace with 'value', by pasting. - // - wxSetClipboardData( wxDF_TEXT - ,(wxObject *)rsValue.c_str() - ,0 - ,0 - ); - - // - // Paste into edit control - // - ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0L); -#else - wxUnusedVar(lFrom); - wxUnusedVar(lTo); - wxUnusedVar(rsValue); -#endif -} // end of wxComboBox::Replace + wxTextEntry::SetValue(value); +} -void wxComboBox::Remove( long lFrom, long lTo) +void wxComboBox::Clear() { -#if wxUSE_CLIPBOARD - HWND hWnd = GetHwnd(); - - ::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 + wxChoice::Clear(); + if ( !HasFlag(wxCB_READONLY) ) + wxTextEntry::Clear(); +} -void wxComboBox::SetSelection( long lFrom, long lTo ) +bool wxComboBox::IsEditable() const { - HWND hWnd = GetHwnd(); - long lFromChar = 0; - long lToChar = 0; - - // - // If from and to are both -1, it means - // (in wxWidgets) that all text should be selected. - // This translates into Windows convention - // - if ((lFrom == -1L) && (lTo == -1L)) - { - lFromChar = 0; - lToChar = -1; - } - - ::WinSendMsg( hWnd - ,EM_SETSEL - ,MPFROM2SHORT((USHORT)lFromChar, (USHORT)lToChar) - ,(MPARAM)0 - ); -} // end of wxComboBox::SetSelection + return !HasFlag(wxCB_READONLY) && wxTextEntry::IsEditable(); +} bool wxComboBox::ProcessEditMsg( WXUINT uMsg @@ -388,7 +242,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