From: Julian Smart Date: Fri, 18 Dec 1998 18:22:43 +0000 (+0000) Subject: Solved a bug in generic wxTreeCtrl whereby CalculatePositions was not completing X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/28ab302b70032ddc9344f43d2148231a0add8239 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 --- diff --git a/distrib/msw/motif.rsp b/distrib/msw/motif.rsp index 13158238af..356a7bfab7 100644 --- a/distrib/msw/motif.rsp +++ b/distrib/msw/motif.rsp @@ -6,6 +6,7 @@ config.guess config.sub wx-config.in mkinstalldirs +wxinstall src/makeenvs/*.env diff --git a/docs/motif/changes.txt b/docs/motif/changes.txt index 000fb7f9c0..0ea2595216 100644 --- a/docs/motif/changes.txt +++ b/docs/motif/changes.txt @@ -89,3 +89,4 @@ More recently: - Fixed a bug in wxStaticBox. - Controls sample runs, though wxRadioBox doesn't appear and the notebook flickers for a while. +- Cured wxTreeCtrl bug: now works pretty well! \ No newline at end of file diff --git a/src/generic/treectrl.cpp b/src/generic/treectrl.cpp index 1f986f385b..775eadb61c 100644 --- a/src/generic/treectrl.cpp +++ b/src/generic/treectrl.cpp @@ -779,6 +779,7 @@ void wxTreeCtrl::Expand(const wxTreeItemId& itemId) } item->Expand(); + CalculatePositions(); RefreshSubtree(item); @@ -890,7 +891,7 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) m_anchor->GetSize( x, y ); y += 2*m_lineHeight; 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; } @@ -1381,8 +1382,10 @@ void wxTreeCtrl::CalculateLevel( wxGenericTreeItem *item, item->SetY( y-m_lineHeight/3-2 ); item->SetHeight( m_lineHeight ); - if ( item->IsExpanded() ) - return; + // if ( item->IsExpanded() ) + // return; + if ( !item->IsExpanded() ) // Surely this is correct? JACS + return; wxArrayTreeItems& children = item->GetChildren(); size_t count = children.Count(); diff --git a/src/motif/window.cpp b/src/motif/window.cpp index 3d78814a44..545f469e13 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -370,6 +370,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id, xmScrolledWindowWidgetClass, m_borderWidget ? (Widget) m_borderWidget : parentWidget, XmNspacing, 0, XmNscrollingPolicy, XmAPPLICATION_DEFINED, + // XmNscrollBarDisplayPolicy, XmAS_NEEDED, NULL); XtTranslations ptr; @@ -1174,6 +1175,9 @@ void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible, if (thumbVisible == 0) thumbVisible = 1; + if (thumbVisible > range) + thumbVisible = range; + XtVaSetValues(scrollBar, XmNvalue, pos, XmNminimum, 0, @@ -1185,6 +1189,66 @@ void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible, m_scrollPosX = pos; else 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