2015-10-01 4 views
0

еще нового Eclipse, скаутов вопрос от меня:Eclipse, Scout (пере) активировать форму в SWT Client

В моем скаутского приложение, которое примерно на основе шаблона «Структуру дерева и таблицы формы» мне удалось добавить новый экземпляры формы (поиска) с щелчком на узле. свойства отображения моей формы сконфигурированы так:

@Override 
    protected int getConfiguredDisplayHint() { return DISPLAY_HINT_VIEW; }  
    @Override 
    protected String getConfiguredDisplayViewId() { return VIEW_ID_PAGE_DETAIL; } 

Я не добавлять формы на страницы с встроенными методами (например, setDetailForm (форма IForm)), но я поставил их в качестве нового атрибута к страниц и запускать их через свой FormHandler. Таким образом, я достигаю того, что визуализатор Scout отображает формы рядом друг с другом, и это именно то, что я хочу. Добавление их в виде форм на страницу заставляет визуализатор закрывать другие формы всякий раз, когда страница активируется, поэтому только одна форма отображается одновременно.

Мои проблемы с этой реализации:

  1. реактивации вкладок возможно только в клиенте RAP. Для клиента RAP достаточно вызвать метод activate() формы для повторной активации и сфокусировать соответствующую вкладку. С другой стороны, клиент SWT (от которого я зависим), похоже, совсем не заботится об вызове activate() и, следовательно, не активирует страницу. Итак, я ищу безопасный и простой способ убедить SWT-рендеринга
    1. , набирая формы рядом друг с другом, предпочтительно без использования табло-табло. Как описано выше, это уже работает, но я не уверен, что это рекомендуемый способ.
    2. реактивировать язычки в NodeClick, как клиент RAP уже делает
  2. Получать события при нажатии на вкладку закрытия вкладки (X-кнопку в SWT, нет кнопки в РПД -.-), или любой другой. Я думаю, что этот вопрос немного широк, поскольку в Скаутской ситуации возникает общая проблема, заключающаяся в том, чтобы перейти к специфическим для продукта процессам, которые не являются частью абстрактной модели программирования Scout. Тем не менее, было бы неплохо обработать эти события и другие из глобального клиента без необходимости настройки конкретных продуктов рендеринга.

Скриншот интерфейса моей программы, чтобы сделать вещи проще следовать: Screenshot of the Scout application

В скриншоте пятая форма активируется как вид и соответствующий узел в дереве контур слева также отмечен. Как вы видите, добавлено несколько форм, которые все принадлежат узлу в дереве контуров. Когда я нажимаю узел в дереве, я хочу, чтобы соответствующая форма активировалась и фокусировалась, если раньше она не была открыта. Кроме того, вкладки должны оставаться неизменными. Я не хочу повторно инициализировать формы, которые уже существуют.


Я использую Scout версии 5.0

ответ

0

ПДП UI ближе к SWING UI, чем в SWT. Вот почему, из коробки, представления не могут быть закрыты с помощью x в RAP (аналогично Swing).

Для SWT мы полагаемся на верстак, предоставляемый платформой Eclipse. Это определяет, как представления открываются и отображаются в стеке просмотра.

Для меня это нормально использовать разведчик (SWT renderer) таким образом.Вот пример:

Form opened as view

The ComplexForm открывается как SWT View рядом с уже открытой форме.


Я surpised, чтобы услышать, что activate() на скаутской форме не работает для вас. У меня была аналогичная проблема, поднятая Bug 433010, и мы решили закрыть ее, именно потому, что решение было activate().

ComplexForm form = new ComplexForm(); 
form.startNew(); 
form.activate(); 

Я думаю, что на всякий случай (а щелчок где-то в меню, или на узле), вы можете получить называют activate() на экземпляре формы.

Какую версию скаута вы используете?

Возможно, вы можете добавить скриншот в свой вопрос, потому что мне не хватает вашей точки.

+0

Спасибо за ответ. Насколько я вижу, то, что вы описываете, я на самом деле делаю. При вызове FormHandler с startNew() в экземпляре новой формы, похоже, нет необходимости в вызове activate(). Я хочу использовать функцию activate() только для повторной активации формы, которая была запущена ранее. Может быть, другой ключ FormHandler может быть ключом, но я точно не знаю, как это сделать. – MannikJ