]> git.saurik.com Git - wxWidgets.git/commitdiff
1. PositionToXY() off-by-2 (!) bug corrected
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 28 Jan 1999 14:41:44 +0000 (14:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 28 Jan 1999 14:41:44 +0000 (14:41 +0000)
2. controls sample dumps info about text control when F1 is pressed

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1507 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/controls/controls.cpp
src/gtk/textctrl.cpp
src/gtk1/textctrl.cpp

index 686dc1bab460f6d73eb368bd4c547c4c3d15d475..88f1d757fa350cfe746e9027f9c9fe8e6ef350b4 100644 (file)
@@ -57,6 +57,21 @@ class MyApp: public wxApp
     bool OnInit(void);
 };
 
+// a text ctrl which allows to call different wxTextCtrl functions
+// interactively by pressing function keys in it
+class MyTextCtrl : public wxTextCtrl
+{
+public:
+    MyTextCtrl(wxWindow *parent, wxWindowID id, const wxString &value,
+               const wxPoint &pos, const wxSize &size, int style = 0)
+        : wxTextCtrl(parent, id, value, pos, size, style) { }
+
+    void OnChar(wxKeyEvent& event);
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
 class MyPanel: public wxPanel
 {
   public:
@@ -92,8 +107,8 @@ class MyPanel: public wxPanel
     wxButton      *m_fontButton;
     wxSpinButton  *m_spinbutton;
     wxTextCtrl    *m_spintext;
-    wxTextCtrl    *m_multitext;
-    wxTextCtrl    *m_textentry;
+    MyTextCtrl    *m_multitext;
+    MyTextCtrl    *m_textentry;
     wxCheckBox    *m_checkbox;
 
     wxTextCtrl    *m_text;
@@ -159,6 +174,52 @@ bool MyApp::OnInit(void)
   return TRUE;
 }
 
+//----------------------------------------------------------------------
+// MyTextCtrl
+//----------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
+    EVT_CHAR(MyTextCtrl::OnChar)
+END_EVENT_TABLE()
+
+void MyTextCtrl::OnChar(wxKeyEvent& event)
+{
+    switch ( event.KeyCode() )
+    {
+        case WXK_F1:
+            // show current position and text length
+            {
+                long line, column, pos = GetInsertionPoint();
+                PositionToXY(pos, &column, &line);
+
+                wxLogMessage("Current position: %ld\n"
+                             "Current line, column: (%ld, %ld)\n"
+                             "Number of lines: %ld\n"
+                             "Current line length: %ld\n"
+                             "Total text length: %ld",
+                             pos,
+                             line, column,
+                             GetNumberOfLines(),
+                             GetLineLength(line),
+                             GetLastPosition());
+            }
+            break;
+
+        case WXK_F2:
+            // go to the end
+            SetInsertionPointEnd();
+            break;
+
+        case WXK_F3:
+            // go to position 10
+            SetInsertionPoint(10);
+            break;
+
+        default:
+            event.Skip();
+    }
+}
+
 //----------------------------------------------------------------------
 // MyPanel
 //----------------------------------------------------------------------
@@ -214,7 +275,6 @@ const int  ID_SLIDER            = 181;
 
 const int  ID_SPIN              = 182;
 
-
 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
   EVT_SIZE      (                         MyPanel::OnSize)
   EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK,  MyPanel::OnPageChanged)
@@ -393,11 +453,12 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) :
   panel = new wxPanel(m_notebook);
 //  panel->SetBackgroundColour("cadet blue");
 //  panel->SetForegroundColour("blue");
-  m_textentry = new wxTextCtrl( panel, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(320,28));
+  m_textentry = new MyTextCtrl( panel, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(320,28));
   (*m_textentry) << " More text.";
 //  m_textentry->SetBackgroundColour("wheat");
-  m_multitext = new wxTextCtrl( panel, ID_TEXT, "And here.", wxPoint(10,50), wxSize(320,160), wxTE_MULTILINE  );
-  (*m_multitext) << " More text.";
+  m_multitext = new MyTextCtrl( panel, ID_TEXT, "And here.", wxPoint(10,50), wxSize(320,160), wxTE_MULTILINE  );
+  (*m_multitext) << " More text."
+                 << "\nPress Fn keys to test different wxTextCtrl functions";
 //  m_multitext->SetBackgroundColour("wheat");
   (void)new wxStaticBox( panel, -1, "Move cursor to the end of:",
                          wxPoint(345, 0), wxSize(160, 100) );
index bdf1a999a995e9516c6cb2b40cd346b2e55a720c..c738901fb51e257a875e02e1dee396088b849abb 100644 (file)
@@ -435,7 +435,7 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
     {
         wxString text = GetValue();
 
-       // cast to prevent warning. But pos really should've been unsigned.
+        // cast to prevent warning. But pos really should've been unsigned.
         if( (unsigned long)pos > text.Len()  )
             return FALSE;
 
@@ -445,8 +445,8 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
         if (pos == 0)
             return TRUE;
 
-        const char* stop = text.c_str() + pos + 1;
-        for ( const char *p = text.c_str(); p <= stop; p++ )
+        const char* stop = text.c_str() + pos;
+        for ( const char *p = text.c_str(); p < stop; p++ )
         {
             if (*p == '\n')
             {
index bdf1a999a995e9516c6cb2b40cd346b2e55a720c..c738901fb51e257a875e02e1dee396088b849abb 100644 (file)
@@ -435,7 +435,7 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
     {
         wxString text = GetValue();
 
-       // cast to prevent warning. But pos really should've been unsigned.
+        // cast to prevent warning. But pos really should've been unsigned.
         if( (unsigned long)pos > text.Len()  )
             return FALSE;
 
@@ -445,8 +445,8 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
         if (pos == 0)
             return TRUE;
 
-        const char* stop = text.c_str() + pos + 1;
-        for ( const char *p = text.c_str(); p <= stop; p++ )
+        const char* stop = text.c_str() + pos;
+        for ( const char *p = text.c_str(); p < stop; p++ )
         {
             if (*p == '\n')
             {