1 2use File::Basename ; 3 4#---------------------------------------------------------------------------------------------- 5 6register_action_handlers 7 ( 8 'Open' => ['C00-o', \&open], 9 'Save' => ['C00-s', \&save, undef], 10 'SaveAs' => ['C0S-S', \&save, 'as'], 11 'Insert' => ['C00-i', \&insert], 12 ) ; 13 14#---------------------------------------------------------------------------------------------- 15 16sub save 17{ 18my ($self, $as, $type, $file_name) = @_ ; 19 20unless(defined $file_name) 21 { 22 if((! defined $as) && $self->get_title()) 23 { 24 $file_name = $self->get_title() ; 25 } 26 else 27 { 28 $file_name = $self->get_file_name('save') ; 29 30 if(defined $file_name && $file_name ne q[]) 31 { 32 if(-e $file_name) 33 { 34 my $override = $self->display_yes_no_cancel_dialog 35 ( 36 "Override file!", 37 "File '$file_name' exists!\nOverride file?" 38 ) ; 39 40 $file_name = undef unless $override eq 'yes' ; 41 } 42 } 43 } 44 } 45 46if(defined $file_name && $file_name ne q[]) 47 { 48 my ($base_name, $path, $extension) = File::Basename::fileparse($file_name, ('\..*')) ; 49 $extension =~ s/^\.// ; 50 51 $type = defined $type ? $type 52 : $extension ne q{} 53 ? $extension 54 : 'asciio_internal_format' ; 55 56 my $elements_to_save = Clone::clone($self->{ELEMENTS}) ; 57 58 for my $element (@{$elements_to_save}) 59 { 60 delete $element->{NAME} ; 61 } 62 63 my $new_title ; 64 eval 65 { 66 $new_title = $self->save_with_type($elements_to_save, $type, $file_name) ; 67 } ; 68 69 if($@) 70 { 71 $self->display_message_modal("Can't save file '$file_name':\n$@\n") ; 72 $file_name = undef ; 73 } 74 else 75 { 76 if(defined $new_title) 77 { 78 $self->set_title($new_title) ; 79 $self->set_modified_state(0) ; 80 } 81 } 82 } 83 84return $file_name ; 85} ; 86 87 88#---------------------------------------------------------------------------------------------- 89 90sub open 91{ 92my ($self, $file_name) = @_ ; 93 94my $user_answer = '' ; 95 96if($self->get_modified_state()) 97 { 98 $user_answer = $self->display_yes_no_cancel_dialog('asciio', 'Diagram modified. Save it?') ; 99 100 if($user_answer eq 'yes') 101 { 102 my $file_name = $self->get_file_name('save') ; 103 104 my ($base_name, $path, $extension) = File::Basename::fileparse($file_name, ('\..*')) ; 105 $extension =~ s/^\.// ; 106 107 my $type = $extension ne q{} 108 ? $extension 109 : 'asciio_internal_format' ; 110 111 $self->save_with_type(undef, $type, $file_name) if(defined $file_name && $file_name ne q[]) ; 112 } 113 } 114 115if($user_answer ne 'cancel') 116 { 117 $file_name ||= $self->get_file_name('open') ; 118 119 if(defined $file_name && $file_name ne q[]) 120 { 121 my $title = $self->load_file($file_name) ; 122 123 my ($base_name, $path, $extension) = File::Basename::fileparse($file_name, ('\..*')) ; 124 $extension =~ s/^\.// ; 125 126 my $type = $extension ne q{} 127 ? $extension 128 : 'asciio_internal_format' ; 129 130 $self->set_title($title) if defined $title; 131 $self->set_modified_state(0) ; 132 } 133 } 134} ; 135 136#---------------------------------------------------------------------------------------------- 137 138sub insert 139{ 140my ($self, $x, $y, $file_name) = @_ ; 141 142$file_name ||= $self->get_file_name('open') ; 143 144if(defined $file_name && $file_name ne q[]) 145 { 146 my $asciio = new App::Asciio() ; 147 148 use Module::Util qw(find_installed) ; 149 use File::Basename ; 150 my ($basename, $path, $ext) = File::Basename::fileparse(find_installed('App::Asciio'), ('\..*')) ; 151 my $setup_path = $path . $basename . '/setup/' ; 152 153 $asciio->setup([$setup_path . 'setup.ini', ] ) ; 154 155 $asciio->load_file($file_name) ; 156 $asciio->run_actions_by_name('Select all elements', 'Copy to clipboard') ; 157 158 use Clone ; 159 $self->{CLIPBOARD} = Clone::clone($asciio->{CLIPBOARD}) ; 160 161 $self->run_actions_by_name(['Insert from clipboard', $x, $y]) ; 162 } 163} ; 164 165