From 9f29eadd0eb43b99999971c3e10a7e67db539eea Mon Sep 17 00:00:00 2001 From: Bogdan Kirilenko Date: Mon, 18 Dec 2023 14:43:34 +0100 Subject: [PATCH] [jupyter] PY-20132 added user data keys for jupyter diff editors such that "expand by default action" is disabled and line marker is always visible in the EditorGutterComponentImpl even if intersects folded region GitOrigin-RevId: a1d2f11bca914738a68bf89c2e59b67a679cc059 --- .../com/intellij/diff/util/DiffUserDataKeys.java | 16 ++++++++++++++++ .../actions/impl/ToggleDiffAligningModeAction.kt | 2 ++ .../editor/impl/EditorGutterComponentImpl.java | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java b/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java index 0d5d095d68ea..6789f5794fbf 100644 --- a/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java +++ b/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java @@ -134,4 +134,20 @@ public interface DiffUserDataKeys { * @see com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings#isEnableAligningChangesMode */ Key ALIGNED_TWO_SIDED_DIFF = Key.create("Diff.AlignTwoSidedDiff"); + + /** + * Controls whether the aligning view mode is available for a specific editor. + * This can be disabled for viewers, where this feature is not implemented (e.g. {@link com.intellij.jupyter.diff.util.JupyterDiffViewer}) + * + * @see com.intellij.diff.actions.impl.ToggleDiffAligningModeAction#update + */ + Key ALIGNING_VIEW_NOT_SUPPORTED = Key.create("Diff.DisableAligningView"); + + /** + * Determines if line markers should always be visible in the editor gutter, regardless of the current folding state. + * This can be particularly useful in specialized diff viewers (e.g., {@link com.intellij.jupyter.diff.util.JupyterDiffViewer}) + * + * @see com.intellij.openapi.editor.impl.EditorGutterComponentImpl#isLineMarkerVisible + */ + Key LINE_MARKER_ALWAYS_VISIBLE = Key.create("Diff.LineMarkerAlwaysVisible"); } diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt index ba38bf1c0fd6..38fc3ab3b535 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt +++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt @@ -6,6 +6,7 @@ import com.intellij.diff.tools.util.DiffDataKeys.DIFF_CONTEXT import com.intellij.diff.tools.util.DiffDataKeys.DIFF_VIEWER import com.intellij.diff.tools.util.base.TextDiffViewerUtil import com.intellij.diff.util.DiffUserDataKeys.ALIGNED_TWO_SIDED_DIFF +import com.intellij.diff.util.DiffUserDataKeys.ALIGNING_VIEW_NOT_SUPPORTED import com.intellij.diff.util.DiffUtil import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent @@ -18,6 +19,7 @@ class ToggleDiffAligningModeAction : DumbAwareToggleAction() { val available = e.project != null && viewer is SimpleDiffViewer && !DiffUtil.isUserDataFlagSet(ALIGNED_TWO_SIDED_DIFF, viewer.request) + && !DiffUtil.isUserDataFlagSet(ALIGNING_VIEW_NOT_SUPPORTED, viewer.request) if (!available) { e.presentation.isEnabledAndVisible = false return diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index f573a5dbe9ce..7077fbf5eb60 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -115,6 +115,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import static com.intellij.diff.util.DiffUserDataKeys.LINE_MARKER_ALWAYS_VISIBLE; import static com.intellij.openapi.ui.ex.lineNumber.LineNumberConvertersKt.getStandardLineNumberConverter; /** @@ -1299,9 +1300,9 @@ final class EditorGutterComponentImpl extends EditorGutterComponentEx implements } private boolean isLineMarkerVisible(RangeHighlighter highlighter) { + if (Boolean.TRUE.equals(myEditor.getUserData(LINE_MARKER_ALWAYS_VISIBLE))) { return true; } int startOffset = highlighter.getStartOffset(); int endOffset = highlighter.getEndOffset(); - FoldRegion startFoldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset); FoldRegion endFoldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(endOffset); return startFoldRegion == null || !startFoldRegion.equals(endFoldRegion);