--- loncom/xml/lonplot.pm 2002/01/10 16:29:54 1.37
+++ loncom/xml/lonplot.pm 2002/01/15 16:21:39 1.40
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Dynamic plot
#
-# $Id: lonplot.pm,v 1.37 2002/01/10 16:29:54 matthew Exp $
+# $Id: lonplot.pm,v 1.40 2002/01/15 16:21:39 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -126,25 +126,29 @@ my %plot_defaults =
default => 200,
test => $int_test,
description => 'height of image (pixels)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
width => {
default => 200,
test => $int_test,
description => 'width of image (pixels)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
bgcolor => {
default => 'xffffff',
test => $color_test,
description => 'background color of image (xffffff)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
fgcolor => {
default => 'x000000',
test => $color_test,
description => 'foreground color of image (x000000)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
transparent => {
default => 'off',
@@ -186,7 +190,8 @@ my %key_defaults =
default => '',
test => $words_test,
description => 'Title of key',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '40'
},
box => {
default => 'off',
@@ -210,13 +215,15 @@ my %label_defaults =
default => 0,
test => $real_test,
description => 'x position of label (graph coordinates)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
ypos => {
default => 0,
test => $real_test,
description => 'y position of label (graph coordinates)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
justify => {
default => 'left',
@@ -233,31 +240,36 @@ my %axis_defaults =
default => 'x000000',
test => $color_test,
description => 'color of axes (x000000)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
xmin => {
default => '-10.0',
test => $real_test,
description => 'minimum x-value shown in plot',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
xmax => {
default => ' 10.0',
test => $real_test,
description => 'maximum x-value shown in plot',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
ymin => {
default => '-10.0',
test => $real_test,
description => 'minimum y-value shown in plot',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
ymax => {
default => ' 10.0',
test => $real_test,
description => 'maximum y-value shown in plot',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
}
);
@@ -267,24 +279,22 @@ my %curve_defaults =
default => 'x000000',
test => $color_test,
description => 'color of curve (x000000)',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '10'
},
name => {
default => '',
test => $words_test,
description => 'name of curve to appear in key',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '20'
},
linestyle => {
default => 'lines',
test => $linestyle_test,
description => 'Line style',
edit_type => 'choice',
- choices => ['lines','linespoints','dots','points','steps',
- 'fsteps','histeps','errorbars','xerrorbars',
- 'yerrorbars','xyerrorbars','boxes','boxerrorbars',
- 'boxxyerrorbars','financebars','candlesticks',
- 'vector']
+ choices => [keys(%linestyles)]
}
);
@@ -320,7 +330,6 @@ sub start_plot {
($token,$parstack,$safeeval,keys(%plot_defaults));
if ($constructtag) {
$result = &Apache::edit::rebuild_tag($token);
-# $result.= &Apache::edit::handle_insert();
}
}
return $result;
@@ -341,9 +350,7 @@ sub end_plot {
my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}.
'_'.time.'_'.$$.int(rand(1000)).'_plot.data';
## Write the plot description to the file
- my $fh=Apache::File->new(">$tmpdir$filename");
- print $fh &write_gnuplot_file();
- close($fh);
+ &write_gnuplot_file($tmpdir,$filename);
## return image tag for the plot
$result .= <<"ENDIMAGE";
'.
+ $result.=&Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
my $text=$$parser[-1]->get_text("/title");
@@ -431,7 +439,8 @@ sub start_xlabel {
} elsif ($target eq 'edit') {
$result.=&Apache::edit::tag_start($target,$token,'Plot Xlabel');
my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]);
- $result.=' |
'.
+ $result.=&Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
my $text=$$parser[-1]->get_text("/xlabel");
@@ -462,7 +471,8 @@ sub start_ylabel {
} elsif ($target eq 'edit') {
$result .= &Apache::edit::tag_start($target,$token,'Plot Ylabel');
my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]);
- $result .= ' |
'.
+ $result .= &Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
my $text=$$parser[-1]->get_text("/ylabel");
@@ -497,7 +507,8 @@ sub start_label {
$result .= &Apache::edit::tag_start($target,$token,'Plot Label');
$result .= &edit_attributes($target,$token,\%label_defaults);
my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]);
- $result .= ' |
'.
+ $result .= &Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
my $constructtag=&Apache::edit::get_new_args
@@ -573,7 +584,8 @@ sub start_function {
} elsif ($target eq 'edit') {
$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function');
my $text = &Apache::lonxml::get_all_text("/function",$$parser[-1]);
- $result .= ' |
'.
+ $result .= &Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
# Why do I do this?
@@ -605,6 +617,11 @@ sub start_data {
delete($curves[-1]->{'function'});
}
my $datatext = &Apache::lonxml::get_all_text("/data",$$parser[-1]);
+ # Deal with cases where we're given an array...
+ if ($datatext =~ /^\@/) {
+ $datatext = &Apache::run::run('return "'.$datatext.'"',
+ $safeeval,1);
+ }
$datatext =~ s/\s+/ /g;
# Need to do some error checking on the @data array -
# make sure it's all numbers and make sure each array
@@ -642,7 +659,8 @@ sub start_data {
} elsif ($target eq 'edit') {
$result .= &Apache::edit::tag_start($target,$token,'Comma or space deliminated curve data');
my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]);
- $result .= ' |
'.
+ $result .= &Apache::edit::end_row().
+ &Apache::edit::start_spanning_row().
&Apache::edit::editfield('',$text,'',60,1);
} elsif ($target eq 'modified') {
my $text=$$parser[-1]->get_text("/data");
@@ -728,8 +746,10 @@ sub get_attributes{
}
return ;
}
+
##------------------------------------------------------- write_gnuplot_file
sub write_gnuplot_file {
+ my ($tmpdir,$filename)= @_;
my $gnuplot_input = '';
my $curve;
# Collect all the colors
@@ -780,7 +800,6 @@ sub write_gnuplot_file {
}
# curves
$gnuplot_input .= 'plot ';
- my $datatext = '';
for (my $i = 0;$i<=$#curves;$i++) {
$curve = $curves[$i];
$gnuplot_input.= ', ' if ($i > 0);
@@ -790,9 +809,12 @@ sub write_gnuplot_file {
$curve->{'name'}.'" with '.
$curve->{'linestyle'};
} elsif (exists($curve->{'data'})) {
- $gnuplot_input.= '\'-\' title "'.
- $curve->{'name'}.'" with '.
- $curve->{'linestyle'};
+ # Store data values in $datatext
+ my $datatext = '';
+ # get new filename
+ my $datafilename = "$tmpdir/$filename.$i";
+ my $fh=Apache::File->new(">$datafilename");
+ # Compile data
my @Data = @{$curve->{'data'}};
my @Data0 = @{$Data[0]};
for (my $i =0; $i<=$#Data0; $i++) {
@@ -802,11 +824,21 @@ sub write_gnuplot_file {
}
$datatext .= $/;
}
- $datatext .=$/;
+ # write file
+ print $fh $datatext;
+ close ($fh);
+ # generate gnuplot text
+ $gnuplot_input.= '"'.$datafilename.'" title "'.
+ $curve->{'name'}.'" with '.
+ $curve->{'linestyle'};
}
}
- $gnuplot_input .= $/.$datatext;
- return $gnuplot_input;
+ # Write the output to a file.
+ my $fh=Apache::File->new(">$tmpdir$filename");
+ print $fh $gnuplot_input;
+ close($fh);
+ # That's all folks.
+ return ;
}
#---------------------------------------------- check_inputs
@@ -848,7 +880,8 @@ sub edit_attributes {
$description .= ' ' if ($description !~ / $/);
if ($defaults->{$attr}->{'edit_type'} eq 'entry') {
$result .= &Apache::edit::text_arg
- ($description,$attr,$token);
+ ($description,$attr,$token,
+ $defaults->{$attr}->{'size'});
} elsif ($defaults->{$attr}->{'edit_type'} eq 'choice') {
$result .= &Apache::edit::select_arg
($description,$attr,$defaults->{$attr}->{'choices'},$token);
|