При отображении нескольких экземпляров одного и того же представления хотелось бы, чтобы следующее значение оставалось верным:
- Представления не складываются
- Количество из них является динамическим (скажем, от 1 до 10) и первоначально не известно: они добавляются пользователем по одному
- Они расположены выше / ниже друг друга
- Они занимают все вертикальное пространство между собой
- По умолчанию они имеют одинаковую высоту (если есть 3 вида, каждый получает 1/3 от общего вертикального пространства, добавление 4-го вида заставляет их всех получить 1/4 и т. Д.)
Для добавления представлений в перспективе используется следующее:
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.addStandaloneViewPlaceholder(MarkerView.VIEW_ID + ":0", IPageLayout.TOP, 0.6F, editorArea, true);
layout.addStandaloneViewPlaceholder(MarkerView.VIEW_ID + ":1", IPageLayout.BOTTOM, 0.6F, editorArea, true);
layout.addStandaloneViewPlaceholder(MarkerView.VIEW_ID + ":2", IPageLayout.BOTTOM, 0.6F, editorArea, true);
Проблема в том, что, не зная, сколько будет просмотров, отношения не будут предоставлять равное пространство всем экземплярам представления.
Можно ли как-то настроить отношения существующих видов после добавления нового?
Я также пытался заставить класс представления реализовать ISizeProvider (который, как я признаю, не совсем понимаю), но мне так и не удалось добиться того, чего я хочу:
@Override
public int getSizeFlags(boolean width) {
return width ? 0 : SWT.FILL | SWT.MIN | SWT.MAX;
}
@Override
public int computePreferredSize(boolean width, int availableParallel, int availablePerpendicular, int preferredResult) {
int windowHeight = PlatformUI.getWorkbench().getDisplay().getActiveShell().getBounds().height;
int nrOfViews = Model.getInstance().markerCounter;
return width ? preferredResult : windowHeight / nrOfViews;
}
Является ли этот подход хоть чем-то в правильном направлении?