vcs: preselect default vcs in "Add VCS Directory Mapping" dialog

GitOrigin-RevId: f505d16a570ae87d927b32f0df29e783e12617ca
This commit is contained in:
Aleksey Pivovarov
2024-08-27 19:15:07 +02:00
committed by intellij-monorepo-bot
parent e6eba962fa
commit f4a3a5bfae
5 changed files with 42 additions and 15 deletions

View File

@@ -5688,6 +5688,9 @@ c:com.intellij.openapi.vcs.configurable.ShelfStorageConfigurationDialog
- p:doValidate():com.intellij.openapi.ui.ValidationInfo
- p:getHelpId():java.lang.String
- p:postponeValidation():Z
f:com.intellij.openapi.vcs.configurable.SuggestedVcsComparator
- sf:INSTANCE:com.intellij.openapi.vcs.configurable.SuggestedVcsComparator
- sf:create(com.intellij.openapi.project.Project):java.util.Comparator
a:com.intellij.openapi.vcs.configurable.VcsCheckBoxWithSpinnerConfigurable
- com.intellij.openapi.options.Configurable
- p:myHighlightInterval:javax.swing.JSpinner

View File

@@ -8,39 +8,33 @@ import com.intellij.openapi.ui.MultiLineLabelUI;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsBundle;
import com.intellij.openapi.vcs.configurable.SuggestedVcsComparator;
import com.intellij.ui.SimpleListCellRenderer;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBInsets;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.NamedColorUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.Comparator;
import static com.intellij.openapi.util.SystemInfo.isMac;
public final class StartUseVcsDialog extends DialogWrapper {
@NonNls private static final String GIT = "Git";
private final ComboBox<AbstractVcs> myVcsCombo;
@NotNull
private final String myTargetDirectory;
private static final Comparator<AbstractVcs> VCS_COMPARATOR = Comparator
.comparingInt((AbstractVcs vcs) -> GIT.equals(vcs.getName()) ? -1 : 0)
.thenComparing(vcs -> vcs.getDisplayName(), String.CASE_INSENSITIVE_ORDER);
public StartUseVcsDialog(@NotNull Project project, @NotNull String targetDirectory) {
super(project, true);
myTargetDirectory = targetDirectory;
AbstractVcs[] vcses = ProjectLevelVcsManager.getInstance(project).getAllSupportedVcss();
ContainerUtil.sort(vcses, VCS_COMPARATOR);
ContainerUtil.sort(vcses, SuggestedVcsComparator.create(project));
myVcsCombo = new ComboBox<>(vcses);
myVcsCombo.setRenderer(SimpleListCellRenderer.create("", AbstractVcs::getDisplayName));

View File

@@ -0,0 +1,25 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.openapi.vcs.configurable
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.text.NaturalComparator
import com.intellij.openapi.vcs.AbstractVcs
import com.intellij.openapi.vcs.ProjectLevelVcsManager
import org.jetbrains.annotations.NonNls
object SuggestedVcsComparator {
private const val GIT_VCS_NAME: @NonNls String = "Git"
@JvmStatic
fun create(project: Project): Comparator<AbstractVcs?> {
val activeVcss = ProjectLevelVcsManager.getInstance(project).getAllActiveVcss();
return compareBy<AbstractVcs?> { vcs ->
when {
vcs == null -> 1 // <None> is last
activeVcss.contains(vcs) -> -2
vcs.name == GIT_VCS_NAME -> -1
else -> 0
}
}.thenComparing({ vcs -> vcs?.displayName ?: "" }, NaturalComparator.INSTANCE)
}
}

View File

@@ -37,12 +37,12 @@ import java.awt.Component
import java.awt.GridBagConstraints
import java.awt.GridBagLayout
import java.io.File
import java.util.*
import javax.swing.JComponent
import javax.swing.JPanel
import javax.swing.JTable
import javax.swing.table.TableCellEditor
import javax.swing.table.TableCellRenderer
import kotlin.Throws
class VcsDirectoryConfigurationPanel(private val project: Project) : JPanel(), Disposable {
private val POSTPONE_MAPPINGS_LOADING_PANEL = ProgressIndicatorWithDelayedPresentation.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS
@@ -151,7 +151,7 @@ class VcsDirectoryConfigurationPanel(private val project: Project) : JPanel(), D
initializeModel()
vcsComboBox = buildVcsesComboBox(allSupportedVcss)
vcsComboBox = buildVcsesComboBox(project, allSupportedVcss)
vcsComboBox.addItemListener {
if (mappingTable.isEditing) {
mappingTable.stopEditing()
@@ -471,11 +471,11 @@ class VcsDirectoryConfigurationPanel(private val project: Project) : JPanel(), D
@JvmStatic
fun buildVcsesComboBox(project: Project): ComboBox<AbstractVcs?> {
val allVcses = ProjectLevelVcsManager.getInstance(project).allSupportedVcss
return buildVcsesComboBox(allVcses.asList())
return buildVcsesComboBox(project, allVcses.asList())
}
private fun buildVcsesComboBox(allVcses: List<AbstractVcs>): ComboBox<AbstractVcs?> {
val comboBox = ComboBox((allVcses + null).toTypedArray())
private fun buildVcsesComboBox(project: Project, allVcses: List<AbstractVcs>): ComboBox<AbstractVcs?> {
val comboBox = ComboBox((allVcses + null).sortedWith(SuggestedVcsComparator.create(project)).toTypedArray())
comboBox.renderer = SimpleListCellRenderer.create(VcsBundle.message("none.vcs.presentation")) { obj: AbstractVcs? -> obj?.displayName }
return comboBox
}

View File

@@ -18,6 +18,7 @@ import com.intellij.openapi.vcs.impl.DefaultVcsRootPolicy;
import com.intellij.openapi.vcs.impl.VcsDescriptor;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -67,9 +68,13 @@ public class VcsMappingConfigurationDialog extends DialogWrapper {
@NotNull
private static VcsDirectoryMapping suggestDefaultMapping(@NotNull Project project) {
AbstractVcs[] vcses = ProjectLevelVcsManager.getInstance(project).getAllSupportedVcss();
ContainerUtil.sort(vcses, SuggestedVcsComparator.create(project));
String defaultVcsName = vcses.length > 0 ? vcses[0].getName() : "";
String basePath = project.getBasePath();
if (basePath == null) return VcsDirectoryMapping.createDefault("");
return new VcsDirectoryMapping(basePath, "");
if (basePath == null) return VcsDirectoryMapping.createDefault(defaultVcsName);
return new VcsDirectoryMapping(basePath, defaultVcsName);
}
@Override