The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Devel::ebug::Wx::View::Configuration::Simple;

use strict;
use base qw(Wx::Panel Class::Accessor::Fast);
use Devel::ebug::Wx::Plugin qw(:plugin);

__PACKAGE__->mk_ro_accessors( qw(attributes _controls) );

use Wx qw(:sizer wxNullFont wxFNTP_DEFAULT_STYLE);

sub tag { 'configuration_simple' }

sub new : Configuration {
    my( $class, $parent, $attributes ) = @_;
    my $self = $class->SUPER::new( $parent );
    $self->{attributes} = $attributes;
    $self->{_controls} = {};

    $self->create_fields;
    $self->set_data;
    $self->SetMinSize( [250, 200] );

    return $self;
}

# FIXME switch-like type handling sucks
sub create_fields {
    my( $self ) = @_;

    my $sz = Wx::FlexGridSizer->new( 0, 2, 3, 3 );
    $sz->AddGrowableCol( $_ ) foreach 0 .. 2 - 1;
    foreach my $key ( @{$self->attributes->{keys}} ) {
        my $label = Wx::StaticText->new( $self, -1, $key->{label} );
        my $control;
        if( $key->{type} eq 'font' ) {
            $control = Wx::FontPickerCtrl->new
              ( $self, -1, wxNullFont, [-1, -1], [-1, -1],
                wxFNTP_DEFAULT_STYLE );
        } elsif( $key->{type} eq 'string' ) {
            $control = Wx::TextCtrl->new( $self, -1, '' );
        }
        $self->_controls->{$key} = $control;
        $sz->Add( $label, 0 );
        $sz->Add( $control, 0, wxGROW );
    }
    $self->SetSizer( $sz );
}

sub set_data {
    my( $self ) = @_;

    foreach my $key ( @{$self->attributes->{keys}} ) {
        my $control = $self->_controls->{$key};
        next unless defined $key->{value};
        if( $key->{type} eq 'font' ) {
            my $font = Wx::Font->new( $key->{value} );
            $control->SetSelectedFont( $font );
        } elsif( $key->{type} eq 'string' ) {
            $control->SetValue( $key->{value} );
        }
    }
}

sub retrieve_data {
    my( $self ) = @_;

    foreach my $key ( @{$self->attributes->{keys}} ) {
        my $control = $self->_controls->{$key};
        if( $key->{type} eq 'font' ) {
            $key->{value} = $control->GetSelectedFont->GetNativeFontInfoDesc;
        } elsif( $key->{type} eq 'string' ) {
            $key->{value} = $control->GetValue;
        }
    }
}

1;