On Thu, 2015-03-19 at 18:12 +0100, Jan-Marek Glogowski wrote:
> Am 19.03.2015 um 10:20 schrieb Caolán McNamara:
> > On Wed, 2015-03-18 at 21:04 +0200, Efe Gürkan YALAMAN wrote:
> >>
> >> Somewhere in the bugzilla I think Caolan mentioned it can be
> >> implemented as a tree-view because the options are in a tree structure
> >> and it would fit better then a simple table. Also it solves the
> >> dialog's usability issues too. I hope that will solve the
> >> accessibility problems too.
> >
> > Yeah, I think that's the best approach, to try and use a tree in there.
> > (a SvTreeList I suppose) because the amount of elements in the list is
> > just crazy, 30,000+ IIRC. Ideally on-demand loaded, e.g. tree is
> > collapsed and just shows +com.sun.star, when you expand that, then only
> > then is the subtree inserted, and so on. So the full 30,000+ list isn't
> > actually in the widget, only the expanded portion.
>
> Not sure if it would be better - performance wise. I guess most people
> actually want to search and I'm not sure if it's better to rebuild the
> tree with partial data based on the search string.
FWIW, the basctl TreeListBox is an example of what I had in mind, see
the RequestingChildren and so forth there for something similar.
The last time I had a look at the a11y performance there is an insanely
slow a11y-caused iterate-over-the-whole-view to get to the right index
loop triggered by every insert into the model. I attach the experimental
patch of
http://lists.freedesktop.org/archives/libreoffice/2014-January/059081.htmlhttp://lists.freedesktop.org/archives/libreoffice/2014-January/059081.html
that highlights that hot-spot.
> Is the tree view able to filter the content, like the Gtk+ one allows
> via GtkTreeModelFilter?
I don't think so, well not on a quick look anyway, mostly seems that
SvTreeList is the GtkTreeModel-alike model and SvTreeListBox is the
GtkTreeView-alike view.
C.
diff --git a/svtools/source/contnr/svtabbx.cxx b/svtools/source/contnr/svtabbx.cxx
index adb759c..f01ff64 100644
--- a/svtools/source/contnr/svtabbx.cxx
+++ b/svtools/source/contnr/svtabbx.cxx
@@ -436,9 +436,20 @@ OUString SvTabListBox::GetTabEntryText( sal_uLong nPos, sal_uInt16 nCol ) const
SvTreeListEntry* SvTabListBox::GetEntryOnPos( sal_uLong _nEntryPos ) const
{
+ static sal_uLong nCachedEntryPos;
+ static sal_uLong nKnownStartIndex;
+ static sal_uLong nKnownStartPos;
+
SvTreeListEntry* pEntry = NULL;
- sal_uLong i, nPos = 0, nCount = GetLevelChildCount( NULL );
- for ( i = 0; i < nCount; ++i )
+ sal_uLong i = 0, nPos = 0, nCount = GetLevelChildCount( NULL );
+
+ if (_nEntryPos >= nCachedEntryPos)
+ {
+ i = nKnownStartIndex;
+ nPos = nKnownStartPos;
+ }
+
+ while (i < nCount)
{
SvTreeListEntry* pParent = GetEntry(i);
if ( nPos == _nEntryPos )
@@ -453,8 +464,12 @@ SvTreeListEntry* SvTabListBox::GetEntryOnPos( sal_uLong _nEntryPos ) const
if ( pEntry )
break;
}
+ ++i;
}
+ nCachedEntryPos = _nEntryPos;
+ nKnownStartIndex = i;
+ nKnownStartPos = nPos;
return pEntry;
}
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice