in org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/AbstractFetchFromHostPage.java [228:552]
public void createControl(Composite parent) {
parent.addDisposeListener(event -> {
changeRefs.values()
.forEach(l -> l
.cancel(CancelableFuture.CancelMode.INTERRUPT));
changeRefs.clear();
});
Defaults defaults = null;
if (initialRefText != null) {
defaults = getDefaults(initialRefText);
}
SelectionAdapter validatePage = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (placeholder != null) {
placeholder.setVisible(false);
((GridData) placeholder.getLayoutData()).exclude = true;
}
checkPage();
}
};
Composite main = new Composite(parent, SWT.NONE);
main.setLayout(new GridLayout(2, false));
GridDataFactory.fillDefaults().grab(true, true).applyTo(main);
new Label(main, SWT.NONE)
.setText(UIText.AbstractFetchFromHostPage_UriLabel);
uriCombo = new Combo(main, SWT.DROP_DOWN);
GridDataFactory.fillDefaults().grab(true, false).applyTo(uriCombo);
uriCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String uriText = uriCombo.getText();
CancelableFuture<Collection<Change>> list = changeRefs
.get(uriText);
if (list != null) {
list.cancel(CancelableFuture.CancelMode.INTERRUPT);
}
list = createChangeList(repository, uriText);
changeRefs.put(uriText, list);
gettingRefs.put(uriText, new AtomicBoolean());
preFetch(list);
}
});
new Label(main, SWT.NONE).setText(changeLabel);
refText = new Text(main, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false).applyTo(refText);
contentProposer = addRefContentProposalToText(refText);
// C.f. https://bugs.eclipse.org/bugs/show_bug.cgi?id=273470
refText.addVerifyListener(
event -> event.text = Utils.toSingleLine(event.text).trim());
final Group checkoutGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
checkoutGroup.setLayout(new GridLayout(3, false));
GridDataFactory.fillDefaults().span(3, 1).grab(true, false)
.applyTo(checkoutGroup);
checkoutGroup.setText(UIText.AbstractFetchFromHostPage_AfterFetchGroup);
// radio: create local branch
createBranch = new Button(checkoutGroup, SWT.RADIO);
GridDataFactory.fillDefaults().span(1, 1).applyTo(createBranch);
createBranch.setText(UIText.AbstractFetchFromHostPage_LocalBranchRadio);
createBranch.addSelectionListener(validatePage);
branchCheckoutButton = new Button(checkoutGroup, SWT.CHECK);
GridDataFactory.fillDefaults().span(2, 1).align(SWT.END, SWT.CENTER)
.applyTo(branchCheckoutButton);
branchCheckoutButton.setFont(JFaceResources.getDialogFont());
branchCheckoutButton
.setText(UIText.AbstractFetchFromHostPage_LocalBranchCheckout);
branchCheckoutButton.setSelection(true);
branchTextlabel = new Label(checkoutGroup, SWT.NONE);
GridDataFactory.defaultsFor(branchTextlabel).exclude(false)
.applyTo(branchTextlabel);
branchTextlabel
.setText(UIText.AbstractFetchFromHostPage_BranchNameText);
branchText = new Text(checkoutGroup, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false)
.align(SWT.FILL, SWT.CENTER).applyTo(branchText);
branchText.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
branchTextEdited = true;
}
});
branchText.addVerifyListener(event -> {
if (event.text.isEmpty()) {
branchTextEdited = false;
}
});
branchText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
checkPage();
}
});
BranchNameNormalizer normalizer = new BranchNameNormalizer(branchText);
normalizer.setVisible(false);
branchEditButton = new Button(checkoutGroup, SWT.PUSH);
branchEditButton.setFont(JFaceResources.getDialogFont());
branchEditButton
.setText(UIText.AbstractFetchFromHostPage_BranchEditButton);
branchEditButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent selectionEvent) {
String txt = branchText.getText();
String refToMark = txt.isEmpty() ? null : Constants.R_HEADS + txt;
AbstractBranchSelectionDialog dlg = new BranchEditDialog(
checkoutGroup.getShell(), repository, refToMark);
if (dlg.open() == Window.OK) {
branchText.setText(Repository.shortenRefName(dlg
.getRefName()));
branchTextEdited = true;
} else {
// force calling branchText's modify listeners
branchText.setText(branchText.getText());
}
}
});
GridDataFactory.defaultsFor(branchEditButton).exclude(false)
.applyTo(branchEditButton);
// radio: create tag
createTag = new Button(checkoutGroup, SWT.RADIO);
GridDataFactory.fillDefaults().span(3, 1).applyTo(createTag);
createTag.setText(UIText.AbstractFetchFromHostPage_TagRadio);
createTag.addSelectionListener(validatePage);
tagTextlabel = new Label(checkoutGroup, SWT.NONE);
GridDataFactory.defaultsFor(tagTextlabel).exclude(true)
.applyTo(tagTextlabel);
tagTextlabel.setText(UIText.AbstractFetchFromHostPage_TagNameText);
tagText = new Text(checkoutGroup, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().exclude(true).grab(true, false)
.applyTo(tagText);
tagText.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
tagTextEdited = true;
}
});
tagText.addVerifyListener(event -> {
if (event.text.isEmpty()) {
tagTextEdited = false;
}
});
tagText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
checkPage();
}
});
BranchNameNormalizer tagNormalizer = new BranchNameNormalizer(tagText,
UIText.BranchNameNormalizer_TooltipForTag);
tagNormalizer.setVisible(false);
// radio: checkout FETCH_HEAD
checkoutFetchHead = new Button(checkoutGroup, SWT.RADIO);
GridDataFactory.fillDefaults().span(3, 1).applyTo(checkoutFetchHead);
checkoutFetchHead
.setText(UIText.AbstractFetchFromHostPage_CheckoutRadio);
checkoutFetchHead.addSelectionListener(validatePage);
// radio: cherry-pick onto current HEAD
if (supportsCherryPick) {
try {
String headName = repository.getBranch();
if (headName != null) {
cherryPickFetchHead = new Button(checkoutGroup, SWT.RADIO);
GridDataFactory.fillDefaults().span(3, 1)
.applyTo(cherryPickFetchHead);
cherryPickFetchHead.setText(MessageFormat.format(
UIText.AbstractFetchFromHostPage_CherryPickRadio,
headName));
cherryPickFetchHead.addSelectionListener(validatePage);
}
} catch (IOException e) {
Activator.logError(e.getLocalizedMessage(), e);
}
}
// radio: don't checkout
updateFetchHead = new Button(checkoutGroup, SWT.RADIO);
GridDataFactory.fillDefaults().span(3, 1).applyTo(updateFetchHead);
updateFetchHead.setText(UIText.AbstractFetchFromHostPage_UpdateRadio);
updateFetchHead.addSelectionListener(validatePage);
CheckoutMode mode = defaults == null ? null : defaults.getCommand();
// If not createBranch or createTag, add a placeHolder so that the
// initial dialog is large enough
if (mode == null) {
createBranch.setSelection(true);
} else {
switch (mode) {
case CHECKOUT_FETCH_HEAD:
checkoutFetchHead.setSelection(true);
placeholder = new Label(main, SWT.NONE);
GridDataFactory.fillDefaults().span(2, 1).applyTo(placeholder);
break;
case CHERRY_PICK:
if (cherryPickFetchHead != null) {
cherryPickFetchHead.setSelection(true);
placeholder = new Label(main, SWT.NONE);
GridDataFactory.fillDefaults().span(2, 1)
.applyTo(placeholder);
} else {
createBranch.setSelection(true);
}
break;
default:
createBranch.setSelection(true);
break;
}
}
warningAdditionalRefNotActive = new Composite(main, SWT.NONE);
GridDataFactory.fillDefaults().span(2, 1).grab(true, false)
.exclude(true).applyTo(warningAdditionalRefNotActive);
warningAdditionalRefNotActive.setLayout(new GridLayout(2, false));
warningAdditionalRefNotActive.setVisible(false);
activateAdditionalRefs = new Button(warningAdditionalRefNotActive,
SWT.CHECK);
activateAdditionalRefs
.setText(
UIText.AbstractFetchFromHostPage_ActivateAdditionalRefsButton);
activateAdditionalRefs
.setToolTipText(
UIText.AbstractFetchFromHostPage_ActivateAdditionalRefsTooltip);
ActionUtils.setGlobalActions(refText, ActionUtils.createGlobalAction(
ActionFactory.PASTE, () -> {
if (doPaste(refText) && contentProposer != null) {
refText.getDisplay().asyncExec(() -> {
if (!refText.isDisposed()) {
contentProposer.openProposalPopup();
}
});
}
}));
refText.addModifyListener(event -> {
refTextEdited = true;
Change change = changeFromString(refText.getText());
String suggestion = ""; //$NON-NLS-1$
if (change != null) {
suggestion = change.getBranchSuggestion();
}
if (!branchTextEdited) {
branchText.setText(suggestion);
}
if (!tagTextEdited) {
tagText.setText(suggestion);
}
checkPage();
});
Change defaultChange = defaults == null ? null : defaults.getChange();
if (defaultChange != null) {
String ref = defaultChange.getRefName();
if (ref != null) {
refText.setText(ref);
} else {
refText.setText(
Long.toString(defaultChange.getChangeNumber()));
}
}
refTextEdited = false;
String defaultUri = defaults == null ? null : defaults.getUri();
Set<String> upstream = determineUris(repository, defaultUri);
upstream.stream().sorted().forEach(u -> {
uriCombo.add(u);
changeRefs.put(u, createChangeList(repository, u));
gettingRefs.put(u, new AtomicBoolean());
});
if (defaultUri != null) {
uriCombo.setText(defaultUri);
} else {
selectLastUsedUri();
}
String currentUri = uriCombo.getText();
CancelableFuture<Collection<Change>> list = changeRefs.get(currentUri);
if (list == null) {
list = createChangeList(repository, currentUri);
changeRefs.put(currentUri, list);
gettingRefs.put(currentUri, new AtomicBoolean());
}
preFetch(list);
refText.setFocus();
Dialog.applyDialogFont(main);
setControl(main);
if (defaultChange != null && !defaultChange.isComplete()) {
// Launch content assist when the page is displayed
final IWizardContainer container = getContainer();
if (container instanceof IPageChangeProvider) {
((IPageChangeProvider) container)
.addPageChangedListener(new IPageChangedListener() {
@Override
public void pageChanged(PageChangedEvent event) {
if (event
.getSelectedPage() == AbstractFetchFromHostPage.this) {
// Only the first time: remove myself
event.getPageChangeProvider()
.removePageChangedListener(this);
getControl().getDisplay()
.asyncExec(new Runnable() {
@Override
public void run() {
Control control = getControl();
if (control != null
&& !control.isDisposed()) {
contentProposer
.openProposalPopup();
}
}
});
}
}
});
}
}
checkPage();
}