]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/visualisations/DynamicVisualisationsUI.java
Add support for gradients in dynamic visualisations
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / visualisations / DynamicVisualisationsUI.java
index 5cb80a15d5fca59c50a72827a1bcbad7ac0dc94e..14a8f00fa61c0646d84e60107674f78dd1a0cb26 100644 (file)
@@ -39,7 +39,6 @@ import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.util.RemoverUtil;
 import org.simantics.db.procedure.Listener;
 import org.simantics.district.network.DistrictNetworkUtil;
-import org.simantics.district.network.ontology.DistrictNetworkResource;
 import org.simantics.district.network.profile.ActiveDynamicVisualisationsRequest;
 import org.simantics.district.network.profile.DynamicVisualisationsRequest;
 import org.simantics.district.network.visualisations.DynamicVisualisationsContributions;
@@ -65,7 +64,7 @@ public class DynamicVisualisationsUI extends Composite {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DynamicVisualisationsUI.class);
 
-    private Resource diagramResource;
+    private Resource parentResource;
     private VisualisationListener listener;
     private DynamicVisualisation visualisation;
 
@@ -131,7 +130,8 @@ public class DynamicVisualisationsUI extends Composite {
                             
                             @Override
                             public void perform(WriteGraph graph) throws DatabaseException {
-                                DistrictNetworkUtil.setActiveVisualisation(graph, diagramResource, template.getResource());
+                                Resource vf = DistrictNetworkUtil.getVisualisationFolder(graph, parentResource);
+                                DistrictNetworkUtil.setActiveVisualisation(graph, vf, template.getResource());
                             }
                         });
                         break;
