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