class WXDLLEXPORT wxGenericTreeItem;
-WX_DEFINE_ARRAY(wxGenericTreeItem *, wxArrayGenericTreeItems);
+WX_DEFINE_EXPORTED_ARRAY(wxGenericTreeItem *, wxArrayGenericTreeItems);
//WX_DEFINE_OBJARRAY(wxArrayTreeItemIds);
// ----------------------------------------------------------------------------
const wxString &name = wxTextCtrlNameStr );
void OnChar( wxKeyEvent &event );
+ void OnKeyUp( wxKeyEvent &event );
void OnKillFocus( wxFocusEvent &event );
private:
// status inquiries
bool HasChildren() const { return !m_children.IsEmpty(); }
- bool IsSelected() const { return m_hasHilight; }
+ bool IsSelected() const { return m_hasHilight != 0; }
bool IsExpanded() const { return !m_isCollapsed; }
bool HasPlus() const { return m_hasPlus || HasChildren(); }
- bool IsBold() const { return m_isBold; }
+ bool IsBold() const { return m_isBold != 0; }
// attributes
// get them - may be NULL
BEGIN_EVENT_TABLE(wxTreeTextCtrl,wxTextCtrl)
EVT_CHAR (wxTreeTextCtrl::OnChar)
+ EVT_KEY_UP (wxTreeTextCtrl::OnKeyUp)
EVT_KILL_FOCUS (wxTreeTextCtrl::OnKillFocus)
END_EVENT_TABLE()
event.Skip();
}
+void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event )
+{
+ // auto-grow the textctrl:
+ wxSize parentSize = m_owner->GetSize();
+ wxPoint myPos = GetPosition();
+ wxSize mySize = GetSize();
+ int sx, sy;
+ GetTextExtent(GetValue() + _T("MM"), &sx, &sy);
+ if (myPos.x + sx > parentSize.x) sx = parentSize.x - myPos.x;
+ if (mySize.x > sx) sx = mySize.x;
+ SetSize(sx, -1);
+
+ event.Skip();
+}
+
void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
{
if (!wxPendingDelete.Member(this))
m_imageListNormal =
m_imageListState = (wxImageList *) NULL;
+ m_ownsImageListNormal =
+ m_ownsImageListState = FALSE;
m_dragCount = 0;
m_isDragging = FALSE;
DeleteAllItems();
delete m_renameTimer;
+ if (m_ownsImageListNormal) delete m_imageListNormal;
+ if (m_ownsImageListState) delete m_imageListState;
}
// -----------------------------------------------------------------------------
// We have to call this here because the label in
// question might just have been added and no screen
// update taken place.
- if (m_dirty) wxYield();
+ if (m_dirty) wxYieldIfNeeded();
wxGenericTreeItem *gitem = (wxGenericTreeItem*) item.m_pItem;
void wxGenericTreeCtrl::SetImageList(wxImageList *imageList)
{
+ if (m_ownsImageListNormal) delete m_imageListNormal;
+
m_imageListNormal = imageList;
+ m_ownsImageListNormal = FALSE;
if ( !m_imageListNormal )
return;
void wxGenericTreeCtrl::SetStateImageList(wxImageList *imageList)
{
+ if (m_ownsImageListState) delete m_imageListState;
m_imageListState = imageList;
+ m_ownsImageListState = FALSE;
+}
+
+void wxGenericTreeCtrl::AssignImageList(wxImageList *imageList)
+{
+ SetImageList(imageList);
+ m_ownsImageListNormal = TRUE;
+}
+
+void wxGenericTreeCtrl::AssignStateImageList(wxImageList *imageList)
+{
+ SetStateImageList(imageList);
+ m_ownsImageListState = TRUE;
}
// -----------------------------------------------------------------------------
// We have to call this here because the label in
// question might just have been added and no screen
// update taken place.
- if (m_dirty) wxYield();
+ if (m_dirty) wxYieldIfNeeded();
wxClientDC dc(this);
PrepareDC(dc);
if (point.y<0) flags|=wxTREE_HITTEST_ABOVE;
if (point.y>h) flags|=wxTREE_HITTEST_BELOW;
- return m_anchor->HitTest( wxPoint(x, y), this, flags);
+ if (m_anchor)
+ return m_anchor->HitTest( wxPoint(x, y), this, flags);
+ else
+ return wxTreeItemId();
}
// get the bounding rectangle of the item (or of its label only)
// We have to call this here because the label in
// question might just have been added and no screen
// update taken place.
- if (m_dirty) wxYield();
+ if (m_dirty) wxYieldIfNeeded();
wxString s = m_currentEdit->GetText();
int x = m_currentEdit->GetX();
// highlight the current drop target if any
DrawDropEffect(m_dropTarget);
- wxYield();
+ wxYieldIfNeeded();
}
}
else if ( (event.LeftUp() || event.RightUp()) && m_isDragging )
SetCursor(m_oldCursor);
- wxYield();
+ wxYieldIfNeeded();
}
else
{
wxTreeEvent nevent(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, GetId());
nevent.m_item = (long) item;
nevent.m_code = 0;
+ CalcScrolledPosition(x, y,
+ &nevent.m_pointDrag.x,
+ &nevent.m_pointDrag.y);
nevent.SetEventObject(this);
GetEventHandler()->ProcessEvent(nevent);
}
(flags & wxTREE_HITTEST_ONITEMLABEL) &&
HasFlag(wxTR_EDIT_LABELS) )
{
+ if ( m_renameTimer->IsRunning() )
+ m_renameTimer->Stop();
+
m_renameTimer->Start( 100, TRUE );
}
wxTreeEvent nevent( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, GetId() );
nevent.m_item = (long) item;
nevent.m_code = 0;
+ CalcScrolledPosition(x, y,
+ &nevent.m_pointDrag.x,
+ &nevent.m_pointDrag.y);
nevent.SetEventObject( this );
GetEventHandler()->ProcessEvent( nevent );
}