Problem: I need an SWT Table (JFace TableViewer) with variable row height. In fact, I solved this on my development machine (running Ubuntu 10.10). Unfortunately, this doesn't work on Windows nor on Mac.
Initially, I thought I didn't use the libraries correctly. But by now I fear that what I want to do is simply not possible on Windows. I hope someone here convinces me otherwise.
To reproduce: rather than providing my code here, I built a minimal program to reproduce the problem. I started with the following Snipplet:
http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet049StyledCellLabelProvider.java
I modified the update() method to produce two lines of text for directories and one line for files (to simulate an environment with variable row heights):
... if (file.isDirectory()) { cell.setText(styledString.toString() + "\n" + styledString.toString()); cell.setImage(IMAGE1); } else { cell.setImage(IMAGE2); } ...
This works as intended on Linux, but on Windows all rows have the same height. Specifically, only one line is visible.
Next, I was trying to help SWT by making measure() more intelligent. So I rewrote measure() like this:
protected void measure(Event event, Object element) { if (((File) element).isDirectory()) { event.height = 32; } else { event.height = 16; } super.measure(event, element); }
The result: All rows have the height 32. Again, this works as intended on Linux.
My fear is, that on Windows simply all rows must be the same height. This would be a showstopper for me. Can anybody confirm this, or even better, provide a workaround?
Thanks!
I ran into this problem as well -- needing an SWT table widget that could support cells of varying heights. As the.duckman says, Win32 table rows cannot do this. We ended up using the KTable widget. It doesn't use the native OS tables.
http://sourceforge.net/projects/ktable/
It worked okay for us, but it's got some quirks. Luckily the source code is fairly easy to modify to suit your needs.
I can confirm that on Win32 table rows can only have same height. See for example this bug report. The workaround from bug 148039 makes setItemHeight()
accessible, but that doesn't change this restriction.
We use the Nebula Grid widget. http://www.eclipse.org/nebula/widgets/grid/grid.php
It is exceptionally flexible. In our case we use it to get more of html style table functionality combined with a treeViewer widget.
Screenshot
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With