org.eclipse.photran.internal.ui.views.vpgproblems.ShowFullMessageAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.photran.internal.ui.views.vpgproblems.ShowFullMessageAction.java

Source

/*******************************************************************************
 * Copyright (c) 2009 University of Illinois at Urbana-Champaign 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:
 *    UIUC - Initial API and implementation
 *******************************************************************************/
package org.eclipse.photran.internal.ui.views.vpgproblems;

import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.MarkerUtilities;

/**
 * Action to display the entire message for a marker in a separate dialog.
 *
 * @author Timofey Yuvashev
 * @author Esfar Huq
 * @author Rui Wang
 * @author Jeff Overbey
 */
/* Esfar/Rui:
 *   Modified the method run()
 *       1) Added title bar to "Details" dialog 
 *       2) "Details" dialog wraps
 *       3) Focus is shifted to "Close" key, so that dialog can be exited by hitting enter key
 * Jeff - Converted to use Dialog instead of Shell
 */
public class ShowFullMessageAction extends MarkerDispatchAction {
    public ShowFullMessageAction(IWorkbenchSite site) {
        super(site);
        setText(Messages.ShowFullMessageAction_EventDetails);
        setToolTipText(Messages.ShowFullMessageAction_ShowDetailsTooltip);
    }

    public ShowFullMessageAction(IWorkbenchSite site, String text, String toolTipText) {
        super(site);
        setText(text);
        setToolTipText(toolTipText);
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        Image img = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
        return ImageDescriptor.createFromImage(img);
    }

    @Override
    protected void run(final IMarker marker) {
        new DetailsDialog(getSite().getShell(), marker).open();
    }

    private static final class DetailsDialog extends Dialog {
        private final IMarker marker;

        private DetailsDialog(Shell parentShell, IMarker marker) {
            super(parentShell);
            this.marker = marker;
        }

        @Override
        protected void configureShell(Shell shell) {
            super.configureShell(shell);
            shell.setText(Messages.ShowFullMessageAction_EventDetails);
            shell.setSize(500, 300);
        }

        @Override
        protected Control createDialogArea(Composite parent) {
            Composite dialogArea = (Composite) super.createDialogArea(parent);

            Text message = new Text(dialogArea, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
            message.setText(MarkerUtilities.getMessage(marker));
            message.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            dialogArea.layout();
            return dialogArea;
        }

        @Override
        protected void createButtonsForButtonBar(Composite parent) {
            Button close = createButton(parent, IDialogConstants.CLOSE_ID, IDialogConstants.CLOSE_LABEL, true);
            close.addSelectionListener(new SelectionListener() {
                public void widgetSelected(SelectionEvent e) {
                    close();
                }

                public void widgetDefaultSelected(SelectionEvent e) {
                    close();
                }
            });
            close.setFocus();
        }
    }
}