/******************************************************************************* | |
* Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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: | |
* Soyatec - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.xwt.jface; | |
import java.net.URL; | |
import java.util.HashMap; | |
import org.eclipse.jface.dialogs.Dialog; | |
import org.eclipse.jface.layout.GridLayoutFactory; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Control; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.xwt.XWT; | |
import org.eclipse.xwt.XWTException; | |
import org.eclipse.xwt.XWTLoader; | |
public abstract class AbstractDialog extends Dialog { | |
protected Object dataContext; | |
protected String title; | |
public AbstractDialog(Shell parentShell, String title, Object dataContext) { | |
super(parentShell); | |
this.dataContext = dataContext; | |
this.title = title; | |
} | |
@Override | |
protected Control createDialogArea(Composite parent) { | |
if (title != null) { | |
getShell().setText(title); | |
} | |
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | |
try { | |
Thread.currentThread().setContextClassLoader(getClassLoader()); | |
HashMap<String, Object> newOptions = new HashMap<String, Object>(); | |
initOptions(parent, newOptions); | |
Object element = XWT.loadWithOptions(getContentURL(), newOptions); | |
if (!(element instanceof Control)) { | |
throw new XWTException("Root element must a control."); | |
} | |
GridLayoutFactory.fillDefaults().generateLayout(parent); | |
parent.layout(true, true); | |
return (Control) element; | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} finally { | |
Thread.currentThread().setContextClassLoader(classLoader); | |
parent.setVisible(true); | |
} | |
return null; | |
} | |
protected void initOptions(Composite parent, | |
HashMap<String, Object> newOptions) { | |
newOptions.put(XWTLoader.CONTAINER_PROPERTY, parent); | |
newOptions.put(XWTLoader.DATACONTEXT_PROPERTY, dataContext); | |
newOptions.put(XWTLoader.CLASS_PROPERTY, geCLR()); | |
} | |
protected abstract URL getContentURL(); | |
protected ClassLoader getClassLoader() { | |
return this.getClass().getClassLoader(); | |
} | |
protected Object geCLR() { | |
return this; | |
} | |
} |