package GUI;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import codeGen.MainCodeGen;
import Start.Start;
public class HelpDialog extends JDialog{
private static final long serialVersionUID = 1L;
public HelpDialog() {
setTitle("About");
setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resources/logo.png")));
setModal(true);
setPreferredSize(new Dimension(600,600));
setResizable(false);
setLayout(new FlowLayout(FlowLayout.CENTER));
createText();
pack();
setLocationRelativeTo(getParent());
setVisible(true);
}
private void createText() {
JLabel icon = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/logo_help.png")));
icon.setPreferredSize(new Dimension(600,212));
JLabel text1 = new JLabel("<html>IDE for PseuCo, a programming language for concurrent programming. It's syntax is a kind of"
+" stripped-down Java with some inspiration coming from Google Go.<br>"
+"The IDE was created for the\"Nebenl��ufige Programmierung\"-lecture held by Holger"
+" Hermanns and Christian Eisentraut at Saarland University in summer 2013.<br>"
+"If you have any problems concerning the compiler please contact:</html>");
text1.setPreferredSize(new Dimension(401,110));
JLabel mail1 = getMailLabel("Lisa Detzler", "s9lidetz@stud.uni-saarland.de");
mail1.setPreferredSize(new Dimension(401,20));
JLabel text2 = new JLabel("Any problems with the GUI should be reported to:");
text2.setPreferredSize(new Dimension(401,20));
JLabel mail2 = getMailLabel("Markus Bauer", "s9mkbaue@stud.uni-saarland.de");
mail2.setPreferredSize(new Dimension(401,20));
JLabel mail3 = getMailLabel("Marc Jose", "s9majose@stud.uni-saarland.de");
mail3.setPreferredSize(new Dimension(401,20));
JLabel text3 = new JLabel("Please include your sourcecode and error-message in the email.");
text3.setPreferredSize(new Dimension(401,20));
add(icon);
add(text1);
add(mail1);
add(text2);
add(mail2);
add(mail3);
add(text3);
JPanel placeHolder = new JPanel();
placeHolder.setPreferredSize(new Dimension(600,20));
add(placeHolder);
JButton openReadme = new JButton("Readme");
openReadme.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InputStream inputStream = GUI.class.getClass().getResourceAsStream("/resources/README.pdf");
FileOutputStream outPutStream = null;
try {
File tempFile = File.createTempFile("help", ".pdf");
outPutStream = new FileOutputStream(tempFile);
try {
byte[] buffer = new byte[ 0xFFFF ];
for (int len; (len = inputStream.read(buffer)) != -1;)
outPutStream.write( buffer, 0, len );
} catch( IOException e1 ) {
e1.printStackTrace();
}
finally {
if ( inputStream != null )
try { inputStream.close(); } catch ( IOException e1 ) { if (Start.debug) e1.printStackTrace(); }
if ( outPutStream != null )
try { outPutStream.close(); } catch ( IOException e1 ) { if (Start.debug) e1.printStackTrace(); }
}
Desktop.getDesktop().open(tempFile);
} catch (IOException e1) {}
finally {
try {
outPutStream.close();
} catch (Exception ignore) {}
}
}
});
add(openReadme);
JPanel info = new JPanel();
info.setLayout(new BorderLayout());
info.add(new JLabel("IDE-Version: "+Start.version+" Compiler-Version: "+MainCodeGen.version), BorderLayout.SOUTH);
info.setPreferredSize(new Dimension(570,50));
add(info);
}
private JLabel getMailLabel(String name, final String address) {
JLabel mail = new JLabel("<html><font size=4><a href=#>" + name + " (" + address + ")</a></font></html>");
mail.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
mail.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
Desktop.getDesktop().mail(new URI("mailto:" + address + "?subject=[PseuCoCompilerErrorReport]"));
} catch (URISyntaxException | IOException ex) {
}
}
});
return mail;
}
}