]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/textctrl.cpp
replace more __WXDEBUG__ occurrences with wxDEBUG_LEVEL
[wxWidgets.git] / src / univ / textctrl.cpp
index afba680e8db7d3ffc384074ab4595ca3fc113242..2edc5b0afe326c0059929b678bcceb860351e011 100644 (file)
 
 #include "wx/cmdproc.h"
 
 
 #include "wx/cmdproc.h"
 
-// turn extra wxTextCtrl-specific debugging on/off
-#define WXDEBUG_TEXT
+#if wxDEBUG_LEVEL >= 2
+    // turn extra wxTextCtrl-specific debugging on/off
+    #define WXDEBUG_TEXT
 
 
-// turn wxTextCtrl::Replace() debugging on (slows down code a *lot*!)
-#define WXDEBUG_TEXT_REPLACE
-
-#ifndef __WXDEBUG__
-    #undef WXDEBUG_TEXT
-    #undef WXDEBUG_TEXT_REPLACE
-#endif
+    // turn wxTextCtrl::Replace() debugging on (slows down code a *lot*!)
+    #define WXDEBUG_TEXT_REPLACE
+#endif // wxDEBUG_LEVEL >= 2
 
 // wxStringTokenize only needed for debug checks
 #ifdef WXDEBUG_TEXT_REPLACE
 
 // wxStringTokenize only needed for debug checks
 #ifdef WXDEBUG_TEXT_REPLACE
@@ -790,21 +787,23 @@ wxTextCtrl::~wxTextCtrl()
 
 void wxTextCtrl::DoSetValue(const wxString& value, int flags)
 {
 
 void wxTextCtrl::DoSetValue(const wxString& value, int flags)
 {
-    if ( IsSingleLine() && (value == GetValue()) )
+    if ( value != GetValue() )
     {
     {
-        // nothing changed
-        return;
-    }
+        EventsSuppressor noeventsIf(this, !(flags & SetValue_SendEvent));
 
 
-    Replace(0, GetLastPosition(), value);
+        Replace(0, GetLastPosition(), value);
 
 
-    if ( IsSingleLine() )
+        if ( IsSingleLine() )
+        {
+            SetInsertionPoint(0);
+        }
+    }
+    else // nothing changed
     {
     {
-        SetInsertionPoint(0);
+        // still send event for consistency
+        if ( flags & SetValue_SendEvent )
+            SendTextUpdatedEvent();
     }
     }
-
-    if ( flags & SetValue_SendEvent )
-        SendTextUpdatedEvent();
 }
 
 const wxArrayString& wxTextCtrl::GetLines() const
 }
 
 const wxArrayString& wxTextCtrl::GetLines() const
@@ -817,7 +816,7 @@ size_t wxTextCtrl::GetLineCount() const
     return MData().m_lines.GetCount();
 }
 
     return MData().m_lines.GetCount();
 }
 
-wxString wxTextCtrl::GetValue() const
+wxString wxTextCtrl::DoGetValue() const
 {
     // for multiline controls we don't always store the total value but only
     // recompute it when asked - and to invalidate it we just empty it in
 {
     // for multiline controls we don't always store the total value but only
     // recompute it when asked - and to invalidate it we just empty it in
@@ -1264,6 +1263,9 @@ void wxTextCtrl::Replace(wxTextPos from, wxTextPos to, const wxString& text)
 
     // now call it to do the rest (not related to refreshing)
     ClearSelection();
 
     // now call it to do the rest (not related to refreshing)
     ClearSelection();
+
+    if ( EventsAllowed() )
+        SendTextUpdatedEvent();
 }
 
 void wxTextCtrl::Remove(wxTextPos from, wxTextPos to)
 }
 
 void wxTextCtrl::Remove(wxTextPos from, wxTextPos to)
