From cd6bd27059034bbde94e8ddcd68794b54285412d Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Tue, 16 Apr 2002 20:05:47 +0000 Subject: [PATCH] Moved text control subclassing code inside MSWOnNotify. Now all edit controls for tree labels are subclassed (previously only the ones created by EditLabel were ). Now GetEditControl() always returns a pointer to a textctrl when editing is in progress. Removed #if-0 code in GetEditControl() to do the above. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/treectrl.cpp | 59 ++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index b45e904d28..84a8b01c20 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -1763,24 +1763,6 @@ void wxTreeCtrl::ScrollTo(const wxTreeItemId& item) wxTextCtrl* wxTreeCtrl::GetEditControl() const { - // normally, we could try to do something like this to return something - // even when the editing was started by the user and not by calling - // EditLabel() - but as nobody has asked for this so far and there might be - // problems in the code below, I leave it disabled for now (VZ) -#if 0 - if ( !m_textCtrl ) - { - HWND hwndText = TreeView_GetEditControl(GetHwnd()); - if ( hwndText ) - { - m_textCtrl = new wxTextCtrl(this, -1); - m_textCtrl->Hide(); - m_textCtrl->SetHWND((WXHWND)hwndText); - } - //else: not editing label right now - } -#endif // 0 - return m_textCtrl; } @@ -1810,26 +1792,19 @@ wxTextCtrl* wxTreeCtrl::EditLabel(const wxTreeItemId& item, DeleteTextCtrl(); + m_textCtrl = (wxTextCtrl *)textControlClass->CreateObject(); HWND hWnd = (HWND) TreeView_EditLabel(GetHwnd(), HITEM(item)); // this is not an error - the TVN_BEGINLABELEDIT handler might have // returned FALSE if ( !hWnd ) { + delete m_textCtrl; + m_textCtrl = NULL; return NULL; } - m_textCtrl = (wxTextCtrl *)textControlClass->CreateObject(); - m_textCtrl->SetParent(this); - m_textCtrl->SetHWND((WXHWND)hWnd); - m_textCtrl->SubclassWin((WXHWND)hWnd); - - // set wxTE_PROCESS_ENTER style for the text control to force it to process - // the Enter presses itself, otherwise they could be stolen from it by the - // dialog navigation code - m_textCtrl-> - SetWindowStyle(m_textCtrl->GetWindowStyle() | wxTE_PROCESS_ENTER); - + // textctrl is subclassed in MSWOnNotify return m_textCtrl; } @@ -2531,6 +2506,32 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) case TVN_BEGINLABELEDIT: // return TRUE to cancel label editing *result = !event.IsAllowed(); + // set ES_WANTRETURN ( like we do in BeginLabelEdit ) + if(event.IsAllowed()) + { + HWND hText = TreeView_GetEditControl(GetHwnd()); + if(hText != NULL) + { + // MBN: if m_textCtrl already has an HWND, it is a stale + // pointer from a previous edit (because the user + // didn't modify the label before dismissing the control, + // and TVN_ENDLABELEDIT was not sent), so delete it + if(m_textCtrl && m_textCtrl->GetHWND() != 0) + DeleteTextCtrl(); + if(!m_textCtrl) + m_textCtrl = new wxTextCtrl(); + m_textCtrl->SetParent(this); + m_textCtrl->SetHWND((WXHWND)hText); + m_textCtrl->SubclassWin((WXHWND)hText); + + // set wxTE_PROCESS_ENTER style for the text control to + // force it to process the Enter presses itself, otherwise + // they could be stolen from it by the dialog + // navigation code + m_textCtrl->SetWindowStyle(m_textCtrl->GetWindowStyle() + | wxTE_PROCESS_ENTER); + } + } break; case TVN_ENDLABELEDIT: -- 2.47.2