2011-11-04 1 views
3

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

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

ответ

3

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

декларативного способа связывания редактор с вклад в StatusLine (и меню и панель инструментов) осуществляется через класс IEditorActionBarContributor. Этот класс объявляется для типа редактора в plugin.xml - и обычно для каждого типа редактора создается один экземпляр (несколько запущенных экземпляров одного и того же типа редактора будут совместно использовать экземпляр IEditorActionBarContributor, вызывая его метод doSetActiveEditor() при активации), и он будет быть удаленным, когда последний запущенный редактор этого типа закрыт.

Давайте возьмем в качестве примера, как текстовый редактор по умолчанию в Eclipse, обновляет «Insert/Override» данные в строке состояния (из Затмения 3.7)

Текст по умолчанию редактор объявлен в некоторых org.eclipse.ui.editors «s plugin.xml (линии обрезки) как:

<extension point="org.eclipse.ui.editors"> 
     <editor name="%Editors.DefaultTextEditor" 
      class="org.eclipse.ui.editors.text.TextEditor" 
      contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor" 
      id="org.eclipse.ui.DefaultTextEditor"> 
     </editor> 
</extension> 

TextEditorActionContributor является ключом. Какой интерес у нас реализован в родительском классе BasicTextEditorActionContributor; он определяет (статически) 4 поля состояния (STATUS_FIELD_DEFS) и сохраняет внутренне фиксированную карту (fStatusFields) каждого статусного поля (spec, скажем) объекту StatusLineContributionItem). При вызове из пользовательского интерфейса Eclipse он регистрирует 4 поля в строке состояния (заголовки, в основном) в методе contributeToStatusLine(IStatusLineManager statusLineManager) И каждый раз, когда редактор активируется, он переходит к нему - в doSetActiveEditor(IEditorPart part) - полный набор StatusLineContributionItem s, подготовленный с соответствующими actionHandlers. Редактор понимает все это, потому что он реализует ITextEditorExtension.setStatusField().

В случае AbstractTextEditor, он имеет личное поле (внутренний класс) типа ToggleOverwriteModeAction, который вызывает

toggleOverwriteMode()->handleInsertModeChanged()->updateStatusField("InputMode") 

Редактора выглядит, если он имеет statusField сохраненный с этой категорией, если так будет называть IStatusField.setText("Insert"/"Overwrite"), и это приведет к обновлению сообщения о строке состояния.

Это пример, но я предполагаю, что он дает общую идею: экземпляр EditorActionContributor, привязанный к типу редактора, обновляет список обновленного StatusLineContributionItem, и редактор должен записывать объекты этого списка когда изменяется соответствующий статус. Таким образом, редактор отключается от строки состояния (он не знает, будет ли отображаться изменение статуса в пользовательском интерфейсе).

0

Я не совсем уверен, что вы просите, но есть конкретная реализация IStatusLineManager здесь: org.eclipse.jface.action.StatusLineManager

Как правило, если вы хотите получить доступ в строке состояния и у вас есть ручка для редактора, вы можете сделать что-то вроде этого (заимствованное из org.eclipse.jdt.internal.ui.javaeditor.AddImportOnSelectionAction:.

private IStatusLineManager getStatusLineManager() { 
    return fEditor.getEditorSite().getActionBars().getStatusLineManager(); 
} 
+0

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

1

для того, чтобы выяснить, как-то реализуется в Eclipse, вы можете также использовать так называемый плагин шпиона The Plug-в шпионе включен в Разработка среды разработки плагинов (PDE). Он выполнен с ALT + SHIFT + F1. Для получения дополнительной информации смотрите это Plug-in development FAQ.

+0

Хорошее предложение! –