package nars.gui.output;
import automenta.vivisect.swing.NWindow;
import automenta.vivisect.swing.PCanvas;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import nars.NAR;
import nars.entity.Sentence;
import nars.entity.Task;
import nars.entity.TruthValue;
import nars.gui.output.graph.TermSyntaxVis;
import nars.language.Term;
public class SentenceTablePanel extends TablePanel {
private final JButton syntaxGraphButton;
private PCanvas syntaxPanel=null;
public SentenceTablePanel(NAR nar) {
super(nar);
data = newModel();
table.setModel(data);
table.setAutoCreateRowSorter(true);
table.validate();
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
syntaxGraphButton.setEnabled(table.getSelectedRowCount() > 0);
}
});
table.getColumn("Type").setMaxWidth(48);
table.getColumn("Frequency").setMaxWidth(64);
table.getColumn("Confidence").setMaxWidth(64);
table.getColumn("Priority").setMaxWidth(64);
table.getColumn("Complexity").setMaxWidth(64);
table.getColumn("Time").setMaxWidth(72);
JPanel menu = new JPanel(new FlowLayout(FlowLayout.LEFT));
{
syntaxGraphButton = new JButton("Graph");
syntaxGraphButton.setEnabled(false);
syntaxGraphButton.setBackground(Color.DARK_GRAY);
syntaxGraphButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newSelectedGraphPanel();
}
});
menu.add(syntaxGraphButton);
JButton clearButton = new JButton("Clear");
clearButton.setBackground(Color.DARK_GRAY);
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
data = newModel();
table.setModel(data);
}
});
menu.add(clearButton);
}
add(menu, BorderLayout.SOUTH);
}
public DefaultTableModel newModel() {
DefaultTableModel data = new DefaultTableModel();
data.addColumn("Time");
data.addColumn("Sentence");
data.addColumn("Type");
data.addColumn("Frequency");
data.addColumn("Confidence");
data.addColumn("Complexity");
data.addColumn("Priority");
data.addColumn("ParentTask");
data.fireTableStructureChanged();
return data;
}
public void newSelectedGraphPanel() {
Term[] sel=new Term[table.getSelectedRows().length];
int k=0;
for(int i: table.getSelectedRows()) {
Sentence w=(Sentence) table.getValueAt(i, 1);
sel[k]=w.term;
k++;
}
TermSyntaxVis tt = new TermSyntaxVis(sel);
syntaxPanel = new PCanvas(tt);
syntaxPanel.setZoom(10f);
NWindow w = new NWindow("", syntaxPanel);
w.setSize(400, 400);
w.setVisible(true);
// ProcessingGraphPanel2 pgp = new ProcessingGraphPanel2(getSelectedRows(1)) {
//
// @Override
// public DirectedMultigraph getGraph() {
//
// DefaultGraphizer graphizer = new DefaultGraphizer(true, true, true, true, 0, false, false) {
//
// protected void addSentence(NARGraph g, Sentence s) {
// Term t = s.content;
// addTerm(g, t);
// //g.addEdge(s, s.content, new NARGraph.SentenceContent());
//
// if (t instanceof CompoundTerm) {
// CompoundTerm ct = ((CompoundTerm) t);
// Set<Term> contained = ct.getContainedTerms();
//
// for (Term x : contained) {
// addTerm(g, x);
// if (ct.containsTerm(x)) {
// g.addEdge(x, t, new NARGraph.TermContent());
// }
//
// for (Term y : contained) {
// addTerm(g, y);
//
// if (x != y) {
// if (x.containsTerm(y)) {
// g.addEdge(y, x, new NARGraph.TermContent());
// }
// }
// }
// }
// }
// }
//
// @Override
// public void onTime(NARGraph g, long time) {
// super.onTime(g, time);
//
// for (Object o : getItems()) {
//
// if (o instanceof Task) {
// g.addVertex(o);
// addSentence(g, ((Task) o).sentence);
// } else if (o instanceof Sentence) {
// g.addVertex(o);
// addSentence(g, (Sentence) o);
// }
// }
// //add sentences
// }
//
// };
//
// app.updating = true;
//
// graphizer.setShowSyntax(showSyntax);
//
// NARGraph g = new NARGraph();
// g.add(nar, newSelectedGraphFilter(), graphizer);
// return g;
// }
//
// @Override
// public int edgeColor(Object edge) {
// return NARSwing.getColor(edge.toString(), 0.5f, 0.5f).getRGB();
// }
//
// @Override
// public float edgeWeight(Object edge) {
// return 10;
// }
//
// @Override
// public int vertexColor(Object vertex) {
// return NARSwing.getColor(vertex.toString(), 0.5f, 0.5f).getRGB();
// }
//
// };
// NWindow w = new NWindow("", pgp);
// w.setSize(400, 400);
// w.setVisible(true);
}
@Override
public void output(Class c, Object o) {
if (o instanceof Task) {
Task t = (Task) o;
float priority = t.getPriority();
Sentence s = t.sentence;
float freq = -1;
float conf = -1;
TruthValue truth = s.truth;
if (truth != null) {
freq = truth.getFrequency();
conf = truth.getConfidence();
}
Task pt = t.getParentTask();
String parentTask = (pt != null) ? pt.toStringExternal() : "";
//TODO use table sort instead of formatting numbers with leading '0's
data.addRow(new Object[]{
String.format("%08d", nar.time()),
s,
s.punctuation,
freq == -1 ? "" : freq,
conf == -1 ? "" : conf,
String.format("%03d", s.term.getComplexity()),
priority,
parentTask
});
}
}
}