如何在eclipse EditorPart中保存在SWT OleClientSite中打开的文档?

时间:2013-06-11 09:09:58

标签: java swt eclipse-rcp ole

我开始使用SWT OLE api在Eclipse RCP中编辑Word文档。我创建了一个自定义编辑器,它扩展了org.eclipse.ui.part.EditorPart并包含一个OleClientSite对象。 问题是保存图标显示为灰色。是否有启用该图标的解决方案?

我还尝试向KeyListener添加OleClientSite以捕获Ctrl + s事件,但它似乎无效。在调试模式下,永远不会到达keyPressed方法中的断点...

我以为我可以在编辑器中添加一个keylistener,但我找不到。

1 个答案:

答案 0 :(得分:0)

这是OLE对象。在OLE中,保存菜单被禁用,但是可以通过 save()方法保存对象,如下所示:

oleClientSite.save(new File(fileName), true);

如果修改了对象,还有isDirty()方法返回true 您需要添加自己的菜单才能让用户保存文件。

private void addMenu(OleFrame frame, String menuName) {
    final Shell shell = frame.getShell();
    Menu menuBar = shell.getMenuBar();
    if (menuBar == null) {
        menuBar = new Menu(shell, SWT.BAR);
        shell.setMenuBar(menuBar);
    }
    MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE);
    fileMenu.setText(menuName);
    Menu menuFile = new Menu(fileMenu);
    fileMenu.setMenu(menuFile);
    frame.setFileMenus(new MenuItem[]{fileMenu});

    MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE);
    menuFileOpen.setText("Save ...");
    menuFileOpen.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
        oleClientSite.save(new File(fileName), true);

        }
    });
    MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
    menuFileExit.setText("Quit");
    menuFileExit.addSelectionListener(new SelectionAdapter() {
        shell.dispose();
        }
    });
}

.....
display = new Display();
shell = new Shell(display);
shell.setSize(1000, 700);
shell.setLayout(new FillLayout());

oleFrame = new OleFrame(shell, SWT.NONE);
oleClientSite = new OleClientSite(oleFrame, SWT.NONE, new File(fileName));
oleClientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);

addMenu(oleFrame);

此处有更多详情 - http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet262.java

http://www.eclipse.org/swt/snippets/