001    /* ========================================================================
002     * JCommon : a free general purpose class library for the Java(tm) platform
003     * ========================================================================
004     *
005     * (C) Copyright 2000-2005, 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-2004, by Object Refinery Limited.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   -;
034     *
035     * $Id: AboutDialog.java,v 1.3 2008/09/10 09:18:13 mungady Exp $
036     *
037     * Changes (from 26-Nov-2001)
038     * --------------------------
039     * 30-Jan-2006 : Version 1, based on the AboutFrame (TM);
040     *
041     */
042    
043    package org.jfree.ui.about;
044    
045    import java.awt.BorderLayout;
046    import java.awt.Dialog;
047    import java.awt.Dimension;
048    import java.awt.Frame;
049    import java.awt.Image;
050    import java.util.List;
051    import java.util.ResourceBundle;
052    import javax.swing.BorderFactory;
053    import javax.swing.JDialog;
054    import javax.swing.JPanel;
055    import javax.swing.JScrollPane;
056    import javax.swing.JTabbedPane;
057    import javax.swing.JTextArea;
058    import javax.swing.border.Border;
059    
060    /**
061     * A dialog that displays information about the demonstration application.
062     *
063     * @author David Gilbert
064     */
065    public class AboutDialog extends JDialog {
066    
067        /** The preferred size for the frame. */
068        public static final Dimension PREFERRED_SIZE = new Dimension(560, 360);
069    
070        /** The default border for the panels in the tabbed pane. */
071        public static final Border STANDARD_BORDER = BorderFactory.createEmptyBorder(5, 5, 5, 5);
072    
073        /** Localised resources. */
074        private ResourceBundle resources;
075    
076        /** The application name. */
077        private String application;
078    
079        /** The application version. */
080        private String version;
081    
082        /** The copyright string. */
083        private String copyright;
084    
085        /** Other info about the application. */
086        private String info;
087    
088        /** The project logo. */
089        private Image logo;
090    
091        /** A list of contributors. */
092        private List contributors;
093    
094        /** The licence. */
095        private String licence;
096    
097        /**
098         * Constructs an about frame.
099         *
100         * @param title  the frame title.
101         * @param project  information about the project.
102         */
103        public AboutDialog(final String title, final ProjectInfo project) {
104    
105            init(title,
106                 project.getName(),
107                 "Version " + project.getVersion(),
108                 project.getInfo(),
109                 project.getLogo(),
110                 project.getCopyright(),
111                 project.getLicenceText(),
112                 project.getContributors(),
113                 project);
114    
115        }
116    
117      /**
118       * Creates a non-modal dialog without a title with the specifed
119       * <code>Frame</code> as its owner.
120       *
121       * @param owner the <code>Frame</code> from which the dialog is displayed.
122       * @param title  the title,
123       * @param project  the project.
124       */
125      public AboutDialog(final Frame owner,
126                         final String title,
127                         final ProjectInfo project)
128      {
129        super(owner);
130        init(title,
131             project.getName(),
132             "Version " + project.getVersion(),
133             project.getInfo(),
134             project.getLogo(),
135             project.getCopyright(),
136             project.getLicenceText(),
137             project.getContributors(),
138             project);
139      }
140    
141      /**
142       * Creates a non-modal dialog without a title with the specifed
143       * <code>Dialog</code> as its owner.
144       *
145       * @param owner the <code>Dialog</code> from which the dialog is displayed.
146       * @param title  the title.
147       * @param project  the project.
148       */
149      public AboutDialog(final Dialog owner,
150                         final String title,
151                         final ProjectInfo project)
152      {
153        super(owner);
154        init(title,
155             project.getName(),
156             "Version " + project.getVersion(),
157             project.getInfo(),
158             project.getLogo(),
159             project.getCopyright(),
160             project.getLicenceText(),
161             project.getContributors(),
162             project);
163      }
164    
165      /**
166         * Constructs an 'About' frame.
167         *
168         * @param title  the frame title.
169         * @param application  the application name.
170         * @param version  the version.
171         * @param info  other info.
172         * @param logo  an optional logo.
173         * @param copyright  the copyright notice.
174         * @param licence  the licence.
175         * @param contributors  a list of developers/contributors.
176         * @param libraries  a list of libraries.
177         */
178        private void init (final String title,
179                           final String application,
180                           final String version,
181                           final String info,
182                           final Image logo,
183                           final String copyright,
184                           final String licence,
185                           final List contributors,
186                           final ProjectInfo libraries) {
187    
188            setTitle(title);
189    
190            this.application = application;
191            this.version = version;
192            this.copyright = copyright;
193            this.info = info;
194            this.logo = logo;
195            this.contributors = contributors;
196            this.licence = licence;
197    
198            final String baseName = "org.jfree.ui.about.resources.AboutResources";
199            this.resources = ResourceBundle.getBundle(baseName);
200    
201            final JPanel content = new JPanel(new BorderLayout());
202            content.setBorder(STANDARD_BORDER);
203    
204            final JTabbedPane tabs = createTabs(libraries);
205            content.add(tabs);
206            setContentPane(content);
207    
208            pack();
209    
210        }
211    
212        /**
213         * Returns the preferred size for the about frame.
214         *
215         * @return the preferred size.
216         */
217        public Dimension getPreferredSize() {
218            return PREFERRED_SIZE;
219        }
220    
221        /**
222         * Creates a tabbed pane containing an about panel and a system properties panel.
223         *
224         * @param info  project information.
225         *
226         * @return a tabbed pane.
227         */
228        private JTabbedPane createTabs(final ProjectInfo info) {
229    
230            final JTabbedPane tabs = new JTabbedPane();
231    
232            final JPanel aboutPanel = createAboutPanel(info);
233            aboutPanel.setBorder(AboutDialog.STANDARD_BORDER);
234            final String aboutTab = this.resources.getString("about-frame.tab.about");
235            tabs.add(aboutTab, aboutPanel);
236    
237            final JPanel systemPanel = new SystemPropertiesPanel();
238            systemPanel.setBorder(AboutDialog.STANDARD_BORDER);
239            final String systemTab = this.resources.getString("about-frame.tab.system");
240            tabs.add(systemTab, systemPanel);
241    
242            return tabs;
243    
244        }
245    
246        /**
247         * Creates a panel showing information about the application, including the name, version,
248         * copyright notice, URL for further information, and a list of contributors.
249         *
250         * @param info  project info.
251         *
252         * @return a panel.
253         */
254        private JPanel createAboutPanel(final ProjectInfo info) {
255    
256            final JPanel about = new JPanel(new BorderLayout());
257    
258            final JPanel details = new AboutPanel(this.application, this.version, this.copyright, this.info,
259                                            this.logo);
260    
261            boolean includetabs = false;
262            final JTabbedPane tabs = new JTabbedPane();
263    
264            if (this.contributors != null) {
265                final JPanel contributorsPanel = new ContributorsPanel(this.contributors);
266                contributorsPanel.setBorder(AboutDialog.STANDARD_BORDER);
267                final String contributorsTab = this.resources.getString("about-frame.tab.contributors");
268                tabs.add(contributorsTab, contributorsPanel);
269                includetabs = true;
270            }
271    
272            if (this.licence != null) {
273                final JPanel licencePanel = createLicencePanel();
274                licencePanel.setBorder(STANDARD_BORDER);
275                final String licenceTab = this.resources.getString("about-frame.tab.licence");
276                tabs.add(licenceTab, licencePanel);
277                includetabs = true;
278            }
279    
280            if (info != null) {
281                final JPanel librariesPanel = new LibraryPanel(info);
282                librariesPanel.setBorder(AboutDialog.STANDARD_BORDER);
283                final String librariesTab = this.resources.getString("about-frame.tab.libraries");
284                tabs.add(librariesTab, librariesPanel);
285                includetabs = true;
286            }
287    
288            about.add(details, BorderLayout.NORTH);
289            if (includetabs) {
290                about.add(tabs);
291            }
292    
293            return about;
294    
295        }
296    
297        /**
298         * Creates a panel showing the licence.
299         *
300         * @return a panel.
301         */
302        private JPanel createLicencePanel() {
303    
304            final JPanel licencePanel = new JPanel(new BorderLayout());
305            final JTextArea area = new JTextArea(this.licence);
306            area.setLineWrap(true);
307            area.setWrapStyleWord(true);
308            area.setCaretPosition(0);
309            area.setEditable(false);
310            licencePanel.add(new JScrollPane(area));
311            return licencePanel;
312    
313        }
314    
315    
316    }