@Override
	public Dimension getPreferredSize() {
		List<Column> columns = mOwner.getModel().getColumns();
		boolean drawDividers = mOwner.shouldDrawColumnDividers();
		Insets insets = getInsets();
		Dimension size = new Dimension(insets.left + insets.right, 0);
		ArrayList<Column> changed = new ArrayList<>();
		for (Column col : columns) {
			if (col.isVisible()) {
				int tmp = col.getWidth();
				if (tmp == -1) {
					tmp = col.getPreferredWidth(mOwner);
					col.setWidth(tmp);
					changed.add(col);
				}
				size.width += tmp + (drawDividers ? 1 : 0);
				tmp = col.getPreferredHeaderHeight() + 1;
				if (tmp > size.height) {
					size.height = tmp;
				}
			}
		}
		if (!changed.isEmpty()) {
			mOwner.updateRowHeightsIfNeeded(changed);
			mOwner.revalidateView();
		}
		size.height += insets.top + insets.bottom;
		return size;
	}