2016-12-02 5 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"を使用して宣言されているとIDを持っています。しかし、タブはIDを含まないextension point="org.eclipse.cdt.ui.cPropertyTab"を使って追加されます。では、IDなしでどのようにタブに対処していますか?

+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は、AbstractPagefolderという名前の保護フィールドとして格納されています。
    • page.getControl()pageAbstractPage)をルートとするSWTウィジェット階層を検索して、TabFolderとします。
  • あなたはタブコントロールを持っていたら、タイプTabItemのものであろうそのアイテムを、列挙することにgetItemCount()getItem(index)を使用することができます。
  • TabItemには、getData()を呼び出して、関連するICPropertyTabを取得してください。
  • ICPropertyTabオブジェクトを調べて、アクティブ化するオブジェクトであるかどうかを確認します。あなたの場合、それはtab instanceof org.eclipse.cdt.managedbuilder.ui.properties.BuildStepsTabのようなチェックであるかもしれません。
  • 正しいタブが見つかったら、folder.setSelection(item)で有効にします。
+0

詳細な返答をいただきありがとうございます。ご提案をお試しいただき、ご報告ください。 – betamax

関連する問題