package studio.ui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import studio.kdb.Lm;
import studio.utils.BrowserLaunch;

public class HelpDialog extends JDialog{
  public HelpDialog(JFrame parent){
    super(parent,"Studio for kdb+");
    SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
    f.setTimeZone(TimeZone.getTimeZone("GMT"));
    final JEditorPane jep=new JEditorPane("text/html",
      "<html><head><title>Studio for kdb+</title></head><body><h1>Studio for kdb+</h1>"
      +"<br>Version: "+Lm.getVersionString()
      +"<br>Build date: "+f.format(Lm.buildDate)
      +"<br>License: <a href=\"http://github.com/CharlesSkelton/studio/blob/master/license.md\">GPL v3</a>"
      +"<br>N.B. Some components have their own license terms, see this project on github for details."
      +"<br>Source available from <a href=\"http://github.com/CharlesSkelton/studio\">Github</a>"
      +"<br>Contributions and corrections welcome."
      +"</body></html>");
    jep.setEditable(false);
    jep.setOpaque(true);
    jep.addHyperlinkListener(new HyperlinkListener(){
      @Override
      public void hyperlinkUpdate(HyperlinkEvent hle){
        if(HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType()))
            BrowserLaunch.openURL(hle.getURL().toString());
      }
    });
    getContentPane().add(jep);
    JPanel buttonPane=new JPanel();
    JButton button=new JButton("Close");
    buttonPane.add(button);
    button.addActionListener(new CloseActionListener());
    getContentPane().add(buttonPane,BorderLayout.PAGE_END);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    pack();
    setVisible(true);
  }
  public void setStartLocation(Component parent){
    Point parentlocation=parent.getLocation();
    Dimension oursize=getPreferredSize();
    Dimension parentsize=parent.getSize();
    int x=parentlocation.x+(parentsize.width-oursize.width)/2;
    int y=parentlocation.y+(parentsize.height-oursize.height)/2;
    x=Math.max(0,x);
    y=Math.max(0,y);
    setLocation(x,y);
  }
  @Override
  public JRootPane createRootPane(){
    JRootPane rootPane=new JRootPane();
    KeyStroke stroke=KeyStroke.getKeyStroke("ESCAPE");
    Action action=new AbstractAction(){
      @Override
      public void actionPerformed(ActionEvent e){
        setVisible(false);
        dispose();
      }
    };
    InputMap inputMap=rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(stroke,"ESCAPE");
    rootPane.getActionMap().put("ESCAPE",action);
    return rootPane;
  }
  class CloseActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      setVisible(false);
      dispose();
    }
  }
}

@@ -1224,14 +1224,16 @@
 d%5C%22%3E
-GPL v3
+Apache 2
 %3C/a%3E

Update HelpDialog.java