{
// evaluate the item
int h = theCtrl->GetLineHeight(this);
- if ((point.y > m_y) && (point.y < m_y + h))
+ if ((point.y > m_y) && (point.y <= m_y + h))
{
int y_mid = m_y + h/2;
if (point.y < y_mid )
const wxTreeListMainWindow *theCtrl,
int &flags, int& column, int level)
{
- column = -1;
+ column = theCtrl->GetMainColumn(); //-1;
wxTreeListItem* res = HitTest(point, theCtrl, flags, level);
- if(!res) return res;
- if(flags & wxTREE_HITTEST_ONITEMINDENT) {
+ if (!res) {
+ column = -1;
+ return res;
+ }
+
+ if (point.x >= theCtrl->m_owner->GetHeaderWindow()->GetWidth())
+ column = -1;
+ else if (flags & wxTREE_HITTEST_ONITEMINDENT) {
int x = 0;
- for(size_t i = 0; i < theCtrl->GetMainColumn(); ++i) {
+ for (int i = 0; i < column; ++i) {
int w = theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
if(point.x >= x && point.x < x+w) {
flags ^= wxTREE_HITTEST_ONITEMINDENT;
column = i;
return res;
}
+ x += w;
}
}
- else if(flags & wxTREE_HITTEST_ONITEMRIGHT) {
+ else if (flags & wxTREE_HITTEST_ONITEMRIGHT) {
int x = 0;
- size_t i;
- for(i = 0; i < theCtrl->GetMainColumn()+1; ++i) {
+ int i;
+ for (i = 0; i < column+1; ++i) {
x += theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
}
- for(i = theCtrl->GetMainColumn()+1;
- i < theCtrl->GetColumnCount(); ++i) {
+ for (i = column+1; i < (int)theCtrl->GetColumnCount(); ++i) {
int w = theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
- if(point.x >= x && point.x < x+w) {
+ if (point.x >= x && point.x < x+w) {
flags ^= wxTREE_HITTEST_ONITEMRIGHT;
flags |= wxTREE_HITTEST_ONITEMCOLUMN;
column = i;
return res;
}
+ x += w;
}
}
m_owner->ProcessEvent( event );
}
-inline
-void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
-{
- m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
+// inline
+// void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
+// {
+// m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
+
+// wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+// item->DeleteChildren(this);
+// }
+
+// inline
+// void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
+// {
+// m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
+
+// wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+// // don't stay with invalid m_key_current or we will crash in
+// // the next call to OnChar()
+// bool changeKeyCurrent = FALSE;
+// wxTreeListItem *itemKey = m_key_current;
+// while ( itemKey )
+// {
+// if ( itemKey == item )
+// {
+// // m_key_current is a descendant of the item being deleted
+// changeKeyCurrent = TRUE;
+// break;
+// }
+// itemKey = itemKey->GetParent();
+// }
+
+// wxTreeListItem *parent = item->GetParent();
+// if ( parent )
+// {
+// parent->GetChildren().Remove( item ); // remove by value
+// }
+
+// if ( changeKeyCurrent )
+// {
+// // may be NULL or not
+// m_key_current = parent;
+// }
+
+// item->DeleteChildren(this);
+// SendDeleteEvent(item);
+// delete item;
+// }
+
+// inline
+// void wxTreeListMainWindow::DeleteAllItems()
+// {
+// if ( m_anchor )
+// {
+// m_dirty = TRUE;
+
+// m_anchor->DeleteChildren(this);
+// delete m_anchor;
+
+// m_anchor = NULL;
+// }
+// }
- wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
- item->DeleteChildren(this);
-}
inline
-void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
+void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
{
m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+ // mst:16.10.03
+ // moved from Delete()
// don't stay with invalid m_key_current or we will crash in
// the next call to OnChar()
- bool changeKeyCurrent = FALSE;
wxTreeListItem *itemKey = m_key_current;
while ( itemKey )
{
if ( itemKey == item )
{
- // m_key_current is a descendant of the item being deleted
- changeKeyCurrent = TRUE;
+ // m_key_current is a descendant of the item which childrens being deleted
+ m_key_current = item;
break;
}
itemKey = itemKey->GetParent();
}
+ item->DeleteChildren(this);
+}
+
+inline
+void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
+{
+ m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
+
+ wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+ // mst:16.10.03
+ item->DeleteChildren(this);
+
wxTreeListItem *parent = item->GetParent();
+
if ( parent )
- {
- parent->GetChildren().Remove( item ); // remove by value
- }
+ parent->GetChildren().Remove( item ); // remove by value
- if ( changeKeyCurrent )
- {
- // may be NULL or not
- m_key_current = parent;
- }
+ if (m_key_current == item)
+ m_key_current = parent;
- item->DeleteChildren(this);
SendDeleteEvent(item);
+
delete item;
}
{
m_dirty = TRUE;
+ m_key_current = NULL; // mst:16.10.03
+
m_anchor->DeleteChildren(this);
delete m_anchor;
}
}
+
void wxTreeListMainWindow::Expand(const wxTreeItemId& itemId)
{
wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
int w, h;
GetSize(&w, &h);
flags=0;
+ column = -1;
if (point.x<0) flags |= wxTREE_HITTEST_TOLEFT;
if (point.x>w) flags |= wxTREE_HITTEST_TORIGHT;
if (point.y<0) flags |= wxTREE_HITTEST_ABOVE;
return wxTreeItemId();
}
- wxClientDC dc(this);
- PrepareDC(dc);
- wxCoord x = dc.DeviceToLogicalX( point.x );
- wxCoord y = dc.DeviceToLogicalY( point.y );
- wxTreeListItem *hit = m_anchor->HitTest(wxPoint(x, y), this, flags,
- column, 0);
+ wxTreeListItem *hit = m_anchor->HitTest(CalcUnscrolledPosition(point),
+ this, flags, column, 0);
if (hit == NULL)
{
flags = wxTREE_HITTEST_NOWHERE;
int cw = 0;
int ch = 0;
- GetClientSize( &cw, &ch );
+ //GetClientSize( &cw, &ch );
+ GetVirtualSize(&cw, &ch);
wxRect rect;
rect.x = dc.LogicalToDeviceX( 0 );
int cw = 0;
int ch = 0;
- GetClientSize( &cw, &ch );
+ //GetClientSize( &cw, &ch );
+ GetVirtualSize(&cw, &ch);
wxRect rect;
rect.x = dc.LogicalToDeviceX( 0 );
wxTreeItemId wxTreeListCtrl::HitTest(const wxPoint& pos, int& flags,
int& column)
{
- return m_main_win->HitTest(m_main_win->ScreenToClient(ClientToScreen(pos)),
- flags, column);
+ return m_main_win->HitTest(pos, flags, column);
}
bool wxTreeListCtrl::GetBoundingRect(const wxTreeItemId& item, wxRect& rect,