From 1f77638b8046b68514ec67cab0f2743bdcc51b60 Mon Sep 17 00:00:00 2001
From: Lewin Probst <info@emirror.de>
Date: Wed, 4 Dec 2019 12:11:18 +0100
Subject: [PATCH] Updated main window, no receives the required callbacks as
 parameter.

---
 lib/+artoa/+controller/+edit/+offsets/open.m  |  2 +-
 lib/+artoa/+controller/+edit/+pressure/open.m |  2 +-
 .../+controller/+edit/+temperature/open.m     |  2 +-
 .../+controller/+edit/+timeOfArrival/open.m   |  2 +-
 lib/+artoa/+controller/+file/loadArtoaIni.m   |  2 +-
 lib/+artoa/+controller/+file/loadInterim.m    |  2 +-
 lib/+artoa/+controller/+file/loadRfb.m        |  2 +-
 .../+controller/+file/loadSoundSourceFile.m   |  2 +-
 lib/+artoa/+controller/+file/saveInterim.m    |  2 +-
 .../+controller/+track/+parameter/open.m      |  2 +-
 .../+track/+trajectoryOutput/open.m           |  2 +-
 lib/+artoa/+controller/initializeArtoa4.m     | 22 ++++++-
 lib/+artoa/+controller/quit.m                 |  2 +-
 .../+controller/switchHideDeletedPoints.m     |  2 +-
 lib/+artoa/+gui/main.m                        | 61 +++++++++++++------
 15 files changed, 77 insertions(+), 32 deletions(-)

diff --git a/lib/+artoa/+controller/+edit/+offsets/open.m b/lib/+artoa/+controller/+edit/+offsets/open.m
index 7d84639..cd75d60 100644
--- a/lib/+artoa/+controller/+edit/+offsets/open.m
+++ b/lib/+artoa/+controller/+edit/+offsets/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPEN Initializes the offset details gui.
 %   Detailed explanation goes here
 
diff --git a/lib/+artoa/+controller/+edit/+pressure/open.m b/lib/+artoa/+controller/+edit/+pressure/open.m
index 1975833..d221771 100644
--- a/lib/+artoa/+controller/+edit/+pressure/open.m
+++ b/lib/+artoa/+controller/+edit/+pressure/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPENEDITTEMPERATURE Initializes the pressure editing gui.
 %   Detailed explanation goes here
 
diff --git a/lib/+artoa/+controller/+edit/+temperature/open.m b/lib/+artoa/+controller/+edit/+temperature/open.m
index d3fcf4b..8e7210f 100644
--- a/lib/+artoa/+controller/+edit/+temperature/open.m
+++ b/lib/+artoa/+controller/+edit/+temperature/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPENEDITTEMPERATURE Initializes the temperature editing gui.
 %   Detailed explanation goes here
 
diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/open.m b/lib/+artoa/+controller/+edit/+timeOfArrival/open.m
index 24db049..d9a4408 100644
--- a/lib/+artoa/+controller/+edit/+timeOfArrival/open.m
+++ b/lib/+artoa/+controller/+edit/+timeOfArrival/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPEN Initializes the time of arrival editing gui.
 
 global artoaGui artoaWorkspace;
diff --git a/lib/+artoa/+controller/+file/loadArtoaIni.m b/lib/+artoa/+controller/+file/loadArtoaIni.m
index 3e147f4..9d5ade9 100644
--- a/lib/+artoa/+controller/+file/loadArtoaIni.m
+++ b/lib/+artoa/+controller/+file/loadArtoaIni.m
@@ -1,4 +1,4 @@
-function [] = loadArtoaIni()
+function [] = loadArtoaIni(~, ~)
 %RELOADARTOAINI Loads the artoa.ini file and copies the required values to workspace.
 %   
 
diff --git a/lib/+artoa/+controller/+file/loadInterim.m b/lib/+artoa/+controller/+file/loadInterim.m
index 5418e7c..80ae926 100644
--- a/lib/+artoa/+controller/+file/loadInterim.m
+++ b/lib/+artoa/+controller/+file/loadInterim.m
@@ -1,4 +1,4 @@
-function [] = loadInterim()
+function [] = loadInterim(~, ~)
 %LOADINTERIM Loads the current state of ARTOA4 from the file specified by dialog.
 %   
 
