// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.ui.internal.coveredprojects; import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace; import static org.projectusus.ui.internal.coveredprojects.SetUsusProjectOnSelection.checkSelected; import static org.projectusus.ui.internal.coveredprojects.SetUsusProjectOnSelection.uncheckSelected; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.part.ViewPart; import org.projectusus.core.project.FindUsusProjects; public class CoveredProjectsView extends ViewPart { private CheckboxTableViewer viewer; @Override public void createPartControl( Composite parent ) { createViewer( parent ); configureActionBars(); refresh(); } @Override public void setFocus() { Control control = viewer.getControl(); if( control != null && !control.isDisposed() ) { control.setFocus(); } } // internal methods // ///////////////// private void createViewer( Composite parent ) { Table table = createTable( parent ); viewer = new CheckboxTableViewer( table ); viewer.setContentProvider( new CoveredProjectsCP() ); viewer.setLabelProvider( new CoveredProjectsLP() ); viewer.addCheckStateListener( new ICheckStateListener() { public void checkStateChanged( CheckStateChangedEvent event ) { updateUsusProject( event.getElement(), event.getChecked() ); refresh(); } } ); MenuManager menuManager = new MenuManager(); menuManager.addMenuListener( createContextMenu() ); table.setMenu( menuManager.createContextMenu( parent ) ); } private IMenuListener createContextMenu() { return new IMenuListener() { public void menuAboutToShow( IMenuManager manager ) { manager.removeAll(); manager.add( checkSelected( CoveredProjectsView.this, viewer.getSelection() ) ); manager.add( uncheckSelected( CoveredProjectsView.this, viewer.getSelection() ) ); } }; } private void updateUsusProject( Object element, boolean checked ) { if( element instanceof IProject ) { UsusProjectMarker marker = new UsusProjectMarker( ); IProject project = (IProject)element; if( checked ) { marker.check( project ); } else { marker.uncheck( project ); } } } private Table createTable( Composite parent ) { Composite comp = new Composite( parent, SWT.NONE ); int style = SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL; Table result = new Table( comp, style ); TableColumnLayout layout = new TableColumnLayout(); comp.setLayout( layout ); result.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) ); result.setLinesVisible( false ); result.setHeaderVisible( false ); createColumns( result, layout ); return result; } private void createColumns( Table table, TableColumnLayout layout ) { for( ColumnDesc columnDesc : ColumnDesc.values() ) { TableColumn column = new TableColumn( table, SWT.NONE ); ColumnWeightData data = new ColumnWeightData( columnDesc.getWeight() ); layout.setColumnData( column, data ); } } private void configureActionBars() { IActionBars bars = getViewSite().getActionBars(); enableContributions( bars.getToolBarManager() ); enableContributions( bars.getMenuManager() ); } private void enableContributions( IContributionManager manager ) { manager.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); } void refresh() { IWorkspaceRoot input = getWorkspace().getRoot(); viewer.setInput( input ); applyCheckedState( input ); } private void applyCheckedState( IWorkspaceRoot input ) { IContentProvider cp = viewer.getContentProvider(); Object[] elements = ((IStructuredContentProvider)cp).getElements( input ); List<IProject> ususProjects = new FindUsusProjects( elements ).compute(); viewer.setCheckedElements( ususProjects.toArray() ); } }