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: AboutFrame.java,v 1.8 2008/12/18 09:57:32 mungady Exp $
036     *
037     * Changes (from 26-Nov-2001)
038     * --------------------------
039     * 26-Nov-2001 : Version 1, based on code from JFreeChart demo application (DG);
040     * 27-Nov-2001 : Added getPreferredSize() method (DG);
041     * 08-Feb-2002 : List of developers is now optional (DG);
042     * 15-Mar-2002 : Modified to use a ResourceBundle for elements that require
043     *               localisation (DG);
044     * 25-Mar-2002 : Added new constructor (DG);
045     * 26-Jun-2002 : Removed redundant code (DG);
046     * 08-Oct-2002 : Fixed errors reported by Checkstyle (DG);
047     * 18-Dec-2008 : Use ResourceBundleWrapper - see JFreeChart patch 1607918 by
048     *               Jess Thrysoee (DG);
049     *
050     */
051    
052    package org.jfree.ui.about;
053    
054    import java.awt.BorderLayout;
055    import java.awt.Dimension;
056    import java.awt.Image;
057    import java.util.List;
058    import java.util.ResourceBundle;
059    
060    import javax.swing.BorderFactory;
061    import javax.swing.JFrame;
062    import javax.swing.JPanel;
063    import javax.swing.JScrollPane;
064    import javax.swing.JTabbedPane;
065    import javax.swing.JTextArea;
066    import javax.swing.border.Border;
067    
068    import org.jfree.util.ResourceBundleWrapper;
069    
070    /**
071     * A frame that displays information about the demonstration application.
072     *
073     * @author David Gilbert
074     */
075    public class AboutFrame extends JFrame {
076    
077        /** The preferred size for the frame. */
078        public static final Dimension PREFERRED_SIZE = new Dimension(560, 360);
079    
080        /** The default border for the panels in the tabbed pane. */
081        public static final Border STANDARD_BORDER
082                = BorderFactory.createEmptyBorder(5, 5, 5, 5);
083    
084        /** Localised resources. */
085        private ResourceBundle resources;
086    
087        /** The application name. */
088        private String application;
089    
090        /** The application version. */
091        private String version;
092    
093        /** The copyright string. */
094        private String copyright;
095    
096        /** Other info about the application. */
097        private String info;
098    
099        /** The project logo. */
100        private Image logo;
101    
102        /** A list of contributors. */
103        private List contributors;
104    
105        /** The licence. */
106        private String licence;
107    
108        /**
109         * Constructs an about frame.
110         *
111         * @param title  the frame title.
112         * @param project  information about the project.
113         */
114        public AboutFrame(final String title, final ProjectInfo project) {
115    
116            this(title,
117                 project.getName(),
118                 "Version " + project.getVersion(),
119                 project.getInfo(),
120                 project.getLogo(),
121                 project.getCopyright(),
122                 project.getLicenceText(),
123                 project.getContributors(),
124                 project);
125    
126        }
127    
128        /**
129         * Constructs an 'About' frame.
130         *
131         * @param title  the frame title.
132         * @param application  the application name.
133         * @param version  the version.
134         * @param info  other info.
135         * @param logo  an optional logo.
136         * @param copyright  the copyright notice.
137         * @param licence  the licence.
138         * @param contributors  a list of developers/contributors.
139         * @param project  info about the project.
140         */
141        public AboutFrame(final String title,
142                          final String application, final String version,
143                          final String info,
144                          final Image logo,
145                          final String copyright, final String licence,
146                          final List contributors,
147                          final ProjectInfo project) {
148    
149            super(title);
150    
151            this.application = application;
152            this.version = version;
153            this.copyright = copyright;
154            this.info = info;
155            this.logo = logo;
156            this.contributors = contributors;
157            this.licence = licence;
158    
159            final String baseName = "org.jfree.ui.about.resources.AboutResources";
160            this.resources = ResourceBundleWrapper.getBundle(baseName);
161    
162            final JPanel content = new JPanel(new BorderLayout());
163            content.setBorder(STANDARD_BORDER);
164    
165            final JTabbedPane tabs = createTabs(project);
166            content.add(tabs);
167            setContentPane(content);
168    
169            pack();
170    
171        }
172    
173        /**
174         * Returns the preferred size for the about frame.
175         *
176         * @return the preferred size.
177         */
178        public Dimension getPreferredSize() {
179            return PREFERRED_SIZE;
180        }
181    
182        /**
183         * Creates a tabbed pane containing an about panel and a system properties
184         * panel.
185         *
186         * @return a tabbed pane.
187         * @param project
188         */
189        private JTabbedPane createTabs(final ProjectInfo project) {
190    
191            final JTabbedPane tabs = new JTabbedPane();
192    
193            final JPanel aboutPanel = createAboutPanel(project);
194            aboutPanel.setBorder(AboutFrame.STANDARD_BORDER);
195            final String aboutTab = this.resources.getString(
196                    "about-frame.tab.about");
197            tabs.add(aboutTab, aboutPanel);
198    
199            final JPanel systemPanel = new SystemPropertiesPanel();
200            systemPanel.setBorder(AboutFrame.STANDARD_BORDER);
201            final String systemTab = this.resources.getString(
202                    "about-frame.tab.system");
203            tabs.add(systemTab, systemPanel);
204    
205            return tabs;
206    
207        }
208    
209        /**
210         * Creates a panel showing information about the application, including the
211         * name, version, copyright notice, URL for further information, and a list
212         * of contributors.
213    
214         * @param project
215         *
216         * @return a panel.
217         */
218        private JPanel createAboutPanel(final ProjectInfo project) {
219    
220            final JPanel about = new JPanel(new BorderLayout());
221    
222            final JPanel details = new AboutPanel(this.application, this.version,
223                    this.copyright, this.info, this.logo);
224    
225            boolean includetabs = false;
226            final JTabbedPane tabs = new JTabbedPane();
227    
228            if (this.contributors != null) {
229                final JPanel contributorsPanel = new ContributorsPanel(
230                        this.contributors);
231                contributorsPanel.setBorder(AboutFrame.STANDARD_BORDER);
232                final String contributorsTab = this.resources.getString(
233                        "about-frame.tab.contributors");
234                tabs.add(contributorsTab, contributorsPanel);
235                includetabs = true;
236            }
237    
238            if (this.licence != null) {
239                final JPanel licencePanel = createLicencePanel();
240                licencePanel.setBorder(STANDARD_BORDER);
241                final String licenceTab = this.resources.getString(
242                        "about-frame.tab.licence");
243                tabs.add(licenceTab, licencePanel);
244                includetabs = true;
245            }
246    
247            if (project != null) {
248                final JPanel librariesPanel = new LibraryPanel(project);
249                librariesPanel.setBorder(AboutFrame.STANDARD_BORDER);
250                final String librariesTab = this.resources.getString(
251                        "about-frame.tab.libraries");
252                tabs.add(librariesTab, librariesPanel);
253                includetabs = true;
254            }
255    
256            about.add(details, BorderLayout.NORTH);
257            if (includetabs) {
258                about.add(tabs);
259            }
260    
261            return about;
262    
263        }
264    
265        /**
266         * Creates a panel showing the licence.
267         *
268         * @return a panel.
269         */
270        private JPanel createLicencePanel() {
271    
272            final JPanel licencePanel = new JPanel(new BorderLayout());
273            final JTextArea area = new JTextArea(this.licence);
274            area.setLineWrap(true);
275            area.setWrapStyleWord(true);
276            area.setCaretPosition(0);
277            area.setEditable(false);
278            licencePanel.add(new JScrollPane(area));
279            return licencePanel;
280    
281        }
282    
283    
284    }