pau*_*aul 12 plugin.xml eclipse-rcp eclipse-rap
这是一个普遍的问题,但我目前的问题围绕菜单处理.
在具有贡献菜单操作的普通插件中,您将在plugin.xml配置中配置ActionSet等.这显然是明智的.
我正在研究RCP应用程序(实际上是RAP),我想知道是否值得通过plugin.xml配置所有内容.我的插件不必与其他未知的插件交互,所以理论上,我有控制权.我可以通过编程方式添加菜单和操作.
我一直在尝试配置包含子菜单的菜单.我尝试过定义ActionSet并将其中一个链接到另一个但没有成功.根据用户角色,需要禁用某些项目.
我想我可以在几分钟内完成整个编码,但我不确定这是否符合日食的"精神".
有什么意见吗?应用程序将变得相当大,所以我想从一开始就采用这种方法.也许有人可以给我一个配置嵌套菜单的例子:-)
And*_* B. 25
我的观点是plugin.xml实现是要走的路.
我使用这种方法的主要原因有两个:
这是一个实现菜单和子菜单的代码片段.在此示例中,它们将添加到主菜单中.
您可以将其粘贴到plugin.xml中:
<extension
name="Main Menu Contributions"
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="menu:org.eclipse.ui.main.menu">
<menu
id="fileMenu"
label="File">
<command
commandId="org.eclipse.ui.file.exit"
label="Exit"
style="push">
</command>
</menu>
<menu
label="Edit">
<command
commandId="org.eclipse.ui.edit.selectAll"
label="Select All"
style="push">
</command>
<menu
label="Submenu">
<command
commandId="org.eclipse.ui.edit.selectAll"
label="Select All Submenu"
style="push">
</command>
<command
commandId="org.eclipse.ui.edit.delete"
label="Delete submenu"
style="push">
</command>
</menu>
</menu>
</menuContribution>
</extension>
Run Code Online (Sandbox Code Playgroud)
要激活/取消激活菜单,必须使用Core Expressions来启用/禁用命令处理程序.如果命令没有附加任何活动处理程序,它将被禁用.因此,也将禁用调用该命令的菜单项.
以下代码段显示如何在视图的工具栏上创建按钮,并根据变量的值启用/禁用该按钮.请记住,您必须更改此代码中的某些内容才能使其正常工作.大多数更改是针对引用名称和类实现.
在工具栏中创建按钮(plugin.xml):
<extension
name="View Toolbar Contributions"
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="toolbar:myapp.views.MyView">
<command
commandId="myapp.commands.PauseSound"
icon=""
label="Pause Playback Sound"
style="push"
tooltip="Pause">
</command>
</menuContribution>
</extension>
Run Code Online (Sandbox Code Playgroud)
创建命令(plugin.xml):
<extension
id="myapp.commands.PauseSound"
name="Pause sound command"
point="org.eclipse.ui.commands">
<command
id="myapp.commands.PauseSound"
name="Pause Sound">
</command>
</extension>
Run Code Online (Sandbox Code Playgroud)
创建命令处理程序(plugin.xml):
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="myapp.commands.PauseSound">
<activeWhen>
<with
variable="myapp.commands.sourceprovider.active">
<or>
<equals
value="PLAYING">
</equals>
<equals
value="PAUSED">
</equals>
</or>
</with>
</activeWhen>
<class
class="myapp.rcp.commands.toolbar.PausePlayback">
</class>
</handler>
</extension>
Run Code Online (Sandbox Code Playgroud)
为命令创建状态变量(plugin.xml):
<extension
point="org.eclipse.ui.services">
<sourceProvider
provider="myapp.commands.sourceprovider.CommandState">
<variable
name="myapp.commands.sourceprovider.active"
priorityLevel="workbench">
</variable>
</sourceProvider>
</extension>
Run Code Online (Sandbox Code Playgroud)
实现更改变量状态的类:
public class CommandState extends AbstractSourceProvider {
public final static String STATE = "myapp.commands.sourceprovider.active";
public final static String STOPPED = "STOPPED";
public final static String PLAYING = "PLAYING";
public final static String PAUSED = "PAUSED";
public final static String NOT_LOADED = "NOT_LOADED";
enum State {
NOT_LOADED, PLAYING, PAUSED, STOPPED
};
private State curState = State.NOT_LOADED;
@Override
public void dispose() {
}
@Override
public String[] getProvidedSourceNames() {
return new String[] { STATE };
}
// You cannot return NULL
@SuppressWarnings("unchecked")
@Override
public Map getCurrentState() {
Map map = new HashMap(1);
if (curState == State.PLAYING)
map.put(STATE, PLAYING);
else if (curState == State.STOPPED)
map.put(STATE, STOPPED);
else if (curState == State.PAUSED)
map.put(STATE, PAUSED);
return map;
}
public void setPlaying() {
fireSourceChanged(ISources.WORKBENCH, STATE, PLAYING);
}
public void setPaused() {
fireSourceChanged(ISources.WORKBENCH, STATE, PAUSED);
}
public void setStopped() {
fireSourceChanged(ISources.WORKBENCH, STATE, STOPPED);
}
public void setNotLoaded() {
fireSourceChanged(ISources.WORKBENCH, STATE, NOT_LOADED);
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这些功能的更多详细信息,请访问以下位置:
| 归档时间: |
|
| 查看次数: |
16602 次 |
| 最近记录: |