// 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.extensions.G6Format;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.RenderTable;
import graphtea.graph.graph.Vertex;
import graphtea.platform.Application;
import graphtea.plugins.graphgenerator.core.PositionGenerators;
import graphtea.plugins.main.GraphData;
import graphtea.ui.components.gpropertyeditor.GBasicCellRenderer;
import javax.swing.*;
import java.awt.*;
import java.math.BigDecimal;
import java.util.Vector;
/**
* @author Azin Azadi
*/
public class TableRenderer implements GBasicCellRenderer<RenderTable> {
JTable table = new JTable();
public Component getRendererComponent(final RenderTable sd) {
Object[] onames = (sd.getTitles()).toArray();
String[] names = new String[onames.length];
for(int i=0;i < onames.length;i++) {
names[i] = onames[i].toString();
}
Object[][] data = new Object[sd.size()][sd.getTitles().size()];
int i=0;
while(!sd.isEmpty()) {
Vector<Object> row = sd.poll();
for(int j=0;j < row.size();j++) {
Object o = row.get(j);
if(o instanceof Double && !o.toString().equals("NaN")) {
Double toBeTruncated = (Double) o;
o = new BigDecimal(toBeTruncated).
setScale(5, BigDecimal.ROUND_HALF_UP).doubleValue();
}
data[i][j] = o;
}
i++;
}
table = new JTable(data,names);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(event -> {
if (sd.getTitles().get(sd.getTitles().size() - 1).equals("G6"))
if (event.getValueIsAdjusting()) {
GraphModel g = G6Format.stringToGraphModel(table.getValueAt(table.getSelectedRow(),
sd.getTitles().size() - 1).toString());
Point pp[] = PositionGenerators.circle(200, 400, 250, g.numOfVertices());
int tmpcnt = 0;
for (Vertex v : g) {
v.setLocation(pp[tmpcnt]);
tmpcnt++;
}
new GraphData(Application.getBlackBoard()).core.showGraph(g);
}
});
return new JScrollPane(table);
}
}