1

トグルブレッドクラムビューのように、テキストエディタ内にツールバーが必要なEclipseプラグインがあります。これを可能にする汎用ユーティリティクラスはEclipseにありますか?

@Override
protected ISourceViewer createSourceViewer(Composite parent,
                                           IVerticalRuler ruler, 
                                           int styles)
{
    composite = new Composite(parent, SWT.NONE);
    GridLayout gridLayout = new GridLayout(1, true);
    gridLayout.numColumns = 1;
    gridLayout.marginHeight = 0;
    gridLayout.marginWidth = 0;
    composite.setLayout(gridLayout);

    ToolBar toolBar = new ToolBar(composite, SWT.FLAT);
    GridData gridData = new GridData(GridData.FILL, SWT.TOP, true, false);
    toolBar.setLayoutData(gridData);
    toolBarManager = new ToolBarManager(toolBar);

    return super.createSourceViewer(composite, ruler, styles);
}
4

2 に答える 2

1

クラスに基づくテキスト エディタがあると仮定すると、org.eclipse.ui.editors.text.TextEditorオーバーライドする必要がありますAbstractDecoratedTextEditor.createSourceViewer(Composite parent, ...)。基本的

  • で新しいトップCompositeインparentを作成しますGridLayout(1, false)。(引数に があるためComposite、これが必要です)。parentFillLayout
  • を作成し、ToolBarManagerで 'mng.createControl(top)' を実行しGridData(FILL, TOP, true, false)ます。
  • Compositewith の上に新しい子を作成しますGridData(FILL, FILL, true, true)
  • 呼び出しsuper.createSourceViewer(child, ...)ます。
于 2012-04-17T07:52:42.283 に答える
1

トニーの答えは良いですが、
super.createSourceViewer(composite, ruler, styles);
RTAがトニーの答えでコメントしたように、親のレイアウトが変更される場合があり、実際のエディター領域が失われることがあります。
RTAとまったく同じことをしたいときに、この問題に遭遇しました。
これが私の解決策です:

@Override
protected ISourceViewer createSourceViewer(Composite parent,
        IVerticalRuler ruler, int styles) {
    changeParentLayout(parent);
    Label label = createPathLabel(parent);
    ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);
    updateSourceViewerLayout(parent, label);
    return viewer;
}

//change the parent layout to grid layout,
//so that the source file area can be shown
protected void changeParentLayout(Composite parent) {
    parent.setLayout(new GridLayout(1, false));
}

//i need a label here, ToolBar will be the same
protected Label createPathLabel(Composite parent) {
    Label lblNewLabel = new Label(parent, SWT.NONE);
    lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 1, 1));
    lblNewLabel.setText(getFilePath());
    return lblNewLabel;
}

//after adding the label i need and call super.createSourceViewer()
//now all widgets are ready, we need to change the editor area's layout data to grid data
//here if you only have two widgets: label and area, you can directly choose the edit area widget. i used a loop to find all sub widgets
protected void updateSourceViewerLayout(Composite parent, Label label) {
    Control[] children = parent.getChildren();
    if (children.length < 2) return;
    for (Control child : children) {
        if (child != label) {
            child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        }
    }
}

private String getFilePath() {
    //get the path I want
    return "";
}
于 2014-11-18T07:25:23.990 に答える