【发布时间】:2014-08-28 13:50:07
【问题描述】:
`public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private IWorkbenchAction saveAction;
private IWorkbenchAction saveAllAction;
// Actions - important to allocate these only in makeActions, and then use
// them
// in the fill methods. This ensures that the actions aren't recreated
// when fillActionBars is called with FILL_PROXY.
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(final IWorkbenchWindow window) {
saveAction = ActionFactory.SAVE.create(window);
register(saveAction);
saveAllAction = ActionFactory.SAVE_ALL.create(window);
register(saveAllAction);
}
// protected void fillMenuBar(IMenuManager menuBar) {
// }
protected void fillCoolBar(ICoolBarManager coolBar) {
IToolBarManager saveToolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
saveToolbar.add(saveAction);
saveToolbar.add(saveAllAction);
coolBar.add(new ToolBarContributionItem(saveToolbar, "save"));
}
package rcp_application;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
public class CallEditor extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
BottomView view = (BottomView)page.findView(BottomView.ID);
ISelection selection = view.getSite().getSelectionProvider()
.getSelection();
if (selection != null && selection instanceof IStructuredSelection) {
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
Person person = (Person) obj;
MyEditorInput input = new MyEditorInput(person);
try {
page.openEditor(input, MyEditor.ID);
} catch (PartInitException e) {
throw new RuntimeException(e);
}
}
}
return null;
}
}`
我已经尝试了很多方法来使 RCP 中的编辑器变脏,但没有奏效。我正在为我的编辑器实现 IEditorPart。当我编辑编辑器的内容时,它不会被标记为脏,并且保存按钮保持禁用状态。但是当我点击查看时,保存变为活动状态。我正在调用 firePropertyChange() 但是当我调试我的程序并进入 firePropertyChange() 时,侦听器列表发现为空。谁有解决方案,请分享。谢谢。
【问题讨论】:
-
你是直接实现
IEditorPart还是扩展EditorPart? -
@greg-449 我正在扩展 EditorPart
-
@greg-449 我正在调用 firePropertyChange() 但是当我调试我的程序并进入 firePropertyChange() 时,发现监听器列表为空。
-
如果监听器列表为空,则可能是
org.eclipse.ui.internal.BaseSaveAction中的部分监听器没有被触发。你是怎么打开编辑器的? -
@greg-449 我正在通过发出命令打开编辑器。检查代码