Fix wxListCtrl::EndEditLabel() which simply didn't work.
Also document it (even though it's wxMSW-only for now) and add a test for it in the sample. Closes #7663. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64368 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -247,6 +247,23 @@ public:
|
|||||||
wxTextCtrl* EditLabel(long item,
|
wxTextCtrl* EditLabel(long item,
|
||||||
wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl));
|
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.
|
Ensures this item is visible.
|
||||||
*/
|
*/
|
||||||
|
@@ -840,16 +840,26 @@ void MyFrame::OnAdd(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
void MyFrame::OnEdit(wxCommandEvent& WXUNUSED(event))
|
void MyFrame::OnEdit(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
long itemCur = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL,
|
// demonstrate cancelling editing: this currently is wxMSW-only
|
||||||
wxLIST_STATE_FOCUSED);
|
#ifdef __WXMSW__
|
||||||
|
if ( m_listCtrl->GetEditControl() )
|
||||||
if ( itemCur != -1 )
|
|
||||||
{
|
{
|
||||||
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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1561,14 +1561,10 @@ bool wxListCtrl::EndEditLabel(bool cancel)
|
|||||||
if ( !hwnd )
|
if ( !hwnd )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( cancel )
|
// We shouldn't destroy the control ourselves according to MSDN, which
|
||||||
::SetWindowText(hwnd, wxEmptyString); // dubious but better than nothing
|
// proposes WM_CANCELMODE to do this, but it doesn't seem to work so
|
||||||
|
// emulate the corresponding user action instead.
|
||||||
// we shouldn't destroy the control ourselves according to MSDN, which
|
::SendMessage(hwnd, WM_KEYDOWN, cancel ? VK_ESCAPE : VK_RETURN, 0);
|
||||||
// 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);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user