package statalign.ui;
import java.awt.Desktop;
import java.net.URI;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import statalign.StatAlign;
import statalign.utils.Libraries;
public class AboutDlg extends JDialog {
private static String ABOUT_MSG;
private JFrame owner;
private JScrollPane scroll;
private JEditorPane pane;
static {
StringBuilder msg = new StringBuilder();
msg.append(
"<html>" +
// "<div style='padding: 10px; background: #303030;'>" +
// "<font face='Arial' color='white'><center>" +
//// "<img href='"+f.toURI()+"'>" +
//// "<div style='font-family: Times;font-size: 30px;color: #3526a0;'><i>StatAlign</i></div>" +
// "<p><font size=+2>StatAlign</font><br><font size=+1>"+StatAlign.version+"</font></div>" +
"<div style='padding: 10px'>" +
"<font face='Arial'><center>" +
"<p><font size=+2>StatAlign</font><br><font size=+1>"+StatAlign.version+"</font>" +
"<p>© 2008–2014 Ádám Novák et al.<br>"+
"<a href='http://STATALIGN-www'>"+StatAlign.webPageURL+"</a><br><br>" +
"<p><b>Core software by</b><br>"+
"<p>Ádám Novák<br>István Miklós<br>Rune Lyngsø<br>Joe Herman<br><br>" +
"<p><b>Protein structural alignment by</b><br>"+
"<p>Christopher Challis<br>Joe Herman<br><br>" +
"<p><b>RNA structure prediction by</b><br>"+
"<p>Preeti Arunapuram<br>Ingólfur Eðvarðsson<br>Michael Golden<br><br>" +
"<p><b>Consensus tree and<br>parallelised MC^3 by</b><br>" +
"<p>Hrafn Eiríksson<br>Viktor Jonsson<br>David Wood<br><br>" +
"<p><b>Special thanks to</b><br>" +
"<p>Jotun Hein<br>James Anderson<br>Zsuzsanna Sükösd<br>William Majoros<br><br>" +
"<p>StatAlign is distributed under the<br>" +
"<a href='http://STATALIGN-license'>GNU General Public License Version 3</a><br><br>" +
"<p>StatAlign is built using the following libraries:<br><br>" +
"<table>");
String LIBTABROW = "<tr><td>#LNAME# #VER# <td> <a href='http://#NAME#-www'>Web page</a> <td> <a href='http://#NAME#-license'>License</a>";
for(Libraries lib : Libraries.values()) {
if(lib.ordinal() == 0) // skip StatAlign
continue;
msg.append(LIBTABROW.replaceAll("#NAME#", lib.name()).
replaceAll("#LNAME#", lib.longName).
replaceAll("#VER#", lib.version));
}
msg.append("</table></center></font></div></div></html>");
ABOUT_MSG = msg.toString();
}
public AboutDlg(JFrame owner) {
this.owner = owner;
pane = new JEditorPane("text/html", ABOUT_MSG);
pane.setEditable(false);
// pane.setOpaque(false);
pane.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent hle) {
if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
String url = hle.getURL().toString();
try {
Matcher m = Pattern.compile("http://(.*)-www").matcher(url);
if(m.matches()) {
URI uri = Libraries.valueOf(m.group(1)).getWebPageURI();
Desktop.getDesktop().browse(uri);
}
m = Pattern.compile("http://(.*)-license").matcher(url);
if(m.matches()) {
Libraries lib = Libraries.valueOf(m.group(1));
JDialog dlg = new TextDlg(lib.getLicenseFile(), lib.longName+"'s license");
dlg.setVisible(true);
}
if(url.endsWith("doc")) {
}
} catch (Exception ex) {
ErrorMessage.showPane(AboutDlg.this.owner, ex, true);
}
}
}
});
scroll = new JScrollPane(pane);
pane.addKeyListener(new ScrollAdapter(scroll.getVerticalScrollBar(), 2, this));
add(scroll);
setTitle("About StatAlign");
// setModal(true);
setSize(500, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
if(b == true) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMinimum());
}
});
}
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMinimum());
}
public static void main(String[] args) {
AboutDlg dlg = new AboutDlg(null);
dlg.setVisible(true);
}
}