From 72cb72bf824f8fdc2f0738d23379896f594d3189 Mon Sep 17 00:00:00 2001 From: Stefan Neis Date: Sun, 18 Nov 2007 22:55:54 +0000 Subject: [PATCH] Use new wxTextEntry implementation on OS/2. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/os2/combobox.h | 51 +++++------ include/wx/os2/textctrl.h | 4 + include/wx/textentry.h | 2 + src/os2/combobox.cpp | 173 +++----------------------------------- 4 files changed, 42 insertions(+), 188 deletions(-) diff --git a/include/wx/os2/combobox.h b/include/wx/os2/combobox.h index 1d008aa644..144f662a10 100644 --- a/include/wx/os2/combobox.h +++ b/include/wx/os2/combobox.h @@ -13,11 +13,13 @@ #define _WX_COMBOBOX_H_ #include "wx/choice.h" +#include "wx/textentry.h" #if wxUSE_COMBOBOX // Combobox item -class WXDLLEXPORT wxComboBox : public wxChoice +class WXDLLEXPORT wxComboBox : public wxChoice, + public wxTextEntry { public: @@ -94,35 +96,22 @@ class WXDLLEXPORT wxComboBox : public wxChoice ,const wxString& rsName = wxComboBoxNameStr ); - // - // List functions: see wxChoice - // - virtual wxString GetValue(void) const; - virtual void SetValue(const wxString& rsValue); - - // - // Clipboard operations - // - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - - virtual void SetInsertionPoint(long lPos); - virtual void SetInsertionPointEnd(void); - virtual long GetInsertionPoint(void) const; - virtual wxTextPos GetLastPosition(void) const; - virtual void Replace( long lFrom - ,long lTo - ,const wxString& rsValue - ); - virtual void Remove( long lFrom - ,long lTo - ); + // resolve ambiguities among virtual functions inherited from both base + // classes + virtual void Clear(); + virtual wxString GetValue() const; + virtual void SetValue(const wxString& value); + virtual wxString GetStringSelection() const + { return wxChoice::GetStringSelection(); } + inline virtual void SetSelection(int n) { wxChoice::SetSelection(n); } - virtual void SetSelection( long lFrom - ,long lTo - ); - virtual void SetEditable(bool bEditable); + virtual void SetSelection(long from, long to) + { wxTextEntry::SetSelection(from, to); } + virtual int GetSelection() const { return wxChoice::GetSelection(); } + virtual void GetSelection(long *from, long *to) const + { wxTextEntry::GetSelection(from, to); } + + virtual bool IsEditable() const; virtual bool OS2Command( WXUINT uParam ,WXWORD wId @@ -133,6 +122,10 @@ class WXDLLEXPORT wxComboBox : public wxChoice ); private: + // implement wxTextEntry pure virtual: it implements all the operations for + // the simple EDIT controls + virtual WXHWND GetEditHWND() const { return m_hWnd; } + DECLARE_DYNAMIC_CLASS(wxComboBox) }; // end of CLASS wxComboBox diff --git a/include/wx/os2/textctrl.h b/include/wx/os2/textctrl.h index c868ddc7ae..e693736aad 100644 --- a/include/wx/os2/textctrl.h +++ b/include/wx/os2/textctrl.h @@ -185,6 +185,10 @@ protected: bool m_bSkipUpdate; private: + // implement wxTextEntry pure virtual: it implements all the operations for + // the simple EDIT controls + virtual WXHWND GetEditHWND() const { return m_hWnd; } + bool m_bIsMLE; DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS(wxTextCtrl) diff --git a/include/wx/textentry.h b/include/wx/textentry.h index 415eb8b188..8567296cba 100644 --- a/include/wx/textentry.h +++ b/include/wx/textentry.h @@ -209,6 +209,8 @@ private: #include "wx/msw/textentry.h" #elif defined(__WXMOTIF__) #include "wx/motif/textentry.h" +#elif defined(__WXPM__) + #include "wx/os2/textentry.h" #else // no platform-specific implementation of wxTextEntry yet class WXDLLIMPEXP_CORE wxTextEntry : public wxTextEntryBase diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index d3ff05da08..8900b0ef18 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -183,174 +183,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); - else - ::WinSetWindowText(GetHwnd(), 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; - } + SetStringSelection(value); 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 - ,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 -- 2.45.2