]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/grideditors.cpp
Add wxRichMessageDialog class.
[wxWidgets.git] / src / generic / grideditors.cpp
index 997626c10e5863c90f7299edaac8b11b9d901278..a3cf424363a65df3ff89d969d4ce96f89d918008 100644 (file)
 void wxGridCellEditorEvtHandler::OnKillFocus(wxFocusEvent& event)
 {
     // Don't disable the cell if we're just starting to edit it
-    if (m_inSetFocus)
+    if ( m_inSetFocus )
+    {
+        event.Skip();
         return;
+    }
 
     // accept changes
     m_grid->DisableCellEditControl();
 
-    event.Skip();
+    // notice that we must not skip the event here because the call above may
+    // delete the control which received the kill focus event in the first
+    // place and if we pretend not having processed the event, the search for a
+    // handler for it will continue using the now deleted object resulting in a
+    // crash
 }
 
 void wxGridCellEditorEvtHandler::OnKeyDown(wxKeyEvent& event)
@@ -392,7 +399,10 @@ void wxGridCellTextEditor::DoCreate(wxWindow* parent,
                                     wxEvtHandler* evtHandler,
                                     long style)
 {
-    style |= wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxNO_BORDER;
+    // Use of wxTE_RICH2 is a strange hack to work around the bug #11681: a
+    // plain text control seems to lose its caret somehow when we hide it and
+    // show it again for a different cell.
+    style |= wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxNO_BORDER | wxTE_RICH2;
 
     m_control = new wxTextCtrl(parent, id, wxEmptyString,
                                wxDefaultPosition, wxDefaultSize,
@@ -478,7 +488,10 @@ void wxGridCellTextEditor::DoBeginEdit(const wxString& startValue)
     Text()->SetFocus();
 }
 
-bool wxGridCellTextEditor::EndEdit(const wxString& WXUNUSED(oldval),
+bool wxGridCellTextEditor::EndEdit(int WXUNUSED(row),
+                                   int WXUNUSED(col),
+                                   const wxGrid* WXUNUSED(grid),
+                                   const wxString& WXUNUSED(oldval),
                                    wxString *newval)
 {
     wxCHECK_MSG( m_control, false,
@@ -594,7 +607,7 @@ void wxGridCellTextEditor::SetParameters(const wxString& params)
         }
         else
         {
-            wxLogDebug( _T("Invalid wxGridCellTextEditor parameter string '%s' ignored"), params.c_str() );
+            wxLogDebug( wxT("Invalid wxGridCellTextEditor parameter string '%s' ignored"), params.c_str() );
         }
     }
 }
@@ -656,7 +669,7 @@ void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid)
         wxString sValue = table->GetValue(row, col);
         if (! sValue.ToLong(&m_value) && ! sValue.empty())
         {
-            wxFAIL_MSG( _T("this cell doesn't have numeric value") );
+            wxFAIL_MSG( wxT("this cell doesn't have numeric value") );
             return;
         }
     }
@@ -674,7 +687,10 @@ void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid)
     }
 }
 
-bool wxGridCellNumberEditor::EndEdit(const wxString& oldval, wxString *newval)
+bool wxGridCellNumberEditor::EndEdit(int WXUNUSED(row),
+                                     int WXUNUSED(col),
+                                     const wxGrid* WXUNUSED(grid),
+                                     const wxString& oldval, wxString *newval)
 {
     long value = 0;
     wxString text;
@@ -795,11 +811,11 @@ void wxGridCellNumberEditor::SetParameters(const wxString& params)
     else
     {
         long tmp;
-        if ( params.BeforeFirst(_T(',')).ToLong(&tmp) )
+        if ( params.BeforeFirst(wxT(',')).ToLong(&tmp) )
         {
             m_min = (int)tmp;
 
-            if ( params.AfterFirst(_T(',')).ToLong(&tmp) )
+            if ( params.AfterFirst(wxT(',')).ToLong(&tmp) )
             {
                 m_max = (int)tmp;
 
@@ -808,7 +824,7 @@ void wxGridCellNumberEditor::SetParameters(const wxString& params)
             }
         }
 
-        wxLogDebug(_T("Invalid wxGridCellNumberEditor parameter string '%s' ignored"), params.c_str());
+        wxLogDebug(wxT("Invalid wxGridCellNumberEditor parameter string '%s' ignored"), params.c_str());
     }
 }
 
@@ -870,7 +886,7 @@ void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
         {
             if ( !value.ToDouble(&m_value) )
             {
-                wxFAIL_MSG( _T("this cell doesn't have float value") );
+                wxFAIL_MSG( wxT("this cell doesn't have float value") );
                 return;
             }
         }
@@ -879,7 +895,10 @@ void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
     DoBeginEdit(GetString());
 }
 
-bool wxGridCellFloatEditor::EndEdit(const wxString& oldval, wxString *newval)
+bool wxGridCellFloatEditor::EndEdit(int WXUNUSED(row),
+                                    int WXUNUSED(col),
+                                    const wxGrid* WXUNUSED(grid),
+                                    const wxString& oldval, wxString *newval)
 {
     const wxString text(Text()->GetValue());
 
@@ -937,7 +956,7 @@ void wxGridCellFloatEditor::StartingKey(wxKeyEvent& event)
     bool is_decimal_point = ( strbuf ==
        wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) );
 #else
-    bool is_decimal_point = ( strbuf == _T(".") );
+    bool is_decimal_point = ( strbuf == wxT(".") );
 #endif
 
     if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-'
