# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /home.local/rmatous/work/netbeans/mainworking # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: gsf.api/src/org/netbeans/modules/gsf/api/StructureScanner.java --- gsf.api/src/org/netbeans/modules/gsf/api/StructureScanner.java Base (BASE) +++ gsf.api/src/org/netbeans/modules/gsf/api/StructureScanner.java Locally Modified (Based On LOCAL) @@ -42,8 +42,10 @@ package org.netbeans.modules.gsf.api; import java.awt.Component; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.swing.Icon; import org.netbeans.modules.gsf.api.annotations.CheckForNull; import org.netbeans.modules.gsf.api.annotations.NonNull; @@ -90,6 +92,7 @@ private final boolean filterable; private Component customFilter; private int expandDepth = -1; + private final List filterDescriptors; /** * Create a new Configuration for this structure scanner @@ -101,6 +104,7 @@ public Configuration(boolean sortable, boolean filterable) { this.sortable = sortable; this.filterable = filterable; + filterDescriptors = new ArrayList(); } public Configuration(boolean sortable, boolean filterable, int expandDepth) { @@ -167,5 +171,100 @@ public void setCustomFilter(Component customFilter) { this.customFilter = customFilter; } + + public void addFilterDescriptor(FilterDescriptor itemDescription) { + filterDescriptors.add(itemDescription); } + + /** + * @return the filterDescriptors + */ + public List getFilterDescriptors() { + return filterDescriptors; } + } + + /** + * For those that wish to filter content of navigator / outline / structure + * @see FilterDescriptor + */ + public static abstract class Filter { + /** + * @param item + * @return true or false whether item should be visible or not + */ + public abstract boolean isVisible(StructureItem item); + } + /** + * A description of a custom filter. + * @see Configuration#addFilterDescriptor(org.netbeans.modules.gsf.api.StructureScanner.FilterDescriptor) + * @see Filter + */ + public static final class FilterDescriptor { + private final String name; + private final String displayName; + private final String tooltip; + private final Icon selectedIcon; + private final Icon unselectedIcon; + private final boolean isDefaultSelected; + private final Filter filter; + + public FilterDescriptor (String name, String displayName, String tooltip, + boolean isDefaultSelected, Icon selectedIcon, Icon unselectedIcon, Filter filter) { + this.name = name; + this.displayName = displayName; + this.tooltip = tooltip; + this.selectedIcon = selectedIcon; + this.unselectedIcon = unselectedIcon; + this.isDefaultSelected = isDefaultSelected; + this.filter = filter; + } + + public final Filter getCustomFilter() { + return filter; + } + + /** + * @return the name + */ + public final String getName() { + return name; + } + + /** + * @return the displayName + */ + public final String getDisplayName() { + return displayName; + } + + /** + * @return the tooltip + */ + public final String getTooltip() { + return tooltip; + } + + /** + * @return the selectedIcon + */ + public final Icon getSelectedIcon() { + return selectedIcon; + } + + /** + * @return the unselectedIcon + */ + public final Icon getUnselectedIcon() { + return unselectedIcon; + } + + /** + * @return the isSelected + */ + public final boolean isDefaultSelected() { + return isDefaultSelected; + } + } + +} Index: gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberFilters.java --- gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberFilters.java Base (BASE) +++ gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberFilters.java Locally Modified (Based On LOCAL) @@ -48,15 +48,19 @@ import java.util.List; import javax.swing.ImageIcon; import javax.swing.JComponent; +import org.netbeans.modules.gsf.Language; import org.netbeans.modules.gsf.api.ElementKind; import org.netbeans.modules.gsf.api.Modifier; import org.netbeans.modules.gsf.api.StructureItem; +import org.netbeans.modules.gsf.api.StructureScanner; +import org.netbeans.modules.gsf.api.StructureScanner.Configuration; +import org.netbeans.modules.gsf.api.StructureScanner.Filter; +import org.netbeans.modules.gsf.api.StructureScanner.FilterDescriptor; import org.netbeans.modules.gsfret.navigation.ElementNode.Description; import org.netbeans.modules.gsfret.navigation.base.FiltersDescription; import org.netbeans.modules.gsfret.navigation.base.FiltersManager; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; -import org.openide.util.Utilities; /** * This file is originally from Retouche, the Java Support @@ -81,18 +85,20 @@ private FiltersManager filters; private boolean naturalSort = false; + private Language language; //issue #132883 workaround boolean disableFiltering = false; /** Creates a new instance of ClassMemberFilters */ - ClassMemberFilters( ClassMemberPanelUI ui ) { + ClassMemberFilters( ClassMemberPanelUI ui, Language language ) { this.ui = ui; + this.language = language; } public FiltersManager getInstance() { if (filters == null) { - filters = createFilters(); + filters = createFilters(language); } return filters; } @@ -111,7 +117,7 @@ List result = new ArrayList(original.size()); - if (disableFiltering) { + if (!disableFiltering) { for (StructureItem description : original) { // I default no access modifier to mean public, unlike the Java version where it means package protected @@ -131,10 +137,23 @@ continue; } - // XXX Inherited members + boolean isVisible = true; + List customFilterItems = getCustomFilterItems(language); + for (FilterDescriptor item : customFilterItems) { + if (filters.isSelected(item.getName())) { + Filter customFilter = item.getCustomFilter(); + if (!customFilter.isVisible(description)) { + isVisible = false; + break; + } + } + } + // XXX Inherited members + if (isVisible) { result.add(description); } + } } else { result = original; } @@ -156,7 +175,7 @@ // Privare methods --------------------------------------------------------- /** Creates filter descriptions and filters itself */ - private static FiltersManager createFilters () { + private static FiltersManager createFilters (Language language) { FiltersDescription desc = new FiltersDescription(); // XXX to be enabled later @@ -188,10 +207,24 @@ new ImageIcon (ImageUtilities.loadImage("org/netbeans/modules/gsfret/navigation/resources/filterHideNonPublic.png")), //NOI18N null ); + List customFilterItems = getCustomFilterItems(language); + for (FilterDescriptor item : customFilterItems) { + desc.addFilter(item.getName(), item.getDisplayName(), item.getTooltip(), + item.isDefaultSelected(), item.getSelectedIcon(), item.getUnselectedIcon()); + } return FiltersDescription.createManager(desc); } + private static List getCustomFilterItems(Language language) { + List retval = Collections.emptyList(); + StructureScanner scanner = language.getStructure(); + Configuration configuration = scanner.getConfiguration(); + if (configuration != null) { + retval = configuration.getFilterDescriptors(); + } + return retval; + } } Index: gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberPanelUI.java --- gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberPanelUI.java Base (BASE) +++ gsf/src/org/netbeans/modules/gsfret/navigation/ClassMemberPanelUI.java Locally Modified (Based On LOCAL) @@ -117,7 +117,7 @@ String keyText = Utilities.keyToString(toggleKey); filtersPanel.setToolTipText(NbBundle.getMessage(ClassMemberPanelUI.class, "TIP_TapPanel", keyText)); - filters = new ClassMemberFilters( this ); + filters = new ClassMemberFilters( this, language ); filters.getInstance().hookChangeListener(this); filtersPanel.add(filters.getComponent());