1package WebminUI::PlainText;
2use WebminCore;
3
4=head2 new WebminUI::PlainText(text, columns)
5Displays a block of plain fixed-width text, within a page or form.
6=cut
7sub new
8{
9if (defined(&WebminUI::Theme::PlainText::new) &&
10    caller() !~ /WebminUI::Theme::PlainText/) {
11        return new WebminUI::Theme::PlainText(@_[1..$#_]);
12        }
13my ($self, $text, $columns) = @_;
14$self = { 'columns' => 80 };
15bless($self);
16$self->set_text($text);
17$self->set_columns($columns) if (defined($columns));
18return $self;
19}
20
21=head2 html()
22=cut
23sub html
24{
25my ($self) = @_;
26my $rv;
27$rv .= "<table border><tr $cb><td><pre>";
28foreach my $l (&wrap_lines($self->get_text(), $self->get_columns())) {
29	if (length($l) < $self->get_columns()) {
30		$l .= (" " x $self->get_columns() - length($l));
31		}
32	$rv .= &html_escape($l)."\n";
33	}
34if (!$self->get_text()) {
35	print (" " x $self->get_columns()),"\n";
36	}
37$rv .= "</pre></td></tr></table>\n";
38return $rv;
39}
40
41sub set_text
42{
43my ($self, $text) = @_;
44$self->{'text'} = $text;
45}
46
47sub get_text
48{
49my ($self) = @_;
50return $self->{'text'};
51}
52
53sub set_columns
54{
55my ($self, $columns) = @_;
56$self->{'columns'} = $columns;
57}
58
59sub get_columns
60{
61my ($self) = @_;
62return $self->{'columns'};
63}
64
65# wrap_lines(text, width)
66# Given a multi-line string, return an array of lines wrapped to
67# the given width
68sub wrap_lines
69{
70local @rv;
71local $w = $_[1];
72foreach $rest (split(/\n/, $_[0])) {
73	if ($rest =~ /\S/) {
74		while($rest =~ /^(.{1,$w}\S*)\s*([\0-\377]*)$/) {
75			push(@rv, $1);
76			$rest = $2;
77			}
78		}
79	else {
80		# Empty line .. keep as it is
81		push(@rv, $rest);
82		}
83	}
84return @rv;
85}
86
87=head2 set_page(WebminUI::Page)
88Called when this form is added to a page
89=cut
90sub set_page
91{
92my ($self, $page) = @_;
93$self->{'page'} = $page;
94}
95
961;
97
98