de.femodeling.e4.ui.progress.internal.ProgressView.java Source code

Java tutorial

Introduction

Here is the source code for de.femodeling.e4.ui.progress.internal.ProgressView.java

Source

/*******************************************************************************
 * Copyright (c) 2003, 2008 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package de.femodeling.e4.ui.progress.internal;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;

/**
 * The ProgressView is the class that shows the details of the current workbench
 * progress.
 */
public class ProgressView extends ViewPart implements IViewPart {

    DetailedProgressViewer viewer;

    Action cancelAction;

    Action clearAllAction;

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    public void createPartControl(Composite parent) {
        viewer = new DetailedProgressViewer(parent, SWT.MULTI | SWT.H_SCROLL);
        viewer.setComparator(ProgressManagerUtil.getProgressViewerComparator());

        viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        /*
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
        IWorkbenchHelpContextIds.RESPONSIVE_UI);
        */

        initContentProvider();
        createClearAllAction();
        createCancelAction();
        initContextMenu();
        initPulldownMenu();
        initToolBar();
        getSite().setSelectionProvider(viewer);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IWorkbenchPart#setFocus()
     */
    public void setFocus() {
        if (viewer != null) {
            viewer.setFocus();
        }
    }

    /**
     * Sets the content provider for the viewer.
     */
    protected void initContentProvider() {
        ProgressViewerContentProvider provider = new ProgressViewerContentProvider(viewer, true, true);
        viewer.setContentProvider(provider);
        viewer.setInput(ProgressManager.getInstance());
    }

    /**
     * Initialize the context menu for the receiver.
     */
    private void initContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
        menuMgr.add(cancelAction);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                JobInfo info = getSelectedInfo();
                if (info == null) {
                    return;
                }
            }
        });
        menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        getSite().registerContextMenu(menuMgr, viewer);
        viewer.getControl().setMenu(menu);
    }

    private void initPulldownMenu() {
        IMenuManager menuMgr = getViewSite().getActionBars().getMenuManager();
        menuMgr.add(clearAllAction);
        menuMgr.add(new ViewPreferencesAction() {
            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.ui.internal.preferences.ViewPreferencesAction#openViewPreferencesDialog()
             */
            public void openViewPreferencesDialog() {
                new JobsViewPreferenceDialog(viewer.getControl().getShell()).open();

            }
        });

    }

    private void initToolBar() {
        IActionBars bars = getViewSite().getActionBars();
        IToolBarManager tm = bars.getToolBarManager();
        tm.add(clearAllAction);
    }

    /**
     * Return the selected objects. If any of the selections are not JobInfos or
     * there is no selection then return null.
     * 
     * @return JobInfo[] or <code>null</code>.
     */
    private IStructuredSelection getSelection() {
        // If the provider has not been set yet move on.
        ISelectionProvider provider = getSite().getSelectionProvider();
        if (provider == null) {
            return null;
        }
        ISelection currentSelection = provider.getSelection();
        if (currentSelection instanceof IStructuredSelection) {
            return (IStructuredSelection) currentSelection;
        }
        return null;
    }

    /**
     * Get the currently selected job info. Only return it if it is the only
     * item selected and it is a JobInfo.
     * 
     * @return JobInfo
     */
    JobInfo getSelectedInfo() {
        IStructuredSelection selection = getSelection();
        if (selection != null && selection.size() == 1) {
            JobTreeElement element = (JobTreeElement) selection.getFirstElement();
            if (element.isJobInfo()) {
                return (JobInfo) element;
            }
        }
        return null;
    }

    /**
     * Create the cancel action for the receiver.
     */
    private void createCancelAction() {
        cancelAction = new Action(ProgressMessages.ProgressView_CancelAction) {
            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.action.Action#run()
             */
            public void run() {
                viewer.cancelSelection();
            }
        };

    }

    /**
     * Create the clear all action for the receiver.
     */
    private void createClearAllAction() {
        clearAllAction = new Action(ProgressMessages.ProgressView_ClearAllAction) {
            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.action.Action#run()
             */
            public void run() {
                FinishedJobs.getInstance().clearAll();
            }
        };
        clearAllAction.setToolTipText(ProgressMessages.NewProgressView_RemoveAllJobsToolTip);
        ImageDescriptor id = WorkbenchImages.getWorkbenchImageDescriptor("/elcl16/progress_remall.gif"); //$NON-NLS-1$
        if (id != null) {
            clearAllAction.setImageDescriptor(id);
        }
        id = WorkbenchImages.getWorkbenchImageDescriptor("/dlcl16/progress_remall.gif"); //$NON-NLS-1$
        if (id != null) {
            clearAllAction.setDisabledImageDescriptor(id);
        }
    }

    /**
     * @return Returns the viewer.
     */
    public DetailedProgressViewer getViewer() {
        return viewer;
    }

}