@Override protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { if (wHint == 0) return computeSize(composite, wHint, hHint, minNumColumns); else if (wHint == SWT.DEFAULT) return computeSize(composite, wHint, hHint, maxNumColumns); else return computeSize(composite, wHint, hHint, -1); }
@Override protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { updateCache(composite, flushCache); return computeSize(composite, wHint, hHint); }
int nColumns; if (wHint == SWT.DEFAULT) { nColumns = clampNumColumns(parent, maxNumColumns); columnWidth = Math.max(columnWidth, computeControlSize(i, SWT.DEFAULT).x); nColumns = clampNumColumns(parent, 0); columnWidth = Math.max(columnWidth, computeMinimumWidth(i)); nColumns = computeOptimalNumColumnsForWidth(parent, wHint); columnWidth = computeColumnWidthForNumColumns(wHint, nColumns); sizes[i] = computeControlSize(i, columnWidth); cheight += sizes[i].y; ncol = findShortestColumn(heights);
@Override protected void layout(Composite parent, boolean flushCache) { updateCache(parent, flushCache); Control[] children = parent.getChildren(); Rectangle carea = parent.getClientArea(); int nColumns = computeOptimalNumColumnsForWidth(parent, carea.width); int columnWidth = computeColumnWidthForNumColumns(carea.width, nColumns); sizes[i] = computeControlSize(i, columnWidth); cheight += sizes[i].y; ncol = findShortestColumn(heights);
sizes[i] = computeControlSize(children[i], cwHint); cwidth = Math.max(cwidth, sizes[i].x); cheight += sizes[i].y; ncol = findShortestColumn(heights);
private int computeOptimalNumColumnsForWidth(Composite parent, int width) { if (minNumColumns >= maxNumColumns || parent.getChildren().length <= minNumColumns) { return clampNumColumns(parent, minNumColumns); } Control[] children = parent.getChildren(); int minColWidth = 0; for (int i = 0; i < children.length; i++) { // To maximize the number of columns: int nextWidth = computeMinimumWidth(i); // To minimize the number of columns: // int nextWidth = computeControlSize(i, SWT.DEFAULT).x; minColWidth = Math.max(minColWidth, nextWidth); } return clampNumColumns(parent, (width - leftMargin - rightMargin + horizontalSpacing) / (minColWidth + horizontalSpacing)); }
Point[] sizes = new Point[children.length]; for (int i = 0; i < children.length; i++) { sizes[i] = computeControlSize(children[i], SWT.DEFAULT); cwidth = Math.max(cwidth, sizes[i].x); cheight += sizes[i].y; ncol = findShortestColumn(heights);
@Override public int computeMaximumWidth(Composite parent, boolean changed) { return computeSize(parent, SWT.DEFAULT, SWT.DEFAULT, changed).x; }
@Override public int computeMinimumWidth(Composite parent, boolean changed) { updateCache(parent, changed); return computeSize(parent, MIN_SIZE, SWT.DEFAULT).x; } }
@Override public int computeMinimumWidth(Composite parent, boolean changed) { return computeSize(parent, 0, SWT.DEFAULT, changed).x; } }
@Override public int computeMaximumWidth(Composite parent, boolean changed) { return computeSize(parent, SWT.DEFAULT, SWT.DEFAULT, changed).x; }
@Override public Point computeSize(int wHint, int hHint, boolean changed) { Layout layout = getLayout(); if (layout instanceof TableWrapLayout) return ((TableWrapLayout) layout).computeSize(this, wHint, hHint, changed); if (layout instanceof ColumnLayout) return ((ColumnLayout) layout).computeSize(this, wHint, hHint, changed); return super.computeSize(wHint, hHint, changed); } }