###################################################################################
#
# Embperl - Copyright (c) 1997-2005 Gerald Richter / ecos gmbh www.ecos.de
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
#
# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# $Id$
#
###################################################################################
package Embperl::Form::Control ;
use strict ;
use vars qw{%fdat} ;
use Embperl::Inline ;
# ---------------------------------------------------------------------------
#
# new - create a new control
#
sub new
{
my ($class, $args) = @_ ;
my $self = { %$args } ;
bless $self, $class ;
$self -> init ;
return $self ;
}
# ---------------------------------------------------------------------------
#
# init - init the new control
#
sub init
{
my ($self) = @_ ;
return $self ;
}
# ---------------------------------------------------------------------------
#
# noframe - do not draw frame border if this is the only control
#
sub noframe
{
return ;
}
# ---------------------------------------------------------------------------
#
# is_disabled - do not display this control at all
#
sub is_disabled
{
my ($self, $req) = @_ ;
return $self -> {disable} ;
}
# ---------------------------------------------------------------------------
#
# is_readonly - could value of this control be changed ?
#
sub is_readonly
{
my ($self, $req) = @_ ;
return $self -> {readonly} ;
}
# ---------------------------------------------------------------------------
#
# show - output the whole control including the label
#
sub show
{
my ($self, $req) = @_ ;
$fdat{$self -> {name}} = $self -> {default} if ($fdat{$self -> {name}} eq '' && exists ($self -> {default})) ;
my $span = 0 ;
$span += $self -> show_label_cell ($req, $span);
return $self -> show_control_cell ($req, $span) ;
}
# ---------------------------------------------------------------------------
#
# get_on_show_code
#
# retuns js code that should be excuted when form becomes visible
#
sub get_on_show_code
{
return ;
}
# ---------------------------------------------------------------------------
#
# get_active_id - get the id of the value which is currently active
#
sub get_active_id
{
return ;
}
# ---------------------------------------------------------------------------
#
# form - return form object
#
sub form
{
my ($self) = @_ ;
return $Embperl::FormData::forms{$self -> {formptr}} ;
}
# ---------------------------------------------------------------------------
#
# get_validate_rules - get rules for validation
#
sub get_validate_rules
{
my ($self, $req) = @_ ;
my @local_rules ;
if ($self -> {validate})
{
@local_rules = ( -key => $self->{name} );
push @local_rules, -name => $self->{text} if ($self -> {text}) ;
push @local_rules, @{$self -> {validate}};
}
return \@local_rules ;
}
1 ;
# ===========================================================================
__EMBPERL__
[$syntax EmbperlBlocks $]
[# ---------------------------------------------------------------------------
#
# show_sub_begin - output begin of sub form
#]
[$sub show_sub_begin ($self, $req)
my $span = $self->{width_percent} ;
$]
|
[$endsub$]
[# ---------------------------------------------------------------------------
#
# show_sub_end - output end of sub form
#]
[$sub show_sub_end ($self, $req) $]
|
[$endsub$]
[# ---------------------------------------------------------------------------
#
# show - output the label
#]
[$ sub show_label ($self, $req) $][+ $self->{text} || $self->{name} +][$endsub$]
[# ---------------------------------------------------------------------------
#
# show_label_icon - output the icon before the label
#]
[$sub show_label_icon ($self, $req) $]
[$if $self -> {sublines} $]
[$endif$]
[$if $self -> {parentid} $]
[$endif$]
[$endsub$]
[# ---------------------------------------------------------------------------
#
# show - output the control
#]
[$ sub show_label_cell ($self, $req)
my $style = "";
$style = "white-space:nowrap;" if ($self->{labelnowrap}) ;
$]
{labelclass}" +][$ endif $]"
colspan="1" [$ if $style $]style="[+ $style +]"[$ endif $]>
[-
$self -> show_label ($req);
$self -> show_label_icon ($req) ;
-]
|
[- return 1; -]
[$endsub$]
[# ---------------------------------------------------------------------------
#
# show_control - output the control itself
#]
[$ sub show_control ($self, $req) $][+ $self->{value} +][$endsub$]
[# ---------------------------------------------------------------------------
#
# show_control_readonly - output the control as readonly
#]
[$ sub show_control_readonly ($self, $req) $][+ $self -> {value} || $fdat{$self -> {name}} +][$endsub$]
[# ---------------------------------------------------------------------------
#
# show_controll_cell - output the table cell for the control
#]
[$ sub show_control_cell ($self, $req, $x)
my $span = $self->{width_percent} - $x ;
$]
[* my @ret = $self -> is_readonly?$self -> show_control_readonly($req):$self -> show_control ($req); *]
|
[* return @ret ; *]
[$endsub$]
__END__
=pod
=head1 NAME
Embperl::Form::Control - Base class for controls inside an Embperl Form
=head1 SYNOPSIS
Do not use directly, instead derive a class
=head1 DESCRIPTION
This class is not used directly, it is used as a base class for
all controls inside an Embperl Form. It provides a set of methods
that could be overwritten to customize the behaviour of your controls.
=head1 METHODS
=head2 new
Create a new control
=head2 init
Init the new control
=head2 noframe
Do not draw frame border if this is the only control
=head2 is_disabled
Do not display this control at all.
=head2 is_readonly
Could value of this control be changed ?
=head2 show
Output the control
=head2 get_on_show_code
Returns JavaScript code that should be executed when the form becomes visible
=head2 get_active_id
Get the id of the value which is currently active
=head2 form
Return the form object of this control
=head2 show_sub_begin
Output begin of sub form
=head2 show_sub_end
Output end of sub form
=head2 show_label
Output the label of the control
=head2 show_label_icon
Output the icon after the label
=head2 show_label_cell
Output the table cell in which the label will be displayed
Must return the columns it spans (default: 1)
=head2 show_control
Output the control itself
=head2 show_control_cell
Output the table cell in which the control will be displayed
Gets the x position as argument
=head1 PARAMETERS
=head3 name
Specifies the name of the control
=head3 text
Will be used as label for the control, if not given
name is used as default
=head2 labelnowrap
If set, the text label will not be line wrapped.
=head2 labelclass
If set, will be used as additional CSS classes for the label text cell.
=head2 readonly
If set, displays a readonly version of the control.
=head2 disable
If set, the control will not be displayed at all.
=head2 newline
If set to 1, forces a new line before the control.
If set to -1, forces a new line after the control.
=head2 width
Gives the widths of the control. The value is C<1/width>
of the the whole width of the form. So if you want to
have four controls in one line set C to 4. The default value
is 2.
=head2 width_percent
With this parameter you can also specify the width of
the control in percent. This parameter take precendence over
C
=head2 default
Default value of the control
=head1 AUTHOR
G. Richter (richter@dev.ecos.de)
=head1 SEE ALSO
perl(1), Embperl, Embperl::Form