X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Ffunction%2FAll.java;fp=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Ffunction%2FAll.java;h=6cd4c542f106afe53d4d80a774f4e9ace4e90e28;hp=67c136496d44576762a03b301b20a26b1fc8a1c0;hb=4573db95e4d5054feaa18c2baa9ae75ec5338577;hpb=16ce2fab4f52fcabe55a07d41c691899ca95c4ec diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/function/All.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/function/All.java index 67c136496..6cd4c542f 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/function/All.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/function/All.java @@ -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 applyCallback) { + + Control ctrl = (Control) parentControl; + FontData[] initialValue = null; + + try { + String font = Simantics.getSession().syncRequest(new UniqueRead() { + @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; + } + + }; + + } + }