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 )