Чтение строки состояния Eclipse - PullRequest
1 голос
/ 03 марта 2011

Я создаю приложение Eclipse RCP и задаю текст в строке общего состояния с помощью:

IStatusLineManager statusLine = 
    getWindowConfigurer().getActionBarConfigurer().getStatusLineManager();

statusLine.setMessage("some status text");

Мне интересно, есть ли способ прочитать текущий текст, отображаемый в общем состоянии?линия?Я заметил, что вы можете сделать это с помощью StatusLineContributionItem's, но с общей строкой состояния это не так.

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

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

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

StatusLineManager.getControl () возвращает StatusLine (защищенный пакетом), однако он является подклассом составного, что означаетВы можете вызвать getChildren (), и один из этих детей будет CLabel, содержащим сообщение.

Это ужасно хакерский.

Более хороший способ, но больше работы:

Из документации StatusLineManager говорится, что клиенты могут создавать подклассы для предоставления различных макетов, поэтому, вероятно, вы можете создать подкласс этого класса и предоставить средства для представления последнего статуса.message.

Если вы создаете RCP, вы должны создать подкласс WorkbenchWindowAdvisor, у которого есть конструктор:

  public WorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) ...

Из конструктора вы можете вызвать:

   configurer.setPresentationFactory(factory);

Обратите внимание, из моих javadocs:

   Deprecated. the presentation factory is now obtained via extension point and a preference on org.eclipse.ui specifying which one to use; see IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID

Так что вы можете вместо этого исследовать эту точку расширения.

фабричный объект должен быть вашим собственным подклассом AbstractPresentationFactory (или действительно WorkbenchPresentationFactory), переопределяя этометод:

  public IStatusLineManager createStatusLineManager() {
    return new StatusLineManager();
}

для возврата вашего собственного подкласса StatusLineManager.

ПРИМЕЧАНИЕ. Я использую Eclipse 3.4.2, поэтому дважды проверьте документы на предмет используемой вами версии.

0 голосов
/ 04 марта 2011

ИМХО, это плохая практика для чтения из интерфейса. Архитектура Eclipse - это MVC, и это означает, что ваше состояние должно быть сохранено в контроллере, если оно понадобится вам в дальнейшем.

На вашем месте я бы сохранил статус, используя точки расширения:

  • org.eclipse.core.variables.dynamicVariables или
  • org.eclipse.core.variables.valueVariables

Я изменю значение переменной вместо непосредственного изменения строки состояния и использую IValueVariableListener для (автоматического) обновления строки состояния.

...