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 }