diff options
Diffstat (limited to 'ACE/MPC/modules/HTMLProjectCreator.pm')
-rw-r--r-- | ACE/MPC/modules/HTMLProjectCreator.pm | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/ACE/MPC/modules/HTMLProjectCreator.pm b/ACE/MPC/modules/HTMLProjectCreator.pm new file mode 100644 index 00000000000..00e49087393 --- /dev/null +++ b/ACE/MPC/modules/HTMLProjectCreator.pm @@ -0,0 +1,133 @@ +package HTMLProjectCreator; + +# ************************************************************ +# Description : An HTML project creator to display all settings +# Author : Justin Michel & Chad Elliott +# Create Date : 8/25/2003 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +use ProjectCreator; +use XMLProjectBase; + +use vars qw(@ISA); +@ISA = qw(XMLProjectBase ProjectCreator); + +# ************************************************************ +# Data Section +# ************************************************************ + +my $style_indent = .5; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub file_sorter { + #my $self = shift; + #my $left = shift; + #my $right = shift; + return lc($_[1]) cmp lc($_[2]); +} + + +sub label_nodes { + my($self, $hash, $nodes, $level) = @_; + + foreach my $key (sort keys %$hash) { + push(@$nodes, [$level, $key]); + $self->label_nodes($$hash{$key}, $nodes, $level + 1); + } +} + + +sub count_levels { + my($self, $hash, $current, $count) = @_; + + foreach my $key (keys %$hash) { + $self->count_levels($$hash{$key}, $current + 1, $count); + } + $$count = $current if ($current > $$count); +} + + +sub fill_value { + my($self, $name) = @_; + my $value; + + if ($name eq 'inheritance_nodes') { + ## Get the nodes with numeric labels for the level + my @nodes; + $self->label_nodes($self->get_inheritance_tree(), \@nodes, 0); + + ## Push each node onto the value array + $value = []; + for(my $i = 0; $i <= $#nodes; ++$i) { + my $file = $nodes[$i]->[1]; + my $dir = $self->mpc_dirname($file); + my $base = $self->mpc_basename($file); + + ## Relative paths do not work at all in a web browser + $file = $base if ($dir eq '.'); + + my $path = ($base eq $file ? $self->getcwd() . '/' : ''); + my $name; + + if ($i == 0) { + ## If this is the first node, then replace the base filename + ## with the actual project name. + $name = $self->project_name(); + } + else { + ## This is a base project, so we use the basename and + ## remove the file extension. + $name = $base; + $name =~ s/\.[^\.]+$//; + } + + ## Create the div and a tags. + push(@$value, '<a href="file://' . $path . $file . + '" onClick="return popup(this, \'Project File\')" ' . + 'target=_blank>' . + '<div class="tree' . $nodes[$i]->[0] . '">' . + $name . '</div></a>'); + } + } + elsif ($name eq 'tree_styles') { + ## Count the number of levels deep the inheritance goes + my $count = 0; + $self->count_levels($self->get_inheritance_tree(), 0, \$count); + + my $margin = 0; + my $start = 100; + my $max = 255; + my $inc = ($count ne 0 ? int(($max - $start) / $count) : $max); + + ## Push each tree style onto the value array + $value = []; + for(my $i = 0; $i < $count; ++$i) { + push(@$value, ".tree$i { background-color: #" . + sprintf("%02x%02x%02x", 0, $start, $start) . ';' . + ($margin != 0 ? " margin-left: $margin" . 'in;' : '') . + ' }'); + $start += $inc; + $margin += $style_indent; + } + } + + return $value; +} + + +sub project_file_extension { + #my $self = shift; + return '.html'; +} + + +1; |