math-image

 view release on metacpan or  search on metacpan

lib/App/MathImage/Gtk2/Params/Enum.pm  view on Meta::CPAN

                   'Blurb.',
                   '',
                   Glib::G_PARAM_READWRITE),

                  Glib::ParamSpec->scalar
                  ('parameter-info',
                   'Parameter Info',
                   'Blurb.',
                   Glib::G_PARAM_READWRITE),
                ],
  signals => { notify => \&_do_notify };

# sub INIT_INSTANCE {
#   my ($self) = @_;
# }

sub _do_notify {
  my ($self, $pspec) = @_;
  ### Params-Enum _do_notify(): $pspec->get_name

  $self->signal_chain_from_overridden ($pspec);

  my $pname = $pspec->get_name;
  if ($pname eq 'active_nick') {
    ### Enum notify value...
    $self->notify('parameter_value');
  }
}

sub GET_PROPERTY {
  my ($self, $pspec, $newval) = @_;
  ### Params-Enum GET_PROPERTY: $pspec->get_name

  my $pname = $pspec->get_name;
  if ($pname eq 'parameter_value') {
    return $self->get('active_nick');
  } else {
    return $self->{$pname};
  }
}

sub SET_PROPERTY {
  my ($self, $pspec, $newval) = @_;
  ### Params-Enum SET_PROPERTY: $pspec->get_name, $newval

  my $pname = $pspec->get_name;
  if ($pname eq 'parameter_value') {
    $self->set (active_nick => $newval);
    ### Params-Enum active-nick now: $self->get('active-nick')

  } else {
    my $name = $newval->{'name'};
    my $display = ($newval->{'display'} || $name);
    $self->set (enum_type => _pinfo_to_enum_type($newval),
                overflow_mnemonic =>
                Gtk2::Ex::MenuBits::mnemonic_escape($display));
    if (! defined ($self->get('parameter-value'))) {
      $self->set (parameter_value => $newval->{'default'});
    }

    my $combobox = $self->get_child;
    set_property_maybe ($combobox, # tearoff-title new in 2.10
                        tearoff_title => __('Math-Image:').' '.$display);
  }
}

sub _pinfo_to_enum_type {
  my ($pinfo) = @_;
  my $key = $pinfo->{'share_key'} || $pinfo->{'name'};
  my $enum_type = "App::MathImage::Gtk2::Params::Enum::$key";
  if (! eval { Glib::Type->list_values ($enum_type); 1 }) {
    my $choices = $pinfo->{'choices'} || [];
    ### $choices
    Glib::Type->register_enum ($enum_type, @$choices);

    if (my $choices_display = $pinfo->{'choices_display'}) {
      no strict 'refs';
      %{"${enum_type}::EnumBits_to_display"}
        = map { $choices->[$_] => $pinfo->{'choices_display'}->[$_] }
          0 .. $#$choices;
    }
  }
  return $enum_type;
}

1;
__END__



( run in 0.847 second using v1.01-cache-2.11-cpan-59e3e3084b8 )