org.projectusus.ui.internal.coveredprojects.CoveredProjectsView.java Source code

Java tutorial

Introduction

Here is the source code for org.projectusus.ui.internal.coveredprojects.CoveredProjectsView.java

Source

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