From a0e3814041d624e3d72c21210d188e56439757aa Mon Sep 17 00:00:00 2001 From: Antti Villberg Date: Fri, 24 Feb 2017 14:47:17 +0200 Subject: [PATCH] Misc. changes to support Selection View in modelled documents refs #7050 Change-Id: Ia088db3d75c8d9963d0e513d1e6042a63b13e6c8 --- .../ConstantLabelDecorationRule.java | 3 + .../document/server/io/ITreeTableCell.java | 5 ++ .../document/server/io/JSONObjectUtils.java | 69 ++++++++++++++++++ .../scl/Document/All.scl | 7 ++ .../Simantics/Testing/ActionBrowseContext.scl | 4 +- .../scl/Simantics/Testing/BrowseContext.scl | 8 +- .../graph.tg | Bin 11656 -> 11662 bytes .../graph/Selectionview.pgraph | 2 +- .../graph.tg | Bin 7756 -> 8786 bytes .../graph/SelectionViewUi.pgraph | 10 +++ .../graph/scl/SCLMain.scl | 7 ++ .../ui/ontology/SelectionViewUIResources.java | 3 + .../spreadsheet/common/TreeTableCell.java | 47 ++++++++++++ .../scl/Spreadsheet/All.scl | 14 ++++ 14 files changed, 175 insertions(+), 4 deletions(-) create mode 100644 bundles/org.simantics.selectionview.ui.ontology/graph/scl/SCLMain.scl diff --git a/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/labeldecorators/ConstantLabelDecorationRule.java b/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/labeldecorators/ConstantLabelDecorationRule.java index 3bb2db942..494c0a819 100644 --- a/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/labeldecorators/ConstantLabelDecorationRule.java +++ b/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/labeldecorators/ConstantLabelDecorationRule.java @@ -13,7 +13,9 @@ package org.simantics.browsing.ui.model.labeldecorators; import org.eclipse.jface.resource.ColorDescriptor; import org.eclipse.jface.resource.FontDescriptor; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.RGB; import org.simantics.browsing.ui.content.LabelDecorator; import org.simantics.databoard.Bindings; @@ -133,6 +135,7 @@ public class ConstantLabelDecorationRule extends AbstractLabelDecorator implemen return font; else { FontDescriptor desc = (FontDescriptor)font; + if(desc == null) desc = FontDescriptor.createFrom(JFaceResources.getDialogFont().getFontData()); return (Font)desc.withStyle(style); } } diff --git a/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/ITreeTableCell.java b/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/ITreeTableCell.java index 7a59a1461..9bf10fb3a 100644 --- a/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/ITreeTableCell.java +++ b/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/ITreeTableCell.java @@ -3,4 +3,9 @@ package org.simantics.document.server.io; public interface ITreeTableCell extends ITableCell { int getParent(); + + Object getData(); + + boolean isEditable(); + } diff --git a/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java b/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java index 8913645a9..558ee3204 100644 --- a/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java +++ b/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java @@ -13,6 +13,7 @@ package org.simantics.document.server.io; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -343,4 +344,72 @@ public class JSONObjectUtils { else return Collections.emptyList(); } + + @SuppressWarnings("unchecked") + public static Collection getTreeTableCell(IJSONObject object) { + try { + Object treeTableCells = object.getValue("tableCells"); + if (treeTableCells instanceof String) { + String tableCellsS = (String) treeTableCells; + if (tableCellsS.length() == 0) + return Collections.emptyList(); + } + if (treeTableCells != null) { + return (List) treeTableCells; + } else { + return Collections.emptyList(); + } + } catch (ClassCastException e) { + e.printStackTrace(); + } + return Collections.emptyList(); + } + + public static final boolean equalObjects(Object oldValue, Object newValue) { + if (newValue != null) { + if (newValue.getClass().isArray()) { + return arrayEquals(newValue, oldValue); + } else { + return newValue.equals(oldValue); + } + } else + return oldValue == null; + } + + + /** + * @param av1 an array (guaranteed) + * @param av2 any object + * @return true if the two arrays are equal + */ + private static final boolean arrayEquals(Object av1, Object av2) { + if (av2 == null) + return false; + Class c1 = av1.getClass().getComponentType(); + Class c2 = av2.getClass().getComponentType(); + if (c2 == null || !c1.equals(c2)) + return false; + boolean p1 = c1.isPrimitive(); + boolean p2 = c2.isPrimitive(); + if (p1 != p2) + return false; + if (!p1) + return Arrays.equals((Object[]) av1, (Object[]) av2); + if (boolean.class.equals(c1)) + return Arrays.equals((boolean[]) av1, (boolean[]) av2); + else if (byte.class.equals(c1)) + return Arrays.equals((byte[]) av1, (byte[]) av2); + else if (int.class.equals(c1)) + return Arrays.equals((int[]) av1, (int[]) av2); + else if (long.class.equals(c1)) + return Arrays.equals((long[]) av1, (long[]) av2); + else if (float.class.equals(c1)) + return Arrays.equals((float[]) av1, (float[]) av2); + else if (double.class.equals(c1)) + return Arrays.equals((double[]) av1, (double[]) av2); + throw new RuntimeException("Unsupported objects for equality testing ." + av1 + " vs. " + av2); + + } + + } diff --git a/bundles/org.simantics.document.server/scl/Document/All.scl b/bundles/org.simantics.document.server/scl/Document/All.scl index 238968142..fa83a224a 100644 --- a/bundles/org.simantics.document.server/scl/Document/All.scl +++ b/bundles/org.simantics.document.server/scl/Document/All.scl @@ -21,6 +21,13 @@ importJava "org.simantics.document.server.io.ITreeTableCell" where importJava "org.simantics.document.server.io.IFont" where data IFont + + @JavaName getFamily + fontFamily :: IFont -> Maybe String + @JavaName getStyle + fontStyle :: IFont -> Maybe String + @JavaName getHeight + fontHeight :: IFont -> Integer importJava "org.simantics.document.server.io.IColor" where data IColor diff --git a/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/ActionBrowseContext.scl b/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/ActionBrowseContext.scl index ecacf0090..b821fcc03 100644 --- a/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/ActionBrowseContext.scl +++ b/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/ActionBrowseContext.scl @@ -123,7 +123,9 @@ printActionDetails action = do @private decorateLabelStub :: LabelDecorator -> String -> String -> () decorateLabelStub decorator key value = do - fontti = decorateFont decorator getDefaultFontDescriptor key 0 + fontti = match decorateFont decorator (Just getDefaultFontDescriptor) key 0 with + Nothing -> "" + Just font -> "" fontti = decorateBackground decorator Nothing key 0 fontti = decorateForeground decorator Nothing key 0 laabeli = decorateLabel decorator value key 0 diff --git a/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/BrowseContext.scl b/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/BrowseContext.scl index a4b06495a..d3890192e 100644 --- a/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/BrowseContext.scl +++ b/bundles/org.simantics.modeling.ui/scl/Simantics/Testing/BrowseContext.scl @@ -96,7 +96,7 @@ importJava "org.simantics.browsing.ui.content.LabelDecorator" where decorateLabel :: LabelDecorator -> String -> String -> Integer -> String decorateForeground :: LabelDecorator -> a -> String -> Integer -> a decorateBackground :: LabelDecorator -> a -> String -> Integer -> a - decorateFont :: LabelDecorator -> a -> String -> Integer -> a + decorateFont :: LabelDecorator -> Maybe a -> String -> Integer -> Maybe a importJava "org.simantics.browsing.ui.CheckedState" where data CheckedState @@ -105,7 +105,8 @@ importJava "org.simantics.browsing.ui.content.Labeler$Modifier" where data Modifier getValue :: Modifier -> String - isValid :: Modifier -> String -> String + isValid :: Modifier -> String -> Maybe String + modify :: Modifier -> String -> () importJava "org.simantics.browsing.ui.model.browsecontexts.BrowseContexts" where toBrowseContextG :: Vector String -> BrowseContext @@ -118,3 +119,6 @@ createBrowseContext :: [Resource] -> BrowseContext createBrowseContext resource = do create resource +importJava "org.simantics.browsing.ui.common.NodeContextBuilder" where + buildWithInput :: a -> NodeContext + diff --git a/bundles/org.simantics.selectionview.ontology/graph.tg b/bundles/org.simantics.selectionview.ontology/graph.tg index 724deb153af635e054d7f73ad28e8991e96f162b..cb9e2f834845321935d9706b22b26e8108c3ec59 100644 GIT binary patch delta 24 fcmeB(?u*_at;MJ|Sw>5O)i<#+DRr~4Rwy$7U?~SR delta 18 ZcmeB+?ugzXt;MJ?Sw>4@vz1l|GXOb(1wsG- diff --git a/bundles/org.simantics.selectionview.ontology/graph/Selectionview.pgraph b/bundles/org.simantics.selectionview.ontology/graph/Selectionview.pgraph index 58eba8471..cc1bc6200 100644 --- a/bundles/org.simantics.selectionview.ontology/graph/Selectionview.pgraph +++ b/bundles/org.simantics.selectionview.ontology/graph/Selectionview.pgraph @@ -132,7 +132,7 @@ SEL.CategoryHidden : SEL.StandardPropertyInfo SEL.StandardPropertyInfo.CategorySortingName "" SEL.StandardPropertyInfo.IsHidden true -SEL.getSpecialCategory ==> "Resource -> Resource" "Resource -> Maybe Resource" %7$mWMAs|(p8+L!!;wNmQ~ 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 literal 7756 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 b%a*HBZ`~+aPM(=%!o5A>wslt#@4fy9mhQ^S diff --git a/bundles/org.simantics.selectionview.ui.ontology/graph/SelectionViewUi.pgraph b/bundles/org.simantics.selectionview.ui.ontology/graph/SelectionViewUi.pgraph index 0fb82a9af..704e7430c 100644 --- a/bundles/org.simantics.selectionview.ui.ontology/graph/SelectionViewUi.pgraph +++ b/bundles/org.simantics.selectionview.ui.ontology/graph/SelectionViewUi.pgraph @@ -10,6 +10,10 @@ SEL = : L0.Ontology @L0.new L0.HasResourceClass "org.simantics.selectionview.ui.ontology.SelectionViewUIResources" +SEL.SCLMain : L0.SCLModule + L0.SCLModule.definition _ : L0.String + @L0.loadString "scl/SCLMain.scl" + SEL.CategoryNode : VP.NodeType VP.HasContentType "org.simantics.selectionview.CategoryNode" VP.HasBundle "org.simantics.selectionview" @@ -83,11 +87,17 @@ SEL.StandardProperties.BrowseContextStandardChildren Maybe Resource" @L0.assert VP.BrowseContext.HasVisualsContribution _ : VP.VisualsContribution VP.VisualsContribution.HasNodeType MOD.ModelingBrowseContext.Variable VP.VisualsContribution.HasRule SEL.StandardProperties.BrowseContextStandardChildren.Sorter : SEL.StandardPropertySorterRuleType + @MOD.scl SEL_BASE.getSpecialCategory "layer0Categories" "Resource -> Maybe Resource" + @L0.assert VP.BrowseContext.HasVisualsContribution + _ : VP.VisualsContribution + VP.VisualsContribution.HasNodeType MOD.ModelingBrowseContext.Variable + VP.VisualsContribution.HasRule VP.DescriptionTooltipRule SEL.StandardProperties.BrowseContextWithoutChildren Maybe Resource +layer0Categories predicate = match predicate with + L0.HasName -> Just MOD.SystemPropertyInfo + _ -> Nothing + \ No newline at end of file diff --git a/bundles/org.simantics.selectionview.ui.ontology/src/org/simantics/selectionview/ui/ontology/SelectionViewUIResources.java b/bundles/org.simantics.selectionview.ui.ontology/src/org/simantics/selectionview/ui/ontology/SelectionViewUIResources.java index cdf0fa26f..b3b474592 100644 --- a/bundles/org.simantics.selectionview.ui.ontology/src/org/simantics/selectionview/ui/ontology/SelectionViewUIResources.java +++ b/bundles/org.simantics.selectionview.ui.ontology/src/org/simantics/selectionview/ui/ontology/SelectionViewUIResources.java @@ -14,6 +14,7 @@ public class SelectionViewUIResources { public final Resource CategoryNode; public final Resource CategoryNodeLabelRule; public final Resource PropertyColumn; + public final Resource SCLMain; public final Resource StandardProperties; public final Resource StandardPropertiesBase; public final Resource StandardPropertiesBase_BrowseContext; @@ -37,6 +38,7 @@ public class SelectionViewUIResources { public static final String CategoryNode = "http://www.simantics.org/SelectionViewUI-1.1/CategoryNode"; public static final String CategoryNodeLabelRule = "http://www.simantics.org/SelectionViewUI-1.1/CategoryNodeLabelRule"; public static final String PropertyColumn = "http://www.simantics.org/SelectionViewUI-1.1/PropertyColumn"; + public static final String SCLMain = "http://www.simantics.org/SelectionViewUI-1.1/SCLMain"; public static final String StandardProperties = "http://www.simantics.org/SelectionViewUI-1.1/StandardProperties"; public static final String StandardPropertiesBase = "http://www.simantics.org/SelectionViewUI-1.1/StandardPropertiesBase"; public static final String StandardPropertiesBase_BrowseContext = "http://www.simantics.org/SelectionViewUI-1.1/StandardPropertiesBase/BrowseContext"; @@ -70,6 +72,7 @@ public class SelectionViewUIResources { CategoryNode = getResourceOrNull(graph, URIs.CategoryNode); CategoryNodeLabelRule = getResourceOrNull(graph, URIs.CategoryNodeLabelRule); PropertyColumn = getResourceOrNull(graph, URIs.PropertyColumn); + SCLMain = getResourceOrNull(graph, URIs.SCLMain); StandardProperties = getResourceOrNull(graph, URIs.StandardProperties); StandardPropertiesBase = getResourceOrNull(graph, URIs.StandardPropertiesBase); StandardPropertiesBase_BrowseContext = getResourceOrNull(graph, URIs.StandardPropertiesBase_BrowseContext); diff --git a/bundles/org.simantics.spreadsheet.common/src/org/simantics/spreadsheet/common/TreeTableCell.java b/bundles/org.simantics.spreadsheet.common/src/org/simantics/spreadsheet/common/TreeTableCell.java index 2face448f..fb80d0760 100644 --- a/bundles/org.simantics.spreadsheet.common/src/org/simantics/spreadsheet/common/TreeTableCell.java +++ b/bundles/org.simantics.spreadsheet.common/src/org/simantics/spreadsheet/common/TreeTableCell.java @@ -12,15 +12,52 @@ *******************************************************************************/ package org.simantics.spreadsheet.common; +import org.eclipse.jface.resource.FontDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.FontData; +import org.simantics.document.server.io.IFont; import org.simantics.document.server.io.ITreeTableCell; +import org.simantics.document.server.io.SimpleFont; public class TreeTableCell extends TableCell implements ITreeTableCell { private int parent = -1; + + private boolean editable = true; + private Object data; public TreeTableCell() { } + public TreeTableCell(String text, Object data, Object font, int parent, int row, int column, boolean editable) { + super(column, row, 0, 0, text, (IFont)font, null, null, false, 1, 1); + this.editable = editable; + this.parent = parent; + this.data = data; + } + + public static TreeTableCell createTreeTableCell(String text, Object data, Object font, int parent, int row, int column, boolean editable) { + return new TreeTableCell(text, data, extractIFont(font), parent, row, column, editable); + } + + private static IFont extractIFont(Object font) { + if(font instanceof FontDescriptor) { + FontDescriptor descriptor = (FontDescriptor)font; + String family = ""; + String style = ""; + int size = 12; + for(FontData d : descriptor.getFontData()) { + System.err.println("data: " + d); + family = d.getName(); + if((d.getStyle() & SWT.ITALIC) != 0) style += "Italic"; + if((d.getStyle() & SWT.BOLD) != 0) style += "Bold"; + size = d.getHeight(); + } + return new SimpleFont(family, style, size); + } + return null; + } + public void setParent(int parent) { this.parent = parent; } @@ -30,4 +67,14 @@ public class TreeTableCell extends TableCell implements ITreeTableCell { return parent; } + @Override + public Object getData() { + return data; + } + + @Override + public boolean isEditable() { + return editable; + } + } diff --git a/bundles/org.simantics.spreadsheet.graph/scl/Spreadsheet/All.scl b/bundles/org.simantics.spreadsheet.graph/scl/Spreadsheet/All.scl index ddfd3bef0..532331e55 100644 --- a/bundles/org.simantics.spreadsheet.graph/scl/Spreadsheet/All.scl +++ b/bundles/org.simantics.spreadsheet.graph/scl/Spreadsheet/All.scl @@ -10,6 +10,20 @@ importJava "org.simantics.spreadsheet.common.TableCell" where importJava "org.simantics.spreadsheet.common.TreeTableCell" where data TreeTableCell + @JavaName getData + getTreeTableCellData :: TreeTableCell -> a + + createTreeTableCell :: String -> a -> Maybe b -> Integer -> Integer -> Integer -> Boolean -> TreeTableCell + + @JavaName getText + treeTableCellText :: TreeTableCell -> String + @JavaName getFont + treeTableCellFont :: TreeTableCell -> Maybe IFont + @JavaName getRow + treeTableCellRow :: TreeTableCell -> Integer + @JavaName getColumn + treeTableCellColumn :: TreeTableCell -> Integer + importJava "org.simantics.spreadsheet.common.SpreadsheetCell" where data SpreadsheetCell -- 2.43.2