西门子 Teamcenter13 Eclipse RCP 开发 2.2 菜单栏 动态菜单
| 位置 | locationURI | 备注 |
|---|
| 菜单栏 | menu:org.eclipse.ui.main.menu | 添加到传统菜单 |
| 工具栏 | toolbar:org.eclipse.ui.main.toolbar | 添加到工具栏 |
1 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="menu:org.eclipse.ui.main.menu">
<menu id="com.xu.work.menu3.handlers.menu1" label="动态菜单">
<command commandId="com.xu.test.commands.submenu1Command" icon="icons/sample.png" id="com.xu.work.menu3.handlers.submenu1" label="二级菜单1">
</command>
<command commandId="com.xu.test.commands.submenu2Command" icon="icons/sample.png" id="com.xu.work.menu3.handlers.submenu2" label="二级菜单2">
</command>
<command commandId="com.xu.test.commands.submenu3Command" icon="icons/sample.png" id="com.xu.work.menu3.handlers.submenu3" label="二级菜单3">
</command>
<menu id="com.xu.work.menu3.handlers.submenu4" label="二级菜单4">
<dynamic class="com.xu.work.menu3.DynaMenu" id="com.xu.test.menus.dynamicSubmenu"/>
</menu>
</menu>
</menuContribution>
</extension>
<extension point="org.eclipse.ui.handlers">
<handler class="com.xu.work.menu3.handlers.SampleHandler" commandId="com.xu.test.commands.submenu1Command">
</handler>
<handler class="com.xu.work.menu3.handlers.SampleHandler" commandId="com.xu.test.commands.submenu2Command">
</handler>
<handler class="com.xu.work.menu3.handlers.SampleHandler" commandId="com.xu.test.commands.submenu3Command">
</handler>
<handler class="com.xu.work.menu3.handlers.SampleHandler" commandId="com.xu.test.commands.submenu4Command">
</handler>
<handler class="com.xu.work.menu3.handlers.SampleHandler" commandId="com.xu.test.commands.submenu4_1Command">
</handler>
</extension>
</plugin>
2 插件控制
package com.xu.work.menu3;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
public class Activator extends AbstractUIPlugin {
public static final String PLUGIN_ID = "com.xu.work.menu2";
private static Activator plugin;
public Activator() {
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
public static Activator getDefault() {
return plugin;
}
}
3 命令框架
package com.xu.work.menu3.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;
public class SampleHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
MessageDialog.openInformation(
window.getShell(),
"Tool1",
"Hello, Eclipse world");
return null;
}
}
4 动态菜单
package com.xu.work.menu3;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.actions.CompoundContributionItem;
public class DynaMenu extends CompoundContributionItem {
@Override
protected IContributionItem[] getContributionItems() {
List<IContributionItem> items = new ArrayList<>();
for (int i = 1; i <= 7; i++) {
final int index = i;
items.add(new ContributionItem() {
@Override
public void fill(Menu menu, int indexInMenu) {
MenuItem menuItem = new MenuItem(menu, org.eclipse.swt.SWT.PUSH, indexInMenu);
menuItem.setText("动态菜单项 " + index);
menuItem.addListener(org.eclipse.swt.SWT.Selection, e -> {
System.out.println("你点击了:动态菜单项 " + index);
});
}
});
}
return items.toArray(new IContributionItem[0]);
}
}
