wxTextCtrl *GetText() const { return m_text; }
- void EndEdit( bool discardChanges );
+ // Different reasons for calling EndEdit():
+ //
+ // It was called because:
+ enum EndReason
+ {
+ End_Accept, // user has accepted the changes.
+ End_Discard, // user has cancelled editing.
+ End_Destroy // the entire control is being destroyed.
+ };
+
+ void EndEdit(EndReason reason);
protected:
void OnChar( wxKeyEvent &event );
m_text->PushEventHandler(this);
}
-void wxListTextCtrlWrapper::EndEdit(bool discardChanges)
+void wxListTextCtrlWrapper::EndEdit(EndReason reason)
{
m_aboutToFinish = true;
- if ( discardChanges )
+ switch ( reason )
{
- m_owner->OnRenameCancelled(m_itemEdited);
+ case End_Accept:
+ // Notify the owner about the changes
+ AcceptChanges();
- Finish( true );
- }
- else
- {
- // Notify the owner about the changes
- AcceptChanges();
+ // Even if vetoed, close the control (consistent with MSW)
+ Finish( true );
+ break;
+
+ case End_Discard:
+ m_owner->OnRenameCancelled(m_itemEdited);
- // Even if vetoed, close the control (consistent with MSW)
- Finish( true );
+ Finish( true );
+ break;
+
+ case End_Destroy:
+ // Don't generate any notifications for the control being destroyed
+ // and don't set focus to it neither.
+ Finish(false);
+ break;
}
}
switch ( event.m_keyCode )
{
case WXK_RETURN:
- EndEdit( false );
+ EndEdit( End_Accept );
break;
case WXK_ESCAPE:
- EndEdit( true );
+ EndEdit( End_Discard );
break;
default:
wxListMainWindow::~wxListMainWindow()
{
+ if ( m_textctrlWrapper )
+ m_textctrlWrapper->EndEdit(wxListTextCtrlWrapper::End_Destroy);
+
DoDeleteAllItems();
WX_CLEAR_LIST(wxListHeaderDataList, m_columns);
WX_CLEAR_ARRAY(m_aColWidths);
// listctrl because the order of events is different (or something like
// that), so explicitly end the edit if it is active.
if ( event.LeftDown() && m_textctrlWrapper )
- m_textctrlWrapper->EndEdit( false );
+ m_textctrlWrapper->EndEdit(wxListTextCtrlWrapper::End_Accept);
#endif // __WXMAC__
if ( event.LeftDown() )
private:
CPPUNIT_TEST_SUITE( ListCtrlTestCase );
wxLIST_BASE_TESTS();
+ CPPUNIT_TEST( EditLabel );
WXUISIM_TEST( ColumnClick );
WXUISIM_TEST( ColumnDrag );
CPPUNIT_TEST_SUITE_END();
+ void EditLabel();
#if wxUSE_UIACTIONSIMULATOR
// Column events are only supported in wxListCtrl currently so we test them
// here rather than in ListBaseTest
m_list = NULL;
}
+void ListCtrlTestCase::EditLabel()
+{
+ m_list->InsertColumn(0, "Column 0");
+ m_list->InsertItem(0, "foo");
+ m_list->EditLabel(0);
+}
+
#if wxUSE_UIACTIONSIMULATOR
void ListCtrlTestCase::ColumnDrag()
{