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 )