Skip to content

Commit d67f828

Browse files
committed
creating a GUI is hard
1 parent 5e35455 commit d67f828

13 files changed

+332
-220
lines changed

lib/utils/file_utils.m

Lines changed: 223 additions & 201 deletions
Large diffs are not rendered by default.

src/subfun/askUserCli.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
input(['\n' questions.questionsToAsk{iQuestion,1}], 's'); %#ok<*AGROW>
1313

1414
if questions.questionsToAsk{iQuestion,2}
15-
thisResponse = str2double(thisResponse);
1615
thisResponse = checkInput(thisResponse, questions);
1716
end
1817

@@ -26,7 +25,7 @@
2625

2726
function input2check = checkInput(input2check, questions)
2827
% this function checks the input to makes sure the user enters a positive integer
29-
28+
input2check = str2double(input2check);
3029
while ~isPositiveInteger(input2check)
3130
input2check = str2double(input(questions.mustBePositiveInteger, 's'));
3231
end

src/subfun/askUserGui.m

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
function responses = askUserGui(questions, responses)
2+
3+
% boolean for which question should be asked
4+
isQuestionToAsk = ~cellfun('isempty', questions.questionsToAsk(:,1));
5+
6+
responses = cellstr(string(responses(isQuestionToAsk)));
7+
8+
responses = askQuestionsGui(questions, responses, isQuestionToAsk);
9+
10+
% keep asking the question till we get a positive integer value for each
11+
for iQuestion = 1:size(questions.questionsToAsk)
12+
questions.questionsToAsk{iQuestion} = sprintf('%s %s\n %s',...
13+
'\color{red}', ...
14+
questions.questionsToAsk{iQuestion}, ...
15+
questions.mustBePositiveInteger);
16+
end
17+
18+
while 1
19+
isQuestionToAsk = getIsQuestionToAsk(questions, responses);
20+
if all(~isQuestionToAsk)
21+
break
22+
end
23+
responses = askQuestionsGui(questions, responses, isQuestionToAsk);
24+
end
25+
26+
end
27+
28+
function resp = askQuestionsGui(quest, resp, isQuestionToAsk)
29+
30+
opts.Interpreter = 'tex';
31+
32+
fieldDim = repmat([1 50], sum(isQuestionToAsk), 1);
33+
34+
currentResp = inputdlg(quest.questionsToAsk(isQuestionToAsk, 1),...
35+
'Subject info', ...
36+
fieldDim, ...
37+
resp(isQuestionToAsk), ...
38+
opts);
39+
40+
resp(isQuestionToAsk) = currentResp;
41+
42+
end
43+

src/subfun/createQuestionList.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
questions.group = 'Enter subject group (leave empty if none): ';
66
questions.subject = 'Enter subject number (1-999): ';
7-
questions.session = 'Enter the session (i.e day - 1-999)) number: ';
7+
questions.session = 'Enter the session number (i.e day ; 1-999): ';
88
questions.run = 'Enter the run number (1-999): ';
99
questions.mustBePositiveInteger = 'Please enter a positive integer: ';
1010
% questions.questionsToAsk is a cell array : second column is a boolean

src/subfun/getIsQuestionToAsk.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
function isQuestionToAsk = getIsQuestionToAsk(questions, responses)
2+
3+
isQuestionToAsk = cell2mat(questions.questionsToAsk(:,2));
4+
for j = 1:size(isQuestionToAsk, 1)
5+
input2check = str2double(responses{j});
6+
isQuestionToAsk(j,2) = ~isPositiveInteger(input2check);
7+
end
8+
isQuestionToAsk = all(isQuestionToAsk, 2);
9+
10+
end

src/subfun/isPositiveInteger.m

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
function trueOrFalse = isPositiveInteger(input2check)
2+
% trueOrFalse = isPositiveInteger(input2check)
3+
%
4+
% works on column vector of values
5+
%
26

3-
trueOrFalse = ~(...
4-
~isnumeric(input2check) || ...
5-
isnan(input2check) || ...
6-
fix(input2check) ~= input2check || ...
7-
input2check < 0);
7+
trueOrFalse = ~any( [ ...
8+
~isnumeric(input2check), ...
9+
isnan(input2check), ...
10+
fix(input2check) ~= input2check, ...
11+
input2check < 0 ...
12+
]);
813

914
end

src/subfun/setDefaultResponses.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
cfg = struct('debug', []);
55
end
66

7-
if isempty(cfg.debug)
7+
if ~isfield(cfg, 'debug') || isempty(cfg.debug)
88
cfg.debug.do = false;
99
end
1010

1111
responses{1,1} = ''; % subjectGrp
12-
responses{2,1} = []; % subjectNb
13-
responses{3,1} = 1; % runNb
14-
responses{4,1} = []; % sessionNb
12+
responses{2,1} = ''; % subjectNb
13+
responses{3,1} = 1; % session
14+
responses{4,1} = ''; % run
1515

1616
if cfg.debug.do
1717

src/userInputs.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020

2121
questions = createQuestionList(cfg);
2222

23-
responses = askUserCli(questions, responses);
23+
% try
24+
responses = askUserGui(questions, responses);
25+
% catch
26+
% responses = askUserCli(questions, responses);
27+
% end
2428

2529
end
2630

tests/test_createBoldJson.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ function test_createBoldJsonBasic()
3838
%% test
3939
assertTrue(exist(fullfile(funcDir, eventFilename), 'file') == 2);
4040

41-
end
41+
end

tests/test_createQuestionList.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ function test_createQuestionListBasic()
1616
expectedCell = { ...
1717
'Enter subject group (leave empty if none): ', false;
1818
'Enter subject number (1-999): ', true;
19-
'Enter the session (i.e day - 1-999)) number: ', true;
19+
'Enter the session number (i.e day ; 1-999): ', true;
2020
'Enter the run number (1-999): ', true};
2121

22-
assertEqual(expectedCell, questions.questionsToAsk)
22+
assertEqual(expectedCell(3,1), questions.questionsToAsk(3,1))
2323

2424
end

0 commit comments

Comments
 (0)