在dbeaver中,有很多地方能去触发ctrl + c 快捷键方式进行复制内容,比如:
在查询管理器中选中列进行ctrl + c 快捷复制选中内容。
先看注册事件代码:
在 /org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java 类中 408行代码
使用了内部封装好的一个方法进行注册获取焦点和失去焦点事件。具体内部方法不在此讨论。下面来看 这个QUERY_LOG_CONTROL_ID 变量是什么。
这个变量是一个私有静态常量,全局搜索该全局常量:
该全局常量有两处,转到plugin.xml 的引用
plugin.xml 中定义了一个扩展点
那么这里通过在 org.eclipse.core.expressions.definitions 扩展点下定义的 org.jkiss.dbeaver.core.ui.querylog.control 来表示上面添加好的获取焦点链路追踪在什么情况下进行触发,当追踪到的controlId 是 org.jkiss.dbeaver.ui.qm.log 时 触发 org.eclipse.ui.handlers扩展点中定义的activeWhen中definitionId是 org.jkiss.dbeaver.core.ui.querylog.control 的handler 配置。
由于我使用的快捷访问方式是ctrl + c 也就是copy,那么最终到类 org.jkiss.dbeaver.ui.controls.querylog.QueryLogCommandHandler 进行执行
进入到QueryLogCommandHandler 类:
由于这里是在logViewer中的一个table中绑定的获取焦点事件,因此需要在创建这个table时,对这个table设置 setData
圈出的这行代码很重要!!
以上是个人看法,目前也是刚开始rcp开发,若有错误,欢迎指正~