/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.start.gui.internal;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.eclipse.core.runtime.IProduct;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.branding.IProductConstants;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.splash.BasicSplashHandler;
import de.rcenvironment.core.start.Application;
/**
* Override splash screen.
*
* @author Sascha Zur
*/
public class SplashHandler extends BasicSplashHandler {
private static final String SPLASHIMAGE = "splash.bmp";
private static final String BUNDLE = "de.rcenvironment.core.start";
private static final String BUNDLE_VERSION = Platform.getBundle(BUNDLE).getHeaders().get("Bundle-Version").toString();
private static final int GRAY = 117;
private static final int WHITE = 255;
private static final int XCOORD = 230;
private static final int YCOORD = 225;
private static String releasename;
@Override
public void init(Shell splash) {
super.init(splash);
/* Load the Release Name from about.mappings of bundle 'de.rcenvironment.core.start' */
Properties properties = new Properties();
InputStream resourceAsStream = Application.class.getResourceAsStream("/about.mappings");
try {
properties.load(resourceAsStream);
releasename = " (" + properties.getProperty("1") + ")";
} catch (IOException e1) {
e1 = null;
}
ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(BUNDLE, SPLASHIMAGE);
Image splashImg = descriptor.createImage();
GC gc = new GC(splashImg);
gc.setFont(new Font(gc.getDevice(), "Arial", 7, SWT.BOLD));
// FIXME: the newly created color object will never be disposed
gc.setForeground(new Color(null, GRAY, GRAY, GRAY));
gc.setBackground(new Color(null, WHITE, WHITE, WHITE));
gc.drawText("Version " + BUNDLE_VERSION.substring(0, BUNDLE_VERSION.lastIndexOf('.')) + releasename, XCOORD, YCOORD);
splash.setBackgroundMode(SWT.INHERIT_FORCE);
splash.setBackgroundImage(splashImg);
splash.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.setFont(new Font(e.gc.getDevice(), "Arial", 8, SWT.BOLD));
e.gc.setForeground(new Color(null, GRAY, GRAY, GRAY));
e.gc.setBackground(new Color(null, WHITE, WHITE, WHITE));
e.gc.drawText("Version " + BUNDLE_VERSION.substring(0, BUNDLE_VERSION.lastIndexOf('.')), XCOORD, YCOORD);
}
});
String progressRectString = null;
IProduct product = Platform.getProduct();
if (product != null) {
progressRectString = product
.getProperty(IProductConstants.STARTUP_PROGRESS_RECT);
}
Rectangle progressRect = StringConverter.asRectangle(
progressRectString, new Rectangle(0, 0, 0, 0));
setProgressRect(progressRect);
getContent(); // ensure creation of the progress
}
}