/*******************************************************************************
* 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:
******************************************************************************/
package org.eclipse.emf.emfstore.client.ui.views.changes;
import java.util.List;
import org.eclipse.emf.emfstore.client.ui.views.scm.SCMContentProvider;
import org.eclipse.emf.emfstore.client.ui.views.scm.SCMLabelProvider;
import org.eclipse.emf.emfstore.common.model.Project;
import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
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
*/
public class TabbedChangesComposite extends Composite implements ChangesComposite {
private TabFolder folder;
private List<ChangePackage> changePackages;
private Composite detailedTabComposite;
private Composite compactTabComposite;
private TreeViewer compactTabTreeViewer;
private TreeViewer detailedTabTreeViewer;
private SCMContentProvider.Compact compactContentProvider;
private SCMContentProvider.Detailed detailedContentProvider;
/**
* 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
*/
public TabbedChangesComposite(Composite parent, int style, List<ChangePackage> changePackages, Project project) {
super(parent, style);
setLayout(new GridLayout());
folder = new TabFolder(this, style);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(folder);
// -----------------------Detailed -----------------------------
detailedTabComposite = new Composite(folder, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(detailedTabComposite);
detailedTabTreeViewer = new TreeViewer(detailedTabComposite, SWT.H_SCROLL | SWT.V_SCROLL);
GridDataFactory.fillDefaults().grab(true, true).applyTo(detailedTabTreeViewer.getControl());
detailedContentProvider = new SCMContentProvider.Detailed(detailedTabTreeViewer);
detailedContentProvider.setShowRootNodes(true);
SCMLabelProvider detailedLabelProvider = new SCMLabelProvider(project);
detailedLabelProvider.setChangePackageVisualizationHelper(new ChangePackageVisualizationHelper(changePackages,
project));
detailedContentProvider.setChangePackageVisualizationHelper(new ChangePackageVisualizationHelper(
changePackages, project));
detailedTabTreeViewer.setContentProvider(detailedContentProvider);
detailedTabTreeViewer.setLabelProvider(detailedLabelProvider);
detailedTabTreeViewer.setInput(changePackages);
detailedTabTreeViewer.expandToLevel(2);
TabItem opTab = new TabItem(folder, style);
opTab.setText("Operations");
opTab.setControl(detailedTabComposite);
// -----------------------Compact -----------------------------
compactTabComposite = new Composite(folder, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(compactTabComposite);
compactTabTreeViewer = new TreeViewer(compactTabComposite, SWT.H_SCROLL | SWT.V_SCROLL);
GridDataFactory.fillDefaults().grab(true, true).applyTo(compactTabTreeViewer.getControl());
compactContentProvider = new SCMContentProvider.Compact(compactTabTreeViewer);
compactContentProvider.setShowRootNodes(true);
SCMLabelProvider compactLabelProvider = new SCMLabelProvider(project);
compactLabelProvider.setChangePackageVisualizationHelper(new ChangePackageVisualizationHelper(changePackages,
project));
compactContentProvider.setChangePackageVisualizationHelper(new ChangePackageVisualizationHelper(changePackages,
project));
compactTabTreeViewer.setContentProvider(compactContentProvider);
compactTabTreeViewer.setLabelProvider(compactLabelProvider);
compactTabTreeViewer.setInput(changePackages);
compactTabTreeViewer.expandToLevel(2);
TabItem meTab = new TabItem(folder, style);
meTab.setText("ModelElements");
meTab.setControl(compactTabComposite);
}
/**
* Sets if the root nodes should be shown.
*
* @param showRootNodes the new value
*/
public void setShowRootNodes(boolean showRootNodes) {
compactContentProvider.setShowRootNodes(showRootNodes);
detailedContentProvider.setShowRootNodes(showRootNodes);
}
/**
* Sets if the root nodes should be reversed.
*
* @see SCMContentProvider#setReverseNodes(boolean)
* @param reverseNodes wheter to reverse the nodes or not
*/
public void setReverseNodes(boolean reverseNodes) {
compactContentProvider.setReverseNodes(reverseNodes);
detailedContentProvider.setReverseNodes(reverseNodes);
}
/**
* {@inheritDoc}
*/
public List<ChangePackage> getChangePackages() {
return changePackages;
}
/**
* {@inheritDoc}
*/
public void setInput(List<ChangePackage> changes) {
this.changePackages = changes;
compactTabTreeViewer.setInput(changes);
detailedTabTreeViewer.setInput(changes);
}
}