package Lire::UI::StringWidget;

use strict;

use base qw/ Curses::UI::TextEntry Lire::UI::Widget /;

use Curses::UI::Common;
use Lire::Utils qw/ check_object_param /;

use Carp;
use vars qw/@CARP_NOT/;

@CARP_NOT = qw/Curses::UI::Container/;

sub new {
    my $class = shift;
    my %userargs = @_;
    keys_to_lowercase(\%userargs);

    check_object_param( $userargs{'value'}, 'value',
                        'Lire::Config::Scalar' );

    my $regexp = $userargs{'value'}->spec()->valid_re();
    return
      $class->Curses::UI::TextEntry::new( %userargs,
                                          '-height' => 1,
                                          '-sbborder' => 1,
                                          '-text' => $userargs{'value'}->get(),
                                          '-onchange' => \&_on_change_cb,
					  '-regexp' => $regexp,
                                        );
}

sub layout {
    my $self = $_[0];

    $self->{'-height'} = 1;

    return $self->SUPER::layout();
}

sub refresh_view {
    my $self = $_[0];

    $self->text( $self->{'value'}->get() );

    return;
}

sub _on_change_cb {
    my $self = $_[0];

    $self->{'value'}->set( $self->{'-text'} );
    $self->run_event( 'onvaluechanged' );

    return;
}

1;
