--- loncom/homework/functionplotresponse.pm	2011/11/24 13:43:21	1.86
+++ loncom/homework/functionplotresponse.pm	2011/11/26 01:35:26	1.88
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # Functionplot responses
 #
-# $Id: functionplotresponse.pm,v 1.86 2011/11/24 13:43:21 www Exp $
+# $Id: functionplotresponse.pm,v 1.88 2011/11/26 01:35:26 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -49,10 +49,14 @@ BEGIN {
 #
 
 sub geogebra_startcode {
-    my ($id)=@_;
+    my ($id,$width,$height)=@_;
+    $width=int(1.*$width);
+    $height=int(1.*$height);
+    unless ($width) { $width=700; }
+    unless ($height) { $height=400; }
     return (<<ENDSTARTCODE);
 <applet name="ggbApplet_$id" code="geogebra.GeoGebraApplet" archive="geogebra.jar"
-         codebase="/adm/geogebra/"  width="722" height="447" MAYSCRIPT>
+         codebase="/adm/geogebra/"  width="$width" height="$height" MAYSCRIPT>
        <param name="java_arguments" value="-Xmx512m -Djnlp.packEnabled=true"/>
 ENDSTARTCODE
 }
@@ -783,39 +787,17 @@ sub start_functionplotvectorrule {
       $vector=~s/\W//gs;
       $vector=ucfirst($vector);
 
-      my $attachpoint=&Apache::lonxml::get_param('attachpoint',$parstack,$safeeval);
-      $attachpoint=~s/\W//gs;
-      $attachpoint=ucfirst($attachpoint);
-
-      my $notattachpoint=&Apache::lonxml::get_param('notattachpoint',$parstack,$safeeval);
-      $notattachpoint=~s/\W//gs;
-      $notattachpoint=ucfirst($notattachpoint);
-
-      my $tailpoint=&Apache::lonxml::get_param('tailpoint',$parstack,$safeeval);
-      $tailpoint=~s/\W//gs;
-      $tailpoint=ucfirst($tailpoint);
-      my $tippoint=&Apache::lonxml::get_param('tippoint',$parstack,$safeeval);
-      $tippoint=~s/\W//gs;
-      $tippoint=ucfirst($tippoint);
-
-      my $nottailpoint=&Apache::lonxml::get_param('nottailpoint',$parstack,$safeeval);
-      $nottailpoint=~s/\W//gs;
-      $nottailpoint=ucfirst($nottailpoint);
-      my $nottippoint=&Apache::lonxml::get_param('nottippoint',$parstack,$safeeval);
-      $nottippoint=~s/\W//gs;
-      $nottippoint=ucfirst($nottippoint);
-
       push(@Apache::functionplotresponse::functionplotvectorrules,join(':',(
            $label,
            'vector',
            $internalid,
            $vector,
-           $attachpoint,
-           $notattachpoint,
-           $tailpoint,
-           $tippoint,
-           $nottailpoint,
-           $nottippoint,
+           &Apache::lonxml::get_param('attachpoint',$parstack,$safeeval),
+           &Apache::lonxml::get_param('notattachpoint',$parstack,$safeeval),
+           &Apache::lonxml::get_param('tailpoint',$parstack,$safeeval),
+           &Apache::lonxml::get_param('tippoint',$parstack,$safeeval),
+           &Apache::lonxml::get_param('nottailpoint',$parstack,$safeeval),
+           &Apache::lonxml::get_param('nottippoint',$parstack,$safeeval),
            &Apache::lonxml::get_param('length',$parstack,$safeeval),
            &Apache::lonxml::get_param('angle',$parstack,$safeeval),
            &Apache::lonxml::get_param('lengtherror',$parstack,$safeeval),
@@ -850,12 +832,6 @@ sub start_functionplotvectorrule {
              &Apache::edit::end_row();
   } elsif ($target eq 'modified') {
     $env{'form.'.&Apache::edit::html_element_name('vector')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('vector')});
-    $env{'form.'.&Apache::edit::html_element_name('attachpoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('attachpoint')});
-    $env{'form.'.&Apache::edit::html_element_name('notattachpoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('notattachpoint')});
-    $env{'form.'.&Apache::edit::html_element_name('tailpoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('tailpoint')});
-    $env{'form.'.&Apache::edit::html_element_name('tippoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('tippoint')});
-    $env{'form.'.&Apache::edit::html_element_name('nottailpoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('nottailpoint')});
-    $env{'form.'.&Apache::edit::html_element_name('nottippoint')}=ucfirst($env{'form.'.&Apache::edit::html_element_name('nottippoint')});
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                                                  $safeeval,'index','vector','attachpoint','notattachpoint',
                                                            'tailpoint','tippoint','nottailpoint','nottipoint',
@@ -1276,7 +1252,11 @@ sub start_functionplotresponse {
        .&Apache::edit::end_row()
        .&Apache::edit::start_spanning_row()
        ."\n";
-    $result.=&Apache::edit::text_arg('Label x-axis:','xlabel',
+    $result.=&Apache::edit::text_arg('Width (pixels):','width',
+                                     $token,'6').'&nbsp;'.
+             &Apache::edit::text_arg('Height (pixels):','height',
+                                     $token,'6').'<br />'.
+             &Apache::edit::text_arg('Label x-axis:','xlabel',
                                      $token,'6').'&nbsp;'.
              &Apache::edit::text_arg('Minimum x-value:','xmin',
                                      $token,'4').'&nbsp;'.
@@ -1299,7 +1279,7 @@ sub start_functionplotresponse {
              &Apache::edit::end_row().&Apache::edit::start_spanning_row();
   } elsif ($target eq 'modified') {
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,
-                                                 $safeeval,'xlabel','xmin','xmax','ylabel','ymin','ymax',
+                                                 $safeeval,'width','height','xlabel','xmin','xmax','ylabel','ymin','ymax',
                                                            'xaxisvisible','yaxisvisible','gridvisible','answerdisplay');
     if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
 
@@ -1470,16 +1450,27 @@ sub objectcoords {
 }
 
 sub attached {
-   my ($id,$vector,$object,$xmin,$xmax,$ymin,$ymax)=@_;
+   my ($id,$vector,$objects,$xmin,$xmax,$ymin,$ymax)=@_;
    my ($xs,$xe,$ys,$ye)=&vectorcoords($id,$vector);
-   my ($xo,$yo)=&objectcoords($id,$object);
    my $tolx=($xmax-$xmin)/100.;
    my $toly=($ymax-$ymin)/100.;
    my $tail=0;
    my $tip=0;
-   &addlog("Proximity $vector ($xs,$ys)-($xe,$ye) to $object ($xo,$yo)");
-   if ((abs($xs-$xo)<$tolx) && (abs($ys-$yo)<$toly)) { $tail=1; }
-   if ((abs($xe-$xo)<$tolx) && (abs($ye-$yo)<$toly)) { $tip=1; }
+   foreach my $obj (split(/\s*\,\s*/,$objects)) {
+      $obj=~s/\W//g;
+      unless ($obj) { next; }
+      $obj=ucfirst($obj);
+      my ($xo,$yo)=&objectcoords($id,$obj);
+      &addlog("Proximity $vector ($xs,$ys)-($xe,$ye) to $obj ($xo,$yo)");
+      if ((abs($xs-$xo)<$tolx) && (abs($ys-$yo)<$toly)) {
+         $tail=1;
+         &addlog("Attached tail: $obj"); 
+      }
+      if ((abs($xe-$xo)<$tolx) && (abs($ye-$yo)<$toly)) { 
+         $tip=1;
+         &addlog("Attached tip: $obj"); 
+      }
+   }
    &addlog("Result tail:$tail tip:$tip");
    return($tail,$tip);
 }
@@ -2003,7 +1994,9 @@ sub end_functionplotelements {
 # generate the input fields
      $result.=$Apache::functionplotresponse::inputfields;
 # actually start the <applet>-tag
-     $result.=&geogebra_startcode($internalid);
+     $result.=&geogebra_startcode($internalid,
+                                  &Apache::lonxml::get_param('width',$parstack,$safeeval,-2),
+                                  &Apache::lonxml::get_param('height',$parstack,$safeeval,-2));
 # load the spline bytecode
      $result.=&geogebra_spline_program();
 # set default parameters