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 }