diff --git a/lib/+artoa/+controller/+file/loadRfb.m b/lib/+artoa/+controller/+file/loadRfb.m
index 776370e..119ebd6 100644
--- a/lib/+artoa/+controller/+file/loadRfb.m
+++ b/lib/+artoa/+controller/+file/loadRfb.m
@@ -1,4 +1,4 @@
-function [] = loadRfb()
+function [] = loadRfb(~, ~)
 %LOADRFB Creates a file selection dialog and reads the file into memory.
 
 global artoaDataInput;
diff --git a/lib/+artoa/+controller/+file/loadSoundSourceFile.m b/lib/+artoa/+controller/+file/loadSoundSourceFile.m
index ce3bad6..609898a 100644
--- a/lib/+artoa/+controller/+file/loadSoundSourceFile.m
+++ b/lib/+artoa/+controller/+file/loadSoundSourceFile.m
@@ -1,4 +1,4 @@
-function [] = loadSoundSourceFile()
+function [] = loadSoundSourceFile(~, ~)
 %LOADSOUNDSOURCEFILE Creates a file selection dialog and reads the file into memory.
 
 global artoaGui artoaDataInput;
diff --git a/lib/+artoa/+controller/+file/saveInterim.m b/lib/+artoa/+controller/+file/saveInterim.m
index 54d81e8..f3d1f39 100644
--- a/lib/+artoa/+controller/+file/saveInterim.m
+++ b/lib/+artoa/+controller/+file/saveInterim.m
@@ -1,4 +1,4 @@
-function [] = saveInterim()
+function [] = saveInterim(~, ~)
 %SAVEINTERIM Saves the current state of ARTOA4 to the file specified by dialog.
 %   
 
diff --git a/lib/+artoa/+controller/+track/+parameter/open.m b/lib/+artoa/+controller/+track/+parameter/open.m
index 9f19e7a..4544263 100644
--- a/lib/+artoa/+controller/+track/+parameter/open.m
+++ b/lib/+artoa/+controller/+track/+parameter/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPEN Initializes the tracking parameter gui.
 %   
 
diff --git a/lib/+artoa/+controller/+track/+trajectoryOutput/open.m b/lib/+artoa/+controller/+track/+trajectoryOutput/open.m
index bd746c8..8ab1567 100644
--- a/lib/+artoa/+controller/+track/+trajectoryOutput/open.m
+++ b/lib/+artoa/+controller/+track/+trajectoryOutput/open.m
@@ -1,4 +1,4 @@
-function [] = open()
+function [] = open(~, ~)
 %OPEN Initializes the trajectory output gui.
 %   
 
diff --git a/lib/+artoa/+controller/initializeArtoa4.m b/lib/+artoa/+controller/initializeArtoa4.m
index d54591f..c07dbc6 100644
--- a/lib/+artoa/+controller/initializeArtoa4.m
+++ b/lib/+artoa/+controller/initializeArtoa4.m
@@ -54,9 +54,27 @@ catch ex
     error([mfilename ': Reading soundsource file failed with the following message: ' ex.message]);
 end
 
-%% Start artoa4
+%% Prepare callbacks for main gui
+callbacks = struct();
+callbacks.CloseRequestFcn = @artoa.controller.quit;
+callbacks.quit = @artoa.controller.quit;
+callbacks.WindowButtonDownFcn = @artoa.controller.main.windowButtonDownFcn;
+callbacks.loadRfb = @artoa.controller.file.loadRfb;
+callbacks.loadInterim = @artoa.controller.file.loadInterim;
+callbacks.loadSoundsourceFile = @artoa.controller.file.loadSoundSourceFile;
+callbacks.saveRic = @artoa.controller.saveRic;
+callbacks.saveInterim = @artoa.controller.file.saveInterim;
+callbacks.loadArtoaIni = @artoa.controller.file.loadArtoaIni;
+callbacks.openEditTemperature = @artoa.controller.edit.temperature.open;
+callbacks.openEditPressure = @artoa.controller.edit.pressure.open;
+callbacks.openEditTimeOfArrival = @artoa.controller.edit.timeOfArrival.open;
+callbacks.openEditOffsets = @artoa.controller.edit.offsets.open;
+callbacks.openTrackParameter = @artoa.controller.track.parameter.open;
+callbacks.openTrackTrajectoryOutput = @artoa.controller.track.trajectoryOutput.open;
+callbacks.switchHideDeletedDataPoints = @artoa.controller.switchHideDeletedPoints;
 
