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)
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,
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,
}
else
{
- wxLogDebug( _T("Invalid wxGridCellTextEditor parameter string '%s' ignored"), params.c_str() );
+ wxLogDebug( wxT("Invalid wxGridCellTextEditor parameter string '%s' ignored"), params.c_str() );
}
}
}
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;
}
}
}
}
-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;
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;
}
}
- wxLogDebug(_T("Invalid wxGridCellNumberEditor parameter string '%s' ignored"), params.c_str());
+ wxLogDebug(wxT("Invalid wxGridCellNumberEditor parameter string '%s' ignored"), params.c_str());
}
}
{
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;
}
}
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());
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 == '-'
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;
}
}
- wxLogDebug(_T("Invalid wxGridCellFloatEditor parameter string '%s' ignored"), params.c_str());
+ wxLogDebug(wxT("Invalid wxGridCellFloatEditor parameter string '%s' ignored"), params.c_str());
}
}
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);
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 '.'
// ----------------------------------------------------------------------------
// 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,
// 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!") );
}
}
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();
}
}
-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();
m_choices.Empty();
- wxStringTokenizer tk(params, _T(','));
+ wxStringTokenizer tk(params, wxT(','));
while ( tk.HasMoreTokens() )
{
m_choices.Add(tk.GetNextToken());
}
-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();