package com.qksnap.www.snap.gui.tabpane;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import com.qksnap.www.snap.autostart.WinRegistry;
import com.qksnap.www.snap.gui.MainFrame;
import com.qksnap.www.snap.gui.SplashScreen;
/** Holds a checkbox and drop down to set hotkeys
*
* @author zeroeh
*
*/
public class Settings extends JPanel {
private ImageIcon cup = new ImageIcon(getClass().getResource("/Save_Button.png"));
private JButton saveBtn = new JButton(cup);
private JTextField ssHotkey;
private JTextField ssRectkey;
private JTextField ssCutkey;
private JCheckBox autoStart;
private BufferedImage img;
private boolean hkpressed;
private JLabel ssHotLbl = new JLabel("Snap Area");
private JLabel ssRectLbl = new JLabel("Select Area");
private JLabel ssCutLbl = new JLabel("Draw Snap");
public final List<Integer> MODIFIERS = Arrays.asList(KeyEvent.VK_ALT, KeyEvent.VK_CONTROL, KeyEvent.VK_SHIFT, KeyEvent.VK_META);
protected void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
long start = System.currentTimeMillis();
try {
// Delay depending on how far behind current time we are.
start += (1000/30);
Thread.sleep(Math.max(0, start - System.currentTimeMillis()));
} catch(Exception e){
e.printStackTrace();
}
img.flush();
}
public Settings(){
super(null);
try {
img = ImageIO.read(getClass().getResource("/hksetbg.png"));
} catch (Exception e) {
e.printStackTrace();
}
setSize(500,250);
autoStart = new JCheckBox("Auto-Start");
autoStart.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(e.getSource()==autoStart){
if(autoStart.isSelected()) {
try {
WinRegistry.writeStringValue(0x80000002, "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "QwikSnap", System.getProperty("user.dir")+"/start.bat");
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else {
}
}
}
});
// autoStart.setBounds(225, 120, 128, 32);
// add(autoStart);
setBorder(BorderFactory.createLineBorder(new Color(218,218,218)));
ssHotkey = new JTextField("ctrl B");
ssHotkey.setHorizontalAlignment(JTextField.CENTER);
ssHotkey.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent arg0) {
SplashScreen.getSingleton().getMainFrame().getProvider().reset();
hkpressed = true;
}
@Override
public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
}
});
ssHotkey.setBounds(220,60,75,32);
ssHotkey.setForeground(Color.WHITE);
ssHotkey.setBackground(Color.BLACK);
ssHotkey.setBorder(BorderFactory.createLineBorder(new Color(218,218,218)));
ssHotLbl.setBounds(225, 100, 250, 16);
ssRectkey = new JTextField("ctrl N");
ssRectkey.setBounds(320,60,75,32);
ssRectkey.setForeground(Color.WHITE);
ssRectkey.setBackground(Color.BLACK);
ssRectkey.setToolTipText("<html><body>" +
"<p>Set a hotkey for selecting a predefined region.</p>");
ssRectkey.setHorizontalAlignment(JTextField.CENTER);
ssRectkey.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent arg0) {
SplashScreen.getSingleton().getMainFrame().getProvider().reset();
hkpressed = true;
}
@Override
public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
}
});
ssCutkey = new JTextField("ctrl M");
ssCutkey.setForeground(Color.WHITE);
ssCutkey.setBackground(Color.BLACK);
ssCutkey.setBorder(BorderFactory.createLineBorder(new Color(218,218,218)));
ssCutkey.setBounds(120,60,75,32);
ssHotkey.setToolTipText("<html><body>" +
"<p>Set a hotkey for snaping a pre-defined region screenshot.</p>");
ssCutkey.setToolTipText("<html><body>" +
"<p>Set a hotkey for Snap Freeze Screenshots</p>");
ssCutkey.setHorizontalAlignment(JTextField.CENTER);
ssCutkey.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent arg0) {
SplashScreen.getSingleton().getMainFrame().getProvider().reset();
hkpressed = true;
}
@Override
public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
}
});
ssCutkey.setEditable(false);
ssCutkey.addKeyListener(new KeyAdapt(this));
ssHotkey.setText(SplashScreen.getSingleton().getUserSettings().getSnapHK());
ssCutkey.setText(SplashScreen.getSingleton().getUserSettings().getSelsnapHK());
ssRectkey.setText(SplashScreen.getSingleton().getUserSettings().getSelHK());
ssHotkey.setEditable(false);
ssRectkey.setEditable(false);
ssRectkey.setBorder(BorderFactory.createLineBorder(new Color(218,218,218)));
ssHotkey.addKeyListener(new KeyAdapt(this));
ssRectkey.addKeyListener(new KeyAdapt(this));
ssCutLbl.setBounds(125, 100, 250, 16);
ssRectLbl.setBounds(320, 100, 250, 16);
saveBtn.setBounds(445,35,74,105);
saveBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
SplashScreen.getSingleton().getUserSettings().update(ssRectkey.getText(),ssHotkey.getText(),ssCutkey.getText(),1);
SplashScreen.getSingleton().getMainFrame().getMainPane().updateLbl();
SplashScreen.getSingleton().getMainFrame().getMainPane().repaint();
SplashScreen.getSingleton().getMainFrame().getProvider().reset();
hkpressed = false;
// register ctrl S as hot key
SplashScreen.getSingleton().getMainFrame().getProvider().register(KeyStroke.getKeyStroke(ssHotkey.getText()), SplashScreen.getSingleton().getMainFrame().hkListener());
SplashScreen.getSingleton().getMainFrame().getProvider().register(KeyStroke.getKeyStroke(ssRectkey.getText()), SplashScreen.getSingleton().getMainFrame().hkListener2());
//System.out.println(ssCutkey.getText());
SplashScreen.getSingleton().getMainFrame().getProvider().register(KeyStroke.getKeyStroke(ssCutkey.getText()), SplashScreen.getSingleton().getMainFrame().hkListener3());
SplashScreen.getSingleton().getMainFrame().getTrayIcon().displayMessage("QwikSnap", "Your settings have been saved.", TrayIcon.MessageType.INFO);
if(autoStart.isSelected()){
SplashScreen.getSingleton().getUserSettings().update(ssRectkey.getText(),ssHotkey.getText(),ssCutkey.getText(),1);
} else {
SplashScreen.getSingleton().getUserSettings().update(ssRectkey.getText(),ssHotkey.getText(),ssCutkey.getText(),0);
}
}
});
add(saveBtn);
add(ssRectLbl);
add(ssRectkey);
add(ssHotLbl);
add(ssHotkey);
add(ssCutkey);
add(ssCutLbl);
}
public JTextField getSsHotkey() {
return ssHotkey;
}
public JTextField getSsRectkey() {
return ssRectkey;
}
public JTextField getSsCutkey() {
return ssCutkey;
}
public void setSsHotkey(JTextField ssHotkey) {
this.ssHotkey = ssHotkey;
}
public void setSsRectkey(JTextField ssRectkey) {
this.ssRectkey = ssRectkey;
}
public void updateSettings(){
ssHotkey.setText(SplashScreen.getSingleton().getUserSettings().getSnapHK());
ssCutkey.setText(SplashScreen.getSingleton().getUserSettings().getSelsnapHK());
ssRectkey.setText(SplashScreen.getSingleton().getUserSettings().getSelHK());
}
public boolean isHKPressed() {
return hkpressed;
}
public void setHKPressed(boolean s){
this.hkpressed = s;
}
}
class KeyAdapt extends KeyAdapter {
private Settings s;
public KeyAdapt(Settings s){
this.s = s;
}
@Override
public void keyPressed(KeyEvent e) {
if(s.getSsHotkey().hasFocus()){
if (s.MODIFIERS.contains(e.getKeyCode()))
s.getSsHotkey().setText("");
else
s.getSsHotkey().setText(KeyStroke.getKeyStrokeForEvent(e).toString().replaceAll("pressed ", ""));
} else if(s.getSsRectkey().hasFocus()){
if (s.MODIFIERS.contains(e.getKeyCode()))
s.getSsRectkey().setText("");
else
s.getSsRectkey().setText(KeyStroke.getKeyStrokeForEvent(e).toString().replaceAll("pressed ", ""));
} else if(s.getSsCutkey().hasFocus()){
if (s.MODIFIERS.contains(e.getKeyCode()))
s.getSsCutkey().setText("");
else
s.getSsCutkey().setText(KeyStroke.getKeyStrokeForEvent(e).toString().replaceAll("pressed ", ""));
}else {
System.out.println("Not focused");
}
}
}