NAME
UI::Various::core - core functions of UI::Various
SYNOPSIS
# This module should never be used directly!
# It is used indirectly via the following:
use UI::Various;
ABSTRACT
This module is the main worker module for the UI::Various package.
DESCRIPTION
The documentation of this module is mainly intended for developers of the package itself.
Basically the module is a singleton providing a set of functions to be used by the other modules of UI::Various.
EXPORT
No data structures are exported, the core module is only accessed via its functions (and initialised with the import method indirectly called via use UI::Various;
).
METHODS and FUNCTIONS
import - initialisation of UI::Various package
Otherwise this method just exports the core functions to our other modules.
language - get or set currently used language
internal implementation of UI::Various::language
logging - get or set currently used logging-level
internal implementation of UI::Various::logging
stderr - get or set currently used handling of output
internal implementation of UI::Various::stderr
using - get currently used UI as text string
internal implementation of UI::Various::using
ui - get currently used UI
$interface = UI::Various::core::ui();
example:
$_ = UI::Various::core::ui() . '::Main::_init';
{ no strict 'refs'; &$_($self); }
description:
This function returns the full name of the currently used user interface, e.g. to access its methods.
returns:
full name of UI
fatal - abort with error message
fatal($message_id, @message_data);
example:
fatal('bad_usage_of__1_as__2', __PACKAGE__, $pkg);
fatal('UI__Various__core_must_be_1st_used_from_UI__Various');
parameters:
$message_id ID of the text or format string in language module
@message_data optional additional text data for format string
description:
This function looks up the format (or simple) string passed in $message_id
in the text hash of the currently used language, formats it together with the @message_data
with sprintf and passes it on to croak
.
error / warning / info - print error / warning / info message
error($message_id, @message_data);
warning($message_id, @message_data);
info($message_id, @message_data);
example:
warning(1, 'message__1_missing_in__2', $message_id, $UI->{language});
parameters:
$message_id ID of the text or format string in language module
@message_data optional additional text data for format string
description:
If the current logging level is lower than ERROR
/ WARNING
/ INFO
these function do nothing. Otherwise they print the formatted message using _message
.
_message
has logging level to be printed as additional 1st parameter. It checks the logging level, looks up the format (or simple) string passed in $message_id
in the text hash of the currently used language, formats the latter together with the @message_data
with sprintf and passes it on to carp
(in case of errors or warnings) or warn
(in case of informational messages).
returns:
always undef
(to allow something like return error(...);
indicating the error to the caller)
debug - print debugging message
debug($level, @message);
example:
debug(1, TODO);
parameters:
$level debug-level of the message (>= 1)
@message the text to be printed
description:
If the current logging level is lower than DEBUG_n
(with n
being the $level
specified in the call) this function does nothing. Otherwise it prints the given text. Note that debugging messages are always English, so they can be added / removed / changed anytime without bothering about the UI::Various::language
modules. Also note that debug messages are printed with warn
and prefixed with DEBUG
and some blanks according to the debug-level.
msg - look-up text for currently used language
$message = msg($message_id);
example:
$_ = sprintf(msg($message_id), @_);
parameters:
$message_id ID of the text or format string in language module
description:
This method looks up the format (or simple) string passed in $message_id
in the text hash of the currently used language and returns it.
construct - common constructor for UI elements
$ui_element = UI::Various::Element->new(%attributes);
example:
$ui_element = UI::Various::Element->new();
$ui_element = UI::Various::Element->new(attr1 => $val1, attr2 => $val2);
$ui_element = UI::Various::Element->new({attr1 => $val1, attr2 => $val2});
parameters:
%attributes optional hash with initial attribute values
description:
This function contains the common constructor code of all UI element classes ( UI::Various::[A-Z]*
). Initial values can either be passed as an array of key/value pairs or as a single reference to a hash containing those key/value pairs. Note that if the class defines a (private) setter method _attr
(tried 1st) or a (public) accessor attr
(tried 2nd), it is used to assign the value before falling back to a simple assignment.
The internal implementation has the following interface:
$self = construct($attributes, $re_allowed_params, $self, @_);
It is used like this:
sub new($;\[@$])
{
return construct({ DEFAULT_ATTRIBUTES },
'^(?:' . join('|', ALLOWED_PARAMETERS) . ')$',
@_);
}
The additional parameters are:
$attributes reference to hash with default attributes
$re_allowed_params regular expression matching all allowed parameters
$self name of class or reference to other element of class
@_ parameters passed to caller's C<new>
returns:
blessed new UI element
access - common accessor for UI elements
$value = $ui_element->attribute();
$ui_element->attribute($value);
parameters:
$value optional value to be set
description:
This function contains the common accessor code of all UI element classes ( UI::Various::[A-Z]*
) aka implementing a combined standard getter / setter. When it's called with a value, the attribute is set. In all cases the current (after modification, if applicable) value is returned. If the value is a SCALAR reference it is stored as reference but returned as value.
The internal implementation has the following interface:
$value = access($attribute, $sub_set, $self, $new_value);
It is used like this:
sub attribute($;$)
{
return access('attribute', sub{ ... }, @_);
}
or simply
sub attribute($;$)
{
return access('attribute', undef, @_);
}
The additional parameters are:
$attribute name of the attribute
$sub_set optional reference to a subroutine called when
the function is used as a setter (see below)
$self reference to the class object
@_ the optional new value and possible other parameters
passed to C<$sub_set>
The optional subroutine gets the new value passed in $_
and must return the value to be set in $_
as well. To allow for complicated tests and/or side-effects it gets $self
and possible additional parameters passed in @_
. The return value of the subroutine itself decides, if the attribute is modified: If it's undef
, the previous value is kept. In all other cases the attribute gets the new value as defined in $_
. Note that the subroutine gets the value even in case of a SCALAR reference.
If no additional code is needed, the parameter can be undef
as in the 2nd example above.
returns:
the current value of the attribute
set - common setter for UI elements
$ui_element->attribute($value);
parameters:
$value mandatory value to be set
description:
This function contains the common setter code of all UI element classes ( UI::Various::[A-Z]*
). Basically it's an accessor with a mandatory value to be set. Like access
it returns the updated value. If the value is a SCALAR reference it is stored as reference but returned as value.
The internal implementation has the following interface:
$value = set($attribute, $sub_set, $self, $new_value);
It is used like this:
sub _attribute($$)
{
return set('attribute', sub{ ...; }, @_);
}
or simply
sub _attribute($$)
{
return set('attribute', undef, @_);
}
The additional parameters are:
$attribute name of the attribute
$sub_set optional reference to a subroutine called within the
setter
$self name of class or reference to other element of class
@_ the new value and possible other parameters passed
to C<$sub_set>
The optional subroutine gets the new value passed in $_
and must return the value to be set in $_
as well. To allow for complicated tests and/or side-effects it gets $self
and possible additional parameters passed in @_
. The return value of the subroutine itself decides, if the attribute is modified: If it's undef
, the previous value is kept. In all other cases the attribute gets the new value as defined in $_
. Note that the subroutine gets the value even in case of a SCALAR reference.
If no additional code is needed, the parameter can be undef
as in the 2nd example above.
returns:
the new value of the attribute
get - common getter for UI elements
$value = $ui_element->attribute();
description:
This function contains the common getter code of all UI element classes ( UI::Various::[A-Z]*
), implementing a very simple getter returning the current value of the attribute (but still with all sanity checks).
The internal implementation has the following interface:
$value = get($attribute, $self);
It is used like this:
sub attribute($) { return get('attribute', @_); }
The additional parameters are:
$attribute name of the attribute
$self name of class or reference to other element of class
returns:
the current value of the attribute
SEE ALSO
LICENSE
Copyright (C) Thomas Dorner.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See LICENSE file for more details.
AUTHOR
Thomas Dorner <dorner@cpan.org>