Changeset 10611

Show
Ignore:
Timestamp:
02/08/10 00:07:56 (7 months ago)
Author:
azawawi
Message:

Refactored OpenInFileBrowserAction? to support "Open with default System Editor" feature on KDE/GNOME unix platforms

Location:
trunk/Padre/lib/Padre
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/Padre/lib/Padre/Action/File.pm

    r10604 r10611  
    133133                comment    => Wx::gettext('Opens the file with the default system editor'), 
    134134                menu_event => sub { 
    135                         $_[0]->on_open_with_default_system_editor; 
     135                        my $document = $_[0]->current->document or return; 
     136                        $_[0]->on_open_with_default_system_editor( $document->filename ); 
    136137                }, 
    137138        ); 
  • trunk/Padre/lib/Padre/Wx/Directory/OpenInFileBrowserAction.pm

    r10610 r10611  
    6464        } 
    6565 
    66         my $error = undef; 
     66        my $error; 
    6767        if (Padre::Constant::WIN32) { 
    6868 
     
    7272        } elsif (Padre::Constant::UNIX) { 
    7373                my $parent_folder = File::Basename::dirname($filename); 
    74                 if ( defined $ENV{KDE_FULL_SESSION} ) { 
    75  
    76                         # In KDE, execute: kfmclient exec $filename 
    77                         $error = $self->_execute( 'kfmclient', "exec", $parent_folder ); 
    78                 } elsif ( defined $ENV{GNOME_DESKTOP_SESSION_ID} ) { 
    79  
    80                         # In Gnome, execute: nautilus --nodesktop --browser $filename 
    81                         $error = $self->_execute( 'nautilus', "--no-desktop", "--browser", $parent_folder ); 
    82                 } else { 
    83                         $error = "Could not find KDE or GNOME"; 
    84                 } 
     74                $error = $self->_execute_unix($parent_folder); 
    8575        } else { 
    8676 
    87                 #Unsupported Operating system. 
    88                 $error = "Unsupported operating system: '$^O'"; 
     77                # Unsupported 
     78                $error = sprintf(Wx::gettext("Unsupported OS: %s"), '$^O'); 
    8979        } 
    9080 
    91         if ( defined $error ) { 
    92                 Wx::MessageBox( $error, Wx::gettext("Error"), Wx::wxOK, $main, ); 
     81        if ( $error ) { 
     82                $main->error( $error ); 
    9383        } 
    9484 
    9585        return; 
     86} 
     87 
     88# 
     89# Open with default system editor 
     90# 
     91sub open_with_default_system_editor { 
     92        my ($self, $filename) = @_; 
     93 
     94        my $main = Padre::Current->main; 
     95        unless( $filename ) { 
     96                $main->error( Wx::gettext("No filename") ); 
     97                return; 
     98        } 
     99         
     100        my $error; 
     101        if(Padre::Constant::WIN32) { 
     102                # Win32 
     103                require Padre::Util::Win32; 
     104                Padre::Util::Win32::ExecuteProcessAndWait( 
     105                        directory  => $self->{cwd}, 
     106                        file       => $filename, 
     107                        parameters => '', 
     108                        show       => 1); 
     109        } elsif(Padre::Constant::UNIX) { 
     110                # Unix 
     111                $error = $self->_execute_in_file_mananger($filename); 
     112        } else { 
     113                # Unsupported 
     114                $error = sprintf(Wx::gettext("Unsupported OS: %s"), '$^O'); 
     115        } 
     116         
     117        if ( $error ) { 
     118                $main->error( $error ); 
     119        } 
     120 
     121        return;  
     122} 
     123 
     124# 
     125# Try to execute a file in KDE or GNOME 
     126# 
     127sub _execute_unix { 
     128        die "Only to be called in UNIX!" unless Padre::Constant::UNIX; 
     129 
     130        my ($self, $filename) = @_; 
     131         
     132        my $error; 
     133        if ( defined $ENV{KDE_FULL_SESSION} ) { 
     134 
     135                # In KDE, execute: kfmclient exec $filename 
     136                $error = $self->_execute( 'kfmclient', "exec", $filename ); 
     137        } elsif ( defined $ENV{GNOME_DESKTOP_SESSION_ID} ) { 
     138 
     139                # In Gnome, execute: nautilus --nodesktop --browser $filename 
     140                $error = $self->_execute( 'nautilus', "--no-desktop", "--browser", $filename ); 
     141        } else { 
     142                $error = Wx::gettext("Could not find KDE or GNOME"); 
     143        } 
     144 
     145        return $error; 
    96146} 
    97147 
     
    102152=head1 NAME 
    103153 
    104 Padre::Wx::Directory::OpenInFileBrowserAction - Ecliptic's Open in file browser action 
     154Padre::Wx::Directory::OpenInFileBrowserAction - Open in file browser action 
    105155 
    106156=head1 DESCRIPTION 
    107157 
    108 =head2 Open in File Browser (Shortcut: C<Ctrl+6>) 
     158=head2 Open in File Browser 
    109159 
    110160For the current saved Padre document, open the platform's file manager/browser and 
  • trunk/Padre/lib/Padre/Wx/Main.pm

    r10606 r10611  
    36673667=head3 C<on_open_with_default_system_editor> 
    36683668 
    3669     $main->on_open_with_default_system_editor; 
    3670  
    3671 Opens the current document in the default system editor 
     3669    $main->on_open_with_default_system_editor($filename); 
     3670 
     3671Opens C<$filename> in the default system editor 
    36723672 
    36733673=cut 
    36743674 
    36753675sub on_open_with_default_system_editor { 
    3676         my $self = shift; 
    3677         my $document = $self->current->document or return; 
    3678         my $filename = $document->filename; 
    3679  
    3680         unless( $filename ) { 
    3681                 $self->error( Wx::gettext("No filename") ); 
    3682                 return; 
    3683         } 
    3684  
    3685         if(Padre::Constant::WIN32) { 
    3686                 # Win32 
    3687                 require Padre::Util::Win32; 
    3688                 Padre::Util::Win32::ExecuteProcessAndWait( 
    3689                         directory  => $self->{cwd}, 
    3690                         file       => $document->filename, 
    3691                         parameters => '', 
    3692                         show       => 1); 
    3693         } else { 
    3694                 #TODO please implement for other platforms 
    3695                 $self->error(Wx::gettext("Not implemented!")); 
    3696         } 
     3676        my ( $self, $filename ) = @_; 
     3677 
     3678        require Padre::Wx::Directory::OpenInFileBrowserAction; 
     3679        Padre::Wx::Directory::OpenInFileBrowserAction->new->open_with_default_system_editor($filename); 
    36973680} 
    36983681