]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/function/All.java
Font property for DIA.TextElement
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / function / All.java
index 67c136496d44576762a03b301b20a26b1fc8a1c0..6cd4c542f106afe53d4d80a774f4e9ace4e90e28 100644 (file)
@@ -5,11 +5,22 @@ import java.awt.geom.Point2D;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-
+import java.util.function.Consumer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FontDialog;
+import org.simantics.Simantics;
+import org.simantics.browsing.ui.NodeContext;
+import org.simantics.browsing.ui.content.Labeler.DialogModifier;
 import org.simantics.databoard.Bindings;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.PossibleIndexRoot;
+import org.simantics.db.common.request.UniqueRead;
+import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.exception.MissingVariableException;
 import org.simantics.db.layer0.request.PossibleConfiguration;
@@ -26,6 +37,9 @@ import org.simantics.modeling.template2d.ontology.Template2dResource;
 import org.simantics.scenegraph.loader.SceneGraphContext;
 import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;
 import org.simantics.scl.reflection.annotations.SCLValue;
+import org.simantics.ui.fonts.Fonts;
+import org.simantics.utils.ui.AdaptionUtils;
+import org.simantics.utils.ui.ErrorLogger;
 
 
 public class All {
@@ -215,4 +229,81 @@ public class All {
         }
     }
 
+    @SCLValue(type = "ReadGraph -> Resource -> Variable -> a")
+    public static Object fontModifier(ReadGraph graph, Resource r, final Variable variable) throws DatabaseException {
+       return new DialogModifier() {
+
+               @Override
+               public String getValue() {
+                       return null;
+               }
+
+               @Override
+               public String isValid(String label) {
+                       return null;
+               }
+
+               @Override
+               public void modify(final String label) {
+                       Simantics.getSession().async(new WriteRequest() {
+
+                               @Override
+                               public void perform(WriteGraph graph) throws DatabaseException {
+                                       Variable displayValue = variable.getParent(graph);
+                                       displayValue.setValue(graph, label, Bindings.STRING);
+                               }
+
+                       });
+               }
+
+               public String query(Object parentControl, Object controlItem, int columnIndex, NodeContext context, Consumer<String> applyCallback) {
+                       
+                       Control ctrl = (Control) parentControl;
+                       FontData[] initialValue = null;
+                       
+                       try {
+                               String font = Simantics.getSession().syncRequest(new UniqueRead<String>() {
+                                       @Override
+                                       public String perform(ReadGraph graph) throws DatabaseException {
+                                               Variable v = AdaptionUtils.adaptToSingle(context, Variable.class);
+                                               if(v == null) return null;
+                                               String displayValue = v.getPossiblePropertyValue(graph, "HasDisplayValue", Bindings.STRING);
+                                               return displayValue;
+                                       }
+                               });
+                               if (font != null) {
+                                       String[] fields = font.split(",");
+                                       if (fields.length == 3) {
+                                               int size = 14;
+                                               try {
+                                                       size = Integer.parseInt(fields[1]);
+                                               } catch (NumberFormatException e) {
+                                                       ErrorLogger.defaultLogError(e);
+                                               }
+                                               int style = SWT.NORMAL;
+                                               try {
+                                                       style = Fonts.swtStyle(fields[2]);
+                                               } catch (RuntimeException e) {
+                                                       ErrorLogger.defaultLogError(e);
+                                               }
+                                               initialValue = new FontData[] { new FontData(fields[0], size, style) };
+                                       }
+                               }
+                       } catch (DatabaseException e) {
+                               ErrorLogger.defaultLogError(e);
+                       }
+
+                       FontDialog dialog = new FontDialog(ctrl.getShell());
+                       if (initialValue != null)
+                               dialog.setFontList(initialValue);
+                       FontData font = dialog.open();
+                       if (font != null)
+                               applyCallback.accept(font.getName() + "," + font.getHeight() + "," + Fonts.fromSwtStyle(font.getStyle()));
+                       return null;
+               }
+
+       };
+       
+    }
+    
 }