Как создать свою оболочку на замену оболочке, созданной в MTrimmedWindow в e4 RCP?

Есть ли способ заменить оболочку, сгенерированную Eclipse RCP для MTrimmedWindow, пользовательским окном?

Eclipse создает оболочку с определенным типом стиля, который можно указать только при создании. Я хочу удалить максимизацию и изменение размера из элемента оболочки, созданного для MTrimmedWindow. Если у кого-то есть решение вышеуказанной проблемы, пожалуйста, ответьте.


person Goutham Prasad    schedule 08.01.2013    source источник


Ответы (3)


Стиль оболочки нельзя изменить после создания, а саму оболочку нельзя заменить после того, как она была создана средством визуализации. Но ситуация не безнадежна.

Eclipse 4 использует средства визуализации для создания элементов пользовательского интерфейса из модели приложения. Эти средства визуализации можно заменить с помощью Rendering Framework, и это один из возможных способов создания оболочки со стилем, отличным от стиля по умолчанию.

Решение включает в себя написание собственного средства визуализации для UIElement типа MWindow, предоставление WorkbenchRendererFactory для создания нового средства визуализации SWT для MWindows и регистрацию новой фабрики в продукте.

По умолчанию: создание оболочки с помощью WBWRenderer

WBWRenderer (рендерер окна рабочей среды) — это стандартный визуализатор для SWT-элементов типа MWindow.

В WBWRenderer#createWidget оболочка создается в стиле SWT.SHELL_TRIM, удобном для SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE:

wbwShell = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | rtlStyle);

Это приведет к TrimmedWindow, который можно развернуть и изменить размер, без возможности изменить это поведение после создания.

Создание оболочки новым модулем визуализации

Чтобы обойти вышеупомянутое ограничение, вы можете предоставить другой рендерер, используя WBWRenderer в качестве шаблона. Это позволяет вам изменить код для создания оболочки, например.

wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
                         SWT.MIN | rtlStyle);

Этот модуль визуализации должен быть возвращен WorkbenchRendererFactory в качестве модуля визуализации, используемого для отображения MWindows. Кроме того, фабрика рендеринга должна быть добавлена ​​как свойство продукта в plugin.xml.

Эти изменения приведут к тому, что TrimmedWindow нельзя развернуть или изменить размер.

Пример того, как написать и зарегистрировать WorkbenchRendererFactory, можно найти здесь.

Лучшее решение?

На самом деле, может быть лучший способ стилизовать оболочки SWT, поскольку WBWRenderer уже использует теги для определения поведения MWindow: shellMaximized и shellMinimized. Эти теги можно задать на дополнительной вкладке обрезанного окна в редакторе модели приложения.

Если бы теги стиля swt можно было установить аналогичным образом, их можно было бы использовать для установки стиля оболочки. Это будет запрос функции для Eclipse.

person Modus Tollens    schedule 09.01.2013
comment
Благодарю вас. Попробую вышеуказанное решение. Я также предложил вариант тега в одном из сообщений форума eclipse. Еще раз, большое спасибо. - person Goutham Prasad; 09.01.2013
comment
@GouthamPrasad Я только что нашел отчет об ошибке, касающийся функции стиля для окна приложения в Eclipse 4 здесь - person Modus Tollens; 09.01.2013

Теперь это можно решить с помощью специального флага ключа «сохраняемое состояние», как описано в https://bugs.eclipse.org/bugs/show_bug.cgi?id=386951. Например, чтобы реализовать окно NO_TRIM, добавьте ключ/значение styleOverride/8, где 8 — это значение, если вы получаете числовое значение

    int val = SWT.NO_TRIM;
    System.out.println(val);
person col.panic    schedule 28.07.2015

В дополнение к ответу col.panic, если вам нужен стиль

SWT.CLOSE | SWT.TITLE

ваше значение styleOverride будет 96

System.out.println(SWT.CLOSE | SWT.TITLE) = 96
person BliteKnight    schedule 05.08.2015