Eclipse RCP: Как заказать перспективные кнопки, относящиеся к разным плагинам? - PullRequest
3 голосов
/ 02 апреля 2009

Мое приложение имеет 5 плагинов. Каждый плагин имеет свою собственную перспективу, и, следовательно, каждое определение расширения перспективы находится в отдельном плагине plugin.xml.

Теперь я хочу контролировать порядок, в котором эти перспективы отображаются в моем приложении. Как это сделать?

Существует один основной плагин, который содержит «ApplicationWorkBenchAdvisor.java». У этого есть метод initialize (), в котором я перебираю перспективный реестр, используя

PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();

и затем добавление идентификаторов перспективы через запятую к переменной String (pbar), которая будет использоваться позже, как это.

PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);
PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);

При выполнении итераций в реестре перспектив, я могу сравнивать идентификаторы перспектив и сортировать их (при добавлении в 'pbar' путем сравнения идентификаторов) так, как я хочу, чтобы это отображалось, но я не хочу делать это здесь, как это выглядит как грязный путь.

Есть ли другое место, где мы можем установить порядок появления перспектив? (Каждая перспектива находится в другом плагине).

ДОБАВЛЕНО

1) Можем ли мы также контролировать порядок в переключателе перспективы?

2) Есть ли способ контролировать вход в перспективный реестр, чтобы вызвать желаемый порядок. Если бы не мы могли бы написать обратно в перспективный реестр?

Ответы [ 2 ]

8 голосов
/ 02 апреля 2009

Если ваше приложение инкапсулировано как продукт Eclipse, вы можете настроить файл plugin.properties/plugin_customization.ini.
(файл, на который ссылается свойство 'preferenceCustomization' в вашем продукте точка расширения .)
Этот файл является файлом формата java.io.Properties. Обычно этот файл используется для установки значений для предпочтений, которые публикуются как часть общедоступного API плагина.
(Пример такого файла для org.eclipse.platform)

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

 /**
  * Lists the extra perspectives to show in the perspective bar.
  * The value is a comma-separated list of perspective ids.
  * The default is the empty string.
  *
  * @since 3.2
  */
 public static final String JavaDoc PERSPECTIVE_BAR_EXTRAS = "PERSPECTIVE_BAR_EXTRAS"; //$NON-NLS-1$

Может быть, строка в файле plugin_customization.ini:

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3

позволит вам указать этот порядок без необходимости его жесткого кодирования.

Дополнительные примечания:

IPerspectiveRegistry (или PerspectiveRegistry ) не предназначены для записи чего-либо (особенно для перспективы, определенной в расширении)

Порядок можно найти в состоянии рабочего места (сохраняется в рабочем пространстве, а затем восстанавливается при его повторном запуске, .metadata/.plugins/org.eclipse.ui.workbench/workbench.xml)

Подтверждаете ли вы, что:

IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
IPerspectiveDescriptor[] perspectives = registry.getPerspectives();

не в правильном порядке, когда plugin_customization.ini правильно определяет этот порядок?

Ливерпуль 5 - 0 Aston Villa подтверждает, что (в комментариях), но также указывает, что (упорядоченные) записи ini-файлов внутренне записываются в хранилище настроек , что означает, что они можно получить через API хранилища настроек :

PatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)

Ливерпуль 5 - 0 Астон Вилла, затем добавьте:

реестр перспективы (начальный бит "PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();") остается неизменным (и неупорядоченным).
Но вы все еще можете " легко получить доступ к упорядоченному списку перспектив " через хранилище предпочтений .
Таким образом, для других задач вместо итераций в перспективном реестре (который все еще неупорядочен) мы можем использовать упорядоченную переменную, в которой хранится список упорядоченных соответствующих идентификаторов.

.
.
.
,


Примечание: еще одна возможность - Заменить переключатель перспективы в приложениях RCP

alt text => до: alt text

Вы можете более легко определить порядок в меню или в кнопках там.


Экстремальное решение: повторно реализовать переключатель перспективы .

http://www.richclient2.de/wp-content/uploads/2006/08/persp_header.png

5 голосов
/ 08 апреля 2009

Суммируя все наблюдения и выводы,

1) Невозможно изменить записи в реестре перспективы. Это только для чтения.

2) Чтобы перспектива отображалась в том порядке, в котором мы хотим на панели перспективы, мы можем добиться этого, добавив запись в plugin_customization.ini (или Preferences.ini), как показано ниже.

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3

3) Если мы хотим получить этот упорядоченный список, мы не можем получить его напрямую. Но так как эта запись ini-файла записывается внутри PreferenceStore, мы можем получить то же значение из PreferenceStore, используя следующий API, как показано ниже.

PlatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);

Зачем кому-то вообще нужен доступ к записи, определенной в ini-файле?

Ну, в моем случае у меня было представление, в котором мне приходилось отображать ссылки на каждую перспективу. Поскольку моя панель перспективы была отсортирована в желаемом порядке, я также хотел сохранить тот же порядок в моем представлении при отображении ссылок на перспективы.

4) Не существует известного способа навязать тот же порядок сортировки при отображении переключателя перспективы default . В то время как новый пользовательский переключатель перспективы может быть написан для достижения желаемого эффекта.

...