/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cismap.commons.gui.piccolo.eventlistener;
import edu.umd.cs.piccolo.PNode;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolo.nodes.PText;
import java.awt.Color;
import java.awt.Font;
import java.awt.geom.RoundRectangle2D;
import java.util.Collection;
import java.util.LinkedList;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public class InvalidPolygonTooltip extends PNode {
//~ Enums ------------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public static enum Mode {
//~ Enum constants -----------------------------------------------------
SELECT_FEATURE, HOLE_ERROR, ENTITY_ERROR
}
//~ Instance fields --------------------------------------------------------
private final Color COLOR_BACKGROUND = new Color(255, 255, 222, 200);
private final String[] selectContent = {
"Es muss genau eine Geometrie",
"selektiert sein. Selektieren",
"Sie jetzt eine Geometrie",
"indem Sie [alt] gedrückt",
"halten, während sie auf die",
"gewünschte Geometrie",
"klicken."
};
private final String[] holeContent = {
"Löcher müssen vollständig in",
"ihrem eigenen Teil-Polygon",
"liegen, und dürfen andere",
"Teil-Polygone oder Löcher",
"nicht berühren."
};
private final String[] entityContent = {
"Teil-Polygone dürfen keine",
"anderen Teil-Polygone",
"berühren. Sie dürfen dabei",
"durchaus in Löchern liegen."
};
//~ Constructors -----------------------------------------------------------
/**
* Creates a new TransformationTooltip object.
*/
public InvalidPolygonTooltip() {
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param mode DOCUMENT ME!
*/
public void setMode(final Mode mode) {
removeAllChildren();
String title = "";
String[] content = new String[] {};
switch (mode) {
case SELECT_FEATURE: {
title = "Polygon selektieren";
content = selectContent;
}
break;
case HOLE_ERROR: {
title = "Ungültiges MultiPolygon";
content = holeContent;
}
break;
case ENTITY_ERROR: {
title = "Ungültiges MultiPolygon";
content = entityContent;
}
break;
}
setCustomText(title, content);
}
/**
* DOCUMENT ME!
*
* @param title DOCUMENT ME!
* @param content DOCUMENT ME!
*/
public void setCustomText(final String title, final String[] content) {
final PText defaultPText = new PText();
final Font defaultFont = defaultPText.getFont();
final Font boldDefaultFont = new Font(defaultFont.getName(),
defaultFont.getStyle()
+ Font.BOLD,
defaultFont.getSize());
final PText pTextTitle = new PText(title);
pTextTitle.setOffset(5, 5);
pTextTitle.setFont(boldDefaultFont);
final Collection<PNode> nodesToAdd = new LinkedList<PNode>();
nodesToAdd.add(pTextTitle);
PNode lastLabel = pTextTitle;
double maxHeight = 5 + lastLabel.getOffset().getY() + lastLabel.getHeight();
double maxWidth = lastLabel.getWidth();
for (final String text : content) {
final PText pTextContent = new PText(text);
pTextContent.setOffset(10, maxHeight);
nodesToAdd.add(pTextContent);
lastLabel = pTextContent;
maxHeight = 3 + lastLabel.getOffset().getY() + lastLabel.getHeight();
maxWidth = Math.max(maxWidth, 10 + lastLabel.getWidth());
}
maxWidth += 10;
maxHeight = maxHeight - 3 + 10;
final PPath background = new PPath(new RoundRectangle2D.Double(0, 0, maxWidth, maxHeight, 10, 10));
background.setPaint(COLOR_BACKGROUND);
for (final PNode nodeToAdd : nodesToAdd) {
background.addChild(nodeToAdd);
}
setTransparency(0.85f);
addChild(background);
}
}