2017-05-29 11 views
0

独自のカスタムエディタで独自のファイルタイプの内容を表示するEclipseプラグインを作成しています。 このファイルは、基本的に、プロジェクトエクスプローラの1..n IFileで構成され、SWTツリービューに表示されます。 このTreeViewのエントリはフラットなListで整理されたいくつかのBeanですが、私はそれらをIFileに変換するアダプタを提供しています。Eclipseプラグインdev - 非テキストカスタムエディタでデフォルトのIResourceコンテキストメニューを表示するにはどうすればいいですか?

<extension 
     point="org.eclipse.core.runtime.adapters"> 
     <factory 
      adaptableType="de.dstg.delta.collections.model.Collection$Member" 
      class="de.dstg.delta.collections.CollectionMemberAdapterFactory"> 
     <adapter 
       type="org.eclipse.ui.views.properties.IPropertySource2"> 
     </adapter> 
     <adapter 
       type="org.eclipse.core.resources.IFile"> 
     </adapter> 
     </factory> 
    </extension> 

Eclipse Screenshot

It'sカスタムSWTメニューを表示するには問題ありませんが、私は、正しい方法は、特に資源のデフォルトの動作を提供することで、Eclipseのメニュー構造を使用していると思います。 プロジェクトエクスプローラのリソースを右クリックして、SWT TableViewで使用するデフォルトのコンテキストポップアップメニューを表示するにはどうすればよいですか?

EDITは 2番目の質問は、グレッグ-449からの回答によると

EDIT2

を削除し、問題がコンテキストメニューは、私は選択のこのタイプのために持っていたい何の項目を示していないことに変わりはありません。 f.e. または などで開いているか、「ファイルの基本」のようなものが必要です。

また、適切なファイルタイプが選択されたときに表示される追加のプラグインのメニューもあります。これはプロジェクトエクスプローラでは動作しますが、私のテーブルビューでは動作しません。

問題は選択した要素のタイプだと思います。選択された要素の タイプ: プラグインスパイは私のテーブルビューに次のように示す選択された要素の有効Collection$Member、 インターフェイス:プロジェクト・エクスプローラ一方IAdaptable それぞれFileIFile、示しています。

私のアダプタは一般的に動作し、未知のEclipseソースからトリガされている間に関連するIFileを配信します。 私は明示的に言わなければならないと思う、コンテキストメニューはIFileタイプを使用して正しいメニューエントリを得るべきですが、私は方法を知らないのです。 または何かが恋しいですか?

+0

1つの質問で複数の質問をしないでください。 –

答えて

0

実際には「デフォルト」メニューはありません。一部のメニュー項目は、特定のプレースホルダを定義するすべてのポップアップメニューに追加されるように定義されています。

は、あなたは、Eclipseを使用してコンテキストメニューを登録する必要がありますプレースホルダを使用するには、何かのように:

getSite().setSelectionProvider(viewer); 
:あなたはおそらくも「選択・プロバイダー」として、あなたのビューアを設定する必要があります

private void createContextMenu(Viewer viewer) { 
    Control menuControl = viewer.getControl(); 
    MenuManager menuMgr = new MenuManager("#PopUp"); 
    menuMgr.setRemoveAllWhenShown(true); 
    menuMgr.addMenuListener(new IMenuListener() { 
     @Override 
     public void menuAboutToShow(IMenuManager mgr) { 
      fillContextMenu(mgr); 
     } 
    }); 
    Menu menu = menuMgr.createContextMenu(menuControl); 
    menuControl.setMenu(menu); 

    // register the context menu such that other plugins may contribute to it 
    getSite().registerContextMenu(menuMgr, viewer); 
} 

private void fillContextMenu(IMenuManager menu) { 
    // TODO add your actions 

    // Standard additions 
    menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); 
} 

多くのメニュー項目がこれをチェックして、現在の選択の種類を確認します。

Open WithやDeleteのようなものを自動的に与えるものはありません。あなた自身を 'fillContextMenu'セクションに追加する必要があります。

Open Withにはorg.eclipse.ui.actions.OpenWithMenuを使用できます。

IFile file = ... currently selected file 

IMenuManager submenu = new MenuManager("Open With..."); 
submenu.add(new OpenWithMenu(getSite().getPage(), file); 
menu.append(submenu); 
+0

選択プロバイダは既に設定されていましたが、メニューの登録はそのトリックでした。ありがとう!私は上記の残りの部分を解決するために私の質問を更新しました。どうぞご覧ください:) –

+0

サンプルコードでオープンを追加しました –

関連する問題