[svn:p5ee] r12523 - p5ee/trunk/App-Widget/lib/App/Widget

[email protected] Fri, 20 Feb 2009 11:10:25 -0800 (PST)
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
Author: spadkins
Date: Fri Feb 20 11:10:25 2009
New Revision: 12523

Modified:
   p5ee/trunk/App-Widget/lib/App/Widget/Graph.pm

Log:
0002127: graphs: order of legend and graph segments does not match

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	Fri Feb 20 11:10:25 2009
@@ -397,9 +397,48 @@
             }
         }
 
+        foreach my $graph_key (@$keys) {
+            if ($graph_key =~ /mkt_seg_abbr/) {
+                my ($graph_key_vals, $val_sort, $vals_sort_idx, $sign, @yn_new, @y_new);
+                my %numeric = ( "integer" => 1, "float" => 1 );
+
+                if ($spec->{params}{$graph_key}) {
+                    $graph_key_vals = [ split(/,/, $spec->{params}{$graph_key}) ];
+                }
+
+                for (my $i = 0; $i <= $#$graph_key_vals; $i++) {
+                    $val_sort->{$graph_key}{$graph_key_vals->[$i]} = $i;
+                }
+
+                @$vals_sort_idx = sort {
+                    $sign = 0;
+                    for (my $i = 0; $i <= $#y; $i++) {
+                        my $val_a = $y[$a];
+                        my $val_b = $y[$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 .. $#y);
+
+                if ($#$vals_sort_idx != -1) {
+                    for (my $i = 0; $i <= $#$vals_sort_idx; $i++) {
+                        push(@yn_new, $yn[$vals_sort_idx->[$i]]);
+                    }
+                    for (my $i = 0; $i <= $#$vals_sort_idx; $i++) {
+                        $y_new[$i] = $y[$vals_sort_idx->[$i]]
+                    }
+                    
+                    @y  = @y_new;
+                    @yn = @yn_new;
+                }
+            }
+        }
+
         $spec->{x} = \@x;
         $spec->{y} = \@yn;
-
         $spec->{y_labels} = \@y;
     }