]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java
Finder visualisation coloring to diagram & checkbox for enable/disable
[simantics/district.git] / org.simantics.district.selection.ui / src / org / simantics / district / selection / ui / ElementSelectorTableUI.java
index cdddd928bedd2f081321c2147c8592c1246170aa..79602077b0bf96698a413f4a2d64091991e36f79 100644 (file)
@@ -2,22 +2,29 @@ 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.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
 import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ICheckStateListener;
 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.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,29 +38,50 @@ public class ElementSelectorTableUI extends Composite {
 
        private static final Logger LOGGER = LoggerFactory.getLogger(ElementSelectorTableUI.class);
 
-       private TreeViewer viewer;
+       private CheckboxTableViewer 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());
-               //        GridDataFactory.fillDefaults().grab(true, true).applyTo(this);
-               //        GridLayoutFactory.fillDefaults().numColumns(1).applyTo(this);
+               // GridDataFactory.fillDefaults().grab(true, true).applyTo(this);
+               // GridLayoutFactory.fillDefaults().numColumns(1).applyTo(this);
                this.setLayout(new FillLayout());
 
                viewer = createViewer();
                addSelectionListener();
+               addCheckStateListener();
                setContentProvider();
                createSelectorListener(parent);
                enableToolTips();
                configureTable();
        }
 
-       public Tree getTree() {
-               return viewer.getTree();
+       private void addCheckStateListener() {
+               viewer.addCheckStateListener(new ICheckStateListener() {
+                       
+                       @Override
+                       public void checkStateChanged(CheckStateChangedEvent event) {
+                               boolean checked = event.getChecked();
+                               if (checked) {
+                                       view.performSelection(getDisplay(), (ElementSelector) event.getElement());
+                               } else {
+                                       view.clearResultVisualisation((ElementSelector) event.getElement());
+                               }
+                       }
+               });
+       }
+
+       public Table getTable() {
+               return viewer.getTable();
        }
 
        public ElementSelector getSelectedItem() {
@@ -61,17 +89,18 @@ public class ElementSelectorTableUI extends Composite {
                return selection != null ? (ElementSelector) selection.getFirstElement() : null;
        }
 
-       private TreeViewer createViewer() {
-               return new TreeViewer(this, SWT.FULL_SELECTION);
+       private CheckboxTableViewer createViewer() {
+               return CheckboxTableViewer.newCheckList(this, SWT.FULL_SELECTION | SWT.SINGLE);
        }
 
        private void configureTable() {
-               Tree table = viewer.getTree();
+               Table table = getTable();
                table.setHeaderVisible(true);
                table.setLinesVisible(true);
 
                createNameColumn();
                createQueryColumn();
+               //createQueryActiveColumn();
        }
 
        private void enableToolTips() {
@@ -79,39 +108,19 @@ 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))
                                        return new Object[0];
-                               
-                               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);
+
+                               return ((Collection<?>) inputElement).toArray();
                        }
                });
        }
 
-       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 +128,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,33 +174,29 @@ public class ElementSelectorTableUI extends Composite {
                                ElementSelector selector = (ElementSelector) element;
                                return selector.getExpression();
                        }
-                       
-                       @Override
-                       public Image getImage(Object element) {
-                               return null;
-                       }
                });
                return column;
        }
 
        private void createSelectorListener(Composite parent) {
-               Simantics.getSession().asyncRequest(new ElementSelectionTools.SelectionsRequest(), new SyncListenerAdapter<Collection<ElementSelector>>() {
-                       public void execute(ReadGraph graph, Collection<ElementSelector> result) {
-                               parent.getDisplay().asyncExec(() -> {
-                                       viewer.setInput(result);
+               Simantics.getSession().asyncRequest(new ElementSelectionTools.SelectionsRequest(),
+                               new SyncListenerAdapter<Collection<ElementSelector>>() {
+                                       public void execute(ReadGraph graph, Collection<ElementSelector> result) {
+                                               parent.getDisplay().asyncExec(() -> {
+                                                       viewer.setInput(result);
+                                               });
+                                       }
+
+                                       @Override
+                                       public void exception(ReadGraph graph, Throwable t) throws DatabaseException {
+                                               LOGGER.error("Error getting element selector list", t);
+                                       }
+
+                                       @Override
+                                       public boolean isDisposed() {
+                                               return ElementSelectorTableUI.this.isDisposed();
+                                       }
                                });
-                       }
-
-                       @Override
-                       public void exception(ReadGraph graph, Throwable t) throws DatabaseException {
-                               LOGGER.error("Error getting element selector list", t);
-                       }
-
-                       @Override
-                       public boolean isDisposed() {
-                               return ElementSelectorTableUI.this.isDisposed();
-                       }
-               });
        }
 
        private void addSelectionListener() {
@@ -177,11 +206,19 @@ 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();
-                       
+
                        view.performSelection(display, query);
+                       
+                       viewer.setChecked(selection.getFirstElement(), true);
                }
        }
+       
+       @Override
+       public void dispose() {
+               view.dispose();
+               super.dispose();
+       }
 }