package com.mxgraph.examples.swing.editor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractAction; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.SwingUtilities; import javax.swing.TransferHandler; import javax.swing.UIManager; import com.mxgraph.examples.swing.editor.EditorActions.BackgroundAction; import com.mxgraph.examples.swing.editor.EditorActions.BackgroundImageAction; import com.mxgraph.examples.swing.editor.EditorActions.ExitAction; import com.mxgraph.examples.swing.editor.EditorActions.GridColorAction; import com.mxgraph.examples.swing.editor.EditorActions.GridStyleAction; import com.mxgraph.examples.swing.editor.EditorActions.HistoryAction; import com.mxgraph.examples.swing.editor.EditorActions.NewAction; import com.mxgraph.examples.swing.editor.EditorActions.OpenAction; import com.mxgraph.examples.swing.editor.EditorActions.PageBackgroundAction; import com.mxgraph.examples.swing.editor.EditorActions.PageSetupAction; import com.mxgraph.examples.swing.editor.EditorActions.PrintAction; import com.mxgraph.examples.swing.editor.EditorActions.PromptPropertyAction; import com.mxgraph.examples.swing.editor.EditorActions.SaveAction; import com.mxgraph.examples.swing.editor.EditorActions.ScaleAction; import com.mxgraph.examples.swing.editor.EditorActions.SelectShortestPathAction; import com.mxgraph.examples.swing.editor.EditorActions.SelectSpanningTreeAction; import com.mxgraph.examples.swing.editor.EditorActions.StylesheetAction; import com.mxgraph.examples.swing.editor.EditorActions.ToggleDirtyAction; import com.mxgraph.examples.swing.editor.EditorActions.ToggleGridItem; import com.mxgraph.examples.swing.editor.EditorActions.ToggleOutlineItem; import com.mxgraph.examples.swing.editor.EditorActions.TogglePropertyItem; import com.mxgraph.examples.swing.editor.EditorActions.ToggleRulersItem; import com.mxgraph.examples.swing.editor.EditorActions.WarningAction; import com.mxgraph.examples.swing.editor.EditorActions.ZoomPolicyAction; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.swing.util.mxGraphActions; import com.mxgraph.util.mxPoint; import com.mxgraph.util.mxResources; import com.mxgraph.view.mxGraph; public class SchemaEditorMenuBar extends JMenuBar { /** * */ private static final long serialVersionUID = 6776304509649205465L; @SuppressWarnings("serial") public SchemaEditorMenuBar(final BasicGraphEditor editor) { final mxGraphComponent graphComponent = editor.getGraphComponent(); final mxGraph graph = graphComponent.getGraph(); JMenu menu = null; JMenu submenu = null; // Creates the file menu menu = add(new JMenu(mxResources.get("file"))); menu.add(editor.bind(mxResources.get("new"), new NewAction(), "/com/mxgraph/examples/swing/images/new.gif")); menu.add(editor.bind(mxResources.get("openFile"), new OpenAction(), "/com/mxgraph/examples/swing/images/open.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("save"), new SaveAction(false), "/com/mxgraph/examples/swing/images/save.gif")); menu.add(editor.bind(mxResources.get("saveAs"), new SaveAction(true), "/com/mxgraph/examples/swing/images/saveas.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("pageSetup"), new PageSetupAction(), "/com/mxgraph/examples/swing/images/pagesetup.gif")); menu.add(editor.bind(mxResources.get("print"), new PrintAction(), "/com/mxgraph/examples/swing/images/print.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("exit"), new ExitAction())); // Creates the edit menu menu = add(new JMenu(mxResources.get("edit"))); menu.add(editor.bind(mxResources.get("undo"), new HistoryAction(true), "/com/mxgraph/examples/swing/images/undo.gif")); menu.add(editor.bind(mxResources.get("redo"), new HistoryAction(false), "/com/mxgraph/examples/swing/images/redo.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("cut"), TransferHandler .getCutAction(), "/com/mxgraph/examples/swing/images/cut.gif")); menu.add(editor .bind(mxResources.get("copy"), TransferHandler.getCopyAction(), "/com/mxgraph/examples/swing/images/copy.gif")); menu.add(editor.bind(mxResources.get("paste"), TransferHandler .getPasteAction(), "/com/mxgraph/examples/swing/images/paste.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("delete"), mxGraphActions .getDeleteAction(), "/com/mxgraph/examples/swing/images/delete.gif")); menu.addSeparator(); menu.add(editor.bind(mxResources.get("selectAll"), mxGraphActions .getSelectAllAction())); menu.add(editor.bind(mxResources.get("selectNone"), mxGraphActions .getSelectNoneAction())); menu.addSeparator(); menu.add(editor.bind(mxResources.get("warning"), new WarningAction())); menu.add(editor.bind(mxResources.get("edit"), mxGraphActions .getEditAction())); // Creates the view menu menu = add(new JMenu(mxResources.get("view"))); JMenuItem item = menu.add(new TogglePropertyItem(graphComponent, mxResources.get("pageLayout"), "PageVisible", true, new ActionListener() { /** * */ public void actionPerformed(ActionEvent e) { if (graphComponent.isPageVisible() && graphComponent.isCenterPage()) { graphComponent.zoomAndCenter(); } } })); item.addActionListener(new ActionListener() { /* * (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { if (e.getSource() instanceof TogglePropertyItem) { final mxGraphComponent graphComponent = editor .getGraphComponent(); TogglePropertyItem toggleItem = (TogglePropertyItem) e .getSource(); if (toggleItem.isSelected()) { // Scrolls the view to the center SwingUtilities.invokeLater(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { graphComponent.scrollToCenter(true); graphComponent.scrollToCenter(false); } }); } else { // Resets the translation of the view mxPoint tr = graphComponent.getGraph().getView() .getTranslate(); if (tr.getX() != 0 || tr.getY() != 0) { graphComponent.getGraph().getView().setTranslate( new mxPoint()); } } } } }); menu.add(new TogglePropertyItem(graphComponent, mxResources .get("antialias"), "AntiAlias", true)); menu.addSeparator(); menu.add(new ToggleGridItem(editor, mxResources.get("grid"))); menu.add(new ToggleRulersItem(editor, mxResources.get("rulers"))); menu.addSeparator(); submenu = (JMenu) menu.add(new JMenu(mxResources.get("zoom"))); submenu.add(editor.bind("400%", new ScaleAction(4))); submenu.add(editor.bind("200%", new ScaleAction(2))); submenu.add(editor.bind("150%", new ScaleAction(1.5))); submenu.add(editor.bind("100%", new ScaleAction(1))); submenu.add(editor.bind("75%", new ScaleAction(0.75))); submenu.add(editor.bind("50%", new ScaleAction(0.5))); submenu.addSeparator(); submenu.add(editor.bind(mxResources.get("custom"), new ScaleAction(0))); menu.addSeparator(); menu.add(editor.bind(mxResources.get("zoomIn"), mxGraphActions .getZoomInAction())); menu.add(editor.bind(mxResources.get("zoomOut"), mxGraphActions .getZoomOutAction())); menu.addSeparator(); menu.add(editor.bind(mxResources.get("page"), new ZoomPolicyAction( mxGraphComponent.ZOOM_POLICY_PAGE))); menu.add(editor.bind(mxResources.get("width"), new ZoomPolicyAction( mxGraphComponent.ZOOM_POLICY_WIDTH))); menu.addSeparator(); menu.add(editor.bind(mxResources.get("actualSize"), mxGraphActions .getZoomActualAction())); // Creates the diagram menu menu = add(new JMenu(mxResources.get("diagram"))); menu.add(new ToggleOutlineItem(editor, mxResources.get("outline"))); menu.addSeparator(); submenu = (JMenu) menu.add(new JMenu(mxResources.get("background"))); submenu.add(editor.bind(mxResources.get("backgroundColor"), new BackgroundAction())); submenu.add(editor.bind(mxResources.get("backgroundImage"), new BackgroundImageAction())); submenu.addSeparator(); submenu.add(editor.bind(mxResources.get("pageBackground"), new PageBackgroundAction())); submenu = (JMenu) menu.add(new JMenu(mxResources.get("grid"))); submenu.add(editor.bind(mxResources.get("gridSize"), new PromptPropertyAction(graph, "Grid Size", "GridSize"))); submenu.add(editor.bind(mxResources.get("gridColor"), new GridColorAction())); submenu.addSeparator(); submenu.add(editor.bind(mxResources.get("dashed"), new GridStyleAction( mxGraphComponent.GRID_STYLE_DASHED))); submenu.add(editor.bind(mxResources.get("dot"), new GridStyleAction( mxGraphComponent.GRID_STYLE_DOT))); submenu.add(editor.bind(mxResources.get("line"), new GridStyleAction( mxGraphComponent.GRID_STYLE_LINE))); submenu.add(editor.bind(mxResources.get("cross"), new GridStyleAction( mxGraphComponent.GRID_STYLE_CROSS))); menu.addSeparator(); submenu = (JMenu) menu.add(new JMenu(mxResources.get("layout"))); submenu.add(editor.graphLayout("verticalHierarchical", true)); submenu.add(editor.graphLayout("horizontalHierarchical", true)); submenu.addSeparator(); submenu.add(editor.graphLayout("verticalPartition", false)); submenu.add(editor.graphLayout("horizontalPartition", false)); submenu.addSeparator(); submenu.add(editor.graphLayout("verticalStack", false)); submenu.add(editor.graphLayout("horizontalStack", false)); submenu.addSeparator(); submenu.add(editor.graphLayout("verticalTree", true)); submenu.add(editor.graphLayout("horizontalTree", true)); submenu.addSeparator(); submenu.add(editor.graphLayout("parallelEdges", false)); submenu.addSeparator(); submenu.add(editor.graphLayout("organicLayout", true)); submenu = (JMenu) menu.add(new JMenu(mxResources.get("selection"))); submenu.add(editor.bind(mxResources.get("selectPath"), new SelectShortestPathAction(false))); submenu.add(editor.bind(mxResources.get("selectDirectedPath"), new SelectShortestPathAction(true))); submenu.addSeparator(); submenu.add(editor.bind(mxResources.get("selectTree"), new SelectSpanningTreeAction(false))); submenu.add(editor.bind(mxResources.get("selectDirectedTree"), new SelectSpanningTreeAction(true))); menu.addSeparator(); submenu = (JMenu) menu.add(new JMenu(mxResources.get("stylesheet"))); submenu .add(editor .bind( mxResources.get("basicStyle"), new StylesheetAction( "/com/mxgraph/examples/swing/resources/basic-style.xml"))); submenu .add(editor .bind( mxResources.get("defaultStyle"), new StylesheetAction( "/com/mxgraph/examples/swing/resources/default-style.xml"))); // Creates the options menu menu = add(new JMenu(mxResources.get("options"))); submenu = (JMenu) menu.add(new JMenu(mxResources.get("display"))); submenu.add(new TogglePropertyItem(graphComponent, mxResources .get("buffering"), "TripleBuffered", true)); submenu.add(editor.bind(mxResources.get("dirty"), new ToggleDirtyAction())); submenu.addSeparator(); item = submenu.add(new TogglePropertyItem(graphComponent, mxResources .get("centerPage"), "CenterPage", true, new ActionListener() { /** * */ public void actionPerformed(ActionEvent e) { if (graphComponent.isPageVisible() && graphComponent.isCenterPage()) { graphComponent.zoomAndCenter(); } } })); submenu.add(new TogglePropertyItem(graphComponent, mxResources .get("centerZoom"), "CenterZoom", true)); submenu.add(new TogglePropertyItem(graphComponent, mxResources .get("zoomToSelection"), "KeepSelectionVisibleOnZoom", true)); submenu.addSeparator(); submenu.add(new TogglePropertyItem(graphComponent, mxResources .get("preferPagesize"), "PreferPageSize", true)); // This feature is not yet implemented //submenu.add(new TogglePropertyItem(graphComponent, mxResources // .get("pageBreaks"), "PageBreaksVisible", true)); submenu.addSeparator(); submenu.add(editor.bind(mxResources.get("tolerance"), new PromptPropertyAction(graph, "Tolerance"))); // Creates the window menu menu = add(new JMenu(mxResources.get("window"))); UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); for (int i = 0; i < lafs.length; i++) { final String clazz = lafs[i].getClassName(); menu.add(new AbstractAction(lafs[i].getName()) { public void actionPerformed(ActionEvent e) { editor.setLookAndFeel(clazz); } }); } // Creates the help menu menu = add(new JMenu(mxResources.get("help"))); item = menu.add(new JMenuItem(mxResources.get("aboutGraphEditor"))); item.addActionListener(new ActionListener() { /* * (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { editor.about(); } }); } }