001: package org.cougaar.core.qos.frame.visualizer;
002:
003: import java.awt.BorderLayout;
004: import java.awt.Component;
005: import java.awt.Dimension;
006: import java.awt.event.ActionEvent;
007: import java.awt.event.WindowAdapter;
008: import java.awt.event.WindowEvent;
009: import java.io.PrintWriter;
010: import java.io.StringWriter;
011: import java.net.URL;
012:
013: import javax.swing.AbstractAction;
014: import javax.swing.Box;
015: import javax.swing.ButtonGroup;
016: import javax.swing.JButton;
017: import javax.swing.JFrame;
018: import javax.swing.JLabel;
019: import javax.swing.JPanel;
020: import javax.swing.JRadioButton;
021: import javax.swing.JScrollPane;
022: import javax.swing.JTabbedPane;
023:
024: import org.cougaar.core.qos.frame.visualizer.tree.ContainerTreeView;
025: import org.cougaar.core.qos.frame.visualizer.util.HTMLTreeWriter;
026: import org.cougaar.core.qos.frame.visualizer.util.ViewConfigParser;
027: import org.cougaar.core.service.ThreadService;
028:
029: /**
030: * Created by IntelliJ IDEA.
031: * User: mwalczak
032: * Date: Apr 15, 2005
033: * Time: 12:43:22 PM
034: * To change this template use File | Settings | File Templates.
035: */
036: public class DisplayWindow extends JFrame { //implements ChangeListener {
037: Display display;
038: ContainerTreeView containerView;
039:
040: // This view can't handle relation cycles, so remove it for now
041: // FrameTreeView frameView;
042:
043: FrameSnapshotView frameSnapshotView;
044: JTabbedPane tabbedPane;
045: FrameModel frameModel;
046:
047: public DisplayWindow(FrameModel frameModel, URL xmlFile,
048: ThreadService tsvc) {
049: super ("");
050: this .frameModel = frameModel;
051: //frameModel.setDisplayWindow(this);
052: tabbedPane = new JTabbedPane();
053: display = new Display(frameModel, xmlFile, tsvc);
054: Component controlPanel = display.getControlPanel();
055: JPanel displPanel = new JPanel(new BorderLayout());
056: displPanel.add(display, BorderLayout.CENTER);
057: displPanel.add(controlPanel, BorderLayout.SOUTH);
058: containerView = new ContainerTreeView(frameModel, display);
059: // frameView = new FrameTreeView(frameModel);
060: frameSnapshotView = new FrameSnapshotView(containerView);
061:
062: tabbedPane.addTab("Graphic", displPanel);
063: tabbedPane.addTab("View Tree", containerView);
064: // tabbedPane.addTab("Frames", frameView);
065: tabbedPane.addTab("Snapshots", frameSnapshotView);
066:
067: ViewConfigParser.WindowSpec w = display.getWindowSpec();
068: String title = w.getTitle();
069: Dimension d = w.getSize();
070: addWindowListener(new WindowAdapter() {
071: public void windowClosing(WindowEvent e) {
072: System.exit(0);
073: }
074:
075: public void windowDeiconified(WindowEvent e) { /*display.startClock(); display.animating.start();*/
076: }
077:
078: public void windowIconified(WindowEvent e) {
079: /* if (display.animating != null) {
080: display.animating.stop();
081: }
082: display.bimg = null;; */
083: }
084: });
085: getContentPane().setLayout(new BorderLayout());
086: getContentPane().add(tabbedPane, BorderLayout.CENTER);
087: //getContentPane().add(controlPanel, BorderLayout.SOUTH);
088: setTitle(title);
089: pack();
090: setSize(d);
091: setVisible(true);
092: //display.addChangeListener(this);
093: display.reset();
094:
095: //ViewConfigWriter writer = new ViewConfigWriter();
096: //writer.generate(this, "testingSpec.xml", 5, 5);
097: }
098:
099: public Display getDisplay() {
100: return display;
101: }
102:
103: public ShapeGraphic findShape(org.cougaar.core.qos.frame.Frame f) {
104: return frameModel.getGraphic(f); //display.findShape(f);
105: }
106:
107: class FrameSnapshotView extends JPanel {
108: // FrameTreeView frameTreeView;
109: ContainerTreeView containerView;
110: JLabel htmlView;
111: JRadioButton frameTree, containerTree;
112: boolean showFrameView = true;
113:
114: public FrameSnapshotView(
115: /*FrameTreeView frameView, */ContainerTreeView containerView) {
116: super (new BorderLayout());
117: // this.frameTreeView = frameView;
118: this .containerView = containerView;
119:
120: Box buttonBox = Box.createHorizontalBox();
121: buttonBox.add(Box.createHorizontalGlue());
122:
123: frameTree = new JRadioButton(new FrameTreeAction());
124: frameTree.setSelected(true);
125: containerTree = new JRadioButton(new ContainerTreeAction());
126:
127: ButtonGroup group = new ButtonGroup();
128: group.add(frameTree);
129: group.add(containerTree);
130:
131: buttonBox.add(frameTree);
132: buttonBox.add(containerTree);
133: buttonBox.add(new JButton(new RefreshAction()));
134: add(buttonBox, BorderLayout.NORTH);
135:
136: htmlView = new JLabel();
137: JScrollPane sp = new JScrollPane(htmlView);
138: add(sp, BorderLayout.CENTER);
139: }
140:
141: public void doRefresh() {
142: //TreeNode root = frameTreeView.getRootNode();
143: StringWriter sw = new StringWriter();
144: PrintWriter w = new PrintWriter(sw);
145: if (showFrameView) {
146: // frameTreeView.rebuildTree();
147: // HTMLTreeWriter.write(w, frameTreeView.getRootNode(), 5,5);
148: } else {
149: containerView.rebuildTree();
150: HTMLTreeWriter.write(w, containerView.getRootNode(), 5,
151: 5);
152: }
153:
154: htmlView.setText(sw.toString());
155: }
156:
157: class RefreshAction extends AbstractAction {
158: public RefreshAction() {
159: super ("Refresh");
160: }
161:
162: public void actionPerformed(ActionEvent e) {
163: doRefresh();
164: }
165: }
166:
167: class ContainerTreeAction extends AbstractAction {
168: public ContainerTreeAction() {
169: super ("View Tree");
170: }
171:
172: public void actionPerformed(ActionEvent e) {
173: FrameSnapshotView.this .showFrameView = false;
174: }
175: }
176:
177: class FrameTreeAction extends AbstractAction {
178: public FrameTreeAction() {
179: super ("Frame Tree");
180: }
181:
182: public void actionPerformed(ActionEvent e) {
183: FrameSnapshotView.this .showFrameView = true;
184: }
185: }
186:
187: }
188:
189: }
|