Changeset 9563

Show
Ignore:
Timestamp:
12/08/09 19:49:20 (9 months ago)
Author:
adamk
Message:

Added the "File Intuition" feature (it's a fairly terrible name and looks weird where it is in the File menu, but we can fix that later).

Also removed a bunch of $DB::single = 1 usages.

Location:
trunk/Padre
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • trunk/Padre/Changes

    r9542 r9563  
    1010    - Alt-Left and Alt-Right switch to the neighbor panels which Ctrl-Tab 
    1111      uses the last-used order (SEWI) 
     12    - Added "Save Intution" to the File menu, to automatically save a new 
     13      file wherever Padre is confident it is appropriate (ADAMK) 
    1214 
    13150.51 2009.12.06 
  • trunk/Padre/lib/Padre/Document.pm

    r9469 r9563  
    11781178        my $self = shift; 
    11791179 
    1180         # IF the file already has an existing name, guess that 
    1181         my $filename = $self->filename; 
    1182  
    1183         $DB::single = 1; 
    1184  
    1185         1; 
     1180        # For an unknown document type, we cannot make any reasonable guess 
     1181        return (); 
    11861182} 
    11871183 
  • trunk/Padre/lib/Padre/Wx/Dialog/Find.pm

    r9469 r9563  
    328328                $self->Hide; 
    329329        } elsif ( not $Result ) { 
    330                 $DB::single = 1; 
    331330                $main->error( 
    332331                        Wx::gettext('No matches found'), 
  • trunk/Padre/lib/Padre/Wx/Dialog/PluginManager.pm

    r9469 r9563  
    360360# 
    361361sub _refresh_list { 
    362         $DB::single = $DB::single = 1; 
    363362        my $self = shift; 
    364363 
  • trunk/Padre/lib/Padre/Wx/Directory.pm

    r9512 r9563  
    164164# Moves the panel to the other side 
    165165sub move { 
    166         $DB::single = 1; 
    167166        my $self   = shift; 
    168167        my $config = $self->main->config; 
  • trunk/Padre/lib/Padre/Wx/Main.pm

    r9554 r9563  
    32923292=pod 
    32933293 
     3294=head3 C<on_save> 
     3295 
     3296    my $success = $main->on_save; 
     3297 
     3298Try to save current document. Prompt user for a file name if document was 
     3299new (see C<on_save_as()> above). Return true if document has been saved, 
     3300false otherwise. 
     3301 
     3302=cut 
     3303 
     3304sub on_save { 
     3305        my $self = shift; 
     3306        my $document = shift || $self->current->document; 
     3307        return unless $document; 
     3308 
     3309        #print $document->filename, "\n"; 
     3310 
     3311        my $pageid = $self->find_id_of_editor( $document->editor ); 
     3312        if ( $document->is_new ) { 
     3313 
     3314                # move focus to document to be saved 
     3315                $self->on_nth_pane($pageid); 
     3316                return $self->on_save_as; 
     3317        } elsif ( $document->is_modified ) { 
     3318                return $self->_save_buffer($pageid); 
     3319        } 
     3320 
     3321        return; 
     3322} 
     3323 
     3324=pod 
     3325 
    32943326=head3 C<on_save_as> 
    32953327 
     
    34003432=pod 
    34013433 
    3402 =head3 C<on_save> 
    3403  
    3404     my $success = $main->on_save; 
    3405  
    3406 Try to save current document. Prompt user for a file name if document was 
    3407 new (see C<on_save_as()> above). Return true if document has been saved, 
    3408 false otherwise. 
    3409  
    3410 =cut 
    3411  
    3412 sub on_save { 
    3413         my $self = shift; 
    3414         my $document = shift || $self->current->document; 
    3415         return unless $document; 
    3416  
    3417         #print $document->filename, "\n"; 
    3418  
    3419         my $pageid = $self->find_id_of_editor( $document->editor ); 
    3420         if ( $document->is_new ) { 
    3421  
    3422                 # move focus to document to be saved 
    3423                 $self->on_nth_pane($pageid); 
    3424                 return $self->on_save_as; 
    3425         } elsif ( $document->is_modified ) { 
    3426                 return $self->_save_buffer($pageid); 
    3427         } 
    3428  
    3429         return; 
     3434=head3 C<on_save_intuition> 
     3435 
     3436    my $success = $main->on_save_intuition; 
     3437 
     3438Try to automatically determine an appropriate file name and save it, 
     3439based entirely on the content of the file. 
     3440 
     3441Only do this for new documents, otherwise behave like a regular save. 
     3442 
     3443=cut 
     3444 
     3445sub on_save_intuition { 
     3446        my $self     = shift; 
     3447        my $document = $self->current->document or return; 
     3448 
     3449        # We only use Save Intuition for new files 
     3450        unless ( $document->is_new ) { 
     3451                if ( $document->is_saved ) { 
     3452                        # Nothing to do 
     3453                        return; 
     3454                } else { 
     3455                        # Regular save 
     3456                        return $self->on_save(@_); 
     3457                } 
     3458        } 
     3459 
     3460        # Empty files get done via the normal save 
     3461        if ( $document->is_unused ) { 
     3462                return $self->on_save_as(@_); 
     3463        } 
     3464 
     3465        # We need both a guessed path and file name to do anything 
     3466        my @subpath  = $document->guess_subpath; 
     3467        my $filename = $document->guess_filename; 
     3468        unless ( @subpath and defined Params::Util::_STRING($filename) ) { 
     3469                # Cannot come up with a suitable guess 
     3470                return $self->on_save_as(@_); 
     3471        } 
     3472 
     3473        # Convert the guesses to full paths 
     3474        my $dir  = File::Spec->catdir(  $document->project_dir, @subpath ); 
     3475        my $path = File::Spec->catfile( $dir, $filename ); 
     3476        if ( -f $path ) { 
     3477                # Potential collision, error and fall back 
     3478                $self->error(Wx::gettext('File already exists')); 
     3479                return $self->on_save_as(@_); 
     3480        } 
     3481 
     3482        # Create the directory, if needed 
     3483        unless ( -d $dir ) { 
     3484                my $error = [ ]; 
     3485                File::Path::make_path( $dir, { 
     3486                        verbose => 0, 
     3487                        error   => \$error, 
     3488                } ); 
     3489                if ( @$error ) { 
     3490                        $self->error(Wx::gettext("Failed to create path '$dir'")); 
     3491                        return $self->on_save_as(@_); 
     3492                } 
     3493        } 
     3494 
     3495        # Save the file 
     3496        $document->_set_filename($path); 
     3497        $document->save_file; 
     3498        $document->set_newline_type(Padre::Constant::NEWLINE); 
     3499 
     3500        # Laborious copy of the above. 
     3501        # Generalise it later 
     3502        my $pageid = $self->notebook->GetSelection; 
     3503        $self->_save_buffer($pageid); 
     3504 
     3505        $document->set_mimetype( $document->guess_mimetype ); 
     3506        $document->editor->padre_setup; 
     3507        $document->rebless; 
     3508        $document->colourize; 
     3509 
     3510        $filename = $document->{file}->filename if defined( $document->{file} ); 
     3511        if ( defined($filename) ) { 
     3512                Padre::DB::History->create( 
     3513                        type => 'files', 
     3514                        name => $filename, 
     3515                ); 
     3516                $self->menu->file->update_recentfiles; 
     3517        } 
     3518 
     3519        $self->refresh; 
     3520 
     3521        return 1; 
    34303522} 
    34313523 
  • trunk/Padre/lib/Padre/Wx/Menu/File.pm

    r9469 r9563  
    257257                menu_event  => sub { 
    258258                        $_[0]->on_save_as; 
     259                }, 
     260        ); 
     261 
     262        $self->{save_as} = $self->add_menu_item( 
     263                $self, 
     264                name        => 'file.save_intuition', 
     265                id          => -1, 
     266                need_editor => 1, 
     267                label       => Wx::gettext('Save Intuition'), 
     268                shortcut    => 'Ctrl-Shift-S', 
     269                menu_event  => sub { 
     270                        $_[0]->on_save_intuition; 
    259271                }, 
    260272        );