/*******************************************************************************
* 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 org.eclipse.e4.tm.builder.IBinder;
import org.eclipse.e4.tm.builder.jface.LabeledLabelProvider;
import org.eclipse.e4.tm.util.Labeled;
import org.eclipse.e4.tm.util.UtilPackage;
import org.eclipse.e4.tm.widgets.TreeViewer;
import org.eclipse.e4.tm.widgets.WidgetsPackage;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
public class TreeViewerBinder extends ControlBinder implements IBinder {
protected boolean shouldntHandleFeature(EStructuralFeature feature) {
if (feature == WidgetsPackage.eINSTANCE.getTreeViewer_ViewProvider()) {
return true;
}
return super.shouldntHandleFeature(feature);
}
protected void update(EObject control, EStructuralFeature feature, Object object, boolean isInit) {
if (feature == WidgetsPackage.eINSTANCE.getTreeViewer_ContentProvider() && (! (object instanceof Viewer))) {
update(control, feature, adapt(object, Viewer.class), isInit);
} else {
super.update(control, feature, object, isInit);
}
}
protected void invalidateFeature(EObject eObject, EStructuralFeature feature, Object object, boolean isEvent) {
if (eObject instanceof TreeViewer && feature == UtilPackage.eINSTANCE.getObjectData_DataObject()) {
updateViewerContent((TreeViewer)eObject, context.getObject(eObject, Viewer.class));
}
super.invalidateFeature(eObject, feature, object, isEvent);
}
private void updateViewerContent(TreeViewer treeViewer, Viewer viewer) {
viewer.setInput(treeViewer.getDataObject());
}
protected Object create(EObject control) {
Composite parent = super.getParent(control, Composite.class);
org.eclipse.jface.viewers.TreeViewer viewer = new org.eclipse.jface.viewers.TreeViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
viewer.setLabelProvider(new LabeledLabelProvider((Labeled)((TreeViewer)control).getViewProvider()));
Tree tree = viewer.getTree();
tree.setData(Viewer.class.getName(), viewer);
return tree;
}
}