@@ -269,12 +269,11 @@ public class DynamicVisualisationsUI extends Composite {
             
             @Override
             public void perform(WriteGraph graph) throws DatabaseException {
-                DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
                 Resource exist;
                 if (existing.isPresent()) {
                     exist = existing.get();
                 } else {
-                    exist = DistrictNetworkUtil.createVisualisation(graph, diagramResource, templateName);
+                    exist = DistrictNetworkUtil.createVisualisation(graph, parentResource, templateName);
                 }
                 
                 DistrictNetworkUtil.setColorContributions(graph, exist, colorCollect);
@@ -298,16 +297,17 @@ public class DynamicVisualisationsUI extends Composite {
         colorSuppliers = new ArrayList<>();
         {
             try {
-                Collection<DynamicColoringObject> result = Simantics.getSession().syncRequest(new UniqueRead<Collection<DynamicColoringObject>>() {
+                Pair<Collection<DynamicColoringObject>, Map<String, DynamicColorMap>> result = Simantics.getSession().syncRequest(new UniqueRead<Pair<Collection<DynamicColoringObject>, Map<String, DynamicColorMap>>>() {
 
                     @Override
-                    public Collection<DynamicColoringObject> perform(ReadGraph graph) throws DatabaseException {
-                        return DynamicVisualisationsContributions.dynamicColoringObjects(graph);
+                    public Pair<Collection<DynamicColoringObject>, Map<String, DynamicColorMap>> perform(ReadGraph graph) throws DatabaseException {
+                        Map<String, DynamicColorMap> dynamicColorMaps = DynamicVisualisationsContributions.dynamicColorMaps(graph);
+                        return Pair.make(DynamicVisualisationsContributions.dynamicColoringObjects(graph), dynamicColorMaps);
                     }
                 });
                 
-                for (DynamicColoringObject object : result) {
-                    colorSuppliers.add(createColoringObjectRow(group, object));
+                for (DynamicColoringObject object : result.first) {
+                    colorSuppliers.add(createColoringObjectRow(group, object, result.second));
                 }
 
             } catch (DatabaseException e) {
@@ -367,11 +367,11 @@ public class DynamicVisualisationsUI extends Composite {
         private final Combo variableCombo;
         private final Text minText;
         private final Text maxText;
-        private final Label unit;
+        private final Text unit;
         private final Combo colorMapCombo;
         private final Button defaultButton;
         
-        public ColoringObjectRow(Label label, Button usedButton, Combo variableCombo, Text minText, Text maxText, Label unit,
+        public ColoringObjectRow(Label label, Button usedButton, Combo variableCombo, Text minText, Text maxText, Text unit,
                 Combo colorMapCombo, Button defaultButton) {
             super();
             this.label = label;
@@ -396,17 +396,14 @@ public class DynamicVisualisationsUI extends Composite {
             maxText.setText(Double.toString(colorContribution.getDefaultMax()));
             unit.setText(colorContribution.getUnit());
             
-            // color map only supports single for now
-            colorMapCombo.setItems(colorContribution.getDefaultColorMap().getLabel());
-            colorMapCombo.select(0);
-//            String[] colorItems = colorMapCombo.getItems();
-//            for (int i = 0; i < colorItems.length; i++) {
-//                
-//                if (colorContribution.getDefaultColorMap().getLabel().equals(colorItems[i])) {
-//                    colorMapCombo.select(i);
-//                    break;
-//                }
-//            }
+            String[] colorItems = colorMapCombo.getItems();
+            for (int i = 0; i < colorItems.length; i++) {
+                
+                if (colorContribution.getDefaultColorMap().getLabel().equals(colorItems[i])) {
+                    colorMapCombo.select(i);
+                    break;
+                }
+            }
             usedButton.setSelection(colorContribution.isUsed());
             defaultButton.setSelection(colorContribution.isUseDefault());
             
@@ -452,17 +449,13 @@ public class DynamicVisualisationsUI extends Composite {
             maxText.setText(Double.toString(sizeContribution.getDefaultMax()));
             unit.setText(sizeContribution.getUnit());
             
-            // color map only supports single for now
-            sizeMapCombo.setItems(sizeContribution.getDefaultSizeMap().getLabel());
-            sizeMapCombo.select(0);
-//            String[] colorItems = colorMapCombo.getItems();
-//            for (int i = 0; i < colorItems.length; i++) {
-//                
-//                if (colorContribution.getDefaultColorMap().getLabel().equals(colorItems[i])) {
-//                    colorMapCombo.select(i);
-//                    break;
-//                }
-//            }
+            String[] sizeItems = sizeMapCombo.getItems();
+            for (int i = 0; i < sizeItems.length; i++) {
+                if (sizeContribution.getDefaultSizeMap().getLabel().equals(sizeItems[i])) {
+                    sizeMapCombo.select(i);
+                    break;
+                }
+            }
             usedButton.setSelection(sizeContribution.isUsed());
             defaultButton.setSelection(sizeContribution.isUseDefault());
             
@@ -472,7 +465,7 @@ public class DynamicVisualisationsUI extends Composite {
         }
     }
 
-    private Supplier<Pair<String, DynamicColorContribution>> createColoringObjectRow(Composite parent, DynamicColoringObject object) {
+    private Supplier<Pair<String, DynamicColorContribution>> createColoringObjectRow(Composite parent, DynamicColoringObject object, Map<String, DynamicColorMap> colorMaps) {
         Label label = new Label(parent, SWT.NONE);
         label.setText(object.getColoringObject().getName());
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(label);
@@ -493,12 +486,12 @@ public class DynamicVisualisationsUI extends Composite {
         Text maxText = new Text(parent, SWT.BORDER);
         GridDataFactory.fillDefaults().grab(true, false).hint(150, SWT.DEFAULT).align(SWT.CENTER, SWT.CENTER).applyTo(maxText);
         
-        Label unit = new Label(parent, SWT.NONE);
-        unit.setText("");
-        GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(unit);
+        Text unit = new Text(parent, SWT.READ_ONLY);
+        GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(unit);
         
         Combo colorMapCombo = new Combo(parent, SWT.READ_ONLY);
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(colorMapCombo);
+        colorMapCombo.setItems(colorMaps.keySet().toArray(new String[colorMaps.keySet().size()]));
         
         Button defaultButton = new Button(parent, SWT.CHECK);
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(defaultButton);
@@ -517,8 +510,14 @@ public class DynamicVisualisationsUI extends Composite {
                     maxText.setEnabled(!defaultButton.getSelection());
                     unit.setText(cont.getUnit());
                     
-                    colorMapCombo.setItems(cont.getDefaultColorMap().getLabel());
-                    colorMapCombo.select(0);
+                    String[] items = colorMapCombo.getItems();
+                    for (int i = 0; i < items.length; i++) {
+                        String item = items[i];
+                        if (item.equals(cont.getDefaultColorMap().getLabel())) {
+                            colorMapCombo.select(i);
+                            break;
+                        }
+                    }
                     colorMapCombo.setEnabled(!defaultButton.getSelection());
                 }
             }
@@ -542,8 +541,14 @@ public class DynamicVisualisationsUI extends Composite {
                     }
                     unit.setText(cont.getUnit());
                     
-                    colorMapCombo.setItems(cont.getDefaultColorMap().getLabel());
-                    colorMapCombo.select(0);
+                    String[] items = colorMapCombo.getItems();
+                    for (int i = 0; i < items.length; i++) {
+                        String item = items[i];
+                        if (item.equals(cont.getDefaultColorMap().getLabel())) {
+                            colorMapCombo.select(i);
+                            break;
+                        }
+                    }
                     
                     defaultButton.setSelection(true);
                 }
@@ -623,7 +628,7 @@ public class DynamicVisualisationsUI extends Composite {
         GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(label);
     }
 
-    private Supplier<Pair<String, DynamicSizeContribution>> createSizingObjectRow(Composite parent, DynamicSizingObject object) {
+    private Supplier<Pair<String, DynamicSizeContribution>> createSizingObjectRow(Composite parent, DynamicSizingObject object, Map<String, DynamicSizeMap> sizeMaps) {
         Label label = new Label(parent, SWT.NONE);
         label.setText(object.getSizingObject().getName());
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(label);
@@ -645,14 +650,41 @@ public class DynamicVisualisationsUI extends Composite {
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(maxText);
         
         Label unit = new Label(parent, SWT.NONE);
-        unit.setText("");
-        GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(unit);
+        GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(unit);
         
         Combo sizeMapCombo = new Combo(parent, SWT.READ_ONLY);
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(sizeMapCombo);
+        sizeMapCombo.setItems(sizeMaps.keySet().toArray(new String[sizeMaps.keySet().size()]));
         
         Button defaultButton = new Button(parent, SWT.CHECK);
         GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(defaultButton);
+        defaultButton.addSelectionListener(new SelectionAdapter() {
+            
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                int index = variableCombo.getSelectionIndex();
+                if (index >= 0) {
+                    String key = variableCombo.getItem(index);
+                    DynamicSizeContribution cont = sizeContributions.get(key);
+                    
+                    minText.setText(Double.toString(cont.getDefaultMin()));
+                    minText.setEnabled(!defaultButton.getSelection());
+                    maxText.setText(Double.toString(cont.getDefaultMax()));
+                    maxText.setEnabled(!defaultButton.getSelection());
+                    unit.setText(cont.getUnit());
+                    
+                    String[] items = sizeMapCombo.getItems();
+                    for (int i = 0; i < items.length; i++) {
+                        String item = items[i];
+                        if (item.equals(cont.getDefaultSizeMap().getLabel())) {
+                            sizeMapCombo.select(i);
+                            break;
+                        }
+                    }
+                    sizeMapCombo.setEnabled(!defaultButton.getSelection());
+                }
+            }
+        });
         
         variableCombo.addSelectionListener(new SelectionAdapter() {
             
@@ -670,8 +702,14 @@ public class DynamicVisualisationsUI extends Composite {
                 }
                 unit.setText(cont.getUnit());
                 
-                sizeMapCombo.setItems(cont.getDefaultSizeMap().getLabel());
-                sizeMapCombo.select(0);
+                String[] items = sizeMapCombo.getItems();
+                for (int i = 0; i < items.length; i++) {
+                    String item = items[i];
+                    if (item.equals(cont.getDefaultSizeMap().getLabel())) {
+                        sizeMapCombo.select(i);
+                        break;
+                    }
+                }
                 
                 defaultButton.setSelection(true);
             }
@@ -770,16 +808,17 @@ public class DynamicVisualisationsUI extends Composite {
         
         sizeSuppliers = new ArrayList<>(); 
         try {
-            Collection<DynamicSizingObject> resultSizing = Simantics.getSession().syncRequest(new UniqueRead<Collection<DynamicSizingObject>>() {
+            Pair<Collection<DynamicSizingObject>, Map<String, DynamicSizeMap>> resultSizing = Simantics.getSession().syncRequest(new UniqueRead<Pair<Collection<DynamicSizingObject>, Map<String, DynamicSizeMap>>>() {
 
                 @Override
-                public Collection<DynamicSizingObject> perform(ReadGraph graph) throws DatabaseException {
-                    return DynamicVisualisationsContributions.dynamicSizingObjects(graph);
+                public Pair<Collection<DynamicSizingObject>, Map<String, DynamicSizeMap>> perform(ReadGraph graph) throws DatabaseException {
+                    Map<String, DynamicSizeMap> dynamicSizeMaps = DynamicVisualisationsContributions.dynamicSizeMaps(graph);
+                    return Pair.make(DynamicVisualisationsContributions.dynamicSizingObjects(graph), dynamicSizeMaps);
                 }
             });
             
-            for (DynamicSizingObject object : resultSizing) {
-                sizeSuppliers.add(createSizingObjectRow(parent, object));
+            for (DynamicSizingObject object : resultSizing.first) {
+                sizeSuppliers.add(createSizingObjectRow(parent, object, resultSizing.second));
             }
         } catch (DatabaseException e) {
             LOGGER.error("Could not create object sizes", e);
@@ -824,9 +863,9 @@ public class DynamicVisualisationsUI extends Composite {
         }
     }
 
-    public void setDiagramResource(Resource diagramResource) {
-        if (this.diagramResource != diagramResource) {
-            this.diagramResource = diagramResource;
+    public void setParentResource(Resource parentResource) {
+        if (this.parentResource != parentResource) {
+            this.parentResource = parentResource;
             updateListening();
         }
     }
@@ -835,12 +874,12 @@ public class DynamicVisualisationsUI extends Composite {
         if (visualisationsListener != null)
             visualisationsListener.dispose();
         visualisationsListener = new VisualisationsListener(this);
-        Simantics.getSession().asyncRequest(new DynamicVisualisationsRequest(diagramResource), visualisationsListener);
+        Simantics.getSession().asyncRequest(new DynamicVisualisationsRequest(parentResource), visualisationsListener);
         
         if (listener != null)
             listener.dispose();
         listener = new VisualisationListener(this);
-        Simantics.getSession().asyncRequest(new ActiveDynamicVisualisationsRequest(diagramResource), listener);
+        Simantics.getSession().asyncRequest(new ActiveDynamicVisualisationsRequest(parentResource), listener);
     }
 
     private static class VisualisationsListener implements Listener<Collection<NamedResource>> {
@@ -938,6 +977,7 @@ public class DynamicVisualisationsUI extends Composite {
                 ColorBarOptions colorOptions = visualisation.getColorBarOptions();
                 showColorButton.setSelection(colorOptions.isShowColorBars());
                 colorTicksButton.setSelection(colorOptions.isShowColorBarsTicks());
+                colorGradientButton.setSelection(colorOptions.isUseGradients());
                 for (int i = 0; i < colorLocationCombo.getItems().length; i++) {
                     String item = colorLocationCombo.getItem(i);
                     if (item.equals(colorOptions.getLocation().toString())) {
@@ -968,6 +1008,7 @@ public class DynamicVisualisationsUI extends Composite {
                 SizeBarOptions sizeOptions = visualisation.getSizeBarOptions();
                 showSizeButton.setSelection(sizeOptions.isShowSizeBars());
                 sizeTicksButton.setSelection(sizeOptions.isShowSizeBarsTicks());
+                sizeGradientButton.setSelection(sizeOptions.isUseGradients());
                 for (int i = 0; i < sizeLocationCombo.getItems().length; i++) {
                     String item = sizeLocationCombo.getItem(i);
                     if (item.equals(sizeOptions.getLocation().toString())) {