我正在构建一个eclipse RCP应用程序,我有一个问题:
在插件中。xml文件中,我声明了一个包含5个命令的菜单。总之,它是这样的:
Menu A
subMenu A1
subMenu A2
我想告诉eclipse,只有当光标鼠标悬停在主菜单项(即菜单A)上时,子菜单是否必须可见。我该怎么做?
提前感谢
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="popup:com.x.sat.ui.views.ProjectsView?after=com.x.sat.ui.commands.closeproject">
<menu
icon="icons/repository_rep.gif"
id="com.x.sat.ui.sgc"
label="Gestion de Configuration">
<command
commandId="com.x.sat.sgc.ui.addProject"
label="Partager le projet"
style="push">
<visibleWhen
checkEnabled="false">
<reference
definitionId="satProjetOrSatModelProjectSelected">
</reference>
</visibleWhen>
</command>
<command
commandId="com.x.sat.sgc.ui.synchronize"
label="Synchroniser avec le dépôt ..."
style="push">
<visibleWhen
checkEnabled="false">
<reference
definitionId="synchronizeObject">
</reference>
</visibleWhen>
</command>
<command
commandId="com.x.sat.sgc.ui.browseRepository"
label="Parcourir le dépôt...."
style="push">
</command>
<command
commandId="com.x.sat.sgc.ui.compare"
label="Comparer..."
style="push">
</command>
<command
commandId="com.x.sat.sgc.ui.disconnect"
label="Déconnecter le projet ..."
style="push">
</command>
</menu>
</menuContribution>
</extension>
我过去做过类似的事情,但不确定这个技巧是否符合Eclipse的最新水平;我在菜单声明中使用了一个动态
元素,并在org.eclipse.ui.services扩展点使用了一个
源提供者
。
我想它也应该适用于你的弹出菜单。
链接到动态元素的类扩展了CompoundContributionItem,并重写了getContributionItems()方法,以更新sourceProvider变量状态。。。这是一个对我来说不是很清楚但很有效的技巧。。。
@Override
protected IContributionItem[] getContributionItems() {
SourceProvider.getInstance().updateState();
return new IContributionItem[0];
}
SourceProvider示例:
public class SourceProvider extends AbstractSourceProvider {
private static String ID = "fr.jln.stackoverflow.services.SourceProvider";
private static String VAR = "fr.jln.stackoverflow.variable1";
private static final String VAL_TRUE = "TRUE";
private static final String VAL_FALSE = "FALSE";
public static SourceProvider getInstance() {
ISourceProviderService ser = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class);
return (SourceProvider) ser.getSourceProvider(ID);
}
boolean state = false;
public SourceProvider() {}
@Override
public Map<?, ?> getCurrentState() {
String value = null;
Map<String, String> map = new HashMap<String, String>(1);
// fake variable (my id)
map.put(ID, VAL_TRUE);
// var state
value = state ? VAL_TRUE : VAL_FALSE;
map.put(VAR, value);
return map;
}
@Override
public String[] getProvidedSourceNames() {
return new String[] { ID, VAR };
}
public void updateState() {
Calendar cal = Calendar.getInstance();
int min = cal.get(Calendar.MINUTE);
state = (min % 2 == 0);
fireSourceChanged(ISources.WORKBENCH, VAR, state?VAL_TRUE:VAL_FALSE);
}
@Override
public void dispose() {}
}
插件。xml:
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu
label="StackOverflow">
<command
commandId="fr.jln.stackoverflow.command1"
label="Command 1"
style="push">
<visibleWhen
checkEnabled="false">
<with
variable="fr.jln.stackoverflow.variable1">
<equals
value="TRUE">
</equals>
</with>
</visibleWhen>
</command>
<command
commandId="fr.jln.stackoverflow.command2"
label="Command 2"
style="push">
<visibleWhen
checkEnabled="false">
<with
variable="fr.jln.stackoverflow.variable1">
<equals
value="FALSE">
</equals>
</with>
</visibleWhen>
</command>
<dynamic
class="ContributionItem"
id="fr.jln.stackoverflow.dynamic1">
</dynamic>
</menu>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.services">
<sourceProvider
provider="SourceProvider">
<variable
name="fr.jln.stackoverflow.variable1"
priorityLevel="workbench">
</variable>
</sourceProvider>
</extension>
在这个示例中,结果应该是一个包含2项的菜单,其中1项根据时间被屏蔽。。。
注意:有些id可能看起来很奇怪,但来源是从我的公司插件中提取的
希望这能帮助。。。
我怀疑你能用插件运行它。xml和在时可见。因为您知道要听的菜单项,所以可以添加一个ArmListener。它将侦听MenuItem,您可以在其中执行visibleWhen命令,或调用触发项目的其他方法。
ArmListener armListener = new ArmListener() {
@Override
public void widgetArmed(ArmEvent e) {
System.out.println(e);
}
};
并称之为:
Menu systemMenu = display.getSystemMenu();
if (systemMenu != null) {
MenuItem sysItem = getItem(systemMenu, SWT.ID_QUIT);
sysItem.addArmListener(armListener);
}
如果可以在此SWT代码段中找到用法,则提供完整示例
编辑:对于弹出菜单,您可以执行以下操作
final Menu tableMenu = new Menu(shell, SWT.POP_UP);
MenuItem item = new MenuItem(tableMenu, SWT.PUSH);
item.setText("Hover Me");
item.addArmListener(armListener);
菜单管理器允许为您的网站创建自定义菜单,并允许通过您的网站导航。 Step (1) - 在Joomla管理员中单击Menus → Menu Manager ,您将看到以下屏幕 - 您可以看到菜单和菜单项指向网站上的逻辑页面。 Step (2) - 要在您的网站上添加新菜单,请转到Menus → Menu Manager → Add New Menu ,如以下屏幕所示 - 单击“ Add New M
<div class="ui-actionsheet show"> <div class="ui-actionsheet-cnt am-actionsheet-down"> <h4>同时会将我从对方的列表中删除</h4> <button>分享</button> <button class="ui-actionsheet-del">删除
本文介绍:菜单 创建应用程序菜单和上下文菜单 进程: 主进程 new Menu() 用途:创建新菜单 静态方法 Menu.setApplicationMenu(menu) 用途:设置应用菜单(在macOS中为应用菜单,Windows 和 Linux中为窗口顶部菜单) menu Menu 注意: 这个API必须置于 app 模块的 ready之后. Menu.getApplicationMenu(
读取(查询)已设置菜单 $list = $app->menu->list(); 获取当前菜单 $current = $app->menu->current(); 添加菜单 添加普通菜单 $buttons = [ [ "type" => "click", "name" => "今日歌曲", "key" => "V1001_TODAY_MU
jd.getMenuButtonBoundingClientRect() 获取菜单按钮(右上角胶囊按钮)的布局位置信息。 返回值 Object 菜单按钮的布局位置信息 参数 类型 说明 width number 宽度,单位:px height number 高度,单位:px top number 上边界坐标,单位:px right number 右边界坐标,单位:px bottom number
我使用BottomNavigationViewEx库在我的android应用程序中显示底部菜单栏,该库运行良好并修复了标准BottomNavigationView的许多缺点。 问题是,根据要求,我需要在菜单中显示7个选项,其中4个选项是对各自功能的直接访问,还有一个“更多”选项,该选项应该显示一个包含3个以上选项的子菜单(类似于一个工具栏,其中包含属性为showAsAction=“never”的项
Eclipse 查看的菜单栏通常包含以下几个菜单: File 菜单 Edit 菜单 Navigate 菜单 Search 菜单 Project 菜单 Run 菜单 Window 菜单 Help 菜单 通过 Eclipse 插件你可以添加新的菜单和菜单项。 菜单描述 菜单名 描述 File File 菜单运行你打开文件,关闭编辑器,保存编辑的内容,重命名文件。 此外还可以导入和导出工作区的内容及关闭