[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
This commit is contained in:
Bogdan Kirilenko
2023-12-19 13:28:30 +00:00
committed by intellij-monorepo-bot
parent 4a07e7311c
commit 9f29eadd0e
3 changed files with 20 additions and 1 deletions
@@ -134,4 +134,20 @@ public interface DiffUserDataKeys {
* @see com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings#isEnableAligningChangesMode
*/
Key<Boolean> 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<Boolean> 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<Boolean> LINE_MARKER_ALWAYS_VISIBLE = Key.create("Diff.LineMarkerAlwaysVisible");
}
@@ -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
@@ -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);