如何在Eclipse RCP插件中启用全局保存功能

时间:2013-11-14 12:59:29

标签: eclipse eclipse-plugin eclipse-rcp

我有一个基于3.x平台的RCP应用程序。该应用程序使用户能够查看和修改单个数据集。有些ViewParts只是部分数据集的观察者,而其他人可以修改数据。当ViewPart修改我希望能够保存数据集的相同数据时,最好使用标准org.eclipse.ui.file.save命令,独立于当前具有焦点的ViewPart

我的方法是定义plugin.xml的扩展名,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="toolbar:org.eclipse.ui.main.toolbar">
         <toolbar
               id="se.file.maintoolbar"
               label="File Toolbar">
            <command
                  commandId="org.eclipse.ui.file.save"
                  label="&amp;Save Project"
                  style="push"
                  tooltip="Save the project">
            </command>
         </toolbar>
      </menuContribution>
   </extension>
.
.
.
</plugin>

在我ActionBarAdvisor的实施中,我注册了行动:

@Override
protected void makeActions(IWorkbenchWindow window) {
    saveProjectAction = ActionFactory.SAVE.create(window);
    register(saveProjectAction);
}

我的ViewParts,有三种,都实现ISaveablePart2,感觉不对,但没有看到任何其他方法。其中两个视图控制它们的isDirty()函数,因此保存按钮在它们有焦点时启用,如果它们是脏的,但如果其中一个是脏的,则应在所有视图中启用保存,而不仅仅是脏视图。为第三个视图启用保存功能而不指示脏,似乎是不可能的。

有人知道更好的方法吗?我想我可以创建自己的保存处理,但最好尽可能使用标准。

1 个答案:

答案 0 :(得分:1)

您可以在应显示为脏的所有视图中调用firePropertyChange(IWorkbenchPartConstants.PROP_DIRTY)