/******************************************************************************* * 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; // gridLayout.marginHeight = 0; // gridLayout.marginWidth = 0; 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); } // public access @Override public void okPressed() { super.okPressed(); } }