X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.template2d.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Ftemplate2d%2Fui%2Fdiagram%2Fadapter%2FDrawingBorderStyle.java;h=db4715582924bb5ba4dde94fd69afd72c7844f3a;hb=refs%2Fchanges%2F38%2F238%2F2;hp=c5783e7c3f89da4667f876237fbc2895d877b66d;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/diagram/adapter/DrawingBorderStyle.java b/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/diagram/adapter/DrawingBorderStyle.java index c5783e7c3..db4715582 100644 --- a/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/diagram/adapter/DrawingBorderStyle.java +++ b/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/diagram/adapter/DrawingBorderStyle.java @@ -1,275 +1,275 @@ -/******************************************************************************* - * Copyright (c) 2012 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.modeling.template2d.ui.diagram.adapter; - - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.geom.Line2D; - -import org.simantics.databoard.Bindings; -import org.simantics.databoard.annotations.Optional; -import org.simantics.databoard.util.Bean; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.diagram.G2DUtils; -import org.simantics.diagram.function.All; -import org.simantics.diagram.profile.StyleBase; -import org.simantics.diagram.stubs.G2DResource; -import org.simantics.g2d.scenegraph.SceneGraphConstants; -import org.simantics.modeling.template2d.ontology.Template2dResource; -import org.simantics.scenegraph.g2d.G2DParentNode; -import org.simantics.scenegraph.g2d.G2DSceneGraph; -import org.simantics.scenegraph.g2d.nodes.ShapeNode; -import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode; -import org.simantics.scenegraph.profile.DataNodeMap; -import org.simantics.scenegraph.profile.EvaluationContext; -import org.simantics.scenegraph.profile.common.ProfileVariables; -import org.simantics.utils.page.PageOrientation; - -public class DrawingBorderStyle extends StyleBase { - private static final String BORDER_NODE = "template>border"; - - private static int TOP_INDEX = 0; - private static int RIGHT_INDEX = 1; - private static int BOTTOM_INDEX = 2; - private static int LEFT_INDEX = 3; - - private static int HEIGHT_INDEX = 1; - private static int WIDTH_INDEX = 0; - - public static class StyleInfo extends Bean { - @Optional - public float[] pageSize = null; - @Optional - public float[] margin = null; - @Optional - public float[] borderSize = null; - @Optional - public float[] padding = null; - @Optional - public PageOrientation orientation=null; - @Optional - public float rgba[] = null; - @Optional - public Resource template = null; - }; - - - @Override - public StyleInfo calculateStyle(ReadGraph graph, Resource runtimeDiagram, - Resource entry, Resource groupItem, Variable activeComposite) - throws DatabaseException { -// DiagramResource DIA = DiagramResource.getInstance(graph); -// ModelingResources MOD = ModelingResources.getInstance(graph); -// StructuralResource2 STR = StructuralResource2.getInstance(graph); - Template2dResource TEMPLATE2D = Template2dResource.getInstance(graph); - -// Layer0 L0 = Layer0.getInstance(graph); - G2DResource G2D = G2DResource.getInstance(graph); - - StyleInfo info = new StyleInfo(); - info.template = All.getTemplate(graph, runtimeDiagram); - - //info.init(); - - if (info.template == null) - return null; - - info.margin = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasMargin, Bindings.FLOAT_ARRAY); - if (info.margin == null) - return null; - - info.padding = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasPadding, Bindings.FLOAT_ARRAY); - - Resource orientation = graph.getPossibleObject(info.template, TEMPLATE2D.HasPageOrientation); - info.orientation = PageOrientation.Portrait; - if (orientation != null && orientation.equals(TEMPLATE2D.PageOrientation_Landscape)) - info.orientation = PageOrientation.Landscape; - - Resource page = graph.getPossibleObject(info.template, TEMPLATE2D.HasPage); - if (page == null) - return null; - - Resource border = graph.getPossibleObject(info.template, TEMPLATE2D.HasBorder); - if (border == null) - return null; - - info.pageSize = graph.getPossibleRelatedValue(page, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY); - if (info.pageSize == null) - return null; - - Resource rColor = graph.getPossibleObject(border, G2D.HasColor); - Color color = null; - if (rColor != null) - color = (Color) G2DUtils.getObject(graph, rColor); - if (color == null) - color = new Color(0, 0, 0); - - info.rgba = new float[4]; - color.getRGBComponents(info.rgba); - - info.borderSize = graph.getPossibleRelatedValue(border, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY); - if (info.borderSize == null) - return null; - - return info; - } - - @Override - public void applyStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item, StyleInfo info) { - //super.applyStyleForItem(evaluationContext, map, item, value); -// final INode node = map.getNode(item); -// if (node == null) { -// evaluationContext.update(); -// // TODO: continue or return? -// return; -// } - if (info == null) - return; - - float[] pageSize = info.pageSize; - float[] margin = extract(info.margin); - float[] borderSize = extract(info.borderSize); - //float[] padding = extract(info.padding); - - if(pageSize == null || pageSize.length != 2 || margin == null || borderSize == null) - return; - - if (info.orientation == PageOrientation.Portrait && pageSize[WIDTH_INDEX] > pageSize[HEIGHT_INDEX]){ - float tmp = pageSize[HEIGHT_INDEX]; - pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX]; - pageSize[WIDTH_INDEX] = tmp; - } - if (info.orientation == PageOrientation.Landscape && pageSize[WIDTH_INDEX] < pageSize[HEIGHT_INDEX]){ - float tmp = pageSize[HEIGHT_INDEX]; - pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX]; - pageSize[WIDTH_INDEX] = tmp; - } - - Line2D[] borders = new Line2D[4]; - borders[TOP_INDEX] = new Line2D.Float(margin[LEFT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f)); - borders[BOTTOM_INDEX] = new Line2D.Float(margin[LEFT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); - borders[LEFT_INDEX] = new Line2D.Float(margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); - borders[RIGHT_INDEX] = new Line2D.Float(pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); - - - G2DSceneGraph sg = evaluationContext.getSceneGraph(); - if (sg == null) - return; - //NodeUtil.printSceneGraph(sg); - G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME); - //NodeUtil.lookup(sg, SceneGraphConstants.NAVIGATION_NODE_NAME, G2DParentNode.class); - if (nav == null) - return; - - cleanupStyleForItem(evaluationContext, map, item); - - RTreeNode pageTemplate = ProfileVariables.claimChild(evaluationContext.getSceneGraph(), - SceneGraphConstants.NAVIGATION_NODE_NAME, BORDER_NODE, RTreeNode.class, //SingleElementNode.class, - evaluationContext); - if (pageTemplate == null) - return; - - pageTemplate.setZIndex(1); - // pageTemplate.setVisible(true); - -// Path2D path = new Path2D.Float(); -// -// path.append(line, false); - -// BasicStroke[] strokes = new BasicStroke[4]; - //GeneralPath p = new GeneralPath(); - - for (int i=0;i<4;i++){ -// if (i==1 || i == 3) -// continue; - Line2D line = borders[i]; - //Rectangle2D rect = new Rectangle2D.Float(0,0,100,100); - if (borderSize[i] < 0) - continue; - BasicStroke stroke = new BasicStroke(borderSize[i], BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); - ShapeNode shape = pageTemplate.addNode("border_" + i, ShapeNode.class); // SingleElementNode - shape.setShape(line); - shape.setScaleStroke(false); - shape.setStroke(stroke); - shape.setFill(false); - shape.setColor(new Color(info.rgba[0], info.rgba[1], info.rgba[2], info.rgba[3])); - if (i == TOP_INDEX || i == BOTTOM_INDEX) - shape.setZIndex(10); - -// System.err.println(borderSize[i]); -// System.err.print(borders[i].getX1()); -// System.err.print("," + borders[i].getY1()); -// System.err.print("," + borders[i].getX2()); -// System.err.println("," + borders[i].getY2()); -// if (i == 2){ -// BasicStroke stroke2 = new BasicStroke(0.1f); -// ShapeNode shape2 = pageTemplate.addNode("border_" + 4, ShapeNode.class); // SingleElementNode -// shape2.setShape(line); -// shape2.setScaleStroke(true); -// shape2.setStroke(stroke2); -// shape2.setFill(false); -// shape2.setZIndex(10); -// shape2.setColor(new Color(0, 0, 0)); -// } - } - -// if (DebugPolicy.DEBUG_PROFILE_STYLE_APPLICATION) -// System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value); - } - - protected void cleanupStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item) { - ProfileVariables.denyChild(evaluationContext.getSceneGraph(), SceneGraphConstants.NAVIGATION_NODE_NAME, - BORDER_NODE); - // System.err.println("template/border removed"); - } - - @Override - public String toString() { - return "Border style"; - } - - private float[] extract(float[] settings){ - float[] ret = new float[]{0.0f,0.0f,0.0f,0.0f}; - if (settings == null || settings.length == 0 || settings.length > 4){ - return null; - } - if (settings.length == 1){ - ret[TOP_INDEX] = settings[0]; - ret[BOTTOM_INDEX] = settings[0]; - ret[LEFT_INDEX] = settings[0]; - ret[RIGHT_INDEX] = settings[0]; - } - if (settings.length == 2){ - ret[TOP_INDEX] = settings[0]; - ret[BOTTOM_INDEX] = settings[0]; - ret[LEFT_INDEX] = settings[1]; - ret[RIGHT_INDEX] = settings[1]; - } - if (settings.length == 3){ - ret[TOP_INDEX] = settings[0]; - ret[BOTTOM_INDEX] = settings[2]; - ret[LEFT_INDEX] = settings[1]; - ret[RIGHT_INDEX] = settings[1]; - } - if (settings.length == 4){ - ret[TOP_INDEX] = settings[0]; - ret[RIGHT_INDEX] = settings[1]; - ret[BOTTOM_INDEX] = settings[2]; - ret[LEFT_INDEX] = settings[3]; - } - return ret; - } -} +/******************************************************************************* + * Copyright (c) 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.modeling.template2d.ui.diagram.adapter; + + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.geom.Line2D; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.annotations.Optional; +import org.simantics.databoard.util.Bean; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.diagram.G2DUtils; +import org.simantics.diagram.function.All; +import org.simantics.diagram.profile.StyleBase; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.g2d.scenegraph.SceneGraphConstants; +import org.simantics.modeling.template2d.ontology.Template2dResource; +import org.simantics.scenegraph.g2d.G2DParentNode; +import org.simantics.scenegraph.g2d.G2DSceneGraph; +import org.simantics.scenegraph.g2d.nodes.ShapeNode; +import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode; +import org.simantics.scenegraph.profile.DataNodeMap; +import org.simantics.scenegraph.profile.EvaluationContext; +import org.simantics.scenegraph.profile.common.ProfileVariables; +import org.simantics.utils.page.PageOrientation; + +public class DrawingBorderStyle extends StyleBase { + private static final String BORDER_NODE = "template>border"; + + private static int TOP_INDEX = 0; + private static int RIGHT_INDEX = 1; + private static int BOTTOM_INDEX = 2; + private static int LEFT_INDEX = 3; + + private static int HEIGHT_INDEX = 1; + private static int WIDTH_INDEX = 0; + + public static class StyleInfo extends Bean { + @Optional + public float[] pageSize = null; + @Optional + public float[] margin = null; + @Optional + public float[] borderSize = null; + @Optional + public float[] padding = null; + @Optional + public PageOrientation orientation=null; + @Optional + public float rgba[] = null; + @Optional + public Resource template = null; + }; + + + @Override + public StyleInfo calculateStyle(ReadGraph graph, Resource runtimeDiagram, + Resource entry, Resource groupItem, Variable activeComposite) + throws DatabaseException { +// DiagramResource DIA = DiagramResource.getInstance(graph); +// ModelingResources MOD = ModelingResources.getInstance(graph); +// StructuralResource2 STR = StructuralResource2.getInstance(graph); + Template2dResource TEMPLATE2D = Template2dResource.getInstance(graph); + +// Layer0 L0 = Layer0.getInstance(graph); + G2DResource G2D = G2DResource.getInstance(graph); + + StyleInfo info = new StyleInfo(); + info.template = All.getTemplate(graph, runtimeDiagram); + + //info.init(); + + if (info.template == null) + return null; + + info.margin = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasMargin, Bindings.FLOAT_ARRAY); + if (info.margin == null) + return null; + + info.padding = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasPadding, Bindings.FLOAT_ARRAY); + + Resource orientation = graph.getPossibleObject(info.template, TEMPLATE2D.HasPageOrientation); + info.orientation = PageOrientation.Portrait; + if (orientation != null && orientation.equals(TEMPLATE2D.PageOrientation_Landscape)) + info.orientation = PageOrientation.Landscape; + + Resource page = graph.getPossibleObject(info.template, TEMPLATE2D.HasPage); + if (page == null) + return null; + + Resource border = graph.getPossibleObject(info.template, TEMPLATE2D.HasBorder); + if (border == null) + return null; + + info.pageSize = graph.getPossibleRelatedValue(page, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY); + if (info.pageSize == null) + return null; + + Resource rColor = graph.getPossibleObject(border, G2D.HasColor); + Color color = null; + if (rColor != null) + color = (Color) G2DUtils.getObject(graph, rColor); + if (color == null) + color = new Color(0, 0, 0); + + info.rgba = new float[4]; + color.getRGBComponents(info.rgba); + + info.borderSize = graph.getPossibleRelatedValue(border, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY); + if (info.borderSize == null) + return null; + + return info; + } + + @Override + public void applyStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item, StyleInfo info) { + //super.applyStyleForItem(evaluationContext, map, item, value); +// final INode node = map.getNode(item); +// if (node == null) { +// evaluationContext.update(); +// // TODO: continue or return? +// return; +// } + if (info == null) + return; + + float[] pageSize = info.pageSize; + float[] margin = extract(info.margin); + float[] borderSize = extract(info.borderSize); + //float[] padding = extract(info.padding); + + if(pageSize == null || pageSize.length != 2 || margin == null || borderSize == null) + return; + + if (info.orientation == PageOrientation.Portrait && pageSize[WIDTH_INDEX] > pageSize[HEIGHT_INDEX]){ + float tmp = pageSize[HEIGHT_INDEX]; + pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX]; + pageSize[WIDTH_INDEX] = tmp; + } + if (info.orientation == PageOrientation.Landscape && pageSize[WIDTH_INDEX] < pageSize[HEIGHT_INDEX]){ + float tmp = pageSize[HEIGHT_INDEX]; + pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX]; + pageSize[WIDTH_INDEX] = tmp; + } + + Line2D[] borders = new Line2D[4]; + borders[TOP_INDEX] = new Line2D.Float(margin[LEFT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f)); + borders[BOTTOM_INDEX] = new Line2D.Float(margin[LEFT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); + borders[LEFT_INDEX] = new Line2D.Float(margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); + borders[RIGHT_INDEX] = new Line2D.Float(pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f)); + + + G2DSceneGraph sg = evaluationContext.getSceneGraph(); + if (sg == null) + return; + //NodeUtil.printSceneGraph(sg); + G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME); + //NodeUtil.lookup(sg, SceneGraphConstants.NAVIGATION_NODE_NAME, G2DParentNode.class); + if (nav == null) + return; + + cleanupStyleForItem(evaluationContext, map, item); + + RTreeNode pageTemplate = ProfileVariables.claimChild(evaluationContext.getSceneGraph(), + SceneGraphConstants.NAVIGATION_NODE_NAME, BORDER_NODE, RTreeNode.class, //SingleElementNode.class, + evaluationContext); + if (pageTemplate == null) + return; + + pageTemplate.setZIndex(1); + // pageTemplate.setVisible(true); + +// Path2D path = new Path2D.Float(); +// +// path.append(line, false); + +// BasicStroke[] strokes = new BasicStroke[4]; + //GeneralPath p = new GeneralPath(); + + for (int i=0;i<4;i++){ +// if (i==1 || i == 3) +// continue; + Line2D line = borders[i]; + //Rectangle2D rect = new Rectangle2D.Float(0,0,100,100); + if (borderSize[i] < 0) + continue; + BasicStroke stroke = new BasicStroke(borderSize[i], BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); + ShapeNode shape = pageTemplate.addNode("border_" + i, ShapeNode.class); // SingleElementNode + shape.setShape(line); + shape.setScaleStroke(false); + shape.setStroke(stroke); + shape.setFill(false); + shape.setColor(new Color(info.rgba[0], info.rgba[1], info.rgba[2], info.rgba[3])); + if (i == TOP_INDEX || i == BOTTOM_INDEX) + shape.setZIndex(10); + +// System.err.println(borderSize[i]); +// System.err.print(borders[i].getX1()); +// System.err.print("," + borders[i].getY1()); +// System.err.print("," + borders[i].getX2()); +// System.err.println("," + borders[i].getY2()); +// if (i == 2){ +// BasicStroke stroke2 = new BasicStroke(0.1f); +// ShapeNode shape2 = pageTemplate.addNode("border_" + 4, ShapeNode.class); // SingleElementNode +// shape2.setShape(line); +// shape2.setScaleStroke(true); +// shape2.setStroke(stroke2); +// shape2.setFill(false); +// shape2.setZIndex(10); +// shape2.setColor(new Color(0, 0, 0)); +// } + } + +// if (DebugPolicy.DEBUG_PROFILE_STYLE_APPLICATION) +// System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value); + } + + protected void cleanupStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item) { + ProfileVariables.denyChild(evaluationContext.getSceneGraph(), SceneGraphConstants.NAVIGATION_NODE_NAME, + BORDER_NODE); + // System.err.println("template/border removed"); + } + + @Override + public String toString() { + return "Border style"; + } + + private float[] extract(float[] settings){ + float[] ret = new float[]{0.0f,0.0f,0.0f,0.0f}; + if (settings == null || settings.length == 0 || settings.length > 4){ + return null; + } + if (settings.length == 1){ + ret[TOP_INDEX] = settings[0]; + ret[BOTTOM_INDEX] = settings[0]; + ret[LEFT_INDEX] = settings[0]; + ret[RIGHT_INDEX] = settings[0]; + } + if (settings.length == 2){ + ret[TOP_INDEX] = settings[0]; + ret[BOTTOM_INDEX] = settings[0]; + ret[LEFT_INDEX] = settings[1]; + ret[RIGHT_INDEX] = settings[1]; + } + if (settings.length == 3){ + ret[TOP_INDEX] = settings[0]; + ret[BOTTOM_INDEX] = settings[2]; + ret[LEFT_INDEX] = settings[1]; + ret[RIGHT_INDEX] = settings[1]; + } + if (settings.length == 4){ + ret[TOP_INDEX] = settings[0]; + ret[RIGHT_INDEX] = settings[1]; + ret[BOTTOM_INDEX] = settings[2]; + ret[LEFT_INDEX] = settings[3]; + } + return ret; + } +}