/[libconf]/libconf/perl-Libconf/GUI/Gtk2.pm
ViewVC logotype

Diff of /libconf/perl-Libconf/GUI/Gtk2.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by dams, Tue Aug 26 23:11:41 2003 UTC revision 1.11 by dams, Mon Oct 20 12:55:20 2003 UTC
# Line 17  use ugtk2 qw(:helpers :wrappers :create) Line 17  use ugtk2 qw(:helpers :wrappers :create)
17  # public methods  # public methods
18    
19    
20    sub get_description {
21        my ($hash_desc, $hash_key) = @_;
22        my $value;
23        my $key = (keys(%$hash_key))[0];
24        foreach (keys %$hash_desc) {
25            $key =~ /^$_$/ and $value = $hash_desc->{$_}, last;
26        }
27        defined $value or return undef;
28        my $value_desc = $hash_key->{$key};
29        ref($value_desc) eq '' and return $value;
30        if (ref($value_desc) eq 'ARRAY') {
31            die "not yet implemented :( ";
32        } elsif (ref($value_desc) eq 'HASH') {
33            ref($value) eq 'HASH' or die;
34            return get_description($value, $value_desc);
35        }
36    }
37    
38  # @widget_options is optional  # @widget_options is optional
39  sub getBestWidget {  sub getBestWidget {
40      my ($struct, $key, @widget_options) = @_;      my ($struct, $key, @widget_options) = @_;
41      my $data_description = $struct->{_data_description};      my $data_description = $struct->{_data_description};
42      my $data_mapping = $struct->{_data_mapping};      my $data_mapping = $struct->{_data_mapping};
43  #    use Data::Dumper;      my $hash = {};
44  #    print Dumper($data_description) . "\n";      eval("\$hash->$key = 1;");
45      my $a = "\$data_description->$key";      $@ and die $@;
46      print " +++ $a\n";      my $ret = buildWidget($struct, get_description($data_description, $hash), $data_mapping, @widget_options);
     $a = eval("\$data_description->$key");  
     print " -- : " . Dumper($a). "\n";  
     my $ret = buildWidget(eval("\$data_description->$key"), $data_mapping, @widget_options);  
47      $ret->set_value(eval("\$struct->$key"));      $ret->set_value(eval("\$struct->$key"));
48      $ret;      $ret;
49  }  }
# Line 36  sub getBestWidget { Line 51  sub getBestWidget {
51    
52  # @widget_options is optional  # @widget_options is optional
53  sub buildWidget {  sub buildWidget {
54      my ($data, $data_mapping, @widget_options) = @_;      my ($struct, $data, $data_mapping, @widget_options) = @_;
55      my ($type, $type2, $type3, $default, $values) = @{$data}{qw(type type2 type3 default values)};      my ($type, $type2, $type3, $default, $values) = @{$data}{qw(type type2 type3 default values)};
56      $data_mapping ||= {};      $data_mapping ||= {};
57  #    print "-- $type\n";  #    print "-- $type\n";
# Line 61  sub buildWidget { Line 76  sub buildWidget {
76          }          }
77      }      }
78    
79        if (defined $default && ref($default) eq 'CODE') {
80            $default = &$default();
81        }
82    
83      if ($type eq 'BOOLEAN') {      if ($type eq 'BOOLEAN') {
84          $ret = Libconf::GUI::Gtk2::CheckButton->new($default, $data_mapping->{BOOLEAN}, @widget_options);          $ret = Libconf::GUI::Gtk2::CheckButton->new($default, $data_mapping->{BOOLEAN}, @widget_options);
85      } elsif ($type eq 'INTEGER') {      } elsif ($type eq 'INTEGER') {
86          $ret = Libconf::GUI::Gtk2::SpinButton->new($default, $data_mapping->{BOOLEAN}, @widget_options);          $ret = Libconf::GUI::Gtk2::SpinButton->new($default, $data_mapping->{BOOLEAN}, @widget_options);
87        } elsif ($type eq 'HOSTNAME') {
88            $ret = Libconf::GUI::Gtk2::Hostname->new($default, $data_mapping->{HOSTNAME}, @widget_options);
89      } elsif ($type eq 'STRING') {      } elsif ($type eq 'STRING') {
90          if ($is_combo) {          if ($is_combo) {
91              $ret = gtkcombo_setpopdown_strings(Libconf::GUI::Gtk2::Combo->new($default, $data_mapping->{STRING}, @widget_options),              $ret = gtkcombo_setpopdown_strings(Libconf::GUI::Gtk2::Combo->new($default, $data_mapping->{STRING}, @widget_options),
# Line 418  sub get_value { Line 439  sub get_value {
439  #    defined $self->{'data_mapping'} and $value = $self->{'data_mapping'}->($value);  #    defined $self->{'data_mapping'} and $value = $self->{'data_mapping'}->($value);
440      $value;      $value;
441  }  }
442    
443    package Libconf::GUI::Gtk2::Hostname;
444    
445    use ugtk2 qw(:helpers :wrappers :create);
446    
447    our @ISA = qw(Libconf::GUI::Gtk2::Entry);
448    
449    #constructor
450    #@widget_options is optional
451    sub new {
452        my $class = shift;
453        #call the constructor of the parent class.
454        my $self = $class->SUPER::new(@_);
455        bless $self, $class;
456        return $self;
457    }
458    
459    # #### TO BE REWORKED : data mapping is badly implemented
460    # sub set_default {
461    #     my ($self) = @_;
462    #     my $default_value = $self->{'default_value'};
463    #     $self->set_text($default_value);
464    #     $self->{'value'} = $default_value;
465    # #    defined $self->{'data_mapping'} and $default_value = $self->{'data_mapping'}->($default_value);
466    # #    $self->set_data('value', $default_value);
467    # }
468    
469    # sub set_value {
470    #     my ($self, $value) = @_;
471    # #    $self->set_data('value', $value);
472    #     $self->{'value'} = $value;
473    #     $self->set_text($value);
474    # #    defined $self->{'data_mapping'} and $value = $self->{'data_mapping'}->($value);
475    # #    $self->set_active($value);
476    # }
477    
478    # sub get_value {
479    #     my ($self) = @_;
480    # #    my $value = $self->get_data('value');
481    #     my $value = $self->{'value'};
482    # #    defined $self->{'data_mapping'} and $value = $self->{'data_mapping'}->($value);
483    #     $value;
484    # }

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26