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
}