blob: b5ca1263e06049d2fda2351b9c28a6115afcb437 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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:
* Aleksander Shterev, Edgar Mueller - initial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.internal.client.ui.views.changes;
import java.util.List;
import org.eclipse.emf.emfstore.internal.client.ui.views.scm.SCMContentProvider;
import org.eclipse.emf.emfstore.internal.client.ui.views.scm.SCMLabelProvider;
import org.eclipse.emf.emfstore.internal.common.model.ModelElementIdToEObjectMapping;
import org.eclipse.emf.emfstore.internal.common.model.Project;
import org.eclipse.emf.emfstore.internal.server.model.versioning.AbstractChangePackage;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
/**
* A composite that contains multiple tabs displaying the operation from a
* different view - e.g. grouped by model element, or ungrouped.
*
* @author Shterev
* @author emueller
*/
public class TabbedChangesComposite extends Composite {
private TabFolder folder;
private Composite tabComposite;
private TreeViewer tabTreeViewer;
private SCMContentProvider contentProvider;
private SCMLabelProvider labelProvider;
/**
* Default constructor.
*
* @param parent
* the composite's parent
* @param style
* the style
* @param changePackages
* the input of change packages as a list
* @param project
* the project
* @param idToEObjectMapping
* a mapping from IDs to EObjects that is necessary to resolve
* deleted EObjects contained in change packages
* @param showRootNodes
* whether to show root nodes
*/
public TabbedChangesComposite(Composite parent, int style, List<AbstractChangePackage> changePackages,
Project project,
ModelElementIdToEObjectMapping idToEObjectMapping, boolean showRootNodes) {
super(parent, style);
createComposite(style, project, idToEObjectMapping, showRootNodes);
tabTreeViewer.setInput(changePackages);
}
/**
* Default constructor.
*
* @param parent
* the composite's parent
* @param style
* the style
* @param project
* the project
* @param operations
* the input of operations as a list
* @param idToEObjectMapping
* a mapping from IDs to EObjects that is necessary to resolve
* deleted EObjects contained in operations
* @param showRootNodes
* whether to show root nodes
*/
public TabbedChangesComposite(Composite parent, int style, Project project, List<AbstractOperation> operations,
ModelElementIdToEObjectMapping idToEObjectMapping, boolean showRootNodes) {
super(parent, style);
createComposite(style, project, idToEObjectMapping, showRootNodes);
tabTreeViewer.setInput(operations);
}
private void createComposite(int style,
Project project,
ModelElementIdToEObjectMapping idToEObjectMapping,
boolean showRootNodes) {
setLayout(new GridLayout());
folder = new TabFolder(this, style);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL)
.grab(true, true).applyTo(folder);
tabComposite = new Composite(folder, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(tabComposite);
tabTreeViewer = new TreeViewer(tabComposite, SWT.H_SCROLL
| SWT.V_SCROLL);
GridDataFactory.fillDefaults().grab(true, true)
.applyTo(tabTreeViewer.getControl());
contentProvider = new SCMContentProvider(idToEObjectMapping);
contentProvider.setShowRootNodes(showRootNodes);
labelProvider = new SCMLabelProvider(project);
labelProvider.setChangePackageVisualizationHelper(
new ChangePackageVisualizationHelper(idToEObjectMapping));
tabTreeViewer.setContentProvider(contentProvider);
tabTreeViewer.setLabelProvider(labelProvider);
tabTreeViewer.expandToLevel(1);
final TabItem opTab = new TabItem(folder, style);
opTab.setText(Messages.TabbedChangesComposite_OperationsText);
opTab.setControl(tabComposite);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.swt.widgets.Widget#dispose()
*/
@Override
public void dispose() {
contentProvider.dispose();
labelProvider.dispose();
}
}