我想做一個Eclipse插件,它能夠根據其他插件使用第一個插件提供的擴展點動態更改導航視圖的上下文菜單。如何爲Eclipse插件製作動態上下文菜單?
隨着一點點的原理:http://hpics.li/bddf781
的目的是,通過插件提供的所有命令2,3 ...可以導航上下文菜單感謝訪問到插件1
我已經Google搜索,但我無法獲得任何工作。
例如:
package 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
這可能是巨大的,如果它不只是一個項目添加到菜單。我試圖根據自己的需要調整它,但沒有成功。
編輯:我試圖改變那裏的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;
}
}
級聯菜單項不起作用,對菜單項沒有構造函數接受「菜單項」作爲第一個參數.... – Xinus 2015-01-18 16:52:55