protected virtual void ResizeFreeSpaceFillingColumns(int freeSpace)
{
// It's too confusing to dynamically resize columns at design time.
if (this.DesignMode)
return;
if (this.Frozen)
return;
// Calculate the free space available
int totalProportion = 0;
List<OLVColumn> spaceFillingColumns = new List<OLVColumn>();
for (int i = 0; i < this.Columns.Count; i++) {
OLVColumn col = this.GetColumn(i);
if (col.FillsFreeSpace) {
spaceFillingColumns.Add(col);
totalProportion += col.FreeSpaceProportion;
} else
freeSpace -= col.Width;
}
freeSpace = Math.Max(0, freeSpace);
// Any space filling column that would hit it's Minimum or Maximum
// width must be treated as a fixed column.
foreach (OLVColumn col in spaceFillingColumns.ToArray()) {
int newWidth = (freeSpace * col.FreeSpaceProportion) / totalProportion;
if (col.MinimumWidth != -1 && newWidth < col.MinimumWidth)
newWidth = col.MinimumWidth;
else if (col.MaximumWidth != -1 && newWidth > col.MaximumWidth)
newWidth = col.MaximumWidth;
else
newWidth = 0;
if (newWidth > 0) {
col.Width = newWidth;
freeSpace -= newWidth;
totalProportion -= col.FreeSpaceProportion;
spaceFillingColumns.Remove(col);
}
}
// Distribute the free space between the columns
foreach (OLVColumn col in spaceFillingColumns) {
col.Width = (freeSpace * col.FreeSpaceProportion) / totalProportion;
}
}