From 6c432030a01d6ae0e12b1027eb7e0c84b6c90f3a Mon Sep 17 00:00:00 2001 From: Maarten Vanraes Date: Sat, 13 Feb 2016 11:33:34 +0100 Subject: optional name for widgets, items, events the name will now be autogenerated depending on a basename that each EventRole needs to implement, with a numeric suffix increasing in number, it checks this in the already present eventHandler. --- lib/ManaTools/Shared/GUI/Event.pm | 6 ++++ lib/ManaTools/Shared/GUI/EventHandlerRole.pm | 4 +-- lib/ManaTools/Shared/GUI/EventRole.pm | 47 ++++++++++++++++++++++++++-- lib/ManaTools/Shared/GUI/ExtTab.pm | 6 ++++ 4 files changed, 58 insertions(+), 5 deletions(-) (limited to 'lib/ManaTools/Shared') diff --git a/lib/ManaTools/Shared/GUI/Event.pm b/lib/ManaTools/Shared/GUI/Event.pm index c51a39fd..49aa2f33 100644 --- a/lib/ManaTools/Shared/GUI/Event.pm +++ b/lib/ManaTools/Shared/GUI/Event.pm @@ -68,6 +68,12 @@ use Moose; use diagnostics; use utf8; +has 'basename' => ( + is => 'ro', + isa => 'Str', + default => 'Event', +); + with 'ManaTools::Shared::GUI::EventRole'; use yui; diff --git a/lib/ManaTools/Shared/GUI/EventHandlerRole.pm b/lib/ManaTools/Shared/GUI/EventHandlerRole.pm index 852c97a1..09e18e47 100644 --- a/lib/ManaTools/Shared/GUI/EventHandlerRole.pm +++ b/lib/ManaTools/Shared/GUI/EventHandlerRole.pm @@ -326,7 +326,7 @@ sub addWidget { my $widget = shift; my $event = shift; my $backend = shift; - return ManaTools::Shared::GUI::Event->new(name => $name, eventHandler => $self, eventType => $yui::YEvent::WidgetEvent, widget => $widget, event => $event, backend => $backend); + return ManaTools::Shared::GUI::Event->new(basename => 'widget', name => $name, eventHandler => $self, eventType => $yui::YEvent::WidgetEvent, widget => $widget, event => $event, backend => $backend); } #============================================================= @@ -431,7 +431,7 @@ sub addItem { my $item = shift; my $event = shift; my $backend = shift; - return ManaTools::Shared::GUI::Event->new(name => $name, eventHandler => $self, eventType => $yui::YEvent::MenuEvent, item => $item, event => $event, backend => $backend); + return ManaTools::Shared::GUI::Event->new(basename => 'Item', name => $name, eventHandler => $self, eventType => $yui::YEvent::MenuEvent, item => $item, event => $event, backend => $backend); } #============================================================= 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', diff --git a/lib/ManaTools/Shared/GUI/ExtTab.pm b/lib/ManaTools/Shared/GUI/ExtTab.pm index 66a14690..66f242bb 100644 --- a/lib/ManaTools/Shared/GUI/ExtTab.pm +++ b/lib/ManaTools/Shared/GUI/ExtTab.pm @@ -78,6 +78,12 @@ use Moose; use diagnostics; use utf8; +has 'basename' => ( + is => 'ro', + isa => 'Str', + default => 'ExtTab', +); + with 'ManaTools::Shared::GUI::EventRole'; use yui; -- cgit v1.2.1