]> git.saurik.com Git - wxWidgets.git/commitdiff
Use new wxTextEntry implementation on OS/2.
authorStefan Neis <Stefan.Neis@t-online.de>
Sun, 18 Nov 2007 22:55:54 +0000 (22:55 +0000)
committerStefan Neis <Stefan.Neis@t-online.de>
Sun, 18 Nov 2007 22:55:54 +0000 (22:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/os2/combobox.h
include/wx/os2/textctrl.h
include/wx/textentry.h
src/os2/combobox.cpp

index 1d008aa644aedaafe7db0456b153e3052584ae7e..144f662a101f470b1c4f0780e69ba79eaa724c67 100644 (file)
 #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
 
index c868ddc7ae41a05192bb09badb7283468a4aaf5d..e693736aad9501fbd2a2a0a74374719500106631 100644 (file)
@@ -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)
index 415eb8b188638a774e451843190c88edfeff8fae..8567296cba1dd9eb0851460bf3b98fcae9920ad7 100644 (file)
@@ -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
index d3ff05da08fab752c49dda6e1cea85648335d8b3..8900b0ef18b774e08c82a1b04de25a8f6eea9fb4 100644 (file)
@@ -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