@@ -963,11 +982,11 @@ void wxGridCellFloatEditor::SetParameters(const wxString& params)
     else
     {
         long tmp;
-        if ( params.BeforeFirst(_T(',')).ToLong(&tmp) )
+        if ( params.BeforeFirst(wxT(',')).ToLong(&tmp) )
         {
             m_width = (int)tmp;
 
-            if ( params.AfterFirst(_T(',')).ToLong(&tmp) )
+            if ( params.AfterFirst(wxT(',')).ToLong(&tmp) )
             {
                 m_precision = (int)tmp;
 
@@ -976,7 +995,7 @@ void wxGridCellFloatEditor::SetParameters(const wxString& params)
             }
         }
 
-        wxLogDebug(_T("Invalid wxGridCellFloatEditor parameter string '%s' ignored"), params.c_str());
+        wxLogDebug(wxT("Invalid wxGridCellFloatEditor parameter string '%s' ignored"), params.c_str());
     }
 }
 
@@ -986,21 +1005,21 @@ wxString wxGridCellFloatEditor::GetString() const
     if ( m_precision == -1 && m_width != -1)
     {
         // default precision
-        fmt.Printf(_T("%%%d.f"), m_width);
+        fmt.Printf(wxT("%%%d.f"), m_width);
     }
     else if ( m_precision != -1 && m_width == -1)
     {
         // default width
-        fmt.Printf(_T("%%.%df"), m_precision);
+        fmt.Printf(wxT("%%.%df"), m_precision);
     }
     else if ( m_precision != -1 && m_width != -1 )
     {
-        fmt.Printf(_T("%%%d.%df"), m_width, m_precision);
+        fmt.Printf(wxT("%%%d.%df"), m_width, m_precision);
     }
     else
     {
         // default width/precision
-        fmt = _T("%f");
+        fmt = wxT("%f");
     }
 
     return wxString::Format(fmt, m_value);
@@ -1011,18 +1030,13 @@ bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event)
     if ( wxGridCellEditor::IsAcceptedKey(event) )
     {
         const int keycode = event.GetKeyCode();
-        if ( isascii(keycode) )
+        if ( wxIsascii(keycode) )
         {
-            char tmpbuf[2];
-            tmpbuf[0] = (char) keycode;
-            tmpbuf[1] = '\0';
-            wxString strbuf(tmpbuf, *wxConvCurrent);
-
 #if wxUSE_INTL
             const wxString decimalPoint =
                 wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER);
 #else
-            const wxString decimalPoint(_T('.'));
+            const wxString decimalPoint(wxT('.'));
 #endif
 
             // accept digits, 'e' as in '1e+6', also '-', '+', and '.'
@@ -1049,7 +1063,7 @@ bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event)
 // ----------------------------------------------------------------------------
 
 // the default values for GetValue()
-wxString wxGridCellBoolEditor::ms_stringValues[2] = { _T(""), _T("1") };
+wxString wxGridCellBoolEditor::ms_stringValues[2] = { wxT(""), wxT("1") };
 
 void wxGridCellBoolEditor::Create(wxWindow* parent,
                                   wxWindowID id,
@@ -1167,7 +1181,7 @@ void wxGridCellBoolEditor::BeginEdit(int row, int col, wxGrid* grid)
             // because we'll still overwrite it with something different and
             // this risks to be very surprising for the user code, let them
             // know about it
-            wxFAIL_MSG( _T("invalid value for a cell with bool editor!") );
+            wxFAIL_MSG( wxT("invalid value for a cell with bool editor!") );
         }
     }
 
@@ -1175,7 +1189,10 @@ void wxGridCellBoolEditor::BeginEdit(int row, int col, wxGrid* grid)
     CBox()->SetFocus();
 }
 
-bool wxGridCellBoolEditor::EndEdit(const wxString& WXUNUSED(oldval),
+bool wxGridCellBoolEditor::EndEdit(int WXUNUSED(row),
+                                   int WXUNUSED(col),
+                                   const wxGrid* WXUNUSED(grid),
+                                   const wxString& WXUNUSED(oldval),
                                    wxString *newval)
 {
     bool value = CBox()->GetValue();
@@ -1363,7 +1380,10 @@ void wxGridCellChoiceEditor::BeginEdit(int row, int col, wxGrid* grid)
     }
 }
 
-bool wxGridCellChoiceEditor::EndEdit(const wxString& WXUNUSED(oldval),
+bool wxGridCellChoiceEditor::EndEdit(int WXUNUSED(row),
+                                     int WXUNUSED(col),
+                                     const wxGrid* WXUNUSED(grid),
+                                     const wxString& WXUNUSED(oldval),
                                      wxString *newval)
 {
     const wxString value = Combo()->GetValue();
@@ -1410,7 +1430,7 @@ void wxGridCellChoiceEditor::SetParameters(const wxString& params)
 
     m_choices.Empty();
 
-    wxStringTokenizer tk(params, _T(','));
+    wxStringTokenizer tk(params, wxT(','));
     while ( tk.HasMoreTokens() )
     {
         m_choices.Add(tk.GetNextToken());
@@ -1481,7 +1501,10 @@ void wxGridCellEnumEditor::BeginEdit(int row, int col, wxGrid* grid)
 
 }
 
-bool wxGridCellEnumEditor::EndEdit(const wxString& WXUNUSED(oldval),
+bool wxGridCellEnumEditor::EndEdit(int WXUNUSED(row),
+                                   int WXUNUSED(col),
+                                   const wxGrid* WXUNUSED(grid),
+                                   const wxString& WXUNUSED(oldval),
                                    wxString *newval)
 {
     long idx = Combo()->GetSelection();