/* Copyright 2008-2010 Gephi Authors : Jeremy Subtil <jeremy.subtil@gephi.org> Website : http://www.gephi.org This file is part of Gephi. Gephi is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gephi 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.preview.supervisors; import java.awt.Font; import java.util.HashSet; import java.util.Set; import org.gephi.preview.DirectedEdgeImpl; import org.gephi.preview.EdgeArrowImpl; import org.gephi.preview.EdgeMiniLabelImpl; import org.gephi.preview.api.EdgeArrow; import org.gephi.preview.api.EdgeChildColorizer; import org.gephi.preview.api.EdgeColorizer; import org.gephi.preview.api.EdgeMiniLabel; import org.gephi.preview.api.SupervisorPropery; import org.gephi.preview.api.supervisors.DirectedEdgeSupervisor; import org.gephi.preview.propertyeditors.EdgeChildColorizerPropertyEditor; import org.gephi.preview.propertyeditors.EdgeColorizerPropertyEditor; import org.gephi.preview.updaters.LabelShortener; /** * Directed edge supervisor implementation. * * @author Jérémy Subtil <jeremy.subtil@gephi.org> */ public abstract class DirectedEdgeSupervisorImpl extends EdgeSupervisorImpl implements DirectedEdgeSupervisor { protected Boolean showMiniLabelsFlag; protected Boolean shortenMiniLabelsFlag; protected Integer miniLabelMaxChar; protected Font miniLabelFont; protected Float miniLabelAddedRadius; protected EdgeChildColorizer miniLabelColorizer; protected Boolean showArrowsFlag; protected Float arrowAddedRadius; protected Float arrowSize; protected EdgeChildColorizer arrowColorizer; protected Set<DirectedEdgeImpl> supervisedEdges = new HashSet<DirectedEdgeImpl>(); /** * @see EdgeSupervisorImpl#addEdge(org.gephi.preview.EdgeImpl) */ public void addEdge(DirectedEdgeImpl edge) { super.addEdge(edge); positionEdgeMiniLabels(edge); colorEdgeMiniLabels(edge); updateEdgeMiniLabelValues(edge); positionEdgeArrows(edge); colorEdgeArrows(edge); } public Boolean getShowMiniLabelsFlag() { return showMiniLabelsFlag; } public void setShowMiniLabelsFlag(Boolean value) { showMiniLabelsFlag = value; } public Font getMiniLabelFont() { return miniLabelFont; } public void setMiniLabelFont(Font value) { miniLabelFont = value; } public Integer getMiniLabelMaxChar() { return miniLabelMaxChar; } public void setMiniLabelMaxChar(Integer value) { miniLabelMaxChar = value; updateEdgeMiniLabelValues(); } public Boolean getShortenMiniLabelsFlag() { return shortenMiniLabelsFlag; } public void setShortenMiniLabelsFlag(Boolean value) { shortenMiniLabelsFlag = value; updateEdgeMiniLabelValues(); } public Float getMiniLabelAddedRadius() { return miniLabelAddedRadius; } public void setMiniLabelAddedRadius(Float value) { miniLabelAddedRadius = value; positionEdgeMiniLabels(); } public EdgeChildColorizer getMiniLabelColorizer() { return miniLabelColorizer; } public void setMiniLabelColorizer(EdgeChildColorizer value) { miniLabelColorizer = value; colorEdgeMiniLabels(); } public Boolean getShowArrowsFlag() { return showArrowsFlag; } public void setShowArrowsFlag(Boolean value) { showArrowsFlag = value; } public Float getArrowAddedRadius() { return arrowAddedRadius; } public void setArrowAddedRadius(Float value) { arrowAddedRadius = value; positionEdgeArrows(); } public Float getArrowSize() { return arrowSize; } public void setArrowSize(Float value) { arrowSize = value; positionEdgeArrows(); } public EdgeChildColorizer getArrowColorizer() { return arrowColorizer; } public void setArrowColorizer(EdgeChildColorizer value) { arrowColorizer = value; colorEdgeArrows(); } @Override protected Set getSupervisedEdges() { return supervisedEdges; } /** * Generates the position of the given edge mini-label. * * @param edgeMiniLabel the edge mini-label to position */ private void positionEdgeMiniLabel(EdgeMiniLabelImpl edgeMiniLabel) { edgeMiniLabel.genPosition(); } /** * Generates the position of the given edge's mini-labels. * * @param edge the edge to position the mini-labels */ private void positionEdgeMiniLabels(DirectedEdgeImpl edge) { for (EdgeMiniLabel ml : edge.getMiniLabels()) { positionEdgeMiniLabel((EdgeMiniLabelImpl) ml); } } /** * Generates the position of the supervised edges's mini-labels. */ private void positionEdgeMiniLabels() { for (DirectedEdgeImpl e : supervisedEdges) { positionEdgeMiniLabels(e); } } /** * Colors the given edge mini-label. * * @param edgeMiniLabel the edge mini-label to color */ private void colorEdgeMiniLabel(EdgeMiniLabelImpl edgeMiniLabel) { miniLabelColorizer.color(edgeMiniLabel); } /** * Colors the mini-labels of the given edge. * * @param edge the edge to color the mini-labels */ private void colorEdgeMiniLabels(DirectedEdgeImpl edge) { for (EdgeMiniLabel ml : edge.getMiniLabels()) { colorEdgeMiniLabel((EdgeMiniLabelImpl) ml); } } /** * Colors the mini-labels of the supervised edges. */ private void colorEdgeMiniLabels() { for (DirectedEdgeImpl e : supervisedEdges) { colorEdgeMiniLabels(e); } } /** * Updates the edge mini-labels by shortening their value or by reverting * their original one. */ private void updateEdgeMiniLabelValues(DirectedEdgeImpl edge) { if (shortenMiniLabelsFlag) { shortenEdgeMiniLabels(edge); } else { revertEdgeMiniLabels(edge); } } /** * Updates the edge mini-labels by shortening their value or by reverting * their original ones. */ private void updateEdgeMiniLabelValues() { if (shortenMiniLabelsFlag) { shortenEdgeMiniLabels(); } else { revertEdgeMiniLabels(); } } /** * Shortens the given edge mini-label. * * @param edgeMiniLabel the edge mini-label to shorten */ private void shortenEdgeMiniLabel(EdgeMiniLabelImpl edgeMiniLabel) { LabelShortener.shortenLabel(edgeMiniLabel, miniLabelMaxChar); } /** * Shortens the mini-labels of the given edge. * * @param edge the edge to shorten the mini-labels */ private void shortenEdgeMiniLabels(DirectedEdgeImpl edge) { for (EdgeMiniLabel ml : edge.getMiniLabels()) { shortenEdgeMiniLabel((EdgeMiniLabelImpl) ml); } } /** * Shortens the mini-labels of the supervised edges. */ private void shortenEdgeMiniLabels() { for (DirectedEdgeImpl e : supervisedEdges) { shortenEdgeMiniLabels(e); } } /** * Reverts the original value of the given edge mini-label. * * @param edgeMiniLabel the edge mini-label to revert the original value */ private void revertEdgeMiniLabel(EdgeMiniLabelImpl edgeMiniLabel) { LabelShortener.revertLabel(edgeMiniLabel); } /** * Reverts the mini-labels of the given edge. * * @param edge the edge to revert the mini-labels */ private void revertEdgeMiniLabels(DirectedEdgeImpl edge) { for (EdgeMiniLabel ml : edge.getMiniLabels()) { revertEdgeMiniLabel((EdgeMiniLabelImpl) ml); } } /** * Reverts the mini-labels of the supervised edges. */ private void revertEdgeMiniLabels() { for (DirectedEdgeImpl e : supervisedEdges) { revertEdgeMiniLabels(e); } } /** * Generates the position of the given edge arrow. * * @param edgeArrow the edge arrow to position */ private void positionEdgeArrow(EdgeArrowImpl edgeArrow) { edgeArrow.genPosition(); } /** * Generates the position of the given edge's arrows. * * @param edge the edge to position the arrows */ private void positionEdgeArrows(DirectedEdgeImpl edge) { for (EdgeArrow a : edge.getArrows()) { positionEdgeArrow((EdgeArrowImpl) a); } } /** * Generates the position of the supervised edges's arrows. */ private void positionEdgeArrows() { for (DirectedEdgeImpl e : supervisedEdges) { positionEdgeArrows(e); } } /** * Colors the given edge arrow. * * @param edgeArrow the edge arrow to color */ private void colorEdgeArrow(EdgeArrowImpl edgeArrow) { arrowColorizer.color(edgeArrow); } /** * Colors the arrows of the given edge. * * @param edge the edge to color the arrows */ private void colorEdgeArrows(DirectedEdgeImpl edge) { for (EdgeArrow a : edge.getArrows()) { colorEdgeArrow((EdgeArrowImpl) a); } } /** * Colors the arrows of the supervised edges. */ private void colorEdgeArrows() { for (DirectedEdgeImpl e : supervisedEdges) { colorEdgeArrows(e); } } public SupervisorPropery[] getProperties() { final String CATEGORY = "Directed"; try { return new SupervisorPropery[]{ SupervisorPropery.createProperty(this, Boolean.class, "Directed_curvedFlag", CATEGORY, "Curved", "getCurvedFlag", "setCurvedFlag"), SupervisorPropery.createProperty(this, Float.class, "Directed_edgeScale", CATEGORY, "Thickness", "getEdgeScale", "setEdgeScale"), SupervisorPropery.createProperty(this, Boolean.class, "Directed_rescaleWeight", CATEGORY, "Rescale Weight", "getRescaleWeight", "setRescaleWeight"), SupervisorPropery.createProperty(this, EdgeColorizer.class, "Directed_colorizer", CATEGORY, "Color", "getColorizer", "setColorizer", EdgeColorizerPropertyEditor.class), SupervisorPropery.createProperty(this, Boolean.class, "Directed_showLabelsFlag", CATEGORY, "Labels", "getShowLabelsFlag", "setShowLabelsFlag"), SupervisorPropery.createProperty(this, Boolean.class, "Directed_shortenLabelsFlag", CATEGORY, "Shorten labels", "getShortenLabelsFlag", "setShortenLabelsFlag"), SupervisorPropery.createProperty(this, Integer.class, "Directed_labelMaxChar", CATEGORY, "Shorten limit", "getLabelMaxChar", "setLabelMaxChar"), SupervisorPropery.createProperty(this, Font.class, "Directed_baseLabelFont", CATEGORY, "Font", "getBaseLabelFont", "setBaseLabelFont"), SupervisorPropery.createProperty(this, EdgeChildColorizer.class, "Directed_labelColorizer", CATEGORY, "Label color", "getLabelColorizer", "setLabelColorizer", EdgeChildColorizerPropertyEditor.class), SupervisorPropery.createProperty(this, Boolean.class, "Directed_showMiniLabelsFlag", CATEGORY, "Mini-Labels", "getShowMiniLabelsFlag", "setShowMiniLabelsFlag"), SupervisorPropery.createProperty(this, Float.class, "Directed_miniLabelAddedRadius", CATEGORY, "Mini-Label radius", "getMiniLabelAddedRadius", "setMiniLabelAddedRadius"), SupervisorPropery.createProperty(this, Boolean.class, "Directed_shortenMiniLabelsFlag", CATEGORY, "Shorten Mini-Labels", "getShortenMiniLabelsFlag", "setShortenMiniLabelsFlag"), SupervisorPropery.createProperty(this, Integer.class, "Directed_miniLabelMaxChar", CATEGORY, "Mini-Label limit", "getMiniLabelMaxChar", "setMiniLabelMaxChar"), SupervisorPropery.createProperty(this, Font.class, "Directed_miniLabelFont", CATEGORY, "Mini-Label font", "getMiniLabelFont", "setMiniLabelFont"), SupervisorPropery.createProperty(this, EdgeChildColorizer.class, "Directed_miniLabelColorizer", CATEGORY, "Mini-Label color", "getMiniLabelColorizer", "setMiniLabelColorizer", EdgeChildColorizerPropertyEditor.class), SupervisorPropery.createProperty(this, Boolean.class, "Directed_showArrowsFlag", CATEGORY, "Arrows", "getShowArrowsFlag", "setShowArrowsFlag"), SupervisorPropery.createProperty(this, Float.class, "Directed_arrowAddedRadius", CATEGORY, "Arrow added radius", "getArrowAddedRadius", "setArrowAddedRadius"), SupervisorPropery.createProperty(this, Float.class, "Directed_arrowSize", CATEGORY, "Arrow size", "getArrowSize", "setArrowSize"), SupervisorPropery.createProperty(this, EdgeChildColorizer.class, "Directed_arrowColorizer", CATEGORY, "Arrow color", "getArrowColorizer", "setArrowColorizer", EdgeChildColorizerPropertyEditor.class)}; } catch (Exception e) { e.printStackTrace(); } return new SupervisorPropery[0]; } }