/*
* @(#)DefaultMenuBuilder.java
*
* Copyright (c) 2010 The authors and contributors of JHotDraw.
*
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.app;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.util.List;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import org.jhotdraw.app.action.app.AboutAction;
import org.jhotdraw.app.action.app.AbstractPreferencesAction;
import org.jhotdraw.app.action.app.ExitAction;
import org.jhotdraw.app.action.edit.AbstractFindAction;
import org.jhotdraw.app.action.edit.ClearSelectionAction;
import org.jhotdraw.app.action.edit.CopyAction;
import org.jhotdraw.app.action.edit.CutAction;
import org.jhotdraw.app.action.edit.DeleteAction;
import org.jhotdraw.app.action.edit.DuplicateAction;
import org.jhotdraw.app.action.edit.PasteAction;
import org.jhotdraw.app.action.edit.RedoAction;
import org.jhotdraw.app.action.edit.SelectAllAction;
import org.jhotdraw.app.action.edit.UndoAction;
import org.jhotdraw.app.action.file.ClearFileAction;
import org.jhotdraw.app.action.file.CloseFileAction;
import org.jhotdraw.app.action.file.ExportFileAction;
import org.jhotdraw.app.action.file.LoadDirectoryAction;
import org.jhotdraw.app.action.file.LoadFileAction;
import org.jhotdraw.app.action.file.NewFileAction;
import org.jhotdraw.app.action.file.NewWindowAction;
import org.jhotdraw.app.action.file.OpenDirectoryAction;
import org.jhotdraw.app.action.file.OpenFileAction;
import org.jhotdraw.app.action.file.PrintFileAction;
import org.jhotdraw.app.action.file.SaveFileAction;
import org.jhotdraw.app.action.file.SaveFileAsAction;
/**
* {@code DefaultMenuBuilder}.
*
* @author Werner Randelshofer
* @version 1.0 2010-11-14 Created.
*/
public class DefaultMenuBuilder implements MenuBuilder {
/** Whether icons in menu items shall be removed. */
public boolean suppressIcons;
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link AbstractPreferencesAction}</li>
* </ul>
*/
@Override
public void addPreferencesItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(AbstractPreferencesAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link ExitAction}</li>
* </ul>
*/
@Override
public void addExitItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(ExitAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link ClearFileAction}</li>
* </ul>
*/
@Override
public void addClearFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(ClearFileAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link NewWindowAction}</li>
* </ul>
*/
@Override
public void addNewWindowItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(NewWindowAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link NewFileAction}</li>
* </ul>
*/
@Override
public void addNewFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(NewFileAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link LoadFileAction}</li>
* <li>{@link LoadDirectoryAction}</li>
* </ul>
*/
@Override
public void addLoadFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(LoadFileAction.ID))) {
add(m,a);
}
if (null != (a = am.get(LoadDirectoryAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link OpenFileAction}</li>
* <li>{@link OpenDirectoryAction}</li>
* </ul>
*/
@Override
public void addOpenFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(OpenFileAction.ID))) {
add(m,a);
}
if (null != (a = am.get(OpenDirectoryAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link CloseFileAction}</li>
* </ul>
*/
@Override
public void addCloseFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(CloseFileAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link SaveFileAction}</li>
* <li>{@link SaveFileAsAction}</li>
* </ul>
*/
@Override
public void addSaveFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(SaveFileAction.ID))) {
add(m,a);
}
if (null != (a = am.get(SaveFileAsAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link ExportFileAction}</li>
* </ul>
*/
@Override
public void addExportFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(ExportFileAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link PrintFileAction}</li>
* </ul>
*/
@Override
public void addPrintFileItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(PrintFileAction.ID))) {
add(m,a);
}
}
/** Does nothing. */
@Override
public void addOtherFileItems(JMenu m, Application app, @Nullable View v) {
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link UndoAction}</li>
* <li>{@link RedoAction}</li>
* </ul>
*/
@Override
public void addUndoItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(UndoAction.ID))) {
add(m,a);
}
if (null != (a = am.get(RedoAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link CutAction}</li>
* <li>{@link CopyAction}</li>
* <li>{@link PasteAction}</li>
* <li>{@link DuplicateAction}</li>
* <li>{@link DeleteAction}</li>
* </ul>
*/
@Override
public void addClipboardItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(CutAction.ID))) {
add(m,a);
}
if (null != (a = am.get(CopyAction.ID))) {
add(m,a);
}
if (null != (a = am.get(PasteAction.ID))) {
add(m,a);
}
if (null != (a = am.get(DuplicateAction.ID))) {
add(m,a);
}
if (null != (a = am.get(DeleteAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link SelectAllAction}</li>
* <li>{@link ClearSelectionAction}</li>
* </ul>
*/
@Override
public void addSelectionItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(SelectAllAction.ID))) {
add(m,a);
}
if (null != (a = am.get(ClearSelectionAction.ID))) {
add(m,a);
}
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link AbstractFindAction}</li>
* </ul>
*/
@Override
public void addFindItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(AbstractFindAction.ID))) {
add(m,a);
}
}
/** Does nothing. */
@Override
public void addOtherEditItems(JMenu m, Application app, @Nullable View v) {
}
/** Does nothing. */
@Override
public void addOtherViewItems(JMenu m, Application app, @Nullable View v) {
}
/** Does nothing. */
@Override
public void addOtherMenus(List<JMenu> m, Application app, @Nullable View v) {
}
/** Does nothing. */
@Override
public void addOtherWindowItems(JMenu m, Application app, @Nullable View v) {
}
/** Does nothing. */
@Override
public void addHelpItems(JMenu m, Application app, @Nullable View v) {
}
/** Adds items for the following actions to the menu:
* <ul>
* <li>{@link AboutAction}</li>
* </ul>
*/
@Override
public void addAboutItems(JMenu m, Application app, @Nullable View v) {
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(AboutAction.ID))) {
add(m,a);
}
}
public boolean isSuppressIcons() {
return suppressIcons;
}
public void setSuppressIcons(boolean suppressIcons) {
this.suppressIcons = suppressIcons;
}
/** Adds an action to a menu. Returns the menu item that was added.
* This method is invoked for each action that is added to a menu.
* Override this method to customize the menu item that is being created.
* @param m the menu
* @param a the action
* @return the added menu item
*/
protected JMenuItem add(JMenu m, Action a) {
JMenuItem item=m.add(a);
if (suppressIcons) {
item.setIcon(null);
}
return item;
}
}