package nars.gui.output;
import com.mxgraph.layout.mxCompactTreeLayout;
import com.mxgraph.layout.mxFastOrganicLayout;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxConstants;
import java.awt.BorderLayout;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import nars.NAR;
import nars.gui.util.DefaultGraphizer;
import nars.gui.util.NARGraph;
import static nars.gui.util.NARGraph.IncludeEverything;
import org.jgrapht.Graph;
import org.jgrapht.ext.JGraphXAdapter;
/**
*
* https://github.com/jgrapht/jgrapht/blob/master/jgrapht-demo/src/main/java/org/jgrapht/demo/JGraphXAdapterDemo.java
*/
public class JGraphXGraphPanel extends JPanel {
private final JGraphXAdapter jgxAdapter;
public JGraphXGraphPanel(Graph g) {
super(new BorderLayout());
// create a visualization using JGraph, via an adapter
jgxAdapter = new JGraphXAdapter(g) {
};
jgxAdapter.setMultigraph(true);
jgxAdapter.setEdgeLabelsMovable(false);
jgxAdapter.setVertexLabelsMovable(false);
jgxAdapter.setAutoOrigin(true);
jgxAdapter.setLabelsClipped(true);
//System.out.println(jgxAdapter.getStylesheet().getDefaultEdgeStyle());
//{perimeter=com.mxgraph.view.mxPerimeter$1@7b3300e5, shape=rectangle, fontColor=#774400, strokeColor=#6482B9, fillColor=#C3D9FF, align=center, verticalAlign=middle}
Map<String, Object> vstyle = jgxAdapter.getStylesheet().getDefaultVertexStyle();
vstyle.put("fillColor", "#CCCCCC");
//{endArrow=classic, shape=connector, fontColor=#446299, strokeColor=#6482B9, align=center, verticalAlign=middle}
Map<String, Object> estyle = jgxAdapter.getStylesheet().getDefaultEdgeStyle();
estyle.put("strokeColor", "#333333");
estyle.put("fontColor", "#333333");
estyle.put(mxConstants.STYLE_STROKEWIDTH, 2);
mxGraphComponent mxc = new mxGraphComponent(jgxAdapter) {
};
mxc.setAntiAlias(true);
mxc.setConnectable(false);
mxc.setExportEnabled(false);
mxc.setFoldingEnabled(false);
mxc.setPanning(true);
mxc.setTextAntiAlias(true);
add(mxc, BorderLayout.CENTER);
/*
mxOrganicLayout layout =
new mxCompactTreeLayout(jgxAdapter);
new mxOrganicLayout(jgxAdapter);
//new mxCircleLayout(jgxAdapter);
layout.setEdgeLengthCostFactor(0.001);
*/
/*
{
mxCompactTreeLayout layout =
new mxCompactTreeLayout(jgxAdapter);
layout.setLevelDistance(40);
layout.setNodeDistance(50);
layout.setEdgeRouting(true);
layout.setHorizontal(false);
layout.setMoveTree(true);
layout.setResizeParent(false);
layout.execute(jgxAdapter.getDefaultParent());
}
*/
{
mxFastOrganicLayout layout =
//new mxCompactTreeLayout(jgxAdapter);
new mxFastOrganicLayout(jgxAdapter);
//new mxCircleLayout(jgxAdapter);
layout.setForceConstant(400);
layout.setMaxIterations(2000);
layout.setUseBoundingBox(true);
layout.execute(jgxAdapter.getDefaultParent());
}
jgxAdapter.setConnectableEdges(false);
jgxAdapter.setCellsDisconnectable(false);
jgxAdapter.setEdgeLabelsMovable(false);
//jgxAdapter.setCellsLocked(true);
}
public JGraphXGraphPanel(NAR n) {
this(new NARGraph().add(n, IncludeEverything, new DefaultGraphizer(true,true,true,true,3,false, false, null)));
}
// public static void main(String[] args) {
// NAR n = new NAR();
//
// /*
// new TextInput(n, "<a --> b>.");
// new TextInput(n, "<b --> c>.");
// new TextInput(n, "<d <-> c>. %0.75;0.90%");
// new TextInput(n, "<a --> c>?");
// new TextInput(n, "<a --> d>?");
// n.run(12);
// */
//
// n.addInput("<0 --> num>. %1.00;0.90% {0 : 1}");
// n.addInput("<<$1 --> num> ==> <(*,$1) --> num>>. %1.00;0.90% {0 : 2}");
// n.addInput("<(*,(*,(*,0))) --> num>? {0 : 3}");
//
// n.run(220);
//
//
//
// Window w = new Window("GraphPanel", new JGraphXGraphPanel(n)) {
//
// @Override protected void close() { }
//
// };
// w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// w.setSize(1200,900);
// w.setVisible(true);
// }
}