1

私はRCPを初めて使用し、新しいビューまたはエディターを作成しようとしています。現在の状態で私は拡張していViewPartます。

私が達成したいレイアウトは、SashForm両側にがありCTabFolderます。の側面の1つSashFormは基本的にMultiPageEditorPartです。そのタブの1つは、構文の強調表示や同様の機能を備えた特定の言語のエディターである必要があります。私が理解していることから、私はそのために拡張することができますAbstractTextEditor(そして多分それをの1つのタブとして使用することができますMultiPageEditorPart)。

ViewPartを含む最上位のコンテナとしてこのレイアウトを実現しようとすると、のいずれかの辺にをSashForm追加できません。もちろん、このエディターを最初から実装することもできますが、それは避けたいと思います。EditorPartSashFormComposite

EditorPartまたはMultiPageEditorPartをトップレベルのコンテナとして使用することもできますが、SashFormレイアウトを機能させる方法を見つける必要があります。エディター全体を最初に分割してから、両側にタブを配置する必要があります。

誰かがこれを解決する方法を知っていますか?

不明な点がございましたらお問い合わせください。これを少し複雑に言葉にしたような気がします。

4

3 に答える 3

1

あなたが達成しようとしていることは非常に複雑で、多くの余分な作業が必要になるかもしれないと思います。エディターは、ある順序で配置されたさまざまなコントロールであるだけでなく、エディタークラスが機能することを期待する多くの追加機能を備えています。これらには、スムーズな実行を保証するためにフックする必要がある選択サービスやアクションバーなどが含まれます。

そうは言っても、あなたが望んでいることを達成することは可能であるはずです。それ自体のソースコードをMultiPageEditorPart見て、単一のエディターを複数ページのエディターに変換する方法を確認できます。マルチページエディターは、各ページで完全に独立したエディターをホストできます。MultiPageEditorPartエディターでサッシュで区切られた2つのをホストする場合は、同様のことを実現する必要があります。続行したい場合は、いくつかのものの実装を開始する必要があります。問題が発生した場合は、ここに投稿してください。そうすれば、もっと良い助けを得ることができるでしょう。

于 2013-01-07T12:04:44.287 に答える
1

ViewPartを使用する方法を見つけるのではなく、左側にある種のテキスト編集コンポーネントを含むを作成する必要があると思いますEditorPart。本当にあなたを買ってEditorPartいるのは、汚い旗の管理と保存のサポートだけです。シンタックスハイライトなどを自分でテキスト編集コンポーネントに追加できます(インターネットをざっと見ていたときに見つけたドロップインテキストコンポーネントの数が少ないことに驚きました。「いくつか」を見つけることを期待していましたが、代わりに「基本的に」を見つけました。無し")。

StyledTextここで、コンポーネントを使用して非常に基本的な構文の強調表示を行う1つの方法を確認できます: JavaSourceCodeViewer

シンタックスハイライトやオートコンプリートなどのより堅牢な実装を確認するには、EclipseがJavaソースコードの編集に使用するクラスを見てください。CompilationUnitEditor

于 2013-01-07T20:46:09.560 に答える
0

MultiPageEditorSiteのようなものが必要です。EditorSiteDelegateを実装する際のインスピレーションに使用してください。MultiPageEditorSiteは、たとえば、ページ間の個別のキーバインドをサポートしています。

class ChildEditorSite implements IEditorSite {
    IEditorSite parent;
    public Object method() {
       return parent.method();
    }
}

このクラスを使用すると、メインのEditorPartで次のことを簡単に実行できます。

class MyCoolPart extends EditorPart {
    public void createControl(Composite parent) {
         EditorPart child1 = new MyChild();
         child1.init(new ChildEditorSite(getEditorSite()), myInput);
         EditorPart child2 = new MyChild();
         child2.init(new ChildEditorSite(getEditorSite()), myInput);

         child1.createPartControl(parent);
         child2.createPartControl(parent);
    }
}

MyCoolPartを廃棄するときは、子供も正しく廃棄してください。これは最も基本的な場合にのみ機能することに注意してください。DocumentEditorであるか、IPersistablePartに依存するか、保存を確認するためにリスナー/アダプターを実装するEditorPartは、おそらくより多くのライフサイクル管理を必要とします...

于 2013-01-11T09:44:42.737 に答える