Solved a bug in generic wxTreeCtrl whereby CalculatePositions was not completing
due to a missing '!', so scrollbars were not set properly. Tidied up wxMotif scrollbar setting. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1241 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -6,6 +6,7 @@ config.guess
|
|||||||
config.sub
|
config.sub
|
||||||
wx-config.in
|
wx-config.in
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
|
wxinstall
|
||||||
|
|
||||||
src/makeenvs/*.env
|
src/makeenvs/*.env
|
||||||
|
|
||||||
|
@@ -89,3 +89,4 @@ More recently:
|
|||||||
- Fixed a bug in wxStaticBox.
|
- Fixed a bug in wxStaticBox.
|
||||||
- Controls sample runs, though wxRadioBox doesn't appear and
|
- Controls sample runs, though wxRadioBox doesn't appear and
|
||||||
the notebook flickers for a while.
|
the notebook flickers for a while.
|
||||||
|
- Cured wxTreeCtrl bug: now works pretty well!
|
@@ -779,6 +779,7 @@ void wxTreeCtrl::Expand(const wxTreeItemId& itemId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
item->Expand();
|
item->Expand();
|
||||||
|
CalculatePositions();
|
||||||
|
|
||||||
RefreshSubtree(item);
|
RefreshSubtree(item);
|
||||||
|
|
||||||
@@ -890,7 +891,7 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item)
|
|||||||
m_anchor->GetSize( x, y );
|
m_anchor->GetSize( x, y );
|
||||||
y += 2*m_lineHeight;
|
y += 2*m_lineHeight;
|
||||||
int x_pos = GetScrollPos( wxHORIZONTAL );
|
int x_pos = GetScrollPos( wxHORIZONTAL );
|
||||||
SetScrollbars( 10, 10, x/10, y/10, x_pos, item_y/10 );
|
SetScrollbars( 10, 10, x/10, y/10, x_pos, item_y/10 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1381,8 +1382,10 @@ void wxTreeCtrl::CalculateLevel( wxGenericTreeItem *item,
|
|||||||
item->SetY( y-m_lineHeight/3-2 );
|
item->SetY( y-m_lineHeight/3-2 );
|
||||||
item->SetHeight( m_lineHeight );
|
item->SetHeight( m_lineHeight );
|
||||||
|
|
||||||
if ( item->IsExpanded() )
|
// if ( item->IsExpanded() )
|
||||||
return;
|
// return;
|
||||||
|
if ( !item->IsExpanded() ) // Surely this is correct? JACS
|
||||||
|
return;
|
||||||
|
|
||||||
wxArrayTreeItems& children = item->GetChildren();
|
wxArrayTreeItems& children = item->GetChildren();
|
||||||
size_t count = children.Count();
|
size_t count = children.Count();
|
||||||
|
@@ -370,6 +370,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
|
|||||||
xmScrolledWindowWidgetClass, m_borderWidget ? (Widget) m_borderWidget : parentWidget,
|
xmScrolledWindowWidgetClass, m_borderWidget ? (Widget) m_borderWidget : parentWidget,
|
||||||
XmNspacing, 0,
|
XmNspacing, 0,
|
||||||
XmNscrollingPolicy, XmAPPLICATION_DEFINED,
|
XmNscrollingPolicy, XmAPPLICATION_DEFINED,
|
||||||
|
// XmNscrollBarDisplayPolicy, XmAS_NEEDED,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
XtTranslations ptr;
|
XtTranslations ptr;
|
||||||
@@ -1174,6 +1175,9 @@ void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible,
|
|||||||
if (thumbVisible == 0)
|
if (thumbVisible == 0)
|
||||||
thumbVisible = 1;
|
thumbVisible = 1;
|
||||||
|
|
||||||
|
if (thumbVisible > range)
|
||||||
|
thumbVisible = range;
|
||||||
|
|
||||||
XtVaSetValues(scrollBar,
|
XtVaSetValues(scrollBar,
|
||||||
XmNvalue, pos,
|
XmNvalue, pos,
|
||||||
XmNminimum, 0,
|
XmNminimum, 0,
|
||||||
@@ -1185,6 +1189,66 @@ void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible,
|
|||||||
m_scrollPosX = pos;
|
m_scrollPosX = pos;
|
||||||
else
|
else
|
||||||
m_scrollPosY = pos;
|
m_scrollPosY = pos;
|
||||||
|
|
||||||
|
// See notes below. If the scrollbars didn't leave a ghost presence,
|
||||||
|
// this would be OK.
|
||||||
|
#if 0
|
||||||
|
if (range == thumbVisible)
|
||||||
|
{
|
||||||
|
XtUnmanageChild(scrollBar);
|
||||||
|
if (orient == wxHORIZONTAL)
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNhorizontalScrollBar, (Widget) 0,
|
||||||
|
NULL);
|
||||||
|
else
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNverticalScrollBar, (Widget) 0,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XtManageChild(scrollBar);
|
||||||
|
if (orient == wxHORIZONTAL)
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNhorizontalScrollBar, (Widget) m_hScrollBar,
|
||||||
|
NULL);
|
||||||
|
else
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNverticalScrollBar, (Widget) m_vScrollBar,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Either both scrollbars are on, or they are off,
|
||||||
|
// otherwise you get a gap where one scrollbar
|
||||||
|
// isn't shown. TODO: try to eliminate this problem.
|
||||||
|
if ((GetScrollThumb(wxHORIZONTAL) >= GetScrollRange(wxHORIZONTAL)) &&
|
||||||
|
(GetScrollThumb(wxVERTICAL) >= GetScrollRange(wxVERTICAL)))
|
||||||
|
{
|
||||||
|
if (m_hScrollBar)
|
||||||
|
XtUnmanageChild((Widget) m_hScrollBar);
|
||||||
|
if (m_vScrollBar)
|
||||||
|
XtUnmanageChild((Widget) m_vScrollBar);
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNhorizontalScrollBar, (Widget) 0,
|
||||||
|
XmNverticalScrollBar, (Widget) 0,
|
||||||
|
NULL);
|
||||||
|
// XmScrolledWindowSetAreas((Widget) m_scrolledWindow,
|
||||||
|
// (Widget) 0, (Widget) 0, (Widget) m_drawingArea);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_hScrollBar)
|
||||||
|
XtManageChild((Widget) m_hScrollBar);
|
||||||
|
if (m_vScrollBar)
|
||||||
|
XtManageChild((Widget) m_vScrollBar);
|
||||||
|
XtVaSetValues((Widget) m_scrolledWindow,
|
||||||
|
XmNhorizontalScrollBar, (Widget) m_hScrollBar,
|
||||||
|
XmNverticalScrollBar, (Widget) m_vScrollBar,
|
||||||
|
NULL);
|
||||||
|
// XmScrolledWindowSetAreas((Widget) m_scrolledWindow,
|
||||||
|
// (Widget) m_hScrollBar, (Widget) m_vScrollBar, (Widget) m_drawingArea);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does a physical scroll
|
// Does a physical scroll
|
||||||
|
Reference in New Issue
Block a user