// 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() );
}
}