/* * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Sun Microsystems nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.awt.*; import java.io.*; import java.awt.event.*; import java.beans.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.plaf.metal.*; /** * This is the main container frame for the Metalworks demo app * * @author Steve Wilson */ public class MetalworksFrame extends JFrame { JMenuBar menuBar; JDesktopPane desktop; JInternalFrame toolPalette; JCheckBoxMenuItem showToolPaletteMenuItem; static final Integer DOCLAYER = new Integer(5); static final Integer TOOLLAYER = new Integer(6); static final Integer HELPLAYER = new Integer(7); static final String ABOUTMSG = "Metalworks \n \nAn application written to show off the Java Look & Feel. \n \nWritten by the JavaSoft Look & Feel Team \n Michael Albers\n Tom Santos\n Jeff Shapiro\n Steve Wilson"; public MetalworksFrame() { super("Metalworks"); final int inset = 50; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds ( inset, inset, screenSize.width - inset*2, screenSize.height - inset*2 ); buildContent(); buildMenus(); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { quit(); }}); UIManager.addPropertyChangeListener(new UISwitchListener((JComponent)getRootPane())); } protected void buildMenus() { menuBar = new JMenuBar(); menuBar.setOpaque(true); JMenu file = buildFileMenu(); JMenu edit = buildEditMenu(); JMenu views = buildViewsMenu(); JMenu speed = buildSpeedMenu(); JMenu help = buildHelpMenu(); // load a theme from a text file MetalTheme myTheme = null; try { InputStream istream = getClass().getResourceAsStream("/resources/MyTheme.theme"); myTheme = new PropertiesMetalTheme(istream); } catch (NullPointerException e) {System.out.println(e);} // build an array of themes MetalTheme[] themes = { new OceanTheme(), new DefaultMetalTheme(), new GreenMetalTheme(), new AquaMetalTheme(), new KhakiMetalTheme(), new DemoMetalTheme(), new ContrastMetalTheme(), new BigContrastMetalTheme(), myTheme }; // put the themes in a menu JMenu themeMenu = new MetalThemeMenu("Theme", themes); menuBar.add(file); menuBar.add(edit); menuBar.add(views); menuBar.add(themeMenu); menuBar.add(speed); menuBar.add(help); setJMenuBar(menuBar); } protected JMenu buildFileMenu() { JMenu file = new JMenu("File"); JMenuItem newWin = new JMenuItem("New"); JMenuItem open = new JMenuItem("Open"); JMenuItem quit = new JMenuItem("Quit"); newWin.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newDocument(); }}); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDocument(); }}); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { quit(); }}); file.add(newWin); file.add(open); file.addSeparator(); file.add(quit); return file; } protected JMenu buildEditMenu() { JMenu edit = new JMenu("Edit"); JMenuItem undo = new JMenuItem("Undo"); JMenuItem copy = new JMenuItem("Copy"); JMenuItem cut = new JMenuItem("Cut"); JMenuItem paste = new JMenuItem("Paste"); JMenuItem prefs = new JMenuItem("Preferences..."); undo.setEnabled(false); copy.setEnabled(false); cut.setEnabled(false); paste.setEnabled(false); prefs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openPrefsWindow(); }}); edit.add(undo); edit.addSeparator(); edit.add(cut); edit.add(copy); edit.add(paste); edit.addSeparator(); edit.add(prefs); return edit; } protected JMenu buildViewsMenu() { JMenu views = new JMenu("Views"); JMenuItem inBox = new JMenuItem("Open In-Box"); JMenuItem outBox = new JMenuItem("Open Out-Box"); outBox.setEnabled(false); inBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openInBox(); }}); views.add(inBox); views.add(outBox); return views; } protected JMenu buildSpeedMenu() { JMenu speed = new JMenu("Drag"); JRadioButtonMenuItem live = new JRadioButtonMenuItem("Live"); JRadioButtonMenuItem outline = new JRadioButtonMenuItem("Outline"); JRadioButtonMenuItem slow = new JRadioButtonMenuItem("Old and Slow"); ButtonGroup group = new ButtonGroup(); group.add(live); group.add(outline); group.add(slow); live.setSelected(true); slow.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ // for right now I'm saying if you set the mode // to something other than a specified mode // it will revert to the old way // This is mostly for comparison's sake desktop.setDragMode(-1);}}); live.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ desktop.setDragMode(JDesktopPane.LIVE_DRAG_MODE);}}); outline.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);}}); speed.add(live); speed.add(outline); speed.add(slow); return speed; } protected JMenu buildHelpMenu() { JMenu help = new JMenu("Help"); JMenuItem about = new JMenuItem("About Metalworks..."); JMenuItem openHelp = new JMenuItem("Open Help Window"); about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showAboutBox(); } }); openHelp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openHelpWindow(); }}); help.add(about); help.add(openHelp); return help; } protected void buildContent() { desktop = new JDesktopPane(); getContentPane().add(desktop); } public void quit() { System.exit(0); } public void newDocument() { JInternalFrame doc = new MetalworksDocumentFrame(); desktop.add(doc, DOCLAYER); try { doc.setVisible(true); doc.setSelected(true); } catch (java.beans.PropertyVetoException e2) {} } public void openDocument() { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(this); } public void openHelpWindow() { JInternalFrame help = new MetalworksHelp(); desktop.add(help, HELPLAYER); try { help.setVisible(true); help.setSelected(true); } catch (java.beans.PropertyVetoException e2) {} } public void showAboutBox() { JOptionPane.showMessageDialog(this, ABOUTMSG); } public void openPrefsWindow() { MetalworksPrefs dialog = new MetalworksPrefs(this); dialog.show(); } public void openInBox() { JInternalFrame doc = new MetalworksInBox(); desktop.add(doc, DOCLAYER); try { doc.setVisible(true); doc.setSelected(true); } catch (java.beans.PropertyVetoException e2) {} } }