Author: spadkins
Date: Thu Feb 19 10:30:22 2009
New Revision: 12515
Modified:
p5ee/trunk/App-Widget/lib/App/Widget/Graph.pm
Log:
0002611: days left category displays wrong sort order on graph axis
Modified: p5ee/trunk/App-Widget/lib/App/Widget/Graph.pm
==============================================================================
--- p5ee/trunk/App-Widget/lib/App/Widget/Graph.pm (original)
+++ p5ee/trunk/App-Widget/lib/App/Widget/Graph.pm Thu Feb 19 10:30:22 2009
@@ -85,25 +85,6 @@
$self->load_data($spec) if (!$spec->{y});
my $x = $spec->{x};
- my $context = $self->{context};
- my $column_defs = $spec->{column_defs};
- my $keys = $spec->{keys};
- if (!ref($keys)) {
- $keys = $keys ? [split(/,/, $keys)] : [];
- }
- foreach my $graph_key (@$keys) {
- my $domain = $column_defs->{$graph_key}{domain};
- if ($domain eq "dow") {
- my $x_new;
- my $value_domain = $context->value_domain($domain);
- my $labels = $value_domain->labels();
- foreach my $x_val (@$x) {
- push(@$x_new, $labels->{$x_val});
- }
- $x = $x_new;
- }
- }
-
&App::sub_exit($x) if ($App::trace);
return($x);
}
@@ -307,6 +288,54 @@
$x_seen{$x_value} = 1;
}
}
+
+ foreach my $graph_key (@$keys) {
+ my $domain = $column_defs->{$graph_key}{domain};
+ if ($domain =~ /^dow$/) {
+ my @x_new;
+ my $value_domain = $context->value_domain($domain);
+ my $labels = $value_domain->labels();
+ foreach my $x_val (@x) {
+ push(@x_new, $labels->{$x_val});
+ }
+ @x = @x_new;
+ }
+ if ($domain =~ /days_left_type\d_abbr/) {
+ my ($val_sort, $vals_sort_idx, $sign, @x_new, @yn_new);
+
+ my %numeric = ( "integer" => 1, "float" => 1 );
+ my $value_domain = $context->value_domain($domain);
+ my $domain_vals = $value_domain->values();
+
+ for (my $i = 0; $i <= $#$domain_vals; $i++) {
+ $val_sort->{$graph_key}{$domain_vals->[$i]} = $i;
+ }
+
+ @$vals_sort_idx = sort {
+ $sign = 0;
+ for (my $i = 0; $i <= $#x; $i++) {
+ my $val_a = $x[$a];
+ my $val_b = $x[$b];
+ $sign = (defined $val_sort->{$graph_key}) ?
+ ($val_sort->{$graph_key}{$val_a} <=>
$val_sort->{$graph_key}{$val_b}) :
+ ($numeric{$column_defs->{$graph_key}{type}} ?
($val_a <=> $val_b) : ($val_a cmp $val_b));
+ last if ($sign);
+ }
+ $sign;
+ } (0 .. $#x);
+
+ for (my $i = 0; $i <= $#$vals_sort_idx; $i++) {
+ push(@x_new, $x[$vals_sort_idx->[$i]]);
+ }
+ for (my $i = 0; $i <= $#$vals_sort_idx; $i++) {
+ $yn_new[0][$i] = $yn[0][$vals_sort_idx->[$i]]
+ }
+
+ @x = @x_new;
+ $spec->{y} = \...@yn_new;
+ }
+ }
+
$spec->{x} = \...@x;
}
else { # there is only one column ($#$columns == 0)
@@ -342,7 +371,7 @@
$yn_val = $object->{$column};
if ($format && $format =~ /%/) {
- if ($yn_val ne "") {
+ if ($yn_val ne "") {
$yn_val = App::Widget->format($yn_val,
$column_defs->{$column});
$yn_val =~ s/%//;
}