blob: 4333d7ba4d602daebb5de5961cc5efc914503557 [file] [log] [blame]
/*
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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 Oracle 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.
*/
/*
* This source code is provided to illustrate the usage of a given feature
* or technique and has been deliberately simplified. Additional steps
* required for a production-quality application, such as security checks,
* input validation and proper error handling, might not be present in
* this sample code.
*/
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.InputStream;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.UIManager;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalTheme;
import javax.swing.plaf.metal.OceanTheme;
/**
* This is the main container frame for the Metalworks demo app
*
* @author Steve Wilson
* @author Alexander Kouznetsov
*/
@SuppressWarnings("serial")
public final class MetalworksFrame extends JFrame {
JMenuBar menuBar;
JDesktopPane desktop;
JInternalFrame toolPalette;
JCheckBoxMenuItem showToolPaletteMenuItem;
static final Integer DOCLAYER = 5;
static final Integer TOOLLAYER = 6;
static final Integer HELPLAYER = 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() {
@Override
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.setVisible(true);
}
public void openInBox() {
JInternalFrame doc = new MetalworksInBox();
desktop.add(doc, DOCLAYER);
try {
doc.setVisible(true);
doc.setSelected(true);
} catch (java.beans.PropertyVetoException e2) {
}
}
}