Author: richter Date: Sun Apr 8 21:01:34 2012 New Revision: 1311101 URL: http://svn.apache.org/viewvc?rev=1311101&view=rev Log: Allow to load form when control id is requested
Modified: perl/embperl/trunk/Embperl/Form.pm perl/embperl/trunk/Embperl/Form/Control.pm Modified: perl/embperl/trunk/Embperl/Form.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form.pm?rev=1311101&r1=1311100&r2=1311101&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form.pm (original) +++ perl/embperl/trunk/Embperl/Form.pm Sun Apr 8 21:01:34 2012 @@ -69,10 +69,11 @@ sub sub_new $self -> {jsnamespace} .= '.' if ($self -> {jsnamespace}) ; $self -> {control_packages} = $options -> {control_packages} ; $self -> {datasrc_packages} = $options -> {datasrc_packages} ; + $self -> {formptr} = $options -> {formptr} . '/' . $id || "$self" ; bless $self, $class if (!ref $class); - $Embperl::FormData::forms{"$self"} = $self ; + $Embperl::FormData::forms{$self -> {formptr}} = $self ; if (!$validate_rules) { $validate_rules = $self -> {validate_rules} = [] ; @@ -126,7 +127,7 @@ sub DESTROY { my ($self) = @_ ; - delete $Embperl::FormData::forms{"$self"} ; + delete $Embperl::FormData::forms{$self -> {formptr}} ; } # --------------------------------------------------------------------------- @@ -263,13 +264,21 @@ sub new_controls { die "control definition must be a hashref or an object, is '$control' " if (!ref $control || ref $control eq 'ARRAY'); + my $ctlid = $control->{name} ; + my $q = 2 ; + while (exists $self -> {controlids}{$ctlid}) + { + $ctlid = $control->{name} . '_' . $q ; + $q++ ; + } + my $name = $control -> {name} ; - $control -> {type} =~ s/sf_select.+/select/ ; - $control -> {parentid} = $id if ($id) ; - $control -> {id} ||= "$control->{name}_$n" ; - $control -> {basename} = $control->{name} ; - $control -> {formid} = $formid ; - $control -> {formptr} = "$self" ; + $control -> {type} =~ s/sf_select.+/select/ ; + $control -> {parentid} = $id if ($id) ; + $control -> {id} ||= $ctlid ; + $control -> {basename} = $control->{name} ; + $control -> {formid} = $formid ; + $control -> {formptr} = $self -> {formptr} ; my $type = $control -> {type} ; my $default = $defaults -> {$name} || $defaults -> {"*$type"} || $defaults -> {'*'}; @@ -319,15 +328,21 @@ sub new_controls { my @obj ; my @ids ; - my $i = 1 ; + my $i = 0 ; foreach my $subcontrols (@{$control -> {subforms}}) { next if (!$subcontrols) ; - my $id = "$control->{name}_$i" ; + my $ctlid = $control -> {values}[$i] || $control->{name} ; + my $q = 2 ; + while (exists $self -> {controlids}{$ctlid}) + { + $ctlid = $control->{name} . '_' . $q ; + $q++ ; + } my $class = ref $self ; - my $subform = $class -> sub_new ($subcontrols, $options, $id, $validate_rules, "$self") ; - push @ids, $id ; + my $subform = $class -> sub_new ($subcontrols, $options, $ctlid, $validate_rules, $self -> {formptr}) ; + push @ids, $ctlid ; push @obj, $subform ; $i++ ; } Modified: perl/embperl/trunk/Embperl/Form/Control.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control.pm?rev=1311101&r1=1311100&r2=1311101&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control.pm Sun Apr 8 21:01:34 2012 @@ -153,6 +153,24 @@ sub form # --------------------------------------------------------------------------- # +# load_form - load a form to a given formptr. +# +# This class method should be overwritten, to load a form to a given +# formptr, in case it is not already loaded +# The formptr maybe passed in the options hash during form creation +# +# in $formptr +# + + +sub load_form + { + my ($class, $formptr) = @_ ; + + } + +# --------------------------------------------------------------------------- +# # get_control_from_id # @@ -162,7 +180,16 @@ sub get_control_from_id my ($formptr, $ctlid) = split /#/, $id ; my $form = $Embperl::FormData::forms{$formptr} ; + + if (!$form) + { + $class -> load_form ($formptr) ; + $form = $Embperl::FormData::forms{$formptr} ; + die "Form for '$formptr' is not available" if (!$form) ; + } + my $ctl = $form -> {controlids}{$ctlid} ; + die "Control '$ctlid' in Form '$formptr' is not available" if (!$ctl) ; return $ctl ; } --------------------------------------------------------------------- To unsubscribe, e-mail: embperl-cvs-unsubscr...@perl.apache.org For additional commands, e-mail: embperl-cvs-h...@perl.apache.org