package de.digitalstep.ntlmproxy.ui;
import static de.digitalstep.ntlmproxy.ui.ApplicationProperties.applicationName;
import static de.digitalstep.ntlmproxy.ui.ApplicationProperties.applicationVersion;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import java.awt.CheckboxMenuItem;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.prefs.Preferences;
import javax.swing.JOptionPane;
class PopupMenuBuilder {
private final Preferences prefs;
PopupMenuBuilder(Preferences preferences) {
this.prefs = preferences;
}
void buildPopupMenu(final LogWindow logWindow, final TrayIcon trayIcon) {
final PopupMenu popup = new PopupMenu();
final ActionListener openLogWindow = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
logWindow.open();
}
};
popup.add(showLog(openLogWindow));
popup.add(showBubble());
popup.addSeparator();
popup.add(aboutItem());
popup.add(exitItem(trayIcon));
trayIcon.setPopupMenu(popup);
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(openLogWindow);
}
private MenuItem aboutItem() {
MenuItem menuItem = new MenuItem("About");
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,
String.format("Version %s", applicationVersion()), applicationName(),
INFORMATION_MESSAGE);
}
});
return menuItem;
}
private MenuItem exitItem(final TrayIcon trayIcon) {
MenuItem menuItem = new MenuItem("Exit");
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SystemTray.getSystemTray().remove(trayIcon);
System.exit(0);
}
});
return menuItem;
}
private void setShowBubble(boolean showBubble) {
prefs.putBoolean("showBubble", showBubble);
}
private MenuItem showBubble() {
final CheckboxMenuItem menuItem = new CheckboxMenuItem("Show Bubbles");
menuItem.setState(prefs.getBoolean("showBubble", true));
menuItem.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
setShowBubble(menuItem.getState());
}
});
return menuItem;
}
private MenuItem showLog(final ActionListener listener) {
final MenuItem menuItem = new MenuItem("Show Log");
menuItem.addActionListener(listener);
return menuItem;
}
}