blob: f4d10a76aad7e755aad16e979d0e6244541d1277 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ui.synchronize;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
import org.eclipse.ui.forms.HyperlinkGroup;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.PageBook;
/**
* Section shown in a participant page to show the changes for this participant. This
* includes a diff viewer for browsing the changes.
*
* @since 3.2
*/
public class ChangesSection extends Composite {
private AbstractSynchronizePage page;
private ISynchronizePageConfiguration configuration;
private FormToolkit forms;
/**
* Page book either shows the diff tree viewer if there are changes or
* shows a message to the user if there are no changes that would be
* shown in the tree.
*/
private PageBook changesSectionContainer;
/**
* Diff tree viewer that shows synchronization changes. This is created
* by the participant.
*/
private Viewer changesViewer;
/**
* Create a changes section on the following page.
*
* @param parent the parent control
* @param page the page showing this section
*/
public ChangesSection(Composite parent, AbstractSynchronizePage page, ISynchronizePageConfiguration configuration) {
super(parent, SWT.NONE);
this.page = page;
this.configuration = configuration;
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
data.grabExcessVerticalSpace = true;
setLayoutData(data);
forms = new FormToolkit(parent.getDisplay());
forms.setBackground(getBackgroundColor());
HyperlinkGroup group = forms.getHyperlinkGroup();
group.setBackground(getBackgroundColor());
changesSectionContainer = new PageBook(this, SWT.NONE);
data = new GridData(GridData.FILL_BOTH);
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
changesSectionContainer.setLayoutData(data);
}
protected Color getBackgroundColor() {
return getShell().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
}
public PageBook getContainer() {
return changesSectionContainer;
}
protected ISynchronizePageConfiguration getConfiguration() {
return configuration;
}
protected FormToolkit getForms() {
return forms;
}
protected AbstractSynchronizePage getPage() {
return page;
}
/* (non-Javadoc)
* @see org.eclipse.swt.widgets.Widget#dispose()
*/
public void dispose() {
super.dispose();
forms.dispose();
}
public void setViewer(Viewer viewer) {
this.changesViewer = viewer;
initializeChangesViewer();
}
protected void initializeChangesViewer() {
TeamUIPlugin.getStandardDisplay().asyncExec(new Runnable() {
public void run() {
Control control = ChangesSection.this.getChangesViewer().getControl();
if (!getContainer().isDisposed() && !control.isDisposed()) {
getContainer().showPage(control);
}
}
});
}
public Viewer getChangesViewer() {
return changesViewer;
}
protected boolean isThreeWay() {
return ISynchronizePageConfiguration.THREE_WAY.equals(getConfiguration().getComparisonType());
}
}