File Coverage

blib/lib/PlotCalendar/Day.pm
Criterion Covered Total %
statement 169 199 84.9
branch 41 64 64.0
condition 1 3 33.3
subroutine 21 23 91.3
pod 0 20 0.0
total 232 309 75.0


\n";
line stmt bran cond sub pod time code
1             package PlotCalendar::Day;
2              
3             #
4             # Version 1.0 - 3/99 - Alan Jackson : ajackson at icct.net
5             # Copyright 1999 may be used and distributed under the
6             # Gnu Copyleft.
7              
8             # Version 1.1 - 6/99 Major code cleanup, and testing really big and
9             # really tiny images. Added documentation.
10              
11             # To do
12             # Add popup for clipped text (or maybe put it in message bar)
13             # Add more intelligence for clip text
14             # Add all the Tk stuff 8-)
15             #
16             #
17              
18 3     3   1332 use strict;
  3         5  
  3         113  
19 3     3   16 use vars qw( $VERSION );
  3         6  
  3         118  
20              
21 3     3   15 use Carp;
  3         5  
  3         14135  
22              
23             # Note : Day_of_Week returns 1=Mon, 7=Sun
24              
25             $VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ m#(\d+)\.(\d+)#;
26              
27             sub new {
28 3     3 0 27 my $proto = shift;
29 3   33     21 my $class = ref($proto) || $proto;
30 3         6 my $self = {};
31              
32              
33 3         6 $self->{SIZE} = {}; # hash of dimensions, height and width
34 3         5 $self->{COLOR} = {}; # hash of global colors,
35             # foreground, background-main, background-optional
36             # (fg, bgmain)
37 3         7 $self->{FONT} = {}; # hash of global font sizes, day, main, opt
38 3         5 $self->{STYLE} = {}; # hash of global text styles, day, main, opt (n,b,i,u)
39 3         5 $self->{EXPAND} = 0; # Is height allowed to expand? default = no.
40 3         4 $self->{CLIPTEXT} = 0; # Clip text if too long? default = no.
41 3         5 $self->{DIGIT} = ''; # What day *is* it, anyway?
42 3         7 $self->{DAYNAME} = ''; # What is the day called (like, "Christmas")
43 3         6 $self->{NAMEREF} = ''; # HTML reference for dayname
44 3         4 $self->{HTMLREF} = ''; # HTML reference for whole cell
45 3         8 $self->{TEXT} = []; # array of lines of text
46 3         4 $self->{TEXTCOL} = []; # array of colors for text (optional)
47 3         5 $self->{TEXTSIZE} = []; # array of sizes for text (optional)
48 3         6 $self->{TEXTSTYLE} = []; # array of styles for text (optional) (n,b,i,u)
49             # (n)ormal, (b)old, (i)talic, (u)nderline
50 3         8 $self->{TEXTREF} = []; # array of html references to text
51              
52 3         8 $self->{"FONT_TABLE"}={}; # Table of points to html font sizes
53              
54 3         6 $self->{DIGIT} = shift;
55              
56 3         6 &initialize($self);
57              
58 3         7 bless $self, $class;
59              
60 3         8 return $self;
61              
62             }
63              
64             # ****************************************************************
65             sub getascii {
66 0     0 0 0 my $self = shift;
67              
68 0         0 my $string='';
69              
70             # name
71 0         0 $string .= "$self->{DAYNAME}\n";
72              
73             # text
74 0         0 for (my $i=0;$i<=$#{$self->{TEXT}};$i++) {
  0         0  
75 0         0 my $text = $self->{TEXT}[$i];
76 0         0 $string .= "$text\n";
77             }
78              
79 0         0 return $string;
80             }
81              
82             # ****************************************************************
83             sub gethtml {
84 3     3 0 9 my $self = shift;
85              
86 3         5 my $string='';
87              
88             # initialize cell
89              
90 3         5 my ($htmlref,$htmlref2)= ('','');
91 3 50       16 if ($self->{HTMLREF}) {$htmlref = $self->{HTMLREF};$htmlref2='';}
  3         4  
  3         6  
92              
93 3         9 $string = "{COLOR}{bgmain} ALIGN=LEFT VALIGN=TOP ";
94 3         13 $string .= "HEIGHT=$self->{SIZE}{height} WIDTH=$self->{SIZE}{width}>$htmlref\n";
95              
96             # digit
97 3         6 my ($style1,$style2)=('','');
98 3 50       8 if ($self->{DIGIT} != 0) {
99 3         8 ($style1,$style2) = htmlstyles($self->{STYLE}{day});
100 3         12 $string .= "$style1{'FONT_TABLE'}{$self->{FONT}{day}} ";
101 3         11 $string .= "COLOR=$self->{COLOR}{fg} > $self->{DIGIT} $style2\n";
102             }
103             # name
104 3 50       11 if ($self->{FONT}{main} > 0) {
105 3         5 my ($r1,$r2) = ('','');
106 3 100       13 if ($self->{NAMEREF}) {($r1,$r2) = ($self->{NAMEREF},"");}
  2         4  
107 3         9 ($style1,$style2) = htmlstyles($self->{STYLE}{main});
108 3         12 $string .= "$style1{'FONT_TABLE'}{$self->{FONT}{main}} ";
109 3         12 $string .= "COLOR=$self->{COLOR}{fg} >$r1 $self->{DAYNAME} $r2$style2\n";
110             }
111              
112             # text
113 3 50       10 if ($self->{FONT}{opt} > 0) {
114 3         8 ($style1,$style2) = htmlstyles($self->{STYLE}{opt});
115 3         13 my $textmax=100;
116 3 100       8 if ($self->{CLIPTEXT}) { # pixels/char ~= 6 + fontsize(0,1,2,3)
117 1         7 $textmax = int($self->{SIZE}{width}/(6+$self->{'FONT_TABLE'}{$self->{FONT}{opt}})+.5);
118             }
119 3         9 $string .= "{'FONT_TABLE'}{$self->{FONT}{opt}} ";
120 3         6 $string .= "COLOR=$self->{COLOR}{fg} >\n ";
121 3         6 $string .= "$style1\n ";
122 3         4 for (my $i=0;$i<=$#{$self->{TEXT}};$i++) {
  9         26  
123 6         10 my $text = $self->{TEXT}[$i];
124 6 100       14 if ($self->{CLIPTEXT}) {$text = substr($text,0,$textmax);}
  3         7  
125              
126 6         11 my ($c,$z,$s1,$s2,$r1,$r2,)=('','','','','','',);
127 6 50       14 if (defined $self->{TEXTCOL}[$i]) {$c= "COLOR=" . $self->{TEXTCOL}[$i];}
  6         12  
128 6 50       13 if (defined $self->{TEXTSIZE}[$i]) {$z= "SIZE=" . $self->{FONT_TABLE}{$self->{TEXTSIZE}[$i]};}
  6         26  
129 6 50       12 if (defined $self->{TEXTSTYLE}[$i]) {($s1,$s2)= htmlstyles($self->{TEXTSTYLE}[$i]);}
  6         13  
130 6 100       19 if ($self->{TEXTREF}[$i]) {($r1,$r2) = ($self->{TEXTREF}[$i],"");}
  4         9  
131              
132 6 50       15 if ($s1) { $string .= "
$r1 $style2 $s1 $text $s2$style1 $r2\n";}
  6         27  
133 0         0 else { $string .= "
$r1 $text $r2\n";}
134             }
135 3         7 $string .= "$style2";
136             }
137              
138             # finish up
139 3         4 $string .= "$htmlref2
140              
141 3         10 return $string;
142             }
143              
144             # ****************************************************************
145             sub gettk {
146 0     0 0 0 my $self = shift;
147              
148 0         0 return $self->{DAYS};
149             }
150              
151             # ****************************************************************
152             sub htmlstyles {
153 15     15 0 17 my $codes = shift;
154              
155 15         20 my ($s1,$s2) = ('','');
156              
157 15         29 foreach my $code (split('',$codes)) {
158 23 100       52 if ($code eq 'n') {$s1 .= ' '; $s2 .= ' ';}
  3         4  
  3         5  
159 23 100       46 if ($code eq 'b') {$s1 .= ''; $s2 = '' . $s2;}
  10         12  
  10         17  
160 23 100       42 if ($code eq 'i') {$s1 .= ''; $s2 = '' . $s2;}
  6         9  
  6         9  
161 23 100       56 if ($code eq 'u') {$s1 .= ''; $s2 = '' . $s2;}
  4         6  
  4         17  
162             }
163              
164 15         50 return ($s1,$s2);
165             }
166              
167             # ****************************************************************
168             sub dayname {
169 2     2 0 8 my $self = shift;
170 2 50       8 if (@_) {
171 2         5 $self->{DAYNAME} = shift;
172             }
173 0         0 else { return $self->{DAYNAME};}
174             }
175              
176             # ****************************************************************
177             sub htmlref {
178 3     3 0 10 my $self = shift;
179 3 50       7 if (@_) {
180 3         8 $self->{HTMLREF} = shift;
181             }
182 0         0 else { return $self->{HTMLREF};}
183             }
184              
185             # ****************************************************************
186             sub text {
187 2     2 0 7 my $self = shift;
188 2 50       6 if (@_) {
189 2         3 @{$self->{TEXT}} = @_;
  2         8  
190             }
191 0         0 else { return @{$self->{TEXT}};}
  0         0  
192             }
193              
194             # ****************************************************************
195             sub htmlexpand {
196 3     3 0 10 my $self = shift;
197 3         14 my @ans = qw( no yes );
198 3 50       6 if (@_) {
199 3         5 $self->{EXPAND} = 0;
200 3 50       15 if ( $_[0] eq 'yes' ) {$self->{EXPAND} = 1;}
  3         8  
201             }
202 0         0 else { return $ans[$self->{EXPAND}];}
203             }
204              
205             # ****************************************************************
206             sub cliptext {
207 2     2 0 8 my $self = shift;
208 2         5 my @ans = qw( no yes );
209 2 50       4 if (@_) {
210 2         3 $self->{CLIPTEXT} = 0;
211 2 100       9 if ( $_[0] eq 'yes' ) {$self->{CLIPTEXT} = 1;}
  1         18  
212             }
213 0         0 else { return $ans[$self->{CLIPTEXT}];}
214             }
215              
216             # ****************************************************************
217             sub size {
218 3     3 0 10 my $self = shift;
219 3 50       9 if (@_) {
220 3         12 $self->{SIZE}{height} = shift;
221 3         8 $self->{SIZE}{width} = shift;
222             }
223 0         0 else { return ($self->{SIZE}{height},$self->{SIZE}{width});}
224             }
225              
226             # ****************************************************************
227             sub color {
228 5     5 0 15 my $self = shift;
229 5 50       12 if (@_) {
230 5         9 $self->{COLOR}{fg} = shift;
231 5         13 $self->{COLOR}{bgmain} = shift;
232             }
233 0         0 else { return ($self->{COLOR}{fg},$self->{COLOR}{bgmain},);}
234             }
235              
236             # ****************************************************************
237             sub font {
238 3     3 0 9 my $self = shift;
239 3 50       20 if (@_) {
240 3         6 $self->{FONT}{day} = shift;
241 3         6 $self->{FONT}{main} = shift;
242 3         7 $self->{FONT}{opt} = shift;
243             }
244 0         0 else { return ($self->{FONT}{day},$self->{FONT}{main},$self->{FONT}{opt},);}
245             }
246              
247             # ****************************************************************
248             sub style {
249 2     2 0 8 my $self = shift;
250 2 50       6 if (@_) {
251 2         5 $self->{STYLE}{day} = shift;
252 2         3 $self->{STYLE}{main} = shift;
253 2         5 $self->{STYLE}{opt} = shift;
254             }
255 0         0 else { return ($self->{STYLE}{day},$self->{STYLE}{main},$self->{STYLE}{opt},);}
256             }
257              
258             # ****************************************************************
259             sub textcolor {
260 2     2 0 8 my $self = shift;
261 2 50       4 if (@_) {
262 2         3 @{$self->{TEXTCOL}} = @_;
  2         8  
263             }
264 0         0 else { return @{$self->{TEXTCOL}};}
  0         0  
265             }
266              
267             # ****************************************************************
268             sub textsize {
269 2     2 0 8 my $self = shift;
270 2 50       4 if (@_) {
271 2         3 @{$self->{TEXTSIZE}} = @_;
  2         8  
272             }
273 0         0 else { return @{$self->{TEXTSIZE}};}
  0         0  
274             }
275              
276             # ****************************************************************
277             sub textstyle {
278 2     2 0 7 my $self = shift;
279 2 50       5 if (@_) {
280 2         3 @{$self->{TEXTSTYLE}} = @_;
  2         7  
281             }
282 0         0 else { return @{$self->{TEXTSTYLE}};}
  0         0  
283             }
284              
285             # ****************************************************************
286             sub nameref {
287 2     2 0 5 my $self = shift;
288 2 50       6 if (@_) {
289 2         5 $self->{NAMEREF} = shift;
290             }
291 0         0 else { return $self->{NAMEREF};}
292             }
293              
294             # ****************************************************************
295             sub textref {
296 2     2 0 6 my $self = shift;
297 2 50       5 if (@_) {
298 2         3 @{$self->{TEXTREF}} = @_;
  2         7  
299             }
300 0         0 else { return @{$self->{TEXTREF}};}
  0         0  
301             }
302              
303             # ****************************************************************
304             sub initialize {
305 3     3 0 4 my $self = shift;
306            
307 3         5 @{$self->{COLORS}} = qw(v w g v w g);
  3         10  
308              
309             # default values
310              
311 3         6 $self->{SIZE}{height} = 100;
312 3         6 $self->{SIZE}{width} = 100;
313 3         10 $self->{COLOR}{fg} = 'BLACK';
314 3         7 $self->{COLOR}{bgmain} = '#33cc00'; # green
315 3         6 $self->{FONT}{day} = '14';
316 3         5 $self->{FONT}{main} = '10';
317 3         5 $self->{FONT}{opt} = '8';
318 3         6 $self->{STYLE}{day} = 'b';
319 3         6 $self->{STYLE}{main} = 'b';
320 3         5 $self->{STYLE}{opt} = 'n';
321              
322             # utility values
323              
324 3         5 %{$self->{'FONT_TABLE'}}=(
  3         30  
325             "3" => "-2",
326             "4" => "-2",
327             "5" => "-1",
328             "6" => "-1",
329             "7" => "+0",
330             "8" => "+0",
331             "9" => "+1",
332             "10" => "+1",
333             "11" => "+2",
334             "12" => "+2",
335             "13" => "+3",
336             "14" => "+3",
337             "15" => "+4",
338             "16" => "+4",
339             );
340            
341             }
342              
343             1;
344             __END__