blob: b77869aaf44950124a71ce4b5d2806f1aac9a1fb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.actions;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.core.mapping.ISynchronizationContext;
import org.eclipse.team.core.mapping.ISynchronizationScopeManager;
import org.eclipse.team.core.mapping.provider.SynchronizationContext;
import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
import org.eclipse.team.internal.ccvs.ui.mappings.WorkspaceSubscriberContext;
import org.eclipse.team.internal.ui.SWTUtils;
import org.eclipse.team.internal.ui.dialogs.DetailsDialog;
import org.eclipse.team.ui.synchronize.*;
public class OutgoingChangesDialog extends DetailsDialog {
private final String message;
private ParticipantPagePane pane;
private ModelSynchronizeParticipant participant;
private final String title;
private final String detailsMessage;
private final ISynchronizationScopeManager manager;
private String helpContextId;
public OutgoingChangesDialog(Shell parentShell, ISynchronizationScopeManager manager, String title, String message, String detailsMessage) {
super(parentShell, title);
this.manager = manager;
this.title = title;
this.message = message;
this.detailsMessage = detailsMessage;
}
@Override
protected void createMainDialogArea(Composite parent) {
Composite composite = SWTUtils.createHVFillComposite(parent, SWTUtils.MARGINS_NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
createWrappingLabel(composite, message);
Dialog.applyDialogFont(parent);
}
@Override
protected Label createWrappingLabel(Composite parent, String text) {
Label label = new Label(parent, SWT.LEFT | SWT.WRAP);
label.setText(text);
GridData data = new GridData();
data.horizontalSpan = 1;
data.horizontalAlignment = GridData.FILL;
data.horizontalIndent = 0;
data.grabExcessHorizontalSpace = true;
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
label.setFont(parent.getFont());
return label;
}
@Override
protected Composite createDropDownDialogArea(Composite parent) {
Composite composite = SWTUtils.createHVFillComposite(parent, SWTUtils.MARGINS_DIALOG);
GridData data = new GridData(GridData.FILL_BOTH);
data.heightHint = 200;
data.widthHint = 200;
composite.setLayoutData(data);
composite.addDisposeListener(e -> {
if (pane != null)
pane.dispose();
if (participant != null)
participant.dispose();
});
createWrappingLabel(composite, detailsMessage);
try {
participant = createParticipant();
ISynchronizePageConfiguration configuration = participant.createPageConfiguration();
configuration.setSupportedModes(ISynchronizePageConfiguration.OUTGOING_MODE);
configuration.setMode(ISynchronizePageConfiguration.OUTGOING_MODE);
configuration.setMenuGroups(ISynchronizePageConfiguration.P_TOOLBAR_MENU, new String[] { ISynchronizePageConfiguration.NAVIGATE_GROUP, ISynchronizePageConfiguration.LAYOUT_GROUP });
pane = new ParticipantPagePane(getShell(), true, configuration, participant);
Control control = pane.createPartControl(composite);
control.setLayoutData(SWTUtils.createHVFillGridData());
} catch (InvocationTargetException e) {
CVSUIPlugin.openError(getShell(), null, null, e);
SWTUtils.createLabel(parent, CVSUIMessages.OutgoingChangesDialog_0);
} catch (InterruptedException e) {
SWTUtils.createLabel(parent, CVSUIMessages.OutgoingChangesDialog_1);
}
return composite;
}
private ModelSynchronizeParticipant createParticipant() throws InvocationTargetException, InterruptedException {
SynchronizationContext context = createSynchronizationContext(manager);
ModelSynchronizeParticipant participant = ModelSynchronizeParticipant.createParticipant(context, title);
participant.setMergingEnabled(false);
return participant;
}
private SynchronizationContext createSynchronizationContext(final ISynchronizationScopeManager manager) throws InvocationTargetException, InterruptedException {
final SynchronizationContext[] context = new SynchronizationContext[] { null };
context[0] = WorkspaceSubscriberContext.createContext(manager, ISynchronizationContext.THREE_WAY);
return context[0];
}
@Override
protected boolean isMainGrabVertical() {
return false;
}
@Override
protected void updateEnablements() {
// Can always finish
setPageComplete(true);
}
@Override
protected boolean includeErrorMessage() {
return false;
}
public void setHelpContextId(String helpContextId) {
this.helpContextId = helpContextId;
}
@Override
protected String getHelpContextId() {
return helpContextId;
}
}