@@ -1444,8 +1446,12 @@ wxString wxTextCtrl::GetSelectionText() const
 void wxTextCtrl::SetSelection(wxTextPos from, wxTextPos to)
 {
     // selecting till -1 is the same as selecting to the end
 void wxTextCtrl::SetSelection(wxTextPos from, wxTextPos to)
 {
     // selecting till -1 is the same as selecting to the end
-    if ( to == -1 && from != -1 )
+    if ( to == -1 )
     {
     {
+        // and selecting (-1, -1) range is the same as selecting everything, by
+        // convention
+        if ( from == -1 )
+            from = 0;
         to = GetLastPosition();
     }
 
         to = GetLastPosition();
     }
 
@@ -1961,7 +1967,7 @@ void wxTextCtrl::ShowPosition(wxTextPos pos)
                 {
                     // finding the last line is easy if each line has exactly
                     // one row
                 {
                     // finding the last line is easy if each line has exactly
                     // one row
-                    yEnd = yStart + rectText.height / GetLineHeight() - 1;
+                    yEnd = yStart + rectText.height / GetLineHeight();
                 }
 
                 if ( yEnd < y )
                 }
 
                 if ( yEnd < y )
@@ -2414,7 +2420,7 @@ void wxTextCtrl::UpdateTextRect()
             WData().m_rowFirstInvalid = 0;
 
             // increase timestamp: this means that the lines which had been
             WData().m_rowFirstInvalid = 0;
 
             // increase timestamp: this means that the lines which had been
-            // laid out before will be relayd out the next time LayoutLines()
+            // laid out before will be relaid out the next time LayoutLines()
             // is called because their timestamp will be smaller than the
             // current one
             WData().m_timestamp++;
             // is called because their timestamp will be smaller than the
             // current one
             WData().m_timestamp++;
@@ -2438,9 +2444,12 @@ void wxTextCtrl::UpdateLastVisible()
     {
         case wxTE_HT_BEYOND:
             // everything is visible
     {
         case wxTE_HT_BEYOND:
             // everything is visible
+            SData().m_ofsHorz = 0;
+
+            SData().m_colStart = 0;
             SData().m_colLastVisible = text.length();
 
             SData().m_colLastVisible = text.length();
 
-            // calc it below
+            // calculate it below
             SData().m_posLastVisible = -1;
             break;
 
             SData().m_posLastVisible = -1;
             break;
 
@@ -3258,7 +3267,7 @@ bool wxTextCtrl::GetLineAndRow(wxTextCoord row,
    fine for vertical scrolling as all lines have the same height but is rather
    ugly for horizontal scrolling if proportional font is used. This is why we
    manually update and use SData().m_ofsHorz which contains the length of the string
    fine for vertical scrolling as all lines have the same height but is rather
    ugly for horizontal scrolling if proportional font is used. This is why we
    manually update and use SData().m_ofsHorz which contains the length of the string
-   which is hidden beyond the left borde. An important property of text
+   which is hidden beyond the left border. An important property of text
    controls using this kind of scrolling is that an entire number of characters
    is always shown and that parts of characters never appear on display -
    neither in the leftmost nor rightmost positions.
    controls using this kind of scrolling is that an entire number of characters
    is always shown and that parts of characters never appear on display -
    neither in the leftmost nor rightmost positions.
@@ -3273,7 +3282,7 @@ void wxTextCtrl::ShowHorzPosition(wxCoord pos)
 
     // pos is the logical position to show
 
 
     // pos is the logical position to show
 
-    // SData().m_ofsHorz is the fisrt logical position shown
+    // SData().m_ofsHorz is the first logical position shown
     if ( pos < SData().m_ofsHorz )
     {
         // scroll backwards
     if ( pos < SData().m_ofsHorz )
     {
         // scroll backwards
@@ -3608,8 +3617,12 @@ void wxTextCtrl::UpdateScrollbars()
 
         if ( scrollRangeXOld )
         {
 
         if ( scrollRangeXOld )
         {
-            x *= scrollRangeX - m_rectText.width / charWidth;
-            x /= scrollRangeXOld - m_rectText.width / charWidth;
+            const int w = m_rectText.width / charWidth;
+            if ( w != scrollRangeXOld )
+            {
+                x *= scrollRangeX - w;
+                x /= scrollRangeXOld - w;
+            }
             Scroll(x, y);
         }
 
             Scroll(x, y);
         }
 
@@ -4186,6 +4199,7 @@ void wxTextCtrl::DoDraw(wxControlRenderer *renderer)
     // FIXME: is this really a bug in wxMSW?
     rectTextArea.width--;
 #endif // __WXMSW__
     // FIXME: is this really a bug in wxMSW?
     rectTextArea.width--;
 #endif // __WXMSW__
+    dc.DestroyClippingRegion();
     dc.SetClippingRegion(rectTextArea);
 
     // adjust for scrolling
     dc.SetClippingRegion(rectTextArea);
 
     // adjust for scrolling
@@ -4297,7 +4311,7 @@ void wxTextCtrl::CreateCaret()
     else
     {
         // read only controls don't have the caret
     else
     {
         // read only controls don't have the caret
-        caret = (wxCaret *)NULL;
+        caret = NULL;
     }
 
     // SetCaret() will delete the old caret if any
     }
 
     // SetCaret() will delete the old caret if any
@@ -4416,7 +4430,7 @@ bool wxTextCtrl::PerformAction(const wxControlAction& actionOrig,
 
     // the command this action corresponds to or NULL if this action doesn't
     // change text at all or can't be undone
 
     // the command this action corresponds to or NULL if this action doesn't
     // change text at all or can't be undone
-    wxTextCtrlCommand *command = (wxTextCtrlCommand *)NULL;
+    wxTextCtrlCommand *command = NULL;
 
     wxString action;
     bool del = false,
 
     wxString action;
     bool del = false,
@@ -4748,11 +4762,11 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
         }
 #endif
     }
         }
 #endif
     }
-#ifdef __WXDEBUG__
+#if wxDEBUG_LEVEL >= 2
     // Ctrl-R refreshes the control in debug mode
     else if ( event.ControlDown() && event.GetKeyCode() == 'r' )
         Refresh();
     // Ctrl-R refreshes the control in debug mode
     else if ( event.ControlDown() && event.GetKeyCode() == 'r' )
         Refresh();
-#endif // __WXDEBUG__
+#endif // wxDEBUG_LEVEL >= 2
 
     event.Skip();
 }
 
     event.Skip();
 }
@@ -4772,7 +4786,7 @@ wxInputHandler *wxTextCtrl::GetStdInputHandler(wxInputHandler *handlerDef)
 wxStdTextCtrlInputHandler::wxStdTextCtrlInputHandler(wxInputHandler *inphand)
                          : wxStdInputHandler(inphand)
 {
 wxStdTextCtrlInputHandler::wxStdTextCtrlInputHandler(wxInputHandler *inphand)
                          : wxStdInputHandler(inphand)
 {
-    m_winCapture = (wxTextCtrl *)NULL;
+    m_winCapture = NULL;
 }
 
 /* static */
 }
 
 /* static */
@@ -4949,7 +4963,7 @@ bool wxStdTextCtrlInputHandler::HandleMouse(wxInputConsumer *consumer,
             m_winCapture->ShowCaret();
 
             m_winCapture->ReleaseMouse();
             m_winCapture->ShowCaret();
 
             m_winCapture->ReleaseMouse();
-            m_winCapture = (wxTextCtrl *)NULL;
+            m_winCapture = NULL;
         }
     }
 
         }
     }