[UP] Data types
|
The representation of the data types in Perl In the Perl environment, the dialog data types are represented as Perl classes:
Before you can access these classes, you must load them: use UI::Variable;- loads all classes at once. In the following explanations, the objects of these classes are called "value containers", as they serve as containers for a low-level representation of values[1]. The interfaces of the value containers UI::Variable::String A string container can be created by my $s_container = new UI::Variable::String("The string");The string of such a container can be read by calling my $s = $s_container->value; # returns "The String"Note that it is normally not necessary to use string containers as there are special access methods for string variables (string_variable and set_string_variable). UI::Variable::Enum A container for a declared enumerator can be formed by my $e_container = new UI::Variable::Enum("x1","x2",...);where x1,x2,... are the internal items of the enumerator. If necessary, it is possible to add a new internal item to an already existing container: $e_container->add("x3");The list of internal items of an enumerator can be read by my @items = $e_container->value; # returns ("x1","x2","x3")The number of items: my $n = $e_container->length;To iterate over the items of a container, apply this method: $e_container->iter( sub { my $item = shift; .... } ) UI::Variable::DynEnum A dynamic enumerator consisting of the internal items x1, x2, .. and the corresponding external values y1, y2, ... can be formed by: my $d_container = new UI::Variable::DynEnum(["x1","y1"],["x2","y2"],...);There is also a method to add another pair: $d_container->add("x3","y3");The list of pairs can be requested by calling: my @pairs = $d_container->value;In this example, @pairs is equal to the list (["x1","y1"],["x2","y2"],["x3","y3"])The number of pairs: my $n = $d_container->length;To iterate over the items of a container, apply this method: $d_container->iter( sub { my ($x,$y) = @_; .... } )Here, $x is the interal and $y the external value of the current pair that is being visited during the iteration. UI::Variable::Dialog An UI::Dialog instance $dlgobj can be put into a value container by my $o_container = new UI::Variable::Dialog($dlgobj);To get the dialog back, do my $dlgobj = $o_container->value; UI::Variable::Alist An associative list of values is handled like a dynamic enumerator. An alist container consisting of the keys i1,i2,... and the corresponding values v1,v2,... can be created by my $a_container = new UI::Variable::Alist( ["i1",$v1], ["i2",$v2], ... );Here, i1, i2, etc must be strings, and $v1, $v2, etc must be value containers (UI::Variable::String, or -::Enum, or -::DynEnum, or -::Object). It is possible to add another key/value mapping: $a_container->add("i3",$v3);The list of pairs can be requested by calling: my @pairs = $a_container->value;In this example, @pairs is equal to the list (["i1",$v1],["i2",$v2],["i3",$v3])The number of pairs: my $n = $a_container->length;To iterate over the items of a container, apply this method: $a_container->iter( sub { my ($i,$v) = @_; .... } )Here, $i is the index (key) and $v the corresponding value of the current pair that is being visited during the iteration. Getting values of variables Let $ui be the UI::Dialog in the following examples. In order to get a variable of arbitrary type one can invoke the variable method: my $v = $ui->variable("name");This method returns a value container, i.e. one object of the classes UI::Variable::String, -::Enum, -::DynEnum, -::Dialog, or -::Alist. For instance, if the object is a string, the scalar value of the string can be obtained by: my $s = $ui->variable("name")->value;For convenience, the types string and enumerator are supported specially. To read a string scalar, one can alternatively invoke: my $s = $ui->string_variable("name");Enumerator values can be accessed by calling: my @e = $ui->enum_variable("name");@e will be the list of internal items. Setting values of variables The method set_variable changes the value of a variable. You must pass the name of the variable and the value container $v to the method: $ui->set_variable("name", $v);For example, to set the value of a string variable to "happy", the following statement can be executed: $ui->set_variable("name", new UI::Variable::String("happy"));For convenience, there is a "shortcut method" for strings: $ui->set_string_variable("name", "happy"); Resetting values of variables The following method sets the value of a variable back to its initial value - either the default specified in the ui:variable element, or the null value of the type: $ui->unset_variable("name"); The dot notation As a more convenient method to access variables of inner dialogs, it is possible to refer to variables by the dot notation. For example, if there is a dialog variable d, and the string variable s is defined in the dialog that is currently the value of d, you can get the string contents of s by this expression: my $s = $ui->string_variable("d.s");This is a shorthand notation for: my $d = $ui->variable("d")->value(); die "Dialog is empty!" if (!defined($d)); my $s = $d->string_variable("s");See the section about Dot notation (v1.v2) for details.
|