-/*******************************************************************************\r
- * Copyright (c) 2007, 2012 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.browsing.ui.swt;\r
-\r
-import java.util.Collections;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.dialogs.Dialog;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.jface.viewers.ISelectionProvider;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DragSource;\r
-import org.eclipse.swt.dnd.DragSourceListener;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.IMemento;\r
-import org.eclipse.ui.ISelectionListener;\r
-import org.simantics.Simantics;\r
-import org.simantics.browsing.ui.BuiltinKeys;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.browsing.ui.NodeContext;\r
-import org.simantics.browsing.ui.common.ColumnKeys;\r
-import org.simantics.browsing.ui.common.node.IDropTargetNode;\r
-import org.simantics.browsing.ui.graph.impl.GraphInputSources;\r
-import org.simantics.browsing.ui.graph.impl.SessionContextInputSource;\r
-import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
-import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;\r
-import org.simantics.db.management.ISessionContext;\r
-import org.simantics.project.ProjectKeys;\r
-import org.simantics.ui.dnd.LocalObjectTransfer;\r
-import org.simantics.ui.dnd.LocalSelectionDragSourceListener;\r
-import org.simantics.ui.dnd.NoImageDragSourceEffect;\r
-import org.simantics.utils.ObjectUtils;\r
-import org.simantics.utils.datastructures.Function;\r
-import org.simantics.utils.datastructures.disposable.DisposeState;\r
-import org.simantics.utils.datastructures.hints.HintContext;\r
-import org.simantics.utils.datastructures.hints.HintListenerAdapter;\r
-import org.simantics.utils.datastructures.hints.HintTracker;\r
-import org.simantics.utils.datastructures.hints.IHintContext;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-import org.simantics.utils.datastructures.hints.IHintListener;\r
-import org.simantics.utils.datastructures.hints.IHintObservable;\r
-import org.simantics.utils.datastructures.hints.IHintTracker;\r
-\r
-public abstract class SimanticsDialog extends Dialog {\r
-\r
- private final WidgetSupportImpl widgetSupport = new WidgetSupportImpl();\r
-\r
- protected IHintContext factoryHints = new HintContext();\r
-\r
- protected LocalResourceManager resourceManager;\r
-\r
- protected ISelectionListener workbenchSelectionListener;\r
-\r
- protected Composite parent;\r
-\r
- private Map<String, String> args;\r
-\r
-// private ISessionContextProvider contextProvider;\r
-\r
- private ISessionContext sessionContext;\r
-\r
- protected IMemento memento;\r
-\r
- //private IHintTracker sessionContextTracker = new SessionContextProjectTracker();\r
-\r
- private SessionContextInputSource inputSource = GraphInputSources.projectSource();\r
-\r
- private DisposeState disposeState = DisposeState.Alive;\r
- \r
- private final String title;\r
-\r
-// protected ISessionContextChangedListener contextChangeListener = new ISessionContextChangedListener() {\r
-// @Override\r
-// public void sessionContextChanged(SessionContextChangedEvent event) {\r
-// sessionContext = event.getNewValue();\r
-// sessionContextTracker.track(sessionContext);\r
-// }\r
-// };\r
-\r
- abstract protected void createControls(Composite body, ISessionContext context, WidgetSupport support);\r
-\r
- public SimanticsDialog(Shell shell, String title) {\r
- super(shell);\r
- this.title = title;\r
- }\r
-\r
- @Override\r
- protected void configureShell(Shell shell) {\r
- super.configureShell(shell);\r
- if (title != null) {\r
- shell.setText(title);\r
- }\r
- }\r
- \r
- protected Transfer[] getAcceptedDataTypes() {\r
- return new Transfer[] { LocalObjectTransfer.getTransfer() };\r
- }\r
-\r
- protected void handleDrop(Object data, NodeContext target) {\r
- if (target != null) {\r
- Object input = target.getConstant(BuiltinKeys.INPUT);\r
- //System.out.println("DROPPED " + data + " ON " + target);\r
- if (input instanceof IDropTargetNode)\r
- ((IDropTargetNode) input).drop(data);\r
- }\r
- }\r
-\r
- protected Object createDragSource(GraphExplorer explorer) {\r
- ISelectionProvider selectionProvider = (ISelectionProvider) explorer.getAdapter(ISelectionProvider.class);\r
-\r
- DragSourceListener listener = new LocalSelectionDragSourceListener(selectionProvider);\r
-\r
- Control control = explorer.getControl();\r
- DragSource source = new DragSource(control, DND.DROP_LINK | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);\r
- source.setTransfer(new Transfer[] {LocalObjectTransfer.getTransfer()});\r
- source.addDragListener(listener);\r
- source.setDragSourceEffect(new NoImageDragSourceEffect(control));\r
-\r
- return listener;\r
- }\r
-\r
- /**\r
- * @return the set of <code>org.eclipse.ui.context</code> contexts to\r
- * activate for this view site\r
- */\r
- protected Set<String> getUiContexts() {\r
- return Collections.emptySet();\r
- }\r
-\r
- /**\r
- * The default hint tracker that will be active if\r
- * {@link SimanticsViewBase#setSessionContextTracker(IHintTracker) is\r
- * not called.\r
- */\r
- public class SessionContextProjectTracker extends HintTracker {\r
- public SessionContextProjectTracker() {\r
- IHintListener activeProjectListener = new HintListenerAdapter() {\r
- @Override\r
- public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {\r
- applySessionContext(getSessionContext());\r
- }\r
- };\r
- addKeyHintListener(ProjectKeys.KEY_PROJECT, activeProjectListener);\r
- }\r
- }\r
-\r
-// protected void setSessionContextTracker(IHintTracker tracker) {\r
-// this.sessionContextTracker = tracker;\r
-// }\r
-\r
- protected void setInputSource(SessionContextInputSource source) {\r
- this.inputSource = source;\r
- }\r
-\r
- protected SessionContextInputSource getInputSource() {\r
- return inputSource;\r
- }\r
-\r
- protected Map<String, String> getViewArguments() {\r
- return args;\r
- }\r
-\r
- protected DisposeState getDisposeState() {\r
- return disposeState;\r
- }\r
-\r
- public ISessionContext getSessionContext() {\r
- return Simantics.getSessionContext();\r
- }\r
-\r
-// public ISessionContextProvider getSessionContextProvider() {\r
-// return contextProvider;\r
-// }\r
-\r
- protected final void attachToSession() {\r
- // Track active ISessionContext changes\r
- //contextProvider = SimanticsUI.getSessionContextProvider(getViewSite().getWorkbenchWindow());\r
-// contextProvider.addContextChangedListener(contextChangeListener);\r
-\r
- // Start tracking the current session context for input changes.\r
- // This will/must cause applySessionContext to get called.\r
- // Doing the applySessionContext initialization this way\r
- // instead of directly calling it will also make sure that\r
- // applySessionContext is only called once when first initialized,\r
- // and not twice like with the direct invocation.\r
- this.sessionContext = getSessionContext();\r
- applySessionContext(this.sessionContext);\r
-// sessionContextTracker.track(sessionContext);\r
- }\r
-\r
- // /////////////////////////////////////////////////////////////////////////\r
- // Override / implement these:\r
-\r
- /**\r
- * Override this method and provide a proper context menu initializer if you\r
- * want to have this base class initialize one for you.\r
- * \r
- * @return the initializer to be used by {@link #createControls(Composite)}\r
- */\r
- protected IContextMenuInitializer getContextMenuInitializer() {\r
- String contextMenuId = getContextMenuId();\r
- if(contextMenuId != null) {\r
- return new ContextMenuInitializer(contextMenuId);\r
- } else {\r
- return null;\r
- }\r
- }\r
-\r
- protected String getContextMenuId() {\r
- return null;\r
- }\r
-\r
- protected int getStyle() {\r
- return SWT.NONE;\r
- }\r
- \r
- /**\r
- * @param parent\r
- * @return\r
- */\r
- protected GraphExplorer createExplorerControl(Composite parent) {\r
- return GraphExplorerFactory.getInstance()\r
- .selectionDataResolver(new DefaultSelectionDataResolver())\r
- .create(parent, getStyle());\r
- }\r
-\r
- /**\r
- * Override to customize the addition of listeners a newly created\r
- * GraphExplorer.\r
- * \r
- * @param explorer\r
- */\r
- protected void addListeners(GraphExplorer explorer, IMenuManager menuManager) {\r
- addSelectionInputListeners(explorer, menuManager);\r
- }\r
-\r
- protected void addSelectionInputListeners(GraphExplorer explorer, IMenuManager menuManager) {\r
- // Consider ENTER presses to simulate mouse left button double clicks\r
- explorer.addListener(new DefaultKeyListener(Simantics.getSessionContextProvider(), explorer, new Function<String[]>() {\r
- @Override\r
- public String[] execute(Object... obj) {\r
- return new String[] { getEditingColumn((NodeContext) obj[0]) };\r
- }\r
- }));\r
- // Default double click handling\r
- explorer.addListener(new DefaultMouseListener(explorer));\r
- }\r
-\r
- protected String getEditingColumn(NodeContext context) {\r
- return ColumnKeys.SINGLE;\r
- }\r
-\r
- // Needed for preventing unnecessary re-initialization of the explorer with the same input.\r
- private Object currentInput;\r
-\r
- protected boolean isImportantInput(Object previousInput, Object input) {\r
- return !ObjectUtils.objectEquals(previousInput, input);\r
- }\r
-\r
- /**\r
- * Invoke this to reinitialize the explorer and reset its input. The input\r
- * will be resolved from the specified ISessionContext based on the\r
- * {@link SessionContextInputSource} that is currently in use. If the input\r
- * is identical to the previous input, nothing will be done.\r
- * \r
- * @param context\r
- */\r
- protected final boolean applySessionContext(ISessionContext context) {\r
- \r
- // If control is not alive anymore, do nothing.\r
-// System.out.println(this + ": applySessionContext(" + context + "), explorer=" + explorer);\r
- if (disposeState != DisposeState.Alive)\r
- return false;\r
-\r
- this.sessionContext = context;\r
- Object input = getInputSource().get(context);\r
-// System.out.println("SimanticsView applySessionContext: " + input);\r
- if (!isImportantInput(currentInput, input))\r
- return false;\r
-\r
-// System.out.println(this + ": initializeExplorer(" + explorer + ", " + context + ")");\r
-// initializeExplorer(explorer, context);\r
-// System.out.println(this + ": setRoot(" + input + ")");\r
-// explorer.setRoot(input);\r
-\r
- currentInput = input;\r
-// System.out.println("SimanticsView new input: " + currentInput);\r
-\r
- widgetSupport.fireInput(context, input);\r
-\r
- // Start tracking the session context.\r
- //\r
- // If this is not the same session that is currently tracked, it will\r
- // cause IHintListeners of the sessionContextTracker to fire.\r
- // For this we need the above input equality (identity) checking.\r
- // This is here just to make sure that we are tracking the correct\r
- // session context.\r
- //sessionContextTracker.track(sessionContext);\r
- applySessionContext(context);\r
-\r
- return true;\r
- }\r
-\r
- protected Control createDialogArea(Composite parent) {\r
-// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GREEN));\r
- this.parent = parent;\r
- Composite composite = (Composite)super.createDialogArea(parent);\r
-// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));\r
- createControls(composite, sessionContext, widgetSupport);\r
- attachToSession();\r
- return composite;\r
- }\r
- \r
- @Override\r
- protected Control createContents(Composite parent) {\r
-// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));\r
- return super.createContents(parent);\r
- }\r
- \r
- protected Object getSelection() {\r
- return null;\r
- }\r
- \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.browsing.ui.swt;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISelectionListener;
+import org.simantics.Simantics;
+import org.simantics.browsing.ui.BuiltinKeys;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.browsing.ui.NodeContext;
+import org.simantics.browsing.ui.common.ColumnKeys;
+import org.simantics.browsing.ui.common.node.IDropTargetNode;
+import org.simantics.browsing.ui.graph.impl.GraphInputSources;
+import org.simantics.browsing.ui.graph.impl.SessionContextInputSource;
+import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;
+import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;
+import org.simantics.db.management.ISessionContext;
+import org.simantics.project.ProjectKeys;
+import org.simantics.ui.dnd.LocalObjectTransfer;
+import org.simantics.ui.dnd.LocalSelectionDragSourceListener;
+import org.simantics.ui.dnd.NoImageDragSourceEffect;
+import org.simantics.utils.ObjectUtils;
+import org.simantics.utils.datastructures.Function;
+import org.simantics.utils.datastructures.disposable.DisposeState;
+import org.simantics.utils.datastructures.hints.HintContext;
+import org.simantics.utils.datastructures.hints.HintListenerAdapter;
+import org.simantics.utils.datastructures.hints.HintTracker;
+import org.simantics.utils.datastructures.hints.IHintContext;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.simantics.utils.datastructures.hints.IHintListener;
+import org.simantics.utils.datastructures.hints.IHintObservable;
+import org.simantics.utils.datastructures.hints.IHintTracker;
+
+public abstract class SimanticsDialog extends Dialog {
+
+ private final WidgetSupportImpl widgetSupport = new WidgetSupportImpl();
+
+ protected IHintContext factoryHints = new HintContext();
+
+ protected LocalResourceManager resourceManager;
+
+ protected ISelectionListener workbenchSelectionListener;
+
+ protected Composite parent;
+
+ private Map<String, String> args;
+
+// private ISessionContextProvider contextProvider;
+
+ private ISessionContext sessionContext;
+
+ protected IMemento memento;
+
+ //private IHintTracker sessionContextTracker = new SessionContextProjectTracker();
+
+ private SessionContextInputSource inputSource = GraphInputSources.projectSource();
+
+ private DisposeState disposeState = DisposeState.Alive;
+
+ private final String title;
+
+// protected ISessionContextChangedListener contextChangeListener = new ISessionContextChangedListener() {
+// @Override
+// public void sessionContextChanged(SessionContextChangedEvent event) {
+// sessionContext = event.getNewValue();
+// sessionContextTracker.track(sessionContext);
+// }
+// };
+
+ abstract protected void createControls(Composite body, ISessionContext context, WidgetSupport support);
+
+ public SimanticsDialog(Shell shell, String title) {
+ super(shell);
+ this.title = title;
+ }
+
+ @Override
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ if (title != null) {
+ shell.setText(title);
+ }
+ }
+
+ protected Transfer[] getAcceptedDataTypes() {
+ return new Transfer[] { LocalObjectTransfer.getTransfer() };
+ }
+
+ protected void handleDrop(Object data, NodeContext target) {
+ if (target != null) {
+ Object input = target.getConstant(BuiltinKeys.INPUT);
+ //System.out.println("DROPPED " + data + " ON " + target);
+ if (input instanceof IDropTargetNode)
+ ((IDropTargetNode) input).drop(data);
+ }
+ }
+
+ protected Object createDragSource(GraphExplorer explorer) {
+ ISelectionProvider selectionProvider = (ISelectionProvider) explorer.getAdapter(ISelectionProvider.class);
+
+ DragSourceListener listener = new LocalSelectionDragSourceListener(selectionProvider);
+
+ Control control = explorer.getControl();
+ DragSource source = new DragSource(control, DND.DROP_LINK | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
+ source.setTransfer(new Transfer[] {LocalObjectTransfer.getTransfer()});
+ source.addDragListener(listener);
+ source.setDragSourceEffect(new NoImageDragSourceEffect(control));
+
+ return listener;
+ }
+
+ /**
+ * @return the set of <code>org.eclipse.ui.context</code> contexts to
+ * activate for this view site
+ */
+ protected Set<String> getUiContexts() {
+ return Collections.emptySet();
+ }
+
+ /**
+ * The default hint tracker that will be active if
+ * {@link SimanticsViewBase#setSessionContextTracker(IHintTracker) is
+ * not called.
+ */
+ public class SessionContextProjectTracker extends HintTracker {
+ public SessionContextProjectTracker() {
+ IHintListener activeProjectListener = new HintListenerAdapter() {
+ @Override
+ public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+ applySessionContext(getSessionContext());
+ }
+ };
+ addKeyHintListener(ProjectKeys.KEY_PROJECT, activeProjectListener);
+ }
+ }
+
+// protected void setSessionContextTracker(IHintTracker tracker) {
+// this.sessionContextTracker = tracker;
+// }
+
+ protected void setInputSource(SessionContextInputSource source) {
+ this.inputSource = source;
+ }
+
+ protected SessionContextInputSource getInputSource() {
+ return inputSource;
+ }
+
+ protected Map<String, String> getViewArguments() {
+ return args;
+ }
+
+ protected DisposeState getDisposeState() {
+ return disposeState;
+ }
+
+ public ISessionContext getSessionContext() {
+ return Simantics.getSessionContext();
+ }
+
+// public ISessionContextProvider getSessionContextProvider() {
+// return contextProvider;
+// }
+
+ protected final void attachToSession() {
+ // Track active ISessionContext changes
+ //contextProvider = SimanticsUI.getSessionContextProvider(getViewSite().getWorkbenchWindow());
+// contextProvider.addContextChangedListener(contextChangeListener);
+
+ // Start tracking the current session context for input changes.
+ // This will/must cause applySessionContext to get called.
+ // Doing the applySessionContext initialization this way
+ // instead of directly calling it will also make sure that
+ // applySessionContext is only called once when first initialized,
+ // and not twice like with the direct invocation.
+ this.sessionContext = getSessionContext();
+ applySessionContext(this.sessionContext);
+// sessionContextTracker.track(sessionContext);
+ }
+
+ // /////////////////////////////////////////////////////////////////////////
+ // Override / implement these:
+
+ /**
+ * Override this method and provide a proper context menu initializer if you
+ * want to have this base class initialize one for you.
+ *
+ * @return the initializer to be used by {@link #createControls(Composite)}
+ */
+ protected IContextMenuInitializer getContextMenuInitializer() {
+ String contextMenuId = getContextMenuId();
+ if(contextMenuId != null) {
+ return new ContextMenuInitializer(contextMenuId);
+ } else {
+ return null;
+ }
+ }
+
+ protected String getContextMenuId() {
+ return null;
+ }
+
+ protected int getStyle() {
+ return SWT.NONE;
+ }
+
+ /**
+ * @param parent
+ * @return
+ */
+ protected GraphExplorer createExplorerControl(Composite parent) {
+ return GraphExplorerFactory.getInstance()
+ .selectionDataResolver(new DefaultSelectionDataResolver())
+ .create(parent, getStyle());
+ }
+
+ /**
+ * Override to customize the addition of listeners a newly created
+ * GraphExplorer.
+ *
+ * @param explorer
+ */
+ protected void addListeners(GraphExplorer explorer, IMenuManager menuManager) {
+ addSelectionInputListeners(explorer, menuManager);
+ }
+
+ protected void addSelectionInputListeners(GraphExplorer explorer, IMenuManager menuManager) {
+ // Consider ENTER presses to simulate mouse left button double clicks
+ explorer.addListener(new DefaultKeyListener(Simantics.getSessionContextProvider(), explorer, new Function<String[]>() {
+ @Override
+ public String[] execute(Object... obj) {
+ return new String[] { getEditingColumn((NodeContext) obj[0]) };
+ }
+ }));
+ // Default double click handling
+ explorer.addListener(new DefaultMouseListener(explorer));
+ }
+
+ protected String getEditingColumn(NodeContext context) {
+ return ColumnKeys.SINGLE;
+ }
+
+ // Needed for preventing unnecessary re-initialization of the explorer with the same input.
+ private Object currentInput;
+
+ protected boolean isImportantInput(Object previousInput, Object input) {
+ return !ObjectUtils.objectEquals(previousInput, input);
+ }
+
+ /**
+ * Invoke this to reinitialize the explorer and reset its input. The input
+ * will be resolved from the specified ISessionContext based on the
+ * {@link SessionContextInputSource} that is currently in use. If the input
+ * is identical to the previous input, nothing will be done.
+ *
+ * @param context
+ */
+ protected final boolean applySessionContext(ISessionContext context) {
+
+ // If control is not alive anymore, do nothing.
+// System.out.println(this + ": applySessionContext(" + context + "), explorer=" + explorer);
+ if (disposeState != DisposeState.Alive)
+ return false;
+
+ this.sessionContext = context;
+ Object input = getInputSource().get(context);
+// System.out.println("SimanticsView applySessionContext: " + input);
+ if (!isImportantInput(currentInput, input))
+ return false;
+
+// System.out.println(this + ": initializeExplorer(" + explorer + ", " + context + ")");
+// initializeExplorer(explorer, context);
+// System.out.println(this + ": setRoot(" + input + ")");
+// explorer.setRoot(input);
+
+ currentInput = input;
+// System.out.println("SimanticsView new input: " + currentInput);
+
+ widgetSupport.fireInput(context, input);
+
+ // Start tracking the session context.
+ //
+ // If this is not the same session that is currently tracked, it will
+ // cause IHintListeners of the sessionContextTracker to fire.
+ // For this we need the above input equality (identity) checking.
+ // This is here just to make sure that we are tracking the correct
+ // session context.
+ //sessionContextTracker.track(sessionContext);
+ applySessionContext(context);
+
+ return true;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GREEN));
+ this.parent = parent;
+ Composite composite = (Composite)super.createDialogArea(parent);
+// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
+ createControls(composite, sessionContext, widgetSupport);
+ attachToSession();
+ return composite;
+ }
+
+ @Override
+ protected Control createContents(Composite parent) {
+// parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));
+ return super.createContents(parent);
+ }
+
+ protected Object getSelection() {
+ return null;
+ }
+
+}