package modmanager.gui; import org.apache.log4j.Logger; import org.jdesktop.application.Action; import modmanager.business.ManagerOptions; import modmanager.controller.Manager; import modmanager.gui.l10n.L10n; import modmanager.utility.BBCode; import javax.swing.AbstractButton; import java.awt.Dimension; import java.awt.Frame; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; /** * About dialog * * @author Shirkit, Kovo */ public class ManagerAboutBox extends javax.swing.JDialog { Frame parent; ManagerOptions model; Manager controller; Logger logger; // Link to license private static final String licenseWeb = "http://www.gnu.org/licenses/gpl.html"; public ManagerAboutBox(Frame _parent, ManagerOptions _model) { super(_parent); this.parent = _parent; this.model = _model; logger = Logger.getLogger(this.getClass().getPackage().getName()); initComponents(); getRootPane().setDefaultButton(closeButton); controller = Manager.getInstance(); changelogEditorPane.setVisible(false); changelogEditorPane.setEditable(false); } @Action public void closeAboutBox() { dispose(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. * @throws IOException * @throws URISyntaxException */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { closeButton = new javax.swing.JButton(); javax.swing.JLabel appTitleLabel = new javax.swing.JLabel(); javax.swing.JLabel appVersionLabel = new javax.swing.JLabel(); javax.swing.JLabel appVersion = new javax.swing.JLabel(); javax.swing.JLabel appHomepageLabel = new javax.swing.JLabel(); javax.swing.JLabel appHomepage = new javax.swing.JLabel(); labelModIcon = new javax.swing.JLabel(); appLicenseLabel = new javax.swing.JLabel(); appLicense = new javax.swing.JLabel(); appAuthorsLabel = new javax.swing.JLabel(); appAuthors = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); aboutTextArea = new javax.swing.JEditorPane(); changelogToggleButton = new javax.swing.JToggleButton(); jScrollPane3 = new javax.swing.JScrollPane(); changelogEditorPane = new javax.swing.JEditorPane(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(L10n.getString("about.title")); setModal(true); setName("aboutBox"); // NOI18N setResizable(false); javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(ManagerAboutBox.class, this); closeButton.setAction(actionMap.get("closeAboutBox")); // NOI18N closeButton.setText(L10n.getString("about.button.close")); closeButton.setName("closeButton"); // NOI18N appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD, appTitleLabel.getFont().getSize()+4)); appTitleLabel.setName("appTitleLabel"); // NOI18N appVersionLabel.setFont(appVersionLabel.getFont().deriveFont(appVersionLabel.getFont().getStyle() | java.awt.Font.BOLD)); appVersionLabel.setText(L10n.getString("about.version.label")); appVersionLabel.setName("appVersionLabel"); // NOI18N appVersion.setText(this.model.getVersion()); appVersion.setName("appVersion"); // NOI18N appHomepageLabel.setFont(appHomepageLabel.getFont().deriveFont(appHomepageLabel.getFont().getStyle() | java.awt.Font.BOLD)); appHomepageLabel.setText(L10n.getString("about.homepage.label")); appHomepageLabel.setName("appHomepageLabel"); // NOI18N appHomepage.setText(model.HOMEPAGE); appHomepage.setName("appHomepage"); // NOI18N labelModIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modmanager/gui/resources/icon.png"))); // NOI18N labelModIcon.setName("labelModIcon"); // NOI18N appLicenseLabel.setFont(appLicenseLabel.getFont().deriveFont(appLicenseLabel.getFont().getStyle() | java.awt.Font.BOLD)); appLicenseLabel.setText(L10n.getString("about.license.label")); appLicenseLabel.setName("appLicenseLabel"); // NOI18N appLicense.setText(L10n.getString("about.license")); appLicense.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); appLicense.setName("appLicense"); // NOI18N appLicense.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { appLicenseMouseClicked(evt); } }); appAuthorsLabel.setFont(appAuthorsLabel.getFont().deriveFont(appAuthorsLabel.getFont().getStyle() | java.awt.Font.BOLD)); appAuthorsLabel.setText(L10n.getString("about.authors.label")); appAuthorsLabel.setName("appAuthorsLabel"); // NOI18N appAuthors.setText("Shirkit, Pennsu, Kovo, Gcommer"); appAuthors.setName("appAuthors"); // NOI18N jScrollPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); jScrollPane1.setName("jScrollPane1"); // NOI18N aboutTextArea.setBackground(javax.swing.UIManager.getDefaults().getColor("menu")); aboutTextArea.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); aboutTextArea.setContentType("text/html"); aboutTextArea.setEditable(false); aboutTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N aboutTextArea.setText(L10n.getString("about.description")); aboutTextArea.setAutoscrolls(false); aboutTextArea.setName("descTextArea"); // NOI18N jScrollPane1.setViewportView(aboutTextArea); changelogToggleButton.setText(L10n.getString("about.button.changelog")); changelogToggleButton.setName("changelogToggleButton"); // NOI18N changelogToggleButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { changelogToggleButtonActionPerformed(evt); } }); jScrollPane3.setName("jScrollPane3"); // NOI18N changelogEditorPane.setAutoscrolls(false); changelogEditorPane.setName("changelogEditorPane"); // NOI18N jScrollPane3.setViewportView(changelogEditorPane); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 465, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(labelModIcon) .addGap(18, 18, 18) .addComponent(appTitleLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(changelogToggleButton) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(appAuthorsLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(appLicenseLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(appVersionLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(appHomepageLabel, javax.swing.GroupLayout.Alignment.LEADING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(appVersion, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE) .addComponent(appHomepage, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE) .addComponent(appLicense, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE) .addComponent(appAuthors)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(26, 26, 26) .addComponent(appTitleLabel)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(labelModIcon)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(appHomepageLabel) .addComponent(appHomepage, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(appVersionLabel) .addComponent(appVersion, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(appLicenseLabel) .addComponent(appLicense)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(appAuthorsLabel) .addComponent(appAuthors, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(closeButton) .addComponent(changelogToggleButton)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents /** * Open license text ina web browser */ private void appLicenseMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_appLicenseMouseClicked controller.openWebsite(licenseWeb); }//GEN-LAST:event_appLicenseMouseClicked private void changelogToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changelogToggleButtonActionPerformed AbstractButton but = (AbstractButton) changelogToggleButton; // This means if he clicked to select the button if (but.isSelected()) { changelogEditorPane.setVisible(true); this.setBounds(this.getX(), this.getY(), this.getWidth(), this.getHeight() + 300); changelogEditorPane.setPreferredSize(new Dimension(changelogEditorPane.getWidth(), changelogEditorPane.getHeight() + 300)); if (changelogEditorPane.getText() == null || changelogEditorPane.getText().isEmpty()) { URL version = getClass().getClassLoader().getResource("modmanager/resources/changelog.txt"); BufferedReader in; String str = ""; try { in = new BufferedReader(new InputStreamReader(version.openStream())); while (true) { String temp = ""; temp = in.readLine(); if (temp != null) { str += temp + "\n"; } else { break; } } } catch (IOException ex) { } str = str.replace("\n", "<br/>"); changelogEditorPane.setContentType("text/html"); changelogEditorPane.setText("<html>" + BBCode.bbCodeToHtml(str) + "</html>"); } } else { // Click to unselect this.setBounds(this.getX(), this.getY(), this.getWidth(), this.getHeight() - 300); changelogEditorPane.setPreferredSize(new Dimension(changelogEditorPane.getWidth(), changelogEditorPane.getHeight() - 300)); changelogEditorPane.setVisible(false); } }//GEN-LAST:event_changelogToggleButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JEditorPane aboutTextArea; private javax.swing.JLabel appAuthors; private javax.swing.JLabel appAuthorsLabel; private javax.swing.JLabel appLicense; private javax.swing.JLabel appLicenseLabel; private javax.swing.JEditorPane changelogEditorPane; private javax.swing.JToggleButton changelogToggleButton; private javax.swing.JButton closeButton; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JLabel labelModIcon; // End of variables declaration//GEN-END:variables }