/* * AboutPanel.java * Created on January 31, 2001, 12:50 PM */ package org.freehep.application; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; /** * An about box for use by Applications. * By default includes buttons for users to check System/Application/User properties * @author tonyj * @version $Id: AboutDialog.java 8584 2006-08-10 23:06:37Z duns $ */ public class AboutDialog extends javax.swing.JDialog { private Application app; /** * Creates new AboutDialog. * @param app The application owning the AboutDialog */ public AboutDialog(Application app) { super((javax.swing.JFrame) javax.swing.SwingUtilities.getAncestorOfClass(javax.swing.JFrame.class,app)); this.app = app; final java.util.Properties props = app.getUserProperties(); final JPanel panel = new JPanel(new java.awt.BorderLayout()); java.net.URL image = PropertyUtilities.getURL(props,"aboutImage",null); if (image != null) { javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); javax.swing.JLabel l = new javax.swing.JLabel(icon); l.setBackground(java.awt.Color.white); l.setOpaque(true); panel.add(l); } else { String text = props.getProperty("aboutLabel","<html><h1>{title}</h1>"); panel.add(new javax.swing.JLabel(text)); } setTitle(app.getFullVersion()); setModal(true); final JPanel info = createInfoPanel(); if (info != null) panel.add(info, java.awt.BorderLayout.EAST); info.setVisible(PropertyUtilities.getBoolean(props,"aboutShowInfoPanel",true)); javax.swing.Action toggleInfoPanel = new javax.swing.AbstractAction() { public void actionPerformed(java.awt.event.ActionEvent e) { if (info != null) { PropertyUtilities.setBoolean(props,"aboutShowInfoPanel",!info.isVisible()); info.setVisible(!info.isVisible()); if (!info.isVisible()) panel.requestFocus(); pack(); } } }; panel.getInputMap(JComponent.WHEN_FOCUSED).put(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P,java.awt.event.InputEvent.CTRL_MASK),"toggleInfoPanel"); panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P,java.awt.event.InputEvent.CTRL_MASK),"toggleInfoPanel"); panel.getActionMap().put("toggleInfoPanel",toggleInfoPanel); setContentPane(panel); setResizable(false); } /** * Override to customize the InfoPanel. * By default the InfoPanel contains buttons allowing the user to view * the System/Application/User properties. */ protected JPanel createInfoPanel() { return new org.freehep.application.AboutDialog.InfoPanel(); } protected class InfoPanel extends JPanel implements java.awt.event.ActionListener { private JButton b1, b2, b3; public InfoPanel() { setBorder(javax.swing.BorderFactory.createTitledBorder("Properties")); setLayout(new java.awt.BorderLayout()); JPanel p = new JPanel(new java.awt.GridLayout(0,1)); b1 = new JButton("System..."); b2 = new JButton("Application..."); b3 = new JButton("User..."); try { System.getProperties(); } catch (SecurityException x) { b1.setEnabled(false); } b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); p.add(b1); p.add(b2); p.add(b3); add(p,java.awt.BorderLayout.NORTH); } public void actionPerformed(java.awt.event.ActionEvent e) { JButton source = (JButton) e.getSource(); java.util.Properties prop; if (source == b1) prop = System.getProperties(); else if (source == b2) prop = app.getAppProperties(); else prop = app.getUserProperties(); javax.swing.JTable table = new javax.swing.JTable(new org.freehep.application.PropertyUtilities.PropertyTable(prop)); String title = source.getText(); if (title.endsWith("...")) title = title.substring(0,title.length()-3); title += " Properties"; javax.swing.JDialog dlg = new javax.swing.JDialog(AboutDialog.this,title); dlg.setContentPane(new javax.swing.JScrollPane(table)); dlg.setModal(true); dlg.pack(); dlg.setLocationRelativeTo(AboutDialog.this); dlg.setVisible(true); } } }