    001    /* ========================================================================
    002     * JCommon : a free general purpose class library for the Java(tm) platform
    003     * ========================================================================
    004     *
    005     * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.
    006     *
    007     * Project Info:  http://www.jfree.org/jcommon/index.html
    008     *
    009     * This library is free software; you can redistribute it and/or modify it
    010     * under the terms of the GNU Lesser General Public License as published by
    011     * the Free Software Foundation; either version 2.1 of the License, or
    012     * (at your option) any later version.
    013     *
    014     * This library is distributed in the hope that it will be useful, but
    015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017     * License for more details.
    018     *
    019     * You should have received a copy of the GNU Lesser General Public
    020     * License along with this library; if not, write to the Free Software
    021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022     * USA.
    023     *
    024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025     * in the United States and other countries.]
    026     *
    027     * ---------------
    028     * AboutFrame.java
    029     * ---------------
    030     * (C) Copyright 2001-2008, by Object Refinery Limited.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * $Id: AboutDialog.java,v 1.4 2008/12/18 09:57:32 mungady Exp $
    036     *
    037     * Changes (from 26-Nov-2001)
    038     * --------------------------
    039     * 30-Jan-2006 : Version 1, based on the AboutFrame (TM);
    040     * 18-Dec-2008 : Use ResourceBundleWrapper (DG);
    041     *
    042     */
    043
    044    package org.jfree.ui.about;
    045
    046    import java.awt.BorderLayout;
    047    import java.awt.Dialog;
    048    import java.awt.Dimension;
    049    import java.awt.Frame;
    050    import java.awt.Image;
    051    import java.util.List;
    052    import java.util.ResourceBundle;
    053
    054    import javax.swing.BorderFactory;
    055    import javax.swing.JDialog;
    056    import javax.swing.JPanel;
    057    import javax.swing.JScrollPane;
    058    import javax.swing.JTabbedPane;
    059    import javax.swing.JTextArea;
    060    import javax.swing.border.Border;
    061
    062    import org.jfree.util.ResourceBundleWrapper;
    063
    064    /**
    065     * A dialog that displays information about the demonstration application.
    066     *
    067     * @author David Gilbert
    068     */
    069    public class AboutDialog extends JDialog {
    070
    071        /** The preferred size for the frame. */
    072        public static final Dimension PREFERRED_SIZE = new Dimension(560, 360);
    073
    074        /** The default border for the panels in the tabbed pane. */
    075        public static final Border STANDARD_BORDER
    076                = BorderFactory.createEmptyBorder(5, 5, 5, 5);
    077
    078        /** Localised resources. */
    079        private ResourceBundle resources;
    080
    081        /** The application name. */
    082        private String application;
    083
    084        /** The application version. */
    085        private String version;
    086
    087        /** The copyright string. */
    088        private String copyright;
    089
    090        /** Other info about the application. */
    091        private String info;
    092
    093        /** The project logo. */
    094        private Image logo;
    095
    096        /** A list of contributors. */
    097        private List contributors;
    098
    099        /** The licence. */
    100        private String licence;
    101
    102        /**
    103         * Constructs an about frame.
    104         *
    105         * @param title  the frame title.
    106         * @param project  information about the project.
    107         */
    108        public AboutDialog(final String title, final ProjectInfo project) {
    109
    110            init(title,
    111                 project.getName(),
    112                 "Version " + project.getVersion(),
    113                 project.getInfo(),
    114                 project.getLogo(),
    115                 project.getCopyright(),
    116                 project.getLicenceText(),
    117                 project.getContributors(),
    118                 project);
    119
    120        }
    121
    122      /**
    123       * Creates a non-modal dialog without a title with the specifed
    124       * <code>Frame</code> as its owner.
    125       *
    126       * @param owner the <code>Frame</code> from which the dialog is displayed.
    127       * @param title  the title,
    128       * @param project  the project.
    129       */
    130      public AboutDialog(final Frame owner,
    131                         final String title,
    132                         final ProjectInfo project)
    133      {
    134        super(owner);
    135        init(title,
    136             project.getName(),
    137             "Version " + project.getVersion(),
    138             project.getInfo(),
    139             project.getLogo(),
    140             project.getCopyright(),
    141             project.getLicenceText(),
    142             project.getContributors(),
    143             project);
    144      }
    145
    146      /**
    147       * Creates a non-modal dialog without a title with the specifed
    148       * <code>Dialog</code> as its owner.
    149       *
    150       * @param owner the <code>Dialog</code> from which the dialog is displayed.
    151       * @param title  the title.
    152       * @param project  the project.
    153       */
    154      public AboutDialog(final Dialog owner,
    155                         final String title,
    156                         final ProjectInfo project)
    157      {
    158        super(owner);
    159        init(title,
    160             project.getName(),
    161             "Version " + project.getVersion(),
    162             project.getInfo(),
    163             project.getLogo(),
    164             project.getCopyright(),
    165             project.getLicenceText(),
    166             project.getContributors(),
    167             project);
    168      }
    169
    170      /**
    171         * Constructs an 'About' frame.
    172         *
    173         * @param title  the frame title.
    174         * @param application  the application name.
    175         * @param version  the version.
    176         * @param info  other info.
    177         * @param logo  an optional logo.
    178         * @param copyright  the copyright notice.
    179         * @param licence  the licence.
    180         * @param contributors  a list of developers/contributors.
    181         * @param libraries  a list of libraries.
    182         */
    183        private void init (final String title,
    184                           final String application,
    185                           final String version,
    186                           final String info,
    187                           final Image logo,
    188                           final String copyright,
    189                           final String licence,
    190                           final List contributors,
    191                           final ProjectInfo libraries) {
    192
    193            setTitle(title);
    194
    195            this.application = application;
    196            this.version = version;
    197            this.copyright = copyright;
    198            this.info = info;
    199            this.logo = logo;
    200            this.contributors = contributors;
    201            this.licence = licence;
    202
    203            final String baseName = "org.jfree.ui.about.resources.AboutResources";
    204            this.resources = ResourceBundleWrapper.getBundle(baseName);
    205
    206            final JPanel content = new JPanel(new BorderLayout());
    207            content.setBorder(STANDARD_BORDER);
    208
    209            final JTabbedPane tabs = createTabs(libraries);
    210            content.add(tabs);
    211            setContentPane(content);
    212
    213            pack();
    214
    215        }
    216
    217        /**
    218         * Returns the preferred size for the about frame.
    219         *
    220         * @return the preferred size.
    221         */
    222        public Dimension getPreferredSize() {
    223            return PREFERRED_SIZE;
    224        }
    225
    226        /**
    227         * Creates a tabbed pane containing an about panel and a system properties
    228         * panel.
    229         *
    230         * @param info  project information.
    231         *
    232         * @return a tabbed pane.
    233         */
    234        private JTabbedPane createTabs(final ProjectInfo info) {
    235
    236            final JTabbedPane tabs = new JTabbedPane();
    237
    238            final JPanel aboutPanel = createAboutPanel(info);
    239            aboutPanel.setBorder(AboutDialog.STANDARD_BORDER);
    240            final String aboutTab = this.resources.getString(
    241                    "about-frame.tab.about");
    242            tabs.add(aboutTab, aboutPanel);
    243
    244            final JPanel systemPanel = new SystemPropertiesPanel();
    245            systemPanel.setBorder(AboutDialog.STANDARD_BORDER);
    246            final String systemTab = this.resources.getString(
    247                    "about-frame.tab.system");
    248            tabs.add(systemTab, systemPanel);
    249
    250            return tabs;
    251
    252        }
    253
    254        /**
    255         * Creates a panel showing information about the application, including the
    256         * name, version, copyright notice, URL for further information, and a list
    257         * of contributors.
    258         *
    259         * @param info  project info.
    260         *
    261         * @return a panel.
    262         */
    263        private JPanel createAboutPanel(final ProjectInfo info) {
    264
    265            final JPanel about = new JPanel(new BorderLayout());
    266
    267            final JPanel details = new AboutPanel(this.application, this.version,
    268                    this.copyright, this.info, this.logo);
    269
    270            boolean includetabs = false;
    271            final JTabbedPane tabs = new JTabbedPane();
    272
    273            if (this.contributors != null) {
    274                final JPanel contributorsPanel = new ContributorsPanel(
    275                        this.contributors);
    276                contributorsPanel.setBorder(AboutDialog.STANDARD_BORDER);
    277                final String contributorsTab = this.resources.getString(
    278                        "about-frame.tab.contributors");
    279                tabs.add(contributorsTab, contributorsPanel);
    280                includetabs = true;
    281            }
    282
    283            if (this.licence != null) {
    284                final JPanel licencePanel = createLicencePanel();
    285                licencePanel.setBorder(STANDARD_BORDER);
    286                final String licenceTab = this.resources.getString(
    287                        "about-frame.tab.licence");
    288                tabs.add(licenceTab, licencePanel);
    289                includetabs = true;
    290            }
    291
    292            if (info != null) {
    293                final JPanel librariesPanel = new LibraryPanel(info);
    294                librariesPanel.setBorder(AboutDialog.STANDARD_BORDER);
    295                final String librariesTab = this.resources.getString(
    296                        "about-frame.tab.libraries");
    297                tabs.add(librariesTab, librariesPanel);
    298                includetabs = true;
    299            }
    300
    301            about.add(details, BorderLayout.NORTH);
    302            if (includetabs) {
    303                about.add(tabs);
    304            }
    305
    306            return about;
    307
    308        }
    309
    310        /**
    311         * Creates a panel showing the licence.
    312         *
    313         * @return a panel.
    314         */
    315        private JPanel createLicencePanel() {
    316
    317            final JPanel licencePanel = new JPanel(new BorderLayout());
    318            final JTextArea area = new JTextArea(this.licence);
    319            area.setLineWrap(true);
    320            area.setWrapStyleWord(true);
    321            area.setCaretPosition(0);
    322            area.setEditable(false);
    323            licencePanel.add(new JScrollPane(area));
    324            return licencePanel;
    325
    326        }
    327
    328
    329    }