/**
* Created : Jun 8, 2012
*
* @author pquiring
*/
import java.awt.*;
import java.awt.event.*;
import javaforce.*;
public class PasswordsApp extends javax.swing.JFrame implements ActionListener {
private String version = "0.16";
/**
* Creates new form PasswordsApp
*/
public PasswordsApp() {
initComponents();
setTitle("jfPasswords/" + version);
panel = new MainPanel();
setContentPane(panel);
if (panel.config.WindowXSize != -1) {
setSize(panel.config.WindowXSize, panel.config.WindowYSize);
setLocation(panel.config.WindowXPos, panel.config.WindowYPos);
if (panel.config.bWindowMax) setExtendedState(MAXIMIZED_BOTH);
} else {
setPosition();
}
loaded = true;
JFImage appicon = new JFImage();
appicon.loadPNG(this.getClass().getClassLoader().getResourceAsStream("jfpasswords.png"));
setIconImage(appicon.getImage());
appicon.loadPNG(this.getClass().getClassLoader().getResourceAsStream("jfpasswords_tray.png"));
tray = SystemTray.getSystemTray();
Dimension size = tray.getTrayIconSize();
JFImage scaled = new JFImage(size.width, size.height);
scaled.fill(0, 0, size.width, size.height, 0x00000000, true); //fill with alpha transparent
if (false) {
//scaled image (looks bad sometimes)
scaled.getGraphics().drawImage(appicon.getImage()
, 0, 0, size.width, size.height
, 0, 0, appicon.getWidth(), appicon.getHeight()
, null);
} else {
//center image
scaled.getGraphics().drawImage(appicon.getImage()
, (size.width - appicon.getWidth()) / 2
, (size.height - appicon.getHeight()) / 2
, null);
}
//create tray icon
PopupMenu popup = new PopupMenu();
show = new MenuItem("Show");
show.addActionListener(this);
popup.add(show);
popup.addSeparator();
exit = new MenuItem("Exit");
exit.addActionListener(this);
popup.add(exit);
icon = new TrayIcon(scaled.getImage(), "Passwords", popup);
icon.addActionListener(this);
try { tray.add(icon); } catch (Exception e) { JFLog.log(e); }
if (panel.config.safe.length() == 0) {
setVisible(true);
}
}
/**
* 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() {
setTitle("Passwords");
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentMoved(java.awt.event.ComponentEvent evt) {
formComponentMoved(evt);
}
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
addWindowStateListener(new java.awt.event.WindowStateListener() {
public void windowStateChanged(java.awt.event.WindowEvent evt) {
formWindowStateChanged(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 763, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 534, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentMoved
if (!loaded) return;
if (panel.config.bWindowMax) return;
Point loc = getLocation();
panel.config.WindowXPos = loc.x;
panel.config.WindowYPos = loc.y;
}//GEN-LAST:event_formComponentMoved
private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
if (!loaded) return;
if (panel.config.bWindowMax) return;
Dimension size = getSize();
panel.config.WindowXSize = size.width;
panel.config.WindowYSize = size.height;
}//GEN-LAST:event_formComponentResized
private void formWindowStateChanged(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowStateChanged
if (!loaded) return;
panel.config.bWindowMax = evt.getNewState() == MAXIMIZED_BOTH;
}//GEN-LAST:event_formWindowStateChanged
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new PasswordsApp();
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
private boolean loaded = false;
private void setPosition() {
Dimension d = getSize();
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
if ((d.width > s.width) || (d.height > s.height)) {
if (d.width > s.width) d.width = s.width;
if (d.height > s.height) d.height = s.height;
setSize(d);
}
setLocation(s.width/2 - d.width/2, s.height/2 - d.height/2);
}
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o == exit) {
if (panel.dirty) {
switch (JF.showConfirm3("Confirm", "Save first?")) {
case JF.YES: panel.saveSafe(); break;
case JF.NO: break;
case JF.CANCEL: return;
}
}
System.exit(0);
}
if (o == show) {
if (isVisible()) {
panel.checkTimestamp();
if ((getExtendedState() & Frame.ICONIFIED) == Frame.ICONIFIED) {
setExtendedState(getExtendedState() ^ Frame.ICONIFIED);
}
requestFocus();
return;
}
if (panel.config.safe.length() > 0 && !panel.loaded) {
if (!panel.loadSafe(false)) return;
} else if (panel.config.reAuthOnShow && panel.loaded) {
String password = GetPassword.getPassword(this);
if (password == null) return;
if (!password.equals(MainPanel.password)) {
JF.showMessage("Error", "Wrong Password");
return;
}
}
panel.checkTimestamp();
setVisible(true);
}
}
private MainPanel panel;
public SystemTray tray;
public TrayIcon icon;
public MenuItem exit, show;
}