diff --git a/org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png b/org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3c1c4e3f8381ecd82eae3c992308a3129d5219 Binary files /dev/null and b/org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png differ diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java index c27bc341e67b8f9af1df7c2ec3bc113bf020563c..a4305a51f70a928bff450a4da11c9e54a6082ee3 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java @@ -86,4 +86,10 @@ public interface IModelElementHandler<T extends EObject> extends * in graphical editors. */ List<EObject> getSpecifications(T element); + + /** + * Returns true if the underlying element should be visible in the navigator + * in the non-expert view. + */ + boolean hiddenInNonExpertView(); } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java index bd353a15deec3d8e36bbbb60551ada408281e712..bb279339fef0115e65543da742d9f6364f54691b 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java @@ -93,4 +93,10 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements public List<EObject> getSpecifications(T element) { return Collections.emptyList(); } + + /** {@inheritDoc} */ + @Override + public boolean hiddenInNonExpertView() { + return false; + } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java index ef1a30000daf6f89c9864118c6e16473d989d05f..e12e42891b54f158602e4bda1474b17d93d7fa96 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java @@ -39,6 +39,9 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService; */ public class NavigatorTreeContentProvider implements ITreeContentProvider { + /** Stores whether the expert view is active. **/ + private boolean expertViewActive = false; + /** {@inheritDoc} */ @Override public Object[] getElements(Object inputElement) { @@ -54,22 +57,42 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider { /** {@inheritDoc} */ @Override - public Object[] getChildren(Object parentElement) { + public Object[] getChildren(Object parent) { // delegate to the model element handlers - if (parentElement instanceof EObject) { + if (parent instanceof EObject) { + EObject parentElement = (EObject) parent; IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE - .getModelElementHandler((EObject) parentElement); + .getModelElementHandler(parentElement); if (handler != null) { List<EObject> children = new ArrayList<EObject>(); - children.addAll(handler.getSubnodes((EObject) parentElement)); - children.addAll(handler - .getSpecifications((EObject) parentElement)); + children.addAll(filterExpertElements(handler + .getSubnodes(parentElement))); + children.addAll(filterExpertElements(handler + .getSpecifications(parentElement))); return children.toArray(); } } return new Object[0]; } + /** + * If {@link #expertViewActive} is false then we filter out elements + * according to {@link IModelElementHandler#hiddenInNonExpertView()} + */ + private List<EObject> filterExpertElements(List<EObject> elements) { + if (!expertViewActive) { + List<EObject> filtered = new ArrayList<EObject>(); + for (EObject current : elements) { + IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE + .getModelElementHandler(current); + if (!handler.hiddenInNonExpertView()) + filtered.add(current); + } + return filtered; + } + return elements; + } + /** {@inheritDoc} */ @Override public Object getParent(Object element) { @@ -100,4 +123,12 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider { // the input of this viewer is the persistency service singleton and // therefore never changes. } + + /** + * Toggle the expert view. When expert view is active then more objects are + * displayed in the tree. + */ + public void toggleExpertView() { + expertViewActive = !expertViewActive; + } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java index 1c3d5c6e6b261d49d10adf3a8d00b0bb8d6b057b..35ac297c8179a6a846703e84604ecad603f2ed30 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java @@ -63,8 +63,8 @@ import org.fortiss.tooling.kernel.ui.service.IContextMenuService; import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService; import org.fortiss.tooling.kernel.ui.service.INavigatorService; import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; -import org.fortiss.tooling.kernel.ui.util.PropertiesConstantUtils; import org.fortiss.tooling.kernel.ui.util.ModelElementLabelProvider; +import org.fortiss.tooling.kernel.ui.util.PropertiesConstantUtils; /** * {@link ViewPart} of the model navigator provided by the tooling kernel. @@ -94,6 +94,9 @@ public final class NavigatorViewPart extends ViewPart implements /** Stores the toggle action for editor linkage. */ private Action linkWithEditorAction = null; + /** Toggle expert view filter action. */ + private Action toggleExpertViewAction = null; + /** Dialog setting ID for the link with editor action flag. */ private static final String LINK_WITH_EDITOR_FLAG = "navigatorSettingLinkWithEditor"; @@ -188,11 +191,26 @@ public final class NavigatorViewPart extends ViewPart implements linkWithEditorAction.setChecked(ToolingKernelUIActivator.getDefault() .getDialogSettings().getBoolean(LINK_WITH_EDITOR_FLAG)); + toggleExpertViewAction = new Action("Toggle expert view", SWT.TOGGLE) { + + @Override + public void run() { + ((NavigatorTreeContentProvider) viewer.getContentProvider()) + .toggleExpertView(); + viewer.refresh(); + } + }; + + toggleExpertViewAction.setImageDescriptor(ToolingKernelUIActivator + .getImageDescriptor("icons/expert_view.png")); + toggleExpertViewAction.setToolTipText("Toggle expert view"); + IToolBarManager toolBarManager = getViewSite().getActionBars() .getToolBarManager(); Separator additionsSeperator = new Separator("additions"); additionsSeperator.setVisible(true); toolBarManager.add(additionsSeperator); + toolBarManager.insertAfter("additions", toggleExpertViewAction); toolBarManager.insertAfter("additions", linkWithEditorAction); }