// License: WTFPL. For details, see LICENSE file.
package geochat;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
import org.openstreetmap.josm.Main;
/**
*
* @author zverik
*/
class GeoChatPopupAdapter extends MouseAdapter {
private GeoChatPanel panel;
GeoChatPopupAdapter(GeoChatPanel panel) {
this.panel = panel;
}
@Override
public void mousePressed(MouseEvent e) {
check(e);
}
@Override
public void mouseReleased(MouseEvent e) {
check(e);
}
private void check(MouseEvent e) {
if (e.isPopupTrigger()) {
createPopupMenu().show(e.getComponent(), e.getX(), e.getY());
}
}
private JPopupMenu createPopupMenu() {
JMenu userMenu = new JMenu(tr("Private chat"));
for (String user : panel.users.keySet()) {
if (!panel.chatPanes.hasUser(user))
userMenu.add(new PrivateChatAction(user));
}
JPopupMenu menu = new JPopupMenu();
if (panel.chatPanes.hasSelectedText())
menu.add(new CopyTextAction());
menu.add(new JCheckBoxMenuItem(new ToggleUserLayerAction()));
if (userMenu.getItemCount() > 0)
menu.add(userMenu);
if (panel.chatPanes.getRecipient() != null)
menu.add(new CloseTabAction());
menu.add(new LogoutAction());
return menu;
}
private class PrivateChatAction extends AbstractAction {
private String userName;
PrivateChatAction(String userName) {
super(userName);
this.userName = userName;
}
@Override
public void actionPerformed(ActionEvent e) {
if (!panel.chatPanes.hasUser(userName)) {
panel.chatPanes.createChatPane(userName);
}
}
}
private class CloseTabAction extends AbstractAction {
CloseTabAction() {
super(tr("Close tab"));
}
@Override
public void actionPerformed(ActionEvent e) {
panel.chatPanes.closeSelectedPrivatePane();
}
}
private class LogoutAction extends AbstractAction {
LogoutAction() {
super(tr("Logout"));
// putValue(SMALL_ICON, ImageProvider.get("help"));
}
@Override
public void actionPerformed(ActionEvent e) {
panel.logout();
}
}
private class ClearPaneAction extends AbstractAction {
ClearPaneAction() {
super(tr("Clear log"));
}
@Override
public void actionPerformed(ActionEvent e) {
panel.chatPanes.clearActiveChatPane();
}
}
private class ToggleUserLayerAction extends AbstractAction {
ToggleUserLayerAction() {
super(tr("Show users on map"));
putValue(SELECTED_KEY, Boolean.valueOf(panel.userLayerActive));
}
@Override
public void actionPerformed(ActionEvent e) {
if (Main.map == null || Main.map.mapView == null)
return;
boolean wasAdded = Main.map.mapView.addTemporaryLayer(panel);
if (!wasAdded)
Main.map.mapView.removeTemporaryLayer(panel);
panel.userLayerActive = wasAdded;
putValue(SELECTED_KEY, Boolean.valueOf(panel.userLayerActive));
Main.map.mapView.repaint();
}
}
private class CopyTextAction extends AbstractAction {
CopyTextAction() {
super(tr("Copy"));
}
@Override
public void actionPerformed(ActionEvent e) {
panel.chatPanes.copySelectedText();
}
}
}