-artoa.gui.main();
+%% Start artoa4
+artoa.gui.main(callbacks);
 
 %% Update the settings defined by ini
 if artoa.data.getMember(artoaDataInput.ini, {'view', 'hidedeleteddatapoints'}, false)
diff --git a/lib/+artoa/+controller/quit.m b/lib/+artoa/+controller/quit.m
index 0be0b00..46b160a 100644
--- a/lib/+artoa/+controller/quit.m
+++ b/lib/+artoa/+controller/quit.m
@@ -1,4 +1,4 @@
-function [] = quit()
+function [] = quit(~, ~)
 %QUIT Closes all windows, cleans up workspace and quits ARTOA4.
 
 global artoaGui;
diff --git a/lib/+artoa/+controller/switchHideDeletedPoints.m b/lib/+artoa/+controller/switchHideDeletedPoints.m
index 63ff1b5..a9d5b7c 100644
--- a/lib/+artoa/+controller/switchHideDeletedPoints.m
+++ b/lib/+artoa/+controller/switchHideDeletedPoints.m
@@ -1,4 +1,4 @@
-function [] = switchHideDeletedPoints()
+function [] = switchHideDeletedPoints(~, ~)
 %SWITCHVIEWSHOWALL Switches wether all data points are shown or not.
 %   Switches the menu checkbox and updates the workspace accordingly.
 
diff --git a/lib/+artoa/+gui/main.m b/lib/+artoa/+gui/main.m
index 8502250..86566f9 100644
--- a/lib/+artoa/+gui/main.m
+++ b/lib/+artoa/+gui/main.m
@@ -1,8 +1,35 @@
-function [ ] = main()
+function [ ] = main(pCallbacks)
 %MAIN Contains the definition of main ARTOA4 gui.
 
 global artoaGui;
 
