以编程方式控制SWT IViewPart的大小

时间:2012-01-20 02:34:40

标签: java eclipse swt

我意识到这是一个不寻常的请求,因为大多数ViewParts都是由工作区布局的,可能是堆栈而不是单方面访问自己的大小。

但是,我想要做的是略有不同。我正在扩展a find-replace bar for eclipse,这让你想起你在firefox中看到的那个(并且比默认值更不突兀)。

因此,对此的需求是在编辑器窗格底部为固定大小。但是,我没有成功设置视图的大小。我试过了

使用ISizeProvider:

public int getSizeFlags(boolean width) {
    if (width) {
        return SWT.FILL;
    }
    return SWT.MIN | SWT.MAX;
}

@Override
public int computePreferredSize(boolean width, int availableParallel,
        int availablePerpendicular, int preferredResult) {
    if (width) {
        return preferredResult;
    }
    return fixedHeight;
}

在我的根窗格及其父窗格上调用setSize()(注意这并不奇怪,这不起作用,因为父级的布局管理器可能会覆盖它。)

使用内部 PartPane类让边界框格尝试以编程方式移动IT。 (不要因为这样做而激怒我,我只是想探索各种可能性。)

private void updateSize(IWorkbenchPartReference pPartRef) {
    // FIXME -- this is all internal stuff. is there a public way to do this?
    if (pPartRef instanceof WorkbenchPartReference) {
        PartPane lPane = ((WorkbenchPartReference) pPartRef).getPane();
        Sashes sashes = new Sashes();
        if (lPane.getContainer() != null) {
            lPane.getContainer().findSashes(lPane, sashes );
            Sash topSash = sashes.top;
            if (okToUse(topSash)) {
                Rectangle parentBounds = topSash.getParent().getBounds();
                int topSashTop = parentBounds.height - fixedHeight - topSash.getSize().y;
                sashes.top.setLocation(sashes.top.getLocation().x, topSashTop);
                topSash.getParent().layout();
                System.out.println("sashtop = " + topSashTop);
            }
        }
    }
}

我也尝试过调用PartPane.flushLayout()和PartPane.getContainer.resizeChild(),但这些都没有做任何事情。 这些都不起作用。有没有办法达到我想要的目的?

0 个答案:

没有答案