package org.xmind.ui.internal.comments;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.actions.ActionFactory;
import org.xmind.core.IComment;
import org.xmind.gef.ui.editor.IGraphicalEditor;
import org.xmind.ui.texteditor.IMenuContributor;
import org.xmind.ui.texteditor.ISpellingActivation;
public abstract class CommentsActionBarContributor
implements ICommentsActionBarContributor {
protected IGraphicalEditor targetEditor;
private Map<String, CommentAction> actions = new HashMap<String, CommentAction>();
private ISpellingActivation spellingActivation;
public CommentsActionBarContributor(IGraphicalEditor targetEditor) {
this.targetEditor = targetEditor;
}
protected void makeActions() {
}
protected void addAction(CommentAction action) {
if (action != null && action.getId() != null)
actions.put(action.getId(), action);
}
public void setSpellingActivation(ISpellingActivation spellingActivation) {
this.spellingActivation = spellingActivation;
}
public void fillToolBar(IToolBarManager toolbar) {
}
public void fillContextMenu(IMenuManager menu) {
menu.add(getContextAction(ActionFactory.UNDO.getId()));
menu.add(getContextAction(ActionFactory.REDO.getId()));
menu.add(new Separator());
menu.add(getContextAction(ActionFactory.CUT.getId()));
menu.add(getContextAction(ActionFactory.COPY.getId()));
menu.add(getContextAction(ActionFactory.PASTE.getId()));
menu.add(new Separator());
menu.add(getContextAction(ActionFactory.SELECT_ALL.getId()));
if (spellingActivation != null) {
IMenuContributor contributor = (IMenuContributor) spellingActivation
.getAdapter(IMenuContributor.class);
if (contributor != null) {
menu.add(new Separator());
contributor.fillMenu(menu);
}
}
}
protected abstract IAction getContextAction(String actionId);
public CommentAction getAction(String id) {
return actions.get(id);
}
public void selectionChanged(Object selection) {
for (CommentAction action : actions.values()) {
action.selectionChanged(selection);
}
}
public void selectedCommentChanged(IComment comment) {
for (CommentAction action : actions.values()) {
action.selectedCommentChanged(comment);
}
}
public void dispose() {
actions.clear();
}
public void setTargetEditor(IGraphicalEditor targetEditor) {
if (this.targetEditor != targetEditor) {
this.targetEditor = targetEditor;
for (Entry<String, CommentAction> entry : actions.entrySet()) {
entry.getValue().setTargetEditor(targetEditor);
}
}
}
}