diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ContextMenuSubMenuContributorBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ContextMenuSubMenuContributorBase.java index ab5722a2b4594647d8318269b4d696ded068a672..a4b642bbde821fe240773d2ce36042109f8ac3e5 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ContextMenuSubMenuContributorBase.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ContextMenuSubMenuContributorBase.java @@ -28,7 +28,6 @@ import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.actions.ActionFactory; import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor; import org.fortiss.tooling.kernel.ui.extension.base.EObjectActionBase.EObjectActionFactory; import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider; @@ -36,34 +35,37 @@ import org.fortiss.tooling.kernel.ui.service.IContextMenuService; /** * Base class for context menu contributors creating a sub-menu - * {@link IMenuManager} with actions provided by actions factories TODO: @review - * this link is wrong => {@link ActionFactory} returned by - * {@link #getActionFactories()}. + * {@link IMenuManager} with actions provided by actions factories + * {@link EObjectActionFactory} returned by {@link #getActionFactories()}. * * The class implements interface methods {@link #getMenuIcon()} and * {@link #getMenuId()} returning {@code null} by default. Classes providing an * own icon or id should override them. * - * The generic type parameter {@code T} indicated the type of selection - * elements. - * * @param <T> - * TODO document T here + * Indicates the type of selection elements. * * @author trachtenherz * @author $Author: hoelzl $ * @version $Rev: 18709 $ - * @ConQAT.Rating YELLOW Hash: DE788BDCC0598D12129DAA00E06DDE3E + * @ConQAT.Rating YELLOW Hash: 80829E4615DB836462F038D6662D7B02 */ public abstract class ContextMenuSubMenuContributorBase<T extends EObject> implements IContextMenuContributor { - // TODO reorder methods: implemented before abstract before default - // implementations - /** The name of the sub-menu */ - protected abstract String getMenuName(); - /** Returns the action factories for the actions to be shown in the menu */ - protected abstract Collection<EObjectActionFactory<? super T>> getActionFactories(); + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override + public final List<IContributionItem> getContributedItems(EObject selection, + ContextMenuContextProvider contextProvider) { + if (acceptSelection(selection, contextProvider)) { + List<IContributionItem> contributionItems = new ArrayList<IContributionItem>(); + contributionItems + .add(createMenu(createActionsForElement((T) selection))); + return contributionItems; + } + return Collections.emptyList(); + } /** Creates action instances for the given selection. */ protected Collection<Action> createActionsForElement(T selection) { @@ -74,16 +76,6 @@ public abstract class ContextMenuSubMenuContributorBase<T extends EObject> return list; } - /** The image for the sub-menu */ - protected ImageDescriptor getMenuIcon() { - return null; - } - - /** The Id for the sub-menu */ - protected String getMenuId() { - return null; - } - /** * Creates a sub-menu {@link IMenuManager} containing specified actions. */ @@ -96,20 +88,6 @@ public abstract class ContextMenuSubMenuContributorBase<T extends EObject> return menu; } - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override - public final List<IContributionItem> getContributedItems(EObject selection, - ContextMenuContextProvider contextProvider) { - if (acceptSelection(selection, contextProvider)) { - List<IContributionItem> contributionItems = new ArrayList<IContributionItem>(); - contributionItems - .add(createMenu(createActionsForElement((T) selection))); - return contributionItems; - } - return Collections.emptyList(); - } - /** {@inheritDoc} */ @Override public String getMenuSectionID() { @@ -122,4 +100,21 @@ public abstract class ContextMenuSubMenuContributorBase<T extends EObject> */ protected abstract boolean acceptSelection(EObject selection, ContextMenuContextProvider contextProvider); + + /** The name of the sub-menu */ + protected abstract String getMenuName(); + + /** Returns the action factories for the actions to be shown in the menu */ + protected abstract Collection<EObjectActionFactory<? super T>> getActionFactories(); + + /** The image for the sub-menu */ + protected ImageDescriptor getMenuIcon() { + return null; + } + + /** The Id for the sub-menu */ + protected String getMenuId() { + return null; + } + } \ No newline at end of file diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java index aef527fd5268a27634bfb8f9cb629febb0faa308..f9a39c9925cb721c5b851a1a3c3abf1fbf20817d 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/EObjectActionBase.java @@ -24,14 +24,15 @@ import org.eclipse.jface.resource.ImageDescriptor; /** * JFace {@link Action}, which uses an {@link EObject} as target. * + * @author trachtenherz * @author hoelzl * @author $Author$ * @version $Rev$ - * @ConQAT.Rating YELLOW Hash: 4C545F6468D6051419AA91C0E3774061 + * @ConQAT.Rating YELLOW Hash: C1322F3569D042E8A5F328AC1921085A */ public abstract class EObjectActionBase<T extends EObject> extends Action { - /** Factory for the action instances used for this menu */ + /** Factory interface for action instances. */ public static interface EObjectActionFactory<T extends EObject> { /** Creates and returns an action instance for the given target. */ EObjectActionBase<T> createAction(T target); @@ -53,7 +54,7 @@ public abstract class EObjectActionBase<T extends EObject> extends Action { /** Constructor. */ public EObjectActionBase(T target, String text, ImageDescriptor image) { this(text, image); - setTarget(target); + refresh(target); } /** Constructor. */ @@ -71,16 +72,26 @@ public abstract class EObjectActionBase<T extends EObject> extends Action { return target; } - /** Refreshes the action's target and enabled state. */ - public final void refresh(T element) { - setTarget(element); - if (element == null) { + /** Refreshes the enabled state for the current action target. */ + public final void refresh() { + if (getTarget() == null) { setEnabled(false); return; } setEnabled(computeEnabled()); } + /** + * Refreshes the action's target and enabled state. + * + * @see #setTarget(EObject) + * @see #refresh() + */ + public final void refresh(T element) { + setTarget(element); + refresh(); + } + /** * Computes the enabled state of the action for the current target, which is * not <code>null</code> when this method is called. The default