[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
|
[news.eclipse.platform] Re: using a hyperlink with a Table/TableViewer/TreeViewer - options and performance
|
Francis Upton schrieb:
> I'm writing a search facility for my product. When searching, it's
> possible for hundreds of results to be returned. Each result is shown
> as a table row with up to 3 links in it (to various levels of the
> hierarchy representing the result). The table is shown through a dialog
> of a few rows.
>
> Previously this all worked fine (except without the hyperlinks) by
> having a TableViewer. The scrolling and resizing was fast, even if
> there were thousands of results.
>
> Now I'm trying to add the links. I see the following options:
>
> 1) Using a plain Table with a TableEditor (which refers to a Link
> control). This worked reasonably well, except for performance. It's
> unusable with more than a small number of rows. There is also this bug:
>
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=166720
>
> So this option won't work (unless I'm doing it wrong or there is another
> way to do it).
>
Well if you really have so many results that's a problem because your
Table has to handle very many Widgets whereas is in TableViewer there
aren't hardly any!
> 2) TableViewer - I don't think it's possible to have an arbitrary
> control for rendering a table cell in use with a TableViewer unless I
> subclass it. Creating a CellEditor does no good, as this replaces the
> control only when the cell is edited.
>
> My next step is to consider subclassing TableViewer and having it use a
> TableEditor referring to a Link, however, I'm concerned I will run into
> the same issues I have with option 1.
>
Why does it have to be a TableEditor. You could make the String look
like a link (underlining maybe is a problem but you can resolve it using
custom drawing).
To change the foreground color ITableColorProvider and to underline an
item you can look at the owner draw support:
Owner Draw is shown in:
- http://www.eclipse.org/swt/snippets/
-
http://www.eclipse.org/articles/Article-CustomDrawingTableAndTreeItems/customDraw.htm
If you want to open a link when the user clicks one of the emulated
links you only need to track mouse clicks on your like shown in this
snippet.
http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet110.java
If you are using 3.3 for development and there is/will be a bunch of new
API which make all the above fairly easy.
OwnerDraw:
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet010OwnerDraw.java?rev=HEAD&content-type=text/vnd.viewcvs-markup
(broken if you run it against current CVS)
CellSelection:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=151377
> 3) Use a TreeViewer. The search results can be represented as a tree,
> where each node then has only one link in it. I have not looked into
> this, but I would assume I will have to subclass TreeViewer as in option
> 2 to have it render a Link.
>
> Are there other options? Am I missing something obvious?
>
The same as for TableViewer.
> TIA,
>
> Francis