// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.main.ui;
import graphtea.graph.graph.Edge;
import graphtea.graph.graph.GraphColoring;
import graphtea.graph.graph.Vertex;
import graphtea.platform.Application;
import graphtea.plugins.main.GraphData;
import graphtea.ui.components.gpropertyeditor.GBasicCellRenderer;
import graphtea.ui.components.gpropertyeditor.GCellRenderer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
/**
* @author Azin Azadi
*/
public class GraphColoringRenderer implements GBasicCellRenderer<GraphColoring> {
public Component getRendererComponent(GraphColoring coloring) {
final GraphColoring myColoring = new GraphColoring(coloring.graph);
myColoring.vertexColors = new HashMap<>(coloring.vertexColors);
myColoring.edgeColors = new HashMap<>(coloring.edgeColors);
myColoring.label = coloring.label;
String txt = "";
txt = "<HTML><BODY>";
if (myColoring.label != null && !myColoring.label.equals("")) {
txt = txt + "<B>" + myColoring.label + ": </B>";
}
if (myColoring.vertexColors != null && myColoring.vertexColors.size() > 0) {
txt = txt + "<B>Vertex colors: </B> ";
for (Map.Entry<Vertex, Integer> p : myColoring.vertexColors.entrySet()) {
txt = txt + p.getKey().getLabel() + ":" + p.getValue() + " , ";
}
}
if (myColoring.edgeColors != null && myColoring.edgeColors.size() > 0) {
txt = txt + "<br/><B>Edge colors: </B> ";
for (Map.Entry<Edge, Integer> p : myColoring.edgeColors.entrySet()) {
txt = txt + p.getKey().getLabel() + ":" + p.getValue() + " , ";
}
}
txt = txt + "</BODY></HTML>";
JLabel l = new JLabel(txt){
@Override
public void setForeground(Color fg) {
super.setForeground(fg);
if (fg== GCellRenderer.SELECTED_COLOR)
showOnGraph(myColoring);
}
};
l.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
showOnGraph(myColoring);
}
});
return l;
}
private void showOnGraph(GraphColoring myColoring) {
GraphData gd = new GraphData(Application.getBlackBoard());
if (gd.getGraph() == null && myColoring.graph == null)
return;
if (myColoring.graph == null) {
myColoring.applyColoring();
return;
}
if (gd.getGraph() == null) {
gd.core.showGraph(myColoring.graph);
myColoring.applyColoring();
return;
}
if (myColoring.graph.equals(gd.getGraph())) {
myColoring.applyColoring();
} else {
gd.core.showGraph(myColoring.graph);
myColoring.applyColoring();
}
}
}