Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
lib/Gtk2/Ex/FormFactory/Widget.pm view on Meta::CPAN
package Gtk2::Ex::FormFactory::Widget;
use strict;
use Carp;
use Scalar::Util qw(weaken);
my $NAME_CNT = 0;
my %WIDGET_NAMES;
#========================================================================
# Accessors for user specified attributes
#========================================================================
sub get_name { shift->{name} }
sub get_object { shift->{object} }
sub get_attr { shift->{attr} }
sub get_properties { shift->{properties} }
sub get_label { shift->{label} }
sub get_label_for { shift->{label_for} }
sub get_label_markup { shift->{label_markup} }
sub get_label_group { shift->{label_group} }
sub get_widget_group { shift->{widget_group} }
sub get_tip { shift->{tip} }
sub get_inactive { shift->{inactive} }
sub get_active { shift->{active} }
sub get_rules { shift->{rules} }
sub get_expand { shift->{expand} }
sub get_expand_h { shift->{expand_h} }
sub get_expand_v { shift->{expand_v} }
sub get_scrollbars { shift->{scrollbars} }
sub get_signal_connect { shift->{signal_connect} }
sub get_signal_connect_after { shift->{signal_connect_after} }
sub get_width { shift->{width} }
sub get_height { shift->{height} }
sub get_customize_hook { shift->{customize_hook} }
sub get_changed_hook { shift->{changed_hook} }
sub get_changed_hook_after { shift->{changed_hook_after} }
sub get_active_cond { shift->{active_cond} }
sub get_active_depends { shift->{active_depends} }
#------------------------------------------------------------------------
sub set_name { shift->{name} = $_[1] }
sub set_object { shift->{object} = $_[1] }
sub set_attr { shift->{attr} = $_[1] }
sub set_properties { shift->{properties} = $_[1] }
sub set_label { shift->{label} = $_[1] }
sub set_label_for { shift->{label_for} = $_[1] }
sub set_label_markup { shift->{label_markup} = $_[1] }
sub set_label_group { shift->{label_group} = $_[1] }
sub set_widget_group { shift->{widget_group} = $_[1] }
sub set_tip { shift->{tip} = $_[1] }
sub set_inactive { shift->{inactive} = $_[1] }
sub set_active { shift->{active} = $_[1] }
sub set_rules { shift->{rules} = $_[1] }
sub set_expand { shift->{expand} = $_[1] }
sub set_expand_h { shift->{expand_h} = $_[1] }
sub set_expand_v { shift->{expand_v} = $_[1] }
sub set_scrollbars { shift->{scrollbars} = $_[1] }
sub set_signal_connect { shift->{signal_connect} = $_[1] }
sub set_signal_connect_after { shift->{signal_connect_after} = $_[1] }
sub set_width { shift->{width} = $_[1] }
sub set_height { shift->{height} = $_[1] }
sub set_customize_hook { shift->{customize_hook} = $_[1] }
sub set_changed_hook { shift->{changed_hook} = $_[1] }
sub set_changed_hook_after { shift->{changed_hook_after} = $_[1] }
sub set_active_cond { shift->{active_cond} = $_[1] }
sub set_active_depends { shift->{active_depends} = $_[1] }
#========================================================================
#========================================================================
# Accessors for internal attributes
#========================================================================
sub get_context { shift->{form_factory}->get_context }
sub get_form_factory { shift->{form_factory} }
sub get_parent { shift->{parent} }
sub get_gtk_widget { shift->{gtk_widget} }
sub get_gtk_parent_widget { $_[0]->{gtk_parent_widget} ||
$_[0]->{gtk_widget} }
sub get_gtk_properties_widget { $_[0]->{gtk_properties_widget} ||
$_[0]->{gtk_widget} }
sub get_gtk_label_widget { shift->{gtk_label_widget} }
sub get_layout_data { shift->{layout_data} }
sub get_in_update { shift->{in_update} }
sub get_no_widget_update { shift->{no_widget_update} }
sub get_backup_widget_value { shift->{backup_widget_value} }
sub get_widget_activity { shift->{widget_activity} }
sub get_built { shift->{built} }
#------------------------------------------------------------------------
sub set_form_factory { weaken( shift->{form_factory} = $_[1])}
sub set_parent { weaken( shift->{parent} = $_[1])}
sub set_gtk_widget { shift->{gtk_widget} = $_[1] }
sub set_gtk_parent_widget { shift->{gtk_parent_widget} = $_[1] }
sub set_gtk_properties_widget { shift->{gtk_properties_widget}= $_[1] }
sub set_gtk_label_widget { shift->{gtk_label_widget} = $_[1] }
sub set_layout_data { shift->{layout_data} = $_[1] }
sub set_in_update { shift->{in_update} = $_[1] }
sub set_no_widget_update { shift->{no_widget_update} = $_[1] }
sub set_backup_widget_value { shift->{backup_widget_value} = $_[1] }
sub set_widget_activity { shift->{widget_activity} = $_[1] }
sub set_built { shift->{built} = $_[1] }
#========================================================================
#========================================================================
# Methods, which may be implemented by Widget subclasses
#========================================================================
sub get_type { die $_[0]." misses type() method" }
sub get_gtk_signal_widget { $_[0]->get_gtk_widget }
sub get_gtk_tip_widgets { [ $_[0]->get_gtk_widget ] }
sub get_gtk_check_widget { $_[0]->get_gtk_widget }
sub get_widget_check_value { undef }
sub has_additional_attrs { "" }
sub has_label { 0 }
sub object_to_widget { 1 }
sub widget_to_object { 1 }
sub empty_widget { 1 }
sub backup_widget_value { 1 }
sub restore_widget_value { 1 }
sub isa_container { 0 }
sub widget_data_has_changed { $_[0]->get_backup_widget_value ne
$_[0]->get_widget_check_value }
#========================================================================
#========================================================================
# Widget constructor - must be called by subclasses
#========================================================================
sub new {
my $class = shift;
my %par = @_;
my ($name, $object, $attr, $properties, $label, $label_group) =
@par{'name','object','attr','properties','label','label_group'};
my ($widget_group, $inactive, $rules, $expand, $scrollbars) =
@par{'widget_group','inactive','rules','expand','scrollbars'};
my ($signal_connect, $width, $height, $customize_hook) =
@par{'signal_connect','width','height','customize_hook'};
my ($changed_hook, $tip, $expand_h, $expand_v, $label_markup) =
@par{'changed_hook','tip','expand_h','expand_v','label_markup'};
my ($active, $signal_connect_after, $label_for) =
@par{'active','signal_connect_after','label_for'};
my ($active_cond, $active_depends, $changed_hook_after) =
@par{'active_cond','active_depends','changed_hook_after'};
$active = 1 if not defined $active;
#-- Short notation: 'object.attr', so you may omit 'object'
if ( $attr and $attr =~ /^([^.]+)\.(.*)/ ) {
$object = $1;
$attr = $2;
}
( run in 1.047 second using v1.01-cache-2.11-cpan-39bf76dae61 )