package org.projectusus.ui.dependencygraph.sourcefolder; import static org.apache.commons.lang.StringUtils.join; import static org.eclipse.core.runtime.IStatus.OK; import static org.projectusus.ui.dependencygraph.DependencyGraphPlugin.plugin; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.action.Action; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Shell; import org.projectusus.ui.dependencygraph.common.IRefreshable; public final class SourceFolderFilterAction extends Action { private final SourceFolderFilter filter; private final IRefreshable refreshable; public SourceFolderFilterAction( SourceFolderFilter filter, IRefreshable refreshable ) { super( "", AS_CHECK_BOX ); this.filter = filter; this.refreshable = refreshable; updateState(); } @Override public void runWithEvent( Event event ) { Shell shell = event.display.getActiveShell(); SourceFolderFilterSelectionDialog dialog = createSelectionDialog( shell ); boolean changed = false; if( dialog.open() == OK ) { List<IPath> newVisibleSourceFolders = dialog.getSelectedSourceFolders(); if( hasChanged( newVisibleSourceFolders ) ) { filter.setVisibleSourceFolders( newVisibleSourceFolders ); changed = true; } } updateState(); if( changed ) { refreshable.refresh(); } } private boolean hasChanged( List<IPath> newVisibleSourceFolders ) { return !newVisibleSourceFolders.equals( filter.getVisibleSourceFolders() ); } private SourceFolderFilterSelectionDialog createSelectionDialog( Shell shell ) { return new SourceFolderFilterSelectionDialog( shell, filter ); } public void updateState() { setChecked( filter.isFiltering() ); if( isChecked() ) { setImageDescriptor( plugin().imageForPath( "icons/source_folder_filter_active.png" ) ); setText( filter.getVisibleSourceFolders().size() + "/" + filter.getAllSourceFolders().size() + " source folders" ); setToolTipText( "Visible source folders: " + join( filter.getVisibleSourceFolders(), ", " ) ); } else { setImageDescriptor( plugin().imageForPath( "icons/source_folder_filter_inactive.png" ) ); setText( "All source folders" ); setToolTipText( null ); } } }