# # This file is part of Curses-Toolkit # # This software is copyright (c) 2011 by Damien "dams" Krotkine. # # This is free software; you can redistribute it and/or modify it under # the same terms as the Perl 5 programming language system itself. # use warnings; use strict; package Curses::Toolkit::Event::Key; BEGIN { $Curses::Toolkit::Event::Key::VERSION = '0.204'; } # ABSTRACT: event that is related to keystrokes use parent qw(Curses::Toolkit::Event); use Params::Validate qw(SCALAR ARRAYREF HASHREF CODEREF GLOB GLOBREF SCALARREF HANDLE BOOLEAN UNDEF validate validate_pos); sub new { my $class = shift; my $self = $class->SUPER::new(); my %args = validate( @_, { type => { type => SCALAR, callbacks => { 'must be one of ' . join( ', ', $self->get_types() ) => sub { my %h = map { $_ => 1 } $self->get_types(); $h{ $_[0] }; }, } }, params => 0, root_window => { isa => 'Curses::Toolkit' }, }, ); $args{params} ||= {}; my @args = $args{params}; my $definition = $self->get_params_definition( $args{type} ); my %params = validate( @args, $definition ), $self->{type} = $args{type}; $self->{root_window} = $args{root_window}; $self->{params} = \%params; return $self; } my %types = ( stroke => { key => { type => SCALAR, callbacks => { non_empty => sub { length( $_[0] ) } } } }, press => {}, release => {}, ); sub get_types { my ($self) = @_; return keys %types; } sub get_params_definition { my ( $self, $type ) = @_; return $types{$type}; } sub get_matching_widget { my ($self) = @_; my $root = $self->{root_window}; my $widget; defined $widget or $widget = $root->get_focused_widget(); defined $widget or $widget = $root->get_focused_window(); defined $widget or $widget = $root; return $widget; } 1; __END__ =pod =head1 NAME Curses::Toolkit::Event::Key - event that is related to keystrokes =head1 VERSION version 0.204 =head1 DESCRIPTION Event that is related to keystrokes =head1 CONSTRUCTOR =head2 new input : type : a type of Key Event. STRING, should be one of Curses::Toolkit::Event::Key->get_types() params : parameter of the event. Can be optional or mandatory. Call Curses::Toolkit::Event::Key->get_params_definition($type) to see root_window : the root window =head1 METHODS =head2 get_type my $type = $event->get_type(); Returns the type of the event. =head2 get_types Returns the types that this Event Class supports input : none output : ARRAY of string. =head2 get_params_definition Returns the parameter definition for a given type, as specified in Params::Validate input : the type name output : 0 OR 1 OR HASHREF =head2 get_matching_widget Returns the widget that is affected by the event. In this case, it returns the widget that currently has the focus input : none output : the widget that is affected by the event =head1 AUTHOR Damien "dams" Krotkine =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Damien "dams" Krotkine. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut