Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 109045 | Differences between
and this patch

Collapse All | Expand All

(-)plugin.properties (+6 lines)
Lines 104-106 Link Here
104
##
104
##
105
Java_Element_hyperlink=Java Element
105
Java_Element_hyperlink=Java Element
106
Taglib_hyperlink=Tag Library Descriptor
106
Taglib_hyperlink=Tag Library Descriptor
107
108
HideImportDeclaration.label=Import Directive
109
HideImportDeclaration.description=Hides Import Directives
110
111
HideFontStyle.label=Font Style
112
HideFontStyle.description=Hides Font Style Tags
(-)plugin.xml (+20 lines)
Lines 1071-1074 Link Here
1071
			</contentTypeIdentifier>
1071
			</contentTypeIdentifier>
1072
		</inserter>
1072
		</inserter>
1073
	</extension>
1073
	</extension>
1074
	
1075
	<extension
1076
         point="org.eclipse.jdt.ui.javaElementFilters">
1077
      <filter
1078
            targetId="org.eclipse.jst.jsp.ui.OutlinePage"
1079
            name="%HideImportDeclaration.label"
1080
            enabled="false"
1081
            description="%HideImportDeclaration.description"
1082
            class="org.eclipse.jdt.internal.ui.filters.ImportDeclarationFilter"
1083
            id="org.eclipse.jst.jsp.ui.filters.ImportDeclarationFilter">
1084
      </filter>
1085
      <filter
1086
            targetId="org.eclipse.jst.jsp.ui.OutlinePage"
1087
            name="%HideFontStyle.label"
1088
            enabled="false"
1089
            description="%HideFontStyle.description"
1090
            class="org.eclipse.wst.html.ui.views.contentoutline.HTMLFontStyleFilter"
1091
            id="org.eclipse.jst.jsp.ui.views.contentoutline.HTMLFontStyleFilter">
1092
      </filter>
1093
   </extension>
1074
</plugin>
1094
</plugin>
(-)src/org/eclipse/jst/jsp/ui/views/contentoutline/JSPContentOutlineConfiguration.java (-1 / +2 lines)
Lines 31-43 Link Here
31
	// be used
31
	// be used
32
	// private StructuredContentOutlineConfiguration fEmbeddedConfiguration =
32
	// private StructuredContentOutlineConfiguration fEmbeddedConfiguration =
33
	// null;
33
	// null;
34
34
	private final String OUTLINE_FILTER_PREF = "org.eclipse.jst.jsp.ui.OutlinePage"; //$NON-NLS-1$
35
	/**
35
	/**
36
	 * Create new instance of JSPContentOutlineConfiguration
36
	 * Create new instance of JSPContentOutlineConfiguration
37
	 */
37
	 */
38
	public JSPContentOutlineConfiguration() {
38
	public JSPContentOutlineConfiguration() {
39
		// Must have empty constructor to createExecutableExtension
39
		// Must have empty constructor to createExecutableExtension
40
		super();
40
		super();
41
		super.setOutlineFilterTarget(OUTLINE_FILTER_PREF);
41
	}
42
	}
42
43
43
	/*
44
	/*
(-)META-INF/MANIFEST.MF (-1 / +2 lines)
Lines 46-51 Link Here
46
 org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
46
 org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
47
 org.eclipse.wst.validation;bundle-version="[1.2.100,1.3.0)",
47
 org.eclipse.wst.validation;bundle-version="[1.2.100,1.3.0)",
48
 org.eclipse.wst.common.project.facet.core;bundle-version="[1.4.0,2.0.0)";resolution:=optional,
48
 org.eclipse.wst.common.project.facet.core;bundle-version="[1.4.0,2.0.0)";resolution:=optional,
49
 org.eclipse.wst.common.modulecore;bundle-version="[1.2.0,2.0.0)";resolution:=optional
49
 org.eclipse.wst.common.modulecore;bundle-version="[1.2.0,2.0.0)";resolution:=optional,
50
 org.eclipse.jdt.ui;bundle-version="[3.6.0,4.0.0)"
50
Bundle-ActivationPolicy: lazy
51
Bundle-ActivationPolicy: lazy
51
Bundle-RequiredExecutionEnvironment: J2SE-1.4
52
Bundle-RequiredExecutionEnvironment: J2SE-1.4
(-)plugin.properties (+5 lines)
Lines 76-78 Link Here
76
hyperlink.target.script.name=HTML Client Script
76
hyperlink.target.script.name=HTML Client Script
77
hyperlink.target.eventhandler.name=HTML Event Handlers
77
hyperlink.target.eventhandler.name=HTML Event Handlers
78
78
79
HideImportDeclaration.label=Import Directive
80
HideImportDeclaration.description=Hides Import Directives
81
82
HideFontStyle.label=Font Style
83
HideFontStyle.description=Hides Font Style Tags
(-)plugin.xml (+21 lines)
Lines 637-640 Link Here
637
		</inserter>
637
		</inserter>
638
	</extension>
638
	</extension>
639
	
639
	
640
	<extension
641
         point="org.eclipse.jdt.ui.javaElementFilters">
642
      <filter
643
            targetId="org.eclipse.wst.html.ui.OutlinePage"
644
            name="%HideImportDeclaration.label"
645
            enabled="false"
646
            description="%HideImportDeclaration.description"
647
            class="org.eclipse.jdt.internal.ui.filters.ImportDeclarationFilter"
648
            id="org.eclipse.html.ui.filters.ImportDeclarationFilter">
649
      </filter>
650
      <filter
651
            targetId="org.eclipse.wst.html.ui.OutlinePage"
652
            name="%HideFontStyle.label"
653
            enabled="false"
654
            description="%HideFontStyle.description"
655
            class="org.eclipse.wst.html.ui.views.contentoutline.HTMLFontStyleFilter"
656
            id="org.eclipse.wst.html.ui.views.contentoutline.HTMLFontStyleFilter">
657
      </filter>
658
      
659
   </extension>
660
	
640
</plugin>
661
</plugin>
(-)src/org/eclipse/wst/html/ui/views/contentoutline/HTMLContentOutlineConfiguration.java (-1 / +3 lines)
Lines 25-37 Link Here
25
 * @since 1.0
25
 * @since 1.0
26
 */
26
 */
27
public class HTMLContentOutlineConfiguration extends XMLContentOutlineConfiguration {
27
public class HTMLContentOutlineConfiguration extends XMLContentOutlineConfiguration {
28
28
	private final String OUTLINE_FILTER_PREF = "org.eclipse.wst.html.ui.OutlinePage"; //$NON-NLS-1$
29
	/**
29
	/**
30
	 * Create new instance of HTMLContentOutlineConfiguration
30
	 * Create new instance of HTMLContentOutlineConfiguration
31
	 */
31
	 */
32
	public HTMLContentOutlineConfiguration() {
32
	public HTMLContentOutlineConfiguration() {
33
		// Must have empty constructor to createExecutableExtension
33
		// Must have empty constructor to createExecutableExtension
34
		super();
34
		super();
35
		super.setOutlineFilterTarget(OUTLINE_FILTER_PREF);
36
		
35
	}
37
	}
36
38
37
	protected XMLNodeActionManager createNodeActionManager(TreeViewer treeViewer) {
39
	protected XMLNodeActionManager createNodeActionManager(TreeViewer treeViewer) {
(-)src/org/eclipse/wst/html/ui/views/contentoutline/HTMLFontStyleFilter.java (+36 lines)
Added Link Here
1
package org.eclipse.wst.html.ui.views.contentoutline;
2
3
import java.util.ArrayList;
4
5
import org.eclipse.jface.viewers.Viewer;
6
import org.eclipse.jface.viewers.ViewerFilter;
7
import org.eclipse.wst.html.core.internal.document.ElementStyleImpl;
8
import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
9
10
public class HTMLFontStyleFilter extends ViewerFilter {
11
	final static ArrayList fontStyles = new ArrayList(9);
12
	static {
13
		
14
		fontStyles.add(HTML40Namespace.ElementName.TT.toLowerCase());
15
		fontStyles.add(HTML40Namespace.ElementName.I.toLowerCase());
16
		fontStyles.add(HTML40Namespace.ElementName.B.toLowerCase());
17
		fontStyles.add(HTML40Namespace.ElementName.P.toLowerCase());
18
		fontStyles.add(HTML40Namespace.ElementName.S.toLowerCase());
19
		fontStyles.add(HTML40Namespace.ElementName.STRIKE.toLowerCase());
20
		fontStyles.add(HTML40Namespace.ElementName.BIG.toLowerCase());
21
		fontStyles.add(HTML40Namespace.ElementName.SMALL.toLowerCase());
22
		fontStyles.add(HTML40Namespace.ElementName.U.toLowerCase());
23
	}
24
25
	public boolean select(Viewer viewer, Object parentElement, Object element) {
26
		if (element instanceof ElementStyleImpl){
27
			ElementStyleImpl elemImpl = (ElementStyleImpl)element;
28
			String nodeName = elemImpl.getNodeName().toLowerCase();
29
			if (fontStyles.contains(nodeName)){
30
				return false;
31
			}
32
		}
33
		return true;
34
	}
35
36
}
(-)META-INF/MANIFEST.MF (-1 / +3 lines)
Lines 61-67 Link Here
61
 org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
61
 org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
62
 org.eclipse.wst.validation;bundle-version="[1.2.100,1.3.0)",
62
 org.eclipse.wst.validation;bundle-version="[1.2.100,1.3.0)",
63
 org.eclipse.emf.common;bundle-version="[2.4.0,3.0.0)",
63
 org.eclipse.emf.common;bundle-version="[2.4.0,3.0.0)",
64
 org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
64
 org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
65
 org.eclipse.jdt.ui;bundle-version="[3.6.0,4.0.0)",
66
 org.eclipse.jdt.core;bundle-version="[3.6.0,4.0.0)"
65
Bundle-ActivationPolicy: lazy
67
Bundle-ActivationPolicy: lazy
66
Eclipse-LazyStart: true
68
Eclipse-LazyStart: true
67
Bundle-RequiredExecutionEnvironment: J2SE-1.4
69
Bundle-RequiredExecutionEnvironment: J2SE-1.4
(-)plugin.properties (+8 lines)
Lines 105-107 Link Here
105
Colors.content_assist_proposals_foreground=Content Assist Proposals Foreground
105
Colors.content_assist_proposals_foreground=Content Assist Proposals Foreground
106
Colors.content_assist_parameters_background=Content Assist Parameters Background
106
Colors.content_assist_parameters_background=Content Assist Parameters Background
107
Colors.content_assist_parameters_foreground=Content Assist Parameters Foreground
107
Colors.content_assist_parameters_foreground=Content Assist Parameters Foreground
108
109
#Filter Support
110
111
HideImportDeclaration.label= Import declarations
112
HideImportDeclaration.description= Hides all import declarations
113
114
115
elementFiltersName=SSE Element Filters
(-)plugin.xml (+2 lines)
Lines 766-770 Link Here
766
		</colorDefinition>
766
		</colorDefinition>
767
	</extension>
767
	</extension>
768
	
768
	
769
770
	
769
</plugin>
771
</plugin>
770
772
(-)src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java (+1 lines)
Lines 184-189 Link Here
184
	public static String ShowPropertiesAction_0;
184
	public static String ShowPropertiesAction_0;
185
	public static String ContentOutlineConfiguration_0;
185
	public static String ContentOutlineConfiguration_0;
186
	public static String ContentOutlineConfiguration_1;
186
	public static String ContentOutlineConfiguration_1;
187
	public static String ContentOutlineConfiguration_2;
187
	public static String AbstractOpenOn_0;
188
	public static String AbstractOpenOn_0;
188
	public static String FormatActionDelegate_jobName;
189
	public static String FormatActionDelegate_jobName;
189
	public static String FormatActionDelegate_errorStatusMessage;
190
	public static String FormatActionDelegate_errorStatusMessage;
(-)src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties (+1 lines)
Lines 158-163 Link Here
158
ShowPropertiesAction_0=P&roperties
158
ShowPropertiesAction_0=P&roperties
159
ContentOutlineConfiguration_0=Collapse All
159
ContentOutlineConfiguration_0=Collapse All
160
ContentOutlineConfiguration_1=Link with Editor
160
ContentOutlineConfiguration_1=Link with Editor
161
ContentOutlineConfiguration_2=Filters
161
AbstractOpenOn_0=Current text selection does not resolve to a file
162
AbstractOpenOn_0=Current text selection does not resolve to a file
162
FormatActionDelegate_jobName=Formatting...
163
FormatActionDelegate_jobName=Formatting...
163
FormatActionDelegate_errorStatusMessage=Exceptions occurred while formatting documents
164
FormatActionDelegate_errorStatusMessage=Exceptions occurred while formatting documents
(-)src/org/eclipse/wst/sse/ui/views/contentoutline/ContentOutlineConfiguration.java (-1 / +14 lines)
Lines 86-91 Link Here
86
	private IContributionItem[] fMenuContributions = null;
86
	private IContributionItem[] fMenuContributions = null;
87
	private IContributionItem[] fToolbarContributions = null;
87
	private IContributionItem[] fToolbarContributions = null;
88
	private final String OUTLINE_LINK_PREF = "outline-link-editor"; //$NON-NLS-1$
88
	private final String OUTLINE_LINK_PREF = "outline-link-editor"; //$NON-NLS-1$
89
	private final String OUTLINE_FILTER_PREF = "org.eclipse.wst.sse.ui.OutlinePage"; //$NON-NLS-1$
90
	
91
	private String fOutlineFilterPref = OUTLINE_FILTER_PREF; //$NON-NLS-1$
89
	ImageDescriptor SYNCED_D = EditorPluginImageHelper.getInstance().getImageDescriptor(EditorPluginImages.IMG_DLCL_SYNCED);
92
	ImageDescriptor SYNCED_D = EditorPluginImageHelper.getInstance().getImageDescriptor(EditorPluginImages.IMG_DLCL_SYNCED);
90
	ImageDescriptor SYNCED_E = EditorPluginImageHelper.getInstance().getImageDescriptor(EditorPluginImages.IMG_ELCL_SYNCED);
93
	ImageDescriptor SYNCED_E = EditorPluginImageHelper.getInstance().getImageDescriptor(EditorPluginImages.IMG_ELCL_SYNCED);
91
94
Lines 107-113 Link Here
107
	 */
110
	 */
108
	protected IContributionItem[] createMenuContributions(TreeViewer viewer) {
111
	protected IContributionItem[] createMenuContributions(TreeViewer viewer) {
109
		IContributionItem toggleLinkItem = new PropertyChangeUpdateActionContributionItem(new ToggleLinkAction(getPreferenceStore(), OUTLINE_LINK_PREF));
112
		IContributionItem toggleLinkItem = new PropertyChangeUpdateActionContributionItem(new ToggleLinkAction(getPreferenceStore(), OUTLINE_LINK_PREF));
110
		IContributionItem[] items = new IContributionItem[]{toggleLinkItem};
113
		IContributionItem filterItem = new CustomFilterActionContributionItem(new CustomFilterAction(getPreferenceStore(),fOutlineFilterPref, viewer),fOutlineFilterPref, getPreferenceStore(), viewer );
114
115
		IContributionItem[] items = new IContributionItem[]{toggleLinkItem, filterItem};
111
		return items;
116
		return items;
112
	}
117
	}
113
118
Lines 313-316 Link Here
313
			fMenuContributions = null;
318
			fMenuContributions = null;
314
		}
319
		}
315
	}
320
	}
321
	
322
	// added
323
	
324
	public void setOutlineFilterTarget(String targetId){
325
		fOutlineFilterPref = targetId;
326
	}
327
328
	
316
}
329
}
(-)src/org/eclipse/wst/sse/ui/views/contentoutline/CustomFilterAction.java (+368 lines)
Added Link Here
1
package org.eclipse.wst.sse.ui.views.contentoutline;
2
3
	/*******************************************************************************
4
	 * Copyright (c) 2001, 2010 IBM Corporation and others.
5
	 * All rights reserved. This program and the accompanying materials
6
	 * are made available under the terms of the Eclipse Public License v1.0
7
	 * which accompanies this distribution, and is available at
8
	 * http://www.eclipse.org/legal/epl-v10.html
9
	 *
10
	 * Contributors:
11
	 *     IBM Corporation - initial API and implementation
12
	 *******************************************************************************/
13
14
15
import java.util.ArrayList;
16
import java.util.HashMap;
17
import java.util.HashSet;
18
import java.util.Iterator;
19
import java.util.Map;
20
21
import org.eclipse.core.runtime.Assert;
22
import org.eclipse.jdt.internal.ui.JavaPlugin;
23
import org.eclipse.jdt.internal.ui.filters.CustomFiltersDialog;
24
import org.eclipse.jdt.internal.ui.filters.FilterDescriptor;
25
import org.eclipse.jdt.internal.ui.filters.NamePatternFilter;
26
import org.eclipse.jdt.internal.ui.util.StringMatcher;
27
import org.eclipse.jface.preference.IPreferenceStore;
28
import org.eclipse.jface.viewers.StructuredViewer;
29
import org.eclipse.jface.viewers.Viewer;
30
import org.eclipse.jface.viewers.ViewerFilter;
31
import org.eclipse.jface.window.Window;
32
import org.eclipse.wst.sse.ui.internal.SSEUIMessages;
33
import org.eclipse.wst.sse.ui.internal.contentoutline.PropertyChangeUpdateAction;
34
import org.w3c.dom.Node;
35
36
	/**
37
	 * Action group to add the filter action to a view part's tool bar
38
	 * menu.
39
	 * <p>
40
	 * This class may be instantiated; it is not intended to be subclassed.
41
	 * </p>
42
	 *
43
	 * @since 2.0
44
	 *
45
	 * @noextend This class is not intended to be subclassed by clients.
46
	 */
47
	public class CustomFilterAction extends PropertyChangeUpdateAction {
48
49
		
50
		private static final String SEPARATOR= ",";  //$NON-NLS-1$
51
		private final String TAG_USER_DEFINED_PATTERNS_ENABLED= "userDefinedPatternsEnabled"; //$NON-NLS-1$
52
		private final String TAG_USER_DEFINED_PATTERNS= "userDefinedPatterns"; //$NON-NLS-1$
53
		
54
		
55
		private static class FilterItem {
56
			boolean enabled;
57
			boolean previouslyEnabled;
58
			FilterDescriptor descriptor;
59
			String id;
60
61
			private ViewerFilter filterInstance= null;
62
63
			public FilterItem(FilterDescriptor descriptor) {
64
				this.descriptor= descriptor;
65
				this.id= descriptor.getId();
66
				this.previouslyEnabled= false;
67
				this.enabled= descriptor.isEnabled();
68
			}
69
70
			public ViewerFilter getFilterInstance() {
71
				if (filterInstance == null) {
72
					filterInstance= descriptor.createViewerFilter();
73
				}
74
				return filterInstance;
75
76
			}
77
		}
78
79
80
		private final StructuredViewer fViewer;
81
		private final SSENamePatternFilter fPatternFilter;
82
83
		private boolean fUserDefinedPatternsEnabled;
84
		private String[] fUserDefinedPatterns;
85
86
		private String[] fPreviousPatterns;
87
88
		private final Map fFilterItems;
89
90
91
		
92
		private final String fTargetId;
93
		private IPreferenceStore fStore;
94
		
95
96
		/**
97
		 * Creates a new <code>CustomFilterAction</code>.
98
		 *
99
		 * @param store     the preference Store 
100
		 * @param ownerId	the id of this action group's owner
101
		 * @param viewer	the viewer to be filtered
102
		 */
103
		public CustomFilterAction(IPreferenceStore store,String ownerId, StructuredViewer viewer) {
104
			super(SSEUIMessages.ContentOutlineConfiguration_2, store, ownerId, store.getBoolean(ownerId)); //$NON-NLS-1$
105
			Assert.isNotNull(ownerId);
106
			Assert.isNotNull(viewer);
107
			fStore = store;
108
			fTargetId= ownerId;
109
			fViewer= viewer;
110
			fPatternFilter= new SSENamePatternFilter();
111
112
			fUserDefinedPatterns= new String[0];
113
			fUserDefinedPatternsEnabled= false;
114
			fPreviousPatterns= new String[0];
115
116
			fFilterItems= new HashMap();
117
			FilterDescriptor[] filterDescriptors= FilterDescriptor.getFilterDescriptors(fTargetId);
118
			for (int i= 0; i < filterDescriptors.length; i++) {
119
				FilterItem item= new FilterItem(filterDescriptors[i]);
120
				Object existing= fFilterItems.put(item.id, item);
121
				if (existing != null) {
122
					JavaPlugin.logErrorMessage("WARNING: Duplicate id for extension-point \"org.eclipse.wst.sse.ui.sseElementFilters\" in " + ownerId); //$NON-NLS-1$
123
				}
124
			}
125
126
			initializeWithViewDefaults();
127
128
			updateViewerFilters();
129
					
130
		}
131
		
132
		public void update() {
133
			openDialog();
134
		}
135
		
136
		
137
138
		/*
139
		 * @see org.eclipse.jface.action.IContributionItem#isDynamic()
140
		 */
141
		public boolean isDynamic() {
142
			return true;
143
		}
144
		/**
145
		 * Returns a list of currently enabled filters. The filter
146
		 * is identified by its id.
147
		 * <p>
148
		 * This method is for internal use only and should not
149
		 * be called by clients outside of JDT/UI.
150
		 * </p>
151
		 *
152
		 * @return a list of currently enabled filters
153
		 *
154
		 * @since 3.1
155
		 *
156
		 * @noreference This method is not intended to be referenced by clients.
157
		 */
158
		public String[] internalGetEnabledFilterIds() {
159
			ArrayList enabledFilterIds= new ArrayList();
160
			for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
161
				FilterItem item= (FilterItem) iterator.next();
162
				if (item.enabled) {
163
					enabledFilterIds.add(item.id);
164
				}
165
			}
166
			return (String[])enabledFilterIds.toArray(new String[enabledFilterIds.size()]);
167
		}
168
169
		private void setEnabledFilterIds(String[] enabledIds) {
170
			// set all to false
171
			fUserDefinedPatternsEnabled= false;
172
			for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
173
				FilterItem item= (FilterItem) iterator.next();
174
				item.enabled= false;
175
			}
176
			// set enabled to true
177
			for (int i= 0; i < enabledIds.length; i++) {
178
				FilterItem item= (FilterItem) fFilterItems.get(enabledIds[i]);
179
				if (item != null) {
180
					item.enabled= true;
181
				}
182
				if (fPatternFilter.getClass().getName().equals(enabledIds[i]))
183
					fUserDefinedPatternsEnabled= true;
184
			}
185
		}
186
187
		private void setUserDefinedPatterns(String[] patterns) {
188
			fUserDefinedPatterns= patterns;
189
		}
190
191
192
		private boolean areUserDefinedPatternsEnabled() {
193
			return fUserDefinedPatternsEnabled;
194
		}
195
196
		private void setUserDefinedPatternsEnabled(boolean state) {
197
			fUserDefinedPatternsEnabled= state;
198
		}
199
200
				
201
		// ---------- viewer filter handling ----------
202
203
		private boolean updateViewerFilters() {
204
			ViewerFilter[] installedFilters= fViewer.getFilters();
205
			ArrayList viewerFilters= new ArrayList(installedFilters.length);
206
			
207
			HashSet patterns= new HashSet();
208
209
			boolean hasChange= false;
210
			boolean patternChange= false;
211
212
			for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
213
				FilterItem item= (FilterItem) iterator.next();
214
				if (item.descriptor.isCustomFilter()) {
215
					if (item.enabled != item.previouslyEnabled) {
216
						hasChange = true;
217
					}
218
					if (item.enabled){
219
						ViewerFilter filter= item.getFilterInstance(); // only create when changed
220
						if (filter != null) {
221
							viewerFilters.add(filter);
222
						}
223
					}
224
				} else if (item.descriptor.isPatternFilter()) {
225
					if (item.enabled) {
226
						patterns.add(item.descriptor.getPattern());
227
					}
228
					patternChange |= (item.enabled != item.previouslyEnabled);
229
				}
230
				item.previouslyEnabled= item.enabled;
231
			}
232
233
			if (areUserDefinedPatternsEnabled()) {
234
				for (int i= 0; i < fUserDefinedPatterns.length; i++) {
235
					patterns.add(fUserDefinedPatterns[i]);
236
				}
237
			}
238
			if (!patternChange) { // no pattern change so far, test if the user patterns made a difference
239
				patternChange= hasChanges(patterns, fPreviousPatterns);
240
			}
241
242
			fPreviousPatterns= (String[]) patterns.toArray(new String[patterns.size()]);
243
			if (patternChange) {
244
				fPatternFilter.setPatterns(fPreviousPatterns);
245
				if (patterns.isEmpty()) {
246
					viewerFilters.remove(fPatternFilter);
247
				} else if (!viewerFilters.contains(fPatternFilter)) {
248
					boolean contains = false;
249
					for (int i=0; i< viewerFilters.size();i++){
250
						if (viewerFilters.get(i) instanceof SSENamePatternFilter){
251
							SSENamePatternFilter filter = (SSENamePatternFilter)viewerFilters.get(i);
252
							String[] a1 =filter.getPatterns();
253
							String[] a2 =fPatternFilter.getPatterns();
254
							if (a1[0].equals(a2[0]))
255
								contains= true;
256
							else {
257
								viewerFilters.remove(i);
258
							}
259
							break;
260
						}
261
					}
262
					if (!contains)
263
						viewerFilters.add(fPatternFilter);
264
				}
265
				hasChange= true;
266
			}
267
			if (hasChange) {
268
				fViewer.setFilters((ViewerFilter[]) viewerFilters.toArray(new ViewerFilter[viewerFilters.size()])); // will refresh
269
			}
270
			return hasChange;
271
		}
272
273
		private boolean hasChanges(HashSet patterns, String[] oldPatterns) {
274
			HashSet copy= (HashSet) patterns.clone();
275
			for (int i= 0; i < oldPatterns.length; i++) {
276
				boolean found= copy.remove(oldPatterns[i]);
277
				if (!found)
278
					return true;
279
			}
280
			return !copy.isEmpty();
281
		}
282
283
		// ---------- view kind/defaults persistency ----------
284
285
		private void initializeWithViewDefaults() {
286
			// get default values for view
287
			
288
			
289
			fUserDefinedPatternsEnabled= fStore.getBoolean(getPreferenceKey(TAG_USER_DEFINED_PATTERNS_ENABLED));
290
			setUserDefinedPatterns(CustomFiltersDialog.convertFromString(fStore.getString(getPreferenceKey(TAG_USER_DEFINED_PATTERNS)), SEPARATOR));
291
292
			for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
293
				FilterItem item= (FilterItem) iterator.next();
294
				String id= item.id;
295
				// set default to value from plugin contributions (fixes https://bugs.eclipse.org/bugs/show_bug.cgi?id=73991 ):
296
				fStore.setDefault(id, item.descriptor.isEnabled());
297
				item.enabled= fStore.getBoolean(id);
298
			}
299
		
300
		}
301
302
		private void storeViewDefaults() {
303
			// get default values for view
304
			
305
			fStore.setValue(getPreferenceKey(TAG_USER_DEFINED_PATTERNS_ENABLED), fUserDefinedPatternsEnabled);
306
			fStore.setValue(getPreferenceKey(TAG_USER_DEFINED_PATTERNS), CustomFiltersDialog.convertToString(fUserDefinedPatterns ,SEPARATOR));
307
308
			boolean fFilterSelected = false;
309
			for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
310
				FilterItem item= (FilterItem) iterator.next();
311
				fStore.setValue(item.id, item.enabled);
312
				if (item.enabled)
313
					fFilterSelected = true;
314
			}
315
316
			fStore.setValue(fTargetId, fUserDefinedPatternsEnabled || fFilterSelected);
317
			
318
		}
319
320
		private String getPreferenceKey(String tag) {
321
			return "CustomFiltersActionGroup." + fTargetId + '.' + tag; //$NON-NLS-1$
322
		}
323
324
		
325
		private void openDialog() {
326
			CustomFiltersDialog dialog= new CustomFiltersDialog(
327
				fViewer.getControl().getShell(),
328
				fTargetId,
329
				areUserDefinedPatternsEnabled(),
330
				fUserDefinedPatterns,
331
				internalGetEnabledFilterIds());
332
333
			if (dialog.open() == Window.OK) {
334
				setEnabledFilterIds(dialog.getEnabledFilterIds());
335
				setUserDefinedPatternsEnabled(dialog.areUserDefinedPatternsEnabled());
336
				setUserDefinedPatterns(dialog.getUserDefinedPatterns());
337
				storeViewDefaults();
338
339
				updateViewerFilters();
340
			}
341
			else {
342
				storeViewDefaults();
343
			}
344
		}
345
		
346
		
347
		public class SSENamePatternFilter extends NamePatternFilter{
348
			public boolean select(Viewer viewer, Object parentElement, Object element) {
349
				if (getPatterns().length == 0) {
350
					return true;
351
				}
352
				String matchName= null;
353
				if (element instanceof Node){
354
					matchName =((Node)element).getNodeName();
355
				}
356
				if (matchName != null && matchName.length() > 0) {
357
					String[] fPatterns = getPatterns();
358
					for (int i = 0; i < fPatterns.length; i++) {
359
						if (new StringMatcher(fPatterns[i], true, false).match(matchName))
360
							return false;
361
					}
362
					return true;
363
				}
364
				return true;
365
			}
366
		}
367
	}
368
(-)src/org/eclipse/wst/sse/ui/views/contentoutline/CustomFilterActionContributionItem.java (+84 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2001, 2010 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *     
11
 *******************************************************************************/
12
package org.eclipse.wst.sse.ui.views.contentoutline;
13
14
import org.eclipse.jface.action.Action;
15
import org.eclipse.jface.action.ActionContributionItem;
16
import org.eclipse.jface.preference.IPreferenceStore;
17
import org.eclipse.jface.viewers.Viewer;
18
import org.eclipse.swt.events.MenuEvent;
19
import org.eclipse.swt.events.MenuListener;
20
import org.eclipse.swt.events.SelectionEvent;
21
import org.eclipse.swt.events.SelectionListener;
22
import org.eclipse.swt.widgets.Menu;
23
import org.eclipse.swt.widgets.MenuItem;
24
import org.eclipse.ui.texteditor.IUpdate;
25
26
/**
27
 * A listener on the given action's PreferenceStore. It calls .update() on the
28
 * action when the given key changes value.
29
 */
30
public class CustomFilterActionContributionItem extends ActionContributionItem {
31
32
	
33
	
34
	private String fProperty = null;
35
	private IPreferenceStore fStore;
36
	//private MenuItem filterMenuItem = null;
37
	private int idx;
38
39
	public CustomFilterActionContributionItem(Action action, String preference, IPreferenceStore store, Viewer viewer) {
40
		super(action);
41
		fProperty = preference;
42
		fStore = store;
43
	}
44
	
45
	/*
46
	 * Overrides method from ContributionItem.
47
	 */
48
	public void fill(Menu menu, int index) {
49
		
50
		super.fill(menu, index);
51
		idx = index;
52
		MenuItem filterMenuItem = menu.getItem(index);
53
		
54
		menu.addMenuListener(new MenuListener() {
55
			
56
			public void menuShown(MenuEvent e) {
57
				Object obj =e.getSource();
58
				if (obj instanceof Menu){
59
					Menu menu = (Menu)obj;
60
					menu.getItem(idx).setSelection(fStore.getBoolean(fProperty));
61
				}
62
			}
63
			
64
			public void menuHidden(MenuEvent e) {
65
				
66
			}
67
		});
68
	
69
		filterMenuItem.addSelectionListener(new SelectionListener() {
70
			
71
			public void widgetSelected(SelectionEvent e) {
72
				((IUpdate) getAction()).update();
73
				
74
			}
75
			
76
			public void widgetDefaultSelected(SelectionEvent e) {
77
				
78
			}
79
		});
80
		
81
	}
82
83
	
84
}
(-)src/org/eclipse/wst/sse/ui/views/contentoutline/SSEPackageDeclarationFilter.java (+31 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2005 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.wst.sse.ui.views.contentoutline;
12
13
14
import org.eclipse.jface.viewers.Viewer;
15
import org.eclipse.jface.viewers.ViewerFilter;
16
17
import org.eclipse.jdt.core.IPackageDeclaration;
18
19
20
/**
21
 * Filters package declarations
22
 */
23
public class SSEPackageDeclarationFilter extends ViewerFilter {
24
25
	/*
26
	 * @see ViewerFilter
27
	 */
28
	public boolean select(Viewer viewer, Object parent, Object element) {
29
		return !(element instanceof IPackageDeclaration);
30
	}
31
}
(-)plugin.properties (-1 / +11 lines)
Lines 137-140 Link Here
137
# Menu contributions
137
# Menu contributions
138
command.toggle.comment.mnemonic=T
138
command.toggle.comment.mnemonic=T
139
command.add.block.comment.mnemonic=A
139
command.add.block.comment.mnemonic=A
140
command.remove.block.comment.mnemonic=R
140
command.remove.block.comment.mnemonic=R
141
142
143
HideComments.label=Comments
144
HideComments.description=Hides Comments
145
146
HideProcessingInstruction.label=Processing Instructions
147
HideProcessingInstruction.description=Hides Processing Instructions
148
149
HideCDATASection.label=CDATA
150
HideCDATASection.description=Hides CDATA Section Tags
(-)plugin.xml (+30 lines)
Lines 1661-1665 Link Here
1661
       </contentTypeIdentifier>
1661
       </contentTypeIdentifier>
1662
    </inserter>
1662
    </inserter>
1663
 </extension>
1663
 </extension>
1664
 
1665
 
1666
 <extension
1667
         point="org.eclipse.jdt.ui.javaElementFilters">
1668
	  
1669
      <filter
1670
            targetId="org.eclipse.wst.xml.ui.OutlinePage"
1671
            name="%HideComments.label"
1672
            enabled="false"
1673
            description="%HideComments.description"
1674
            class="org.eclipse.wst.xml.ui.internal.contentoutline.XMLCommentFilter"
1675
            id="org.eclipse.wst.xml.ui.internal.contentoutline.XMLCommentFilter">
1676
      </filter>
1677
      <filter
1678
            targetId="org.eclipse.wst.xml.ui.OutlinePage"
1679
            name="%HideProcessingInstruction.label"
1680
            enabled="false"
1681
            description="%HideProcessingInstruction.description"
1682
            class="org.eclipse.wst.xml.ui.internal.contentoutline.XMLProcessingInstructionFilter"
1683
            id="org.eclipse.wst.xml.ui.internal.contentoutline.XMLProcessingInstructionFilter">
1684
      </filter>
1685
      <filter
1686
            targetId="org.eclipse.wst.xml.ui.OutlinePage"
1687
            name="%HideCDATASection.label"
1688
            enabled="false"
1689
            description="%HideCDATASection.description"
1690
            class="org.eclipse.wst.xml.ui.internal.contentoutline.XMLCDATASectionFilter"
1691
            id="org.eclipse.wst.xml.ui.internal.contentoutline.XMLCDATASectionFilter">
1692
      </filter>
1693
   </extension>
1664
1694
1665
</plugin>
1695
</plugin>
(-)src/org/eclipse/wst/xml/ui/internal/contentoutline/XMLCDATASectionFilter.java (+16 lines)
Added Link Here
1
package org.eclipse.wst.xml.ui.internal.contentoutline;
2
3
import org.eclipse.jface.viewers.Viewer;
4
import org.eclipse.jface.viewers.ViewerFilter;
5
import org.eclipse.wst.xml.core.internal.document.CDATASectionImpl;
6
7
public class XMLCDATASectionFilter extends ViewerFilter {
8
9
	public boolean select(Viewer viewer, Object parent, Object element) {
10
		if (element instanceof CDATASectionImpl){
11
			return false;
12
		}
13
		return true;
14
	}
15
16
}
(-)src/org/eclipse/wst/xml/ui/internal/contentoutline/XMLCommentFilter.java (+33 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2005 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.wst.xml.ui.internal.contentoutline;
12
13
14
import org.eclipse.jface.viewers.Viewer;
15
import org.eclipse.jface.viewers.ViewerFilter;
16
import org.eclipse.wst.xml.core.internal.document.CommentImpl;
17
18
19
/**
20
 * Filters package declarations
21
 */
22
public class XMLCommentFilter extends ViewerFilter {
23
24
	/*
25
	 * @see ViewerFilter
26
	 */
27
	public boolean select(Viewer viewer, Object parent, Object element) {
28
		if (element instanceof CommentImpl){
29
			return false;
30
		}
31
		return true;
32
	}
33
}
(-)src/org/eclipse/wst/xml/ui/internal/contentoutline/XMLProcessingInstructionFilter.java (+16 lines)
Added Link Here
1
package org.eclipse.wst.xml.ui.internal.contentoutline;
2
3
import org.eclipse.jface.viewers.Viewer;
4
import org.eclipse.jface.viewers.ViewerFilter;
5
import org.eclipse.wst.xml.core.internal.document.ProcessingInstructionImpl;
6
7
public class XMLProcessingInstructionFilter extends ViewerFilter {
8
9
	public boolean select(Viewer viewer, Object parent, Object element) {
10
		if (element instanceof ProcessingInstructionImpl){
11
			return false;
12
		}
13
		return true;
14
	}
15
16
}
(-)src/org/eclipse/wst/xml/ui/views/contentoutline/XMLContentOutlineConfiguration.java (+2 lines)
Lines 266-271 Link Here
266
	 * Preference key for Show Attributes
266
	 * Preference key for Show Attributes
267
	 */
267
	 */
268
	private final String OUTLINE_SHOW_ATTRIBUTE_PREF = "outline-show-attribute"; //$NON-NLS-1$
268
	private final String OUTLINE_SHOW_ATTRIBUTE_PREF = "outline-show-attribute"; //$NON-NLS-1$
269
	private final String OUTLINE_FILTER_PREF = "org.eclipse.wst.xml.ui.OutlinePage"; //$NON-NLS-1$
269
270
270
	/**
271
	/**
271
	 * Create new instance of XMLContentOutlineConfiguration
272
	 * Create new instance of XMLContentOutlineConfiguration
Lines 304-309 Link Here
304
			store.setDefault(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.NOTATION_NODE, "11, true");
305
			store.setDefault(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.NOTATION_NODE, "11, true");
305
		if (store.getDefaultString(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.TEXT_NODE).length() == 0)
306
		if (store.getDefaultString(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.TEXT_NODE).length() == 0)
306
			store.setDefault(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.TEXT_NODE, "12, false");
307
			store.setDefault(XMLUIPreferenceNames.OUTLINE_BEHAVIOR.TEXT_NODE, "12, false");
308
		super.setOutlineFilterTarget(OUTLINE_FILTER_PREF);
307
	}
309
	}
308
310
309
	/*
311
	/*

Return to bug 109045