我开始使用SWT OLE api在Eclipse RCP中编辑Word文档。我创建了一个自定义编辑器,它扩展了org.eclipse.ui.part.EditorPart
并包含一个OleClientSite
对象。
问题是保存图标显示为灰色。是否有启用该图标的解决方案?
我还尝试向KeyListener
添加OleClientSite
以捕获Ctrl + s事件,但它似乎无效。在调试模式下,永远不会到达keyPressed
方法中的断点...
我以为我可以在编辑器中添加一个keylistener,但我找不到。
答案 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);