e4 RCP: как определить, что часть показана

Я пишу приложение RCP, которое имеет модель приложения, которую можно упростить, как показано ниже:

==================================================
= lpart                ||  rpart1 | rpart2       =
= -------------------- || ---------------------- =
=     <a table>        ||  <some sfuff about     =
=                      ||   the selected item>   =
==================================================
  1. Окно разделено на две части стопки: левую и правую.
  2. Левая ПС содержит одну часть, а часть содержит только таблицу
  3. Правый PS состоит из двух частей, каждая из которых будет отображать некоторые сведения о выбранном элементе в таблице.

Проблема:

  1. Кажется, что Eclipse лениво инициализирует класс реализации моей части. Если я вызову MPart.getObject() на rpart2 до того, как щелкну вкладку, он вернет null. Могу ли я заставить Eclipse инициализировать весь класс реализации моей части при запуске.
  2. Как узнать, какой из rpart1 и rpart2 отображается. Я хочу избежать загрузки данных для обеих частей всякий раз, когда изменяется выбор таблицы, в конце концов, только одна из них действительно отображается.

Чего я хочу достичь:

  1. Всякий раз, когда элемент выбран, и rpart1, и rpart2 получают уведомление и запоминают выбор (идентификатор элемента или что-то подобное). Это будет невозможно, если rpart2 инициализирован лениво.
  2. Только та часть, которая отображается в данный момент, получит необходимые сведения. Это будет невозможно, если часть не может сказать, показывается ли она.
  3. Когда другая часть будет выбрана, она извлечет и отобразит свои данные в соответствии с запомненным выбором. Ну, это единственная часть, которую я знаю, как это сделать.

Любая помощь могла бы быть полезна! Большое спасибо!


person fengye87    schedule 21.05.2014    source источник


Ответы (2)


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

person greg-449    schedule 21.05.2014
comment
Это может решить мою вторую проблему, но как насчет первой? Спасибо! Кстати, кажется, что MPart.isVisible() и MPart.isOnTop() не возвращают правильное значение, вместо этого MPart.isVisible() всегда возвращает true, а MPart.isOnTop() всегда возвращает false. Я что-то пропустил? здесь? - person fengye87; 21.05.2014
comment
Я думаю, что значение isVisible просто представляет параметр Visible в модели приложения, а не то, что часть действительно видна. Я не знаю, что делает isOnTop. Я не знаю другого способа инициализировать части, кроме как при их первом рендеринге. Вы можете сохранить состояние выбора в объекте, хранящемся в контексте затмения. - person greg-449; 21.05.2014

Я думаю, что EPartService.isPartVisible(MPart) (а не MPart.isVisible()) решает вашу первую проблему.

person Zephyr    schedule 09.02.2016