--- loncom/xml/lonplot.pm 2002/01/02 14:33:50 1.30
+++ loncom/xml/lonplot.pm 2002/01/21 15:20:28 1.41
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Dynamic plot
#
-# $Id: lonplot.pm,v 1.30 2002/01/02 14:33:50 matthew Exp $
+# $Id: lonplot.pm,v 1.41 2002/01/21 15:20:28 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,7 +26,11 @@
# http://www.lon-capa.org/
#
# 12/15/01 Matthew
-# 12/17 12/18 12/19 12/20 12/21 12/27 12/28 12/30 Matthew
+# 12/17 12/18 12/19 12/20 12/21 12/27 12/28 12/30 12/31 Matthew
+# 01/01/02 Matthew
+# 01/02 01/03 01/04 01/07 01/08 01/09 Matthew
+# 01/21 Matthew
+
package Apache::lonplot;
use strict;
@@ -35,7 +39,7 @@ use Apache::response;
use Apache::lonxml;
use Apache::edit;
-sub BEGIN {
+BEGIN {
&Apache::lonxml::register('Apache::lonplot',('plot'));
}
@@ -70,6 +74,9 @@ sub BEGIN {
## ##
###################################################################
+my $max_str_len = 50; # if a label, title, xlabel, or ylabel text
+ # is longer than this, it will be truncated.
+
my %linestyles =
(
lines => 2, # Maybe this will be used in the future
@@ -79,16 +86,16 @@ my %linestyles =
steps => 2, # now there are more important things
fsteps => 2, # for me to deal with.
histeps => 2,
- errorbars => 2,
- xerrorbars => 2,
- yerrorbars => 2,
- xyerrorbars => 2,
- boxes => 2,
- boxerrorbars => 2,
- boxxyerrorbars => 2,
- financebars => 2,
- candlesticks => 2,
- vector => 2
+ errorbars => 3,
+ xerrorbars => [3,4],
+ yerrorbars => [3,4],
+ xyerrorbars => [4,6],
+ boxes => 3,
+# boxerrorbars => [3,4,5],
+# boxxyerrorbars => [4,6,7],
+# financebars => 5,
+# candlesticks => 5,
+ vector => 4
);
my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/};
@@ -106,48 +113,54 @@ my $words_test = sub {$_[0]=~s/\s+/
## Attribute metadata ##
## ##
###################################################################
+my @plot_edit_order =
+ qw/bgcolor fgcolor height width font transparent grid border align/;
my %plot_defaults =
(
height => {
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',
test => $onoff_test,
- description => '',
+ description => 'Transparent image',
edit_type => 'on_off'
},
grid => {
default => 'off',
test => $onoff_test,
- description => '',
+ description => 'Display grid',
edit_type => 'on_off'
},
border => {
default => 'on',
test => $onoff_test,
- description => '',
+ description => 'Draw border around plot',
edit_type => 'on_off'
},
font => {
@@ -172,7 +185,8 @@ my %key_defaults =
default => '',
test => $words_test,
description => 'Title of key',
- edit_type => 'entry'
+ edit_type => 'entry',
+ size => '40'
},
box => {
default => 'off',
@@ -196,13 +210,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',
@@ -219,31 +235,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'
}
);
@@ -253,24 +274,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 => 'Style of the axis lines',
+ 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)]
}
);
@@ -299,13 +318,13 @@ sub start_plot {
$tagstack->[-1]);
} elsif ($target eq 'edit') {
$result .= &Apache::edit::tag_start($target,$token,'Plot');
- $result .= &edit_attributes($target,$token,\%plot_defaults);
+ $result .= &edit_attributes($target,$token,\%plot_defaults,
+ \@plot_edit_order);
} elsif ($target eq 'modified') {
my $constructtag=&Apache::edit::get_new_args
($token,$parstack,$safeeval,keys(%plot_defaults));
if ($constructtag) {
$result = &Apache::edit::rebuild_tag($token);
-# $result.= &Apache::edit::handle_insert();
}
}
return $result;
@@ -326,9 +345,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";
$max_str_len) {
+ $title = substr($title,0,$max_str_len);
+ }
} elsif ($target eq 'edit') {
$result.=&Apache::edit::tag_start($target,$token,'Plot Title');
my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]);
- $result.='