thanks  for the respons marks,
I already solved it very similarly
but now that i really started the WxPerl Book (introduction just about to
complete https://bitbucket.org/lichtkind/wxperlbook/src)
you can expect a lot more questions coming. :)

as an upside ther will be maybe some bugs detected and some useful helper
classes created.

blessings
herbert


Am 06.08.2012 18:08, schrieb Mark Dootson:
> Hi,
> 
> If you wish to create your own wxSizer class you must inherit from Wx::PlSizer
> and override the abstract methods 'RecalcSizes' and 'CalcMin'.
> 
> The 'glue' that would allow you to usefully create a Kephra::App::Sizer
> inheriting from Wx::BoxSizer (or any other sizer class) is not implemented.
> The 'glue' is the code that connects the Perl data for your Kephra::App::Sizer
> to the C++ data for the Wx::BoxSizer instance, and ensures that both bits of
> data are deleted at the appropriate time.
> 
> The reason for the none implementation I would guess is that the useful
> virtual methods in Wx::Sizer - 'RecalcSizes' and 'CalcMin', have none-virtual
> implementations in Wx::BoxSizer. So for the main job that a sizer does -
> laying out children - inheriting from Wx::BoxSizer gives limited 
> possibilities.
> 
> Having said that, looking at the implementation for wxSizer classes it should
> be possible to implement the necessary 'glue' reasonably easily by following
> the existing code for wxEvtHandler classes. But this is one of those cases
> where the coding seems relatively straightforward but the test plan would need
> quite a bit of effort ( for me at least) and I'm unsure that the effort
> required gives any real benefit?
> 
> I don't know if your example represents the sum of what you wish to do, but if
> the only reason for requiring a Kephra::App::Sizer class is to affect the
> constructor, then
> 
> use strict;
> use warnings;
> use Kephra::API;
> use Wx;
> 
> package Kephra::App::SizerFactory;
> 
> sub CreateBoxSizer {
>     my $orient = shift;
> 
>     if    (lc substr($orient, 0, 1) eq 'v') { $orient =&Wx::wxVERTICAL }
>      elsif (lc substr($orient, 0, 1) eq 'h') { $orient =&Wx::wxHORIZONTAL }
>      #elsif (not defined $orient)             { $orient =&Wx::wxHORIZONTAL }
>      else {
>          return Kephra::Log::error
>              ("need h|horizontal or v|vertical as first parameter, not
> $orient", 1)
>      }
>      my $sizer = Wx::BoxSizer->new( $orient );
>      $sizer->append(@_);
>      return $sizer;
> }
> 
> 
> 
> On 03/08/2012 00:03, herbert breunung wrote:
>> hai comerads,
>>
>> thats pretty my message.
>> i could not came up with an examplewhere i inherit from Boxsizer but with an
>> own extended class.
>>
>> whats wrong with:
>>
>> use strict;
>> use warnings;
>> use Kephra::API;
>> use Wx;
>>
>> package Kephra::App::Sizer;
>> our @ISA = 'Wx::BoxSizer';
>>
>>
>> sub new {
>>     my $class = shift;
>>     my $orient = shift;
>>
>>     if    (lc substr($orient, 0, 1) eq 'v') { $orient =&Wx::wxVERTICAL }
>>     elsif (lc substr($orient, 0, 1) eq 'h') { $orient =&Wx::wxHORIZONTAL }
>>     #elsif (not defined $orient)             { $orient =&Wx::wxHORIZONTAL }
>>     else {
>>         return Kephra::Log::error
>>             ("need h|horizontal or v|vertical as first parameter, not
>> $orient", 1)
>>     }
>>     my $self = $class->SUPER::new( $orient );
>> print $self,"-----------------------\n" if $self->isa('Wx::Sizer');
>>     $self->append(@_);
>>     $self;
>> }
>>
>> print say its a Boxsizer not Kephra::App::Sizer
>> thanks for any advise
>>
>> PS the books is slowly starting to pace up
>> best
>> herbert
> 
> 

Reply via email to