/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2011 Dmitry Barashev This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.gui.about; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Toolkit; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Set; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import com.google.common.base.Strings; import com.google.common.collect.Sets; import net.sourceforge.ganttproject.GPVersion; import net.sourceforge.ganttproject.gui.AbstractPagesDialog; import net.sourceforge.ganttproject.gui.NotificationManager; import net.sourceforge.ganttproject.gui.UIFacade; import net.sourceforge.ganttproject.gui.options.TopPanel; import net.sourceforge.ganttproject.language.GanttLanguage; public class AboutDialog2 extends AbstractPagesDialog { private static final Color HTML_BACKGROUND = new JPanel().getBackground(); public AboutDialog2(UIFacade uiFacade) { super("about", uiFacade, createPages()); } private static List<ListItem> createPages() { List<ListItem> result = new ArrayList<AbstractPagesDialog.ListItem>(); result.add(createSummaryPage()); result.add(createHtmlPage("license")); result.add(createHtmlPage("library")); return result; } private static ListItem createSummaryPage() { JPanel result = new JPanel(new BorderLayout()); Box htmlBox = Box.createVerticalBox(); { JEditorPane html = createHtml(GanttLanguage.getInstance().formatText("about.summary", GPVersion.CURRENT)); html.setAlignmentX(0.5f); htmlBox.add(html); htmlBox.add(Box.createVerticalStrut(20)); } { JEditorPane html = createHtml(GanttLanguage.getInstance().formatText("about.authors.short", "http://ganttproject.biz/about")); html.setAlignmentX(0.5f); htmlBox.add(html); htmlBox.add(Box.createVerticalStrut(20)); } result.add(htmlBox, BorderLayout.NORTH); JLabel icon = new JLabel(new ImageIcon(AboutDialog2.class.getResource("/icons/ganttproject.png"))); icon.setAlignmentX(0.5f); JPanel iconWrapper = new JPanel(new BorderLayout()); iconWrapper.add(icon, BorderLayout.NORTH); result.add(iconWrapper, BorderLayout.CENTER); result.setBorder(BorderFactory.createEmptyBorder(30, 0, 0, 0)); return new ListItem(false, "summary", i18n("summary"), result); } private static ListItem createTranslationsPage() { StringBuilder builder = new StringBuilder(); for (Locale l : GanttLanguage.getInstance().getAvailableLocales()) { String language = GanttLanguage.getInstance().formatLanguageAndCountry(l); String translatorsKey = "about.translations." + (Strings.isNullOrEmpty(l.getCountry()) ? l.getLanguage() : l.getLanguage() + "_" + l.getCountry()); String translators = GanttLanguage.getInstance().getText(translatorsKey); if (translators == null) { continue; } builder.append(GanttLanguage.getInstance().formatText("about.translations.entry", language, translators)); } return createHtmlPage("translations", i18n("translations"), GanttLanguage.getInstance().formatText("about.translations", builder.toString())); } private static ListItem createHtmlPage(String key) { return createHtmlPage(key, i18n(key), i18n("about." + key)); } private static ListItem createHtmlPage(String key, String title, String body) { JPanel result = new JPanel(new BorderLayout()); JComponent topPanel = TopPanel.create(title, null); topPanel.setAlignmentX(Component.LEFT_ALIGNMENT); result.add(topPanel, BorderLayout.NORTH); JPanel planePageWrapper = new JPanel(new BorderLayout()); planePageWrapper.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); JComponent planePage = createHtml(body); planePage.setAlignmentX(Component.LEFT_ALIGNMENT); planePageWrapper.add(planePage, BorderLayout.NORTH); result.add(planePageWrapper, BorderLayout.CENTER); return new ListItem(false, key, title, result); } private static JEditorPane createHtml(String html) { JEditorPane htmlPane = new JEditorPane("text/html", html); htmlPane.setEditable(false); htmlPane.setBackground(HTML_BACKGROUND); htmlPane.addHyperlinkListener(NotificationManager.DEFAULT_HYPERLINK_LISTENER); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); htmlPane.setSize(new Dimension(screenSize.width / 3, Integer.MAX_VALUE)); return htmlPane; } private static String i18n(String key) { return GanttLanguage.getInstance().getText(key); } @Override protected void onOk() { } }