use of catdata.Pair in project fql by CategoricalData.
the class Transform method view.
@SuppressWarnings("unchecked")
public JPanel view(String src_n, String dst_n) {
List<JPanel> panels = new LinkedList<>();
LinkedList<String> sorted = new LinkedList<>(data.keySet());
sorted.sort(String::compareTo);
for (String k : sorted) {
Set<Pair<Object, Object>> xxx = data.get(k);
List<Pair<Object, Object>> table = new LinkedList<>(xxx);
Object[][] arr = new Object[table.size()][2];
int i = 0;
for (Pair<Object, Object> p : table) {
arr[i][0] = p.first;
arr[i][1] = p.second;
i++;
}
@SuppressWarnings("serial") JTable t = new JTable(arr, new Object[] { src_n, dst_n }) {
@Override
public Dimension getPreferredScrollableViewportSize() {
Dimension d = getPreferredSize();
return new Dimension(d.width, d.height);
}
};
// //t.setRowSelectionAllowed(false);
// t.setColumnSelectionAllowed(false);
// MouseListener[] listeners = t.getMouseListeners();
// for (MouseListener l : listeners) {
// t.removeMouseListener(l);
// }
TableRowSorter<?> sorter = new MyTableRowSorter(t.getModel());
t.setRowSorter(sorter);
sorter.allRowsChanged();
sorter.toggleSortOrder(0);
t.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
JPanel p = new JPanel(new GridLayout(1, 1));
p.add(new JScrollPane(t));
p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), k + " (" + xxx.size() + " rows)"));
panels.add(p);
// p.setPreferredSize(new Dimension(60, 60));
}
/*int x = (int) Math.ceil(Math.sqrt(panels.size()));
if (x == 0) {
return new JPanel();
}
JPanel panel = new JPanel(new GridLayout(x, x));
for (JPanel p : panels) {
panel.add(p);
}
panel.setBorder(BorderFactory.createEtchedBorder()); */
return FqlUtil.makeGrid(((List<JComponent>) ((Object) panels)));
}
use of catdata.Pair in project fql by CategoricalData.
the class CategoryOfElements method dot.
private static JPanel dot(String name, @SuppressWarnings("unused") Instance inst, Graph<Pair<Node, Object>, Pair<Path, Integer>> sgv, Map<Pair<Node, Object>, Map<Attribute<Node>, Object>> map0) {
String str = "";
int i = 0;
Map<Pair<Node, Object>, Integer> map = new HashMap<>();
for (Pair<Node, Object> p : sgv.getVertices()) {
String s = p.toString() + map0.get(p);
s.replace("\"", "\\\"");
// a [label="Foo"];
map.put(p, i);
str += i + " [label=\"" + s + "\"];\n";
i++;
}
for (Pair<Path, Integer> p : sgv.getEdges()) {
Pair<Node, Object> src = sgv.getSource(p);
Pair<Node, Object> dst = sgv.getDest(p);
int src_id = map.get(src);
int dst_id = map.get(dst);
str += src_id + " -> " + dst_id + " [label=\"" + p.first + "\"];\n";
}
str = "digraph " + name + " {\n" + str.trim() + "\n}";
JPanel p = new JPanel(new GridLayout(1, 1));
JTextArea area = new JTextArea(str);
JScrollPane jsp = new JScrollPane(area);
p.add(jsp);
return p;
}
use of catdata.Pair in project fql by CategoricalData.
the class CategoryOfElements method makePanel.
public static Pair<JPanel, JPanel> makePanel(String name, Instance i, Color c) {
try {
JPanel ret;
JPanel ret2;
Pair<Graph<Pair<Node, Object>, Pair<Path, Integer>>, HashMap<Pair<Node, Object>, Map<Attribute<Node>, Object>>> g = build(i);
ret = g.first.getVertexCount() == 0 ? new JPanel() : doView(c, i, g.first, g.second);
ret2 = dot(name, i, g.first, g.second);
return new Pair<>(ret, ret2);
} catch (FQLException e) {
JPanel p = new JPanel(new GridLayout(1, 1));
JTextArea a = new JTextArea(e.getMessage());
p.add(new JScrollPane(a));
return new Pair<>(p, p);
}
}
use of catdata.Pair in project fql by CategoricalData.
the class CategoryOfElements method doView.
private static JPanel doView(Color clr, @SuppressWarnings("unused") Instance inst, Graph<Pair<Node, Object>, Pair<Path, Integer>> sgv, Map<Pair<Node, Object>, Map<Attribute<Node>, Object>> map0) {
JPanel cards = new JPanel(new CardLayout());
Layout<Pair<Node, Object>, Pair<Path, Integer>> layout = new FRLayout<>(sgv);
layout.setSize(new Dimension(600, 400));
VisualizationViewer<Pair<Node, Object>, Pair<Path, Integer>> vv = new VisualizationViewer<>(layout);
Function<Pair<Node, Object>, Paint> vertexPaint = (Pair<Node, Object> i) -> clr;
DefaultModalGraphMouse<String, String> gm = new DefaultModalGraphMouse<>();
gm.setMode(Mode.TRANSFORMING);
vv.setGraphMouse(gm);
gm.setMode(Mode.PICKING);
vv.getRenderContext().setVertexLabelRenderer(new MyVertexT(cards));
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
vv.getRenderContext().setEdgeLabelTransformer((Pair<Path, Integer> t) -> t.first.toString());
vv.getRenderContext().setVertexLabelTransformer((Pair<Node, Object> t) -> t.second.toString());
JPanel ret = new JPanel(new GridLayout(1, 1));
JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
for (Pair<Node, Object> n : sgv.getVertices()) {
Map<Attribute<Node>, Object> s = map0.get(n);
Object[] columnNames = new Object[s.keySet().size()];
Object[][] rowData = new Object[1][s.keySet().size()];
int i = 0;
for (Attribute<Node> a : s.keySet()) {
columnNames[i] = a.name;
rowData[0][i] = s.get(a);
i++;
}
JPanel p = new JPanel(new GridLayout(1, 1));
JTable table = new JTable(rowData, columnNames);
JScrollPane jsp = new JScrollPane(table);
p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "Attributes for " + n.second));
p.add(jsp);
cards.add(p, n.second.toString());
}
cards.add(new JPanel(), "blank");
CardLayout cl = (CardLayout) (cards.getLayout());
cl.show(cards, "blank");
pane.add(new GraphZoomScrollPane(vv));
pane.add(cards);
pane.setResizeWeight(.8d);
ret.add(pane);
return ret;
}
use of catdata.Pair in project fql by CategoricalData.
the class FqlDisplay method doView.
@SuppressWarnings({ "unchecked" })
private JComponent doView(Graph<String, Object> sgv) {
try {
Class<?> c = Class.forName(FqlOptions.layout_prefix + DefunctGlobalOptions.debug.fql.instFlow_graph);
Constructor<?> x = c.getConstructor(Graph.class);
Layout<String, Object> layout = (Layout<String, Object>) x.newInstance(sgv);
layout.setSize(new Dimension(600, 540));
VisualizationViewer<String, Object> vv = new VisualizationViewer<>(layout);
Function<String, Paint> vertexPaint = prog.nmap::get;
DefaultModalGraphMouse<String, String> gm = new DefaultModalGraphMouse<>();
gm.setMode(Mode.TRANSFORMING);
vv.setGraphMouse(gm);
gm.setMode(Mode.PICKING);
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderContext().setEdgeLabelTransformer((Object arg0) -> ((Pair<?, ?>) arg0).second.toString());
vv.getPickedVertexState().addItemListener((ItemEvent e) -> {
if (e.getStateChange() != ItemEvent.SELECTED) {
return;
}
vv.getPickedEdgeState().clear();
String str = ((String) e.getItem());
yyy.setSelectedValue(indices.get(str), true);
});
vv.getPickedEdgeState().addItemListener((ItemEvent e) -> {
if (e.getStateChange() != ItemEvent.SELECTED) {
return;
}
vv.getPickedVertexState().clear();
Object o = ((Pair<?, ?>) e.getItem()).second;
handleInstanceFlowEdge(o);
});
vv.getRenderContext().setLabelOffset(20);
GraphZoomScrollPane zzz = new GraphZoomScrollPane(vv);
JPanel ret = new JPanel(new GridLayout(1, 1));
ret.add(zzz);
ret.setBorder(BorderFactory.createEtchedBorder());
return ret;
} catch (Throwable cnf) {
cnf.printStackTrace();
throw new RuntimeException();
}
}
Aggregations