Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SWT Table with variable row height: Working on Linux, but not Mac/Windows

Tags:

java

swt

jface

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!

like image 649
jastram Avatar asked Nov 02 '10 21:11

jastram


3 Answers

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.

like image 193
thehiatus Avatar answered Oct 07 '22 22:10

thehiatus


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.

like image 44
the.duckman Avatar answered Oct 07 '22 22:10

the.duckman


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 alt text

like image 44
fisherja Avatar answered Oct 07 '22 21:10

fisherja