org.eclipse.ptp.debug.internal.ui.views.variable.PVariableView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ptp.debug.internal.ui.views.variable.PVariableView.java

Source

/*******************************************************************************
 * Copyright (c) 2005 The Regents of the University of California. 
 * This material was produced under U.S. Government contract W-7405-ENG-36 
 * for Los Alamos National Laboratory, which is operated by the University 
 * of California for the U.S. Department of Energy. The U.S. Government has 
 * rights to use, reproduce, and distribute this software. NEITHER THE 
 * GOVERNMENT NOR THE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR 
 * ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified 
 * to produce derivative works, such modified software should be clearly marked, 
 * so as not to confuse it with the version available from LANL.
 * 
 * Additionally, 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
 * 
 * LA-CC 04-115
 *******************************************************************************/
package org.eclipse.ptp.debug.internal.ui.views.variable;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.ui.AbstractDebugView;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ptp.debug.internal.ui.actions.AddPExpressionAction;
import org.eclipse.ptp.debug.internal.ui.actions.CompareValueAction;
import org.eclipse.ptp.debug.internal.ui.actions.DeletePExpressionAction;
import org.eclipse.ptp.debug.internal.ui.actions.EditPExpressionAction;
import org.eclipse.ptp.debug.internal.ui.actions.UpdatePExpressionAction;
import org.eclipse.ptp.debug.internal.ui.views.AbstractPDebugViewEventHandler;
import org.eclipse.ptp.debug.ui.IPTPDebugUIConstants;
import org.eclipse.ptp.debug.ui.PTPDebugUIPlugin;
import org.eclipse.ptp.debug.ui.UIDebugManager;
import org.eclipse.ptp.debug.ui.PVariableManager.PVariableInfo;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchActionConstants;

/**
 * @author Clement chu
 */
public class PVariableView extends AbstractDebugView implements ICheckStateListener {
    private AbstractPDebugViewEventHandler fEventHandler;
    private UIDebugManager uiManager = null;
    private PVariableCheckboxTableViewer viewer = null;

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.AbstractDebugView#createViewer(org.eclipse.swt.widgets.Composite)
     */
    protected Viewer createViewer(Composite parent) {
        uiManager = PTPDebugUIPlugin.getUIDebugManager();

        // add tree viewer
        viewer = new PVariableCheckboxTableViewer(parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
        PVariableContentProvider contentProvider = new PVariableContentProvider();
        PVariableLabelProvider labelProvider = new PVariableLabelProvider();

        viewer.setContentProvider(contentProvider);
        viewer.setLabelProvider(labelProvider);
        viewer.setCheckProvider(labelProvider);
        viewer.setSorter(new PVariableViewerSorter());
        viewer.setUseHashlookup(true);
        viewer.setInput(uiManager.getJobVariableManager());
        viewer.addCheckStateListener(this);

        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                if (!getSelection().isEmpty()) {
                    getAction(EditPExpressionAction.name).run();
                }
            }
        });
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateActionsEnable();
            }
        });
        setEventHandler(new PVariableViewEventHandler(this));
        return viewer;
    }

    public UIDebugManager getUIManager() {
        return uiManager;
    }

    public void refresh() {
        viewer.refresh();
        updateActionsEnable();
    }

    public ISelection getSelection() {
        return viewer.getSelection();
    }

    /**
     * Sets the event handler for this view
     * 
     * @param eventHandler event handler
     */
    protected void setEventHandler(AbstractPDebugViewEventHandler eventHandler) {
        this.fEventHandler = eventHandler;
    }

    /**
     * Returns the event handler for this view
     * 
     * @return The event handler for this view
     */
    protected AbstractPDebugViewEventHandler getEventHandler() {
        return this.fEventHandler;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.AbstractDebugView#createActions()
     */
    protected void createActions() {
        setAction(AddPExpressionAction.name, new AddPExpressionAction(this));
        setAction(EditPExpressionAction.name, new EditPExpressionAction(this));
        setAction(DeletePExpressionAction.name, new DeletePExpressionAction(this));
        setAction(UpdatePExpressionAction.name, new UpdatePExpressionAction(this));
        setAction(CompareValueAction.name, new CompareValueAction(this));

        updateActionsEnable();
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.AbstractDebugView#configureToolBar(org.eclipse.jface.action.IToolBarManager)
     */
    protected void configureToolBar(IToolBarManager toolBarMgr) {
        toolBarMgr.add(new Separator(IPTPDebugUIConstants.VAR_GROUP));

        toolBarMgr.appendToGroup(IPTPDebugUIConstants.VAR_GROUP, getAction(AddPExpressionAction.name));
        toolBarMgr.appendToGroup(IPTPDebugUIConstants.VAR_GROUP, getAction(EditPExpressionAction.name));
        toolBarMgr.appendToGroup(IPTPDebugUIConstants.VAR_GROUP, getAction(DeletePExpressionAction.name));
        toolBarMgr.appendToGroup(IPTPDebugUIConstants.VAR_GROUP, getAction(UpdatePExpressionAction.name));
        toolBarMgr.add(new Separator());
        toolBarMgr.appendToGroup(IPTPDebugUIConstants.VAR_GROUP, getAction(CompareValueAction.name));
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.AbstractDebugView#getHelpContextId()
     */
    protected String getHelpContextId() {
        return null;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.AbstractDebugView#fillContextMenu(org.eclipse.jface.action.IMenuManager)
     */
    protected void fillContextMenu(IMenuManager menu) {
        menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        menu.add(getAction(AddPExpressionAction.name));
        menu.add(getAction(EditPExpressionAction.name));
        menu.add(getAction(DeletePExpressionAction.name));
        menu.add(getAction(UpdatePExpressionAction.name));
        menu.add(new Separator());
        menu.add(getAction(CompareValueAction.name));
        updateObjects();
    }

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

    private boolean isEmpty() {
        return (viewer.getTable().getItemCount() == 0);
    }

    private boolean isCurrentJobAvailable() {
        String cur_jid = uiManager.getCurrentJobId();
        return (cur_jid != null && cur_jid.length() > 0);
    }

    public void updateActionsEnable() {
        getAction(AddPExpressionAction.name).setEnabled(isCurrentJobAvailable());
        getAction(EditPExpressionAction.name).setEnabled(!getSelection().isEmpty());
        getAction(DeletePExpressionAction.name).setEnabled(!getSelection().isEmpty());
        getAction(UpdatePExpressionAction.name).setEnabled(!isEmpty());
        getAction(CompareValueAction.name).setEnabled(!getSelection().isEmpty());
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
     */
    public void checkStateChanged(CheckStateChangedEvent event) {
        Object data = event.getElement();
        if (data instanceof PVariableInfo) {
            try {
                getUIManager().getJobVariableManager().updateVariableStatus((PVariableInfo) data,
                        event.getChecked());
            } catch (CoreException e) {
                e.printStackTrace();
            }
        }
    }
}