Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
63a35941
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
63a35941
编写于
8月 13, 2017
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#1577 RSV: drag-n-drop support
Former-commit-id:
f8c8c8fe
上级
1b20aad1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
169 addition
and
38 deletion
+169
-38
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/lightgrid/LightGrid.java
...rc/org/jkiss/dbeaver/ui/controls/lightgrid/LightGrid.java
+169
-38
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/lightgrid/LightGrid.java
浏览文件 @
63a35941
...
...
@@ -21,6 +21,7 @@ import org.eclipse.core.runtime.IStatus;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.jface.resource.JFaceColors
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.dnd.*
;
import
org.eclipse.swt.events.*
;
import
org.eclipse.swt.graphics.*
;
import
org.eclipse.swt.widgets.*
;
...
...
@@ -29,6 +30,8 @@ import org.jkiss.code.NotNull;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.dnd.LocalObjectTransfer
;
import
org.jkiss.utils.ArrayUtils
;
import
org.jkiss.utils.CommonUtils
;
import
org.jkiss.utils.IntKeyMap
;
...
...
@@ -160,6 +163,8 @@ public abstract class LightGrid extends Canvas {
private
boolean
cellRowSelectedOnLastMouseDown
;
private
boolean
cellColumnSelectedOnLastMouseDown
;
private
boolean
headerColumnDragStarted
;
private
GridColumn
shiftSelectionAnchorColumn
;
private
GridColumn
focusColumn
;
...
...
@@ -224,6 +229,7 @@ public abstract class LightGrid extends Canvas {
private
int
resizingColumnStartWidth
=
0
;
private
int
hoveringItem
;
private
GridColumn
hoveringColumn
;
private
GridColumn
draggingColumn
;
/**
* String-based detail of what is being hovered over in a cell. This allows
...
...
@@ -310,7 +316,7 @@ public abstract class LightGrid extends Canvas {
*/
private
String
displayedToolTipText
;
private
boolean
hoveringOn
Selection
DragArea
=
false
;
private
boolean
hoveringOn
Header
DragArea
=
false
;
/**
* A range of rows in a <code>Grid</code>.
...
...
@@ -415,7 +421,8 @@ public abstract class LightGrid extends Canvas {
recalculateSizes
();
setDragDetect
(
false
);
addDragAndDropSupport
();
setDragDetect
(
true
);
}
@NotNull
...
...
@@ -1983,6 +1990,12 @@ public abstract class LightGrid extends Canvas {
}
hoveringOnColumnResizer
=
overResizer
;
}
if
(
hoveringOnHeader
&&
!
overSorter
&&
!
overResizer
)
{
hoveringOnHeaderDragArea
=
true
;
}
else
{
hoveringOnHeaderDragArea
=
false
;
}
}
/**
...
...
@@ -2761,12 +2774,18 @@ public abstract class LightGrid extends Canvas {
int
row
=
getRow
(
point
);
if
(
isListening
(
SWT
.
DragDetect
))
{
if
(
hoveringOnSelectionDragArea
)
{
if
(
dragDetect
(
e
))
{
return
;
if
(
hoveringOnHeaderDragArea
)
{
if
(
e
.
button
==
1
&&
(
e
.
stateMask
&
SWT
.
MOD3
)
!=
0
)
{
if
(
dragDetect
(
e
))
{
// Drag and drop started
headerColumnDragStarted
=
true
;
return
;
}
}
}
}
headerColumnDragStarted
=
false
;
GridColumn
col
=
null
;
if
(
row
>=
0
)
{
...
...
@@ -4071,39 +4090,6 @@ public abstract class LightGrid extends Canvas {
normalFont
=
font
;
}
/**
* Determines if the mouse is hovering on the selection drag area and changes the
* pointer and sets field appropriately.
* <p/>
* Note: The 'selection drag area' is that part of the selection,
* on which a drag event can be initiated. This is either the border
* of the selection (i.e. a cell border between a selected and a non-selected
* cell) or the complete selection (i.e. anywhere on a selected cell).
*/
private
boolean
handleHoverOnSelectionDragArea
(
int
x
,
int
y
)
{
boolean
over
=
false
;
// Point inSelection = null;
if
((!
rowHeaderVisible
||
x
>
rowHeaderWidth
-
SELECTION_DRAG_BORDER_THRESHOLD
)
&&
(!
columnHeadersVisible
||
y
>
headerHeight
-
SELECTION_DRAG_BORDER_THRESHOLD
))
{
// not on a header
// drag area is the entire selection
{
Point
p
=
new
Point
(
x
,
y
);
GridPos
cell
=
getCell
(
p
);
over
=
cell
!=
null
&&
isCellSelected
(
cell
);
}
}
if
(
over
!=
hoveringOnSelectionDragArea
)
{
hoveringOnSelectionDragArea
=
over
;
}
return
over
;
}
public
String
getCellText
(
Object
colElement
,
Object
rowElement
)
{
String
text
=
getContentProvider
().
getCellText
(
colElement
,
rowElement
);
...
...
@@ -4273,6 +4259,151 @@ public abstract class LightGrid extends Canvas {
}
}
/////////////////////////////////////////////////////////////////////////////////
// DnD
/////////////////////////////////////////////////////////////////////////////////
public
void
addDragAndDropSupport
()
{
int
operations
=
DND
.
DROP_MOVE
;
final
DragSource
source
=
new
DragSource
(
this
,
operations
);
source
.
setTransfer
(
new
Transfer
[]
{
GridColumnTransfer
.
INSTANCE
});
source
.
addDragListener
(
new
DragSourceListener
()
{
private
Image
dragImage
;
@Override
public
void
dragStart
(
DragSourceEvent
event
)
{
if
(
hoveringColumn
==
null
||
!
headerColumnDragStarted
)
{
event
.
doit
=
false
;
}
else
{
draggingColumn
=
hoveringColumn
;
Rectangle
columnBounds
=
hoveringColumn
.
getBounds
();
GC
gc
=
new
GC
(
LightGrid
.
this
);
dragImage
=
new
Image
(
Display
.
getCurrent
(),
columnBounds
.
width
,
columnBounds
.
height
);
gc
.
copyArea
(
dragImage
,
columnBounds
.
x
,
columnBounds
.
y
);
event
.
image
=
dragImage
;
gc
.
dispose
();
}
}
@Override
public
void
dragSetData
(
DragSourceEvent
event
)
{
}
@Override
public
void
dragFinished
(
DragSourceEvent
event
)
{
draggingColumn
=
null
;
if
(
dragImage
!=
null
)
{
UIUtils
.
dispose
(
dragImage
);
dragImage
=
null
;
}
}
});
DropTarget
dropTarget
=
new
DropTarget
(
this
,
DND
.
DROP_MOVE
);
dropTarget
.
setTransfer
(
new
Transfer
[]
{
GridColumnTransfer
.
INSTANCE
});
dropTarget
.
addDropListener
(
new
DropTargetListener
()
{
@Override
public
void
dragEnter
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
}
@Override
public
void
dragLeave
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
}
@Override
public
void
dragOperationChanged
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
}
@Override
public
void
dragOver
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
}
@Override
public
void
drop
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
if
(
event
.
detail
==
DND
.
DROP_MOVE
)
{
moveColumns
(
event
);
}
}
@Override
public
void
dropAccept
(
DropTargetEvent
event
)
{
handleDragEvent
(
event
);
}
private
void
handleDragEvent
(
DropTargetEvent
event
)
{
event
.
detail
=
isDropSupported
(
event
)
?
DND
.
DROP_MOVE
:
DND
.
DROP_NONE
;
event
.
feedback
=
DND
.
FEEDBACK_SELECT
;
}
private
boolean
isDropSupported
(
DropTargetEvent
event
)
{
if
(!
hoveringOnHeaderDragArea
)
{
return
false
;
}
if
(
draggingColumn
==
null
||
draggingColumn
.
getGrid
()
!=
LightGrid
.
this
)
{
return
false
;
}
GridColumn
overColumn
=
getOverColumn
(
event
);
return
draggingColumn
!=
overColumn
;
}
private
GridColumn
getOverColumn
(
DropTargetEvent
event
)
{
Point
dragPoint
=
new
Point
(
event
.
x
,
event
.
y
);
dragPoint
=
getDisplay
().
map
(
null
,
LightGrid
.
this
,
dragPoint
);
return
getColumn
(
dragPoint
);
}
private
void
moveColumns
(
DropTargetEvent
event
)
{
GridColumn
overColumn
=
getOverColumn
(
event
);
if
(
draggingColumn
==
null
||
draggingColumn
==
overColumn
)
{
return
;
}
System
.
out
.
println
(
"DROP "
+
draggingColumn
.
getElement
()
+
" over "
+
overColumn
.
getElement
());
}
});
}
public
final
static
class
GridColumnTransfer
extends
LocalObjectTransfer
<
GridColumn
>
{
private
static
final
GridColumnTransfer
INSTANCE
=
new
GridColumnTransfer
();
private
static
final
String
TYPE_NAME
=
"LighGrid.GridColumn Transfer"
+
System
.
currentTimeMillis
()
+
":"
+
INSTANCE
.
hashCode
();
//$NON-NLS-1$
private
static
final
int
TYPEID
=
registerType
(
TYPE_NAME
);
private
GridColumnTransfer
()
{
}
@Override
protected
int
[]
getTypeIds
()
{
return
new
int
[]
{
TYPEID
};
}
@Override
protected
String
[]
getTypeNames
()
{
return
new
String
[]
{
TYPE_NAME
};
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录