编辑:已解决
背景
我已经实现了一个eclipse插件(在indigo上,3.7.2),它在条形图菜单中提供了一个新图标。
这个新操作在eclipse启动几秒后完全初始化(一些配置文件从我的maven存储库加载)。
我正在尝试禁用此操作,直到我的激活器完成初始化。
我在寻找什么
在初始化之前
初始化后
我已经完成了什么
我在操作上添加了启用测试。仅当我的插件被激活时才会启用我的操作。
<extension
point="org.eclipse.ui.actionSets">
<actionSet
label="Action Set"
visible="true"
id="com.eclipse.plugins.extarcheytpe.actionSet">
<action
class="com.eclipse.plugins.extarchetype.actions.ShortcutsAction"
icon="src/main/resources/icons/generic_box_16x16.png"
id="com.eclipse.plugins.extarcheytpe.actions.ShortcutsAction"
label="Shortcuts List"
style="pulldown"
toolbarPath="Shortcuts"
tooltip="Shortcuts">
<enablement>
<pluginState
id="com.eclipse.plugins.extarchetype"
value="activated">
</pluginState>
</enablement>
</action>
</actionSet>
</extension>
[...]
<extension
point="org.eclipse.ui.startup">
<startup
class="com.eclipse.plugins.extarchetype.Startup">
</startup>
</extension>
我定义了一个启动类,其中ignite()方法初始化我的插件配置:
public class Startup implements org.eclipse.ui.IStartup{
@Override
public void earlyStartup() {
try {
Activator.getDefault().ignite();
Activator.getDefault().setChanged();
Activator.getDefault().notifyObservers();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我在动作和激活器之间实现了一个观察设计模式(通知初始化结束)。
public class ShortcutsAction extends Action implements
IWorkbenchWindowPulldownDelegate, IMenuCreator, IObserver {
private IAction action;
private Menu menu;
public boolean enabled = false;
public ShortcutsAction() {
super();
Activator.getDefault().addObserver(this);
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
// Change action object instance at first selection
if (action != this.action) {
this.action = action;
}
// If property enabled is true, enable this action
if (enabled) {
action.setEnabled(true);
} else {
action.setEnabled(false);
}
}
[...]
@Override
public void update(IObservable obs, Object obj) {
this.enabled = true;
ConsoleHandler.logInfo("Shortcut enabled");
action.setEnabled(true);
}
}
结论
我得到了我想要的东西:
谢谢。
答案 0 :(得分:1)
<objectState>
和<objectClass>
测试当前所选对象的状态和类不动作处理程序类。
我认为您必须使用<systemProperty>
来检查您设置的属性。或使用selectionChanged
方法启用IAction
。
selectionChanged
方法是您使用IActionDelegate
间接实现的IWorkbenchWindowPulldownDelegate
接口的一部分:
public void selectionChanged(IAction action, ISelection selection)
action
参数是实际操作,请调用action.setEnabled(true)
以启用操作。