]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java
Selection of highlight color for District Finder queries
[simantics/district.git] / org.simantics.district.selection.ui / src / org / simantics / district / selection / ui / ElementSelectorTableUI.java
index cdddd928bedd2f081321c2147c8592c1246170aa..4603eb8eb58ee6dbc2ee45e4627bfe20e95c4687 100644 (file)
@@ -2,22 +2,27 @@ package org.simantics.district.selection.ui;
 
 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;
@@ -31,12 +36,17 @@ public class ElementSelectorTableUI extends Composite {
 
        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());
@@ -52,8 +62,8 @@ public class ElementSelectorTableUI extends Composite {
                configureTable();
        }
 
-       public Tree getTree() {
-               return viewer.getTree();
+       public Table getTable() {
+               return viewer.getTable();
        }
 
        public ElementSelector getSelectedItem() {
@@ -61,12 +71,12 @@ public class ElementSelectorTableUI extends Composite {
                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);
 
@@ -79,17 +89,7 @@ public class ElementSelectorTableUI extends Composite {
        }
 
        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))
@@ -97,21 +97,11 @@ public class ElementSelectorTableUI extends Composite {
                                
                                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);
@@ -119,19 +109,43 @@ public class ElementSelectorTableUI extends Composite {
                        @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);
@@ -141,11 +155,6 @@ public class ElementSelectorTableUI extends Composite {
                                ElementSelector selector = (ElementSelector) element;
                                return selector.getExpression();
                        }
-                       
-                       @Override
-                       public Image getImage(Object element) {
-                               return null;
-                       }
                });
                return column;
        }
@@ -177,7 +186,7 @@ public class ElementSelectorTableUI extends Composite {
        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();