in org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushBranchPage.java [169:375]
public void createControl(Composite parent) {
parent.addDisposeListener(event -> {
for (CancelableFuture<Collection<Ref>> l : refs.values()) {
l.cancel(CancelableFuture.CancelMode.INTERRUPT);
}
refs.clear();
});
try {
this.remoteConfigs = RemoteConfig.getAllRemoteConfigs(repository.getConfig());
Collections.sort(remoteConfigs, Comparator.comparing(
RemoteConfig::getName, String.CASE_INSENSITIVE_ORDER));
} catch (URISyntaxException e) {
this.remoteConfigs = new ArrayList<>();
handleError(e);
}
Composite main = new Composite(parent, SWT.NONE);
main.setLayout(GridLayoutFactory.swtDefaults().create());
Composite inputPanel = new Composite(main, SWT.NONE);
GridDataFactory.fillDefaults().grab(true, false).applyTo(inputPanel);
GridLayoutFactory.fillDefaults().numColumns(1).applyTo(inputPanel);
Label sourceLabel = new Label(inputPanel, SWT.NONE);
sourceLabel.setText(UIText.PushBranchPage_Source);
Composite sourceComposite = new Composite(inputPanel, SWT.NONE);
sourceComposite.setLayoutData(GridDataFactory.fillDefaults()
.indent(UIUtils.getControlIndent(), 0).create());
RowLayout rowLayout = RowLayoutFactory.fillDefaults().create();
rowLayout.center = true;
sourceComposite.setLayout(rowLayout);
if (this.ref != null) {
Image branchIcon = UIIcons.BRANCH.createImage();
this.disposables.add(branchIcon);
Label branchIconLabel = new Label(sourceComposite, SWT.NONE);
branchIconLabel
.setLayoutData(new RowData(branchIcon.getBounds().width,
branchIcon.getBounds().height));
branchIconLabel.setImage(branchIcon);
Label localBranchLabel = new Label(sourceComposite, SWT.NONE);
localBranchLabel.setText(Repository.shortenRefName(this.ref
.getName()));
Label spacer = new Label(sourceComposite, SWT.NONE);
spacer.setLayoutData(new RowData(3, SWT.DEFAULT));
}
Image commitIcon = UIIcons.CHANGESET.createImage();
this.disposables.add(commitIcon);
Label commitIconLabel = new Label(sourceComposite, SWT.NONE);
commitIconLabel.setImage(commitIcon);
commitIconLabel.setLayoutData(new RowData(commitIcon.getBounds().width,
commitIcon.getBounds().height));
Label commit = new Label(sourceComposite, SWT.NONE);
StringBuilder commitBuilder = new StringBuilder(
Utils.getShortObjectId(commitToPush));
StringBuilder commitTooltipBuilder = new StringBuilder(
this.commitToPush.getName());
try (RevWalk revWalk = new RevWalk(repository)) {
RevCommit revCommit = revWalk.parseCommit(this.commitToPush);
commitBuilder.append(" "); //$NON-NLS-1$
commitBuilder.append(Utils.shortenText(revCommit.getShortMessage(),
MAX_SHORTCOMMIT_MESSAGE_LENGTH));
commitTooltipBuilder.append("\n\n"); //$NON-NLS-1$
commitTooltipBuilder.append(revCommit.getFullMessage());
} catch (IOException ex) {
commitBuilder
.append(UIText.PushBranchPage_CannotAccessCommitDescription);
commitTooltipBuilder.append(ex.getMessage());
Activator.handleError(ex.getLocalizedMessage(), ex, false);
}
commit.setText(commitBuilder.toString());
commit.setToolTipText(commitTooltipBuilder.toString());
Label destinationLabel = new Label(inputPanel, SWT.NONE);
destinationLabel.setText(UIText.PushBranchPage_Destination);
GridDataFactory.fillDefaults().applyTo(destinationLabel);
Composite remoteGroup = new Composite(inputPanel, SWT.NONE);
remoteGroup.setLayoutData(GridDataFactory.fillDefaults()
.indent(UIUtils.getControlIndent(), 0).create());
remoteGroup.setLayout(GridLayoutFactory.fillDefaults().numColumns(3)
.create());
Label remoteLabel = new Label(remoteGroup, SWT.NONE);
remoteLabel.setText(UIText.PushBranchPage_RemoteLabel);
// Use full width in case "New Remote..." button is not shown
int remoteSelectionSpan = showNewRemoteButton ? 1 : 2;
remoteSelectionCombo = new RemoteSelectionCombo(remoteGroup, SWT.NONE,
SelectionType.PUSH);
GridDataFactory.fillDefaults().grab(true, false).span(remoteSelectionSpan, 1)
.applyTo(remoteSelectionCombo);
setRemoteConfigs();
remoteSelectionCombo.addRemoteSelectionListener(rc -> {
remoteConfig = rc;
setRefAssist(rc);
checkPage();
});
if (showNewRemoteButton) {
Button newRemoteButton = new Button(remoteGroup, SWT.PUSH);
newRemoteButton.setText(UIText.PushBranchPage_NewRemoteButton);
GridDataFactory.fillDefaults().applyTo(newRemoteButton);
newRemoteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
showNewRemoteDialog();
}
});
}
Label branchNameLabel = new Label(remoteGroup, SWT.NONE);
branchNameLabel.setText(UIText.PushBranchPage_RemoteBranchNameLabel);
remoteBranchNameText = new Text(remoteGroup, SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false).span(2, 1)
.applyTo(remoteBranchNameText);
remoteBranchNameText.setText(getSuggestedBranchName());
AsynchronousRefProposalProvider candidateProvider = new AsynchronousRefProposalProvider(
getContainer(), remoteBranchNameText, () -> {
RemoteConfig config = remoteSelectionCombo
.getSelectedRemote();
if (config == null) {
return null;
}
List<URIish> uris = config.getURIs();
if (uris == null || uris.isEmpty()) {
return null;
}
return uris.get(0).toString();
},
uri -> refs.computeIfAbsent(uri,
u -> new AsynchronousBranchList(repository, u,
getLocalBranchName())));
candidateProvider.setContentProposalAdapter(
UIUtils.addRefContentProposalToText(remoteBranchNameText,
this.repository, candidateProvider, true));
if (this.ref != null) {
upstreamConfigComponent = new UpstreamConfigComponent(inputPanel,
SWT.NONE);
upstreamConfigComponent.getContainer().setLayoutData(
GridDataFactory.fillDefaults().grab(true, false).span(3, 1)
.indent(SWT.NONE, 20).create());
upstreamConfigComponent.addUpstreamConfigSelectionListener(cfg -> {
upstreamConfig = cfg;
checkPage();
});
setDefaultUpstreamConfig();
}
final Button forceUpdateButton = new Button(inputPanel, SWT.CHECK);
forceUpdateButton.setText(UIText.PushBranchPage_ForceUpdateButton);
forceUpdateButton.setSelection(false);
forceUpdateButton.setLayoutData(GridDataFactory.fillDefaults()
.grab(true, false).span(3, 1).create());
forceUpdateButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
forceUpdateSelected = forceUpdateButton.getSelection();
}
});
Link advancedDialogLink = new Link(main, SWT.NONE);
advancedDialogLink.setText(UIText.PushBranchPage_advancedWizardLink);
advancedDialogLink
.setToolTipText(UIText.PushBranchPage_advancedWizardLinkTooltip);
advancedDialogLink.setLayoutData(new GridData(SWT.END, SWT.END, false,
true));
advancedDialogLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Shell parentShell = getShell().getParent().getShell();
PushWizard advancedWizard = null;
try {
advancedWizard = new PushWizard(repository);
getShell().close();
new WizardDialog(parentShell, advancedWizard).open();
} catch (URISyntaxException ex) {
Activator.logError(ex.getMessage(), ex);
}
}
});
setControl(main);
checkPage();
// Add listener now to avoid setText above to already trigger it.
remoteBranchNameText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
checkPage();
}
});
// Do not use a tooltip since there is already a content proposal
// adapter on this field
BranchNameNormalizer normalizer = new BranchNameNormalizer(
remoteBranchNameText, null);
normalizer.setVisible(false);
}