Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
6b68d4df
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6b68d4df
编写于
4月 16, 2020
作者:
R
rebornix
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
restore folding state when notebook view model changes
上级
f32ff305
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
66 addition
and
5 deletion
+66
-5
src/vs/workbench/contrib/notebook/browser/viewModel/foldingModel.ts
...kbench/contrib/notebook/browser/viewModel/foldingModel.ts
+63
-2
src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts
...h/contrib/notebook/browser/viewModel/notebookViewModel.ts
+3
-3
未找到文件。
src/vs/workbench/contrib/notebook/browser/viewModel/foldingModel.ts
浏览文件 @
6b68d4df
...
...
@@ -3,10 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
E
vent
,
Emitter
}
from
'
vs/base/common/event
'
;
import
{
E
mitter
,
Event
}
from
'
vs/base/common/event
'
;
import
{
Disposable
,
DisposableStore
}
from
'
vs/base/common/lifecycle
'
;
import
{
TrackedRangeStickiness
}
from
'
vs/editor/common/model
'
;
import
{
FoldingRegions
}
from
'
vs/editor/contrib/folding/foldingRanges
'
;
import
{
IFoldingRangeData
,
sanitizeRanges
}
from
'
vs/editor/contrib/folding/syntaxRangeProvider
'
;
import
{
ICellRange
}
from
'
vs/workbench/contrib/notebook/browser/notebookBrowser
'
;
import
{
CellViewModel
,
NotebookViewModel
}
from
'
vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel
'
;
import
{
CellKind
}
from
'
vs/workbench/contrib/notebook/common/notebookCommon
'
;
...
...
@@ -21,6 +23,8 @@ export class FoldingModel extends Disposable {
private
_onDidFoldingRegionChanges
=
new
Emitter
<
void
>
();
onDidFoldingRegionChanged
:
Event
<
void
>
=
this
.
_onDidFoldingRegionChanges
.
event
;
private
_foldingRangeDecorationIds
:
string
[]
=
[];
constructor
(
// private readonly _notebookEditor: INotebookEditor
)
{
...
...
@@ -43,6 +47,10 @@ export class FoldingModel extends Disposable {
this
.
recompute
();
}
public
setCollapsed
(
index
:
number
,
newState
:
boolean
)
{
this
.
_regions
.
setCollapsed
(
index
,
newState
);
}
recompute
()
{
const
cells
=
this
.
_viewModel
!
.
viewCells
;
let
stack
:
{
index
:
number
,
level
:
number
,
endIndex
:
number
}[]
=
[];
...
...
@@ -91,7 +99,60 @@ export class FoldingModel extends Disposable {
};
});
this
.
_regions
=
sanitizeRanges
(
rawFoldingRanges
,
5000
);
const
newRegions
=
sanitizeRanges
(
rawFoldingRanges
,
5000
);
// restore collased state
let
i
=
0
;
let
nextCollapsed
=
()
=>
{
while
(
i
<
this
.
_regions
.
length
)
{
let
isCollapsed
=
this
.
_regions
.
isCollapsed
(
i
);
i
++
;
if
(
isCollapsed
)
{
return
i
-
1
;
}
}
return
-
1
;
};
let
k
=
0
;
let
collapsedIndex
=
nextCollapsed
();
while
(
collapsedIndex
!==
-
1
&&
k
<
newRegions
.
length
)
{
// get the latest range
let
decRange
=
this
.
_viewModel
!
.
getTrackedRange
(
this
.
_foldingRangeDecorationIds
[
collapsedIndex
]);
if
(
decRange
)
{
let
collasedStartIndex
=
decRange
.
start
;
while
(
k
<
newRegions
.
length
)
{
let
startIndex
=
newRegions
.
getStartLineNumber
(
k
)
-
1
;
if
(
collasedStartIndex
>=
startIndex
)
{
newRegions
.
setCollapsed
(
k
,
collasedStartIndex
===
startIndex
);
k
++
;
}
else
{
break
;
}
}
}
collapsedIndex
=
nextCollapsed
();
}
while
(
k
<
newRegions
.
length
)
{
newRegions
.
setCollapsed
(
k
,
false
);
k
++
;
}
const
cellRanges
:
ICellRange
[]
=
[];
for
(
let
i
=
0
;
i
<
newRegions
.
length
;
i
++
)
{
const
region
=
newRegions
.
toRegion
(
i
);
cellRanges
.
push
({
start
:
region
.
startLineNumber
-
1
,
length
:
region
.
endLineNumber
-
region
.
startLineNumber
+
1
});
}
// remove old tracked ranges and add new ones
// TODO@rebornix, implement delta
this
.
_foldingRangeDecorationIds
.
forEach
(
id
=>
this
.
_viewModel
!
.
setTrackedRange
(
id
,
null
,
TrackedRangeStickiness
.
GrowsOnlyWhenTypingAfter
));
this
.
_foldingRangeDecorationIds
=
cellRanges
.
map
(
region
=>
this
.
_viewModel
!
.
setTrackedRange
(
null
,
region
,
TrackedRangeStickiness
.
GrowsOnlyWhenTypingAfter
)).
filter
(
str
=>
str
!==
null
)
as
string
[];
this
.
_regions
=
newRegions
;
this
.
_onDidFoldingRegionChanges
.
fire
();
}
}
...
...
src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts
浏览文件 @
6b68d4df
...
...
@@ -279,7 +279,7 @@ export class NotebookViewModel extends Disposable implements FoldingRegionDelega
return
;
}
this
.
_foldingModel
.
regions
.
setCollapsed
(
range
,
state
===
CellFoldingState
.
Collapsed
);
this
.
_foldingModel
.
setCollapsed
(
range
,
state
===
CellFoldingState
.
Collapsed
);
this
.
_updateFoldingRanges
();
}
...
...
@@ -349,10 +349,10 @@ export class NotebookViewModel extends Disposable implements FoldingRegionDelega
}
getTrackedRange
(
id
:
string
):
ICellRange
|
null
{
return
this
.
getDecorationRange
(
id
);
return
this
.
_
getDecorationRange
(
id
);
}
getDecorationRange
(
decorationId
:
string
):
ICellRange
|
null
{
private
_
getDecorationRange
(
decorationId
:
string
):
ICellRange
|
null
{
const
node
=
this
.
_decorations
[
decorationId
];
if
(
!
node
)
{
return
null
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录