File Coverage

blib/lib/Tree/Visualize/ASCII/Connectors/TopDown/LeftRightConnector.pm
Criterion Covered Total %
statement 20 20 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 2 2 100.0
total 27 27 100.0


line stmt bran cond sub pod time code
1              
2             package Tree::Visualize::ASCII::Connectors::TopDown::LeftRightConnector;
3              
4 2     2   1529 use strict;
  2         5  
  2         72  
5 2     2   12 use warnings;
  2         5  
  2         91  
6              
7             our $VERSION = '0.01';
8              
9 2     2   11 use base qw(Tree::Visualize::Connector::IConnector);
  2         5  
  2         1202  
10              
11             sub drawLeftConnector {
12 7     7 1 10 my ($self, $to, $from) = @_;
13             # check the args first
14 7         21 $self->checkArgs($to, $from);
15             # get the left index of the TOP CORNER, then the right
16             # index of the TOP CORNER, divide this by two and you
17             # have found the middle of the top-most left node, which
18             # is where you want to attach your connector.
19             #....V
20             # (node0)
21             # (node1)
22             #
23 7         20 my $left_index = $from->getFirstConnectionPointIndex();
24             # now we need to calculate the renaming left
25             # space between the center of the topmost left
26             # box (where are attaching our connector) and
27             # the the place where the new node we are connecting
28             # to will be.
29             # V..V
30             # (node0)
31             # (node1)
32             #
33 7         20 my $left_line_length = $from->width() - $left_index;
34             # we then add the connectors to the current node
35             # +---(node0)
36             # (node1)
37             #
38             # NOTE:
39             # this part is kind of a hack, becuase
40             # it assumed a box which is 3 lines tall
41             # this should be changed to accomadate other
42             # size boxes.
43 7         37 my $left_arm = Tree::Visualize::ASCII::BoundingBox->new(
44             (" " x $left_line_length) . "\n" .
45             ("+" . ("-" x ($left_line_length - 1))) . "\n" .
46             ("|" . (" " x ($left_line_length - 1)))
47             );
48             # add padding to the left arm
49 7         28 return $left_arm->padLeft(" " x $left_index);
50             }
51              
52             sub drawRightConnector {
53 7     7 1 9 my ($self, $to, $from) = @_;
54             # check the args first
55 7         17 $self->checkArgs($to, $from);
56             # get the first instance of TOPCORNER which
57             # is the begining of the topmost box, then
58             # get the last instance of it which is the
59             # end of that same box. Then divide by two
60             # to get the middle, which is where we want
61             # the connector to go.
62             # ...V
63             # (node0)
64             # (node2)
65             #
66 7         21 my $right_index = $from->getFirstConnectionPointIndex();
67             # Now add the connectors to the current node
68             # (node0)---+
69             # (node2)
70             #
71             # NOTE:
72             # this part is kind of a hack, becuase
73             # it assumed a box which is 3 lines tall
74             # this should be changed to accomadate other
75             # size boxes.
76 7         37 my $right_arm = Tree::Visualize::ASCII::BoundingBox->new(
77             (" " x ($right_index + 1)) . "\n" .
78             ("-" x ($right_index)) . "+" . "\n" .
79             (" " x $right_index) . "|"
80             );
81             # combine the current box with the right arm
82 7         18 return $right_arm->padRight(" " x ($from->width() - $right_index));
83             }
84              
85              
86             1;
87              
88             __END__