-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathpspm_overwrite.m
111 lines (109 loc) · 3.22 KB
/
pspm_overwrite.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
function varargout = pspm_overwrite(varargin)
% ● Description
% pspm_overwrite generalises the overwriting operation
% pspm_overwrite considers the following situations
% - whether options.overwrite is defined
% - whether PsPM is in develop mode
% - whether the file exist
% - whether GUI can be used
% PsPM will always try to overwrite files wherever possible except:
% 1. if overwrite is defined as not to overwrite
% 2. if overwrite is not defined
% a. the file has existed
% b. users use the GUI to stop overwriting
% ● Arguments
% fn: the name of the file to possibly overwrite
% can be a link if necessary
% overwrite: a numerical value or a struct
% option of overwrite if this option is presented
% can be a value or a struct
% if a value, can be 0 (not to overwrite) or 1 (to overwrite)
% if a struct, check if the field `overwrite` exist
% ● Outputs
% overwrite_final option of overwriting determined by pspm_overwrite
% 0: not to overwrite
% 1: to overwrite
% ● History
% Introduced in PsPM 6.0
% Written in 2022 by Teddy Chao (UCL)
%% Initialise
global settings
if isempty(settings)
pspm_init;
end
sts = -1;
overwrite_final = 0;
switch nargout
case 1
varargout{1} = overwrite_final;
case 2
varargout{1} = sts;
varargout{2} = overwrite_final;
end
%% Define overwrite
switch numel(varargin)
case 0
warning('ID:invalid_input', 'at least one argument is required');
return;
case 1 % overwrite is not defined
fn = varargin{1};
if iscell(fn)
fn = fn{1};
end
if settings.developmode
overwrite_final = 1; % In develop mode, always overwrite
else
if ~exist(fn, 'file')
% if file does not exist, always overwrite
overwrite_final = 1;
else
if feature('ShoverwriteFigureWindoverwrites') % if in gui
msg = ['Model file already exists. Overwrite?', ...
newline, 'Existing file: ', fn];
overwrite = questdlg(msg, ...
'File already exists', 'Yes', 'No', 'Yes');
% default as Yes (to overwrite)
overwrite_final = strcmp(overwrite, 'Yes');
else
overwrite_final = 1; % if GUI is not available, always overwrite
end
end
end
case 2
fn = varargin{1};
if iscell(fn)
fn = fn{1};
end
overwrite = varargin{2};
switch class(overwrite)
case 'double'
overwrite_final = overwrite;
case 'struct'
overwrite_struct = overwrite;
if isfield(overwrite_struct, 'overwrite')
overwrite_final = overwrite_struct.overwrite;
else
if ~exist(fn, 'file')
% if file does not exist, always **overwrite**
overwrite_final = 1;
else
overwrite_final = 0;
end
end
end
end
%% Validate overwrite_final
if overwrite_final ~= 0 && overwrite_final ~= 1
warning('ID:invalid_input', 'overwrite can be only 0 or 1');
return
end
switch nargout
case 1
varargout{1} = overwrite_final;
case 2
varargout{1} = sts;
varargout{2} = overwrite_final;
otherwise
varargout{1} = overwrite_final;
end
return