Thank you, all committers and contributors, for your work on the Nebula project in 2013. We wish you a Merry Christmas and a Happy New Year.
Here is a little Christmas gift that enables you to display a mini message. Enjoy. [image: Inline image 1] /******************************************************************************* * Copyright (c) 2013 The Eclipse Nebula Project * All rights reserved. This program is made available under the terms * of the Eclipse Public License v1.0 which does not accompany this * distribution but is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Wim Jongman - Initial Impl - http://remainsoftware.com *******************************************************************************/ package nl.remain.td.core.ui; import java.awt.MouseInfo; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Point; 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.Display; import org.eclipse.swt.widgets.Shell; /** * Shows a mini message just above the current mouse pointer. It is for those * cases when you want to supply a quick feedback to the user without going * through the workflow of showing a dialog and letting the user press Ok. * <p/> * Usage: * <p/> * <code> * new MiniMessage(2000).open("Saved!"); * </code> * * @author Wim Jongman * */ public class MiniMessage { private StyledText fStyledText; private Shell fShell; private int fWaitBeforeFade = 0; /** * Constructs a {@link MiniMessage}. * * @param waitBeforeFade * waits n milliseconds before the message starts to fade. Fading * itself takes about a second. */ public MiniMessage(int waitBeforeFade) { this.fWaitBeforeFade = waitBeforeFade; } /** * Main method for testing. * * @param args */ public static void main(String[] args) { MiniMessage miniMessage = new MiniMessage(2000); miniMessage.openWait("Thanks to all Nebula committers and contributors .."); miniMessage.openWait("for all your work in 2013."); miniMessage.openWait("Merry Christmas and a Happy New Year!"); } /** * Opens the {@link MiniMessage} just above the current cursor position * showing the passed text. It does not wait until the message has faded. * * @param text * the text to show as the mini message. * * @see #openWait(String) */ public void openWait(String message) { doOpen(message, true); } /** * Opens the {@link MiniMessage} just above the current cursor position * showing the passed text. It does not wait until the message has faded. * * @param text * the text to show as the mini message. * * @see #openWait(String) */ public void open(String text) { doOpen(text, false); } private void doOpen(String text, boolean wait) { try { Display display = Display.getDefault(); fShell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP | SWT.NO_FOCUS); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 1; gridLayout.marginHeight = 1; gridLayout.verticalSpacing = 0; gridLayout.horizontalSpacing = 0; createContents(fShell, SWT.NONE); setText(text); Control focusControl = display.getFocusControl(); fShell.setLayout(gridLayout); fShell.pack(); fShell.setLocation(new Point(MouseInfo.getPointerInfo().getLocation().x, MouseInfo .getPointerInfo().getLocation().y - fShell.getSize().y)); fShell.open(); fShell.layout(); if (focusControl != null) focusControl.forceFocus(); Thread thread = new Thread(new Fader(fWaitBeforeFade)); thread.run(); while (wait && !fShell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } catch (Exception e) { e.printStackTrace(); } } private void setText(String string) { fStyledText.setText(string); } /** * Create the composite. * * @param parent * @param style */ private void createContents(Composite parent, int style) { parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE)); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = 2; gridLayout.marginHeight = 2; parent.setLayout(gridLayout); fStyledText = new StyledText(parent, SWT.BORDER); fStyledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); fStyledText.setEditable(false); fStyledText.setEnabled(false); } private class Fader implements Runnable { int fAlpha = 255; private int fTimerWait = 10; private int fWaitBeforeFade = 0; public Fader(int waitBeforeFade) { this.fWaitBeforeFade = waitBeforeFade; } public void run() { if (fWaitBeforeFade > 0) { fShell.getDisplay().timerExec(fWaitBeforeFade, this); fWaitBeforeFade = 0; } else if (fAlpha <= 5) { fShell.dispose(); } else { fAlpha -= 5; if (fAlpha < 255) { fShell.setAlpha(fAlpha); } fShell.getDisplay().timerExec(fTimerWait, this); } } }; }
<<image.png>>
_______________________________________________ nebula-dev mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/nebula-dev
