/* * (C) Copyright 2014 Boni Garcia (http://bonigarcia.github.io/) * * 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, see <http://www.gnu.org/licenses/>. */ package io.github.bonigarcia.dualsub.gui; import io.github.bonigarcia.dualsub.util.Charset; import io.github.bonigarcia.dualsub.util.I18N; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import org.markdown4j.Markdown4jProcessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * AboutDialog. * * @author Boni Garcia ([email protected]) * @since 1.0.0 */ public class AboutDialog extends JDialog { private static final Logger log = LoggerFactory .getLogger(AboutDialog.class); private static final long serialVersionUID = 1L; private DualSub parent; // Scrolls private JScrollPane scrollPane; private JScrollPane scrollLicense; private JScrollPane scrollChangelog; public AboutDialog(DualSub parent, boolean modal) { super(parent.getFrame(), modal); this.parent = parent; initComponents(); Runnable doScroll = new Runnable() { public void run() { scrollPane.getVerticalScrollBar().setValue(0); scrollChangelog.getVerticalScrollBar().setValue(0); scrollLicense.getVerticalScrollBar().setValue(0); } }; SwingUtilities.invokeLater(doScroll); } public void setVisible() { final int width = 500; final int height = 430; this.setBounds(100, 100, width, height); Point point = parent.getFrame().getLocationOnScreen(); Dimension size = parent.getFrame().getSize(); this.setLocation( (int) (point.getX() + ((size.getWidth() - width) / 2)), (int) (point.getY() + ((size.getHeight() - height) / 2))); setVisible(true); } private void initComponents() { setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setTitle(I18N.getText("Window.name.text")); // Features this.setResizable(false); getContentPane().setLayout(null); this.getContentPane().setBackground(parent.getBackground()); // Tabs JTabbedPane tabs = new JTabbedPane(); tabs.setBounds(10, 11, 474, 351); this.getContentPane().add(tabs); // About tab JPanel aboutTab = new JPanel(); aboutTab.setBackground(parent.getBackground()); tabs.addTab(I18N.getHtmlText("About.about.text"), aboutTab); aboutTab.setLayout(null); JLabel lblDualSub = new JLabel(); lblDualSub.setIcon(new ImageIcon(ClassLoader .getSystemResource("img/dualsub-about.png"))); lblDualSub.setBounds(66, 0, 330, 140); aboutTab.add(lblDualSub); scrollPane = new JScrollPane(); scrollPane.setBounds(0, 139, 470, 187); aboutTab.add(scrollPane); JTextPane txtrDualSub = new JTextPane(); scrollPane.setViewportView(txtrDualSub); txtrDualSub.setContentType("text/html"); addTextContentToArea(txtrDualSub, "README.md", true); txtrDualSub.setEditable(false); tabs.setVisible(true); // Changelog tab JPanel changelogTab = new JPanel(); changelogTab.setBackground(parent.getBackground()); changelogTab.setLayout(null); tabs.addTab(I18N.getHtmlText("About.changelog.text"), null, changelogTab, null); scrollChangelog = new JScrollPane(); scrollChangelog.setBounds(0, 0, 470, 327); changelogTab.add(scrollChangelog); JTextPane txtChangelog = new JTextPane(); scrollChangelog.setViewportView(txtChangelog); addTextContentToArea(txtChangelog, "changelog", false); txtChangelog.setEditable(false); // License tab JPanel licenseTab = new JPanel(); licenseTab.setBackground(parent.getBackground()); licenseTab.setLayout(null); tabs.addTab(I18N.getHtmlText("About.license.text"), null, licenseTab, null); scrollLicense = new JScrollPane(); scrollLicense.setBounds(0, 0, 470, 327); licenseTab.add(scrollLicense); JTextPane txtLicense = new JTextPane(); scrollLicense.setViewportView(txtLicense); addTextContentToArea(txtLicense, "LICENSE", false); txtLicense.setEditable(false); JButton btnOk = new JButton(I18N.getHtmlText("About.ok.text")); btnOk.setBounds(203, 373, 89, 23); btnOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); } }); this.getContentPane().add(btnOk); } private void addTextContentToArea(JTextPane textArea, String file, boolean isHtml) { try { InputStream is = ClassLoader.getSystemResourceAsStream(file); if (is == null) { is = new FileInputStream(file); } BufferedReader in = new BufferedReader(new InputStreamReader(is, Charset.ISO88591)); String line = in.readLine(); String allLines = ""; while (line != null) { if (isHtml) { line = new Markdown4jProcessor().process(line); } else { line += "\r\n"; } allLines += line; line = in.readLine(); } in.close(); textArea.setText(allLines); } catch (IOException e) { log.error("Exception adding content to area", e); } } }