package kubach.gui;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import kubach.packet.PacketCaptchaImage;
import kubach.workers.LoadCaptchaWorker;
import kubach.workers.RegisterUserWorker;
/**
*
* @author Cr0s
*/
public class CaptchaPanel extends javax.swing.JDialog {
private BufferedImage img;
private String key;
public String username, password;
public MainFrame mf;
/**
* Creates new form CaptchaPanel
*/
public CaptchaPanel(MainFrame mf) {
this.mf = mf;
initComponents();
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
panImg = new javax.swing.JPanel();
lblImg = new javax.swing.JLabel();
txtAns = new javax.swing.JTextField();
setAlwaysOnTop(true);
setMaximumSize(new java.awt.Dimension(280, 166));
setMinimumSize(new java.awt.Dimension(280, 166));
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
panImg.setBorder(javax.swing.BorderFactory.createEtchedBorder());
lblImg.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lblImgMouseClicked(evt);
}
});
javax.swing.GroupLayout panImgLayout = new javax.swing.GroupLayout(panImg);
panImg.setLayout(panImgLayout);
panImgLayout.setHorizontalGroup(
panImgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblImg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
panImgLayout.setVerticalGroup(
panImgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblImg, javax.swing.GroupLayout.DEFAULT_SIZE, 64, Short.MAX_VALUE)
);
txtAns.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtAnsKeyPressed(evt);
}
public void keyTyped(java.awt.event.KeyEvent evt) {
txtAnsKeyTyped(evt);
}
});
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, false)
.addComponent(panImg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(txtAns, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(panImg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtAns, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void txtAnsKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtAnsKeyTyped
}//GEN-LAST:event_txtAnsKeyTyped
private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
evt.getWindow().setLocationRelativeTo(evt.getOppositeWindow());
this.setTitle("Enter captcha");
this.setSize(new Dimension(280, 146));
}//GEN-LAST:event_formWindowOpened
private void txtAnsKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtAnsKeyPressed
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
RegisterUserWorker ruw = new RegisterUserWorker(this, this.username, this.password, this.key, txtAns.getText());
ruw.execute();
this.setVisible(false);
img.getGraphics().dispose();
} else if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
this.setVisible(false);
img.getGraphics().dispose();
mf.cancelRegistration();
}
}//GEN-LAST:event_txtAnsKeyPressed
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
img.getGraphics().dispose();
this.mf.cancelRegistration();
}//GEN-LAST:event_formWindowClosed
private void lblImgMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblImgMouseClicked
// refresh captcha
LoadCaptchaWorker lcw = new LoadCaptchaWorker(this, this.username, this.password);
lcw.execute();
}//GEN-LAST:event_lblImgMouseClicked
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel lblImg;
private javax.swing.JPanel panImg;
private javax.swing.JTextField txtAns;
// End of variables declaration//GEN-END:variables
public void loadCaptchaImage(PacketCaptchaImage p) {
if (!p.hasCaptcha) {
JOptionPane.showMessageDialog(this, p.key, "Error", JOptionPane.ERROR_MESSAGE, null);
this.setVisible(false);
mf.cancelRegistration();
return;
}
try {
img = ImageIO.read(new ByteArrayInputStream(p.imageData));
} catch (IOException ex) {
Logger.getLogger(CaptchaPanel.class.getName()).log(Level.SEVERE, null, ex);
}
this.key = p.key;
txtAns.setText("");
this.setVisible(true);
drawCaptchaImage();
}
private void drawCaptchaImage() {
if (img != null) {
//img = resize(img, 256, 64);
lblImg.setIcon(new ImageIcon(img));
lblImg.repaint();
}
}
public static BufferedImage resize(BufferedImage image, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(image, 0, 0, width, height, null);
g2d.dispose();
return bi;
}
}