/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved.
*/
package org.pentaho.reporting.engine.classic.core.modules.gui.base.about;
import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.util.ResourceBundle;
import javax.swing.BorderFactory;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import org.pentaho.reporting.engine.classic.core.modules.gui.base.SwingPreviewModule;
import org.pentaho.reporting.libraries.base.versioning.Licenses;
import org.pentaho.reporting.libraries.base.versioning.ProjectInformation;
/**
* A dialog that displays information about the demonstration application.
*
* @author David Gilbert
*/
public class AboutDialog extends JDialog
{
/**
* The preferred size for the frame.
*/
public static final Dimension PREFERRED_SIZE = new Dimension(560, 360);
/**
* The default border for the panels in the tabbed pane.
*/
public static final Border STANDARD_BORDER = BorderFactory.createEmptyBorder(5, 5, 5, 5);
/**
* Localised resources.
*/
private ResourceBundle resources;
/**
* The application name.
*/
private String application;
/**
* The application version.
*/
private String version;
/**
* The copyright string.
*/
private String copyright;
/**
* Other info about the application.
*/
private String info;
/**
* The licence.
*/
private String licence;
/**
* Constructs an about frame.
*
* @param title the frame title.
* @param project information about the project.
*/
public AboutDialog(final String title, final ProjectInformation project)
{
init(title, project);
}
/**
* Creates a non-modal dialog without a title with the specifed <code>Frame</code> as its owner.
*
* @param owner the <code>Frame</code> from which the dialog is displayed
*/
public AboutDialog(final Frame owner,
final String title,
final ProjectInformation project)
{
super(owner);
init(title, project);
}
/**
* Creates a non-modal dialog without a title with the specifed <code>Dialog</code> as its owner.
*
* @param owner the <code>Dialog</code> from which the dialog is displayed
*/
public AboutDialog(final Dialog owner,
final String title,
final ProjectInformation project)
{
super(owner);
init(title, project);
}
/**
* Constructs an 'About' frame.
*
* @param title the frame title.
* @param libraries a list of libraries.
*/
private void init(final String title,
final ProjectInformation libraries)
{
setTitle(title);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.application = libraries.getName();
this.version = libraries.getVersion();
this.copyright = libraries.getCopyright();
this.info = libraries.getInfo();
if ("GPL".equalsIgnoreCase(libraries.getLicenseName())) // NON-NLS
{
this.licence = Licenses.getInstance().getGPL();
}
else if ("LGPL".equalsIgnoreCase(libraries.getLicenseName())) // NON-NLS
{
this.licence = Licenses.getInstance().getLGPL();
}
else
{
this.licence = libraries.getLicenseName();
}
this.resources = ResourceBundle.getBundle(SwingPreviewModule.BUNDLE_NAME);
final JPanel content = new JPanel(new BorderLayout());
content.setBorder(AboutDialog.STANDARD_BORDER);
final JTabbedPane tabs = createTabs(libraries);
content.add(tabs);
setContentPane(content);
pack();
}
/**
* Returns the preferred size for the about frame.
*
* @return the preferred size.
*/
public Dimension getPreferredSize()
{
return AboutDialog.PREFERRED_SIZE;
}
/**
* Creates a tabbed pane containing an about panel and a system properties panel.
*
* @return a tabbed pane.
*/
private JTabbedPane createTabs(final ProjectInformation info)
{
final JTabbedPane tabs = new JTabbedPane();
final JPanel aboutPanel = createAboutPanel(info);
aboutPanel.setBorder(AboutDialog.STANDARD_BORDER);
final String aboutTab = this.resources.getString("about-frame.tab.about"); // NON-NLS
tabs.add(aboutTab, aboutPanel);
final JPanel systemPanel = new SystemPropertiesPanel();
systemPanel.setBorder(AboutDialog.STANDARD_BORDER);
final String systemTab = this.resources.getString("about-frame.tab.system"); // NON-NLS
tabs.add(systemTab, systemPanel);
return tabs;
}
/**
* Creates a panel showing information about the application, including the name, version, copyright notice, URL for
* further information, and a list of contributors.
*
* @return a panel.
*/
private JPanel createAboutPanel(final ProjectInformation info)
{
final JPanel about = new JPanel(new BorderLayout());
final JPanel details = createAboutTab();
boolean includetabs = false;
final JTabbedPane tabs = new JTabbedPane();
if (this.licence != null)
{
final JPanel licencePanel = createLicencePanel();
licencePanel.setBorder(AboutDialog.STANDARD_BORDER);
final String licenceTab = this.resources.getString("about-frame.tab.licence"); // NON-NLS
tabs.add(licenceTab, licencePanel);
includetabs = true;
}
if (info != null)
{
final JPanel librariesPanel = new LibraryPanel(info);
librariesPanel.setBorder(AboutDialog.STANDARD_BORDER);
final String librariesTab = this.resources.getString("about-frame.tab.libraries"); // NON-NLS
tabs.add(librariesTab, librariesPanel);
includetabs = true;
}
about.add(details, BorderLayout.NORTH);
if (includetabs)
{
about.add(tabs);
}
return about;
}
private JPanel createAboutTab()
{
final JPanel textPanel = new JPanel(new GridLayout(4, 1, 0, 4));
final JPanel appPanel = new JPanel();
final JLabel appLabel = new JLabel(application);
appLabel.setHorizontalTextPosition(SwingConstants.CENTER);
appPanel.add(appLabel);
final JPanel verPanel = new JPanel();
final JLabel verLabel = new JLabel(version);
verLabel.setHorizontalTextPosition(SwingConstants.CENTER);
verPanel.add(verLabel);
final JPanel copyrightPanel = new JPanel();
final JLabel copyrightLabel = new JLabel(copyright);
copyrightLabel.setHorizontalTextPosition(SwingConstants.CENTER);
copyrightPanel.add(copyrightLabel);
final JPanel infoPanel = new JPanel();
final JLabel infoLabel = new JLabel(info);
infoLabel.setHorizontalTextPosition(SwingConstants.CENTER);
infoPanel.add(infoLabel);
textPanel.add(appPanel);
textPanel.add(verPanel);
textPanel.add(copyrightPanel);
textPanel.add(infoPanel);
return textPanel;
}
/**
* Creates a panel showing the licence.
*
* @return a panel.
*/
private JPanel createLicencePanel()
{
final JPanel licencePanel = new JPanel(new BorderLayout());
final JTextArea area = new JTextArea(this.licence);
area.setLineWrap(true);
area.setWrapStyleWord(true);
area.setCaretPosition(0);
area.setEditable(false);
licencePanel.add(new JScrollPane(area));
return licencePanel;
}
}