2016-12-02 4 views
1

Я хотел бы открыть конкретную вкладку страницы свойств проекта Eclipse CDT из кода. Например, снимок экрана ниже показывает страницу свойств, открытую на вкладке «Шаги сборки».Программно открыть специальную вкладку на странице свойств проекта Eclipse CDT

cdt project properties - build steps tab

Следующий код открывает страницу свойств успешно, но всегда последний доступ к вкладке.

private void openProperties(IProject project) { 
    String ID = "org.eclipse.cdt.managedbuilder.ui.properties.Page_BuildSettings"; 
    org.eclipse.swt.widgets.Shell shell = org.eclipse.swt.widgets.Display.getCurrent().getActiveShell(); 
    org.eclipse.ui.dialogs.PreferencesUtil.createPropertyDialogOn(
     shell, project, 
     ID, null, null, 0) 
     .open(); 
} 

То, что я не совсем понимаю, страница Настройки объявляется с помощью extension point="org.eclipse.ui.propertyPages" и имеет идентификатор. Но вкладки добавляются с использованием extension point="org.eclipse.cdt.ui.cPropertyTab", который не содержит идентификатор. Итак, как обращаются к вкладкам без идентификатора?

+0

'PreferencesUtil.createPropertyDialogOn' просто знает страницы свойств, он ничего не знает об их содержимом. –

+0

Любая идея, как я могу получить список ее вкладок со страницы свойств? – betamax

+0

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

ответ

0

Это лишь частичное решение, но надеюсь, что это помогает:

  • Сохранить возвращаемое значение createPropertyDialogOn(). Это PreferenceDialog.
  • Звоните getSelectedPage() на нем, чтобы получить IPreferencePage, представляющий страницу.
  • Большинство страниц предпочтений CDT, включая страницу настроек сборки, простираются от org.eclipse.cdt.ui.newui.AbstractPage. AbstractPage использует SWT TabFolder виджет для хранения вкладок.
  • Вот нечеткая часть: возьмите виджет TabFolder за страницу. К сожалению, он не открыт через какой-либо публичный API, поэтому я думаю, что ваши варианты:
    • Использование отражения. TabFolder хранится в качестве защищенного поля AbstractPage с именем folder.
    • Поиск иерархии виджета SWT, корневой в page.getControl(), где page является AbstractPage, для TabFolder.
  • После того как вы вкладок, вы можете использовать getItemCount() и getItem(index) на нем, чтобы перечислить его элементы, которые будут типа TabItem.
  • Для каждого TabItem позвоните по номеру getData(), чтобы получить связанный с ним номер ICPropertyTab.
  • Осмотрите объект ICPropertyTab, чтобы узнать, подходит ли именно тот, который вы хотите активировать. В вашем случае это может быть проверка как tab instanceof org.eclipse.cdt.managedbuilder.ui.properties.BuildStepsTab.
  • Как только вы нашли нужную вкладку, активируйте ее через folder.setSelection(item).
+0

Спасибо за подробный ответ, даст ваше предложение попробовать и отчитаться. – betamax

 Смежные вопросы

  • Нет связанных вопросов^_^