NAME
Prima::Themes - object themes management
DESCRIPTION
Provides layer for theme registration in Prima. Themes are loosely grouped alternations of default class properties and behavior, by default stored in Prima/theme
subdirectory. The theme realization is implemented as interception of object profile during its creation, inside ::profile_add
. Various themes apply various alterations, one way only - once an object is applied a theme, it cannot be neither changed nor revoked thereafter.
Theme configuration can be stored in an rc file, ~/.prima/themes, and is loaded automatically, unless $Prima::Themes::load_rc_file
explicitly set to 0
before loading the Prima::Themes
module. In effect, any Prima application not aware of themes can be coupled with themes in the rc file by the following:
perl -MPrima::Themes program
Prima::Themes
namespace provides registration and execution functionality. Prima::Themes::Proxy
is a class for overriding certain methods, for internal realization of theme.
For interactive theme selection use examples/theme.pl sample program.
SYNOPSIS
# register a theme file use Prima::Themes qw(color); # or use Prima::Themes; load('color'); # list registered themes print Prima::Themes::list;
# install a theme Prima::Themes::install('cyan'); # list installed themes print Prima::Themes::list_active; # create object with another theme while 'cyan' is active Class->create( theme => 'yellow'); # remove a theme Prima::Themes::uninstall('cyan');
Prima::Themes
- load @THEME_MODULES
-
Load THEME_MODULES from files via
use
clause, dies on error. Can be used instead explicituse
.A loaded theme file may register one or more themes.
- register $FILE, $THEME, $MATCH, $CALLBACK
-
Registers loaded theme. $THEME is unique string identifier. $MATCH is an array of pairs, where first item is class string, and second is a custom scalar parameter. When a new object is created, its class is matched via
isa
to each given class string, and if matched, $CALLBACK routine is called with parameters: object, default profile, user profile, second item of the matched pair.If $CALLBACK is
undef
, defaultmerger
routine is called, which treats the second items of pairs as hashed of same format as default and user profiles.The theme is inactive until
install
is called. $FILE is used to indicate the file in which the theme is stored. - deregister $THEME
-
Un-registers $THEME.
- install @THEMES
-
Installs loaded THEMES; the installed themes are used to match new objects.
- uninstall @THEMES
-
Uninstalls loaded THEMES.
- list
-
Returns list of registered themes.
- list_active
-
Returns list of installed themes.
- loaded $THEME
-
Return 1 if theme is registered, 0 otherwise.
- active $THEME
-
Return 1 if theme is installed, 0 otherwise.
- select @THEMES
-
Uninstalls all currently installed themes, and installs THEMES.
- merger $OBJECT, $PROFILE_DEFAULT, $PROFILE_USER, $PROFILE_THEME
-
Default profile merging routine, merges $PROFILE_THEME into $PROFILE_USER, based in keys found in $PROFILE_DEFAULT.
- load_rc [ $INSTALL = 1 ]
-
Reads data ~/.prima/themes and loads listed modules. If $INSTALL = 1, installs the themes from the rc file.
- save_rc
-
Writes configuration of currently installed themes into rc file, returns success flag. If success flag is 0,
$!
contains the error.
Prima::Themes::Proxy
An instance of Prima::Themes::Proxy
, created as
Prima::Themes::Proxy-> new( $OBJECT)
is a non-functional wrapper for any Perl object $OBJECT. Any methods of $OBJECT class, except AUTOLOAD
, DESTROY
, and new
, are forwarded to $OBJECT itself transparently. The class can be used, for example, to deny all changes to lineWidth
inside object's painting routine:
package ConstLineWidth;
use vars qw(@ISA);
@ISA = qw(Prima::Themes::Proxy);
sub lineWidth { 1 } # line width is always 1 now!
Prima::Themes::register( '~/lib/constlinewidth.pm', 'constlinewidth',
[ 'Prima::Widget' => {
onPaint => sub {
my ( $object, $canvas) = @_;
$object-> on_paint( ConstLineWidth-> new( $canvas));
},
} ]
);
AUTHOR
Dmitry Karasik, <dmitry@karasik.eu.org>.
FILES
~/.prima/themes
SEE ALSO
Prima, Prima::Object, examples/themes.pl