diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index c506f79a..9b75562f 100644
Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ
diff --git a/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
index 6cacbf14..3426f514 100644
--- a/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
+++ b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
@@ -1,24 +1,21 @@
/*
-
- DIY Layout Creator (DIYLC).
- Copyright (c) 2009-2018 held jointly by the individual authors.
-
- This file is part of DIYLC.
-
- DIYLC is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- DIYLC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with DIYLC. If not, see .
-
-*/
+ *
+ * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors.
+ *
+ * This file is part of DIYLC.
+ *
+ * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License as published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with DIYLC. If not, see
+ * .
+ *
+ */
package org.diylc.components.misc;
import java.awt.Color;
@@ -26,9 +23,13 @@ import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
+import java.awt.geom.Rectangle2D.Double;
+import java.util.Locale;
import org.diylc.awt.StringUtils;
import org.diylc.common.HorizontalAlignment;
import org.diylc.common.ObjectCache;
@@ -46,13 +47,16 @@ import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
@ComponentDescriptor(name = "Common Node", author = "Branislav Stojkovic", category = "Misc",
- description = "Label that ties all nodes together", instanceNamePrefix = "CN", zOrder = IDIYComponent.TEXT, flexibleZOrder = true,
- bomPolicy = BomPolicy.NEVER_SHOW, transformer = TextTransformer.class)
-public class CommonNode extends AbstractComponent implements ICommonNode {
+ description = "Label that ties all nodes together", instanceNamePrefix = "CN",
+ zOrder = IDIYComponent.TEXT, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW,
+ transformer = TextTransformer.class)
+public class CommonNode extends AbstractComponent implements ICommonNode {
public static String DEFAULT_TEXT = "X";
-
- private static int BUFFER = 4;
+
+ private static int BUFFER_X = 6;
+ private static int BUFFER_Y = 4;
+
private static final int STROKE_WIDTH = 2;
private static final Color BG_COLOR = Color.lightGray;
@@ -63,24 +67,33 @@ public class CommonNode extends AbstractComponent implements ICommonNode
private Font font = LABEL_FONT;
private Color color = LABEL_COLOR;
private Color bgColor = BG_COLOR;
+ private CommonNodeShape shape = CommonNodeShape.RECTANGLE;
@Override
- public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project,
- IDrawingObserver drawingObserver) {
- g2d.setFont(font.deriveFont(Font.BOLD));
-
+ public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode,
+ Project project, IDrawingObserver drawingObserver) {
+ g2d.setFont(font);
+
double x = point.getX();
double y = point.getY();
-
+
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(STROKE_WIDTH));
-
+
FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d).getBounds();
-
- RoundRectangle2D rect = new RoundRectangle2D.Double(x - stringBounds.getWidth() / 2 - BUFFER,
- y - stringBounds.getHeight() / 2 - BUFFER, stringBounds.getWidth() + 2 * BUFFER, stringBounds.getHeight() + 2 * BUFFER,
- stringBounds.getHeight() / 2, stringBounds.getHeight() / 2);
-
+
+ Shape rect;
+ if (shape == CommonNodeShape.RECTANGLE) {
+ rect = new RoundRectangle2D.Double(x - stringBounds.getWidth() / 2 - BUFFER_X,
+ y - stringBounds.getHeight() / 2 - BUFFER_Y, stringBounds.getWidth() + 2 * BUFFER_X,
+ stringBounds.getHeight() + 2 * BUFFER_Y, stringBounds.getHeight() / 2,
+ stringBounds.getHeight() / 2);
+ } else {
+ double max = Math.max(stringBounds.getWidth(), stringBounds.getHeight());
+ rect = new Ellipse2D.Double(x - max / 2 - BUFFER_X, y - max / 2 - BUFFER_X,
+ max + 2 * BUFFER_X, max + 2 * BUFFER_X);
+ }
+
g2d.setColor(bgColor);
drawingObserver.startTrackingContinuityArea(true);
g2d.fill(rect);
@@ -88,15 +101,16 @@ public class CommonNode extends AbstractComponent implements ICommonNode
drawingObserver.stopTracking();
g2d.setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED : color);
g2d.draw(rect);
-
- StringUtils.drawCenteredText(g2d, text, x, y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
+
+ StringUtils.drawCenteredText(g2d, text, x, y, HorizontalAlignment.CENTER,
+ VerticalAlignment.CENTER);
}
@Override
public void drawIcon(Graphics2D g2d, int width, int height) {
-
+
g2d.setFont(LABEL_FONT.deriveFont(13f * width / 32).deriveFont(Font.BOLD));
-
+
String text = "B+";
FontMetrics fontMetrics = g2d.getFontMetrics();
@@ -112,7 +126,7 @@ public class CommonNode extends AbstractComponent implements ICommonNode
g2d.setColor(BG_COLOR);
g2d.fillRoundRect(4, 6, width - 8, height - 12, 6, 6);
g2d.setColor(LABEL_COLOR);
- g2d.drawRoundRect(4, 6, width - 8, height - 12, 6, 6);
+ g2d.drawRoundRect(4, 6, width - 8, height - 12, 6, 6);
g2d.drawString(text, x, y);
}
@@ -125,6 +139,30 @@ public class CommonNode extends AbstractComponent implements ICommonNode
this.font = font;
}
+ // Bold and italic fields are named to be alphabetically after Font. This is
+ // important!
+
+ @EditableProperty(name = "Font Bold")
+ public boolean getBold() {
+ return font.isBold();
+ }
+
+ public void setBold(boolean bold) {
+ if (bold) {
+ if (font.isItalic()) {
+ font = font.deriveFont(Font.BOLD + Font.ITALIC);
+ } else {
+ font = font.deriveFont(Font.BOLD);
+ }
+ } else {
+ if (font.isItalic()) {
+ font = font.deriveFont(Font.ITALIC);
+ } else {
+ font = font.deriveFont(Font.PLAIN);
+ }
+ }
+ }
+
@EditableProperty(name = "Font Size")
public int getFontSize() {
return font.getSize();
@@ -157,7 +195,7 @@ public class CommonNode extends AbstractComponent implements ICommonNode
@Override
public void setControlPoint(Point2D point, int index) {
this.point.setLocation(point);
- }
+ }
@EditableProperty(name = "Label")
public Color getColor() {
@@ -167,16 +205,25 @@ public class CommonNode extends AbstractComponent implements ICommonNode
public void setColor(Color color) {
this.color = color;
}
-
+
@EditableProperty(name = "Background")
public Color getBgColor() {
return bgColor;
}
-
+
public void setBgColor(Color bgColor) {
this.bgColor = bgColor;
}
+ @EditableProperty
+ public CommonNodeShape getShape() {
+ return shape;
+ }
+
+ public void setShape(CommonNodeShape shape) {
+ this.shape = shape;
+ }
+
@Deprecated
@Override
public String getName() {
@@ -193,7 +240,7 @@ public class CommonNode extends AbstractComponent implements ICommonNode
public void setValue(String value) {
this.text = value;
}
-
+
@Override
public String getControlPointNodeName(int index) {
return null;
@@ -203,4 +250,19 @@ public class CommonNode extends AbstractComponent implements ICommonNode
public String getCommonNodeLabel() {
return text;
}
+
+ public static enum CommonNodeShape {
+ RECTANGLE("Rectangle"), CIRCLE("Circle");
+
+ private String label;
+
+ private CommonNodeShape(String label) {
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+ }
}
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index c506f79a..9b75562f 100644
Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