forked from jasder/antlr
add OK button, set size, add scale
[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9305]
This commit is contained in:
parent
7050d07d5b
commit
f420f4c327
|
@ -36,6 +36,7 @@ import org.antlr.v4.runtime.tree.*;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -92,6 +93,11 @@ public class TreeViewer extends JComponent {
|
||||||
protected int nodeHeightPadding = 0; // added above/below
|
protected int nodeHeightPadding = 0; // added above/below
|
||||||
protected int arcSize = 0; // make an arc in node outline?
|
protected int arcSize = 0; // make an arc in node outline?
|
||||||
|
|
||||||
|
protected int width = 800;
|
||||||
|
protected int height = 600;
|
||||||
|
|
||||||
|
protected double scale = 1.0;
|
||||||
|
|
||||||
protected Color boxColor = null; // set to a color to make it draw background
|
protected Color boxColor = null; // set to a color to make it draw background
|
||||||
|
|
||||||
protected Color highlightedBoxColor = Color.lightGray;
|
protected Color highlightedBoxColor = Color.lightGray;
|
||||||
|
@ -179,6 +185,13 @@ public class TreeViewer extends JComponent {
|
||||||
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||||
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||||
|
|
||||||
|
// AffineTransform at = g2.getTransform();
|
||||||
|
// g2.scale(
|
||||||
|
// (double) this.getWidth() / 400,
|
||||||
|
// (double) this.getHeight() / 400);
|
||||||
|
//
|
||||||
|
// g2.setTransform(at);
|
||||||
|
|
||||||
paintEdges(g, getTree().getRoot());
|
paintEdges(g, getTree().getRoot());
|
||||||
|
|
||||||
// paint the boxes
|
// paint the boxes
|
||||||
|
@ -187,38 +200,68 @@ public class TreeViewer extends JComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Graphics getComponentGraphics(Graphics g) {
|
||||||
|
Graphics2D g2d=(Graphics2D)g;
|
||||||
|
g2d.scale(scale, scale);
|
||||||
|
return super.getComponentGraphics(g2d);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
protected Rectangle2D.Double getBoundsOfNode(Tree node) {
|
protected static void showInDialog(final TreeViewer viewer) {
|
||||||
return treeLayout.getNodeBounds().get(node);
|
final JDialog dialog = new JDialog();
|
||||||
}
|
|
||||||
|
|
||||||
protected String getText(Tree tree) {
|
// Make new content pane
|
||||||
return treeTextProvider.getText(tree);
|
final Container contentPane = new JPanel();
|
||||||
}
|
contentPane.setLayout(new BorderLayout(0,0));
|
||||||
|
|
||||||
public TreeTextProvider getTreeTextProvider() {
|
|
||||||
return treeTextProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTreeTextProvider(TreeTextProvider treeTextProvider) {
|
|
||||||
this.treeTextProvider = treeTextProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void showInDialog(TreeViewer viewer) {
|
|
||||||
JDialog dialog = new JDialog();
|
|
||||||
Container contentPane = dialog.getContentPane();
|
|
||||||
((JComponent) contentPane).setBorder(BorderFactory.createEmptyBorder(
|
|
||||||
10, 10, 10, 10));
|
|
||||||
contentPane.add(viewer);
|
|
||||||
contentPane.setBackground(Color.white);
|
contentPane.setBackground(Color.white);
|
||||||
|
// contentPane.setPreferredSize(new Dimension(200, 200));
|
||||||
|
dialog.setContentPane(contentPane);
|
||||||
|
|
||||||
|
// Wrap viewer in scroll pane
|
||||||
|
JScrollPane scrollPane = new JScrollPane(viewer);
|
||||||
|
// Make it tree size up to width/height of viewer
|
||||||
|
Dimension scaledTreeSize =
|
||||||
|
viewer.treeLayout.getBounds().getBounds().getSize();
|
||||||
|
scaledTreeSize = new Dimension((int)(scaledTreeSize.width*viewer.scale),
|
||||||
|
(int)(scaledTreeSize.height*viewer.scale));
|
||||||
|
if ( scaledTreeSize.width < viewer.width ) {
|
||||||
|
viewer.setWidth(scaledTreeSize.width);
|
||||||
|
}
|
||||||
|
if ( scaledTreeSize.height < viewer.height ) {
|
||||||
|
viewer.setHeight(scaledTreeSize.height);
|
||||||
|
}
|
||||||
|
scrollPane.setPreferredSize(new Dimension(viewer.width,viewer.height));
|
||||||
|
contentPane.add(scrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Add button to bottom
|
||||||
|
JButton ok = new JButton("OK");
|
||||||
|
ok.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
dialog.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
JPanel wrapper = new JPanel(new FlowLayout(FlowLayout.CENTER));
|
||||||
|
wrapper.add(ok);
|
||||||
|
contentPane.add(wrapper, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
// make viz
|
||||||
dialog.pack();
|
dialog.pack();
|
||||||
dialog.setLocationRelativeTo(null);
|
dialog.setLocationRelativeTo(null);
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void open() {
|
public void open() {
|
||||||
showInDialog(this);
|
final TreeViewer viewer = this;
|
||||||
|
viewer.setScale(10.5);
|
||||||
|
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
showInDialog(viewer);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This does not always seem to render the postscript properly
|
/** This does not always seem to render the postscript properly
|
||||||
|
@ -239,6 +282,22 @@ public class TreeViewer extends JComponent {
|
||||||
|
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
|
|
||||||
|
protected Rectangle2D.Double getBoundsOfNode(Tree node) {
|
||||||
|
return treeLayout.getNodeBounds().get(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getText(Tree tree) {
|
||||||
|
return treeTextProvider.getText(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeTextProvider getTreeTextProvider() {
|
||||||
|
return treeTextProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTreeTextProvider(TreeTextProvider treeTextProvider) {
|
||||||
|
this.treeTextProvider = treeTextProvider;
|
||||||
|
}
|
||||||
|
|
||||||
public void setFontSize(int sz) {
|
public void setFontSize(int sz) {
|
||||||
fontSize = sz;
|
fontSize = sz;
|
||||||
font = new Font(fontName, fontStyle, fontSize);
|
font = new Font(fontName, fontStyle, fontSize);
|
||||||
|
@ -250,12 +309,12 @@ public class TreeViewer extends JComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Slow for big lists of highlighted nodes */
|
/** Slow for big lists of highlighted nodes */
|
||||||
public void addHighlightNodes(Collection<Tree> nodes) {
|
public void addHighlightedNodes(Collection<Tree> nodes) {
|
||||||
highlightedNodes = new ArrayList<Tree>();
|
highlightedNodes = new ArrayList<Tree>();
|
||||||
highlightedNodes.addAll(nodes);
|
highlightedNodes.addAll(nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeHighlightNodes(Collection<Tree> nodes) {
|
public void removeHighlightedNodes(Collection<Tree> nodes) {
|
||||||
if ( highlightedNodes!=null ) {
|
if ( highlightedNodes!=null ) {
|
||||||
// only remove exact objects defined by ==, not equals()
|
// only remove exact objects defined by ==, not equals()
|
||||||
for (Tree t : nodes) {
|
for (Tree t : nodes) {
|
||||||
|
@ -331,4 +390,28 @@ public class TreeViewer extends JComponent {
|
||||||
protected TreeForTreeLayout<Tree> getTree() {
|
protected TreeForTreeLayout<Tree> getTree() {
|
||||||
return treeLayout.getTree();
|
return treeLayout.getTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getScale() {
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScale(double scale) {
|
||||||
|
this.scale = scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue