public:
wxTreeTextCtrl(wxGenericTreeCtrl *owner, wxGenericTreeItem *item);
+ // wxGenericTreeCtrl can use this one to abandon editing the given item,
+ // it's not an error to call it if this item is not being edited
+ void StopEditing(wxGenericTreeItem *item)
+ {
+ if ( item == m_itemEdited )
+ DoStopEditing();
+ }
+
protected:
void OnChar( wxKeyEvent &event );
void OnKeyUp( wxKeyEvent &event );
void OnKillFocus( wxFocusEvent &event );
+ void DoStopEditing()
+ {
+ Finish();
+ m_owner->OnRenameCancelled(m_itemEdited);
+ }
+
bool AcceptChanges();
void Finish();
Finish();
}
// else do nothing, do not accept and do not close
-
break;
case WXK_ESCAPE:
- Finish();
- m_owner->OnRenameCancelled(m_itemEdited);
+ DoStopEditing();
break;
default:
sx = parentSize.x - myPos.x;
if (mySize.x > sx)
sx = mySize.x;
- SetSize(sx, wxDefaultSize.y);
+ SetSize(sx, wxDefaultCoord);
}
event.Skip();
void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &event )
{
- if ( m_finished )
- {
- event.Skip();
- return;
- }
-
- if ( AcceptChanges() )
+ if ( !m_finished )
{
+ AcceptChanges();
+ // We must finish regardless of success, otherwise we'll get
+ // focus problems:
Finish();
}
+
+ // We must let the native text control handle focus, too, otherwise
+ // it could have problems with the cursor (e.g., in wxGTK):
+ event.Skip();
}
// -----------------------------------------------------------------------------
#endif
wxVisualAttributes attr = GetDefaultAttributes();
- SetDefaultForegroundColour( attr.colFg );
- SetDefaultBackgroundColour( attr.colBg );
- SetDefaultFont(attr.font);
+ SetOwnForegroundColour( attr.colFg );
+ SetOwnBackgroundColour( attr.colBg );
+ if (!m_hasFont)
+ SetOwnFont(attr.font);
// m_dottedPen = wxPen( "grey", 0, wxDOT ); too slow under XFree86
m_dottedPen = wxPen( wxT("grey"), 0, 0 );
// called by wxTextTreeCtrl when it marks itself for deletion
void wxGenericTreeCtrl::ResetTextControl()
{
- m_textCtrl = NULL;
+ m_textCtrl = NULL;
}
// find the first item starting with the given prefix after the given item
wxGenericTreeItem *item = (wxGenericTreeItem*) itemId.m_pItem;
+ if ( m_textCtrl )
+ {
+ // can't delete the item being edited, cancel editing it first
+ m_textCtrl->StopEditing(item);
+ }
+
wxGenericTreeItem *parent = item->GetParent();
// don't keep stale pointers around!
(keyCode >= 'A' && keyCode <= 'Z' )))
{
// find the next item starting with the given prefix
- char ch = (char)keyCode;
+ wxChar ch = (wxChar)keyCode;
- wxTreeItemId id = FindItem(m_current, m_findPrefix + (wxChar)ch);
+ wxTreeItemId id = FindItem(m_current, m_findPrefix + ch);
if ( !id.IsOk() )
{
// no such item
GetEventHandler()->ProcessEvent( le );
}
-
-
-
void wxGenericTreeCtrl::OnRenameTimer()
{
Edit( m_current );