]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/wince/textctrlce.cpp
derive wxSTC from wxTextAreaBase to provide wxTextCtrl-like methods (see #9114)
[wxWidgets.git] / src / msw / wince / textctrlce.cpp
index 5fce03dcf1dcd99ef9d161e898de6e96d1d159c5..a9d97de8cc37dab3497b0666f942dafe2234100f 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        src/msw/wince/textctrlce.cpp
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        src/msw/wince/textctrlce.cpp
-// Purpose:     wxTextCtrl implementation for Smartphones
+// Purpose:     wxTextCtrl implementation for smart phones driven by WinCE
 // Author:      Wlodzimierz ABX Skiba
 // Modified by:
 // Created:     30.08.2004
 // Author:      Wlodzimierz ABX Skiba
 // Modified by:
 // Created:     30.08.2004
@@ -9,7 +9,6 @@
 // License:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // License:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-
 // ============================================================================
 // declarations
 // ============================================================================
 // ============================================================================
 // declarations
 // ============================================================================
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "textctrlce.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
     #pragma hdrstop
 #endif
 
     #pragma hdrstop
 #endif
 
+#if wxUSE_TEXTCTRL && defined(__SMARTPHONE__) && defined(__WXWINCE__)
+
+#include "wx/textctrl.h"
+
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-    #include "wx/textctrl.h"
+    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
 #endif
 
 #include "wx/spinbutt.h"
 #include "wx/textfile.h"
 
 #endif
 
 #include "wx/spinbutt.h"
 #include "wx/textfile.h"
 
-#include <commctrl.h>
-#include "wx/msw/missing.h"
-#include "wx/msw/winundef.h"
-
-#if wxUSE_TEXTCTRL && defined(__SMARTPHONE__)
-
 #define GetBuddyHwnd()      (HWND)(m_hwndBuddy)
 
 #define IsVertical(wxStyle) (true)
 #define GetBuddyHwnd()      (HWND)(m_hwndBuddy)
 
 #define IsVertical(wxStyle) (true)
@@ -167,7 +160,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
     WXDWORD msStyle = MSWGetStyle(GetWindowStyle(), & exStyle) ;
 
     wxSize sizeText(size), sizeBtn(size);
     WXDWORD msStyle = MSWGetStyle(GetWindowStyle(), & exStyle) ;
 
     wxSize sizeText(size), sizeBtn(size);
-    sizeBtn.x = GetBestSpinerSize(IsVertical(style)).x / 2;
+    sizeBtn.x = GetBestSpinnerSize(IsVertical(style)).x / 2;
 
     if ( sizeText.x == wxDefaultCoord )
     {
 
     if ( sizeText.x == wxDefaultCoord )
     {
@@ -232,7 +225,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
     WXDWORD spiner_style = WS_VISIBLE |
                            UDS_ALIGNRIGHT |
                            UDS_EXPANDABLE |
     WXDWORD spiner_style = WS_VISIBLE |
                            UDS_ALIGNRIGHT |
                            UDS_EXPANDABLE |
-                                                  UDS_NOSCROLL;
+                           UDS_NOSCROLL;
 
     if ( !IsVertical(style) )
         spiner_style |= UDS_HORZ;
 
     if ( !IsVertical(style) )
         spiner_style |= UDS_HORZ;
@@ -263,7 +256,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
         sizeText.y = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy);
     }
 
         sizeText.y = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy);
     }
 
-    SetBestSize(size);
+    SetInitialSize(size);
 
     (void)::ShowWindow(GetBuddyHwnd(), SW_SHOW);
 
 
     (void)::ShowWindow(GetBuddyHwnd(), SW_SHOW);
 
@@ -400,7 +393,7 @@ wxString wxTextCtrl::GetRange(long from, long to) const
     return str;
 }
 
     return str;
 }
 
-void wxTextCtrl::SetValue(const wxString& value)
+void wxTextCtrl::DoSetValue(const wxString& value, int flags)
 {
     // if the text is long enough, it's faster to just set it instead of first
     // comparing it with the old one (chances are that it will be different
 {
     // if the text is long enough, it's faster to just set it instead of first
     // comparing it with the old one (chances are that it will be different
@@ -408,15 +401,16 @@ void wxTextCtrl::SetValue(const wxString& value)
     // edit controls mostly)
     if ( (value.length() > 0x400) || (value != GetValue()) )
     {
     // edit controls mostly)
     if ( (value.length() > 0x400) || (value != GetValue()) )
     {
-        DoWriteText(value, false);
-        
+        DoWriteText(value, flags);
+
         // for compatibility, don't move the cursor when doing SetValue()
         SetInsertionPoint(0);
     }
     else // same text
     {
         // still send an event for consistency
         // for compatibility, don't move the cursor when doing SetValue()
         SetInsertionPoint(0);
     }
     else // same text
     {
         // still send an event for consistency
-        SendUpdateEvent();
+        if ( flags & SetValue_SendEvent )
+            SendUpdateEvent();
     }
 
     // we should reset the modified flag even if the value didn't really change
     }
 
     // we should reset the modified flag even if the value didn't really change
@@ -431,8 +425,9 @@ void wxTextCtrl::WriteText(const wxString& value)
     DoWriteText(value);
 }
 
     DoWriteText(value);
 }
 
-void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
+void wxTextCtrl::DoWriteText(const wxString& value, int flags)
 {
 {
+    bool selectionOnly = (flags & SetValue_SelectionOnly) != 0;
     wxString valueDos;
     if ( m_windowStyle & wxTE_MULTILINE )
         valueDos = wxTextFile::Translate(value, wxTextFileType_Dos);
     wxString valueDos;
     if ( m_windowStyle & wxTE_MULTILINE )
         valueDos = wxTextFile::Translate(value, wxTextFileType_Dos);
@@ -443,7 +438,7 @@ void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
     // call below which is confusing for the client code and so should be
     // avoided
     //
     // call below which is confusing for the client code and so should be
     // avoided
     //
-    if ( ( selectionOnly && HasSelection() ) )
+    if ( selectionOnly && HasSelection() )
     {
         m_suppressNextUpdate = true;
     }
     {
         m_suppressNextUpdate = true;
     }
@@ -451,7 +446,7 @@ void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
     ::SendMessage(GetBuddyHwnd(), selectionOnly ? EM_REPLACESEL : WM_SETTEXT,
                   0, (LPARAM)valueDos.c_str());
 
     ::SendMessage(GetBuddyHwnd(), selectionOnly ? EM_REPLACESEL : WM_SETTEXT,
                   0, (LPARAM)valueDos.c_str());
 
-    if ( !selectionOnly )
+    if ( !selectionOnly && !( flags & SetValue_SendEvent ) )
     {
         // Windows already sends an update event for single-line
         // controls.
     {
         // Windows already sends an update event for single-line
         // controls.
@@ -546,7 +541,7 @@ bool wxTextCtrl::CanPaste() const
 
 void wxTextCtrl::SetEditable(bool editable)
 {
 
 void wxTextCtrl::SetEditable(bool editable)
 {
-    SendMessage(GetBuddyHwnd(), EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L);
+    ::SendMessage(GetBuddyHwnd(), EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L);
 }
 
 void wxTextCtrl::SetInsertionPoint(long pos)
 }
 
 void wxTextCtrl::SetInsertionPoint(long pos)
@@ -566,7 +561,7 @@ long wxTextCtrl::GetInsertionPoint() const
     return Pos & 0xFFFF;
 }
 
     return Pos & 0xFFFF;
 }
 
-long wxTextCtrl::GetLastPosition() const
+wxTextPos wxTextCtrl::GetLastPosition() const
 {
     int numLines = GetNumberOfLines();
     long posStartLastLine = XYToPosition(0, numLines - 1);
 {
     int numLines = GetNumberOfLines();
     long posStartLastLine = XYToPosition(0, numLines - 1);
@@ -648,7 +643,7 @@ void wxTextCtrl::Replace(long from, long to, const wxString& value)
     // Set selection and remove it
     DoSetSelection(from, to, false);
 
     // Set selection and remove it
     DoSetSelection(from, to, false);
 
-    DoWriteText(value, true);
+    DoWriteText(value, SetValue_SelectionOnly);
 }
 
 void wxTextCtrl::Remove(long from, long to)
 }
 
 void wxTextCtrl::Remove(long from, long to)
@@ -740,9 +735,9 @@ wxTextCtrl::HitTest(const wxPoint& pt, long *posOut) const
     // double check that we really are where it pretends
     POINTL ptReal;
 
     // double check that we really are where it pretends
     POINTL ptReal;
 
-    LRESULT lRc = SendMessage(GetBuddyHwnd(), EM_POSFROMCHAR, pos, 0);
+    LRESULT lRc = ::SendMessage(GetBuddyHwnd(), EM_POSFROMCHAR, pos, 0);
 
 
-       if ( lRc == -1 )
+    if ( lRc == -1 )
     {
         // this is apparently returned when pos corresponds to the last
         // position
     {
         // this is apparently returned when pos corresponds to the last
         // position
@@ -779,7 +774,7 @@ void wxTextCtrl::ShowPosition(long pos)
     int linesToScroll = specifiedLineLineNo - currentLineLineNo;
 
     if (linesToScroll != 0)
     int linesToScroll = specifiedLineLineNo - currentLineLineNo;
 
     if (linesToScroll != 0)
-               (void)::SendMessage(GetBuddyHwnd(), EM_LINESCROLL, 0, (LPARAM)linesToScroll);
+        (void)::SendMessage(GetBuddyHwnd(), EM_LINESCROLL, 0, (LPARAM)linesToScroll);
 }
 
 long wxTextCtrl::GetLengthOfLineContainingPos(long pos) const
 }
 
 long wxTextCtrl::GetLengthOfLineContainingPos(long pos) const
@@ -1040,40 +1035,6 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
     return true;
 }
 
     return true;
 }
 
