/*******************************************************************************
* Copyright (c) 2008 Hallvard Traetteberg.
* 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:
* Hallvard Traetteberg - initial API and implementation
******************************************************************************/
package org.eclipse.e4.tm.builder.swt;
import java.util.StringTokenizer;
import org.eclipse.e4.tm.builder.AbstractBuilder;
import org.eclipse.e4.tm.stringconverter.StringConversion;
import org.eclipse.e4.tm.stringconverters.ClassStringConverter;
import org.eclipse.e4.tm.stringconverters.StaticFieldsStringConverter;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Widget;
public class SwtBuilder extends AbstractBuilder {
public SwtBuilder() {
super();
StringConversion stringConverter = getStringConverter();
ClassStringConverter classParser = new ClassStringConverter();
stringConverter.registerStringConverter(Class.class, classParser);
getClassResolver().importPackage("org.eclipse.swt.widgets");
getClassResolver().importPackage("org.eclipse.swt.layout");
}
public final static String separators = " ;:,+|";
public static StringTokenizer getSeparatedTokens(String s) {
return new StringTokenizer(s != null ? s : "", SwtBuilder.separators);
}
public <T> T adapt(Object value, Class<T> c) {
if (c == Display.class || c == Device.class) {
if (value instanceof Widget) {
return (T)((Widget)value).getDisplay();
} else if (value == null) {
Display display = Display.getCurrent();
if (display == null) {
display = Display.getDefault();
}
return (T)display;
}
// } else if (c == Color.class && value instanceof RGB) {
// return (T)new Color(getRootObject(org.eclipse.swt.widgets.Control.class).getDisplay(),(RGB)value);
}
return super.adapt(value, c);
}
public static <T> T getStaticField(Class<?> constantsClass, String name, Class<T> valueClass, T def) {
return StaticFieldsStringConverter.convert(constantsClass, valueClass, null, name, def);
}
public static String getAnnotationUri() {
return "http://www.eclipse.org/e4/swt.ecore";
}
public void build(Resource res, Object context) {
if (context instanceof Composite) {
super.build(res, context);
((Composite)context).layout();
}
}
}