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