Как перенаправить нажатия клавиш в другую оболочку в приложении на основе Eclipse? - PullRequest
1 голос
/ 25 мая 2011

Я работаю над тем, чтобы максимизировать EditorPart в моем приложении RCP на основе Eclipse, чтобы он был полностью полноэкранным, без обрезки, без меню и так далее. На самом деле, это редактор ГЭФ. Это что-то вроде хака, но это отчасти работает:

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 для вновь созданной развернутой оболочки. Нажатие escape вернет элемент управления его первоначальному родителю (код не показан для краткости).

Единственное, что не работает, это получение глобальных нажатий клавиш ( Del , Ctrl + Z , Ctrl + A ) те, которые объявлены для Workbench и перенаправлены в EditorPart. Есть ли способ, которым я могу подключиться к ним или перенаправить их из EditorPart, чтобы переслать их в GraphicalViewer?

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Короткий ответ: ты не можешь этого сделать.Как только вы переопределили этот композит из окна рабочей среды, он полностью отключился.Система не будет правильно обрабатывать деталь, так как события (такие как активация, фокус, 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/, в котором содержится код EPL, связанный с запуском программы RCP с полноэкранной поддержкой.

0 голосов
/ 26 мая 2011

Мое предложение - попытаться подойти к этой проблеме под другим углом.Вместо того, чтобы слушать нажатия клавиш в вашем коде и действовать в соответствии с ними, определите свою собственную схему привязки клавиш , а затем создайте команды и заставьте их использовать эту схему.Это будет означать, что вам больше не нужно слушать нажатия клавиш в вашем коде, а вместо этого делать все, что нужно, с помощью команд, выполняемых этими нажатиями клавиш.

...