Subject: | Improved CalcColumnWidth() |
This approach adds widths to columns that are wrapped before adding
width to all columns. This reduces the amount of empty horiz. white
space and helps allow wrapped columns to wrap on fewer rows in cases
where there is enough horiz. whitespace to allow it.
# Calculate how much can be added to every column to fit the
available width
for(my $j = 0; $j < scalar(@$col_props); $j++ )
{
$calc_widths->[$j] = $col_props->[$j]->{min_w};
}
my $is_last_iter;
for (;;)
{
my $span = ($avail_width - $min_width) / scalar( @$col_props);
last if $span <= 0;
$min_width = 0;
my $next_will_be_last_iter = 1;
for(my $j = 0; $j < scalar(@$col_props); $j++ )
{
my $new_w = $calc_widths->[$j] + $span;
$new_w = $col_props->[$j]->{max_w}
if !$is_last_iter
&& $new_w > $col_props->[$j]->{max_w};
if ( !defined $calc_widths->[$j] || $calc_widths->[$j]
!= $new_w ) {
$calc_widths->[$j] = $new_w;
$next_will_be_last_iter = 0;
}
$min_width += $new_w;
}
last if $is_last_iter;
$is_last_iter = $next_will_be_last_iter;
}
return ($calc_widths,$avail_width);