From 1e19c4e5d66908d90b8ca92a4915a9399b9412cf Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Fri, 12 Sep 2025 18:33:42 +0200 Subject: [PATCH] IJPL-207306 Fix UI in Subversion settings - Presentation GitOrigin-RevId: 2ce6d88944efb2b788cc7d405ac2d05f6903293a --- .../svn4idea/resources/META-INF/plugin.xml | 2 +- .../idea/svn/PresentationSettingsPanel.form | 68 ------------- .../idea/svn/PresentationSettingsPanel.java | 96 ------------------- .../idea/svn/PresentationSvnConfigurable.kt | 62 ++++++++++++ .../jetbrains/idea/svn/SvnConfigurable.java | 6 -- 5 files changed, 63 insertions(+), 171 deletions(-) delete mode 100644 plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.form delete mode 100644 plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.java create mode 100644 plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSvnConfigurable.kt diff --git a/plugins/svn4idea/resources/META-INF/plugin.xml b/plugins/svn4idea/resources/META-INF/plugin.xml index 750736e4641b..6f81edf8f561 100644 --- a/plugins/svn4idea/resources/META-INF/plugin.xml +++ b/plugins/svn4idea/resources/META-INF/plugin.xml @@ -142,7 +142,7 @@ areChildrenValidMappings="true"/> - diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.form b/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.form deleted file mode 100644 index e0e42daa50db..000000000000 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.form +++ /dev/null @@ -1,68 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.java deleted file mode 100644 index da51d51bc2ab..000000000000 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSettingsPanel.java +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package org.jetbrains.idea.svn; - -import com.intellij.openapi.options.ConfigurableUi; -import com.intellij.openapi.project.Project; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class PresentationSettingsPanel implements ConfigurableUi { - - private final @NotNull Project myProject; - - private JPanel myMainPanel; - - private JCheckBox myCheckNestedInQuickMerge; - private JCheckBox myIgnoreWhitespaceDifferenciesInCheckBox; - private JCheckBox myShowMergeSourceInAnnotate; - - private JCheckBox myMaximumNumberOfRevisionsCheckBox; - private JSpinner myNumRevsInAnnotations; - - public PresentationSettingsPanel(@NotNull Project project) { - myProject = project; - - myMaximumNumberOfRevisionsCheckBox - .addActionListener(e -> myNumRevsInAnnotations.setEnabled(myMaximumNumberOfRevisionsCheckBox.isSelected())); - myNumRevsInAnnotations.setEnabled(myMaximumNumberOfRevisionsCheckBox.isSelected()); - } - - @Override - public @NotNull JComponent getComponent() { - return myMainPanel; - } - - @Override - public void reset(@NotNull SvnConfiguration configuration) { - myCheckNestedInQuickMerge.setSelected(configuration.isCheckNestedForQuickMerge()); - myIgnoreWhitespaceDifferenciesInCheckBox.setSelected(configuration.isIgnoreSpacesInAnnotate()); - myShowMergeSourceInAnnotate.setSelected(configuration.isShowMergeSourcesInAnnotate()); - final int annotateRevisions = configuration.getMaxAnnotateRevisions(); - if (annotateRevisions == -1) { - myMaximumNumberOfRevisionsCheckBox.setSelected(false); - myNumRevsInAnnotations.setValue(SvnConfiguration.ourMaxAnnotateRevisionsDefault); - } - else { - myMaximumNumberOfRevisionsCheckBox.setSelected(true); - myNumRevsInAnnotations.setValue(annotateRevisions); - } - myNumRevsInAnnotations.setEnabled(myMaximumNumberOfRevisionsCheckBox.isSelected()); - } - - @Override - public boolean isModified(@NotNull SvnConfiguration configuration) { - if (configuration.isCheckNestedForQuickMerge() != myCheckNestedInQuickMerge.isSelected()) { - return true; - } - if (configuration.isIgnoreSpacesInAnnotate() != myIgnoreWhitespaceDifferenciesInCheckBox.isSelected()) { - return true; - } - if (configuration.isShowMergeSourcesInAnnotate() != myShowMergeSourceInAnnotate.isSelected()) { - return true; - } - final int annotateRevisions = configuration.getMaxAnnotateRevisions(); - final boolean useMaxInAnnot = annotateRevisions != -1; - if (useMaxInAnnot != myMaximumNumberOfRevisionsCheckBox.isSelected()) { - return true; - } - if (myMaximumNumberOfRevisionsCheckBox.isSelected()) { - if (annotateRevisions != ((SpinnerNumberModel)myNumRevsInAnnotations.getModel()).getNumber().intValue()) { - return true; - } - } - return false; - } - - @Override - public void apply(@NotNull SvnConfiguration configuration) { - configuration.setCheckNestedForQuickMerge(myCheckNestedInQuickMerge.isSelected()); - configuration.setIgnoreSpacesInAnnotate(myIgnoreWhitespaceDifferenciesInCheckBox.isSelected()); - configuration.setShowMergeSourcesInAnnotate(myShowMergeSourceInAnnotate.isSelected()); - if (!myMaximumNumberOfRevisionsCheckBox.isSelected()) { - configuration.setMaxAnnotateRevisions(-1); - } - else { - configuration.setMaxAnnotateRevisions(((SpinnerNumberModel)myNumRevsInAnnotations.getModel()).getNumber().intValue()); - } - } - - private void createUIComponents() { - final SvnConfiguration configuration = SvnConfiguration.getInstance(myProject); - int value = configuration.getMaxAnnotateRevisions(); - value = (value == -1) ? SvnConfiguration.ourMaxAnnotateRevisionsDefault : value; - myNumRevsInAnnotations = new JSpinner(new SpinnerNumberModel(value, 10, 100000, 100)); - } -} diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSvnConfigurable.kt b/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSvnConfigurable.kt new file mode 100644 index 000000000000..8469c16a1eac --- /dev/null +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/PresentationSvnConfigurable.kt @@ -0,0 +1,62 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.svn + +import com.intellij.openapi.options.BoundSearchableConfigurable +import com.intellij.openapi.options.Configurable.NoScroll +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.DialogPanel +import com.intellij.ui.JBIntSpinner +import com.intellij.ui.components.JBCheckBox +import com.intellij.ui.dsl.builder.RightGap +import com.intellij.ui.dsl.builder.bindSelected +import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.layout.selected + +internal class PresentationSvnConfigurable(private val project: Project) : BoundSearchableConfigurable( + SvnBundle.message("configurable.name.svn.presentation"), + SvnConfigurable.HELP_ID + ".Presentation", + SvnConfigurable.ID + ".Presentation" +), NoScroll { + + private lateinit var chMaxRevisions: JBCheckBox + private lateinit var spMaxRevisions: JBIntSpinner + + override fun createPanel(): DialogPanel { + val settings = SvnConfiguration.getInstance(project) + + return panel { + row { + checkBox(SvnBundle.message("settings.check.mergeinfo")) + .bindSelected(settings::isCheckNestedForQuickMerge, settings::setCheckNestedForQuickMerge) + } + row { + chMaxRevisions = checkBox(SvnBundle.message("settings.maximum.revisions.number")) + .gap(RightGap.SMALL) + .component + spMaxRevisions = spinner(10..100000, 100) + .enabledIf(chMaxRevisions.selected) + .onReset { + chMaxRevisions.isSelected = settings.maxAnnotateRevisions != -1 + spMaxRevisions.value = if (chMaxRevisions.isSelected) settings.maxAnnotateRevisions else SvnConfiguration.ourMaxAnnotateRevisionsDefault + }.onApply { + settings.maxAnnotateRevisions = getCurrentMaxAnnotateRevisions() + }.onIsModified { + getCurrentMaxAnnotateRevisions() != settings.maxAnnotateRevisions + } + .component + } + row { + checkBox(SvnBundle.message("annotation.show.merge.sources.default.text")) + .bindSelected(settings::isShowMergeSourcesInAnnotate, settings::setShowMergeSourcesInAnnotate) + } + row { + checkBox(SvnBundle.message("svn.option.ignore.whitespace.in.annotate")) + .bindSelected(settings::isIgnoreSpacesInAnnotate, settings::setIgnoreSpacesInAnnotate) + } + } + } + + private fun getCurrentMaxAnnotateRevisions(): Int { + return if (chMaxRevisions.isSelected) spMaxRevisions.number else -1 + } +} diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index c5c2d0fe4497..df2605f67f0d 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -68,12 +68,6 @@ public abstract class SvnConfigurable extends ConfigurableBase new PresentationSettingsPanel(project)); - } - } - public static class Ssh extends SvnConfigurable { public Ssh(@NotNull Project project) { super(project, "SSH", message("configurable.name.svn.ssh"), () -> new SshSettingsPanel(project));