You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.1 KiB
52 lines
1.1 KiB
13 years ago
|
package TQt::attributes;
|
||
13 years ago
|
#
|
||
|
# I plan to support public/protected/private attributes. here goes.
|
||
|
# Attributes default to protected.
|
||
|
#
|
||
|
# package MyBase;
|
||
13 years ago
|
# use TQt::attributes qw(
|
||
13 years ago
|
# private:
|
||
|
# foo
|
||
|
# protected:
|
||
|
# bar
|
||
|
# public:
|
||
|
# baz
|
||
|
# );
|
||
|
#
|
||
|
# package MyDerived;
|
||
13 years ago
|
# use TQt::isa qw(MyBase);
|
||
13 years ago
|
#
|
||
|
# sub foo {
|
||
|
# # 1 way to access private attributes from derived class
|
||
|
# #
|
||
|
# # this->{$class} contains private attributes for $class
|
||
|
# # I specify it to always work that way,
|
||
|
# # so feel free to use it in code.
|
||
|
# this->{MyBase}{foo} = 10;
|
||
|
#
|
||
|
# # 2 ways to access protected attributes
|
||
|
# bar = 10;
|
||
|
# this->{bar} = 10;
|
||
|
#
|
||
|
# # 3 ways to access public attributes
|
||
|
# baz = 10;
|
||
|
# this->{baz} = 10;
|
||
|
# this->baz = 10;
|
||
|
# }
|
||
|
#
|
||
|
# Attributes override any method with the same name, so you may want
|
||
|
# to prefix them with _ to prevent conflicts.
|
||
|
#
|
||
|
sub import {
|
||
|
my $class = shift;
|
||
|
my $caller = (caller)[0];
|
||
|
|
||
|
for my $attribute (@_) {
|
||
|
exists ${ ${$caller . '::META'}{'attributes'} }{$attribute} and next;
|
||
13 years ago
|
TQt::_internal::installattribute($caller, $attribute);
|
||
13 years ago
|
${ ${$caller . '::META'}{'attributes'} }{$attribute} = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
1;
|