From e3334c6ccdaec9f0a5b582ca569bec5d2e5ebf3a Mon Sep 17 00:00:00 2001 From: Daniel Ratiu <ratiu@fortiss.org> Date: Sat, 19 Nov 2011 20:23:18 +0000 Subject: [PATCH] a first implementation for feature 92 -- now the navigator view can filter out elements that should not be displayed in non-expert view. refs 92 --- .../trunk/icons/expert_view.png | Bin 0 -> 876 bytes .../ui/extension/IModelElementHandler.java | 6 +++ .../base/ModelElementHandlerBase.java | 6 +++ .../views/NavigatorTreeContentProvider.java | 43 +++++++++++++++--- .../ui/internal/views/NavigatorViewPart.java | 20 +++++++- 5 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png 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 GIT binary patch literal 876 zcmV-y1C#uTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipr1 z6bv<Bcn_}t00QhuL_t(I%T<$2Y?O5nhkyTf`vs;YA_*?++TcYD6k1CtRTE<xFO6+t z;=w3pP4FW@qKScUQPNbsc<^LQY#>Sq2N4M-*cwRCgVt=ITXtEkYn9fzyQM-GmX>yL z-*+Al?^1OxbC{3c%rhBxac~fh9#>0umzGKe(fPPK1_u;?JW0+;k`o|d!i%Vs&1mBJ z-73dp(sEE`^x0>q3>}8yvrP6sP446g00ILrFe5MsfW`7WsTZDO_|aYDE@u$HUxgy0 zZCfcF*w4+k50Yxz#{6#+P^$;1Vi<7Y%{Mr|Z96}l`~m>^wS<W?r^&?P%=h&&-_t{~ zyPFE3Y7maX<i|sdZQ07HgZnYS4+7+y5rjQRzV|LUuZh`Bo0w^6V(hhjE3vD|B$qZn z%!%G!7Ojc_W`;1s3?Lu?zU%L2N@B`INJ~t8c7%mWg-pkGPPeu3=hb4knHgXqgOF3G zwQ#G<`RGPwB?=N>wYQUgF~PSjYe)`{{L95cr@NiZz_%&@`HLyWB$6#_`SPhAer~L1 z<bx0S&uK6-%nZ*tC&@{YoP~br+&LlXmmQnck(<`)b!)YuFrz?{ISX^03#)33R#wQL z{hD!!Gl`cNefbrpC5kQ0<RpGScAWp&U5HqC<E0zdx!kyl;aHrx#ak?uOZ*tUpS;Ah z94W7kYgeuS;8z3ukOBC>9pKj|pWypQ6WQ_9ipcbZF|rcHHTRKkZXnyaljS=V{2B)j zOc6=>Lxb|u8FAzzZE5e2Ss?RGtveo3{U?W2jjmUu^D*6Pf2;7;0ZEbq<awT_Yu}7W zr#{zQBB5Q0J(48Pi^xShnWP6_-J?ohpH{_M)zrOHt0yN_Ja$yB&Xc>59;dwbb<J#e zKo5O7q;>Z+%LB<dAtXccJT2c|(ConbibvOr+hyJSX+m}T_A0Wwt83to>vL*7^p0X1 z;}TZ;VJAoU&rVW(L!%<CQDrk}6+NetSEt$1g8l)HtbH*|Dow@!0000<MNUMnLSTYl C@sXea literal 0 HcmV?d00001 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 c27bc341e..a4305a51f 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 bd353a15d..bb279339f 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 ef1a30000..e12e42891 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 1c3d5c6e6..35ac297c8 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); } -- GitLab