/*
* MVAboutDialog
* Copyright (C) 2013 CrystalPalace
* crystalpalace1977@googlemail.com
*
* 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
* 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, see <http://www.gnu.org/licenses/>.
*/
package mediathek.gui.dialog;
import com.jidesoft.swing.MarqueePane;
import com.jidesoft.utils.SystemInfo;
import mSearch.tool.Functions;
import mediathek.config.Daten;
import mediathek.config.Konstanten;
import mediathek.gui.actions.DisposeDialogAction;
import mediathek.gui.actions.UrlHyperlinkAction;
import mediathek.tool.BeobMausUrl;
import mediathek.tool.EscBeenden;
import org.jdesktop.swingx.JXHyperlink;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
@SuppressWarnings("serial")
public class AboutDialog extends JDialog {
private final JLabel lblVersion = new JLabel();
private final JPanel buttonPane = new JPanel();
private final JLabel lblFilmlistPath = new JLabel();
private final JLabel lblSettingsFilePath = new JLabel();
private final JLabel lblJavaVersion = new JLabel();
private final JLabel lblVmType = new JLabel();
private MarqueePane marqueePane;
private void setupVersionString() {
String strVersion = "Version ";
strVersion += Functions.getBuildNr();
lblVersion.setText(strVersion);
}
/**
* Read the credits HTML file from resources
* @return the HTML content as String
*/
private String loadCredits()
{
String content;
final StringBuilder contentBuilder = new StringBuilder();
URL url = this.getClass().getResource("/mediathek/res/programm/about/credits.html");
try (InputStreamReader isr = new InputStreamReader(url.openStream());
BufferedReader in = new BufferedReader(isr))
{
String str;
while ((str = in.readLine()) != null) {
contentBuilder.append(str);
}
} catch (IOException ignored) {
ignored.printStackTrace();
}
content = contentBuilder.toString();
return content;
}
private void initMarqueePane() {
final JEditorPane messagePane = new JEditorPane();
messagePane.setEditable(false);
messagePane.setFocusable(false);
messagePane.setContentType("text/html");
messagePane.setText(loadCredits());
marqueePane = new MarqueePane(messagePane);
marqueePane.setStayDelay(3000);
marqueePane.setScrollDirection(MarqueePane.SCROLL_DIRECTION_UP);
marqueePane.setScrollAmount(1);
}
private void setupJavaInformation() {
lblJavaVersion.setText(System.getProperty("java.version"));
String strVmType = System.getProperty("java.vm.name");
strVmType += " (";
strVmType += System.getProperty("java.vendor");
strVmType += ")";
lblVmType.setText(strVmType);
}
private void initialize() {
try {
setupVersionString();
setupJavaInformation();
// Programmpfade
final Path xmlFilePath = Daten.getMediathekXmlFilePath();
lblSettingsFilePath.setText(xmlFilePath.toAbsolutePath().toString());
lblFilmlistPath.setText(Daten.getDateiFilmliste());
// auf dem Mac brauchen wir den Schließen Button nicht..
if (SystemInfo.isMacOSX()) {
this.remove(buttonPane);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public AboutDialog(JFrame parent) {
super(parent);
setModal(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
new EscBeenden(this) {
@Override
public void beenden_(JDialog d) {
d.dispose();
}
};
initMarqueePane();
setResizable(false);
setModalityType(ModalityType.APPLICATION_MODAL);
setBounds(100, 100, 790, 491);
getContentPane().setLayout(new BorderLayout());
JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.WHITE);
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
JLabel lblProgramIcon = new JLabel();
lblProgramIcon.setIcon(new ImageIcon(AboutDialog.class.getResource("/mediathek/res/MediathekView.png")));
JLabel lblProgramName = new JLabel("MediathekView");
lblProgramName.setFont(new Font("Lucida Grande", Font.BOLD, 24));
Color greyColor = new Color(159, 159, 159);
lblVersion.setForeground(greyColor);
lblVersion.setFont(new Font("Lucida Grande", Font.BOLD, 13));
JXHyperlink hprlnkWebsite = new JXHyperlink();
hprlnkWebsite.setHorizontalAlignment(SwingConstants.LEFT);
hprlnkWebsite.setAction(new HyperlinkAction(parent, Konstanten.ADRESSE_WEBSITE));
hprlnkWebsite.setText("Website");
hprlnkWebsite.addMouseListener(new BeobMausUrl(Konstanten.ADRESSE_WEBSITE));
JXHyperlink hprlnkDonation = new JXHyperlink();
hprlnkDonation.setHorizontalAlignment(SwingConstants.LEFT);
hprlnkDonation.setAction(new HyperlinkAction(parent, Konstanten.ADRESSE_DONATION));
hprlnkDonation.setText("Spende");
hprlnkDonation.addMouseListener(new BeobMausUrl(Konstanten.ADRESSE_DONATION));
JXHyperlink hprlnkAnleitung = new JXHyperlink();
hprlnkAnleitung.setHorizontalAlignment(SwingConstants.LEFT);
hprlnkAnleitung.setAction(new HyperlinkAction(parent, Konstanten.ADRESSE_ANLEITUNG));
hprlnkAnleitung.setText("Anleitung");
hprlnkAnleitung.addMouseListener(new BeobMausUrl(Konstanten.ADRESSE_ANLEITUNG));
JXHyperlink hprlnkForum = new JXHyperlink();
hprlnkForum.setHorizontalAlignment(SwingConstants.LEFT);
hprlnkForum.setAction(new HyperlinkAction(parent, Konstanten.ADRESSE_FORUM));
hprlnkForum.setText("Forum");
hprlnkForum.addMouseListener(new BeobMausUrl(Konstanten.ADRESSE_FORUM));
JPanel pnlProgramPaths = new JPanel();
TitledBorder border = new TitledBorder("Programmpfade");
pnlProgramPaths.setBorder(border);
pnlProgramPaths.setBackground(Color.WHITE);
JPanel pnlJavaInformation = new JPanel();
border = new TitledBorder("Java Information");
pnlJavaInformation.setBorder(border);
pnlJavaInformation.setBackground(Color.WHITE);
GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
gl_contentPanel.setHorizontalGroup(gl_contentPanel.createParallelGroup(
Alignment.LEADING).addGroup(
gl_contentPanel
.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPanel
.createParallelGroup(Alignment.LEADING).addComponent(lblProgramIcon)
.addComponent(hprlnkWebsite,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(hprlnkDonation,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(hprlnkForum,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(hprlnkAnleitung,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
.addComponent(marqueePane, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE)
.addComponent(pnlJavaInformation, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE)
.addComponent(pnlProgramPaths, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE)
.addComponent(lblProgramName)
.addComponent(lblVersion, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE))
.addContainerGap()));
gl_contentPanel.setVerticalGroup(
gl_contentPanel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPanel.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPanel.createSequentialGroup()
.addComponent(lblProgramName)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(lblVersion)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(marqueePane, GroupLayout.PREFERRED_SIZE, 131, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(pnlProgramPaths, GroupLayout.PREFERRED_SIZE, 78, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(pnlJavaInformation, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_contentPanel.createSequentialGroup()
.addComponent(lblProgramIcon)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(hprlnkWebsite, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(hprlnkDonation, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(hprlnkForum, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(hprlnkAnleitung, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addContainerGap(28, Short.MAX_VALUE)));
JLabel lblVersion_1 = new JLabel("Version:");
lblVersion_1.setForeground(greyColor);
JLabel lblJavaType = new JLabel("Type:");
lblJavaType.setForeground(greyColor);
lblJavaVersion.setForeground(greyColor);
lblVmType.setForeground(greyColor);
GroupLayout gl_panel;
GroupLayout gl_pnlJavaInformation = new GroupLayout(pnlJavaInformation);
gl_pnlJavaInformation.setHorizontalGroup(
gl_pnlJavaInformation.createParallelGroup(Alignment.LEADING)
.addGroup(gl_pnlJavaInformation.createSequentialGroup()
.addContainerGap()
.addGroup(gl_pnlJavaInformation.createParallelGroup(Alignment.TRAILING)
.addComponent(lblJavaType)
.addComponent(lblVersion_1))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_pnlJavaInformation.createParallelGroup(Alignment.LEADING)
.addComponent(lblVmType, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
.addComponent(lblJavaVersion, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE))
.addContainerGap()));
gl_pnlJavaInformation.setVerticalGroup(
gl_pnlJavaInformation.createParallelGroup(Alignment.LEADING)
.addGroup(gl_pnlJavaInformation.createSequentialGroup()
.addContainerGap()
.addGroup(gl_pnlJavaInformation.createParallelGroup(Alignment.BASELINE)
.addComponent(lblVersion_1)
.addComponent(lblJavaVersion))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_pnlJavaInformation.createParallelGroup(Alignment.BASELINE)
.addComponent(lblJavaType)
.addComponent(lblVmType))
.addContainerGap(52, Short.MAX_VALUE)));
pnlJavaInformation.setLayout(gl_pnlJavaInformation);
JLabel lblFilmliste = new JLabel("Filmliste:");
lblFilmliste.setHorizontalAlignment(SwingConstants.RIGHT);
lblFilmliste.setForeground(greyColor);
lblFilmlistPath.setForeground(greyColor);
JLabel lblEinstellungen = new JLabel("Einstellungen:");
lblEinstellungen.setForeground(greyColor);
lblSettingsFilePath.setForeground(greyColor);
gl_panel = new GroupLayout(pnlProgramPaths);
gl_panel.setHorizontalGroup(gl_panel
.createParallelGroup(Alignment.LEADING)
.addGroup(
gl_panel.createSequentialGroup()
.addContainerGap()
.addGroup(
gl_panel.createParallelGroup(
Alignment.LEADING, false)
.addComponent(
lblFilmliste,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
lblEinstellungen,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(
gl_panel.createParallelGroup(
Alignment.TRAILING)
.addComponent(
lblSettingsFilePath,
GroupLayout.DEFAULT_SIZE,
345, Short.MAX_VALUE)
.addComponent(
lblFilmlistPath,
GroupLayout.DEFAULT_SIZE,
345, Short.MAX_VALUE))
.addContainerGap()));
gl_panel.setVerticalGroup(gl_panel.createParallelGroup(
Alignment.LEADING)
.addGroup(
gl_panel.createSequentialGroup()
.addContainerGap()
.addGroup(
gl_panel.createParallelGroup(
Alignment.BASELINE)
.addComponent(lblFilmliste)
.addComponent(lblFilmlistPath))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(
gl_panel.createParallelGroup(
Alignment.BASELINE)
.addComponent(lblEinstellungen)
.addComponent(
lblSettingsFilePath))
.addContainerGap(10, Short.MAX_VALUE)));
pnlProgramPaths.setLayout(gl_panel);
contentPanel.setLayout(gl_contentPanel);
{
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("Schlie\u00DFen");
okButton.setAction(new DisposeDialogAction(this, "Schlie\u00DFen", "Dialog schlie\u00DFen"));
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
}
initialize();
pack();
}
/**
* Opens a browser window
*/
private class HyperlinkAction extends AbstractAction {
private String url = null;
private JFrame parent = null;
public HyperlinkAction(JFrame parent, final String url) {
this.url = url;
this.parent = parent;
putValue(SHORT_DESCRIPTION, url);
putValue(LONG_DESCRIPTION, url);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
UrlHyperlinkAction.openURL(parent, url);
} catch (URISyntaxException ignored) {
}
}
}
}