releasing/cbrtools/perl/TableFormatter/Auto.pm
changeset 607 378360dbbdba
parent 602 3145852acc89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Auto.pm	Wed Jun 30 11:35:58 2010 +0800
@@ -0,0 +1,130 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Text.pm
+#
+
+package TableFormatter::Auto;
+
+use constant MAX_WIDTH => 75;
+use constant MAX_ROWS => 10;
+
+use strict;
+use TableFormatter;
+use TableFormatter::Text;
+use vars qw/@ISA/;
+
+@ISA = qw(TableFormatter);
+
+sub New {
+  my $class = shift;
+  my $inidata = shift;
+  my $args = shift;
+  
+  my ($complex, $complexargs) = $args =~ m/^(\w+)\s*(.*)/;
+  my $self = bless {}, (ref $class || $class);
+
+  $self->CreateFormatters($complex, $inidata, $complexargs);
+
+  return $self;
+}
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $doHeading = shift;
+
+  my $usecomplex = $self->UseComplexFormatter($data);
+
+  my $formatter = ($usecomplex?$self->{complex}:$self->{simple});
+  return $formatter->PrintTable($data, $doHeading);
+}
+
+## Private
+
+sub CreateFormatters {
+  my $self = shift;
+  my $complex = shift;
+  my $inidata = shift;
+  my $complexargs = shift;
+
+  $self->{complex} ||= TableFormatter::CreateFormatter($complex, $inidata, $complexargs);
+  $self->{simple} ||= TableFormatter::Text->New($inidata);
+}
+
+sub UseComplexFormatter {
+  my $self = shift;
+  my $data = shift;
+
+  # Currently {maxrows} and {maxwidth} are unused
+  my $maxrows = $self->{maxrows} || MAX_ROWS;
+  my $maxwidth = $self->{maxwidth} || MAX_WIDTH;
+
+  return 1 if (@$data > $maxrows);
+  return 1 if ($self->TotalWidth($data) > $maxwidth);
+  return 0;
+}
+
+sub TotalWidth {
+  my $self = shift;
+  my $data = shift;
+  
+  my $widths = $self->FindColWidths($data);
+  my $total = 0;
+  $total += $_ foreach (@$widths);
+  return $total;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Text.pm - Formats tables in text
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut