public void createControl()

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();
	}