[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

Thanks Tom, I was thinking along the lines you suggested. I will make a link by changing the color and drawing a line using owner draw.

I decided to handle the clicking by just responding to the selection event on the TableViewer (thus allowing keyboard selection).

It would be nice if there was a simpler way to include links using the Viewers, since the TableEditor solution is so impractical.

Thanks again for your help!

Francis

Tom Schindl wrote:
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