Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
f28b0590
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f28b0590
编写于
6月 16, 2016
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support dnd from tab into editor area
上级
a403b526
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
58 addition
and
23 deletion
+58
-23
src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts
...workbench/browser/parts/editor/sideBySideEditorControl.ts
+25
-8
src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
+18
-15
src/vs/workbench/browser/parts/editor/titleControl.ts
src/vs/workbench/browser/parts/editor/titleControl.ts
+15
-0
未找到文件。
src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts
浏览文件 @
f28b0590
...
...
@@ -16,6 +16,7 @@ import {ProgressBar} from 'vs/base/browser/ui/progressbar/progressbar';
import
{
BaseEditor
}
from
'
vs/workbench/browser/parts/editor/baseEditor
'
;
import
DOM
=
require
(
'
vs/base/browser/dom
'
);
import
errors
=
require
(
'
vs/base/common/errors
'
);
import
{
isMacintosh
}
from
'
vs/base/common/platform
'
;
import
{
IWorkbenchEditorService
,
GroupArrangement
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IContextMenuService
}
from
'
vs/platform/contextview/browser/contextView
'
;
import
{
Position
,
POSITIONS
}
from
'
vs/platform/editor/common/editor
'
;
...
...
@@ -29,8 +30,9 @@ import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingServic
import
{
IExtensionService
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
TabsTitleControl
}
from
'
vs/workbench/browser/parts/editor/tabsTitleControl
'
;
import
{
TitleControl
}
from
'
vs/workbench/browser/parts/editor/titleControl
'
;
import
{
NoTabsTitleControl
}
from
'
vs/workbench/browser/parts/editor/noTabsTitleControl
'
;
import
{
IEditorStacksModel
,
IStacksModelChangeEvent
,
IWorkbenchEditorConfiguration
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorStacksModel
,
IStacksModelChangeEvent
,
IWorkbenchEditorConfiguration
,
EditorOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
ITitleAreaControl
}
from
'
vs/workbench/browser/parts/editor/titleControl
'
;
import
{
extractResources
}
from
'
vs/base/browser/dnd
'
;
...
...
@@ -761,14 +763,29 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti
DOM
.
removeClass
(
node
,
'
dropfeedback
'
);
destroyOverlay
();
const
droppedResources
=
extractResources
(
e
).
filter
(
r
=>
r
.
scheme
===
'
file
'
||
r
.
scheme
===
'
untitled
'
);
if
(
droppedResources
.
length
)
{
window
.
focus
();
// make sure this window has focus so that the open call reaches the right window!
// Check for transfer from title control
const
draggedEditor
=
TitleControl
.
getDraggedEditor
();
if
(
draggedEditor
)
{
const
isCopy
=
(
e
.
ctrlKey
&&
!
isMacintosh
)
||
(
e
.
altKey
&&
isMacintosh
);
if
(
isCopy
)
{
$this
.
editorService
.
openEditor
(
draggedEditor
.
editor
,
EditorOptions
.
create
({
pinned
:
true
}),
position
).
done
(
null
,
errors
.
onUnexpectedError
);
}
else
{
const
sourcePosition
=
$this
.
stacks
.
positionOfGroup
(
draggedEditor
.
group
);
$this
.
editorGroupService
.
moveEditor
(
draggedEditor
.
editor
,
sourcePosition
,
position
);
}
}
// Open all
$this
.
editorService
.
openEditors
(
droppedResources
.
map
(
resource
=>
{
return
{
input
:
{
resource
,
options
:
{
pinned
:
true
}
},
position
};
}))
.
then
(()
=>
$this
.
editorGroupService
.
focusGroup
(
position
))
.
done
(
null
,
errors
.
onUnexpectedError
);
// Check for URI transfer
else
{
const
droppedResources
=
extractResources
(
e
).
filter
(
r
=>
r
.
scheme
===
'
file
'
||
r
.
scheme
===
'
untitled
'
);
if
(
droppedResources
.
length
)
{
window
.
focus
();
// make sure this window has focus so that the open call reaches the right window!
// Open all
$this
.
editorService
.
openEditors
(
droppedResources
.
map
(
resource
=>
{
return
{
input
:
{
resource
,
options
:
{
pinned
:
true
}
},
position
};
}))
.
then
(()
=>
$this
.
editorGroupService
.
focusGroup
(
position
))
.
done
(
null
,
errors
.
onUnexpectedError
);
}
}
}
...
...
src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
浏览文件 @
f28b0590
...
...
@@ -35,9 +35,6 @@ import {ScrollbarVisibility} from 'vs/base/browser/ui/scrollbar/scrollableElemen
import
{
extractResources
}
from
'
vs/base/browser/dnd
'
;
export
class
TabsTitleControl
extends
TitleControl
{
private
static
draggedEditor
:
IEditorIdentifier
;
private
titleContainer
:
HTMLElement
;
private
tabsContainer
:
HTMLElement
;
private
activeTab
:
HTMLElement
;
...
...
@@ -127,20 +124,23 @@ export class TabsTitleControl extends TitleControl {
const
targetIndex
=
group
.
count
;
// Local DND
if
(
TabsTitleControl
.
draggedEditor
)
{
const
draggedEditor
=
TitleControl
.
getDraggedEditor
();
if
(
draggedEditor
)
{
DOM
.
EventHelper
.
stop
(
e
,
true
);
const
sourcePosition
=
this
.
stacks
.
positionOfGroup
(
TabsTitleControl
.
draggedEditor
.
group
);
const
sourcePosition
=
this
.
stacks
.
positionOfGroup
(
draggedEditor
.
group
);
// Move editor to target position and index
if
(
this
.
isMoveOperation
(
e
,
TabsTitleControl
.
draggedEditor
.
group
,
group
))
{
this
.
editorGroupService
.
moveEditor
(
TabsTitleControl
.
draggedEditor
.
editor
,
sourcePosition
,
targetPosition
,
targetIndex
);
if
(
this
.
isMoveOperation
(
e
,
draggedEditor
.
group
,
group
))
{
this
.
editorGroupService
.
moveEditor
(
draggedEditor
.
editor
,
sourcePosition
,
targetPosition
,
targetIndex
);
}
// Copy: just open editor at target index
else
{
this
.
editorService
.
openEditor
(
TabsTitleControl
.
draggedEditor
.
editor
,
EditorOptions
.
create
({
pinned
:
true
,
index
:
targetIndex
}),
targetPosition
).
done
(
null
,
errors
.
onUnexpectedError
);
this
.
editorService
.
openEditor
(
draggedEditor
.
editor
,
EditorOptions
.
create
({
pinned
:
true
,
index
:
targetIndex
}),
targetPosition
).
done
(
null
,
errors
.
onUnexpectedError
);
}
this
.
onEditorDragEnd
();
}
// External DND
...
...
@@ -416,7 +416,7 @@ export class TabsTitleControl extends TitleControl {
// Drag start
this
.
tabDisposeables
.
push
(
DOM
.
addDisposableListener
(
tab
,
DOM
.
EventType
.
DRAG_START
,
(
e
:
DragEvent
)
=>
{
DOM
.
addClass
(
tab
,
'
dragged
'
);
TabsTitleControl
.
draggedEditor
=
{
editor
,
group
}
;
this
.
onEditorDragStart
({
editor
,
group
})
;
e
.
dataTransfer
.
effectAllowed
=
'
copyMove
'
;
// Enable support to drag a file to desktop
...
...
@@ -440,7 +440,7 @@ export class TabsTitleControl extends TitleControl {
this
.
tabDisposeables
.
push
(
DOM
.
addDisposableListener
(
tab
,
DOM
.
EventType
.
DRAG_END
,
(
e
:
DragEvent
)
=>
{
DOM
.
removeClass
(
tab
,
'
dragged
'
);
DOM
.
removeClass
(
tab
,
'
dropfeedback
'
);
TabsTitleControl
.
draggedEditor
=
void
0
;
this
.
onEditorDragEnd
()
;
}));
// Drop
...
...
@@ -449,20 +449,23 @@ export class TabsTitleControl extends TitleControl {
const
targetIndex
=
group
.
indexOf
(
editor
);
// Local DND
if
(
TabsTitleControl
.
draggedEditor
)
{
const
draggedEditor
=
TabsTitleControl
.
getDraggedEditor
();
if
(
draggedEditor
)
{
DOM
.
EventHelper
.
stop
(
e
,
true
);
const
sourcePosition
=
this
.
stacks
.
positionOfGroup
(
TabsTitleControl
.
draggedEditor
.
group
);
const
sourcePosition
=
this
.
stacks
.
positionOfGroup
(
draggedEditor
.
group
);
// Move editor to target position and index
if
(
this
.
isMoveOperation
(
e
,
TabsTitleControl
.
draggedEditor
.
group
,
group
))
{
this
.
editorGroupService
.
moveEditor
(
TabsTitleControl
.
draggedEditor
.
editor
,
sourcePosition
,
targetPosition
,
targetIndex
);
if
(
this
.
isMoveOperation
(
e
,
draggedEditor
.
group
,
group
))
{
this
.
editorGroupService
.
moveEditor
(
draggedEditor
.
editor
,
sourcePosition
,
targetPosition
,
targetIndex
);
}
// Copy: just open editor at target index
else
{
this
.
editorService
.
openEditor
(
TabsTitleControl
.
draggedEditor
.
editor
,
EditorOptions
.
create
({
pinned
:
true
,
index
:
targetIndex
}),
targetPosition
).
done
(
null
,
errors
.
onUnexpectedError
);
this
.
editorService
.
openEditor
(
draggedEditor
.
editor
,
EditorOptions
.
create
({
pinned
:
true
,
index
:
targetIndex
}),
targetPosition
).
done
(
null
,
errors
.
onUnexpectedError
);
}
this
.
onEditorDragEnd
();
}
// External DND
...
...
src/vs/workbench/browser/parts/editor/titleControl.ts
浏览文件 @
f28b0590
...
...
@@ -51,6 +51,9 @@ export interface ITitleAreaControl {
}
export
abstract
class
TitleControl
{
private
static
draggedEditor
:
IEditorIdentifier
;
protected
stacks
:
IEditorStacksModel
;
protected
context
:
IEditorGroup
;
protected
toDispose
:
IDisposable
[];
...
...
@@ -98,6 +101,18 @@ export abstract class TitleControl {
this
.
registerListeners
();
}
public
static
getDraggedEditor
():
IEditorIdentifier
{
return
TitleControl
.
draggedEditor
;
}
protected
onEditorDragStart
(
editor
:
IEditorIdentifier
):
void
{
TitleControl
.
draggedEditor
=
editor
;
}
protected
onEditorDragEnd
():
void
{
TitleControl
.
draggedEditor
=
void
0
;
}
private
registerListeners
():
void
{
this
.
toDispose
.
push
(
this
.
configurationService
.
onDidUpdateConfiguration
(
e
=>
this
.
onConfigurationUpdated
(
e
.
config
)));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录