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
This commit is contained in:
Mattia Barbon
2002-04-16 20:05:47 +00:00
parent 787a85c239
commit cd6bd27059

View File

@@ -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: