From eb4639d52fe1c251b17413a96ce298726296fecc Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Mon, 7 Mar 2011 03:07:07 +0000 Subject: [PATCH] bug 339015: extracted FilterEmtpyFoldersAction --- .../ui/views/FilterEmtpyFoldersAction.java | 124 ++++++++++++++++++ .../eclipse/cdt/make/ui/views/MakeView.java | 95 +------------- 2 files changed, 126 insertions(+), 93 deletions(-) create mode 100644 build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java new file mode 100644 index 00000000000..fa17feff1a0 --- /dev/null +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2011, 2011 Andrew Gvozdev. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andrew Gvozdev - Initial implementation: extracted from MakeView + *******************************************************************************/ + +package org.eclipse.cdt.make.ui.views; + +import org.eclipse.cdt.make.core.IMakeTarget; +import org.eclipse.cdt.make.core.MakeCorePlugin; +import org.eclipse.cdt.make.internal.ui.MakeUIImages; +import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceProxy; +import org.eclipse.core.resources.IResourceProxyVisitor; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; + +/** + * A filter to filter out empty folders (with no make targets or other folders) + * in Make Targets view. + * + * @noextend This class is not intended to be subclassed by clients. + * @noinstantiate This class is not intended to be instantiated by clients. + * + * @since 7.1 + */ +public class FilterEmtpyFoldersAction extends Action { + private static final String FILTER_EMPTY_FOLDERS = "FilterEmptyFolders"; //$NON-NLS-1$ + + private TreeViewer fViewer; + + /** + * Constructor. + * + * @param viewer - viewer to filter out empty folders. + */ + public FilterEmtpyFoldersAction(TreeViewer viewer) { + super(MakeUIPlugin.getResourceString("FilterEmptyFolderAction.label"), IAction.AS_CHECK_BOX); //$NON-NLS-1$ + fViewer = viewer; + + setToolTipText(MakeUIPlugin.getResourceString("FilterEmptyFolderAction.tooltip")); //$NON-NLS-1$ + setChecked(getSettings().getBoolean(FILTER_EMPTY_FOLDERS)); + MakeUIImages.setImageDescriptors(this, "tool16", MakeUIImages.IMG_TOOLS_MAKE_TARGET_FILTER); //$NON-NLS-1$ + fViewer.addFilter(new ViewerFilter() { + //Check the make targets of the specified container, and if they don't exist, run + //through the children looking for the first match that we can find that contains + //a make target. + private boolean hasMakeTargets(IFolder container) throws CoreException { + IMakeTarget [] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(container); + if(targets != null && targets.length > 0) { + return true; + } + + final boolean [] haveTargets = new boolean[1]; + haveTargets[0] = false; + + IResourceProxyVisitor visitor = new IResourceProxyVisitor() { + public boolean visit(IResourceProxy proxy) throws CoreException { + if(haveTargets[0]) { + return false; //We found what we were looking for + } + if(proxy.getType() != IResource.FOLDER) { + return true; //We only look at folders for content + } + IFolder folder = (IFolder) proxy.requestResource(); + IMakeTarget [] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(folder); + if(targets != null && targets.length > 0) { + haveTargets[0] = true; + return false; + } + return true; //Keep looking + } + }; + container.accept(visitor, IResource.NONE); + + return haveTargets[0]; + } + + @Override + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (isChecked() && element instanceof IFolder) { + try { + return hasMakeTargets((IFolder)element); + } catch(Exception ex) { + return false; + } + } + return true; + } + }); + } + + @Override + public void run() { + fViewer.refresh(); + getSettings().put(FILTER_EMPTY_FOLDERS, isChecked()); + } + + /** + * Returns setting for this control. + * + * @return Settings. + */ + private IDialogSettings getSettings() { + final String sectionName = "org.eclipse.cdt.internal.ui.MakeView"; //$NON-NLS-1$ + IDialogSettings settings = MakeUIPlugin.getDefault().getDialogSettings().getSection(sectionName); + if (settings == null) { + settings = MakeUIPlugin.getDefault().getDialogSettings().addNewSection(sectionName); + } + return settings; + } +} diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java index fa7af057e54..da3b21d4cba 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java @@ -12,9 +12,6 @@ *******************************************************************************/ package org.eclipse.cdt.make.ui.views; -import org.eclipse.cdt.make.core.IMakeTarget; -import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.internal.ui.MakeUIImages; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.cdt.make.internal.ui.dnd.AbstractContainerAreaDropAdapter; import org.eclipse.cdt.make.internal.ui.dnd.AbstractSelectionDragAdapter; @@ -29,14 +26,8 @@ import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDropTargetListener; import org.eclipse.cdt.make.ui.IMakeHelpContextIds; import org.eclipse.cdt.make.ui.MakeContentProvider; import org.eclipse.cdt.make.ui.MakeLabelProvider; -import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; @@ -44,7 +35,6 @@ import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.bindings.BindingManagerEvent; import org.eclipse.jface.bindings.IBindingManagerListener; -import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.util.DelegatingDragAdapter; import org.eclipse.jface.util.DelegatingDropAdapter; import org.eclipse.jface.util.LocalSelectionTransfer; @@ -54,8 +44,6 @@ import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; @@ -94,7 +82,7 @@ public class MakeView extends ViewPart { private PasteTargetAction pasteTargetAction; private TreeViewer fViewer; private DrillDownAdapter drillDownAdapter; - private Action trimEmptyFolderAction; + private FilterEmtpyFoldersAction trimEmptyFolderAction; private IBindingService bindingService; public MakeView() { @@ -209,85 +197,6 @@ public class MakeView extends ViewPart { fViewer.addDropSupport(opers | DND.DROP_DEFAULT, dropTransfers, delegatingDropAdapter); } - /** - * Returns setting for this control. - * - * @return Settings. - */ - IDialogSettings getSettings() { - final String sectionName = "org.eclipse.cdt.internal.ui.MakeView"; //$NON-NLS-1$ - IDialogSettings settings = MakeUIPlugin.getDefault().getDialogSettings().getSection(sectionName); - if (settings == null) { - settings = MakeUIPlugin.getDefault().getDialogSettings().addNewSection(sectionName); - } - return settings; - } - - protected class FilterEmtpyFoldersAction extends Action { - - private static final String FILTER_EMPTY_FOLDERS = "FilterEmptyFolders"; //$NON-NLS-1$ - - public FilterEmtpyFoldersAction() { - super(MakeUIPlugin.getResourceString("FilterEmptyFolderAction.label"), IAction.AS_CHECK_BOX); //$NON-NLS-1$ - setToolTipText(MakeUIPlugin.getResourceString("FilterEmptyFolderAction.tooltip")); //$NON-NLS-1$ - setChecked(getSettings().getBoolean(FILTER_EMPTY_FOLDERS)); - MakeUIImages.setImageDescriptors(this, "tool16", MakeUIImages.IMG_TOOLS_MAKE_TARGET_FILTER); //$NON-NLS-1$ - fViewer.addFilter(new ViewerFilter() { - //Check the make targets of the specified container, and if they don't exist, run - //through the children looking for the first match that we can find that contains - //a make target. - private boolean hasMakeTargets(IFolder container) throws CoreException { - IMakeTarget [] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(container); - if(targets != null && targets.length > 0) { - return true; - } - - final boolean [] haveTargets = new boolean[1]; - haveTargets[0] = false; - - IResourceProxyVisitor visitor = new IResourceProxyVisitor() { - public boolean visit(IResourceProxy proxy) throws CoreException { - if(haveTargets[0]) { - return false; //We found what we were looking for - } - if(proxy.getType() != IResource.FOLDER) { - return true; //We only look at folders for content - } - IFolder folder = (IFolder) proxy.requestResource(); - IMakeTarget [] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(folder); - if(targets != null && targets.length > 0) { - haveTargets[0] = true; - return false; - } - return true; //Keep looking - } - }; - container.accept(visitor, IResource.NONE); - - return haveTargets[0]; - } - - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (isChecked() && element instanceof IFolder) { - try { - return hasMakeTargets((IFolder)element); - } catch(Exception ex) { - return false; - } - } - return true; - } - }); - } - - @Override - public void run() { - fViewer.refresh(); - getSettings().put(FILTER_EMPTY_FOLDERS, isChecked()); - } - } - private void makeActions() { Shell shell = fViewer.getControl().getShell(); @@ -300,7 +209,7 @@ public class MakeView extends ViewPart { pasteTargetAction = new PasteTargetAction(shell, clipboard); deleteTargetAction = new DeleteTargetAction(shell); editTargetAction = new EditTargetAction(shell); - trimEmptyFolderAction = new FilterEmtpyFoldersAction(); + trimEmptyFolderAction = new FilterEmtpyFoldersAction(fViewer); } private void contributeToActionBars() { IActionBars actionBars = getViewSite().getActionBars();