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

Reply via email to