Где в плагине Eclipse я размещаю алгоритм, который использует несколько представлений - PullRequest
2 голосов
/ 06 июля 2011

У меня есть плагин Eclipse, который содержит 4 просмотра. Часть функциональности программирования должна находиться «над» этими представлениями, связывая их вместе. Я назову это «хозяин»

Кто-нибудь может посоветовать лучшее местоположение для этой функции? На самом деле, я хочу, чтобы мастер запускался, когда приложение открыто и представления инициализированы.

В сгенерированном плагине приложения RCP у меня есть Activitor, Клиент, Перспектива, ApplicationActionBarAdvisor и ApplicationWorkbenchAdvisor, а также ApplicationWorkbenchWindowAdvisor. Ни один из них не подходит для размещения «мастера».

Редактировать : после небольшого дальнейшего расследования я подозреваю, что ApplicationWindowAdvisor держит мой ответ. У него есть несколько методов, которые можно переопределить, чтобы перейти на этапы жизненного цикла приложения. Те, которые связаны с этой проблемой, выглядят так: postStartup , postWindowOpen , postWindowCreate

Буду признателен за любые указатели, по которым вызывается метод после создания / инициализации всех представлений.

Редактировать 2 : больше прибегнуло к поиску использования org.eclipse.ui.startup точка расширения, так как IStartup.earlyStartup () также запускается после Workbench был полностью запущен.

ура, Ian

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Возможно, вы могли бы определить службу OSGi (подробное руководство см. В руководстве Ларса Фогеля: http://www.vogella.de/articles/OSGi/article.html).

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

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

Редактировать Отвечая на изменения в вопросе: ни один из предложенных методов не имеет ничего общего с открытием (или закрытием) представлений. postStartup выполняется после запуска приложения; postWindowOpen выполняется после открытия окна; пока postWindowCreate открывается после создания окна, но до его открытия.

EarlyStartup () позволяет выполнить после запуска рабочей среды, но он по-прежнему не проверяет, открыты ли соответствующие представления - представления имеют жизненный цикл, отличный от окон.

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

2 голосов
/ 06 июля 2011

Я думаю, вы смешиваете понятия.Алгоритмы работают не с представлениями, а с моделями , которые показывают представления.

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

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

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

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

Таким образом, вы можете отделить модель от представлений.У вас не будет проблем, когда пользователь переставит представления или закроет их.

1 голос
/ 06 июля 2011

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

Я не помню точно, как вы можете это сделать, но я думаю, что установка перспективы как «фиксированной» в объявлении точки расширения может помочь.

...