/*******************************************************************************
* Copyright (c) 2011, 2015 Wind River Systems, Inc. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.ui.trees;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPart;
/**
* A declarative tree control implementation that extends AbstractTreeControl.
*/
public class TreeControl extends AbstractTreeControl {
// The tree viewer's id.
private String viewerId;
// The extension parser that parse the viewer extension.
private TreeViewerExtension viewerExtension;
// The viewer descriptor parsed from the viewer extensions
private ViewerDescriptor viewerDescriptor;
/**
* Create an instance of TreeControl with a viewerId.
*
* @param viewerId The viewer id.
*/
public TreeControl(String viewerId) {
super();
this.viewerId = viewerId;
initialize();
}
/**
* Create an instance of TreeControl with a viewerId in a workbench part.
*
* @param viewerId The viewer id.
* @param parentPart the workbench part in which the tree control is created.
*/
public TreeControl(String viewerId, IWorkbenchPart parentPart) {
super(parentPart);
this.viewerId = viewerId;
initialize();
}
/**
* Parse and initialize the tree control.
*/
private void initialize() {
viewerExtension = new TreeViewerExtension(viewerId);
viewerDescriptor = viewerExtension.parseViewer();
Assert.isNotNull(viewerExtension);
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#doCreateTreeViewer(org.eclipse.swt.widgets.Composite)
*/
@Override
protected TreeViewer doCreateTreeViewer(Composite parent) {
Assert.isNotNull(parent);
IConfigurationElement configuration = viewerDescriptor.getStyleConfig();
if(configuration != null) {
int style = viewerExtension.parseStyle(configuration);
if(style != -1)
return new TreeViewer(parent, style);
}
return super.doCreateTreeViewer(parent);
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#configureTreeViewer(org.eclipse.jface.viewers.TreeViewer)
*/
@Override
protected void doConfigureTreeViewer(TreeViewer viewer) {
super.doConfigureTreeViewer(viewer);
IConfigurationElement configuration = viewerDescriptor.getDragConfig();
if(configuration != null) {
int operations = viewerExtension.parseDnd(configuration);
Transfer[] transferTypes = viewerExtension.parseTransferTypes(configuration);
DragSourceListener listener = viewerExtension.parseDragSourceListener(viewer, configuration);
viewer.addDragSupport(operations, transferTypes, listener);
}
configuration = viewerDescriptor.getDropConfig();
if(configuration != null) {
int operations = viewerExtension.parseDnd(configuration);
Transfer[] transferTypes = viewerExtension.parseTransferTypes(configuration);
DropTargetListener adapter = viewerExtension.parseDropTargetListener(viewer, configuration);
viewer.addDropSupport(operations, transferTypes, adapter);
}
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#getViewerId()
*/
@Override
protected String getViewerId() {
return viewerId;
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#doCreateTreeViewerContentProvider(org.eclipse.jface.viewers.TreeViewer)
*/
@Override
protected ITreeContentProvider doCreateTreeViewerContentProvider(TreeViewer viewer) {
return viewerDescriptor.getContentProvider();
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#doCreateTreeViewerSelectionChangedListener(org.eclipse.jface.viewers.TreeViewer)
*/
@Override
protected ISelectionChangedListener doCreateTreeViewerSelectionChangedListener(TreeViewer viewer) {
return null;
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#isStatePersistent()
*/
@Override
protected boolean isStatePersistent() {
return viewerDescriptor.isPersistent();
}
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#getAutoExpandLevel()
*/
@Override
protected int getAutoExpandLevel() {
return viewerDescriptor.getAutoExpandLevel();
}
@Override
protected boolean useLabelDecorator() {
return viewerDescriptor.getUseLabelDecorator();
}
}