package com.indago.iddea.model.application;
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.Application;
import org.jhotdraw.app.MenuBuilder;
import org.jhotdraw.app.View;
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;
import com.indago.iddea.controller.action.GrowSelectionToolAction;
import com.indago.iddea.controller.action.HistogramToolAction;
import com.indago.iddea.controller.action.MeanIntensityToolAction;
/**
* {@code InteractiveDisplayMenuBuilder}.
*
* @version 0.1beta
* @since 8/13/13 3:37 PM
* @author Werner Randelshofer
* @author HongKee Moon
*/
public class InteractiveDisplayMenuBuilder implements MenuBuilder {
/** 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) {
JMenu menu = new JMenu();
menu.setText("Tool");
ActionMap am = app.getActionMap(v);
Action a;
if (null != (a = am.get(MeanIntensityToolAction.ID))) {
add(menu,a);
}
if (null != (a = am.get(GrowSelectionToolAction.ID))) {
add(menu,a);
}
if (null != (a = am.get(HistogramToolAction.ID))) {
add(menu,a);
}
m.add(menu);
}
/** 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);
}
}
/** 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.
*/
protected JMenuItem add(JMenu m, Action a) {
JMenuItem item=m.add(a);
return item;
}
}