package ch.rakudave.jnetmap.view.components;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;
import ch.rakudave.jnetmap.controller.Actions;
import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.util.IO;
import ch.rakudave.jnetmap.util.Icons;
import ch.rakudave.jnetmap.util.Lang;
import ch.rakudave.jnetmap.util.SwingHelper;
import ch.rakudave.jnetmap.view.ISidebar;
import ch.rakudave.jnetmap.view.IView;
import ch.rakudave.jnetmap.view.properties.MapProperties;
/**
* @author rakudave
*/
public class MenuBar extends JMenuBar {
private static final long serialVersionUID = -1861842226695622060L;
private IView parent;
private JMenuItem i;
public MenuBar(IView parent) {
super();
this.parent = parent;
add(createFileMenu());
add(createEditMenu());
add(createViewMenu());
add(createToolMenu());
add(createHelpMenu());
}
@SuppressWarnings("serial")
private JMenu createFileMenu() {
JMenu menu = new JMenu(Lang.getNoHTML("menu.file"));
// New
i = new JMenuItem(Actions.newMap(Lang.getNoHTML("menu.file.new"))); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK));
// Open
i = new JMenuItem(Actions.open(Lang.getNoHTML("menu.file.open"))); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
menu.add(new JSeparator());
// Save
i = new JMenuItem(Actions.save()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
// Save As
i = new JMenuItem(Actions.saveAs()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
// Export
i = new JMenuItem(new AbstractAction(Lang.getNoHTML("menu.file.exportimg"), Icons.get("export-img")) {
@Override
public void actionPerformed(ActionEvent e) {
File f = SwingHelper.saveDialog(null, new FileNameExtensionFilter("Portable Network Graphics", "png"));
if (f == null || TabPanel.getCurrentTab() == null) return;
IO.exportImage(TabPanel.getCurrentTab().vv, f);
}
}); menu.add(i);
// Properties
menu.add(new JSeparator());
i = new JMenuItem(new AbstractAction(Lang.getNoHTML("menu.file.properties"), Icons.get("properties")) {
@Override
public void actionPerformed(ActionEvent e) {
if (Controller.getCurrentMap() == null) return;
new MapProperties((Frame) Controller.getView(), Controller.getCurrentMap());
}
}); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
menu.add(new JSeparator());
// Quit
i = new JMenuItem(Actions.quit(Lang.getNoHTML("menu.file.quit"))); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_DOWN_MASK));
return menu;
}
private JMenu createEditMenu() {
JMenu menu = new JMenu(Lang.getNoHTML("menu.edit"));
// Undo/Redo
i = new JMenuItem(Actions.undo()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK));
i = new JMenuItem(Actions.redo()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_DOWN_MASK));
menu.add(new JSeparator());
// GraphMouse mode selection
i = new JMenuItem(TabPanel.getPickingModeSetter()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_DOWN_MASK));
i = new JMenuItem(TabPanel.getEditingModeSetter()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK));
i = new JMenuItem(TabPanel.getTransformingModeSetter()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK));
menu.add(new JSeparator());
// Preferences
i = new JMenuItem(Actions.preferences(Lang.getNoHTML("menu.edit.preferences"))); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_DOWN_MASK));
return menu;
}
private JMenu createViewMenu() {
JMenu menu = new JMenu(Lang.getNoHTML("menu.view"));
// Refresh
i = new JMenuItem(Actions.refresh()); menu.add(i);
i.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_DOWN_MASK));
// Layouts
JMenu sub = new JMenu(Lang.get("menu.view.layout"));
for (Action a : TabPanel.getLayoutTransformers()) {
sub.add(a);
}
menu.add(sub);
menu.add(new JSeparator());
// Toggle Sidebar
if (parent instanceof ISidebar) {
final JMenuItem toggleSidebar = new JCheckBoxMenuItem(Lang.getNoHTML("menu.view.sidebar"), ((ISidebar)parent).isSidebarVisible());
toggleSidebar.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {((ISidebar)parent).setSidebarVisible(toggleSidebar.isSelected());}
}); menu.add(toggleSidebar);
}
// Toggle Toolbar
final JMenuItem toggleToolbar = new JCheckBoxMenuItem(Lang.getNoHTML("menu.view.toolbar"), ToolBar.getInstance().isVisible());
toggleToolbar.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {ToolBar.getInstance().setVisible(toggleToolbar.isSelected());}
}); menu.add(toggleToolbar);
return menu;
}
@SuppressWarnings("serial")
private JMenu createToolMenu() {
JMenu menu = new JMenu(Lang.getNoHTML("menu.tools"));
menu.add(new JMenuItem(new AbstractAction(Lang.getNoHTML("port.scanner"), Icons.get("find")) {
@Override
public void actionPerformed(ActionEvent e) {new PortScanner((Frame) parent, "127.0.0.1");}
}));
menu.add(new JMenuItem(new AbstractAction(Lang.getNoHTML("network.scanner"), Icons.get("net")) {
@Override
public void actionPerformed(ActionEvent e) {
if (Controller.getCurrentMap() == null) Actions.newMap("").actionPerformed(null);
new NetworkScanner((Frame) parent, Controller.getCurrentMap());
}
}));
return menu;
}
@SuppressWarnings("serial")
private JMenu createHelpMenu() {
JMenu menu = new JMenu(Lang.getNoHTML("menu.help"));
menu.add(new JMenuItem(Actions.viewDoc(Lang.getNoHTML("menu.help.doc"))));
menu.add(new JSeparator());
menu.add(new JMenuItem(Actions.viewWebsite()));
menu.add(new JMenuItem(Actions.reportBug()));
menu.add(new JMenuItem(Actions.requestFeature()));
menu.add(new JMenuItem(Actions.contactDeveloper()));
menu.add(new JSeparator());
menu.add(new JMenuItem(new AbstractAction(Lang.getNoHTML("about"), Icons.get("info")) {
@Override
public void actionPerformed(ActionEvent e) {
new AboutDialog((Frame) Controller.getView());
}
}));
return menu;
}
}