diff options
Diffstat (limited to 'lib/ManaTools/Shared/GUI/EventRole.pm')
-rw-r--r-- | lib/ManaTools/Shared/GUI/EventRole.pm | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/lib/ManaTools/Shared/GUI/EventRole.pm b/lib/ManaTools/Shared/GUI/EventRole.pm index 6688b582..e8dd2489 100644 --- a/lib/ManaTools/Shared/GUI/EventRole.pm +++ b/lib/ManaTools/Shared/GUI/EventRole.pm @@ -70,6 +70,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use Moose::Role; requires 'processEvent'; +requires 'basename'; has 'eventHandler' => ( is => 'ro', @@ -79,11 +80,51 @@ has 'eventHandler' => ( ); has 'name' => ( - is => 'ro', - isa => 'Str', - required => 1, + is => 'rw', + isa => 'Maybe[Str]', + lazy => 1, + default => undef, ); +around 'name' => sub { + my $orig = shift; + my $self = shift; + my $name = undef; + my $setting = 0; + + # set name if requested + if (scalar(@_) > 0) { + $name = shift; + $setting = 1; + } + else { + $name = $self->$orig(); + $setting = 1 if (!defined $name); + } + + # return the current name + # if it's undef, we need to change this... + if (!defined $name) { + # generate a unique Event name + $name = $self->uniqueName($self->eventHandler()); + } + + # set the name if we were setting it + $name = $self->$orig($name) if ($setting); + return $name; +}; + +sub uniqueName { + my $self = shift; + my $eventHandler = shift; + my $name = $self->basename(); + my $i = 1; + while ($eventHandler->hasEvent($name . $i)) { + $i = $i + 1; + } + return $name; +} + has 'eventType' => ( is => 'ro', isa => 'Int', |