TableViewer with OwnerDrawLabel only draws the first row [message #1318306] |
Sun, 27 April 2014 15:36 |
Sharon Dagan Messages: 12 Registered: November 2013 |
Junior Member |
|
|
This trivial test case running against Eclipse 4.3.2 puzzles me -- why is it that only the first row is drawn?
Thanks,
-S
---Begin---
package testcase;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
public class TableViewer_OwnerDrawLabel_Testcase {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new FillLayout());
shell.setMinimumSize(600, 400);
final TableViewer tv = new TableViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
tv.setContentProvider(new IStructuredContentProvider() {
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public void dispose() {
}
@Override
public Object[] getElements(Object inputElement) {
return ((List)inputElement).toArray();
}
});
tv.setLabelProvider(new OwnerDrawLabelProvider() {
@Override
protected void paint(Event event, Object element) {
GC gc = event.gc;
gc.drawText((String)element, 0, 0, true);
}
@Override
protected void measure(Event event, Object element) {
}
});
ArrayList<String> items = new ArrayList<String>();
items.add("one");
items.add("two");
items.add("three");
tv.setInput(items);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
---End---
[Updated on: Sun, 27 April 2014 15:37] Report message to a moderator
|
|
|
Re: TableViewer with OwnerDrawLabel only draws the first row [message #1318514 is a reply to message #1318306] |
Sun, 27 April 2014 18:27 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Shouldn't you draw on event.x, event.y instead of 0,0? See
http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet010OwnerDraw.java
Tom
On 27.04.14 17:36, Sharon Dagan wrote:
> This trivial test case running against Eclipse 4.3.2 puzzles me -- why
> is it that only the first row is drawn?
>
> Thanks,
> -S
>
> ---Begin---
>
> package testcase;
>
> import java.util.ArrayList;
> import java.util.List;
>
> import org.eclipse.jface.viewers.IStructuredContentProvider;
> import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
> import org.eclipse.jface.viewers.TableViewer;
> import org.eclipse.jface.viewers.Viewer;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.graphics.GC;
> import org.eclipse.swt.layout.FillLayout;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Event;
> import org.eclipse.swt.widgets.Shell;
>
> public class TableViewer_OwnerDrawLabel_Testcase {
>
> public static void main(String[] args) {
> Display display = new Display();
> Shell shell = new Shell(display, SWT.SHELL_TRIM);
>
> shell.setLayout(new FillLayout());
> shell.setMinimumSize(600, 400);
>
> final TableViewer tv = new TableViewer(shell, SWT.BORDER |
> SWT.FULL_SELECTION);
> tv.setContentProvider(new IStructuredContentProvider() {
>
> @Override
> public void inputChanged(Viewer viewer, Object oldInput,
> Object newInput) {
> }
>
> @Override
> public void dispose() {
> }
>
> @Override
> public Object[] getElements(Object inputElement) {
> return ((List)inputElement).toArray();
> }
> });
>
> tv.setLabelProvider(new OwnerDrawLabelProvider() {
>
> @Override
> protected void paint(Event event, Object element) {
> GC gc = event.gc;
> gc.drawText((String)element, 0, 0, true);
> }
>
> @Override
> protected void measure(Event event, Object element) {
> }
> });
>
> ArrayList<String> items = new ArrayList<String>();
> items.add("one");
> items.add("two");
> items.add("three");
>
> tv.setInput(items);
>
> shell.pack();
> shell.open();
>
> while (!shell.isDisposed()) {
> if (!display.readAndDispatch()) {
> display.sleep();
> }
> }
> }
> }
>
> ---End---
|
|
|
|
Powered by
FUDForum. Page generated in 0.02055 seconds