/*
* Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* o 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.
*
* o Neither the name of Substance Kirill Grouchnikov 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.
*/
package test.check;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JInternalFrame.JDesktopIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
import org.pushingpixels.substance.api.ComponentState;
import org.pushingpixels.substance.api.DecorationAreaType;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.SkinChangeListener;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import test.SubstanceLogo;
/**
* Test application panel for testing {@link JDesktopPane},
* {@link JInternalFrame} and {@link JDesktopIcon} components.
*
* @author Kirill Grouchnikov
*/
public class DesktopPanel extends ControllablePanel {
/**
* The desktop pane.
*/
private JDesktopPane jdp;
/**
* Counter for creating the internal frames.
*/
private int count = 0;
/**
* A set of disposed internal frames.
*/
private Set<JInternalFrame> disposed = new HashSet<JInternalFrame>();
/**
* Creates the desktop panel.
*/
public DesktopPanel() {
this.setLayout(new BorderLayout());
jdp = new JDesktopPane();
this.add(jdp, BorderLayout.CENTER);
FormLayout lm = new FormLayout("right:pref, 4dlu, fill:pref:grow", "");
DefaultFormBuilder builder = new DefaultFormBuilder(lm,
new ScrollablePanel());
builder.appendSeparator("New sample frame");
JButton sample = new JButton("Add");
sample.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JInternalFrame jif = new SampleInternalFrame() {
// @Override
// public void paint(Graphics g) {
// long start = System.nanoTime();
// super.paint(g);
// long end = System.nanoTime();
// System.err.println("paint done in " + (end -
// start));
// }
};
jif.setBounds(0, 0, 300, 200);
jdp.add(jif);
jif.setVisible(true);
jif.setComponentOrientation(jdp
.getComponentOrientation());
}
});
}
});
builder.append("Add sample", sample);
builder.appendSeparator("New custom frame");
final JCheckBox makeZero = new JCheckBox("Has zero bounds");
builder.append("Custom settings", makeZero);
final JCheckBox isClosable = new JCheckBox("Is closable");
isClosable.setSelected(true);
builder.append("", isClosable);
final JCheckBox isMaximizable = new JCheckBox("Is maximizable");
isMaximizable.setSelected(true);
builder.append("", isMaximizable);
final JCheckBox isIconifiable = new JCheckBox("Is iconifiable");
isIconifiable.setSelected(true);
builder.append("", isIconifiable);
final JCheckBox isResizable = new JCheckBox("Is resizable");
isResizable.setSelected(true);
builder.append("", isResizable);
JButton bt = new JButton("Add");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String title = "[" + count + "]Internal title ";
int c = (int) (20 * Math.random());
for (int i = 0; i < c; i++) {
title += "0";
}
final JInternalFrame jif = new JInternalFrame(title);
jif.setFrameIcon(SubstanceLogo.getLogoIcon(SubstanceLookAndFeel
.getCurrentSkin(jif.getRootPane()).getColorScheme(
DecorationAreaType.SECONDARY_TITLE_PANE,
ColorSchemeAssociationKind.FILL,
ComponentState.ENABLED)));
SubstanceLookAndFeel
.registerSkinChangeListener(new SkinChangeListener() {
public void skinChanged() {
jif
.setFrameIcon(SubstanceLogo
.getLogoIcon(SubstanceLookAndFeel
.getCurrentSkin(
jif
.getRootPane())
.getColorScheme(
DecorationAreaType.SECONDARY_TITLE_PANE,
ColorSchemeAssociationKind.FILL,
ComponentState.ENABLED)));
}
});
jif.setLayout(new BorderLayout());
JPanel controls = new JPanel(new FlowLayout());
int comps = 5 + (int) (10 * Math.random());
for (int i = 0; i < comps; i++) {
double r = Math.random();
if (r < 0.1) {
controls.add(new JButton("button" + i));
} else {
if (r < 0.2) {
controls.add(new JLabel("label" + i));
} else {
if (r < 0.3) {
controls.add(new JRadioButton("radio" + i));
} else {
if (r < 0.4) {
controls.add(new JCheckBox("check" + i));
} else {
if (r < 0.5) {
controls.add(new JToggleButton("toggle"
+ i));
} else {
if (r < 0.6) {
controls
.add(new JComboBox(
new Object[] { "combo"
+ i }));
} else {
if (r < 0.7) {
controls.add(new JTextField(
"text field" + i));
} else {
if (r < 0.8) {
controls
.add(new JPasswordField(
"password"
+ i));
} else {
if (r < 0.9) {
controls
.add(new JSpinner());
} else {
controls
.add(new JList(
new Object[] { "list"
+ i }));
}
}
}
}
}
}
}
}
}
}
jif.add(controls, BorderLayout.CENTER);
jif.setClosable(isClosable.isSelected());
jif.setMaximizable(isMaximizable.isSelected());
jif.setIconifiable(isIconifiable.isSelected());
jif.setResizable(isResizable.isSelected());
JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
final JCheckBox isModified = new JCheckBox("modified");
isModified.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jif.getRootPane().putClientProperty(
SubstanceLookAndFeel.WINDOW_MODIFIED,
Boolean.valueOf(isModified.isSelected()));
}
});
buttons.add(isModified);
JButton changeTitleButton = new JButton("Change title");
changeTitleButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String random = "abcdefghijklmnopqrstuvwxyz ";
int length = (int) (50 * Math.random());
String title = "";
while (length > 0) {
title += random
.charAt((int) (random.length() * Math
.random()));
length--;
}
jif.setTitle(title);
}
});
buttons.add(changeTitleButton);
JButton setNullTitlePane = new JButton("Remove title pane");
setNullTitlePane.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
((BasicInternalFrameUI) jif.getUI())
.setNorthPane(null);
jif.revalidate();
}
});
}
});
buttons.add(setNullTitlePane);
jif.add(buttons, BorderLayout.SOUTH);
count++;
int width = 50 + (int) (400 * Math.random());
int height = 50 + (int) (200 * Math.random());
jif.setBounds(20 * (count % 10), 20 * (count % 10), width,
height);
if (makeZero.isSelected())
jif.setBounds(0, 0, 0, 0);
jif.setBackground(new Color(128 + (int) (128 * Math.random()),
128 + (int) (128 * Math.random()),
128 + (int) (128 * Math.random())));
// jif.setClosable(true);
// jif.setMaximizable(true);
// jif.setResizable(true);
// jif.setIconifiable(true);
jif.setComponentOrientation(jdp.getComponentOrientation());
jdp.add(jif, 1);
JMenuBar jmb = new JMenuBar();
jmb.add(SampleMenuFactory.getSkinMenu());
JMenu jm1 = new JMenu("Menu1");
jm1.setMnemonic('1');
int mcount = 0;
for (LinkedList<JMenuItem> miList : SampleMenuFactory
.getTestMenuItems()) {
if (mcount > 0) {
if (mcount % 2 == 0)
jm1.addSeparator();
else
jm1.add(new JSeparator());
}
for (JMenuItem menuItem : miList) {
jm1.add(menuItem);
}
mcount++;
}
jmb.add(jm1);
jif.setJMenuBar(jmb);
jif.show();
}
});
builder.append("Add custom", bt);
builder.appendSeparator("Operations");
JButton minAll = new JButton("Execute");
minAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JInternalFrame jif : jdp.getAllFrames()) {
try {
jif.setIcon(true);
} catch (PropertyVetoException pve) {
}
}
}
});
builder.append("Minimize all", minAll);
JButton closeAll = new JButton("Execute");
closeAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JInternalFrame jif : jdp.getAllFrames()) {
try {
jif.setClosed(true);
} catch (PropertyVetoException pve) {
}
}
}
});
builder.append("Close all", closeAll);
JButton disposeAll = new JButton("Execute");
disposeAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JInternalFrame jif : jdp.getAllFrames()) {
disposed.add(jif);
jif.dispose();
}
}
});
builder.append("Dispose all", disposeAll);
JButton reshowAll = new JButton("Execute");
reshowAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JInternalFrame jif : disposed) {
jif.setVisible(true);
}
}
});
builder.append("Reshow all", reshowAll);
this.controlPanel = builder.getPanel();
this.setPreferredSize(new Dimension(400, 400));
this.setSize(this.getPreferredSize());
this.setMinimumSize(this.getPreferredSize());
}
}