melnorme.lang.ide.ui.utils.StatusMessageDialog2.java Source code

Java tutorial

Introduction

Here is the source code for melnorme.lang.ide.ui.utils.StatusMessageDialog2.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Bruno Medeiros and other Contributors.
 * 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:
 *     Bruno Medeiros - initial API and implementation
 *******************************************************************************/
package melnorme.lang.ide.ui.utils;

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

import melnorme.util.swt.SWTFactoryUtil;
import melnorme.util.swt.SWTUtil;
import melnorme.util.swt.components.AbstractWidget;
import melnorme.utilbox.status.StatusException;

public class StatusMessageDialog2 extends Dialog {

    protected final String title;

    protected final IconAndMessageWidget iconAndMessageWidget;

    public StatusMessageDialog2(Shell shell, String title, StatusException statusMessage) {
        super(shell);
        assertNotNull(statusMessage);
        this.title = title;
        this.iconAndMessageWidget = createIconAndMessageWidget();
        this.iconAndMessageWidget.setStatusMessage(statusMessage);
    }

    @Override
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setText(title);
    }

    @Override
    protected Control createContents(Composite parent) {
        return super.createContents(parent);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite topControl = (Composite) super.createDialogArea(parent);
        GridLayout gridLayout = (GridLayout) topControl.getLayout();
        gridLayout.numColumns = 2;
        iconAndMessageWidget.createComponentInlined(topControl);
        iconAndMessageWidget.messageControlLayoutData().widthHint = convertHorizontalDLUsToPixels(
                IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);

        return topControl;
    }

    protected IconAndMessageWidget createIconAndMessageWidget() {
        return new IconAndMessageWidget();
    }

    public static class IconAndMessageWidget extends AbstractWidget {

        protected StatusException statusMessage;

        protected Label imageControl;
        protected Label messageControl;

        public IconAndMessageWidget() {
        }

        @Override
        public int getPreferredLayoutColumns() {
            return 2;
        }

        public void setStatusMessage(StatusException statusMessage) {
            this.statusMessage = assertNotNull(statusMessage);
        }

        @Override
        protected void createContents(Composite topControl) {
            imageControl = createImageControl(topControl);
            createMessageControl(topControl);
        }

        protected Label createImageControl(Composite topControl) {
            return SWTFactoryUtil.createIconLabel(topControl, getImage(),
                    GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING).create());
        }

        protected Image getImage() {
            return SWTUtil.getImageForSeverity(statusMessage.getSeverity());
        }

        protected void createMessageControl(Composite topControl) {
            String message = statusMessage.getMultiLineRender();
            messageControl = SWTFactoryUtil.createLabel(topControl, SWT.WRAP, message, gdGrabAll());
        }

        public GridData messageControlLayoutData() {
            assertNotNull(messageControl);
            return (GridData) messageControl.getLayoutData();
        }

        @Override
        protected void updateWidgetFromInput() {
            // immutable widget
        }
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
    }

}