Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse rcp 如何在RCP透视图中保存编辑器?_Eclipse Rcp_Perspective - Fatal编程技术网

Eclipse rcp 如何在RCP透视图中保存编辑器?

Eclipse rcp 如何在RCP透视图中保存编辑器?,eclipse-rcp,perspective,Eclipse Rcp,Perspective,在我的RCP插件项目中,我有一个视图和一个编辑器。我还设置了一个透视图,其中创建了视图和编辑器 问题是编辑器的内容(在createPartControl-方法中描述)没有显示。如果我更改运行配置并在工作区数据中设置清除,我将获得默认透视图,当我单击窗口->透视图->打开透视图->其他…时,我可以选择我的“BDD透视图”,编辑器及其内容和视图可见。 如果工作区数据中的清除未设置,则会显示我的“BDD透视图”,但编辑器为空 有人知道如何在用户定义的透视图中显示编辑器的内容吗? 这是相关代码。透视图中

在我的RCP插件项目中,我有一个视图和一个编辑器。我还设置了一个透视图,其中创建了视图和编辑器

问题是编辑器的内容(在
createPartControl
-方法中描述)没有显示。如果我更改
运行配置
并在
工作区数据
中设置
清除
,我将获得默认透视图,当我单击
窗口->透视图->打开透视图->其他…
时,我可以选择我的“BDD透视图”,编辑器及其内容和视图可见。 如果
工作区数据
中的
清除
未设置,则会显示我的“BDD透视图”,但编辑器为空

有人知道如何在用户定义的透视图中显示编辑器的内容吗?

这是相关代码。透视图中有一个名为“CallBDDEditor”的处理程序,它打开编辑器:

public class Perspective implements IPerspectiveFactory {

String ID = "bddperspective";

@Override
public void createInitialLayout(IPageLayout layout) {

    String editorArea = layout.getEditorArea();

    IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, .15f, editorArea);
    right.addView(DiagramView.ID);

    IViewLayout viewLayout = layout.getViewLayout(DiagramView.ID);
    if (viewLayout != null) {
        viewLayout.setCloseable(false);
        viewLayout.setMoveable(false);
    }
    layout.setEditorAreaVisible(true);
    layout.setFixed(true);
    try {
        new CallBDDEditor().execute(null);
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    IWorkbenchPage page = window.getActivePage();
    IPerspectiveRegistry perspectiveRegistry = window.getWorkbench().getPerspectiveRegistry();
    IPerspectiveDescriptor personalPerspectiveDescriptor = perspectiveRegistry.findPerspectiveWithId(ID);

    if (page != null && personalPerspectiveDescriptor != null) {
        page.savePerspectiveAs(personalPerspectiveDescriptor);
    }
}}

public class CallBDDEditor extends AbstractHandler {

public static final String ID = "bdd.klighd.openBDDEditor";

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    IWorkbenchPage page = window.getActivePage();
    try {
        page.openEditor(new BDDEditorInput("test of editor input"), BDDEditor.ID);
    } catch (PartInitException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
public boolean isEnabled() {
    return false;
}

@Override
public boolean isHandled() {
    return false;
}

@Override
public void removeHandlerListener(IHandlerListener handlerListener) {
}}

public class BDDEditor extends EditorPart {

public static final String ID = "bdd.klighd.BDDEditor";
boolean dirty = false;
private String formula_ = "f(x,y,z) = x!y + z!x";

ToolItem inputItem_;
ToolItem showItem_;
ToolItem simplifyItem_;
ToolItem removeItem_;
ToolItem cancelItem_;
Composite parent_;
ToolBar bar_;
private Label formulaLbl_;

@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
    super.setSite(site);
    super.setInput(input);
}

@Override
public boolean isDirty() {
    return false;
}

@Override
public void createPartControl(Composite parent) {
    parent_ = parent;
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    parent_.setLayout(layout);
    formulaLbl_ = new Label(parent_, SWT.NONE);
    formulaLbl_.setText("");
    bar_ = new ToolBar(parent_, SWT.BORDER | SWT.VERTICAL);

    // create items
    inputItem_ = new ToolItem(bar_, 0);
    showItem_ = new ToolItem(bar_, SWT.PUSH);
    simplifyItem_ = new ToolItem(bar_, SWT.PUSH);
    removeItem_ = new ToolItem(bar_, SWT.PUSH);
    cancelItem_ = new ToolItem(bar_, 0);

    // set text on items
    inputItem_.setText("INPUT");
    showItem_.setText("SHOW");
    simplifyItem_.setText("SIMPLIFY");
    removeItem_.setText("REMOVE");
    cancelItem_.setText("CANCEL");

    // disable show-, simplify-, remove- and cancelItems
    showItem_.setEnabled(false);
    simplifyItem_.setEnabled(false);
    removeItem_.setEnabled(false);
    cancelItem_.setEnabled(false);

    DropdownSelectionListener listenerInput = new DropdownSelectionListener(inputItem_);
    listenerInput.add("As String", true);
    listenerInput.add("From File", false);
    inputItem_.addSelectionListener(listenerInput);

    bar_.pack();
    parent_.pack();
}

public IEditorInput getEditorInput() {
    return super.getEditorInput();
}

@Override
public void doSave(IProgressMonitor monitor) {
}

@Override
public boolean isSaveAsAllowed() {
    return true;
}

@Override
public void setFocus() {
}

@Override
public void dispose() {
    super.dispose();
}

@Override
public void doSaveAs() {
}}

