Программно контролировать размер SWT IViewPart - PullRequest
2 голосов
/ 20 января 2012

Я понимаю, что это несколько необычный запрос, поскольку большинство ViewParts размещены в рабочей области и могут быть в стеках и не иметь одностороннего доступа к своим собственным размерам.

Однако то, что я пытаюсь сделать, немного отличается. Я расширяю панель поиска-замены для затмения , которая напоминает ту, что вы видите в 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 для получения ограничивающих створок, чтобы попытаться перемещать ИТ программно. (Не подгоняйте меня за это, я просто пытаюсь изучить возможности).

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 (), и ничего из этого не делает. Ничего из этого не работает. Есть ли способ добиться того, чего я хочу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...