/******************************************************************************* * Copyright (c) 2016 Bruno Medeiros 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.util.swt.components.misc; import static melnorme.utilbox.core.Assert.AssertNamespace.assertFail; import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull; import org.eclipse.jface.dialogs.Dialog; 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.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import melnorme.util.swt.SWTFactoryUtil; import melnorme.util.swt.SWTUtil; import melnorme.util.swt.components.AbstractDisableableWidget; import melnorme.utilbox.status.IStatusMessage; import melnorme.utilbox.status.Severity; import melnorme.utilbox.status.StatusMessage; public class StatusMessageWidget extends AbstractDisableableWidget { protected Composite topControl; protected Label icon; protected Link hintText; @Override public int getPreferredLayoutColumns() { return 2; } @Override public void createComponentInlined(Composite parent) { assertFail(); // not supported yet } @Override protected void createContents(Composite topControl) { this.topControl = topControl; icon = SWTFactoryUtil.createIconLabel(topControl, null, GridDataFactory.swtDefaults().create()); // Note: make sure we provide a minimum width hint, so label text doesn't take up one long line. hintText = SWTFactoryUtil.createLink(topControl, SWT.LEFT, "", GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).create()); } @Override protected void doSetEnabled(boolean enabled) { setControlEnabled(icon, enabled); setControlEnabled(hintText, enabled); } @Override public void updateWidgetFromInput() { updateWidget(null); } public void updateWidget(IStatusMessage statusMessage) { if(!SWTUtil.isOkToUse(icon)) { return; } topControl.setVisible(statusMessage != null); ((GridData) topControl.getLayoutData()).exclude = statusMessage == null; icon.setImage(statusMessage == null ? null : getImageForSeverity(statusMessage.getSeverity())); hintText.setText(statusMessage == null ? "" : statusMessage.getMessage()); updateLayout(); } protected void updateLayout() { topControl.getParent().layout(true, true); } public void setStatusMessage(Severity severity, String message) { assertNotNull(message); setStatusMessage(new StatusMessage(severity, message)); } public void setStatusMessage(IStatusMessage statusMessage) { updateWidget(statusMessage); } public static Image getImageForSeverity(Severity severity) { switch (severity) { case INFO: return Dialog.getImage(Dialog.DLG_IMG_MESSAGE_INFO); case WARNING: return Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING); case ERROR: return Dialog.getImage(Dialog.DLG_IMG_MESSAGE_ERROR); } throw assertFail(); } }