如何为扩展FormEditor类的编辑器启用Save和SaveAs操作

时间:2012-02-02 14:29:16

标签: eclipse eclipse-plugin swt eclipse-rcp

我有一个扩展FormEditor类的编辑器类。为了实现此编辑器的savesave As功能,是否足以覆盖:

  1. doSave(IProgressMonitor监视器)

  2. doSaveAs()

  3. isSaveAsAllowed()

  4. 单独使用这些方法?还是其他什么?

2 个答案:

答案 0 :(得分:1)

是。请同时考虑以下

  • 您的编辑器必须是脏的,这意味着您必须在
  • 之前调用firePropertyChange(PROP_DIRTY)
  • 如果您构建自己的RCP,请确保在Save
  • 中添加了Save As...ActionBarAdvisor菜单项
  • 考虑使用集成FormPages的doSave方法(这有时更有意义)
  • 请勿在doSave或doSaveAs方法中集成任何自定义用户交互(例如其他对话框)。
  • 考虑提供一个命令堆栈,用户可以撤消/重做有关编辑器输入的修改
  • 确保处理您的编辑器输入可以在此期间更改的事实(例如,如果另一个编辑器操作编辑器输入)。

答案 1 :(得分:1)

Eclipse社区论坛上有一篇关于此问题的优秀文章:http://www.eclipse.org/forums/index.php/t/140214/

摘录:

  

您正在使用FormEditor的实例作为编辑器。这个编辑器   包含FormPage实例作为页面。我希望你有   专门的SectionParts(或AbstractParts)作为页面中的部分。   在该部分中,您可以使用显示某些数据的文本小部件   附加了一个ModifyListener。在这个监听器中调用markDirty()   部分和ManagedForm和FormEditor将处理脏状态   您。并且不要忘记将每个SectionPart添加到ManagedForm中   addPart(节)!

所以你基本上只需要:

public class MyPage extends FormPage implements ModifyListener {

    private SectionPart secPart;
    private Text myText;

    public MyPage(FormEditor editor, String id, String title) {
        super(editor, id, title);
    }

    @Override
    protected void createFormContent(IManagedForm form) {

        secPart = new SectionPart(formBody, toolkit, Section.DESCRIPTION
                | Section.TITLE_BAR);
        Section section = secPart.getSection();

        //add labels and controls for the three fields
        myText = new Text(composite, SWT.BORDER);
        myText.addModifyListener(this);

        form.addPart(secPart);
    }

    public void modifyText(ModifyEvent arg0) {
        secPart.markDirty();
    }
}

作为旁注,来自FormEditor的editorDirtyStateChanged()将在您进行保存后轻推您的插件 - 使页面跟随使用commitPages(true)。这些方法将在您保存之后使用 - 让您的工作台知道一切都是干净的。