--- loncom/xml/lonplot.pm 2002/01/21 17:23:31 1.43
+++ loncom/xml/lonplot.pm 2002/01/28 14:12:34 1.45
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Dynamic plot
#
-# $Id: lonplot.pm,v 1.43 2002/01/21 17:23:31 matthew Exp $
+# $Id: lonplot.pm,v 1.45 2002/01/28 14:12:34 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -149,19 +149,19 @@ my %plot_defaults =
default => 'off',
test => $onoff_test,
description => 'Transparent image',
- edit_type => 'on_off'
+ edit_type => 'onoff'
},
grid => {
default => 'off',
test => $onoff_test,
description => 'Display grid',
- edit_type => 'on_off'
+ edit_type => 'onoff'
},
border => {
default => 'on',
test => $onoff_test,
description => 'Draw border around plot',
- edit_type => 'on_off'
+ edit_type => 'onoff'
},
font => {
default => 'medium',
@@ -192,7 +192,7 @@ my %key_defaults =
default => 'off',
test => $onoff_test,
description => 'Draw a box around the key?',
- edit_type => 'on_off'
+ edit_type => 'onoff'
},
pos => {
default => 'top right',
@@ -229,6 +229,45 @@ my %label_defaults =
}
);
+my @tic_edit_order = ('location','mirror','start','increment','end');
+my %tic_defaults =
+ (
+ location => {
+ default => 'border',
+ test => sub {$_[0]=~/^(border|axis)$/},
+ description => 'Location of tick marks',
+ edit_type => 'choice',
+ choices => ['border','axis']
+ },
+ mirror => {
+ default => 'on',
+ test => $onoff_test,
+ description => 'mirror ticks on opposite axis?',
+ edit_type => 'onoff'
+ },
+ start => {
+ default => '-10.0',
+ test => $real_test,
+ description => 'Start ticks at',
+ edit_type => 'entry',
+ size => '10'
+ },
+ increment => {
+ default => '1.0',
+ test => $real_test,
+ description => 'Place a tick every',
+ edit_type => 'entry',
+ size => '10'
+ },
+ end => {
+ default => ' 10.0',
+ test => $real_test,
+ description => 'Stop ticks at ',
+ edit_type => 'entry',
+ size => '10'
+ },
+ );
+
my %axis_defaults =
(
color => {
@@ -298,17 +337,19 @@ my %curve_defaults =
## parsing and edit rendering ##
## ##
###################################################################
-my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves);
+my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics);
sub start_plot {
%plot = (); %key = (); %axis = ();
$title = undef; $xlabel = undef; $ylabel = undef;
$#labels = -1; $#curves = -1;
+ %xtics = (); %ytics = ();
#
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
&Apache::lonxml::register('Apache::lonplot',
- ('title','xlabel','ylabel','key','axis','label','curve'));
+ ('title','xlabel','ylabel','key','axis','label','curve',
+ 'xtics','ytics'));
push (@Apache::lonxml::namespace,'lonplot');
if ($target eq 'web') {
my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]);
@@ -360,6 +401,70 @@ ENDIMAGE
return $result;
}
+
+##--------------------------------------------------------------- xtics
+sub start_xtics {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result='';
+ if ($target eq 'web') {
+ &get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval,
+ $tagstack->[-1]);
+ } elsif ($target eq 'edit') {
+ $result .= &Apache::edit::tag_start($target,$token,'xtics');
+ $result .= &edit_attributes($target,$token,\%tic_defaults,
+ \@tic_edit_order);
+ } elsif ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args
+ ($token,$parstack,$safeeval,keys(%tic_defaults));
+ if ($constructtag) {
+ $result = &Apache::edit::rebuild_tag($token);
+ }
+ }
+ return $result;
+}
+
+sub end_xtics {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result = '';
+ if ($target eq 'web') {
+ } elsif ($target eq 'edit') {
+ $result.=&Apache::edit::tag_end($target,$token);
+ }
+ return $result;
+}
+
+##--------------------------------------------------------------- ytics
+sub start_ytics {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result='';
+ if ($target eq 'web') {
+ &get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval,
+ $tagstack->[-1]);
+ } elsif ($target eq 'edit') {
+ $result .= &Apache::edit::tag_start($target,$token,'ytics');
+ $result .= &edit_attributes($target,$token,\%tic_defaults,
+ \@tic_edit_order);
+ } elsif ($target eq 'modified') {
+ my $constructtag=&Apache::edit::get_new_args
+ ($token,$parstack,$safeeval,keys(%tic_defaults));
+ if ($constructtag) {
+ $result = &Apache::edit::rebuild_tag($token);
+ }
+ }
+ return $result;
+}
+
+sub end_ytics {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result = '';
+ if ($target eq 'web') {
+ } elsif ($target eq 'edit') {
+ $result.=&Apache::edit::tag_end($target,$token);
+ }
+ return $result;
+}
+
+
##----------------------------------------------------------------- key
sub start_key {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
@@ -762,16 +867,34 @@ sub write_gnuplot_file {
$gnuplot_input .= $plot{'font'} . ' ';
$gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' ';
$gnuplot_input .= "@Colors\n";
+ # set output
+ $gnuplot_input .= "set output\n";
# grid
$gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on');
# border
$gnuplot_input .= ($plot{'border'} eq 'on'?
'set border'.$/ :
'set noborder'.$/ ); # title, xlabel, ylabel
- $gnuplot_input .= "set output\n";
+ # titles
$gnuplot_input .= "set title \"$title\"\n" if (defined($title)) ;
$gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel));
$gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel));
+ # tics
+ if (%xtics) {
+ $gnuplot_input .= "set xtics $xtics{'location'} ";
+ $gnuplot_input .= ( $xtics{'mirror'} eq 'on' ? "mirror" : "nomirror ");
+ $gnuplot_input .= "$xtics{'start'}, ";
+ $gnuplot_input .= "$xtics{'increment'}, ";
+ $gnuplot_input .= "$xtics{'end'}\n";
+ }
+ if (%ytics) {
+ $gnuplot_input .= "set ytics $ytics{'location'} ";
+ $gnuplot_input .= ( $ytics{'mirror'} eq 'on' ? "mirror" : "nomirror ");
+ $gnuplot_input .= "$ytics{'start'}, ";
+ $gnuplot_input .= "$ytics{'increment'}, ";
+ $gnuplot_input .= "$ytics{'end'}\n";
+ }
+ # axis
if (%axis) {
$gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n";
$gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n";
@@ -879,7 +1002,7 @@ sub edit_attributes {
} elsif ($defaults->{$attr}->{'edit_type'} eq 'choice') {
$result .= &Apache::edit::select_arg
($description,$attr,$defaults->{$attr}->{'choices'},$token);
- } elsif ($defaults->{$attr}->{'edit_type'} eq 'on_off') {
+ } elsif ($defaults->{$attr}->{'edit_type'} eq 'onoff') {
$result .= &Apache::edit::select_arg
($description,$attr,['on','off'],$token);
}
@@ -905,17 +1028,37 @@ sub insert_plot {
}
$result .= ">\n";
# Add the components
- $result .= &insert_key();
- $result .= &insert_axis();
- $result .= &insert_title();
- $result .= &insert_xlabel();
- $result .= &insert_ylabel();
+ # $result .= &insert_key();
+ # $result .= &insert_axis();
+ # $result .= &insert_title();
+ # $result .= &insert_xlabel();
+ # $result .= &insert_ylabel();
$result .= &insert_curve();
# close up the
$result .= "\n";
return $result;
}
+sub insert_xtics {
+ my $result;
+ $result .= " {'default'}\"\n";
+ }
+ $result .= " />\n";
+ return $result;
+}
+
+sub insert_ytics {
+ my $result;
+ $result .= " {'default'}\"\n";
+ }
+ $result .= " />\n";
+ return $result;
+}
+
sub insert_key {
my $result;
$result .= "