2016-09-29 3 views
1

私のRCPプラグインプロジェクトでは、私はビューとエディタを持っています。また、ビューとエディタが作成されたビューを設定しました。エディタをRCP-Perspectiveに保存する方法は?

問題は、エディタ(createPartControlの方法で説明)の内容が表示されないことです。 run configurationsを変更してclearWorkspace Dataに設定すると、デフォルトのパースペクティブが表示され、Window -> Perspective -> Open Perspective -> Other...をクリックすると、自分の「BDDパースペクティブ」とそのコンテンツのエディタを選択でき、ビューが表示されます。 Perspective with editor and view clearWorkspace Dataに設定していない場合、私の "BDD Perspective"は表示されますが、空のエディタが表示されます。 Perspective with empty editor and view

エディタのコンテンツをユーザー定義のパースペクティブで表示する方法を知っている人はいますか?

ここに関連コードがあります。あなたがここにElementFactory見ることができるように私はExtensionsElementFactoryに追加した

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() { 
}} 
+0

あなたが言うデータが欠落しているエディタはありますか? –

+0

'createInitialLayout'は2番目のケースでは呼び出されず、代わりにパースペクティブが永続化状態から復元されることに注意してください。あなたのエディタの入力クラスはおそらく永続化をサポートする必要があります - https://rajakannappan.blogspot.co.uk/2009/10/eclipse-rcp-saving-editor-state-and.html –

+0

@ greg-449を参照してください:ありがとう、ありがとうあなたは大変です。私の質問は、 'IPersistableElement'の' saveState'メソッドで書くべきものです。この例では、[link](http://rajakannappan.blogspot.de/2009/10/eclipse-rcp-how-to-save-view-layouts.html)では、作者は選択肢をメモに入れますが、私にとっては選択肢です私は 'createInitialLayout'メソッドのアイテム/ボタンが必要です。どうすればそれらを保存できますか? – aho

答えて

1

:視点でエディタを開く「CallBDDEditor」と呼ばれるハンドラが、あります。これは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のための私のコードです:

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"; 
} 

}

うん、それは動作しますが、私の項目/ボタン今すぐ表示されます。しかし、なぜ私はEditorInputクラスにそれらを実装していないので、なぜわかりません。しかし、それは動作します!

関連する問題