2

最初のプラグインが提供する拡張ポイントを使用して、他のプラグインに従ってナビゲーション ビューのコンテキスト メニューを動的に変更できる Eclipse プラグインを作成しようとしています。

少し回路図で: http://hpics.li/bddf781

目的は、プラグイン 2、3 ... によって提供されるすべてのコマンドに、プラグイン 1 のおかげでナビゲーション コンテキスト メニューからアクセスできるようにすることです。

私はすでにグーグルで検索しましたが、何も動作しません。

例えば ​​:

パッケージcom.sigasi;

 import java.util.Date;

 import org.eclipse.jface.action.ContributionItem;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;


 public class MyDynamicMenu extends ContributionItem {

    public MyDynamicMenu() {
    }

    public MyDynamicMenu(String id) {
    super(id);
    }

@Override
public void fill(Menu menu, int index) {
    //Here you could get selection and decide what to do
    //You can also simply return if you do not want to show a menu

    //create the menu item
    MenuItem menuItem = new MenuItem(menu, SWT.CHECK, index);
    menuItem.setText("My menu item (" + new Date() + ")");
    menuItem.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            //what to do when menu is subsequently selected.
            System.err.println("Dynamic menu selected");
        }
    });
}
}

と :

<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?after=additions">
    <dynamic
              class="com.sigasi.MydynamicMenu"
              id="com.sigasi.myDynamicMenu">
    </dynamic>
  </menuContribution>
</extension>

ソース: http://www.sigasi.com/content/dynamic-menu-items-eclipse

メニューに項目が 1 つしか追加されないのであれば、これは素晴らしいことです。私はそれを自分のニーズに合わせようとしましたが、成功しませんでした。

編集:JavaクラスのスーパークラスをCompoundContributionItem;に変更しようとしました。メニューに複数の項目を追加できますが、単に追加するのではなく、インデックスに応じて既存の項目を置き換えるようです。さらに、まだメニューを挿入できませんでした。これが私がしたことです:

package fr.cardinjoseph.extensionpoint.definition;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;

public class MyDynamicMenu extends CompoundContributionItem {

    ExtensionsFinder ef;

    public MyDynamicMenu() {
        ef = new ExtensionsFinder();
        ef.evaluateExtensions();
    }

    public MyDynamicMenu(String id) {
        super(id);
    }

    @Override
    public void fill(Menu menu, int index) {
        // Here you could get selection and decide what to do
        // You can also simply return if you do not want to show a menu

        // create the menu item

          Menu commandMenu = new Menu(menu);


         MenuItem test = new MenuItem(menu, index); test.setText("Test");
         test.addSelectionListener(new SelectionAdapter() { public void
         widgetSelected(SelectionEvent e) {  System.err.println("Dynamic menu selected"); }
         });


    }

    @Override
    protected IContributionItem[] getContributionItems() {
        // TODO Auto-generated method stub
        int size = ef.getExtensions().size();
        IContributionItem[] list = new IContributionItem[size];

        IWorkbench wb = PlatformUI.getWorkbench();
        IWorkbenchWindow win = wb.getActiveWorkbenchWindow();

        for(int i = 0 ; i< size ; i++){
            list[i] = new CommandContributionItem(new CommandContributionItemParameter(win, "MenuCommandeId_"+i, "CommandeId_"+i, SWT.None));
        }

        System.out.println("test");

        return list;
    }

    @Override
    public boolean isDynamic(){
        return true;
    }

}
4

2 に答える 2