better control of what need refresh.

if selection doesn't changed when hit, no event are triggered anymore.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3336 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Sylvain Bougnoux 1999-08-10 13:13:58 +00:00
parent 3a2490c684
commit 5391f772be

View File

@ -1090,18 +1090,25 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& itemId,
wxCHECK_RET( itemId.IsOk(), _T("invalid tree item") ); wxCHECK_RET( itemId.IsOk(), _T("invalid tree item") );
bool is_single=!(GetWindowStyleFlag() & wxTR_MULTIPLE); bool is_single=!(GetWindowStyleFlag() & wxTR_MULTIPLE);
wxGenericTreeItem *item = itemId.m_pItem;
//wxCHECK_RET( ( (!unselect_others) && is_single), //wxCHECK_RET( ( (!unselect_others) && is_single),
// _T("this is a single selection tree") ); // _T("this is a single selection tree") );
// to keep going anyhow !!! // to keep going anyhow !!!
if (is_single) if (is_single)
{ {
if (item->HasHilight()) return; // nothing to do
unselect_others=TRUE; unselect_others=TRUE;
extended_select=FALSE; extended_select=FALSE;
} }
else // check if selection will really change
wxGenericTreeItem *item = itemId.m_pItem; if (unselect_others && item->HasHilight())
{
// selection change if there is more than one item currently selected
wxArrayTreeItemIds selected_items;
if (GetSelections(selected_items)==1) return;
}
wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, GetId() ); wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, GetId() );
event.m_item = item; event.m_item = item;
@ -1174,14 +1181,13 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item)
// first expand all parent branches // first expand all parent branches
wxGenericTreeItem *parent = gitem->GetParent(); wxGenericTreeItem *parent = gitem->GetParent();
while ( parent && !parent->IsExpanded() ) while ( parent )
{ {
Expand(parent); Expand(parent);
parent = parent->GetParent(); parent = parent->GetParent();
} }
if (parent) CalculatePositions(); //if (parent) CalculatePositions();
ScrollTo(item); ScrollTo(item);
} }
@ -1429,9 +1435,9 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
item->SetCross( horizX+m_indent, y ); item->SetCross( horizX+m_indent, y );
int exposed_x = dc.LogicalToDeviceX( 0 ); int exposed_x = dc.LogicalToDeviceX( 0 );
int exposed_y = dc.LogicalToDeviceY( item->GetY()-2 ); int exposed_y = dc.LogicalToDeviceY( item->GetY() );
if (IsExposed( exposed_x, exposed_y, 10000, GetLineHeight(item)+4 )) // 10000 = very much if (IsExposed( exposed_x, exposed_y, 10000, GetLineHeight(item) )) // 10000 = very much
{ {
int startX = horizX; int startX = horizX;
int endX = horizX + (m_indent-5); int endX = horizX + (m_indent-5);
@ -2031,7 +2037,7 @@ void wxTreeCtrl::CalculatePositions()
//if(GetImageList() == NULL) //if(GetImageList() == NULL)
// m_lineHeight = (int)(dc.GetCharHeight() + 4); // m_lineHeight = (int)(dc.GetCharHeight() + 4);
int y = 2; //GetLineHeight(m_anchor) / 2 + 2; int y = 2;
CalculateLevel( m_anchor, dc, 0, y ); // start recursion CalculateLevel( m_anchor, dc, 0, y ); // start recursion
} }
@ -2060,10 +2066,14 @@ void wxTreeCtrl::RefreshLine( wxGenericTreeItem *item )
wxClientDC dc(this); wxClientDC dc(this);
PrepareDC( dc ); PrepareDC( dc );
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
wxRect rect; wxRect rect;
rect.x = dc.LogicalToDeviceX( item->GetX() - 2 ); rect.x = dc.LogicalToDeviceX( 0 );
rect.y = dc.LogicalToDeviceY( item->GetY()); rect.y = dc.LogicalToDeviceY( item->GetY() );
rect.width = 1000; rect.width = cw;
rect.height = GetLineHeight(item); //dc.GetCharHeight() + 6; rect.height = GetLineHeight(item); //dc.GetCharHeight() + 6;
Refresh( TRUE, &rect ); Refresh( TRUE, &rect );