wxTextCtrl* EditLabel(long item,
wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl));
+ /**
+ Finish editing the label.
+
+ This method allows to programmatically end editing a list control item
+ in place. Usually it will only be called when editing is in progress,
+ i.e. if GetEditControl() returns non-NULL.
+
+ Currently only implemented in wxMSW.
+
+ @param cancel If @true, discard the changes made by user, as if @c
+ Escape key was pressed. Otherwise, accept the changes as if @c
+ Return was pressed.
+ @return @true if item editing wad finished or @false if no item as
+ being edited.
+ */
+ bool EndEditLabel(bool cancel);
+
/**
Ensures this item is visible.
*/
void MyFrame::OnEdit(wxCommandEvent& WXUNUSED(event))
{
- long itemCur = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL,
- wxLIST_STATE_FOCUSED);
-
- if ( itemCur != -1 )
+ // demonstrate cancelling editing: this currently is wxMSW-only
+#ifdef __WXMSW__
+ if ( m_listCtrl->GetEditControl() )
{
- m_listCtrl->EditLabel(itemCur);
+ m_listCtrl->EndEditLabel(true);
}
- else
+ else // start editing
+#endif // __WXMSW__
{
- m_logWindow->WriteText(wxT("No item to edit"));
+ long itemCur = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL,
+ wxLIST_STATE_FOCUSED);
+
+ if ( itemCur != -1 )
+ {
+ m_listCtrl->EditLabel(itemCur);
+ }
+ else
+ {
+ m_logWindow->WriteText(wxT("No item to edit"));
+ }
}
}
if ( !hwnd )
return false;
- if ( cancel )
- ::SetWindowText(hwnd, wxEmptyString); // dubious but better than nothing
-
- // we shouldn't destroy the control ourselves according to MSDN, which
- // proposes WM_CANCELMODE to do this, but it doesn't seem to work
- //
- // posting WM_CLOSE to it does seem to work without any side effects
- ::PostMessage(hwnd, WM_CLOSE, 0, 0);
+ // We shouldn't destroy the control ourselves according to MSDN, which
+ // proposes WM_CANCELMODE to do this, but it doesn't seem to work so
+ // emulate the corresponding user action instead.
+ ::SendMessage(hwnd, WM_KEYDOWN, cancel ? VK_ESCAPE : VK_RETURN, 0);
return true;
}