Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
e4175b34
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
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,发现更多精彩内容 >>
提交
e4175b34
编写于
5月 29, 2018
作者:
S
serge-rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
UI classes refactoring
Former-commit-id:
eea126f3
上级
ebc5afcc
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
1352 addition
and
1356 deletion
+1352
-1356
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverUI.java
...ss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverUI.java
+1
-1
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ImageUtils.java
...iss.dbeaver.core/src/org/jkiss/dbeaver/ui/ImageUtils.java
+0
-4
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/AbstractUIJob.java
...ss.dbeaver.ui/src/org/jkiss/dbeaver/ui/AbstractUIJob.java
+45
-45
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ActionUtils.java
...kiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ActionUtils.java
+305
-305
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ClipboardData.java
...ss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ClipboardData.java
+0
-0
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/CompositeSelectionProvider.java
.../src/org/jkiss/dbeaver/ui/CompositeSelectionProvider.java
+122
-122
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/CustomSelectionProvider.java
....ui/src/org/jkiss/dbeaver/ui/CustomSelectionProvider.java
+64
-64
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/DBIconBinary.java
...iss.dbeaver.ui/src/org/jkiss/dbeaver/ui/DBIconBinary.java
+66
-66
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/DBeaverIcons.java
...iss.dbeaver.ui/src/org/jkiss/dbeaver/ui/DBeaverIcons.java
+220
-220
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/DynamicFindReplaceTarget.java
...ui/src/org/jkiss/dbeaver/ui/DynamicFindReplaceTarget.java
+184
-184
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/OverlayImageDescriptor.java
...r.ui/src/org/jkiss/dbeaver/ui/OverlayImageDescriptor.java
+0
-0
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/OverlayImageDescriptorLegacy.java
...rc/org/jkiss/dbeaver/ui/OverlayImageDescriptorLegacy.java
+0
-0
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ProxyPageSite.java
...ss.dbeaver.ui/src/org/jkiss/dbeaver/ui/ProxyPageSite.java
+102
-102
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/SharedTextColors.java
...dbeaver.ui/src/org/jkiss/dbeaver/ui/SharedTextColors.java
+120
-120
plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/TableToolTip.java
...iss.dbeaver.ui/src/org/jkiss/dbeaver/ui/TableToolTip.java
+123
-123
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverUI.java
浏览文件 @
e4175b34
...
...
@@ -242,7 +242,7 @@ public class DBeaverUI implements DBPPlatformUI {
*/
public
static
void
runInProgressService
(
final
DBRRunnableWithProgress
runnable
)
throws
InvocationTargetException
,
InterruptedException
{
getDefaultRunnableContext
().
run
(
true
,
true
,
runnable
:
:
run
);
getDefaultRunnableContext
().
run
(
true
,
true
,
runnable
);
}
/**
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ImageUtils.java
浏览文件 @
e4175b34
...
...
@@ -20,11 +20,7 @@ package org.jkiss.dbeaver.ui;
import
org.eclipse.core.runtime.Assert
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.graphics.*
;
import
org.eclipse.swt.widgets.Button
;
import
org.eclipse.swt.widgets.Control
;
import
org.eclipse.swt.widgets.Shell
;
import
org.jkiss.dbeaver.core.DBeaverCore
;
import
org.jkiss.dbeaver.core.DBeaverUI
;
/**
* Image-related utils
...
...
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/AbstractUIJob.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/AbstractUIJob.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.ui.progress.UIJob
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.utils.RuntimeUtils
;
/**
* Abstract Database Job
*/
public
abstract
class
AbstractUIJob
extends
UIJob
{
static
protected
final
Log
log
=
Log
.
getLog
(
AbstractUIJob
.
class
);
protected
AbstractUIJob
(
String
name
)
{
super
(
name
);
}
@Override
public
IStatus
runInUIThread
(
IProgressMonitor
monitor
)
{
return
this
.
runInUIThread
(
RuntimeUtils
.
makeMonitor
(
monitor
));
}
protected
abstract
IStatus
runInUIThread
(
DBRProgressMonitor
monitor
);
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.ui.progress.UIJob
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.utils.RuntimeUtils
;
/**
* Abstract Database Job
*/
public
abstract
class
AbstractUIJob
extends
UIJob
{
static
protected
final
Log
log
=
Log
.
getLog
(
AbstractUIJob
.
class
);
protected
AbstractUIJob
(
String
name
)
{
super
(
name
);
}
@Override
public
IStatus
runInUIThread
(
IProgressMonitor
monitor
)
{
return
this
.
runInUIThread
(
RuntimeUtils
.
makeMonitor
(
monitor
));
}
protected
abstract
IStatus
runInUIThread
(
DBRProgressMonitor
monitor
);
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/ActionUtils.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/ActionUtils.java
浏览文件 @
e4175b34
此差异已折叠。
点击以展开。
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/ClipboardData.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/ClipboardData.java
浏览文件 @
e4175b34
文件已移动
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/CompositeSelectionProvider.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/CompositeSelectionProvider.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.viewers.*
;
import
org.eclipse.swt.events.FocusAdapter
;
import
org.eclipse.swt.events.FocusEvent
;
import
org.eclipse.swt.widgets.Control
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Composite selection provider
*/
public
class
CompositeSelectionProvider
implements
ISelectionProvider
{
private
List
<
ISelectionChangedListener
>
listeners
=
new
ArrayList
<>();
private
ISelectionProvider
provider
;
private
ISelection
selection
=
StructuredSelection
.
EMPTY
;
public
void
trackProvider
(
final
Control
control
,
final
ISelectionProvider
selectionProvider
)
{
control
.
addFocusListener
(
new
FocusAdapter
()
{
@Override
public
void
focusGained
(
FocusEvent
e
)
{
setProvider
(
selectionProvider
);
}
});
}
@Override
public
void
addSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
add
(
listener
);
}
@Override
public
void
removeSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
remove
(
listener
);
}
@Override
public
ISelection
getSelection
()
{
ISelectionProvider
cp
=
getProvider
();
if
(
cp
!=
null
)
{
return
cp
.
getSelection
();
}
else
{
return
selection
;
}
}
@Override
public
void
setSelection
(
ISelection
selection
)
{
ISelectionProvider
cp
=
getProvider
();
if
(
cp
!=
null
)
{
cp
.
setSelection
(
selection
);
}
else
{
this
.
selection
=
selection
;
if
(!
CommonUtils
.
isEmpty
(
listeners
))
{
SelectionChangedEvent
event
=
new
SelectionChangedEvent
(
this
,
selection
);
for
(
ISelectionChangedListener
listener
:
listeners
)
{
listener
.
selectionChanged
(
event
);
}
}
}
}
public
ISelectionProvider
getProvider
()
{
return
provider
;
}
public
void
setProvider
(
ISelectionProvider
newProvider
)
{
if
(
this
.
provider
!=
newProvider
){
ISelection
newSelection
=
null
;
if
(!
CommonUtils
.
isEmpty
(
listeners
))
{
if
(
this
.
provider
!=
null
){
for
(
ISelectionChangedListener
listener
:
listeners
)
{
this
.
provider
.
removeSelectionChangedListener
(
listener
);
}
}
if
(
newProvider
!=
null
)
{
for
(
ISelectionChangedListener
listener
:
listeners
)
{
newProvider
.
addSelectionChangedListener
(
listener
);
}
newSelection
=
newProvider
.
getSelection
();
}
else
{
newSelection
=
this
.
selection
;
}
}
this
.
provider
=
newProvider
;
if
(
newSelection
!=
null
){
//force a selection change event propagation
setSelection
(
newSelection
);
}
}
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.viewers.*
;
import
org.eclipse.swt.events.FocusAdapter
;
import
org.eclipse.swt.events.FocusEvent
;
import
org.eclipse.swt.widgets.Control
;
import
org.jkiss.utils.CommonUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Composite selection provider
*/
public
class
CompositeSelectionProvider
implements
ISelectionProvider
{
private
List
<
ISelectionChangedListener
>
listeners
=
new
ArrayList
<>();
private
ISelectionProvider
provider
;
private
ISelection
selection
=
StructuredSelection
.
EMPTY
;
public
void
trackProvider
(
final
Control
control
,
final
ISelectionProvider
selectionProvider
)
{
control
.
addFocusListener
(
new
FocusAdapter
()
{
@Override
public
void
focusGained
(
FocusEvent
e
)
{
setProvider
(
selectionProvider
);
}
});
}
@Override
public
void
addSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
add
(
listener
);
}
@Override
public
void
removeSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
remove
(
listener
);
}
@Override
public
ISelection
getSelection
()
{
ISelectionProvider
cp
=
getProvider
();
if
(
cp
!=
null
)
{
return
cp
.
getSelection
();
}
else
{
return
selection
;
}
}
@Override
public
void
setSelection
(
ISelection
selection
)
{
ISelectionProvider
cp
=
getProvider
();
if
(
cp
!=
null
)
{
cp
.
setSelection
(
selection
);
}
else
{
this
.
selection
=
selection
;
if
(!
CommonUtils
.
isEmpty
(
listeners
))
{
SelectionChangedEvent
event
=
new
SelectionChangedEvent
(
this
,
selection
);
for
(
ISelectionChangedListener
listener
:
listeners
)
{
listener
.
selectionChanged
(
event
);
}
}
}
}
public
ISelectionProvider
getProvider
()
{
return
provider
;
}
public
void
setProvider
(
ISelectionProvider
newProvider
)
{
if
(
this
.
provider
!=
newProvider
){
ISelection
newSelection
=
null
;
if
(!
CommonUtils
.
isEmpty
(
listeners
))
{
if
(
this
.
provider
!=
null
){
for
(
ISelectionChangedListener
listener
:
listeners
)
{
this
.
provider
.
removeSelectionChangedListener
(
listener
);
}
}
if
(
newProvider
!=
null
)
{
for
(
ISelectionChangedListener
listener
:
listeners
)
{
newProvider
.
addSelectionChangedListener
(
listener
);
}
newSelection
=
newProvider
.
getSelection
();
}
else
{
newSelection
=
this
.
selection
;
}
}
this
.
provider
=
newProvider
;
if
(
newSelection
!=
null
){
//force a selection change event propagation
setSelection
(
newSelection
);
}
}
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/CustomSelectionProvider.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/CustomSelectionProvider.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.viewers.*
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Composite selection provider
*/
public
class
CustomSelectionProvider
implements
ISelectionProvider
{
private
List
<
ISelectionChangedListener
>
listeners
=
new
ArrayList
<>();
private
ISelection
selection
;
public
CustomSelectionProvider
()
{
selection
=
new
StructuredSelection
();
}
@Override
public
void
addSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
add
(
listener
);
}
@Override
public
void
removeSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
remove
(
listener
);
}
@Override
public
ISelection
getSelection
()
{
return
selection
;
}
@Override
public
void
setSelection
(
ISelection
selection
)
{
this
.
selection
=
selection
;
for
(
ISelectionChangedListener
listener
:
listeners
)
{
listener
.
selectionChanged
(
new
SelectionChangedEvent
(
this
,
selection
));
}
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.viewers.*
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Composite selection provider
*/
public
class
CustomSelectionProvider
implements
ISelectionProvider
{
private
List
<
ISelectionChangedListener
>
listeners
=
new
ArrayList
<>();
private
ISelection
selection
;
public
CustomSelectionProvider
()
{
selection
=
new
StructuredSelection
();
}
@Override
public
void
addSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
add
(
listener
);
}
@Override
public
void
removeSelectionChangedListener
(
ISelectionChangedListener
listener
)
{
listeners
.
remove
(
listener
);
}
@Override
public
ISelection
getSelection
()
{
return
selection
;
}
@Override
public
void
setSelection
(
ISelection
selection
)
{
this
.
selection
=
selection
;
for
(
ISelectionChangedListener
listener
:
listeners
)
{
listener
.
selectionChanged
(
new
SelectionChangedEvent
(
this
,
selection
));
}
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/DBIconBinary.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/DBIconBinary.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.ImageDescriptor
;
import
org.eclipse.swt.graphics.Image
;
import
org.eclipse.swt.graphics.ImageData
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
org.jkiss.utils.CommonUtils
;
/**
* Image with binary data
*/
public
class
DBIconBinary
implements
DBPImage
{
private
final
String
location
;
private
Image
image
;
private
ImageDescriptor
imageDescriptor
;
public
DBIconBinary
(
final
String
location
,
final
ImageData
data
)
{
this
.
location
=
"binary:"
+
location
;
this
.
image
=
new
Image
(
null
,
data
);
imageDescriptor
=
ImageDescriptor
.
createFromImageData
(
data
);
}
public
Image
getImage
()
{
return
image
;
}
public
ImageDescriptor
getImageDescriptor
()
{
return
imageDescriptor
;
}
@Override
public
String
getLocation
()
{
return
location
;
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
instanceof
DBIconBinary
)
{
return
CommonUtils
.
equalObjects
(
location
,
((
DBIconBinary
)
obj
).
location
);
}
return
false
;
}
@Override
public
String
toString
()
{
return
location
;
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.ImageDescriptor
;
import
org.eclipse.swt.graphics.Image
;
import
org.eclipse.swt.graphics.ImageData
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
org.jkiss.utils.CommonUtils
;
/**
* Image with binary data
*/
public
class
DBIconBinary
implements
DBPImage
{
private
final
String
location
;
private
Image
image
;
private
ImageDescriptor
imageDescriptor
;
public
DBIconBinary
(
final
String
location
,
final
ImageData
data
)
{
this
.
location
=
"binary:"
+
location
;
this
.
image
=
new
Image
(
null
,
data
);
imageDescriptor
=
ImageDescriptor
.
createFromImageData
(
data
);
}
public
Image
getImage
()
{
return
image
;
}
public
ImageDescriptor
getImageDescriptor
()
{
return
imageDescriptor
;
}
@Override
public
String
getLocation
()
{
return
location
;
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
instanceof
DBIconBinary
)
{
return
CommonUtils
.
equalObjects
(
location
,
((
DBIconBinary
)
obj
).
location
);
}
return
false
;
}
@Override
public
String
toString
()
{
return
location
;
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/DBeaverIcons.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/DBeaverIcons.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.ImageDescriptor
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.GC
;
import
org.eclipse.swt.graphics.Image
;
import
org.eclipse.swt.graphics.ImageData
;
import
org.eclipse.swt.widgets.Display
;
import
org.jkiss.code.NotNull
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBIconComposite
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
java.net.URL
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* DBeaverIcons
*/
public
class
DBeaverIcons
{
private
static
final
Log
log
=
Log
.
getLog
(
DBeaverIcons
.
class
);
private
static
final
boolean
useLegacyOverlay
;
static
{
boolean
hasCachedImageDataProvider
;
try
{
Class
.
forName
(
"org.eclipse.jface.resource.CompositeImageDescriptor$CachedImageDataProvider"
);
hasCachedImageDataProvider
=
true
;
}
catch
(
ClassNotFoundException
e
)
{
hasCachedImageDataProvider
=
false
;
}
useLegacyOverlay
=
!
hasCachedImageDataProvider
;
}
private
static
class
IconDescriptor
{
String
id
;
Image
image
;
ImageDescriptor
imageDescriptor
;
IconDescriptor
(
String
id
,
ImageDescriptor
imageDescriptor
)
{
this
.
id
=
id
;
this
.
image
=
imageDescriptor
.
createImage
(
false
);
this
.
imageDescriptor
=
imageDescriptor
;
}
IconDescriptor
(
String
id
,
Image
image
)
{
this
.
id
=
id
;
this
.
image
=
image
;
this
.
imageDescriptor
=
ImageDescriptor
.
createFromImage
(
image
);
}
}
private
static
Map
<
String
,
IconDescriptor
>
imageMap
=
new
HashMap
<>();
private
static
Map
<
String
,
IconDescriptor
>
compositeMap
=
new
HashMap
<>();
private
static
Image
viewMenuImage
;
@NotNull
public
static
Image
getImage
(
@NotNull
DBPImage
image
)
{
if
(
image
==
null
)
{
return
null
;
}
if
(
image
instanceof
DBIconBinary
)
{
return
((
DBIconBinary
)
image
).
getImage
();
}
else
{
IconDescriptor
icon
=
getIconByLocation
(
image
.
getLocation
());
if
(
icon
==
null
)
{
throw
new
IllegalArgumentException
(
"Image '"
+
image
.
getLocation
()
+
"' not found"
);
}
else
if
(
image
instanceof
DBIconComposite
)
{
return
getCompositeIcon
(
icon
,
(
DBIconComposite
)
image
).
image
;
}
else
{
return
icon
.
image
;
}
}
}
@NotNull
public
static
ImageDescriptor
getImageDescriptor
(
@NotNull
DBPImage
image
)
{
if
(
image
==
null
)
{
return
null
;
}
if
(
image
instanceof
DBIconBinary
)
{
return
((
DBIconBinary
)
image
).
getImageDescriptor
();
}
else
{
IconDescriptor
icon
=
getIconByLocation
(
image
.
getLocation
());
if
(
icon
==
null
)
{
throw
new
IllegalArgumentException
(
"Image '"
+
image
.
getLocation
()
+
"' not found"
);
}
else
if
(
image
instanceof
DBIconComposite
)
{
return
getCompositeIcon
(
icon
,
(
DBIconComposite
)
image
).
imageDescriptor
;
}
else
{
return
icon
.
imageDescriptor
;
}
}
}
private
static
IconDescriptor
getCompositeIcon
(
IconDescriptor
mainIcon
,
DBIconComposite
image
)
{
if
(!
image
.
hasOverlays
())
{
return
mainIcon
;
}
String
compositeId
=
mainIcon
.
id
+
"^"
+
(
image
.
getTopLeft
()
==
null
?
""
:
image
.
getTopLeft
().
getLocation
())
+
"^"
+
(
image
.
getTopRight
()
==
null
?
""
:
image
.
getTopRight
().
getLocation
())
+
"^"
+
(
image
.
getBottomLeft
()
==
null
?
""
:
image
.
getBottomLeft
().
getLocation
())
+
"^"
+
(
image
.
getBottomRight
()
==
null
?
""
:
image
.
getBottomRight
().
getLocation
());
IconDescriptor
icon
=
compositeMap
.
get
(
compositeId
);
if
(
icon
==
null
)
{
Image
resultImage
;
if
(
useLegacyOverlay
)
{
OverlayImageDescriptorLegacy
ovrImage
=
new
OverlayImageDescriptorLegacy
(
mainIcon
.
image
.
getImageData
());
if
(
image
.
getTopLeft
()
!=
null
)
ovrImage
.
setTopLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopLeft
())});
if
(
image
.
getTopRight
()
!=
null
)
ovrImage
.
setTopRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopRight
())});
if
(
image
.
getBottomLeft
()
!=
null
)
ovrImage
.
setBottomLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomLeft
())});
if
(
image
.
getBottomRight
()
!=
null
)
ovrImage
.
setBottomRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomRight
())});
resultImage
=
ovrImage
.
createImage
();
}
else
{
OverlayImageDescriptor
ovrImage
=
new
OverlayImageDescriptor
(
mainIcon
.
imageDescriptor
);
if
(
image
.
getTopLeft
()
!=
null
)
ovrImage
.
setTopLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopLeft
())});
if
(
image
.
getTopRight
()
!=
null
)
ovrImage
.
setTopRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopRight
())});
if
(
image
.
getBottomLeft
()
!=
null
)
ovrImage
.
setBottomLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomLeft
())});
if
(
image
.
getBottomRight
()
!=
null
)
ovrImage
.
setBottomRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomRight
())});
resultImage
=
ovrImage
.
createImage
();
}
icon
=
new
IconDescriptor
(
compositeId
,
resultImage
);
compositeMap
.
put
(
compositeId
,
icon
);
}
return
icon
;
}
private
static
IconDescriptor
getIconByLocation
(
String
location
)
{
IconDescriptor
icon
=
imageMap
.
get
(
location
);
if
(
icon
==
null
)
{
try
{
ImageDescriptor
imageDescriptor
=
ImageDescriptor
.
createFromURL
(
new
URL
(
location
));
icon
=
new
IconDescriptor
(
location
,
imageDescriptor
);
if
(
icon
.
image
==
null
)
{
log
.
warn
(
"Bad image: "
+
location
);
return
null
;
}
else
{
imageMap
.
put
(
location
,
icon
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
e
);
return
null
;
}
}
return
icon
;
}
public
static
synchronized
Image
getViewMenuImage
()
{
if
(
viewMenuImage
==
null
)
{
Display
d
=
Display
.
getCurrent
();
Image
viewMenu
=
new
Image
(
d
,
16
,
16
);
Image
viewMenuMask
=
new
Image
(
d
,
16
,
16
);
Display
display
=
Display
.
getCurrent
();
GC
gc
=
new
GC
(
viewMenu
);
GC
maskgc
=
new
GC
(
viewMenuMask
);
gc
.
setForeground
(
display
.
getSystemColor
(
SWT
.
COLOR_WIDGET_DARK_SHADOW
));
gc
.
setBackground
(
display
.
getSystemColor
(
SWT
.
COLOR_LIST_BACKGROUND
));
int
[]
shapeArray
=
new
int
[]{
6
,
3
,
15
,
3
,
11
,
7
,
10
,
7
};
gc
.
fillPolygon
(
shapeArray
);
gc
.
drawPolygon
(
shapeArray
);
Color
black
=
display
.
getSystemColor
(
SWT
.
COLOR_BLACK
);
Color
white
=
display
.
getSystemColor
(
SWT
.
COLOR_WHITE
);
maskgc
.
setBackground
(
black
);
maskgc
.
fillRectangle
(
0
,
0
,
16
,
16
);
maskgc
.
setBackground
(
white
);
maskgc
.
setForeground
(
white
);
maskgc
.
fillPolygon
(
shapeArray
);
maskgc
.
drawPolygon
(
shapeArray
);
gc
.
dispose
();
maskgc
.
dispose
();
ImageData
data
=
viewMenu
.
getImageData
();
data
.
transparentPixel
=
data
.
getPixel
(
0
,
0
);
viewMenuImage
=
new
Image
(
d
,
viewMenu
.
getImageData
(),
viewMenuMask
.
getImageData
());
viewMenu
.
dispose
();
viewMenuMask
.
dispose
();
}
return
viewMenuImage
;
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.ImageDescriptor
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.GC
;
import
org.eclipse.swt.graphics.Image
;
import
org.eclipse.swt.graphics.ImageData
;
import
org.eclipse.swt.widgets.Display
;
import
org.jkiss.code.NotNull
;
import
org.jkiss.dbeaver.Log
;
import
org.jkiss.dbeaver.model.DBIconComposite
;
import
org.jkiss.dbeaver.model.DBPImage
;
import
java.net.URL
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* DBeaverIcons
*/
public
class
DBeaverIcons
{
private
static
final
Log
log
=
Log
.
getLog
(
DBeaverIcons
.
class
);
private
static
final
boolean
useLegacyOverlay
;
static
{
boolean
hasCachedImageDataProvider
;
try
{
Class
.
forName
(
"org.eclipse.jface.resource.CompositeImageDescriptor$CachedImageDataProvider"
);
hasCachedImageDataProvider
=
true
;
}
catch
(
ClassNotFoundException
e
)
{
hasCachedImageDataProvider
=
false
;
}
useLegacyOverlay
=
!
hasCachedImageDataProvider
;
}
private
static
class
IconDescriptor
{
String
id
;
Image
image
;
ImageDescriptor
imageDescriptor
;
IconDescriptor
(
String
id
,
ImageDescriptor
imageDescriptor
)
{
this
.
id
=
id
;
this
.
image
=
imageDescriptor
.
createImage
(
false
);
this
.
imageDescriptor
=
imageDescriptor
;
}
IconDescriptor
(
String
id
,
Image
image
)
{
this
.
id
=
id
;
this
.
image
=
image
;
this
.
imageDescriptor
=
ImageDescriptor
.
createFromImage
(
image
);
}
}
private
static
Map
<
String
,
IconDescriptor
>
imageMap
=
new
HashMap
<>();
private
static
Map
<
String
,
IconDescriptor
>
compositeMap
=
new
HashMap
<>();
private
static
Image
viewMenuImage
;
@NotNull
public
static
Image
getImage
(
@NotNull
DBPImage
image
)
{
if
(
image
==
null
)
{
return
null
;
}
if
(
image
instanceof
DBIconBinary
)
{
return
((
DBIconBinary
)
image
).
getImage
();
}
else
{
IconDescriptor
icon
=
getIconByLocation
(
image
.
getLocation
());
if
(
icon
==
null
)
{
throw
new
IllegalArgumentException
(
"Image '"
+
image
.
getLocation
()
+
"' not found"
);
}
else
if
(
image
instanceof
DBIconComposite
)
{
return
getCompositeIcon
(
icon
,
(
DBIconComposite
)
image
).
image
;
}
else
{
return
icon
.
image
;
}
}
}
@NotNull
public
static
ImageDescriptor
getImageDescriptor
(
@NotNull
DBPImage
image
)
{
if
(
image
==
null
)
{
return
null
;
}
if
(
image
instanceof
DBIconBinary
)
{
return
((
DBIconBinary
)
image
).
getImageDescriptor
();
}
else
{
IconDescriptor
icon
=
getIconByLocation
(
image
.
getLocation
());
if
(
icon
==
null
)
{
throw
new
IllegalArgumentException
(
"Image '"
+
image
.
getLocation
()
+
"' not found"
);
}
else
if
(
image
instanceof
DBIconComposite
)
{
return
getCompositeIcon
(
icon
,
(
DBIconComposite
)
image
).
imageDescriptor
;
}
else
{
return
icon
.
imageDescriptor
;
}
}
}
private
static
IconDescriptor
getCompositeIcon
(
IconDescriptor
mainIcon
,
DBIconComposite
image
)
{
if
(!
image
.
hasOverlays
())
{
return
mainIcon
;
}
String
compositeId
=
mainIcon
.
id
+
"^"
+
(
image
.
getTopLeft
()
==
null
?
""
:
image
.
getTopLeft
().
getLocation
())
+
"^"
+
(
image
.
getTopRight
()
==
null
?
""
:
image
.
getTopRight
().
getLocation
())
+
"^"
+
(
image
.
getBottomLeft
()
==
null
?
""
:
image
.
getBottomLeft
().
getLocation
())
+
"^"
+
(
image
.
getBottomRight
()
==
null
?
""
:
image
.
getBottomRight
().
getLocation
());
IconDescriptor
icon
=
compositeMap
.
get
(
compositeId
);
if
(
icon
==
null
)
{
Image
resultImage
;
if
(
useLegacyOverlay
)
{
OverlayImageDescriptorLegacy
ovrImage
=
new
OverlayImageDescriptorLegacy
(
mainIcon
.
image
.
getImageData
());
if
(
image
.
getTopLeft
()
!=
null
)
ovrImage
.
setTopLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopLeft
())});
if
(
image
.
getTopRight
()
!=
null
)
ovrImage
.
setTopRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopRight
())});
if
(
image
.
getBottomLeft
()
!=
null
)
ovrImage
.
setBottomLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomLeft
())});
if
(
image
.
getBottomRight
()
!=
null
)
ovrImage
.
setBottomRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomRight
())});
resultImage
=
ovrImage
.
createImage
();
}
else
{
OverlayImageDescriptor
ovrImage
=
new
OverlayImageDescriptor
(
mainIcon
.
imageDescriptor
);
if
(
image
.
getTopLeft
()
!=
null
)
ovrImage
.
setTopLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopLeft
())});
if
(
image
.
getTopRight
()
!=
null
)
ovrImage
.
setTopRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getTopRight
())});
if
(
image
.
getBottomLeft
()
!=
null
)
ovrImage
.
setBottomLeft
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomLeft
())});
if
(
image
.
getBottomRight
()
!=
null
)
ovrImage
.
setBottomRight
(
new
ImageDescriptor
[]{
getImageDescriptor
(
image
.
getBottomRight
())});
resultImage
=
ovrImage
.
createImage
();
}
icon
=
new
IconDescriptor
(
compositeId
,
resultImage
);
compositeMap
.
put
(
compositeId
,
icon
);
}
return
icon
;
}
private
static
IconDescriptor
getIconByLocation
(
String
location
)
{
IconDescriptor
icon
=
imageMap
.
get
(
location
);
if
(
icon
==
null
)
{
try
{
ImageDescriptor
imageDescriptor
=
ImageDescriptor
.
createFromURL
(
new
URL
(
location
));
icon
=
new
IconDescriptor
(
location
,
imageDescriptor
);
if
(
icon
.
image
==
null
)
{
log
.
warn
(
"Bad image: "
+
location
);
return
null
;
}
else
{
imageMap
.
put
(
location
,
icon
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
e
);
return
null
;
}
}
return
icon
;
}
public
static
synchronized
Image
getViewMenuImage
()
{
if
(
viewMenuImage
==
null
)
{
Display
d
=
Display
.
getCurrent
();
Image
viewMenu
=
new
Image
(
d
,
16
,
16
);
Image
viewMenuMask
=
new
Image
(
d
,
16
,
16
);
Display
display
=
Display
.
getCurrent
();
GC
gc
=
new
GC
(
viewMenu
);
GC
maskgc
=
new
GC
(
viewMenuMask
);
gc
.
setForeground
(
display
.
getSystemColor
(
SWT
.
COLOR_WIDGET_DARK_SHADOW
));
gc
.
setBackground
(
display
.
getSystemColor
(
SWT
.
COLOR_LIST_BACKGROUND
));
int
[]
shapeArray
=
new
int
[]{
6
,
3
,
15
,
3
,
11
,
7
,
10
,
7
};
gc
.
fillPolygon
(
shapeArray
);
gc
.
drawPolygon
(
shapeArray
);
Color
black
=
display
.
getSystemColor
(
SWT
.
COLOR_BLACK
);
Color
white
=
display
.
getSystemColor
(
SWT
.
COLOR_WHITE
);
maskgc
.
setBackground
(
black
);
maskgc
.
fillRectangle
(
0
,
0
,
16
,
16
);
maskgc
.
setBackground
(
white
);
maskgc
.
setForeground
(
white
);
maskgc
.
fillPolygon
(
shapeArray
);
maskgc
.
drawPolygon
(
shapeArray
);
gc
.
dispose
();
maskgc
.
dispose
();
ImageData
data
=
viewMenu
.
getImageData
();
data
.
transparentPixel
=
data
.
getPixel
(
0
,
0
);
viewMenuImage
=
new
Image
(
d
,
viewMenu
.
getImageData
(),
viewMenuMask
.
getImageData
());
viewMenu
.
dispose
();
viewMenuMask
.
dispose
();
}
return
viewMenuImage
;
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/DynamicFindReplaceTarget.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/DynamicFindReplaceTarget.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.text.IFindReplaceTarget
;
import
org.eclipse.jface.text.IFindReplaceTargetExtension
;
import
org.eclipse.jface.text.IFindReplaceTargetExtension3
;
import
org.eclipse.jface.text.IRegion
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.Point
;
/**
* Composite find/replace target
*/
public
class
DynamicFindReplaceTarget
implements
IFindReplaceTarget
,
IFindReplaceTargetExtension
,
IFindReplaceTargetExtension3
{
private
IFindReplaceTarget
target
;
public
DynamicFindReplaceTarget
()
{
}
public
IFindReplaceTarget
getTarget
()
{
return
target
;
}
public
void
setTarget
(
IFindReplaceTarget
target
)
{
this
.
target
=
target
;
}
@Override
public
boolean
canPerformFind
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
!=
null
&&
t
.
canPerformFind
();
}
@Override
public
int
findAndSelect
(
int
widgetOffset
,
String
findString
,
boolean
searchForward
,
boolean
caseSensitive
,
boolean
wholeWord
)
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
-
1
:
t
.
findAndSelect
(
widgetOffset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
);
}
@Override
public
Point
getSelection
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
new
Point
(
0
,
0
)
:
t
.
getSelection
();
}
@Override
public
String
getSelectionText
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
""
:
t
.
getSelectionText
();
}
@Override
public
boolean
isEditable
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
!=
null
&&
t
.
isEditable
();
}
@Override
public
void
replaceSelection
(
String
text
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
!=
null
)
{
t
.
replaceSelection
(
text
);
}
}
@Override
public
void
beginSession
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
beginSession
();
}
}
@Override
public
void
endSession
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
endSession
();
}
}
@Override
public
IRegion
getScope
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
return
((
IFindReplaceTargetExtension
)
t
).
getScope
();
}
return
null
;
}
@Override
public
void
setScope
(
IRegion
scope
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setScope
(
scope
);
}
}
@Override
public
Point
getLineSelection
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
return
((
IFindReplaceTargetExtension
)
t
).
getLineSelection
();
}
return
getSelection
();
}
@Override
public
void
setSelection
(
int
offset
,
int
length
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setSelection
(
offset
,
length
);
}
}
@Override
public
void
setScopeHighlightColor
(
Color
color
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setScopeHighlightColor
(
color
);
}
}
@Override
public
void
setReplaceAllMode
(
boolean
replaceAll
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setReplaceAllMode
(
replaceAll
);
}
}
@Override
public
int
findAndSelect
(
int
offset
,
String
findString
,
boolean
searchForward
,
boolean
caseSensitive
,
boolean
wholeWord
,
boolean
regExSearch
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension3
)
{
return
((
IFindReplaceTargetExtension3
)
t
).
findAndSelect
(
offset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
,
regExSearch
);
}
return
findAndSelect
(
offset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
);
}
@Override
public
void
replaceSelection
(
String
text
,
boolean
regExReplace
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension3
)
{
((
IFindReplaceTargetExtension3
)
t
).
replaceSelection
(
text
,
regExReplace
);
}
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.text.IFindReplaceTarget
;
import
org.eclipse.jface.text.IFindReplaceTargetExtension
;
import
org.eclipse.jface.text.IFindReplaceTargetExtension3
;
import
org.eclipse.jface.text.IRegion
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.Point
;
/**
* Composite find/replace target
*/
public
class
DynamicFindReplaceTarget
implements
IFindReplaceTarget
,
IFindReplaceTargetExtension
,
IFindReplaceTargetExtension3
{
private
IFindReplaceTarget
target
;
public
DynamicFindReplaceTarget
()
{
}
public
IFindReplaceTarget
getTarget
()
{
return
target
;
}
public
void
setTarget
(
IFindReplaceTarget
target
)
{
this
.
target
=
target
;
}
@Override
public
boolean
canPerformFind
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
!=
null
&&
t
.
canPerformFind
();
}
@Override
public
int
findAndSelect
(
int
widgetOffset
,
String
findString
,
boolean
searchForward
,
boolean
caseSensitive
,
boolean
wholeWord
)
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
-
1
:
t
.
findAndSelect
(
widgetOffset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
);
}
@Override
public
Point
getSelection
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
new
Point
(
0
,
0
)
:
t
.
getSelection
();
}
@Override
public
String
getSelectionText
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
==
null
?
""
:
t
.
getSelectionText
();
}
@Override
public
boolean
isEditable
()
{
IFindReplaceTarget
t
=
getTarget
();
return
t
!=
null
&&
t
.
isEditable
();
}
@Override
public
void
replaceSelection
(
String
text
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
!=
null
)
{
t
.
replaceSelection
(
text
);
}
}
@Override
public
void
beginSession
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
beginSession
();
}
}
@Override
public
void
endSession
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
endSession
();
}
}
@Override
public
IRegion
getScope
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
return
((
IFindReplaceTargetExtension
)
t
).
getScope
();
}
return
null
;
}
@Override
public
void
setScope
(
IRegion
scope
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setScope
(
scope
);
}
}
@Override
public
Point
getLineSelection
()
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
return
((
IFindReplaceTargetExtension
)
t
).
getLineSelection
();
}
return
getSelection
();
}
@Override
public
void
setSelection
(
int
offset
,
int
length
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setSelection
(
offset
,
length
);
}
}
@Override
public
void
setScopeHighlightColor
(
Color
color
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setScopeHighlightColor
(
color
);
}
}
@Override
public
void
setReplaceAllMode
(
boolean
replaceAll
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension
)
{
((
IFindReplaceTargetExtension
)
t
).
setReplaceAllMode
(
replaceAll
);
}
}
@Override
public
int
findAndSelect
(
int
offset
,
String
findString
,
boolean
searchForward
,
boolean
caseSensitive
,
boolean
wholeWord
,
boolean
regExSearch
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension3
)
{
return
((
IFindReplaceTargetExtension3
)
t
).
findAndSelect
(
offset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
,
regExSearch
);
}
return
findAndSelect
(
offset
,
findString
,
searchForward
,
caseSensitive
,
wholeWord
);
}
@Override
public
void
replaceSelection
(
String
text
,
boolean
regExReplace
)
{
IFindReplaceTarget
t
=
getTarget
();
if
(
t
instanceof
IFindReplaceTargetExtension3
)
{
((
IFindReplaceTargetExtension3
)
t
).
replaceSelection
(
text
,
regExReplace
);
}
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/OverlayImageDescriptor.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/OverlayImageDescriptor.java
浏览文件 @
e4175b34
文件已移动
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/OverlayImageDescriptorLegacy.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/OverlayImageDescriptorLegacy.java
浏览文件 @
e4175b34
文件已移动
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/ProxyPageSite.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/ProxyPageSite.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.action.MenuManager
;
import
org.eclipse.jface.viewers.ISelectionProvider
;
import
org.eclipse.swt.widgets.Shell
;
import
org.eclipse.ui.*
;
import
org.eclipse.ui.part.IPageSite
;
/**
* ProxyPageSite
*/
public
class
ProxyPageSite
implements
IPageSite
{
private
final
IWorkbenchPartSite
partSite
;
public
ProxyPageSite
(
IWorkbenchPartSite
partSite
)
{
this
.
partSite
=
partSite
;
}
@Override
public
void
registerContextMenu
(
String
menuId
,
MenuManager
menuManager
,
ISelectionProvider
selectionProvider
)
{
partSite
.
registerContextMenu
(
menuId
,
menuManager
,
selectionProvider
);
}
@Override
public
IActionBars
getActionBars
()
{
if
(
partSite
instanceof
IEditorSite
)
{
return
((
IEditorSite
)
partSite
).
getActionBars
();
}
else
if
(
partSite
instanceof
IViewSite
)
{
return
((
IViewSite
)
partSite
).
getActionBars
();
}
else
{
return
null
;
}
}
@Override
public
IWorkbenchPage
getPage
()
{
return
partSite
.
getPage
();
}
@Override
public
ISelectionProvider
getSelectionProvider
()
{
return
partSite
.
getSelectionProvider
();
}
@Override
public
Shell
getShell
()
{
return
partSite
.
getShell
();
}
@Override
public
IWorkbenchWindow
getWorkbenchWindow
()
{
return
partSite
.
getWorkbenchWindow
();
}
@Override
public
void
setSelectionProvider
(
ISelectionProvider
provider
)
{
partSite
.
setSelectionProvider
(
provider
);
}
@Override
public
<
T
>
T
getAdapter
(
Class
<
T
>
adapter
)
{
return
partSite
.
getAdapter
(
adapter
);
}
@Override
public
<
T
>
T
getService
(
Class
<
T
>
api
)
{
return
partSite
.
getService
(
api
);
}
@Override
public
boolean
hasService
(
Class
api
)
{
return
partSite
.
hasService
(
api
);
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.action.MenuManager
;
import
org.eclipse.jface.viewers.ISelectionProvider
;
import
org.eclipse.swt.widgets.Shell
;
import
org.eclipse.ui.*
;
import
org.eclipse.ui.part.IPageSite
;
/**
* ProxyPageSite
*/
public
class
ProxyPageSite
implements
IPageSite
{
private
final
IWorkbenchPartSite
partSite
;
public
ProxyPageSite
(
IWorkbenchPartSite
partSite
)
{
this
.
partSite
=
partSite
;
}
@Override
public
void
registerContextMenu
(
String
menuId
,
MenuManager
menuManager
,
ISelectionProvider
selectionProvider
)
{
partSite
.
registerContextMenu
(
menuId
,
menuManager
,
selectionProvider
);
}
@Override
public
IActionBars
getActionBars
()
{
if
(
partSite
instanceof
IEditorSite
)
{
return
((
IEditorSite
)
partSite
).
getActionBars
();
}
else
if
(
partSite
instanceof
IViewSite
)
{
return
((
IViewSite
)
partSite
).
getActionBars
();
}
else
{
return
null
;
}
}
@Override
public
IWorkbenchPage
getPage
()
{
return
partSite
.
getPage
();
}
@Override
public
ISelectionProvider
getSelectionProvider
()
{
return
partSite
.
getSelectionProvider
();
}
@Override
public
Shell
getShell
()
{
return
partSite
.
getShell
();
}
@Override
public
IWorkbenchWindow
getWorkbenchWindow
()
{
return
partSite
.
getWorkbenchWindow
();
}
@Override
public
void
setSelectionProvider
(
ISelectionProvider
provider
)
{
partSite
.
setSelectionProvider
(
provider
);
}
@Override
public
<
T
>
T
getAdapter
(
Class
<
T
>
adapter
)
{
return
partSite
.
getAdapter
(
adapter
);
}
@Override
public
<
T
>
T
getService
(
Class
<
T
>
api
)
{
return
partSite
.
getService
(
api
);
}
@Override
public
boolean
hasService
(
Class
api
)
{
return
partSite
.
hasService
(
api
);
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/SharedTextColors.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/SharedTextColors.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.StringConverter
;
import
org.eclipse.jface.text.source.ISharedTextColors
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.RGB
;
import
org.eclipse.swt.widgets.Display
;
import
org.jkiss.code.NotNull
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
SharedTextColors
implements
ISharedTextColors
{
public
static
final
RGB
COLOR_WARNING
=
new
RGB
(
0xFF
,
0x63
,
0x47
);
/**
* The display table.
*/
private
final
Map
<
Display
,
Map
<
RGB
,
Color
>>
fDisplayTable
=
new
HashMap
<>();
private
final
Map
<
String
,
RGB
>
rgbMap
=
new
HashMap
<>();
public
SharedTextColors
()
{
super
();
}
@NotNull
public
Color
getColor
(
String
rgbString
)
{
RGB
rgb
;
synchronized
(
rgbMap
)
{
rgb
=
rgbMap
.
get
(
rgbString
);
if
(
rgb
==
null
)
{
rgb
=
StringConverter
.
asRGB
(
rgbString
);
rgbMap
.
put
(
rgbString
,
rgb
);
}
}
return
getColor
(
rgb
);
}
@NotNull
@Override
public
Color
getColor
(
@NotNull
RGB
rgb
)
{
Display
display
=
Display
.
getCurrent
();
if
(
display
==
null
)
{
display
=
Display
.
getDefault
();
}
final
Display
curDisplay
=
display
;
Map
<
RGB
,
Color
>
colorTable
;
synchronized
(
fDisplayTable
)
{
colorTable
=
fDisplayTable
.
get
(
display
);
if
(
colorTable
==
null
)
{
colorTable
=
new
HashMap
<>(
10
);
fDisplayTable
.
put
(
curDisplay
,
colorTable
);
display
.
disposeExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
dispose
(
curDisplay
);
}
});
}
}
Color
color
=
colorTable
.
get
(
rgb
);
if
(
color
==
null
)
{
color
=
new
Color
(
curDisplay
,
rgb
);
colorTable
.
put
(
rgb
,
color
);
}
return
color
;
}
@Override
public
void
dispose
()
{
for
(
Map
<
RGB
,
Color
>
rgbColorMap
:
fDisplayTable
.
values
())
{
dispose
(
rgbColorMap
);
}
fDisplayTable
.
clear
();
}
private
void
dispose
(
Display
display
)
{
if
(
fDisplayTable
!=
null
)
{
dispose
(
fDisplayTable
.
remove
(
display
));
}
}
private
void
dispose
(
Map
<
RGB
,
Color
>
colorTable
)
{
if
(
colorTable
==
null
)
return
;
for
(
Color
color
:
colorTable
.
values
())
{
color
.
dispose
();
}
colorTable
.
clear
();
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.jface.resource.StringConverter
;
import
org.eclipse.jface.text.source.ISharedTextColors
;
import
org.eclipse.swt.graphics.Color
;
import
org.eclipse.swt.graphics.RGB
;
import
org.eclipse.swt.widgets.Display
;
import
org.jkiss.code.NotNull
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
SharedTextColors
implements
ISharedTextColors
{
public
static
final
RGB
COLOR_WARNING
=
new
RGB
(
0xFF
,
0x63
,
0x47
);
/**
* The display table.
*/
private
final
Map
<
Display
,
Map
<
RGB
,
Color
>>
fDisplayTable
=
new
HashMap
<>();
private
final
Map
<
String
,
RGB
>
rgbMap
=
new
HashMap
<>();
public
SharedTextColors
()
{
super
();
}
@NotNull
public
Color
getColor
(
String
rgbString
)
{
RGB
rgb
;
synchronized
(
rgbMap
)
{
rgb
=
rgbMap
.
get
(
rgbString
);
if
(
rgb
==
null
)
{
rgb
=
StringConverter
.
asRGB
(
rgbString
);
rgbMap
.
put
(
rgbString
,
rgb
);
}
}
return
getColor
(
rgb
);
}
@NotNull
@Override
public
Color
getColor
(
@NotNull
RGB
rgb
)
{
Display
display
=
Display
.
getCurrent
();
if
(
display
==
null
)
{
display
=
Display
.
getDefault
();
}
final
Display
curDisplay
=
display
;
Map
<
RGB
,
Color
>
colorTable
;
synchronized
(
fDisplayTable
)
{
colorTable
=
fDisplayTable
.
get
(
display
);
if
(
colorTable
==
null
)
{
colorTable
=
new
HashMap
<>(
10
);
fDisplayTable
.
put
(
curDisplay
,
colorTable
);
display
.
disposeExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
dispose
(
curDisplay
);
}
});
}
}
Color
color
=
colorTable
.
get
(
rgb
);
if
(
color
==
null
)
{
color
=
new
Color
(
curDisplay
,
rgb
);
colorTable
.
put
(
rgb
,
color
);
}
return
color
;
}
@Override
public
void
dispose
()
{
for
(
Map
<
RGB
,
Color
>
rgbColorMap
:
fDisplayTable
.
values
())
{
dispose
(
rgbColorMap
);
}
fDisplayTable
.
clear
();
}
private
void
dispose
(
Display
display
)
{
if
(
fDisplayTable
!=
null
)
{
dispose
(
fDisplayTable
.
remove
(
display
));
}
}
private
void
dispose
(
Map
<
RGB
,
Color
>
colorTable
)
{
if
(
colorTable
==
null
)
return
;
for
(
Color
color
:
colorTable
.
values
())
{
color
.
dispose
();
}
colorTable
.
clear
();
}
}
plugins/org.jkiss.dbeaver.
core
/src/org/jkiss/dbeaver/ui/TableToolTip.java
→
plugins/org.jkiss.dbeaver.
ui
/src/org/jkiss/dbeaver/ui/TableToolTip.java
浏览文件 @
e4175b34
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.graphics.Point
;
import
org.eclipse.swt.layout.FillLayout
;
import
org.eclipse.swt.widgets.*
;
import
org.jkiss.utils.CommonUtils
;
/**
* Fake table tooltip provider
*/
public
class
TableToolTip
{
private
final
Table
table
;
public
TableToolTip
(
Table
table
)
{
this
.
table
=
table
;
applyCustomTolTips
();
}
public
void
applyCustomTolTips
()
{
// Disable native tooltip
table
.
setToolTipText
(
""
);
//$NON-NLS-1$
// Implement a "fake" tooltip
final
Listener
labelListener
=
new
Listener
()
{
@Override
public
void
handleEvent
(
Event
event
)
{
Label
label
=
(
Label
)
event
.
widget
;
Shell
shell
=
label
.
getShell
();
switch
(
event
.
type
)
{
case
SWT
.
MouseExit
:
shell
.
dispose
();
break
;
}
}
};
Listener
tableListener
=
new
Listener
()
{
Shell
tip
=
null
;
Label
label
=
null
;
@Override
public
void
handleEvent
(
Event
event
)
{
switch
(
event
.
type
)
{
case
SWT
.
Dispose
:
case
SWT
.
KeyDown
:
case
SWT
.
MouseMove
:
{
if
(
tip
==
null
)
break
;
tip
.
dispose
();
tip
=
null
;
label
=
null
;
break
;
}
case
SWT
.
MouseHover
:
{
Point
eventPt
=
new
Point
(
event
.
x
,
event
.
y
);
TableItem
item
=
table
.
getItem
(
eventPt
);
int
selectedColumn
=
-
1
;
if
(
item
!=
null
)
{
int
columnCount
=
table
.
getColumnCount
();
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
if
(
item
.
getBounds
(
i
).
contains
(
eventPt
))
{
selectedColumn
=
i
;
break
;
}
}
}
if
(
item
!=
null
&&
selectedColumn
>=
0
)
{
String
toolTip
=
getItemToolTip
(
item
,
selectedColumn
);
if
(
toolTip
!=
null
)
{
toolTip
=
toolTip
.
trim
();
}
if
(!
CommonUtils
.
isEmpty
(
toolTip
))
{
if
(
tip
!=
null
&&
!
tip
.
isDisposed
())
tip
.
dispose
();
tip
=
new
Shell
(
table
.
getShell
(),
SWT
.
ON_TOP
|
SWT
.
NO_FOCUS
|
SWT
.
TOOL
);
tip
.
setForeground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_FOREGROUND
));
tip
.
setBackground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_BACKGROUND
));
FillLayout
layout
=
new
FillLayout
();
layout
.
marginWidth
=
2
;
tip
.
setLayout
(
layout
);
label
=
new
Label
(
tip
,
SWT
.
NONE
);
label
.
setForeground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_FOREGROUND
));
label
.
setBackground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_BACKGROUND
));
label
.
setText
(
toolTip
);
label
.
addListener
(
SWT
.
MouseExit
,
labelListener
);
Point
size
=
tip
.
computeSize
(
SWT
.
DEFAULT
,
SWT
.
DEFAULT
);
Point
pt
=
table
.
toDisplay
(
event
.
x
,
event
.
y
);
tip
.
setBounds
(
pt
.
x
,
pt
.
y
+
item
.
getBounds
().
height
,
size
.
x
,
size
.
y
);
tip
.
setVisible
(
true
);
}
}
}
}
}
};
table
.
addListener
(
SWT
.
Dispose
,
tableListener
);
table
.
addListener
(
SWT
.
KeyDown
,
tableListener
);
table
.
addListener
(
SWT
.
MouseMove
,
tableListener
);
table
.
addListener
(
SWT
.
MouseHover
,
tableListener
);
}
public
String
getItemToolTip
(
TableItem
item
,
int
selectedColumn
)
{
return
item
.
getText
(
selectedColumn
);
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.graphics.Point
;
import
org.eclipse.swt.layout.FillLayout
;
import
org.eclipse.swt.widgets.*
;
import
org.jkiss.utils.CommonUtils
;
/**
* Fake table tooltip provider
*/
public
class
TableToolTip
{
private
final
Table
table
;
public
TableToolTip
(
Table
table
)
{
this
.
table
=
table
;
applyCustomTolTips
();
}
public
void
applyCustomTolTips
()
{
// Disable native tooltip
table
.
setToolTipText
(
""
);
//$NON-NLS-1$
// Implement a "fake" tooltip
final
Listener
labelListener
=
new
Listener
()
{
@Override
public
void
handleEvent
(
Event
event
)
{
Label
label
=
(
Label
)
event
.
widget
;
Shell
shell
=
label
.
getShell
();
switch
(
event
.
type
)
{
case
SWT
.
MouseExit
:
shell
.
dispose
();
break
;
}
}
};
Listener
tableListener
=
new
Listener
()
{
Shell
tip
=
null
;
Label
label
=
null
;
@Override
public
void
handleEvent
(
Event
event
)
{
switch
(
event
.
type
)
{
case
SWT
.
Dispose
:
case
SWT
.
KeyDown
:
case
SWT
.
MouseMove
:
{
if
(
tip
==
null
)
break
;
tip
.
dispose
();
tip
=
null
;
label
=
null
;
break
;
}
case
SWT
.
MouseHover
:
{
Point
eventPt
=
new
Point
(
event
.
x
,
event
.
y
);
TableItem
item
=
table
.
getItem
(
eventPt
);
int
selectedColumn
=
-
1
;
if
(
item
!=
null
)
{
int
columnCount
=
table
.
getColumnCount
();
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
if
(
item
.
getBounds
(
i
).
contains
(
eventPt
))
{
selectedColumn
=
i
;
break
;
}
}
}
if
(
item
!=
null
&&
selectedColumn
>=
0
)
{
String
toolTip
=
getItemToolTip
(
item
,
selectedColumn
);
if
(
toolTip
!=
null
)
{
toolTip
=
toolTip
.
trim
();
}
if
(!
CommonUtils
.
isEmpty
(
toolTip
))
{
if
(
tip
!=
null
&&
!
tip
.
isDisposed
())
tip
.
dispose
();
tip
=
new
Shell
(
table
.
getShell
(),
SWT
.
ON_TOP
|
SWT
.
NO_FOCUS
|
SWT
.
TOOL
);
tip
.
setForeground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_FOREGROUND
));
tip
.
setBackground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_BACKGROUND
));
FillLayout
layout
=
new
FillLayout
();
layout
.
marginWidth
=
2
;
tip
.
setLayout
(
layout
);
label
=
new
Label
(
tip
,
SWT
.
NONE
);
label
.
setForeground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_FOREGROUND
));
label
.
setBackground
(
table
.
getDisplay
().
getSystemColor
(
SWT
.
COLOR_INFO_BACKGROUND
));
label
.
setText
(
toolTip
);
label
.
addListener
(
SWT
.
MouseExit
,
labelListener
);
Point
size
=
tip
.
computeSize
(
SWT
.
DEFAULT
,
SWT
.
DEFAULT
);
Point
pt
=
table
.
toDisplay
(
event
.
x
,
event
.
y
);
tip
.
setBounds
(
pt
.
x
,
pt
.
y
+
item
.
getBounds
().
height
,
size
.
x
,
size
.
y
);
tip
.
setVisible
(
true
);
}
}
}
}
}
};
table
.
addListener
(
SWT
.
Dispose
,
tableListener
);
table
.
addListener
(
SWT
.
KeyDown
,
tableListener
);
table
.
addListener
(
SWT
.
MouseMove
,
tableListener
);
table
.
addListener
(
SWT
.
MouseHover
,
tableListener
);
}
public
String
getItemToolTip
(
TableItem
item
,
int
selectedColumn
)
{
return
item
.
getText
(
selectedColumn
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录