# vim: set et ts=4 sw=4:
#
# Copyright 2013-2015 Angelo Naselli
# Copyright 2012 Steven Tucker
#
# This file is part of ManaTools
#
# ManaTools is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# ManaTools is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ManaTools. If not, see .
#Class Module
package ManaTools::Module;
use ManaTools::Shared;
use Moose;
=head1 VERSION
Version 1.0.1
=cut
our $VERSION = '1.0.1';
use yui;
#=============================================================
=head1 Attributes - Optional constructor parameters
=head2 icon
icon attribute defines the Module icon, override this
attribute by using
has '+icon' => (
...
)
into your module implementation.
=cut
#=============================================================
has 'icon' => (
is => 'rw',
isa => 'Str',
);
#=============================================================
=head2 name
name attribute defines the Module name, override this
attribute by using
has '+name' => (
...
)
into your module implementation.
=cut
#=============================================================
has 'name' => (
is => 'rw',
isa => 'Str',
);
#=============================================================
=head2 launch
launch attribute defines the Module as external command
to be run, pass this attribute to the "create" to set it.
=cut
#=============================================================
has 'launch' => (
is => 'rw',
isa => 'Str',
);
has 'button' => (
is => 'rw',
init_arg => undef,
);
#=============================================================
=head2 loc
loc attribute defines localization object taht use "manatools"
domain as default. (see ManaTools::Shared::Locales for details).
To use your own Module domain, override this attribute by using
has '+loc' => (
...
)
or assign it again to your ManaTools::Shared::Locales object into
the extension module implementation.
=cut
#=============================================================
has 'loc' => (
is => 'rw',
init_arg => undef,
builder => '_localeInitialize'
);
sub _localeInitialize {
my $self = shift;
my $locale_dir = ManaTools::Shared::custom_locale_dir();
$self->loc(
ManaTools::Shared::Locales->new(
domain_name => 'manatools',
dir_name => $locale_dir,
)
);
}
#=============================================================
=head1 SUBROUTINES/METHODS
=head2 create
=head3 INPUT
%params: moudule extension construtcor parameters
--CLASS name of the Class module extension name
in the case of acting as a launcher mandatory parameters
are name, icon and launch (see Attributes section of
this manual)
=head3 DESCRIPTION
returns a Module instance, such as a module launcher
(this object) or an extension of this class
=cut
#=============================================================
sub create {
my $class = shift;
$class = ref $class || $class;
my (%params) = @_;
my $obj;
if ( exists $params{-CLASS} ) {
my $driver = $params{-CLASS};
eval {
my $pkg = $driver;
$pkg =~ s/::/\//g;
$pkg .= '.pm';
require $pkg;
$obj=$driver->new();
};
if ( $@ ) {
die "Error getting obj for driver $params{-CLASS}: $@";
return undef;
}
}
else {
$obj = new ManaTools::Module(@_);
}
return $obj;
}
#=============================================================
=head2 BUILD
=head3 INPUT
$self: this object
=head3 DESCRIPTION
The BUILD method is called after a Moose object is created,
base Module class sets title and icon
=cut
#=============================================================
sub BUILD {
my $self = shift;
## set title
yui::YUI::app()->setApplicationTitle($self->name) if $self->name;
## set icon
yui::YUI::app()->setApplicationIcon($self->icon) if $self->icon;
}
#=============================================================
=head2 setButton
=head3 INPUT
$self: this object
$button: yui push button to be assigned to this module
=head3 DESCRIPTION
This method assignes a button to this module
=cut
#=============================================================
sub setButton {
my ($self, $button) = @_;
$self->{button} = $button;
}
#=============================================================
=head2 removeButton
=head3 INPUT
$self: this object
=head3 DESCRIPTION
This method remove the assigned button from this module
=cut
#=============================================================
sub removeButton {
my($self) = @_;
undef($self->{button});
}
# base class launcher
#=============================================================
=head2 start
=head3 INPUT
$self: this object
=head3 DESCRIPTION
This method is the base class launcher that runs an external
module, defined in launch attribute.
=cut
#=============================================================
sub start {
my $self = shift;
if ($self->{launch}) {
my $err = yui::YUI::app()->runInTerminal( $self->{launch} . " --ncurses");
if ($err == -1) {
system($self->{launch});
}
}
}
no Moose;
1;