Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
65f73611
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,发现更多精彩内容 >>
提交
65f73611
编写于
5月 09, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
capture/restore expansion state before/after filtering
上级
2f6abf36
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
68 addition
and
3 deletion
+68
-3
src/vs/workbench/parts/outline/electron-browser/outlineModel.ts
.../workbench/parts/outline/electron-browser/outlineModel.ts
+17
-0
src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts
.../workbench/parts/outline/electron-browser/outlinePanel.ts
+16
-3
src/vs/workbench/parts/outline/electron-browser/outlineTree.ts
...s/workbench/parts/outline/electron-browser/outlineTree.ts
+35
-0
未找到文件。
src/vs/workbench/parts/outline/electron-browser/outlineModel.ts
浏览文件 @
65f73611
...
...
@@ -120,4 +120,21 @@ export class OutlineItemGroup {
}
return
item
;
}
getItemById
(
id
:
string
):
OutlineItem
{
return
this
.
_getItemById
(
id
,
this
.
children
);
}
private
_getItemById
(
id
:
string
,
items
:
OutlineItem
[]):
OutlineItem
{
for
(
const
item
of
items
)
{
if
(
item
.
id
===
id
)
{
return
item
;
}
let
candidate
=
this
.
_getItemById
(
id
,
item
.
children
);
if
(
candidate
)
{
return
candidate
;
}
}
return
undefined
;
}
}
src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts
浏览文件 @
65f73611
...
...
@@ -31,7 +31,7 @@ import { IViewOptions, ViewsViewletPanel } from 'vs/workbench/browser/parts/view
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IEditorGroupService
}
from
'
vs/workbench/services/group/common/groupService
'
;
import
{
OutlineItem
,
OutlineItemGroup
,
getOutline
}
from
'
./outlineModel
'
;
import
{
OutlineDataSource
,
OutlineItemComparator
,
OutlineItemCompareType
,
OutlineItemFilter
,
OutlineRenderer
}
from
'
./outlineTree
'
;
import
{
OutlineDataSource
,
OutlineItemComparator
,
OutlineItemCompareType
,
OutlineItemFilter
,
OutlineRenderer
,
OutlineTreeState
}
from
'
./outlineTree
'
;
import
{
KeyCode
}
from
'
../../../../base/common/keyCodes
'
;
class
ActiveEditorOracle
{
...
...
@@ -216,13 +216,26 @@ export class OutlinePanel extends ViewsViewletPanel {
this
.
_input
.
enable
();
this
.
_editorDisposables
.
push
(
this
.
_input
.
onDidChange
(
async
query
=>
{
let
item
=
model
.
updateMatches
(
query
);
let
beforePatternState
:
OutlineTreeState
;
this
.
_editorDisposables
.
push
(
this
.
_input
.
onDidChange
(
async
pattern
=>
{
if
(
!
beforePatternState
)
{
beforePatternState
=
OutlineTreeState
.
capture
(
this
.
_tree
);
}
let
item
=
model
.
updateMatches
(
pattern
);
await
this
.
_tree
.
refresh
(
undefined
,
true
);
if
(
item
)
{
await
this
.
_tree
.
reveal
(
item
);
this
.
_tree
.
setFocus
(
item
,
this
);
this
.
_tree
.
setSelection
([
item
],
this
);
this
.
_tree
.
expandAll
(
undefined
/*all*/
);
}
if
(
!
pattern
&&
beforePatternState
)
{
await
OutlineTreeState
.
restore
(
this
.
_tree
,
beforePatternState
);
beforePatternState
=
undefined
;
}
}));
...
...
src/vs/workbench/parts/outline/electron-browser/outlineTree.ts
浏览文件 @
65f73611
...
...
@@ -108,3 +108,38 @@ export class OutlineRenderer implements IRenderer {
template
.
label
.
dispose
();
}
}
export
class
OutlineTreeState
{
readonly
expanded
:
string
[];
static
capture
(
tree
:
ITree
):
OutlineTreeState
{
let
expanded
=
new
Array
<
string
>
();
let
nav
=
tree
.
getNavigator
();
while
(
nav
.
next
())
{
let
element
=
nav
.
current
();
if
(
element
instanceof
OutlineItem
)
{
if
(
tree
.
isExpanded
(
element
))
{
expanded
.
push
(
element
.
id
);
}
}
}
return
{
expanded
};
}
static
async
restore
(
tree
:
ITree
,
state
:
OutlineTreeState
):
TPromise
<
void
>
{
let
input
=
<
OutlineItemGroup
>
tree
.
getInput
();
if
(
!
(
input
instanceof
OutlineItemGroup
))
{
return
TPromise
.
as
(
undefined
);
}
let
items
:
OutlineItem
[]
=
[];
for
(
const
id
of
state
.
expanded
)
{
let
item
=
input
.
getItemById
(
id
);
if
(
item
)
{
items
.
push
(
item
);
}
}
await
tree
.
collapseAll
(
undefined
);
await
tree
.
expandAll
(
items
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录