如何在基于Eclipse的应用程序中将按键重定向到另一个shell?

时间:2011-05-25 13:24:59

标签: eclipse swt eclipse-rcp

我正在努力在我的基于Eclipse的RCP应用程序中最大化EditorPart绝对是全屏,没有修剪,没有菜单等等。实际上,它是GEF的编辑。这有点像黑客,但它有点工作:

GraphicalViewer viewer = (GraphicalViewer)getWorkbenchPart().getAdapter(GraphicalViewer.class);
        Control control = viewer.getControl();
        Composite oldParent = control.getParent();

        Shell shell = new Shell(SWT.APPLICATION_MODAL);
        shell.setFullScreen(true);
        shell.setMaximized(true);

        // Some code here to listen to Esc key to dispose Shell and return...

        shell.setLayout(new FillLayout());
        control.setParent(shell);
        shell.open();

基本上它将GraphicalViewer控件的父级设置为新创建的最大化Shell。按下escape将控件返回到原始父级(为简洁起见,代码未显示)。

唯一不起作用的是接收全局按键( Del Ctrl + Z Ctrl + A )为Workbench声明并转发到EditorPart的那些。有什么方法可以挂钩到这些或从EditorPart重定向它们以将它们转发到GraphicalViewer?

提前致谢

2 个答案:

答案 0 :(得分:3)

简短的回答是你做不到。一旦从工作台窗口中重新创建该组合,它就完全被破坏了。由于未处理事件(如激活,焦点,setBounds(*)),系统将无法正确处理该部件。

唯一支持的方法是打开一个新的Workbench窗口,其中包含一个仅包含编辑器区域的透视图,并为该窗口+透视图组合扩展org.eclipse.ui.application.WorkbenchWindowAdvisor.createWindowContents(Shell)方法以隐藏所有不用的修剪希望,使用org.eclipse.ui.application.IWorkbenchWindowConfigurer

ex,在MyWorkbenchWindowAdvisor中:

public void createWindowContents(Shell shell) {
    if (isCreatingSpecialPerspective()) {
        final IWorkbenchWindowConfigurer config = getWindowConfigurer();
        config.setShowCoolBar(false);
        config.setShowFastViewBars(false);
        config.setShowMenuBar(false);
        config.setShowPerspectiveBar(false);
        config.setShowProgressIndicator(false);
        config.setShowStatusLine(false);
    }
    super.createWindowContents(shell);
}

另请查看http://code.google.com/p/eclipse-fullscreen/,其中包含与运行具有全屏支持的RCP程序有关的EPL代码。

答案 1 :(得分:0)

我的建议是尝试从另一个角度来解决这个问题。不要在代码中侦听按键并对其进行操作,而是定义your own key binding scheme,然后创建命令并使它们使用此方案。这意味着您不再需要在代码中监听关键笔划,而是通过这些关键笔划执行的命令执行任何操作。