以编程方式打开Eclipse CDT项目属性页的特定选项卡

时间:2016-12-02 17:57:42

标签: eclipse properties 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"声明的,并且有一个ID。但是使用不包含ID的extension point="org.eclipse.cdt.ui.cPropertyTab"添加选项卡。那么如何在没有ID的情况下解决标签?

1 个答案:

答案 0 :(得分:0)

这只是一个部分解决方案,但希望它有所帮助:

  • 保存createPropertyDialogOn()的返回值。这是一个PreferenceDialog
  • 在其上调用getSelectedPage()以获取代表该网页的IPreferencePage
  • 大多数CDT首选项页面(包括“构建设置”页面)都从org.eclipse.cdt.ui.newui.AbstractPage延伸。 AbstractPage使用SWT TabFolder小部件来存储标签。
  • 这是模糊部分:抓住页面的TabFolder小部件。不幸的是,它没有通过任何公共API公开,所以我认为你的选择是:
    • 使用反射。 TabFolder存储为名为AbstractPage的{​​{1}}的受保护字段。
    • 搜索以folder为根的SWT窗口小部件层次结构,其中page.getControl()pageAbstractPage
  • 获得标签控件后,您可以使用TabFoldergetItemCount()枚举其项目,其类型为getItem(index)
  • 在每个TabItem上,致电TabItem以检索相关的getData()
  • 检查ICPropertyTab对象以查看它是否是您要激活的对象。在您的情况下,这可能是ICPropertyTab
  • 之类的检查
  • 找到正确的标签后,通过tab instanceof org.eclipse.cdt.managedbuilder.ui.properties.BuildStepsTab激活它。