-WXHBRUSH wxTextCtrl::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSED(nCtlColor),
-#if wxUSE_CTL3D
-                               WXUINT message,
-                               WXWPARAM wParam,
-                               WXLPARAM lParam
-#else
-                               WXUINT WXUNUSED(message),
-                               WXWPARAM WXUNUSED(wParam),
-                               WXLPARAM WXUNUSED(lParam)
-#endif
-    )
-{
-#if wxUSE_CTL3D
-    if ( m_useCtl3D )
-    {
-        HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
-        return (WXHBRUSH) hbrush;
-    }
-#endif // wxUSE_CTL3D
-
-    HDC hdc = (HDC)pDC;
-    wxColour colBack = GetBackgroundColour();
-
-    if (!IsEnabled() && (GetWindowStyle() & wxTE_MULTILINE) == 0)
-        colBack = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
-
-    ::SetBkColor(hdc, wxColourToRGB(colBack));
-    ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));
-
-    wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID);
-
-    return (WXHBRUSH)brush->GetResourceHandle();
-}
-
 bool wxTextCtrl::AdjustSpaceLimit()
 {
     unsigned int limit = ::SendMessage(GetBuddyHwnd(), EM_GETLIMITTEXT, 0, 0);
 bool wxTextCtrl::AdjustSpaceLimit()
 {
     unsigned int limit = ::SendMessage(GetBuddyHwnd(), EM_GETLIMITTEXT, 0, 0);
@@ -1122,7 +1083,7 @@ bool wxTextCtrl::AcceptsFocus() const
 
 void wxTextCtrl::DoMoveWindow(int x, int y, int width, int height)
 {
 
 void wxTextCtrl::DoMoveWindow(int x, int y, int width, int height)
 {
-    int widthBtn = GetBestSpinerSize(IsVertical(GetWindowStyle())).x / 2;
+    int widthBtn = GetBestSpinnerSize(IsVertical(GetWindowStyle())).x / 2;
     int widthText = width - widthBtn - MARGIN_BETWEEN;
     if ( widthText <= 0 )
     {
     int widthText = width - widthBtn - MARGIN_BETWEEN;
     if ( widthText <= 0 )
     {
@@ -1250,4 +1211,4 @@ void wxTextCtrl::OnSetFocus(wxFocusEvent& WXUNUSED(event))
     }
 }
 
     }
 }
 
-#endif // wxUSE_TEXTCTRL && __SMARTPHONE__
+#endif // wxUSE_TEXTCTRL && __SMARTPHONE__ && __WXWINCE__