+%% Initialize callbacks
+
+availableCallbacks = { ...
+    'CloseRequestFcn', ...
+    'WindowButtonDownFcn', ...
+    'loadRfb', ...
+    'loadInterim', ...
+    'loadSoundsourceFile', ...
+    'saveRic', ...
+    'saveInterim', ...
+    'loadArtoaIni', ...
+    'quit', ...
+    'openEditTemperature', ...
+    'openEditPressure', ...
+    'openEditTimeOfArrival', ...
+    'openEditOffsets', ...
+    'openTrackParameter', ...
+    'openTrackTrajectoryOutput', ...
+    'switchHideDeletedDataPoints' ...
+};
+
+for i = 1:length(availableCallbacks) % check if a callback is undefined
+    if ~isfield(pCallbacks, availableCallbacks{i})
+        pCallbacks.(availableCallbacks{i}) = @(~, ~) false;
+    end
+end
+
 %% Initialize main window
 
 artoaGui.figures.main = figure( ...
@@ -13,7 +40,7 @@ artoaGui.figures.main = figure( ...
     'WindowKeyPressFcn', @artoa.controller.main.shortcuts ...
 );
 
-set(artoaGui.figures.main, 'CloseRequestFcn', 'artoa.controller.quit();');
+set(artoaGui.figures.main, 'CloseRequestFcn', pCallbacks.CloseRequestFcn);
 
 %% Initialize file menu
 artoaGui.main.menus = struct();
@@ -29,17 +56,17 @@ uimenu( ...
 uimenu( ...
     loadHandle, ...
     'Label', 'RFB file', ...
-    'Callback', 'artoa.controller.file.loadRfb();' ...
+    'Callback', pCallbacks.loadRfb ...
 );
 uimenu( ...
     loadHandle, ...
     'Label', 'Interim file', ...
-    'Callback', 'artoa.controller.file.loadInterim();' ...
+    'Callback', pCallbacks.loadInterim ...
 );
 uimenu( ...
     loadHandle, ...
     'Label', 'SoSo file', ...
-    'Callback', 'artoa.controller.file.loadSoundSourceFile();' ...
+    'Callback', pCallbacks.loadSoundsourceFile ...
 );
 
 
@@ -53,27 +80,27 @@ artoaGui.main.menus.fileSave = uimenu( ...
 uimenu( ...
     artoaGui.main.menus.fileSave, ...
     'Label', 'RIC file', ...
-    'Callback', 'artoa.controller.saveRic();', ...
+    'Callback', pCallbacks.saveRic, ...
     'Enable', 'off' ...
 );
 
 uimenu( ...
     artoaGui.main.menus.fileSave, ...
     'Label', 'Interim file', ...
-    'Callback', 'artoa.controller.file.saveInterim();' ...
+    'Callback', pCallbacks.saveInterim ...
 );
 
 artoaGui.main.menus.fileReloadArtoaIni = uimenu( ...
     artoaGui.main.menus.file, ...
     'Label', 'Reload artoa.ini', ...
-    'Callback', 'artoa.controller.file.loadArtoaIni();' ...
+    'Callback', pCallbacks.loadArtoaIni ...
 );
 
 % QUIT
 artoaGui.main.menus.fileQuit = uimenu( ...
     artoaGui.main.menus.file, ...
     'Label', 'Quit', ...
-    'Callback', 'artoa.controller.quit();' ...
+    'Callback', pCallbacks.quit ...
 );
 
 %% Initialize edit menu
@@ -88,21 +115,21 @@ artoaGui.main.menus.edit = uimenu( ...
 artoaGui.main.menus.editTemperature = uimenu( ...
     artoaGui.main.menus.edit, ...
     'Label', 'Temperature', ...
-    'Callback', 'artoa.controller.edit.temperature.open();' ...
+    'Callback', pCallbacks.openEditTemperature ...
 );
 
 % PRESSURE
 artoaGui.main.menus.editPressure = uimenu( ...
     artoaGui.main.menus.edit, ...
     'Label', 'Pressure', ...
-    'Callback', 'artoa.controller.edit.pressure.open();' ...
+    'Callback', pCallbacks.openEditPressure ...
 );
 
 % TIME OF ARRIVAL
 artoaGui.main.menus.editTimeOfArrival = uimenu( ...
     artoaGui.main.menus.edit, ...
     'Label', 'Time of arrival', ...
-    'Callback', 'artoa.controller.edit.timeOfArrival.open();', ...
+    'Callback', pCallbacks.openEditTimeOfArrival, ...
     'Separator', 'on', ...
     'Enable', 'off' ...
 );
@@ -110,7 +137,7 @@ artoaGui.main.menus.editTimeOfArrival = uimenu( ...
 artoaGui.main.menus.editOffsetDetails = uimenu( ...
     artoaGui.main.menus.edit, ...
     'Label', 'Offset details', ...
-    'Callback', 'artoa.controller.edit.offsets.open();', ...
+    'Callback', pCallbacks.openEditOffsets, ...
     'Separator', 'on' ...
 );
 
@@ -126,14 +153,14 @@ artoaGui.main.menus.track = uimenu( ...
 artoaGui.main.menus.trackParameter = uimenu( ...
     artoaGui.main.menus.track, ...
     'Label', 'Track Parameter', ...
-    'Callback', 'artoa.controller.track.parameter.open();' ...
+    'Callback', pCallbacks.openTrackParameter ...
 );
 
 % TRAJECTORY OUTPUT
 artoaGui.main.menus.trajectoryOutput = uimenu( ...
     artoaGui.main.menus.track, ...
     'Label', 'Trajectory output', ...
-    'Callback', 'artoa.controller.track.trajectoryOutput.open();' ...
+    'Callback', pCallbacks.openTrackTrajectoryOutput ...
 );
 
 
@@ -148,7 +175,7 @@ artoaGui.main.menus.view = uimenu( ...
 artoaGui.main.menus.viewHideDeletedDataPoints = uimenu( ...
     artoaGui.main.menus.view, ...
     'Label', 'Hide deleted data points', ...
-    'Callback', 'artoa.controller.switchHideDeletedPoints();' ...
+    'Callback', pCallbacks.switchHideDeletedDataPoints ...
 );
 
 %% Initialize shortcut hints
@@ -179,7 +206,7 @@ gitInfo = getGitInfo();
 
 artoaGui.main.textVersionInfo = uicontrol( ...
     'Parent', artoaGui.figures.main, ...
-    'String', ['Version 4.' gitInfo.hash(1:8)], ...
+    'String', artoa.controller.main.getVersionString(), ...
     'Style', 'text', ...
     'FontSize', 10, ...
     'Units', 'normalized', ...
-- 
GitLab