--- trunk/lib/Frey/Class/Graph.pm 2009/01/09 23:02:36 977 +++ trunk/lib/Frey/Class/Graph.pm 2009/01/10 01:03:28 981 @@ -35,6 +35,11 @@ isa => 'Bool', ); +has show_disconnected => ( + is => 'ro', + isa => 'Bool', +); + has portrait => ( documentation => 'vertical layout', is => 'rw', @@ -60,25 +65,32 @@ # layout => 'twopi', # grabs too much memory # overlap => 'compress', # no_overlap => 1, + node => { shape => 'box', -# style =>'filled', -# color => 'grey', -# fillcolor =>'lightgray', + style =>'filled', + color => 'grey', + fillcolor =>'lightgray', + fontname => 'verdana', + fontsize => '12', + }, edge => { color => 'grey', + fontname => 'verdana', + fontsize => '8', + fontcolor => 'grey', } ); - our $count = {}; - our $max_count = {}; + my $count; my $filter = $self->filter; foreach my $path ( $self->dir_extension( $self->introspect_path, qr{\.(ya?ml)$}) ) { my $class = $self->strip_path_extension( $path ) || die "can't strip $path"; - $max_count->{$class} = ++$count->{$class}; + + $count->{$class}++ if $self->show_disconnected; my $data = $self->load( $path ); # warn "## $class $path ", $self->dump( $data ); # if $self->debug; @@ -91,7 +103,8 @@ next if $filter && $package !~ m{$filter}; warn "# $class\t$type\t$package\n"; $g->add_edge( $class => $package, label => $type, color => 'blue' ); - $max_count->{$package} = ++$count->{$package}; + $count->{$class}++; + $count->{$package}++; } } } @@ -102,7 +115,8 @@ warn "# $class\trole\t$role\n"; $g->add_edge( $role => $class, label => 'role', color => 'yellow' ); # $g->add_node( $role, rank => 'role' ); - $max_count->{$role} = ++$count->{$role}; + $count->{$class}++; + $count->{$role}++; } } @@ -111,28 +125,35 @@ next if $filter && $extends !~ m{$filter}; warn "# $class\textends\t$extends\n"; $g->add_edge( $extends => $class, label => 'extends', color => 'green' ); - $max_count->{$extends} = ++$count->{$extends}; + $count->{$class}++; + $count->{$extends}++; } } } -=for xxx warn "# count ",$self->dump( $count ); + my $max_count = 1; + foreach ( keys %$count ) { + my $v = $count->{$_}; + $max_count = $v if $v > $max_count; + } + warn "# max_count: $max_count"; + foreach my $node ( keys %$count ) { - my $pcnt = $count->{$node} / $max_count->{$node}; - my $color = join(",", ( $pcnt, 0.5, 0.75 ) ); + my $v = $count->{$node}; + my $pcnt = $v / $max_count; + my $color = join(",", ( $pcnt, $pcnt, 0.75 ) ); $g->add_node( $node, style =>'filled', color => $color, fillcolor => $color, - label => "$node\n$pcnt", +# label => "$node\n$v", ); } -=cut if ( $self->produce_dot ) { $self->content_type( 'text/plain' );