我正在尝试在我为eclipse插件做的菜单贡献上使用属性测试器。
基本上我在主菜单栏中添加了一个新菜单(通过扩展菜单:org.eclipse.ui.main.menu并添加菜单)。然后我用正确的处理程序在那里添加了我的命令。 一切都按预期工作。
我唯一的问题是我无法决定何时将它们激活。 我正在尝试将activeWhen用于我的处理程序。我希望它们在服务器上有某些数据时处于活动状态。
我尝试使用属性测试程序,但每次都不会调用它。只有在您选择其他视图时才会调用它。
这样做的正确方法是什么?
编辑:这是我正在使用的代码 http://pastebin.com/TGtZaBtM
我的属性测试程序运行是因为我打印出来的东西。 唯一的问题是每次打开菜单时它都不会运行。 我希望它每次运行,以便我可以检查用户是否登录。
答案 0 :(得分:1)
我可能很晚才回答......
无论如何,我总是使用sourceProvider
扩展点定义variable
和一些org.eclipse.ui.services
:
作为工具栏中某处的暂停操作的示例,这里是源提供程序的代码段及其在plugins.xml中的定义:
<extension
point="org.eclipse.ui.services">
<sourceProvider
provider="DataCollectionSourceProvider">
<variable
name="Pause"
priorityLevel="workbench">
</variable>
</sourceProvider>
</extension>
来源提供商:
public class DataCollectionSourceProvider extends AbstractSourceProvider {
public final static String ID = "DataCollectionSourceProvider";
public final static String ID_PAUSED = "Pause";
public final static String VAL_TRUE = "TRUE";
public final static String VAL_FALSE = "FALSE";
/**
* @return the instance of this source provider in this workbench
*/
public static DataCollectionSourceProvider getInstance() {
ISourceProviderService sourceProviderService = ISourceProviderService)PlatformUI.getWorkbench().getService(ISourceProviderService.class);
DataCollectionSourceProvider dcProvider = (DataCollectionSourceProvider)sourceProviderService.getSourceProvider(ID);
return dcProvider;
}
private boolean paused = false;
public DataCollectionSourceProvider() {
// do nothing
}
@Override
public Map<?, ?> getCurrentState() {
String value = null;
Map<String, String> map = new HashMap<String, String>(2);
// fake variable (my id)
map.put(ID, VAL_TRUE);
// paused state
value = paused ? VAL_TRUE : VAL_FALSE;
map.put(ID_PAUSED, value);
return map;
}
@Override
public String[] getProvidedSourceNames() {
return new String[] { ID, ID_PAUSED };
}
public void setPaused(boolean paused) {
this.paused = paused;
String value = paused ? VAL_TRUE : VAL_FALSE;
fireSourceChanged(ISources.WORKBENCH, ID_PAUSED, value);
}
}
然后在您的org.eclipse.ui.handlers
贡献中,使用其定义的ID中的变量添加enableWhen:
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="__your_command_id__">
<class
class="__your_handler_class__">
</class>
<enabledWhen>
<with
variable="Pause">
<equals
value="FALSE">
</equals>
</with>
</enabledWhen>
</handler>
</extension>
最后,如果要更新处理程序/操作状态,只需在代码中的某处调用以下代码
DataCollectionSourceProvider.getInstance().setPause(...)
答案 1 :(得分:0)
快速浏览一下:您在处理程序中使用'activeWhen'。您可以尝试在XML中使用“enabledWhen”
您还可以在处理程序中查看覆盖isEnabled()。当您的插件被激活时,这将有效。查看文档以获取更多信息。