/* Author: Jeff Dalton * Updated: Mon Dec 3 20:47:54 2001 by Jeff Dalton * Copyright: (c) 2001, AIAI, University of Edinburgh */ package ix.ileed; import javax.swing.*; import java.awt.Toolkit; import java.awt.Container; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Color; import java.awt.event.*; import ix.ip2.*; import ix.ideel.IssueViewer; import ix.ideel.IssueViewingTable; import ix.iview.*; import ix.iface.util.LogoPanel; import ix.util.*; /** * The main frame of the I-LEED user interface. */ class IleedFrame extends Ip2Frame implements ActionListener { BasicIleed ileed; Container contentPane; IssueViewingTable issueViewer; // s.b. just IssueViewer? /\/ SimpleProcessViewer processViewer; // s.b. something more generic /\/ IleedFrame(BasicIleed ileed) { super(ileed.displayName); this.ileed = ileed; setUp(); } protected void setUp() { issueViewer = (IssueViewingTable)ileed.issueViewer; processViewer = (SimpleProcessViewer)ileed.processViewer; contentPane = getContentPane(); // Layout manager defaults to BorderLayout, // but we want a BoxLayout. // contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); contentPane.setLayout(new BorderLayout()); // Menu Bar setJMenuBar(makeMenuBar()); // Package issue viewer JPanel issuePanel = new JPanel(); issuePanel.add(issueViewer); JScrollPane issueScroll = new JScrollPane(issuePanel); // issueScroll.setHorizontalScrollBarPolicy // (JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // issueScroll.setVerticalScrollBarPolicy // (JScrollPane.VERTICAL_SCROLLBAR_NEVER); issueScroll.setBorder(BorderFactory.createTitledBorder("Issues")); // JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); split.setTopComponent(processViewer); split.setBottomComponent(issueScroll); split.setDividerLocation(0.80); // the one in pack() matters /\/ contentPane.add(split); // Add something that identifies the system and mentions AIAI contentPane.add(ileed.makeLogoPanel(), BorderLayout.SOUTH); } JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); public void pack() { super.pack(); // Keep the frame from being too tall. // The way to do it is somewhat empirical ... /\/ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension size = getSize(); int width = (int)Math.round(size.getWidth()); int height = (int)Math.round(size.getHeight()); int maxHeight = (int)((7.0 / 8.0) * screenSize.getHeight()); int scrollWidth = 30; // scrollbar will appear /\/ if (height > maxHeight) setSize(new Dimension(width + scrollWidth, maxHeight)); super.validate(); split.setDividerLocation(0.80); // super.validate(); } protected void ensureDomainEditor() { if (domainEditor == null) { domainEditor = makeDomainEditor(ileed, ileed.issueDomain); } domainEditor.setVisible(true); } /* * Menu Bar */ protected JMenuBar makeMenuBar() { JMenuBar bar = new JMenuBar(); // File menu JMenu fileMenu = new JMenu("File"); bar.add(fileMenu); fileMenu.add(makeMenuItem("Load or Edit Domain")); fileMenu.add(makeMenuItem("Reset")); fileMenu.addSeparator(); fileMenu.add(makeMenuItem("Exit")); // Issue menu JMenu issueMenu = new JMenu("Issue"); bar.add(issueMenu); issueMenu.add(makeMenuItem("New Issue")); issueMenu.add(makeMenuItem("New Issue Expansion")); bar.add(Box.createHorizontalGlue()); // let later items move right // Test menu JMenu testMenu = new JMenu("Test"); bar.add(testMenu); ileed.autoTester.addTestMenuItems(testMenu); testMenu.addSeparator(); issueViewer.addTestMenuItems(testMenu); return bar; } protected JMenuItem makeMenuItem(String text) { JMenuItem item = new JMenuItem(text); item.addActionListener(this); return item; } /* * Action interpreter */ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); Debug.noteln("I-LEED action:", command); if (command.equals("Exit")) { System.exit(0); } else if (command.equals("Reset")) { ileed.reset(); } else if (command.equals("Load or Edit Domain")) { ensureDomainEditor(); } else if (command.equals("New Issue Expansion")) { ensureDomainEditor(); } else if (command.equals("New Issue")) { issueViewer.ensureIssueEditor(); } else Debug.noteln("Nothing to do for", command); } }