package Padre::Wx::Dialog; use 5.008; use strict; use warnings; use Wx::Perl::Dialog (); our $VERSION = '0.50'; our @ISA = 'Wx::Perl::Dialog'; sub create_widget { my $self = shift; my $widgetClass = shift; my $param = shift; my $parent = $param->[0]; my $widget; if ( $widgetClass eq 'Wx::StaticText' ) { $widget = $widgetClass->new( $parent, Wx::wxID_STATIC, $param->[1] ); } elsif ( $widgetClass eq 'Wx::Button' ) { $widget = $widgetClass->new( $parent, -1, $param->[1] ); } elsif ( $widgetClass eq 'Wx::DirPickerCtrl' ) { my $title = $param->[1] || ''; $widget = $widgetClass->new( $parent, -1, '', $param->[2] ); $widget->SetPath( $param->[1] || Cwd::cwd() ); } elsif ( $widgetClass eq 'Wx::FilePickerCtrl' ) { $widget = $widgetClass->new( $parent, -1, $param->[1], $param->[2] ); $widget->SetPath( Cwd::cwd() ); } elsif ( $widgetClass eq 'Wx::TextCtrl' ) { if ( $param->[2] ) { $widget = $widgetClass->new( $parent, -1, $param->[1], Wx::wxDefaultPosition, Wx::wxDefaultSize, $param->[2] ); } else { $widget = $widgetClass->new( $parent, -1, $param->[1] ); } } elsif ( $widgetClass eq 'Wx::CheckBox' ) { $widget = $widgetClass->new( $parent, -1, $param->[2] ); $widget->SetValue( $param->[1] ); } elsif ( $widgetClass eq 'Wx::ComboBox' ) { $widget = $widgetClass->new( $parent, -1, $param->[1] ); } elsif ( $widgetClass eq 'Wx::Choice' ) { my $ary_size = scalar @$param; $widget = $widgetClass->new( $parent, -1, Wx::wxDefaultPosition, Wx::wxDefaultSize, $param->[1], ( $ary_size > 3 ? @{$param}[ 2 .. $ary_size ] : () ) ); $widget->SetSelection(0); } elsif ( $widgetClass eq 'Wx::StaticLine' ) { $widget = $widgetClass->new( $parent, Wx::wxID_STATIC, Wx::wxDefaultPosition, Wx::wxDefaultSize, $param->[1] ); } elsif ( $widgetClass eq 'Wx::FontPickerCtrl' ) { my $default_val = ( defined $param->[1] and $param->[1] ne '' ? $param->[1] : '' ); my $default = Wx::Font->new(Wx::wxNullFont); eval { $default->SetNativeFontInfoUserDesc($default_val); }; $default = Wx::wxNullFont if $@; $widget = $widgetClass->new( $parent, -1, $default, Wx::wxDefaultPosition, Wx::wxDefaultSize, Wx::wxFNTP_DEFAULT_STYLE ); } elsif ( $widgetClass eq 'Wx::ColourPickerCtrl' ) { my $default_val = ( defined( $param->[1] ) && $param->[1] ne '' ? $param->[1] : '#000000' ); my $default; eval { $default = Wx::Colour->new($default_val); }; $default = Wx::Colour->new('#000000') if $@; $widget = $widgetClass->new( $parent, -1, $default, Wx::wxDefaultPosition, Wx::wxDefaultSize, Wx::wxCLRP_DEFAULT_STYLE ); } elsif ( $widgetClass eq 'Wx::SpinCtrl' ) { $widget = $widgetClass->new( $parent, -1, $param->[1], Wx::wxDefaultPosition, Wx::wxDefaultSize, Wx::wxSP_ARROW_KEYS, $param->[2], $param->[3], $param->[1] ); } else { #warn "Unsupported widget $widgetClass\n"; return; } return $widget; } sub add_widget { my $self = shift; my $name = shift; unless ( defined $name and $name ne '' ) { return; } my $widget = ''; if ( defined $_[0] and ref( $_[0] ) and $_[0]->isa('Wx::Control') ) { $widget = shift; } else { $widget = $self->create_widget(@_); } if ( $widget->isa('Wx::Control') ) { if ( defined $self->{_widgets_}->{$name} ) { delete $self->{_widgets_}->{$name}; } $self->{_widgets_}->{$name} = $widget; return $widget; } return; } sub get_widget { my $self = shift; my $name = shift; if ( defined $name and $name ne '' ) { if ( defined $self->{_widgets_}->{$name} and $self->{_widgets_}->{$name}->isa('Wx::Control') ) { return $self->{_widgets_}->{$name}; } elsif ( defined $self->{_widgets_}->{$name} ) { delete $self->{_widgets_}->{$name}; } } return; } sub get_widget_value { my $self = shift; my $name = shift; if ( defined($name) && $name ne '' && defined $self->{_widgets_}->{$name} && $self->{_widgets_}->{$name}->isa('Wx::Control') ) { my $w = $self->{_widgets_}->{$name}; return undef if $w->isa('Wx::Button'); return undef if $w->isa('Wx::StaticText'); if ( $w->isa('Wx::DirPickerCtrl') ) { return $w->GetPath; } elsif ( $w->isa('Wx::FilePickerCtrl') ) { return $w->GetPath; } elsif ( $w->isa('Wx::ComboBox') ) { return $w->GetValue; } elsif ( $w->isa('Wx::Choice') ) { return $w->GetSelection; } elsif ( $w->isa('Wx::FontPickerCtrl') ) { return $w->GetSelectedFont->GetNativeFontInfoUserDesc; } elsif ( $w->isa('Wx::ColourPickerCtrl') ) { return $w->GetColour->GetAsString(Wx::wxC2S_HTML_SYNTAX); } elsif ( $w->isa('Wx::TextCtrl') ) { return ( defined $w->GetValue ) ? $w->GetValue : ''; } else { if ( $w->can('GetValue') ) { return $w->GetValue; } else { return; } } } return; } sub get_widgets_values { my $self = shift; my $data = {}; foreach my $w ( keys %{ $self->{_widgets_} } ) { $data->{$w} = $self->get_widget_value($w); } return $data; } sub fill_panel_by_table { my $self = shift; my $panel = shift; my $table = shift; my $stdStyle = Wx::wxALIGN_LEFT | Wx::wxALIGN_CENTER_VERTICAL | Wx::wxALL; my $fgs = ''; unless ( $fgs = $panel->GetSizer ) { my $cols = 0; foreach my $row (@$table) { if ( scalar(@$row) > $cols ) { $cols = scalar(@$row); } } $fgs = Wx::FlexGridSizer->new( 0, $cols, 0, 0 ); $panel->SetSizer($fgs); } foreach my $row (@$table) { foreach my $col (@$row) { if ( scalar @$col == 0 ) { $fgs->Add( 0, 0 ); next; } my $class = shift(@$col); my $name = shift(@$col); my $style = $stdStyle; if ( $class ne 'Wx::StaticText' and $class ne 'Wx::CheckBox' ) { $style |= Wx::wxEXPAND; } if ( !$name ) { $fgs->Add( $self->create_widget( $class, [ $panel, @$col ] ), 0, $style, 3 ); } else { my $tmpWidget = $self->add_widget( $name, $class, [ $panel, @$col ] ); $fgs->Add( $tmpWidget, 0, $style, 3 ); } } } return; } 1; __END__ =pod =head1 NAME Padre::Wx::Dialog - Dummy Padre wrapper around Wx::Perl::Dialog =cut # Copyright 2008-2009 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself.