Author: richter
Date: Sun Nov 12 20:39:49 2006
New Revision: 474139

URL: http://svn.apache.org/viewvc?view=rev&rev=474139
Log:
EMbperl::Form: readd lost changes from last commit

Modified:
    perl/embperl/trunk/Embperl/Form.pm
    perl/embperl/trunk/Embperl/Form/Control.pm
    perl/embperl/trunk/Embperl/Form/Control/checkbox.pm

Modified: perl/embperl/trunk/Embperl/Form.pm
URL: 
http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form.pm?view=diff&rev=474139&r1=474138&r2=474139
==============================================================================
--- perl/embperl/trunk/Embperl/Form.pm (original)
+++ perl/embperl/trunk/Embperl/Form.pm Sun Nov 12 20:39:49 2006
@@ -1,807 +1,866 @@
-
-###################################################################################
-#
-#   Embperl - Copyright (c) 1997-2005 Gerald Richter / ecos gmbh   www.ecos.de
-#
-#   You may distribute under the terms of either the GNU General Public
-#   License or the Artistic License, as specified in the Perl README file.
-#
-#   THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-#   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-#   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-#   $Id$
-#
-###################################################################################
-
-
-package Embperl::Form ;
-
-use strict ;
-
-use lib qw{..} ;
-
-use Embperl ;
-use Embperl::Form::Control ;
-use Embperl::Form::Validate ;
-use Embperl::Form::Control::blank ;
-
-use Embperl::Inline ;
-
-use Data::Dumper ;
-
-our %forms ;
-our $formno = 1;
-our %CLEANUP = ('forms' => 0, 'formno' => 0) ;
-
-# ---------------------------------------------------------------------------
-#
-#   new - create a new form
-#
-
-
-sub new
-
-    {
-    my ($class, $controls, $options, $id, $validate_rules, $parentid) = @_ ;
-
-    my $toplevel = $validate_rules?0:1 ;
-    $id ||= 'topdiv' ;
-    $options ||= {} ;
-
-    my $self = ref $class?$class:{} ;
-
-    $self -> {controls}       = $controls ;
-    $self -> {id}             = $id ;
-    $self -> {formno}         = $formno++ ;
-    $self -> {parentid}       = $parentid ;
-    $self -> {formname}       = $options -> {formname} || 'topform' ;
-    $self -> {bottom_code}    = [] ;
-    $self -> {validate_rules} = [] ;
-    $self -> {toplevel}       = $toplevel ;
-
-    bless $self, $class if (!ref $class);
-
-    $forms{$self->{formno}} = $self ;
-    if (!$validate_rules)
-        {
-        $validate_rules = $self -> {validate_rules} = [] ;
-        }
-
-    $self -> new_controls ($controls, $options, undef, $id, $validate_rules, 
$options -> {masks}, $options -> {defaults}) ;
-
-    $self -> {noframe} = 1 if ($controls && @$controls > 0 &&
-                               $controls -> [0] -> noframe) ;
-
-
-    if ($toplevel)
-        {
-        my $epf = $self -> {validate} = Embperl::Form::Validate -> new 
($validate_rules, $self -> {formname}) if ($self -> {validate_rules}) ;
-        $self -> add_code_at_bottom ($epf -> get_script_code) ;
-        $self -> {fields2empty} = [] ;
-        }
-    else
-        {
-        $self -> {fields2empty} = $self -> parent_form -> {fields2empty} ;
-        }
-
-    return $self ;
-    }
-
-# ---------------------------------------------------------------------------
-#
-#   DESTROY
-#
-
-sub DESTROY
-    {
-    my ($self) = @_ ;
-    delete $forms{$self->{formno}} ;
-    }
-
-# ---------------------------------------------------------------------------
-#
-#   get_control_packages
-#
-#   returns an array ref with packges where to search for controls
-#
-
-sub get_control_packages
-    {
-    my ($self) = @_ ;
-
-    return $self -> {control_packages} || ['Embperl::Form::Control'] ;
-    }
-
-# ---------------------------------------------------------------------------
-#
-#   new_controls - transform elements to control objects
-#
-
-
-sub new_controls
-
-    {
-    my ($self, $controls, $options, $id, $formid, $validate_rules, $masks, 
$defaults) = @_ ;
-
-    my $n = 0 ;
-    my $packages = $self -> get_control_packages ;
-
-    foreach my $control (@$controls)
-        {
-        my $name = $control -> {name} ;
-        $control -> {type} =~ s/sf_select.+/select/ ;
-        $control -> {parentid}   = $id if ($id) ;
-        $control -> {id} ||= "$control->{name}-$n" ;
-        $control -> {formid} = $formid ;
-        $control -> {formno} = $self -> {formno} ;
-
-        my $type    = $control -> {type} ;
-        my $default = $defaults -> {$name} || $defaults -> {"*$type"} || 
$defaults -> {'*'};
-        my $mask    = $masks    -> {$name} || $masks -> {"*$type"} || $masks 
-> {'*'};
-        if ($mask)
-            {
-            foreach (keys %$mask)
-                {
-                $control -> {$_} = $mask -> {$_}  ;
-                }
-            }
-        if ($default)
-            {
-            foreach (keys %$default)
-                {
-                $control -> {$_} = $default -> {$_} if (!exists $control -> 
{$_}) ;
-                }
-            }
-
-
-        if (ref $control eq 'HASH')
-            {
-            my $ctlmod ;
-            my $type = $control -> {type} || ($control -> 
{name}?'input':'blank') ;
-            if ($type =~ /::/)
-                {
-                if (!defined (&{"$type\:\:new"}))
-                    {
-                    eval "require $type" ;
-                    warn $@ if ($@) ;
-                    }
-                $type -> new ($control) ;
-                $ctlmod = $type ;
-                }
-            else
-                {
-                foreach my $package (@$packages)
-                    {
-                    my $mod = "$package\:\:$type"  ;
-                    if ($mod -> can('new'))
-                        {
-                        $mod -> new ($control) ;
-                        $ctlmod = $mod ;
-                        last ;
-                        }
-                    }
-                if (!$ctlmod)
-                    {
-                    foreach my $package (@$packages)
-                        {
-                        my $mod = "$package\:\:$type"  ;
-                        eval "require $mod" ;
-                        warn $@ if ($@) ;
-                        if ($mod -> can('new'))
-                            {
-                            $mod -> new ($control) ;
-                            $ctlmod = $mod ;
-                            last ;
-                            }
-                        }
-                    }
-                }
-            die "No Module found for type = $type, searched: @$packages" if 
(!$ctlmod) ;
-            }
-
-        next if ($control -> is_disabled) ;
-        push @{$validate_rules}, $control -> get_validate_rules ;
-        if ($control -> {sublines})
-            {
-            my $i = 0 ;
-            my $name = $control -> {name} ;
-            foreach my $subcontrols (@{$control -> {sublines}})
-                {
-                next if (!$subcontrols) ;
-                $self -> new_controls ($subcontrols, $options, "$name-$i", 
$formid, $validate_rules, $masks, $defaults) ;
-                $i++ ;
-                }
-            }
-        if ($control -> {subforms})
-            {
-            my @obj ;
-            my @ids ;
-            my $i = 1 ;
-
-            foreach my $subcontrols (@{$control -> {subforms}})
-                {
-                next if (!$subcontrols) ;
-                my $id = "$control->{name}-$i" ;
-                my $class = ref $self ;
-                my $subform = $class -> new ($subcontrols, $options, $id, 
$validate_rules, $self -> {id}) ;
-                push @ids, $id ;
-                push @obj, $subform ;
-                $i++ ;
-                }
-            $control -> {subobjects} = [EMAIL PROTECTED] ;
-            $control -> {subids}     = [EMAIL PROTECTED] ;
-            }
-        $n++ ;
-        }
-    }
-
-# ---------------------------------------------------------------------------
-#
-#   parent_form - return parent form object if any
-#
-
-sub parent_form
-    {
-    my ($self) = @_ ;
-
-    return $Embperl::Form::forms{$self -> {parentid}} ;
-    }
-
-
-# ---------------------------------------------------------------------------
-#
-#   add_code_at_bottom - add js code at the bottom of the page
-#
-
-sub add_code_at_bottom
-
-    {
-    my ($self, $code) = @_ ;
-
-    push @{$self->{bottom_code}}, $code ;
-    }
-
-
-# ---------------------------------------------------------------------------
-#
-#   layout - build the layout of the form
-#
-
-sub layout
-
-    {
-    my ($self, $controls) = @_ ;
-
-    $controls ||= $self -> {controls} ;
-
-    my $x     = 0 ;
-    my $max_x = 100 ;
-    my $line  = [] ;
-    my @lines ;
-    my $max_num = 0 ;
-    my $num = 0 ;
-    foreach my $control (@$controls)
-        {
-        next if ($control -> is_disabled) ;
-        my $width = $control -> {width_percent} || int($max_x / ($control -> 
{width} || 2)) ;
-        if ($x + $width > $max_x || $control -> {newline} > 0 || (($control -> 
{sublines} || $control -> {subobjects}) && @$line))
-            { # new line
-            if ($x < $max_x)
-                {
-                push @$line, Embperl::Form::Control::blank -> new (
-                        {width_percent => $max_x - $x }) ;
-                }
-            push @lines, $line ;
-            $line = [] ;
-            $x    = 0 ;
-            $num  = 0 ;
-            }
-        push @$line, $control  ;
-        $control -> {width_percent} = $width ;
-        $control -> {x_percent}     = $x ;
-        $x += $width ;
-        $num++ ;
-        $max_num = $num if ($num > $max_num) ;
-
-        if ($control -> {subobjects} || $control -> {sublines} || $control -> 
{newline} < 0)
-            { # new line
-            if ($x < $max_x)
-                {
-                push @$line, Embperl::Form::Control::blank -> new (
-                        {width_percent => $max_x - $x }) ;
-                }
-            push @lines, $line ;
-            $line = [] ;
-            $x    = 0 ;
-            $num  = 0 ;
-            }
-
-        if ($control -> {sublines})
-            {
-            foreach my $subcontrols (@{$control -> {sublines}})
-                {
-                next if (!$subcontrols) ;
-                my $sublines = $self -> layout ($subcontrols) ;
-                push @lines, @$sublines ;
-                }
-            }
-        if ($control -> {subobjects})
-            {
-            my @obj ;
-            foreach my $subobj (@{$control -> {subobjects}})
-                {
-                next if (!$subobj) ;
-                $subobj -> layout ;
-                }
-            }
-        }
-
-    push @lines, $line if (@$line);
-    $self -> {max_num} = $max_num ;
-    return $self -> {layout} = [EMAIL PROTECTED] ;
-    }
-
-
-# ---------------------------------------------------------------------------
-#
-#   show_controls - output the form control area
-#
-
-sub show_controls
-
-    {
-    my ($self, $data, $activeid) = @_ ;
-
-    my $lines = $self -> {layout} ;
-    my %n ;
-    my $activesubid ;
-
-    $self -> show_controls_begin ($activeid) ;
-    my $lineno = 0 ;
-    foreach my $line (@$lines)
-        {
-        my $lineid = @$line && 
$line->[0]{parentid}?"$line->[0]{parentid}":'id' ;
-        $n{$lineid} ||= 10 ;
-
-        $self -> show_line_begin ($lineno, "$lineid-$n{$lineid}", 
$activesubid);
-        foreach my $control (@$line)
-            {
-            my $newactivesubid = $control -> get_active_id ;
-            $control -> show ($data);
-            $activesubid = $newactivesubid if ($newactivesubid) ;
-            if ($control -> {subobjects})
-                {
-                my @obj ;
-                $control -> show_sub_begin ;
-                foreach my $subobj (@{$control -> {subobjects}})
-                    {
-                    next if (!$subobj || !$subobj -> {controls} || [EMAIL 
PROTECTED] -> {controls}}) ;
-                    $subobj -> show ($data, $activesubid) ;
-                    }
-                $control -> show_sub_end ;
-                }
-            }
-        $self -> show_line_end ($lineno);
-        $lineno++ ;
-        $n{$lineid}++ ;
-        }
-    $self -> show_controls_end ;
-
-    return ;
-    }
-
-
-# ---------------------------------------------------------------------------
-#
-#   show - output the form
-#
-
-sub show
-
-    {
-    my ($self, $data, $activeid) = @_ ;
-
-    $self -> show_form_begin if ($self -> {toplevel});
-    $self -> show_controls ($data, $activeid) ;
-    $self -> show_form_end  if ($self -> {toplevel});
-    }
-
-
-# ---------------------------------------------------------------------------
-#
-#   validate - validate the form input
-#
-
-sub validate
-
-    {
-
-    }
-
-
-#------------------------------------------------------------------------------------------
-#
-#   add_tabs
-#
-#   fügt ein tab elsement mit subforms zu einem Formular hinzu
-#
-#   in $subform     array mit hashs
-#                       text => <anzeige text>
-#                       fn   => Dateiname
-#                       fields => Felddefinitionen (alternativ zu fn)
-#
-
-sub add_tabs
-
-    {
-    my ($self, $subforms, $args) = @_ ;
-    my @forms ;
-    my @values ;
-    my @options ;
-    my @grids;
-    $args ||= {} ;
-
-    foreach my $file (@$subforms)
-        {
-        my $fn        = $file -> {fn} ;
-        my $subfields = $file -> {fields} ;
-
-        push @options, $file -> {text};
-        if ($fn)
-            {
-            my $obj = Execute ({object => "./$fn"} ) ;
-            #$subfields = eval {$obj -> fields ($r, {%$file, %$args}) || 
undef};
-            }
-        push @forms,  $subfields;
-        push @grids,  $file -> {grid};
-        push @values, $file -> {value} ||= scalar(@forms);
-        }
-
-    return {
-            section => 'cSectionText',
-            name    => '__auswahl',
-            type    => 'tabs',
-            values  => [EMAIL PROTECTED],
-            grids   => [EMAIL PROTECTED],
-            options => [EMAIL PROTECTED],
-            subforms=> [EMAIL PROTECTED],
-            width   => 1,
-            },
-    }
-
-#------------------------------------------------------------------------------------------
-#
-#   add_line
-#
-#   adds the given controls into one line
-#
-#
-
-sub add_line
-
-    {
-    my ($self, $controls, $cnt) = @_ ;
-
-    $cnt ||= @$controls ;
-    foreach my $control (@$controls)
-        {
-        $control -> {width} = $cnt ;
-        }
-
-    return @$controls ;
-    }
-
-#------------------------------------------------------------------------------------------
-#
-#   add_sublines
-#
-#   fügt ein tab elsement mit subforms zu einem Formular hinzu
-#
-#   in $subform     array mit hashs
-#                       text => <anzeige text>
-#                       fn   => Dateiname
-#                       fields => Felddefinitionen (alternativ zu fn)
-#
-
-
-sub add_sublines
-    {
-    my ($self, $object_data, $subforms, $type) = @_;
-
-    my $name    = $object_data->{name};
-    my $text    = $object_data->{text};
-    my $width   = $object_data->{width};
-    my $section = $object_data->{section};
-
-    $text ||= $name;
-
-    my @forms ;
-    my @values ;
-    my @options ;
-
-    foreach my $file (@$subforms)
-        {
-        my $fn        = $file -> {fn} ;
-        my $subfields = $file -> {fields} ;
-        if ($fn)
-            {
-            my $obj = Execute ({object => "./$fn"} ) ;
-            #$subfields = eval {$obj -> fields ($r,$file) || undef};
-            }
-        push @forms,   $subfields || [];
-        push @values,  $file->{value} || $file->{name};
-        push @options, $file -> {text} || $file->{value} || $file->{name};
-        }
-
-    return { section => $section , width => $width, name => $name , text => 
$text, type => $type || 'select',
-             values => [EMAIL PROTECTED], options => [EMAIL PROTECTED], 
sublines => [EMAIL PROTECTED],
-             class  => $object_data->{class}, controlclass  => 
$object_data->{controlclass}};
-
-    }
-
-#------------------------------------------------------------------------------------------
-#
-#   fields_add_checkbox_subform
-#
-#   fügt ein checkbox Element mit Subforms hinzu
-#
-#   in $subform     array mit hashs
-#                       text => <anzeige text>
-#                       name => <name des Attributes>
-#                       value => <Wert der checkbox>
-#                       fn   => Dateiname
-#                       fields => Felddefinitionen (alternativ zu fn)
-#
-
-sub add_checkbox_subform
-    {
-    my ($self, $subform, $args) = @_ ;
-    $args ||= {} ;
-
-    my $name    = $subform->{name};
-    my $text    = $subform->{text};
-    my $value   = $subform->{value} || 1 ;
-
-    my $width   = $subform->{width};
-    my $section;
-
-    if(! $subform->{nosection})
-        {
-        $section = $subform->{section};
-        $section ||= 1;
-        }
-
-    $name   ||= "__$value";
-    $width  ||= 1;
-
-    my $subfield;
-    my $fn;
-    if($subfield = $subform->{fields})
-        {
-        # .... ok
-        }
-    elsif($fn = $subform->{fn})
-        {
-        my $obj = Execute ({object => "./$fn"} ) ;
-        #$subfield = [eval {$obj -> fields ($r, { %$file, %$args} ) || undef}];
-        }
-
-
-    return  {type => 'checkbox' , section => $section, width => $width, name 
=> $name, text => $text, value => $value, sublines => $subfield}
-
-    }
-
-
-1;
-
-
-__EMBPERL__
-
-[$syntax EmbperlBlocks $]
-
-[# ---------------------------------------------------------------------------
-#
-#   show_form_begin - output begin of form
-#]
-
-[$ sub show_form_begin ($self) $]
-<script language="javascript">var doValidate = 1 ;</script>
-<script src="/js/EmbperlForm.js"></script>
-<script src="/js/TableCtrl.js"></script>
-
-<form id="[+ $self->{formname} +]" name="[+ $self->{formname} +]" 
method="post" action="[+ $self->{actionurl}+]"
-[$ if ($self -> {on_submit_function}) $]
-onSubmit="s=[+ $self->{on_submit_function} +];if (s) { v=doValidate; 
doValidate=1; return ((!v) || epform_validate_[+ $self->{formname} +]()); } 
else { return false; }"
-[$else$]
-onSubmit="v=doValidate; doValidate=1; return ( (!v) || epform_validate_[+ 
$self->{formname}+]());"
-[$endif$]
->
-[$endsub$]
-
-[# ---------------------------------------------------------------------------
-#
-#   show_form_end - output end of form
-#]
-
-[$ sub show_form_end $]
-</form>
-[$endsub$]
-
-[ ---------------------------------------------------------------------------
-#
-#   show_controls_begin - output begin of form controls area
-#]
-
-[$ sub show_controls_begin  ($self, $activeid)
-
-my $parent = $self -> parent_form ;
-my $class = $parent -> {noframe}?'cTableDivU':'cTableDiv' ;
-$]
-<div  id="[+ $self->{id} +]"
-[$if ($activeid && $self->{id} ne $activeid) $] style="display: none" [$endif$]
->
-[$if (!$self -> {noframe}) $]<table class="[+ $class +]"><tr><td 
class="cTabTD"> [$endif$]
-<table class="cBase cTable">
-[$endsub$]
-
-[# ---------------------------------------------------------------------------
-#
-#   show_controls_end - output end of form controls area
-#]
-
-[$sub show_controls_end ($self) $]
-</table>
-[$ if (!$self -> {noframe}) $]</td></tr></table> [$endif$]
-</div>
-
-[$ if (@{$self->{bottom_code}}) $]
-<script language="javascript">
-[+ do { local $escmode = 0; join ("\n", @{$self->{bottom_code}}) } +]
-</script>
-[$endif$]
-[$ if ($self -> {toplevel} && @{$self -> {fields2empty}}) $]
-<input type="hidden" name="-fields2empty" value="[+ join (' ', @{$self -> 
{fields2empty}}) +]">
-[$endif$]
-[$endsub$]
-
-[# ---------------------------------------------------------------------------
-#
-#   show_line_begin - output begin of line
-#]
-
-[$ sub show_line_begin ($self, $lineno, $id, $activeid)
-
-    $id =~ /^(.+)-(\d+?)-(\d+?)$/ ;
-    my $baseid = $1 ;
-    my $baseidn = $2 ;
-    $activeid =~ /^(.+)-(\d+?)$/ ;
-    my $baseaid = $1 ;
-    my $baseaidn = $2 ;
-
-    my $class = $lineno == 0?'cTableRow1':'cTableRow' ;
-$]
-    <tr class="[+ $class +]"
-    [$if $id $] id="[+ $id +]"[$endif$]
-    [$if ($baseid eq $baseaid && $baseidn != $baseaidn) $] style="display: 
none"[$endif$]
-    >
-[$endsub$]
-
-[# ---------------------------------------------------------------------------
-#
-#   show_line_end - output end of line
-#]
-
-[$ sub show_line_end $]
-  </tr>
-[$endsub$]
-
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Embperl::Form - Embperl Form class
-
-=head1 SYNOPSIS
-
-=head1 DESCRIPTION
-
-=head1 METHODS
-
-=head2 new ($controls, $options)
-
-=over 4
-
-=item * $controls
-
-Array ref with controls which should be displayed
-inside the form. Each control needs either to be a
-hashref with all parameters for the control or
-a control object.
-
-If hash refs are given it's necessary to specify
-the C<type> parameter, to let Embperl::Form
-know which control to create.
-
-See Embperl::Form::Control and Embperl::Form::Control::*
-for a list of available parameters.
-
-=item * $options
-
-Hash ref which can take the following parameters:
-
-=over 4
-
-=item * formname
-
-Will be used as name and id attribute of the form. If you have more
-then one form on a page it's necessary to have different form names
-to make form validation work correctly.
-
-=item * masks
-
-Contains a hash ref which can specify a set of masks
-for the controls. A mask is a set of parameter which
-overwrite the setting of a control. You can specify
-a mask for a control name (key is name), for a control
-type (key is *type) or for all controls (key is *).
-
-Example:
-
-    {
-    'info'      => { readonly => 1},
-    '*textarea' => { cols => 80 },
-    '*'         => { labelclass => 'myclass', labelnowrap => 1}
-    }
-
-This will force the control with the name C<info> to be readonly, it
-will force all C<textarea> controls to have 80 columns and
-it will force the label of all controls to have a class of myclass
-and not to wrap the text.
-
-=item * defaults
-
-Contains a hash ref which can specify a set of defaults
-for the controls. You can specify
-a default for a control name (key is name), for a control
-type (key is *type) or for all controls (key is *).
-
-Example:
-
-    {
-    'info'      => { readonly => 1},
-    '*textarea' => { cols => 80 },
-    '*'         => { labelclass => 'myclass', labelnowrap => 1}
-    }
-
-This will make the control with the name C<info> to default to be readonly, it
-will deafult all C<textarea> controls to have 80 columns and
-it will set the default class for the labels of all controls to
-myclass and not to wrap the text.
-
-=back
-
-=back
-
-=head2 layout
-
-=head2 show
-
-
-=head1 AUTHOR
-
-G. Richter ([EMAIL PROTECTED])
-
-=head1 SEE ALSO
-
-perl(1), Embperl, Embperl::Form::Control
-
-
-
-
-
-
-
+
+###################################################################################
+#
+#   Embperl - Copyright (c) 1997-2005 Gerald Richter / ecos gmbh   www.ecos.de
+#
+#   You may distribute under the terms of either the GNU General Public
+#   License or the Artistic License, as specified in the Perl README file.
+#
+#   THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+#   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+#   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+#
+#   $Id$
+#
+###################################################################################
+
+
+package Embperl::Form ;
+
+use strict ;
+
+use lib qw{..} ;
+
+use Embperl ;
+use Embperl::Form::Control ;
+use Embperl::Form::Validate ;
+use Embperl::Form::Control::blank ;
+
+use Embperl::Inline ;
+
+use Data::Dumper ;
+
+our %forms ;
+our %CLEANUP = ('forms' => 0) ;
+
+# ---------------------------------------------------------------------------
+#
+#   new - create a new form
+#
+
+
+sub new
+
+    {
+    my ($class, $controls, $options, $id, $validate_rules, $parentptr) = @_ ;
+
+    my $toplevel = $validate_rules?0:1 ;
+    $id ||= 'topdiv' ;
+    $options ||= {} ;
+
+    my $self = ref $class?$class:{} ;
+
+    $self -> {controls}       = $controls ;
+    $self -> {id}             = $id ;
+    $self -> {parentptr}      = $parentptr ;
+    $self -> {formname}       = $options -> {formname} || 'topform' ;
+    $self -> {bottom_code}    = [] ;
+    $self -> {validate_rules} = [] ;
+    $self -> {toplevel}       = $toplevel ;
+    $self -> {valign}         = $options -> {valign}   || 'top' ;
+
+    bless $self, $class if (!ref $class);
+
+    $Embperl::FormData::forms{"$self"} = $self ;
+    if (!$validate_rules)
+        {
+        $validate_rules = $self -> {validate_rules} = [] ;
+        }
+
+    $self -> new_controls ($controls, $options, undef, $id, $validate_rules, 
$options -> {masks}, $options -> {defaults}) ;
+
+    $self -> {noframe} = 1 if ($controls && @$controls > 0 &&
+                               $controls -> [0] -> noframe) ;
+
+
+    if ($toplevel)
+        {
+        my $epf = $self -> {validate} = Embperl::Form::Validate -> new 
($validate_rules, $self -> {formname}) if ($self -> {validate_rules}) ;
+        $self -> add_code_at_bottom ($epf -> get_script_code) ;
+       $self -> {fields2empty} = [] ;
+        }
+    else
+        {
+        $self -> {fields2empty} = $self -> parent_form -> {fields2empty} ;
+        }
+
+    return $self ;
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   DESTROY
+#
+
+sub DESTROY
+    {
+    my ($self) = @_ ;
+
+    delete $Embperl::FormData::forms{"$self"} ;
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   get_control_packages
+#
+#   returns an array ref with packges where to search for control classes
+#
+
+sub get_control_packages
+    {
+    my ($self) = @_ ;
+
+    return $self -> {control_packages} || ['Embperl::Form::Control'] ;
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   get_datasrc_packages
+#
+#   returns an array ref with packges where to search for data source classes
+#
+
+sub get_datasrc_packages
+    {
+    my ($self) = @_ ;
+
+    return $self -> {datasrc_packages} || ['Embperl::Form::DataSource'] ;
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   new_object - load a control or datasrc class and create a new object of
+#                this class
+#
+#   in  $packages   arrayref of packages to search the class
+#       $name       name of the class. Either a full package name or
+#                   only the last part of the package. In the later
+#                   @$packages are searched for this class
+#   ret             reference to the object
+#
+
+sub new_object
+
+    {
+    my ($self, $packages, $name, $args) = @_ ;
+
+    my $ctlmod ;
+    my $obj ;
+
+    $args ||= {} ;
+
+    if ($name =~ /::/)
+        {
+        if (!defined (&{"$name\:\:new"}))
+            {
+            eval "require $name" ;
+            warn $@ if ($@) ;
+            }
+        $obj = $name -> new ($args) ;
+        $ctlmod = $name ;
+        }
+    else
+        {
+        foreach my $package (@$packages)
+            {
+            my $mod = "$package\:\:$name"  ;
+            if ($mod -> can('new'))
+                {
+                $obj = $mod -> new ($args) ;
+                $ctlmod = $mod ;
+                last ;
+                }
+            }
+        if (!$ctlmod)
+            {
+            foreach my $package (@$packages)
+                {
+                my $mod = "$package\:\:$name"  ;
+                eval "require $mod" ;
+                warn $@ if ($@) ;
+                if ($mod -> can('new'))
+                    {
+                    $obj = $mod -> new ($args) ;
+                    $ctlmod = $mod ;
+                    last ;
+                    }
+                }
+            }
+        }
+    die "No Module found for type = $name, searched: @$packages" if (!$ctlmod 
|| !$obj) ;
+
+    return $obj ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   new_controls - transform elements to control objects
+#
+
+
+sub new_controls
+
+    {
+    my ($self, $controls, $options, $id, $formid, $validate_rules, $masks, 
$defaults) = @_ ;
+
+    my $n = 0 ;
+    my $packages = $self -> get_control_packages ;
+
+    foreach my $control (@$controls)
+        {
+        die "control definition must be a hashref or an object, is '$control' 
" if (!ref $control || ref $control eq 'ARRAY');
+
+        my $name = $control -> {name} ;
+        $control -> {type} =~ s/sf_select.+/select/ ;
+        $control -> {parentid}   = $id if ($id) ;
+        $control -> {id} ||= "$control->{name}-$n" ;
+        $control -> {formid} = $formid ;
+        $control -> {formptr} = "$self" ;
+
+        my $type    = $control -> {type} ;
+        my $default = $defaults -> {$name} || $defaults -> {"*$type"} || 
$defaults -> {'*'};
+        my $mask    = $masks    -> {$name} || $masks -> {"*$type"} || $masks 
-> {'*'};
+        if ($mask)
+            {
+            foreach (keys %$mask)
+                {
+                $control -> {$_} = $mask -> {$_}  ;
+                }
+            }
+        if ($default)
+            {
+            foreach (keys %$default)
+                {
+                $control -> {$_} = $default -> {$_} if (!exists $control -> 
{$_}) ;
+                }
+            }
+
+
+        if (ref $control eq 'HASH')
+            {
+            my $type = $control -> {type} || ($control -> 
{name}?'input':'blank') ;
+            $control = $self -> new_object ($packages, $type, $control) ;
+            }
+
+        next if ($control -> is_disabled) ;
+        push @{$validate_rules}, $control -> get_validate_rules ;
+        if ($control -> {sublines})
+            {
+            my $i = 0 ;
+            my $name = $control -> {name} ;
+            foreach my $subcontrols (@{$control -> {sublines}})
+                {
+                next if (!$subcontrols) ;
+                $self -> new_controls ($subcontrols, $options, "$name-$i", 
$formid, $validate_rules, $masks, $defaults) ;
+                $i++ ;
+                }
+            }
+        if ($control -> {subforms})
+            {
+            my @obj ;
+            my @ids ;
+            my $i = 1 ;
+
+            foreach my $subcontrols (@{$control -> {subforms}})
+                {
+                next if (!$subcontrols) ;
+                my $id = "$control->{name}-$i" ;
+                my $class = ref $self ;
+                my $subform = $class -> new ($subcontrols, $options, $id, 
$validate_rules, "$self") ;
+                push @ids, $id ;
+                push @obj, $subform ;
+                $i++ ;
+                }
+            $control -> {subobjects} = [EMAIL PROTECTED] ;
+            $control -> {subids}     = [EMAIL PROTECTED] ;
+            }
+        $n++ ;
+        }
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   parent_form - return parent form object if any
+#
+
+sub parent_form
+    {
+    my ($self) = @_ ;
+
+    return $Embperl::FormData::forms{$self -> {parentptr}} ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   add_code_at_bottom - add js code at the bottom of the page
+#
+
+sub add_code_at_bottom
+
+    {
+    my ($self, $code) = @_ ;
+
+    push @{$self->{bottom_code}}, $code ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   layout - build the layout of the form
+#
+
+sub layout
+
+    {
+    my ($self, $controls) = @_ ;
+
+    $controls ||= $self -> {controls} ;
+
+    my $x     = 0 ;
+    my $max_x = 100 ;
+    my $line  = [] ;
+    my @lines ;
+    my $max_num = 0 ;
+    my $num = 0 ;
+    foreach my $control (@$controls)
+        {
+        next if ($control -> is_disabled) ;
+        my $width = $control -> {width_percent} || int($max_x / ($control -> 
{width} || 2)) ;
+        if ($x + $width > $max_x || $control -> {newline} > 0 || (($control -> 
{sublines} || $control -> {subobjects}) && @$line))
+            { # new line
+            if ($x < $max_x)
+                {
+                push @$line, Embperl::Form::Control::blank -> new (
+                        {width_percent => $max_x - $x }) ;
+                }
+            push @lines, $line ;
+            $line = [] ;
+            $x    = 0 ;
+            $num  = 0 ;
+            }
+        push @$line, $control  ;
+        $control -> {width_percent} = $width ;
+        $control -> {x_percent}     = $x ;
+        $x += $width ;
+        $num++ ;
+        $max_num = $num if ($num > $max_num) ;
+
+        if ($control -> {subobjects} || $control -> {sublines} || $control -> 
{newline} < 0)
+            { # new line
+            if ($x < $max_x)
+                {
+                push @$line, Embperl::Form::Control::blank -> new (
+                        {width_percent => $max_x - $x }) ;
+                }
+            push @lines, $line ;
+            $line = [] ;
+            $x    = 0 ;
+            $num  = 0 ;
+            }
+
+        if ($control -> {sublines})
+            {
+            foreach my $subcontrols (@{$control -> {sublines}})
+                {
+                next if (!$subcontrols) ;
+                my $sublines = $self -> layout ($subcontrols) ;
+                push @lines, @$sublines ;
+                }
+            }
+        if ($control -> {subobjects})
+            {
+            my @obj ;
+            foreach my $subobj (@{$control -> {subobjects}})
+                {
+                next if (!$subobj) ;
+                $subobj -> layout ;
+                }
+            }
+        }
+
+    push @lines, $line if (@$line);
+    $self -> {max_num} = $max_num ;
+    return $self -> {layout} = [EMAIL PROTECTED] ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   show_controls - output the form control area
+#
+
+sub show_controls
+
+    {
+    my ($self, $req, $activeid) = @_ ;
+
+    my $lines = $self -> {layout} ;
+    my %n ;
+    my $activesubid ;
+
+    $self -> show_controls_begin ($req, $activeid) ;
+    my $lineno = 0 ;
+    foreach my $line (@$lines)
+        {
+        my $lineid = @$line && 
$line->[0]{parentid}?"$line->[0]{parentid}":'id' ;
+        $n{$lineid} ||= 10 ;
+
+        $self -> show_line_begin ($req, $lineno, "$lineid-$n{$lineid}", 
$activesubid);
+        foreach my $control (@$line)
+            {
+            my $newactivesubid = $control -> get_active_id ($req) ;
+            $control -> show ($req);
+            $activesubid = $newactivesubid if ($newactivesubid) ;
+            if ($control -> {subobjects})
+                {
+                my @obj ;
+                $control -> show_sub_begin ($req) ;
+                foreach my $subobj (@{$control -> {subobjects}})
+                    {
+                    next if (!$subobj || !$subobj -> {controls} || [EMAIL 
PROTECTED] -> {controls}}) ;
+                    $subobj -> show ($req, $activesubid) ;
+                    }
+                $control -> show_sub_end ($req) ;
+                }
+            }
+        $self -> show_line_end ($req, $lineno);
+        $lineno++ ;
+        $n{$lineid}++ ;
+        }
+    $self -> show_controls_end ($req) ;
+
+    return ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   show - output the form
+#
+
+sub show
+
+    {
+    my ($self, $req, $activeid) = @_ ;
+
+    $self -> init_data ($req) if ($self -> {toplevel});
+    #$self -> validate ($req) if ($self -> {toplevel});
+    $self -> show_form_begin ($req) if ($self -> {toplevel});
+    $self -> show_controls ($req, $activeid) ;
+    $self -> show_form_end  ($req) if ($self -> {toplevel});
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   init_data - 
+#
+
+sub init_data
+
+    {
+
+    }
+
+# ---------------------------------------------------------------------------
+#
+#   validate - validate the form input
+#
+
+sub validate
+
+    {
+
+    }
+
+
+#------------------------------------------------------------------------------------------
+#
+#   add_tabs
+#
+#   fügt ein tab elsement mit subforms zu einem Formular hinzu
+#
+#   in $subform     array mit hashs
+#                       text => <anzeige text>
+#                       fn   => Dateiname
+#                       fields => Felddefinitionen (alternativ zu fn)
+#
+
+sub add_tabs
+
+    {
+    my ($self, $subforms, $args) = @_ ;
+    my @forms ;
+    my @values ;
+    my @options ;
+    my @grids;
+    $args ||= {} ;
+
+    foreach my $file (@$subforms)
+        {
+        my $fn        = $file -> {fn} ;
+        my $subfields = $file -> {fields} ;
+
+        push @options, $file -> {text};
+        if ($fn)
+            {
+            my $obj = Execute ({object => "./$fn"} ) ;
+            #$subfields = eval {$obj -> fields ($r, {%$file, %$args}) || 
undef};
+            }
+        push @forms,  $subfields;
+        push @grids,  $file -> {grid};
+        push @values, $file -> {value} ||= scalar(@forms);
+        }
+
+    return {
+            section => 'cSectionText',
+            name    => '__auswahl',
+            type    => 'tabs',
+            values  => [EMAIL PROTECTED],
+            grids   => [EMAIL PROTECTED],
+            options => [EMAIL PROTECTED],
+            subforms=> [EMAIL PROTECTED],
+            width   => 1,
+            },
+    }
+
+#------------------------------------------------------------------------------------------
+#
+#   add_line
+#
+#   adds the given controls into one line
+#
+#
+
+sub add_line
+
+    {
+    my ($self, $controls, $cnt) = @_ ;
+
+    $cnt ||= @$controls ;
+    foreach my $control (@$controls)
+        {
+        $control -> {width} = $cnt ;
+        }
+
+    return @$controls ;
+    }
+
+#------------------------------------------------------------------------------------------
+#
+#   add_sublines
+#
+#   fügt ein tab elsement mit subforms zu einem Formular hinzu
+#
+#   in $subform     array mit hashs
+#                       text => <anzeige text>
+#                       fn   => Dateiname
+#                       fields => Felddefinitionen (alternativ zu fn)
+#
+
+
+sub add_sublines
+    {
+    my ($self, $object_data, $subforms, $type) = @_;
+
+    my $name    = $object_data->{name};
+    my $text    = $object_data->{text};
+    my $width   = $object_data->{width};
+    my $section = $object_data->{section};
+
+    $text ||= $name;
+
+    my @forms ;
+    my @values ;
+    my @options ;
+
+    foreach my $file (@$subforms)
+        {
+        my $fn        = $file -> {fn} ;
+        my $subfields = $file -> {fields} ;
+        if ($fn)
+            {
+            my $obj = Execute ({object => "./$fn"} ) ;
+            #$subfields = eval {$obj -> fields ($r,$file) || undef};
+            }
+        push @forms,   $subfields || [];
+        push @values,  $file->{value} || $file->{name};
+        push @options, $file -> {text} || $file->{value} || $file->{name};
+        }
+
+    return { section => $section , width => $width, name => $name , text => 
$text, type => $type || 'select',
+             values => [EMAIL PROTECTED], options => [EMAIL PROTECTED], 
sublines => [EMAIL PROTECTED],
+             class  => $object_data->{class}, controlclass  => 
$object_data->{controlclass}};
+
+    }
+
+#------------------------------------------------------------------------------------------
+#
+#   fields_add_checkbox_subform
+#
+#   fügt ein checkbox Element mit Subforms hinzu
+#
+#   in $subform     array mit hashs
+#                       text => <anzeige text>
+#                       name => <name des Attributes>
+#                       value => <Wert der checkbox>
+#                       fn   => Dateiname
+#                       fields => Felddefinitionen (alternativ zu fn)
+#
+
+sub add_checkbox_subform
+    {
+    my ($self, $subform, $args) = @_ ;
+    $args ||= {} ;
+
+    my $name    = $subform->{name};
+    my $text    = $subform->{text};
+    my $value   = $subform->{value} || 1 ;
+
+    my $width   = $subform->{width};
+    my $section;
+
+    if(! $subform->{nosection})
+        {
+        $section = $subform->{section};
+        $section ||= 1;
+        }
+
+    $name   ||= "__$value";
+    $width  ||= 1;
+
+    my $subfield;
+    my $fn;
+    if($subfield = $subform->{fields})
+        {
+        # .... ok
+        }
+    elsif($fn = $subform->{fn})
+        {
+        my $obj = Execute ({object => "./$fn"} ) ;
+        #$subfield = [eval {$obj -> fields ($r, { %$file, %$args} ) || undef}];
+        }
+
+
+    return  {type => 'checkbox' , section => $section, width => $width, name 
=> $name, text => $text, value => $value, sublines => $subfield}
+
+    }
+
+
+1;
+
+
+__EMBPERL__
+
+[$syntax EmbperlBlocks $]
+
+[# ---------------------------------------------------------------------------
+#
+#   show_form_begin - output begin of form
+#]
+
+[$ sub show_form_begin ($self, $req) $]
+<script language="javascript">var doValidate = 1 ;</script>
+<script src="/js/EmbperlForm.js"></script>
+<script src="/js/TableCtrl.js"></script>
+
+<form id="[+ $self->{formname} +]" name="[+ $self->{formname} +]" 
method="post" action="[+ $self->{actionurl}+]"
+[$ if ($self -> {on_submit_function}) $]
+onSubmit="s=[+ $self->{on_submit_function} +];if (s) { v=doValidate; 
doValidate=1; return ((!v) || epform_validate_[+ $self->{formname} +]()); } 
else { return false; }"
+[$else$]
+onSubmit="v=doValidate; doValidate=1; return ( (!v) || epform_validate_[+ 
$self->{formname}+]());"
+[$endif$]
+>
+[$endsub$]
+
+[# ---------------------------------------------------------------------------
+#
+#   show_form_end - output end of form
+#]
+
+[$ sub show_form_end ($req) $]
+</form>
+[$endsub$]
+
+[ ---------------------------------------------------------------------------
+#
+#   show_controls_begin - output begin of form controls area
+#]
+
+[$ sub show_controls_begin  ($self, $req, $activeid)
+
+my $parent = $self -> parent_form ;
+my $class = $parent -> {noframe}?'cTableDivU':'cTableDiv' ;
+$]
+<div  id="[+ $self->{id} +]"
+[$if ($activeid && $self->{id} ne $activeid) $] style="display: none" [$endif$]
+>
+[$if (!$self -> {noframe}) $]<table class="[+ $class +]"><tr><td 
class="cTabTD"> [$endif$]
+<table class="cBase cTable">
+[$endsub$]
+
+[# ---------------------------------------------------------------------------
+#
+#   show_controls_end - output end of form controls area
+#]
+
+[$sub show_controls_end ($self, $req) $]
+</table>
+[$ if (!$self -> {noframe}) $]</td></tr></table> [$endif$]
+</div>
+
+[$ if (@{$self->{bottom_code}}) $]
+<script language="javascript">
+[+ do { local $escmode = 0; join ("\n", @{$self->{bottom_code}}) } +]
+</script>
+[$endif$]
+[$ if ($self -> {toplevel} && @{$self -> {fields2empty}}) $]
+<input type="hidden" name="-fields2empty" value="[+ join (' ', @{$self -> 
{fields2empty}}) +]">
+[$endif$]
+[$endsub$]
+
+
+[# ---------------------------------------------------------------------------
+#
+#   show_line_begin - output begin of line
+#]
+
+[$ sub show_line_begin ($self, $req, $lineno, $id, $activeid)
+
+    $id =~ /^(.+)-(\d+?)-(\d+?)$/ ;
+    my $baseid = $1 ;
+    my $baseidn = $2 ;
+    $activeid =~ /^(.+)-(\d+?)$/ ;
+    my $baseaid = $1 ;
+    my $baseaidn = $2 ;
+
+    my $class = $lineno == 0?'cTableRow1':'cTableRow' ;
+$]
+    <tr class="[+ $class +]" valign="[+ $self->{valign} +]"
+    [$if $id $] id="[+ $id +]"[$endif$]
+    [$if ($baseid eq $baseaid && $baseidn != $baseaidn) $] style="display: 
none"[$endif$]
+    >
+[$endsub$]
+
+[# ---------------------------------------------------------------------------
+#
+#   show_line_end - output end of line
+#]
+
+[$ sub show_line_end ($req) $]
+  </tr>
+[$endsub$]
+
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Embperl::Form - Embperl Form class
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+=head2 new ($controls, $options)
+
+=over 4
+
+=item * $controls
+
+Array ref with controls which should be displayed
+inside the form. Each control needs either to be a
+hashref with all parameters for the control or
+a control object.
+
+If hash refs are given it's necessary to specify
+the C<type> parameter, to let Embperl::Form
+know which control to create.
+
+See Embperl::Form::Control and Embperl::Form::Control::*
+for a list of available parameters.
+
+=item * $options
+
+Hash ref which can take the following parameters:
+
+=over 4
+
+=item * formname
+
+Will be used as name and id attribute of the form. If you have more
+then one form on a page it's necessary to have different form names
+to make form validation work correctly.
+
+=item * masks
+
+Contains a hash ref which can specify a set of masks
+for the controls. A mask is a set of parameter which
+overwrite the setting of a control. You can specify
+a mask for a control name (key is name), for a control
+type (key is *type) or for all controls (key is *).
+
+Example:
+
+    {
+    'info'      => { readonly => 1},
+    '*textarea' => { cols => 80 },
+    '*'         => { labelclass => 'myclass', labelnowrap => 1}
+    }
+
+This will force the control with the name C<info> to be readonly, it
+will force all C<textarea> controls to have 80 columns and
+it will force the label of all controls to have a class of myclass
+and not to wrap the text.
+
+=item * defaults
+
+Contains a hash ref which can specify a set of defaults
+for the controls. You can specify
+a default for a control name (key is name), for a control
+type (key is *type) or for all controls (key is *).
+
+Example:
+
+    {
+    'info'      => { readonly => 1},
+    '*textarea' => { cols => 80 },
+    '*'         => { labelclass => 'myclass', labelnowrap => 1}
+    }
+
+This will make the control with the name C<info> to default to be readonly, it
+will deafult all C<textarea> controls to have 80 columns and
+it will set the default class for the labels of all controls to
+myclass and not to wrap the text.
+
+=item * valign
+
+valign for control cells. Defaults to 'top' .
+
+=back
+
+=back
+
+=head2 layout
+
+=head2 show
+
+
+=head1 AUTHOR
+
+G. Richter ([EMAIL PROTECTED])
+
+=head1 SEE ALSO
+
+perl(1), Embperl, Embperl::Form::Control
+
+
+
+
+

Modified: perl/embperl/trunk/Embperl/Form/Control.pm
URL: 
http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control.pm?view=diff&rev=474139&r1=474138&r2=474139
==============================================================================
--- perl/embperl/trunk/Embperl/Form/Control.pm (original)
+++ perl/embperl/trunk/Embperl/Form/Control.pm Sun Nov 12 20:39:49 2006
@@ -32,16 +32,32 @@
     {
     my ($class, $args) = @_ ;
 
-    bless $args, $class ;
+    my $self = { %$args } ;
+    bless $self, $class ;
 
-    return $args ;
+    $self -> init ;
+
+    return $self ;
     }
 
 # ---------------------------------------------------------------------------
 #
-#   noframe - do not draw frame border if this is the only control
+#   init - init the new control
 #
 
+sub init
+
+    {
+    my ($self) = @_ ;
+
+    return $self ;
+    }
+
+
+# ---------------------------------------------------------------------------
+#
+#   noframe - do not draw frame border if this is the only control
+#
 
 sub noframe
 
@@ -54,11 +70,10 @@
 #   is_disabled - do not display this control at all
 #
 
-
 sub is_disabled
 
     {
-    my ($self) = @_ ;
+    my ($self, $req) = @_ ;
 
     return $self -> {disable} ;
     }
@@ -68,31 +83,28 @@
 #   is_readonly - could value of this control be changed ?
 #
 
-
 sub is_readonly
 
     {
-    my ($self) = @_ ;
+    my ($self, $req) = @_ ;
 
     return $self -> {readonly} ;
     }
 
-
-
 # ---------------------------------------------------------------------------
 #
-#   show - output the control
+#   show - output the whole control including the label
 #
 
 sub show
 
     {
-    my ($self, $data) = @_ ;
+    my ($self, $req) = @_ ;
 
     $fdat{$self -> {name}} = $self -> {default} if ($fdat{$self -> {name}} eq 
'' && exists ($self -> {default})) ;
     my $span = 0 ;
-    $span += $self -> show_label_cell ($span);
-    return $self -> show_control_cell ($span, $data) ;
+    $span += $self -> show_label_cell ($req, $span);
+    return $self -> show_control_cell ($req, $span) ;
     }
 
 # ---------------------------------------------------------------------------
@@ -118,7 +130,6 @@
     return ;
     }
 
-
 # ---------------------------------------------------------------------------
 #
 #   form - return form object
@@ -128,10 +139,9 @@
     {
     my ($self) = @_ ;
 
-    return $Embperl::Form::forms{$self -> {formno}} ;
+    return $Embperl::FormData::forms{$self -> {formptr}} ;
     }
 
-
 # ---------------------------------------------------------------------------
 #
 #   get_validate_rules - get rules for validation
@@ -139,7 +149,7 @@
 
 sub get_validate_rules
     {
-    my ($self) = @_ ;
+    my ($self, $req) = @_ ;
 
     my @local_rules ;
     if ($self -> {validate})
@@ -166,7 +176,7 @@
 #   show_sub_begin - output begin of sub form
 #]
 
-[$sub show_sub_begin ($self)
+[$sub show_sub_begin ($self, $req)
 
 my $span = $self->{width_percent}  ;
 $]
@@ -178,23 +188,23 @@
 #   show_sub_end - output end of sub form
 #]
 
-[$sub show_sub_end ($self) $]
+[$sub show_sub_end ($self, $req) $]
 </td>
 [$endsub$]
 
 [# ---------------------------------------------------------------------------
 #
-#   show - output the control
+#   show - output the label
 #]
 
-[$ sub show_label ($self) $][+ $self->{text} || $self->{name} +][$endsub$]
+[$ sub show_label ($self, $req) $][+ $self->{text} || $self->{name} 
+][$endsub$]
 
 [# ---------------------------------------------------------------------------
 #
 #   show_label_icon - output the icon before the label
 #]
 
-[$sub show_label_icon ($self) $]
+[$sub show_label_icon ($self, $req) $]
 [$if $self -> {sublines} $]&nbsp;<img src="plus.png" style="vertical-align: 
middle;">[$endif$]
 [$if $self -> {parentid} $]&nbsp;<img src="vline.png" style="vertical-align: 
middle;">[$endif$]
 [$endsub$]
@@ -204,7 +214,7 @@
 #   show - output the control
 #]
 
-[$ sub show_label_cell ($self)
+[$ sub show_label_cell ($self, $req)
 
 my $style = "";
 $style = "white-space:nowrap;" if ($self->{labelnowrap}) ;
@@ -213,8 +223,8 @@
   <td class="cLabelBox[$ if $self->{labelclass} $][+ " $self->{labelclass}" 
+][$ endif $]"
       colspan="1" [$ if $style $]style="[+ $style +]"[$ endif $]>
     [-
-    $self -> show_label ;
-    $self -> show_label_icon ;
+    $self -> show_label ($req);
+    $self -> show_label_icon ($req) ;
     -]
   </td>
   [- return 1; -]
@@ -222,17 +232,17 @@
 
 [# ---------------------------------------------------------------------------
 #
-#   show_control - output the control
+#   show_control - output the control itself
 #]
 
-[$ sub show_control ($self) $][+ $self->{value} +][$endsub$]
+[$ sub show_control ($self, $req) $][+ $self->{value} +][$endsub$]
 
 [# ---------------------------------------------------------------------------
 #
 #   show_control_readonly - output the control as readonly
 #]
 
-[$ sub show_control_readonly ($self) $][+ $self -> {value} || $fdat{$self -> 
{name}} +][$endsub$]
+[$ sub show_control_readonly ($self, $req) $][+ $self -> {value} || 
$fdat{$self -> {name}} +][$endsub$]
 
 
 [# ---------------------------------------------------------------------------
@@ -240,12 +250,12 @@
 #   show_controll_cell - output the table cell for the control
 #]
 
-[$ sub show_control_cell ($self, $x)
+[$ sub show_control_cell ($self, $req, $x)
 
     my $span = $self->{width_percent} - $x ;
 $]
     <td class="cControlBox" colspan="[+ $span +]">
-    [* my @ret = $self -> is_readonly?$self -> show_control_readonly:$self -> 
show_control ; *]
+    [* my @ret = $self -> is_readonly?$self -> 
show_control_readonly($req):$self -> show_control ($req); *]
     </td>
 [* return @ret ; *]
 [$endsub$]
@@ -275,6 +285,10 @@
 
 Create a new control
 
+=head2 init
+
+Init the new control
+
 =head2 noframe
 
 Do not draw frame border if this is the only control
@@ -289,45 +303,49 @@
 
 =head2 show
 
-output the control
+Output the control
 
 =head2 get_on_show_code
 
-returns JavaScript code that should be executed when the form becomes visible
+Returns JavaScript code that should be executed when the form becomes visible
+
+=head2 get_active_id
+
+Get the id of the value which is currently active
 
 =head2 form
 
-return the form object of this control
+Return the form object of this control
 
 =head2 show_sub_begin
 
-output begin of sub form
+Output begin of sub form
 
 =head2 show_sub_end
 
-output end of sub form
+Output end of sub form
 
 =head2 show_label
 
-output the label of the control
+Output the label of the control
 
 =head2 show_label_icon
 
-output the icon after the label
+Output the icon after the label
 
 =head2 show_label_cell
 
-output the table cell in which the label will be displayed
+Output the table cell in which the label will be displayed
 
 Must return the columns it spans (default: 1)
 
 =head2 show_control
 
-output the control itself
+Output the control itself
 
 =head2 show_control_cell
 
-output the table cell in which the control will be displayed
+Output the table cell in which the control will be displayed
 
 Gets the x position as argument
 
@@ -353,7 +371,7 @@
 
 =head2 readonly
 
-If set, displays a readonly version of t control.
+If set, displays a readonly version of the control.
 
 =head2 disable
 
@@ -376,6 +394,10 @@
 With this parameter you can also specify the width of
 the control in percent. This parameter take precendence over
 C<width>
+
+=head2 default
+
+Default value of the control
 
 =head1 AUTHOR
 

Modified: perl/embperl/trunk/Embperl/Form/Control/checkbox.pm
URL: 
http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/checkbox.pm?view=diff&rev=474139&r1=474138&r2=474139
==============================================================================
--- perl/embperl/trunk/Embperl/Form/Control/checkbox.pm (original)
+++ perl/embperl/trunk/Embperl/Form/Control/checkbox.pm Sun Nov 12 20:39:49 2006
@@ -44,19 +44,19 @@
 1 ;
 
 __EMBPERL__
-
+    
 [# ---------------------------------------------------------------------------
 #
 #   show_control - output the control
 #]
 
-[$ sub show_control ($self)
+[$ sub show_control ($self) 
 
     my $name     = $self -> {name} ;
     my $val      = $self -> {value} || 1 ;
 
     push @{$self -> form -> {fields2empty}}, $name ;
-$]
+$]    
 <input type="checkbox"   class="cBase cControlCheckbox"  name="[+ $name +]" 
value="[+ $val +]"
 [$if ($self -> {sublines} || $self -> {subobjects}) $] 
OnClick="show_checked(this)" [$endif$]
 >
@@ -73,9 +73,9 @@
 
 =head1 SYNOPSIS
 
-  {
+  { 
   type  => 'checkbox',
-  text  => 'blabla',
+  text  => 'blabla', 
   name  => 'foo',
   value => 'bar'
   }
@@ -95,7 +95,7 @@
 
 Specifies the name of the checkbox control
 
-=head3 text
+=head3 text 
 
 Will be used as label for the checkbox control
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to