我添加了
Extensions
ElementFactory
,您可以在这里看到。这是我的ElementFactory代码:

public class ElementFactory implements IElementFactory, IAdaptable {

String ID = "bdd.klighd.factory";

@Override
public IAdaptable createElement(IMemento memento) {
    return new BDDEditorInput("test of editor input");
}

@Override
public <T> T getAdapter(Class<T> adapter) {
    // TODO Auto-generated method stub
    return null;
}
}


是的,它起作用了,我的项目/按钮现在可以看到了。但我不知道为什么,因为我没有在EditorInput类中实现它们。然而,它是有效的

编辑器是否正在获取您所说的丢失的数据?请注意,在第二种情况下不会调用
createInitialLayout
,而是从持久化状态还原透视图。您的编辑器输入类可能需要支持持久化-请参阅@greg-449:Ok,非常感谢。现在我的问题是在
iperstableElement
saveState
-方法中写什么。在本例中[link]()作者将选择放在memento中,但对我来说,选择是无关的,我只需要
createInitialLayout
-方法的项目/按钮。我怎样才能保存它们呢?那篇博文是关于保存视图状态的——这是一件完全不同的事情。您正在做的是保存编辑器输入。您可以保存重新创建编辑器输入所需的任何内容。@greg-449:我阅读了这篇关于保存视图状态的博客文章,因为在关于保存编辑器状态的博客文章的第4项下,它说“saveState”方法适用于编辑器,就像它适用于视图一样。我不知道如何将我的项目/按钮放在“IMemento”中,我的特别编辑唯一相关的东西是什么。因此,我在关于保存视图状态的文章中搜索了一些帮助。你能不能给我一个小的代码片段的例子,如何做到这一点,请?
public class BDDEditorInput implements IStorageEditorInput, IPersistableElement {

private final String inputString;

public BDDEditorInput(String inputString) {
    this.inputString = inputString;
}

public boolean exists() {
    return true;
}

public ImageDescriptor getImageDescriptor() {
    return null;
}


@Override
public void saveState(IMemento memento) {
    // TODO Auto-generated method stub

}

@Override
public String getFactoryId() {
    return "bdd.klighd.factory";
}

public IPersistableElement getPersistable() {
    return this;
}

public IStorage getStorage() throws CoreException {
    return new IStorage() {
        public InputStream getContents() throws CoreException {
            return new StringBufferInputStream(inputString);
        }

        public IPath getFullPath() {
            return null;
        }

        public String getName() {
            return BDDEditorInput.this.getName();
        }

        public boolean isReadOnly() {
            return false;
        }

        public Object getAdapter(Class adapter) {
            return null;
        }
    };
}

public Object getAdapter(Class adapter) {
    return null;
}

public String getName() {
    return "input name";
}

public String getToolTipText() {
    return "BDD Editor";
}