import java.util.Collection;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.TreeViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Table;
import org.simantics.Simantics;
import org.simantics.db.ReadGraph;
import org.simantics.db.common.procedure.adapter.SyncListenerAdapter;
private static final Logger LOGGER = LoggerFactory.getLogger(ElementSelectorTableUI.class);
- private TreeViewer viewer;
+ private TableViewer viewer;
private ElementSelectionView view;
+ private ResourceManager resourceManager;
+
public ElementSelectorTableUI(Composite parent, int style, ElementSelectionView view) {
super(parent, style);
+
+ resourceManager = new LocalResourceManager(JFaceResources.getResources(), this);
+
this.view = view;
parent.setLayout(new FillLayout());
configureTable();
}
- public Tree getTree() {
- return viewer.getTree();
+ public Table getTable() {
+ return viewer.getTable();
}
public ElementSelector getSelectedItem() {
return selection != null ? (ElementSelector) selection.getFirstElement() : null;
}
- private TreeViewer createViewer() {
- return new TreeViewer(this, SWT.FULL_SELECTION);
+ private TableViewer createViewer() {
+ return new TableViewer(this, SWT.FULL_SELECTION | SWT.SINGLE);
}
private void configureTable() {
- Tree table = viewer.getTree();
+ Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
}
private void setContentProvider() {
- viewer.setContentProvider(new ITreeContentProvider() {
- @Override
- public boolean hasChildren(Object element) {
- return false;
- }
-
- @Override
- public Object getParent(Object element) {
- return null;
- }
-
+ viewer.setContentProvider(new IStructuredContentProvider() {
@Override
public Object[] getElements(Object inputElement) {
if (inputElement == null || !(inputElement instanceof Collection))
return ((Collection<?>)inputElement).toArray();
}
-
- @Override
- public Object[] getChildren(Object parentElement) {
- return null;
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- ITreeContentProvider.super.inputChanged(viewer, oldInput, newInput);
- }
});
}
- private TreeViewerColumn createNameColumn() {
- TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE);
+ private TableViewerColumn createNameColumn() {
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setText("Name");
column.getColumn().setWidth(200);
column.getColumn().setResizable(true);
@Override
public String getText(Object element) {
ElementSelector selector = (ElementSelector) element;
- return selector.getName();
+ return " " + selector.getName();
}
@Override
public Image getImage(Object element) {
- return null;
+ ElementSelector selector = (ElementSelector) element;
+ float[] color = selector.getColor();
+ if (color == null)
+ return null;
+
+ RGB rgb = ElementSelectionTools.literalToColor(color).getRgb();
+
+ PaletteData paletteData = new PaletteData(new RGB[] { new RGB(255, 255, 255), rgb });
+
+ // Create image with a colored horizontal bar
+ // TODO: Indicate line width
+ Image image = resourceManager.createImage(ImageDescriptor.createFromImageDataProvider(zoom -> {
+ int height = 8 * zoom / 100;
+ int width = 40 * zoom / 100;
+ ImageData imageData = new ImageData(width, height, 1, paletteData);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ imageData.setPixel(x, y, 1);
+ }
+ }
+
+ return imageData;
+ }));
+
+ return image;
}
});
return column;
}
- private TreeViewerColumn createQueryColumn() {
- TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE);
+ private TableViewerColumn createQueryColumn() {
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setText("Query");
column.getColumn().setWidth(600);
column.getColumn().setResizable(true);
ElementSelector selector = (ElementSelector) element;
return selector.getExpression();
}
-
- @Override
- public Image getImage(Object element) {
- return null;
- }
});
return column;
}
private final class DoubleClickListener implements IDoubleClickListener {
@Override
public void doubleClick(DoubleClickEvent event) {
- TreeSelection selection = (TreeSelection) event.getViewer().getSelection();
+ IStructuredSelection selection = (IStructuredSelection) event.getViewer().getSelection();
Display display = event.getViewer().getControl().getDisplay();
ElementSelector query = (ElementSelector) selection.getFirstElement();