当已经为它注册了一个动作时处理组合键
handle key combination when an action is already registered for it
我的用例是在 TextCellEditor
s Text
控件中处理 Ctrl (Cmd) + A 组合键,该控件在 "editable" 使用 gef 的标签(语言是 scala,抱歉):
text.addKeyListener(new KeyAdapter {
override def keyPressed(e: KeyEvent) = {
val ctrlKey = if (Util.isMac) SWT.COMMAND else SWT.CTRL
if (e.stateMask == ctrlKey && e.keyCode == 'a') {
text.selectAll()
e.doit = false
}
}
})
但是由于为整个 gef GraphicalEditor
注册了一个 "global" 操作,我什至没有收到该事件。
我怎样才能解决这个问题并让处理程序接收按键事件?
这是我最后做的,不确定它是否是最优雅的解决方案,但肯定有效(在单元格编辑器中):
var originalEnabled: Boolean = true
def globalSelectAllAction = Option(
PlatformUI.getWorkbench
.getActiveWorkbenchWindow
.getActivePage
.getActiveEditor
.getEditorSite
.getActionBars
.getGlobalActionHandler(ActionFactory.SELECT_ALL.getId)
)
override def activate() {
super.activate()
originalEnabled = globalSelectAllAction.map(_.isEnabled).getOrElse(true)
globalSelectAllAction.foreach(_.setEnabled(false))
}
override def deactivate() {
super.deactivate()
globalSelectAllAction.foreach(_.setEnabled(originalEnabled))
}
这会在单元格编辑器处于活动状态时暂时禁用 CMD (Ctrl) + A 操作,并在编辑器消失后重新启用它
我的用例是在 TextCellEditor
s Text
控件中处理 Ctrl (Cmd) + A 组合键,该控件在 "editable" 使用 gef 的标签(语言是 scala,抱歉):
text.addKeyListener(new KeyAdapter {
override def keyPressed(e: KeyEvent) = {
val ctrlKey = if (Util.isMac) SWT.COMMAND else SWT.CTRL
if (e.stateMask == ctrlKey && e.keyCode == 'a') {
text.selectAll()
e.doit = false
}
}
})
但是由于为整个 gef GraphicalEditor
注册了一个 "global" 操作,我什至没有收到该事件。
我怎样才能解决这个问题并让处理程序接收按键事件?
这是我最后做的,不确定它是否是最优雅的解决方案,但肯定有效(在单元格编辑器中):
var originalEnabled: Boolean = true
def globalSelectAllAction = Option(
PlatformUI.getWorkbench
.getActiveWorkbenchWindow
.getActivePage
.getActiveEditor
.getEditorSite
.getActionBars
.getGlobalActionHandler(ActionFactory.SELECT_ALL.getId)
)
override def activate() {
super.activate()
originalEnabled = globalSelectAllAction.map(_.isEnabled).getOrElse(true)
globalSelectAllAction.foreach(_.setEnabled(false))
}
override def deactivate() {
super.deactivate()
globalSelectAllAction.foreach(_.setEnabled(originalEnabled))
}
这会在单元格编辑器处于活动状态时暂时禁用 CMD (Ctrl) + A 操作,并在编辑器消失后重新启用它