/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Matthew Reeder * - Initial API and implementation * Flemming N. Larsen * - Ported to Java 5 * - Optimizations *******************************************************************************/ package net.sf.robocode.ui.editor; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; /** * @author Matthew Reeder (original) * @author Flemming N. Larsen (contributor) */ @SuppressWarnings("serial") public class MoreWindowsDialog extends JDialog implements ActionListener, MouseListener { private JButton activateButton; private JButton cancelButton; private JButton closeButton; private JList windowList; private final Vector<WindowMenuItem> windowListItems; public MoreWindowsDialog(RobocodeEditor window) { super(window, "More Windows...", false); windowListItems = new Vector<WindowMenuItem>(); JPanel listPanel = new JPanel(new GridLayout(1, 1)); listPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Open Windows")); listPanel.add(new JScrollPane(getWindowList())); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); buttonPanel.add(getActivateButton()); buttonPanel.add(getCancelButton()); buttonPanel.add(getCloseButton()); getContentPane().setLayout(new BorderLayout()); getContentPane().add(buttonPanel, BorderLayout.SOUTH); getContentPane().add(listPanel); setSize(400, 400); } public void addWindowItem(WindowMenuItem item) { windowListItems.add(item); getWindowList().setListData(windowListItems); } public void removeWindowItem(WindowMenuItem item) { windowListItems.remove(item); getWindowList().setListData(windowListItems); } public JButton getActivateButton() { if (activateButton == null) { activateButton = new JButton(); activateButton.setText("Activate"); activateButton.setMnemonic('A'); activateButton.setDefaultCapable(true); activateButton.addActionListener(this); } return activateButton; } public JButton getCancelButton() { if (cancelButton == null) { cancelButton = new JButton(); cancelButton.setText("Cancel"); cancelButton.setMnemonic('C'); cancelButton.addActionListener(this); } return cancelButton; } public JButton getCloseButton() { if (closeButton == null) { closeButton = new JButton(); closeButton.setText("Close"); closeButton.setMnemonic('l'); closeButton.setDisplayedMnemonicIndex(1); closeButton.addActionListener(this); } return closeButton; } public JList getWindowList() { if (windowList == null) { windowList = new JList(); windowList.addMouseListener(this); windowList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } return windowList; } public void actionPerformed(ActionEvent e) { if (e.getSource() == closeButton) { WindowMenuItem item = (WindowMenuItem) windowList.getSelectedValue(); if (item != null && item.getEditWindow() != null) { item.getEditWindow().doDefaultCloseAction(); } } else { if (e.getSource() == activateButton) { WindowMenuItem item = (WindowMenuItem) windowList.getSelectedValue(); if (item != null) { item.actionPerformed(null); } } setVisible(false); } } public void mouseClicked(MouseEvent e) { if (e.getSource() == getWindowList() && e.getClickCount() == 2) { WindowMenuItem item = windowListItems.get(windowList.locationToIndex(e.getPoint())); item.actionPerformed(null); // Good thing WindowMenuItem doesn't // reference the ActionEvent? setVisible(false); } } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }