From af5de065345739645f9010a5671ea35622b19af2 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Sat, 15 Mar 2008 08:55:42 +0000 Subject: [PATCH] Add ability to show plugin list in columns. This should probably be adapted to other lists like skins, themes, whatever. The new column generator function is generic enough to accomodate, but the code that generates the UI for things like skins is not so well designed methinks. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13041 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- config/conf.pl | 180 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 141 insertions(+), 39 deletions(-) diff --git a/config/conf.pl b/config/conf.pl index 7c37409e..ec34d48c 100755 --- a/config/conf.pl +++ b/config/conf.pl @@ -543,6 +543,11 @@ if ( $config_use_color == 1 ) { $config_use_color = 2; } +# lists can be printed in more than one column; default is just one +# +$columns = 1; +$screen_width = 80; + while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { clear_screen(); print $WHT. "SquirrelMail Configuration : " . $NRM; @@ -733,14 +738,18 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { print $WHT. "Plugins\n" . $NRM; } print " Installed Plugins\n"; - $num = 0; - for ( $count = 0 ; $count <= $#plugins ; $count++ ) { - $num = $count + 1; - $english_name = get_plugin_english_name($plugins[$count]); - if ( $english_name eq "" ) { - print " $num. $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n"; - } else { - print " $num. $english_name ($plugins[$count])" . get_plugin_version($plugins[$count]) . "\n"; + if ($columns > 1) { + $num = print_multi_col_list(1, $columns, $screen_width, 1, @plugins); + } else { + $num = 0; + for ( $count = 0 ; $count <= $#plugins ; $count++ ) { + $num = $count + 1; + $english_name = get_plugin_english_name($plugins[$count]); + if ( $english_name eq "" ) { + print " $WHT$num.$NRM $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n"; + } else { + print " $WHT$num.$NRM $english_name ($plugins[$count])" . get_plugin_version($plugins[$count]) . "\n"; + } } } print "\n Available Plugins:\n"; @@ -763,13 +772,17 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { } } - for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) { - $num = $num + 1; - $english_name = get_plugin_english_name($unused_plugins[$i]); - if ( $english_name eq "" ) { - print " $num. $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n"; - } else { - print " $num. $english_name ($unused_plugins[$i])" . get_plugin_version($unused_plugins[$i]) . "\n"; + if ($columns > 1) { + $num = print_multi_col_list($num + 1, $columns, $screen_width, 1, @unused_plugins); + } else { + for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) { + $num = $num + 1; + $english_name = get_plugin_english_name($unused_plugins[$i]); + if ( $english_name eq "" ) { + print " $WHT$num.$NRM $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n"; + } else { + print " $WHT$num.$NRM $english_name ($unused_plugins[$i])" . get_plugin_version($unused_plugins[$i]) . "\n"; + } } } closedir DIR; @@ -784,6 +797,8 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { } print "U Set the user for whom plugins can be disabled\n"; print "R Return to Main Menu\n"; + print "C# List plugins in <#> number of columns\n"; + print "W# Change screen width to <#>\n"; } elsif ( $menu == 9 ) { print $WHT. "Database\n" . $NRM; print "1. DSN for Address Book : $WHT$addrbook_dsn$NRM\n"; @@ -802,28 +817,28 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { print "\n"; print "R Return to Main Menu\n"; } elsif ( $menu == 10 ) { - print $WHT. "Language settings\n" . $NRM; - print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n"; - print "2. Default Charset : $WHT$default_charset$NRM\n"; - print "3. Show alternative language names : $WHT$show_alternative_names$NRM\n"; - print "4. Enable aggressive decoding : $WHT$aggressive_decoding$NRM\n"; - print "5. Enable lossy encoding : $WHT$lossy_encoding$NRM\n"; - print "\n"; + print $WHT. "Language settings\n" . $NRM; + print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n"; + print "2. Default Charset : $WHT$default_charset$NRM\n"; + print "3. Show alternative language names : $WHT$show_alternative_names$NRM\n"; + print "4. Enable aggressive decoding : $WHT$aggressive_decoding$NRM\n"; + print "5. Enable lossy encoding : $WHT$lossy_encoding$NRM\n"; + print "\n"; print "R Return to Main Menu\n"; } elsif ( $menu == 11 ) { - print $WHT. "Interface tweaks\n" . $NRM; - print "1. Display html mails in iframe : $WHT$use_iframe$NRM\n"; - print "2. Ask user info on first login : $WHT$ask_user_info$NRM\n"; - print "\n"; - print $WHT. "PHP tweaks\n" . $NRM; - print "4. Use php recode functions : $WHT$use_php_recode$NRM\n"; - print "5. Use php iconv functions : $WHT$use_php_iconv$NRM\n"; - print "\n"; - print $WHT. "Configuration tweaks\n" . $NRM; - print "6. Allow remote configtest : $WHT$allow_remote_configtest$NRM\n"; - print "7. Debug mode : $WHT$sm_debug_mode$NRM\n"; - print "8. Secured configuration mode : $WHT$secured_config$NRM\n"; - print "\n"; + print $WHT. "Interface tweaks\n" . $NRM; + print "1. Display html mails in iframe : $WHT$use_iframe$NRM\n"; + print "2. Ask user info on first login : $WHT$ask_user_info$NRM\n"; + print "\n"; + print $WHT. "PHP tweaks\n" . $NRM; + print "4. Use php recode functions : $WHT$use_php_recode$NRM\n"; + print "5. Use php iconv functions : $WHT$use_php_iconv$NRM\n"; + print "\n"; + print $WHT. "Configuration tweaks\n" . $NRM; + print "6. Allow remote configtest : $WHT$allow_remote_configtest$NRM\n"; + print "7. Debug mode : $WHT$sm_debug_mode$NRM\n"; + print "8. Secured configuration mode : $WHT$secured_config$NRM\n"; + print "\n"; print "R Return to Main Menu\n"; } if ( $config_use_color == 1 ) { @@ -866,6 +881,8 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { $WHT = "\x1B[37;1m"; $NRM = "\x1B[0m"; } + } elsif ( $command =~ /^w([0-9]+)/ ) { + $screen_width = $1; } elsif ( $command eq "d" && $menu == 0 ) { set_defaults(); } else { @@ -967,10 +984,11 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { } elsif ( $menu == 7 ) { if ( $command == 1 ) { $motd = command71(); } } elsif ( $menu == 8 ) { - if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); } - elsif ( $command eq "u" ) { $disable_plugins_user = command82(); } - elsif ( $command eq "d" ) { $disable_plugins = 'true'; } - elsif ( $command eq "e" ) { $disable_plugins = 'false'; } + if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); } + elsif ( $command eq "u" ) { $disable_plugins_user = command82(); } + elsif ( $command eq "d" ) { $disable_plugins = 'true'; } + elsif ( $command eq "e" ) { $disable_plugins = 'false'; } + elsif ( $command =~ /^c([0-9]+)/ ) { $columns = $1; } } elsif ( $menu == 9 ) { if ( $command == 1 ) { $addrbook_dsn = command91(); } elsif ( $command == 2 ) { $addrbook_table = command92(); } @@ -5687,3 +5705,87 @@ sub convert_debug_constants_to_binary_integer() { return $new_debug_mode; } + +# Function to print n column numbered lists +# +# WARNING: the names in the list will be truncated +# to fit in their respective columns based on the +# screen width and number of columns. +# +# Expected arguments (in this order): +# +# * The start number to use for the list +# * The number of columns to use +# * The screen width +# * Boolean (zero/one), indicating +# whether or not to show item numbers +# * The list of strings to be shown +# +# Returns: The number printed on screen of the last item in the list +# +sub print_multi_col_list { + my ($num, $cols, $screen_width, $show_numbering, @list) = @_; + my $x; + my $col_cnt = 0; + my $row_cnt = 0; + my $rows; + my $col_width; + my $total = 0; + my @layout = (); + my @numbers = (); + + $rows = int(@list / $cols); + if (@list % $cols) { $rows++; } + if ($show_numbering) { $col_width = int(($screen_width - 2) / $cols) - 5; } + else { $col_width = int(($screen_width - 2) / $cols) - 2; } + + # build the layout array so numbers run down each column + # + for ( $x = 0; $x < @list; $x++ ) { + + $layout[$row_cnt][$col_cnt] = $list[$x]; + $numbers[$row_cnt][$col_cnt] = $num++; + + # move to next column + # + if ($row_cnt == $rows - 1) { + $row_cnt = 0; + $col_cnt++; + } + else { $row_cnt++; } + + } + + # if we filled up fewer rows than needed, recalc column width + # + if ($rows * $col_cnt == @list) { $col_cnt--; } # loop above ended right after increment + if ($col_cnt + 1 < $cols) { + if ($show_numbering) { $col_width = int(($screen_width - 2) / ($col_cnt + 1)) - 5; } + else { $col_width = int(($screen_width - 2) / ($col_cnt + 1)) - 2; } + } + + # print it + # iterate rows + # + for ( $row_cnt = 0; $row_cnt <= $rows; $row_cnt++ ) { + + # indent the row + # + print " "; + + # iterate columns for this row + # + for ( $col_cnt = 0; $col_cnt <= $cols; $col_cnt++ ) { + if ($layout[$row_cnt][$col_cnt]) { + print " "; + if ($show_numbering) { printf "$WHT% 2u.$NRM", $numbers[$row_cnt][$col_cnt]; } + printf " %-$col_width." . $col_width . "s", $layout[$row_cnt][$col_cnt]; + } + } + print "\n"; + } + + + return $num - 1; +} + -- 2.25.1