/* * Copyright (c) 2005 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: * * - Redistribution of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistribution 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, Inc. or the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed or intended for use * in the design, construction, operation or maintenance of any nuclear * facility. * * Sun gratefully acknowledges that this software was originally authored * and developed by Kenneth Bradley Russell and Christopher John Kline. */ package demos.xtrans; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import javax.swing.tree.*; import javax.media.opengl.GLProfile; /** Demonstration showing off XTDesktopPane. * * @author Kenneth Russell */ public class Main { private XTDesktopPane desktop; private XTBasicTransitionManager transManager; private static final int TABLE = 1; private static final int TREE = 2; private Point loc = new Point(); private boolean scrollingEnabled = true; private boolean rotationEnabled = true; private boolean fadesEnabled = true; private Random random; private void chooseNextTransition() { // Only choose one if the user's constraints force us to if (scrollingEnabled && rotationEnabled && fadesEnabled) { return; } if (random == null) { random = new Random(); } boolean fade = random.nextBoolean(); if (!fadesEnabled) { fade = false; } XTBasicTransitionManager.Style style = XTBasicTransitionManager.STYLE_NO_MOTION; if (scrollingEnabled) { style = XTBasicTransitionManager.STYLE_SCROLL; } else if (rotationEnabled) { style = XTBasicTransitionManager.STYLE_ROTATE; } XTBasicTransitionManager.Direction direction = null; switch (random.nextInt(4)) { case 0: direction = XTBasicTransitionManager.DIR_LEFT; break; case 1: direction = XTBasicTransitionManager.DIR_RIGHT; break; case 2: direction = XTBasicTransitionManager.DIR_UP; break; default: direction = XTBasicTransitionManager.DIR_DOWN; break; } transManager.setNextTransition(style, direction, fade); } private void addWindow(int which) { JInternalFrame frame = new JInternalFrame(); frame.setResizable(true); frame.setClosable(true); frame.setVisible(true); switch (which) { case TABLE: { frame.setTitle("Table Example"); Object[][] data = produceTableData(3, 20); DefaultTableModel model = new DefaultTableModel(data, new String[] { "A", "B", "C" }); JTable table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); frame.getContentPane().add(scrollPane); break; } case TREE: { frame.setTitle("Tree Example"); DefaultMutableTreeNode root = new DefaultMutableTreeNode(); populateTree(root, 2); JTree tree = new JTree(root); tree.setRootVisible(false); frame.getContentPane().add(tree); break; } default: throw new IllegalArgumentException(); } frame.setLocation(loc); loc = new Point((loc.x + 20) % desktop.getWidth(), (loc.y + 20) % desktop.getHeight()); frame.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameClosing(InternalFrameEvent e) { chooseNextTransition(); } }); frame.pack(); int sz = Math.min(desktop.getWidth() / 3, desktop.getHeight()); frame.setSize(sz, sz); chooseNextTransition(); desktop.add(frame); desktop.moveToFront(frame); } private Object[][] produceTableData(int cols, int rows) { Object[][] res = new Object[rows][]; Random r = new Random(); for (int i = 0; i < rows; i++) { Object[] row = new Object[cols]; for (int j = 0; j < cols; j++) { row[j] = new Integer(r.nextInt(1000)); } res[i] = row; } return res; } private void populateTree(DefaultMutableTreeNode node, int depth) { node.add(new DefaultMutableTreeNode("A")); node.add(new DefaultMutableTreeNode("B")); node.add(new DefaultMutableTreeNode("C")); if (depth > 0) { for (Enumeration e = node.children(); e.hasMoreElements(); ) { populateTree((DefaultMutableTreeNode) e.nextElement(), depth - 1); } } } private void run(String[] args) { JFrame frame = new JFrame("Desktop Demo"); JMenu menu = new JMenu("Actions"); JMenuBar menuBar = new JMenuBar(); JMenuItem item; item = new JMenuItem("Add Table"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addWindow(TABLE); } }); menu.add(item); item = new JMenuItem("Add Tree"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addWindow(TREE); } }); menu.add(item); item = new JMenuItem("Close all"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Component[] cs = desktop.getComponents(); for (int i = 0; i < cs.length; i++) { chooseNextTransition(); desktop.remove(cs[i]); } } }); menu.add(item); item = new JMenuItem("Quit"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK)); menu.add(item); menuBar.add(menu); menu = new JMenu("Options"); JCheckBoxMenuItem ckitem = new JCheckBoxMenuItem("Enable Scrolling"); ckitem.setState(true); ckitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scrollingEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); } }); menu.add(ckitem); ckitem = new JCheckBoxMenuItem("Enable Rotation"); ckitem.setState(true); ckitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { rotationEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); } }); menu.add(ckitem); ckitem = new JCheckBoxMenuItem("Enable Fades"); ckitem.setState(true); ckitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fadesEnabled = ((JCheckBoxMenuItem) e.getSource()).getState(); } }); menu.add(ckitem); menuBar.add(menu); frame.setJMenuBar(menuBar); desktop = new XTDesktopPane(); transManager = (XTBasicTransitionManager) desktop.getTransitionManager(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(desktop); DisplayMode cur = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode(); int width = (int) (cur.getWidth() * 0.75f); int height = (int) (width * 3.0f / 4.0f); if (height >= 95.0f * cur.getHeight()) { height = (int) (cur.getHeight() * 0.75f); width = (int) (height * 4.0f / 3.0f); } frame.setSize(width, height); frame.setVisible(true); } public static void main(String[] args) { // set argument 'NotFirstUIActionOnProcess' in the JNLP's application-desc tag for example // // NotFirstUIActionOnProcess // boolean firstUIActionOnProcess = 0==args.length || !args[0].equals("NotFirstUIActionOnProcess") ; GLProfile.initSingleton(firstUIActionOnProcess); new Main().run(args); } }