Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/vs/editor/contrib/folding/browser/foldingDecorations.ts')
-rw-r--r--src/vs/editor/contrib/folding/browser/foldingDecorations.ts33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/vs/editor/contrib/folding/browser/foldingDecorations.ts b/src/vs/editor/contrib/folding/browser/foldingDecorations.ts
index bdb63ab19e9..132dd19a9fa 100644
--- a/src/vs/editor/contrib/folding/browser/foldingDecorations.ts
+++ b/src/vs/editor/contrib/folding/browser/foldingDecorations.ts
@@ -5,7 +5,7 @@
import { Codicon } from 'vs/base/common/codicons';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
-import { IModelDecorationsChangeAccessor, TrackedRangeStickiness } from 'vs/editor/common/model';
+import { IModelDecorationOptions, IModelDecorationsChangeAccessor, TrackedRangeStickiness } from 'vs/editor/common/model';
import { ModelDecorationOptions } from 'vs/editor/common/model/textModel';
import { IDecorationProvider } from 'vs/editor/contrib/folding/browser/foldingModel';
import { localize } from 'vs/nls';
@@ -14,6 +14,7 @@ import { ThemeIcon } from 'vs/platform/theme/common/themeService';
export const foldingExpandedIcon = registerIcon('folding-expanded', Codicon.chevronDown, localize('foldingExpandedIcon', 'Icon for expanded ranges in the editor glyph margin.'));
export const foldingCollapsedIcon = registerIcon('folding-collapsed', Codicon.chevronRight, localize('foldingCollapsedIcon', 'Icon for collapsed ranges in the editor glyph margin.'));
+export const foldingManualIcon = registerIcon('folding-manual', Codicon.ellipsis, localize('foldingManualIcon', 'Icon for manually collapsed ranges in the editor glyph margin.'));
export class FoldingDecorationProvider implements IDecorationProvider {
private static readonly COLLAPSED_VISUAL_DECORATION = ModelDecorationOptions.register({
@@ -33,6 +34,23 @@ export class FoldingDecorationProvider implements IDecorationProvider {
firstLineDecorationClassName: ThemeIcon.asClassName(foldingCollapsedIcon)
});
+ private static readonly MANUALLY_COLLAPSED_VISUAL_DECORATION = ModelDecorationOptions.register({
+ description: 'folding-manually-collapsed-visual-decoration',
+ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,
+ afterContentClassName: 'inline-folded',
+ isWholeLine: true,
+ firstLineDecorationClassName: ThemeIcon.asClassName(foldingManualIcon)
+ });
+
+ private static readonly MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION = ModelDecorationOptions.register({
+ description: 'folding-manually-collapsed-highlighted-visual-decoration',
+ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,
+ afterContentClassName: 'inline-folded',
+ className: 'folded-background',
+ isWholeLine: true,
+ firstLineDecorationClassName: ThemeIcon.asClassName(foldingManualIcon)
+ });
+
private static readonly EXPANDED_AUTO_HIDE_VISUAL_DECORATION = ModelDecorationOptions.register({
description: 'folding-expanded-auto-hide-visual-decoration',
stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,
@@ -52,20 +70,23 @@ export class FoldingDecorationProvider implements IDecorationProvider {
stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges
});
- public autoHideFoldingControls: boolean = true;
+ public showFoldingControls: 'always' | 'never' | 'mouseover' = 'mouseover';
public showFoldingHighlights: boolean = true;
constructor(private readonly editor: ICodeEditor) {
}
- getDecorationOption(isCollapsed: boolean, isHidden: boolean): ModelDecorationOptions {
- if (isHidden) {
+ getDecorationOption(isCollapsed: boolean, isHidden: boolean, isManualSelection: boolean): IModelDecorationOptions {
+ if (isHidden // is inside another collapsed region
+ || this.showFoldingControls === 'never' || (isManualSelection && !isCollapsed)) { //
return FoldingDecorationProvider.HIDDEN_RANGE_DECORATION;
}
if (isCollapsed) {
- return this.showFoldingHighlights ? FoldingDecorationProvider.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION : FoldingDecorationProvider.COLLAPSED_VISUAL_DECORATION;
- } else if (this.autoHideFoldingControls) {
+ return isManualSelection ?
+ (this.showFoldingHighlights ? FoldingDecorationProvider.MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION : FoldingDecorationProvider.MANUALLY_COLLAPSED_VISUAL_DECORATION)
+ : (this.showFoldingHighlights ? FoldingDecorationProvider.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION : FoldingDecorationProvider.COLLAPSED_VISUAL_DECORATION);
+ } else if (this.showFoldingControls === 'mouseover') {
return FoldingDecorationProvider.EXPANDED_AUTO_HIDE_VISUAL_DECORATION;
} else {
return FoldingDecorationProvider.EXPANDED_VISUAL_DECORATION;