【发布时间】:2020-03-09 10:58:51
【问题描述】:
这与一个工具(Software AG Web Designer)有关,该工具在 Eclipse IDE 之上作为插件添加了功能。
如下所示,自定义导航器称为Package Navigator。
还可以看到顶部节点上选择的Refresh 按钮(在本例中为Default 名称)。
有没有办法从我正在开发的自定义插件中以编程方式调用Refresh 功能?
更新
我能找到的只有以下-
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="false"
id="com.softwareag.is.ui.navigator.actions.refresh"
objectClass="com.softwareag.is.ui.navigator.model.ISLazyTreeParent">
<action
class="com.softwareag.is.ui.navigator.actions.RefreshFromServerAction"
definitionId="org.eclipse.ui.file.refresh"
enablesFor="1"
helpContextId="org.eclipse.ui.edit.delete"
icon="icons/tree/refresh.gif"
id="com.softwareag.is.ui.navigator.actions.refresh"
label="%refresh_label"
menubarPath="group.edit"
tooltip="%refresh_tooltip">
</action>
<enablement>
<or>
<test property="com.softwareag.is.navigator.property.vcsEnabled"
value="true" forcePluginActivation="true"/>
<test property="com.softwareag.is.navigator.property.vcsNotEnabled"
value="true" forcePluginActivation="true"/>
</or>
</enablement>
</objectContribution>
班级是RefreshFromServerAction-
public class RefreshFromServerAction extends Action implements IActionDelegate {
private IStructuredSelection selection;
public RefreshFromServerAction() {
this.selection = StructuredSelection.EMPTY;
this.setId(ActionFactory.REFRESH.getId());
this.setActionDefinitionId("org.eclipse.ui.file.refresh");
}
public void selectionChanged(IAction action, ISelection sel) {
if (sel instanceof IStructuredSelection) {
this.selection = (IStructuredSelection) sel;
} else {
this.selection = StructuredSelection.EMPTY;
}
}
public void run() {
this.run((IAction) null);
}
public void run(IAction action) {
ISServerNode[] servers = AssetUtils.getSelectedServersFromSelection(this.selection);
if (servers != null) {
NavigatorHelper.getInstance().setExpandAllPath((ISServerObjectBase) null, (ISServerNode) null);
List<ISServerNode> refreshedServers = new ArrayList();
for (int i = 0; i < servers.length; ++i) {
if (!refreshedServers.contains(servers[i])) {
ServerConnection serverConnection = servers[i].getServerConnection();
if (serverConnection != null && !serverConnection.isConnected()) {
return;
}
ISTreeParent[] selectedAssetsFromSelection = AssetUtils
.getSelectedAssetsFromSelection(this.selection);
ISTreeParent[] var7 = selectedAssetsFromSelection;
int var8 = selectedAssetsFromSelection.length;
for (int var9 = 0; var9 < var8; ++var9) {
ISTreeParent isTreeParent = var7[var9];
ServerElementsCache.getInstance().clearCache(serverConnection, isTreeParent);
}
if ((new ISAssetSaver()).askAndSaveDirtyEditors(servers[i].getServerConnection())) {
ISNavigatorPlugin.getDefault().notifyListeners(new NavigatorEvent(5, servers[i], this));
refreshedServers.add(servers[i]);
}
}
}
}
}
}
您是否需要先创建它的对象,然后再做必要的事情。或者有什么标准的调用命令的方式吗?
【问题讨论】:
-
您需要知道该菜单项绑定到什么。使用插件 spy 找出它使用的操作/命令。
-
@greg-449:很快就会检查和更新。
-
@greg-449:你能就更新的部分提出建议吗?
标签: java eclipse eclipse-plugin swt