Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
c87f5e16
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,发现更多精彩内容 >>
提交
c87f5e16
编写于
12月 26, 2016
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#1073 Clipboard model enhancement
上级
699f502c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
180 addition
and
87 deletion
+180
-87
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ClipboardData.java
....dbeaver.core/src/org/jkiss/dbeaver/ui/ClipboardData.java
+64
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/IClipboardSource.java
...eaver.core/src/org/jkiss/dbeaver/ui/IClipboardSource.java
+28
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/navigator/NavigatorHandlerCopyAbstract.java
...er/ui/actions/navigator/NavigatorHandlerCopyAbstract.java
+78
-83
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java
...jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java
+10
-4
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ClipboardData.java
0 → 100644
浏览文件 @
c87f5e16
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.swt.dnd.Clipboard
;
import
org.eclipse.swt.dnd.Transfer
;
import
org.eclipse.swt.widgets.Display
;
import
java.util.IdentityHashMap
;
import
java.util.Map
;
/**
* Clipboard data
*/
public
class
ClipboardData
{
private
final
Map
<
Transfer
,
Object
>
formats
=
new
IdentityHashMap
<>();
public
ClipboardData
()
{
}
public
boolean
hasData
()
{
return
!
formats
.
isEmpty
();
}
public
void
addTransfer
(
Transfer
transfer
,
Object
data
)
{
formats
.
put
(
transfer
,
data
);
}
public
boolean
hasTransfer
(
Transfer
transfer
)
{
return
formats
.
containsKey
(
transfer
);
}
public
void
pushToClipboard
(
Display
display
)
{
final
int
size
=
formats
.
size
();
final
Transfer
[]
transfers
=
formats
.
keySet
().
toArray
(
new
Transfer
[
size
]);
final
Object
[]
objects
=
formats
.
values
().
toArray
(
new
Object
[
size
]);
Clipboard
clipboard
=
new
Clipboard
(
display
);
try
{
clipboard
.
setContents
(
objects
,
transfers
);
}
finally
{
clipboard
.
dispose
();
}
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/IClipboardSource.java
0 → 100644
浏览文件 @
c87f5e16
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package
org.jkiss.dbeaver.ui
;
/**
* IClipboardSource
*/
public
interface
IClipboardSource
{
void
addClipboardData
(
ClipboardData
clipboardData
);
}
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/navigator/NavigatorHandlerCopyAbstract.java
浏览文件 @
c87f5e16
...
...
@@ -23,10 +23,9 @@ import org.eclipse.core.commands.ExecutionException;
import
org.eclipse.core.resources.IFile
;
import
org.eclipse.jface.viewers.ISelection
;
import
org.eclipse.jface.viewers.IStructuredSelection
;
import
org.eclipse.swt.dnd.Clipboard
;
import
org.eclipse.swt.dnd.FileTransfer
;
import
org.eclipse.swt.dnd.TextTransfer
;
import
org.eclipse.
swt.dnd.Transfer
;
import
org.eclipse.
ui.IWorkbenchPart
;
import
org.eclipse.ui.IWorkbenchWindow
;
import
org.eclipse.ui.commands.IElementUpdater
;
import
org.eclipse.ui.handlers.HandlerUtil
;
...
...
@@ -36,6 +35,8 @@ import org.jkiss.dbeaver.model.DBPNamedObject;
import
org.jkiss.dbeaver.model.navigator.DBNDatabaseNode
;
import
org.jkiss.dbeaver.model.navigator.DBNNode
;
import
org.jkiss.dbeaver.model.navigator.DBNResource
;
import
org.jkiss.dbeaver.ui.ClipboardData
;
import
org.jkiss.dbeaver.ui.IClipboardSource
;
import
org.jkiss.dbeaver.ui.actions.ObjectPropertyTester
;
import
org.jkiss.dbeaver.ui.dnd.DatabaseObjectTransfer
;
import
org.jkiss.dbeaver.ui.dnd.TreeNodeTransfer
;
...
...
@@ -57,77 +58,84 @@ public abstract class NavigatorHandlerCopyAbstract extends AbstractHandler imple
public
Object
execute
(
ExecutionEvent
event
)
throws
ExecutionException
{
final
ISelection
selection
=
HandlerUtil
.
getCurrentSelection
(
event
);
final
IWorkbenchWindow
workbenchWindow
=
HandlerUtil
.
getActiveWorkbenchWindow
(
event
);
if
(
selection
instanceof
IStructuredSelection
)
{
final
IStructuredSelection
structSelection
=
(
IStructuredSelection
)
selection
;
final
IWorkbenchPart
activePart
=
HandlerUtil
.
getActivePart
(
event
);
DBeaverUI
.
syncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
List
<
DBNNode
>
selectedNodes
=
new
ArrayList
<>();
List
<
DBPNamedObject
>
selectedObjects
=
new
ArrayList
<>();
List
<
String
>
selectedFiles
=
new
ArrayList
<>();
StringBuilder
buf
=
new
StringBuilder
();
for
(
Iterator
<?>
iter
=
structSelection
.
iterator
();
iter
.
hasNext
();
)
{
Object
object
=
iter
.
next
();
String
objectValue
=
getObjectDisplayString
(
object
);
if
(
objectValue
==
null
)
{
continue
;
}
DBNNode
node
=
RuntimeUtils
.
getObjectAdapter
(
object
,
DBNNode
.
class
);
DBPNamedObject
dbObject
=
null
;
if
(
node
instanceof
DBNDatabaseNode
)
{
dbObject
=
((
DBNDatabaseNode
)
node
).
getObject
();
}
if
(
dbObject
==
null
)
{
dbObject
=
RuntimeUtils
.
getObjectAdapter
(
object
,
DBPNamedObject
.
class
);
}
if
(
node
!=
null
)
{
selectedNodes
.
add
(
node
);
}
if
(
node
instanceof
DBNResource
&&
((
DBNResource
)
node
).
getResource
()
instanceof
IFile
)
{
final
IFile
file
=
(
IFile
)
((
DBNResource
)
node
).
getResource
();
selectedFiles
.
add
(
file
.
getLocation
().
makeAbsolute
().
toFile
().
getAbsolutePath
());
}
if
(
dbObject
!=
null
)
{
selectedObjects
.
add
(
dbObject
);
}
if
(
buf
.
length
()
>
0
)
{
buf
.
append
(
GeneralUtils
.
getDefaultLineSeparator
());
}
buf
.
append
(
objectValue
);
}
{
List
<
Object
>
dataList
=
new
ArrayList
<>();
List
<
Transfer
>
dataTypeList
=
new
ArrayList
<>();
if
(
buf
.
length
()
>
0
)
{
dataList
.
add
(
buf
.
toString
());
dataTypeList
.
add
(
TextTransfer
.
getInstance
());
}
if
(!
selectedNodes
.
isEmpty
())
{
dataList
.
add
(
selectedNodes
);
dataTypeList
.
add
(
TreeNodeTransfer
.
getInstance
());
}
if
(!
selectedObjects
.
isEmpty
())
{
dataList
.
add
(
selectedObjects
);
dataTypeList
.
add
(
DatabaseObjectTransfer
.
getInstance
());
}
if
(!
selectedFiles
.
isEmpty
())
{
dataList
.
add
(
selectedFiles
.
toArray
(
new
String
[
selectedFiles
.
size
()]));
dataTypeList
.
add
(
FileTransfer
.
getInstance
());
}
if
(!
dataList
.
isEmpty
())
{
Clipboard
clipboard
=
new
Clipboard
(
workbenchWindow
.
getShell
().
getDisplay
());
clipboard
.
setContents
(
dataList
.
toArray
(),
dataTypeList
.
toArray
(
new
Transfer
[
dataTypeList
.
size
()]));
clipboard
.
dispose
();
ObjectPropertyTester
.
firePropertyChange
(
ObjectPropertyTester
.
PROP_CAN_PASTE
);
}
DBeaverUI
.
syncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
copySelection
(
workbenchWindow
,
activePart
,
selection
);
}
});
return
null
;
}
private
void
copySelection
(
IWorkbenchWindow
workbenchWindow
,
IWorkbenchPart
activePart
,
ISelection
selection
)
{
ClipboardData
clipboardData
=
new
ClipboardData
();
{
IClipboardSource
clipboardSource
=
activePart
.
getAdapter
(
IClipboardSource
.
class
);
if
(
clipboardSource
!=
null
)
{
clipboardSource
.
addClipboardData
(
clipboardData
);
}
}
if
(
selection
instanceof
IStructuredSelection
&&
!
selection
.
isEmpty
())
{
final
IStructuredSelection
structSelection
=
(
IStructuredSelection
)
selection
;
List
<
DBNNode
>
selectedNodes
=
new
ArrayList
<>();
List
<
DBPNamedObject
>
selectedObjects
=
new
ArrayList
<>();
List
<
String
>
selectedFiles
=
new
ArrayList
<>();
StringBuilder
buf
=
new
StringBuilder
();
for
(
Iterator
<?>
iter
=
structSelection
.
iterator
();
iter
.
hasNext
();
)
{
Object
object
=
iter
.
next
();
String
objectValue
=
getObjectDisplayString
(
object
);
if
(
objectValue
==
null
)
{
continue
;
}
DBNNode
node
=
RuntimeUtils
.
getObjectAdapter
(
object
,
DBNNode
.
class
);
DBPNamedObject
dbObject
=
null
;
if
(
node
instanceof
DBNDatabaseNode
)
{
dbObject
=
((
DBNDatabaseNode
)
node
).
getObject
();
}
if
(
dbObject
==
null
)
{
dbObject
=
RuntimeUtils
.
getObjectAdapter
(
object
,
DBPNamedObject
.
class
);
}
if
(
node
!=
null
)
{
selectedNodes
.
add
(
node
);
}
if
(
node
instanceof
DBNResource
&&
((
DBNResource
)
node
).
getResource
()
instanceof
IFile
)
{
final
IFile
file
=
(
IFile
)
((
DBNResource
)
node
).
getResource
();
if
(
file
!=
null
)
{
selectedFiles
.
add
(
file
.
getLocation
().
makeAbsolute
().
toFile
().
getAbsolutePath
());
}
}
});
if
(
dbObject
!=
null
)
{
selectedObjects
.
add
(
dbObject
);
}
if
(
buf
.
length
()
>
0
)
{
buf
.
append
(
GeneralUtils
.
getDefaultLineSeparator
());
}
buf
.
append
(
objectValue
);
}
{
if
(
buf
.
length
()
>
0
&&
!
clipboardData
.
hasTransfer
(
TextTransfer
.
getInstance
()))
{
clipboardData
.
addTransfer
(
TextTransfer
.
getInstance
(),
buf
.
toString
());
}
if
(!
selectedNodes
.
isEmpty
()
&&
!
clipboardData
.
hasTransfer
(
TreeNodeTransfer
.
getInstance
()))
{
clipboardData
.
addTransfer
(
TreeNodeTransfer
.
getInstance
(),
selectedNodes
);
}
if
(!
selectedObjects
.
isEmpty
()
&&
!
clipboardData
.
hasTransfer
(
DatabaseObjectTransfer
.
getInstance
()))
{
clipboardData
.
addTransfer
(
DatabaseObjectTransfer
.
getInstance
(),
selectedObjects
);
}
if
(!
selectedFiles
.
isEmpty
()
&&
!
clipboardData
.
hasTransfer
(
FileTransfer
.
getInstance
()))
{
clipboardData
.
addTransfer
(
FileTransfer
.
getInstance
(),
selectedFiles
.
toArray
(
new
String
[
selectedFiles
.
size
()]));
}
}
}
if
(
clipboardData
.
hasData
())
{
clipboardData
.
pushToClipboard
(
workbenchWindow
.
getShell
().
getDisplay
());
ObjectPropertyTester
.
firePropertyChange
(
ObjectPropertyTester
.
PROP_CAN_PASTE
);
}
return
null
;
}
protected
abstract
String
getObjectDisplayString
(
Object
object
);
...
...
@@ -135,23 +143,10 @@ public abstract class NavigatorHandlerCopyAbstract extends AbstractHandler imple
protected
abstract
String
getSelectionTitle
(
IStructuredSelection
selection
);
@Override
public
void
updateElement
(
UIElement
element
,
Map
parameters
)
{
public
void
updateElement
(
UIElement
element
,
Map
parameters
)
{
if
(!
NavigatorHandlerObjectBase
.
updateUI
)
{
return
;
}
/*
final ISelectionProvider selectionProvider = UIUtils.getSelectionProvider(element.getServiceLocator());
if (selectionProvider != null) {
ISelection selection = selectionProvider.getSelection();
if (selection instanceof IStructuredSelection) {
String label = getSelectionTitle((IStructuredSelection)selection);
if (label != null) {
element.setText(label);
}
}
}
*/
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ObjectListControl.java
浏览文件 @
c87f5e16
...
...
@@ -45,9 +45,7 @@ import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import
org.jkiss.dbeaver.model.runtime.AbstractJob
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.runtime.properties.*
;
import
org.jkiss.dbeaver.ui.DBeaverIcons
;
import
org.jkiss.dbeaver.ui.LoadingJob
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.*
;
import
org.jkiss.dbeaver.ui.controls.ViewerColumnController
;
import
org.jkiss.dbeaver.ui.controls.ObjectViewerRenderer
;
import
org.jkiss.dbeaver.ui.controls.ProgressPageControl
;
...
...
@@ -62,7 +60,7 @@ import java.util.List;
/**
* ObjectListControl
*/
public
abstract
class
ObjectListControl
<
OBJECT_TYPE
>
extends
ProgressPageControl
{
public
abstract
class
ObjectListControl
<
OBJECT_TYPE
>
extends
ProgressPageControl
implements
IClipboardSource
{
private
static
final
Log
log
=
Log
.
getLog
(
ObjectListControl
.
class
);
private
final
static
LazyValue
DEF_LAZY_VALUE
=
new
LazyValue
(
"..."
);
//$NON-NLS-1$
...
...
@@ -784,6 +782,14 @@ public abstract class ObjectListControl<OBJECT_TYPE> extends ProgressPageControl
this
.
focusColumn
=
objectColumn
;
}
//////////////////////////////////////////////////////
// Clipboard
@Override
public
void
addClipboardData
(
ClipboardData
clipboardData
)
{
// Cope selected cells
}
//////////////////////////////////////////////////////
// Editor activation
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录