Changeset 2200


Ignore:
Timestamp:
12/26/08 01:42:02 (3 years ago)
Author:
szabgab
Message:

better error handling in the various cases of plugin problems. put the call to the plugin methods in eval{} so they wont take down the whole application

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Padre/lib/Padre/Plugin.pm

    r2184 r2200  
    345345        my $label = shift @$items; 
    346346        my $value = shift @$items; 
    347         if ( ref $value eq 'ARRAY' ) { 
     347        if (not defined $value) { 
     348            if ($label =~ /^---/) { 
     349                $menu->AppendSeparator; 
     350            } else { 
     351                Carp::cluck("Undefined value for label '$label'"); 
     352            } 
     353        } elsif (not ref $value) { 
     354            Carp::cluck("Not reference '$value'"); 
     355        } elsif ( ref $value eq 'ARRAY' ) { 
    348356            my $submenu = $self->_menu_plugins_submenu( $win, $value ); 
    349357            $menu->Append( -1, $label, $submenu ); 
    350         } else { 
    351             if($label =~ /^---/) { 
    352                 $menu->AppendSeparator; 
    353             } else { 
    354                 Wx::Event::EVT_MENU( $win, $menu->Append( -1, $label), $value ); 
    355             } 
     358        } elsif (ref $value eq 'CODE') { 
     359            Wx::Event::EVT_MENU( $win, $menu->Append( -1, $label), sub { eval { $value->(@_) }; Carp::cluck($@) if $@; } ); 
     360        } else { 
     361            Carp::cluck("Cannot deal with '$value' for label '$label'"); 
    356362        } 
    357363    } 
Note: See TracChangeset for help on using the changeset viewer.