From 4a85ce570ff10c9e6b5bf8a714c60a2847d5049a Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan@dynare.org>
Date: Fri, 12 Apr 2019 11:05:21 +0200
Subject: [PATCH] fix menus

---
 src/+gui_tools/menu_options.m | 30 +++++++++++++++++++++++-------
 src/gui_estimation.m          |  1 -
 src/gui_load_mod_file.m       |  2 --
 src/gui_observed_vars.m       |  1 +
 src/gui_open_project.m        | 10 ++--------
 src/gui_set_menus.m           | 11 ++++++++++-
 src/gui_stoch_simulation.m    |  5 ++---
 7 files changed, 38 insertions(+), 22 deletions(-)

diff --git a/src/+gui_tools/menu_options.m b/src/+gui_tools/menu_options.m
index b26b282..f76c216 100644
--- a/src/+gui_tools/menu_options.m
+++ b/src/+gui_tools/menu_options.m
@@ -29,7 +29,7 @@ function menu_options(oid, status)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global M_ oo_
+global M_ oo_ project_info
 
 handles = guihandles(getappdata(0,'main_figure'));
 
@@ -70,14 +70,30 @@ switch oid
         handles.sensitivity_analysis.Enable = status;
 
     case 'output'
-        handles.output_shocks_dec.Enable = status;
-        handles.output_shocks_decomposition.Enable = status;
-        handles.output_realtime_shocks_decomposition.Enable = status;
-        if (isfield(oo_, 'dr') && isfield(oo_.dr, 'ghu')) || isfield(oo_, 'SmoothedShocks')
+        if strcmpi(status, 'off')
+            handles.output_shocks_dec.Enable = status;
+            handles.output_shocks_decomposition.Enable = status;
+            handles.output_realtime_shocks_decomposition.Enable = status;
             handles.output_conditional_forecast.Enable = status;
-        end
-        if isfield(M_, 'histval_dseries') || isfield(oo_, 'SmoothedVariables')
             handles.output_forecast.Enable = status;
+        else
+            if project_info.estimation_run
+                handles.output_shocks_dec.Enable = status;
+                handles.output_shocks_decomposition.Enable = status;
+                handles.output_realtime_shocks_decomposition.Enable = status;
+                if (isfield(oo_, 'dr') && isfield(oo_.dr, 'ghu')) || isfield(oo_, 'SmoothedShocks')
+                    handles.output_conditional_forecast.Enable = status;
+                end
+                if isfield(M_, 'histval_dseries') || isfield(oo_, 'SmoothedVariables')
+                    handles.output_forecast.Enable = status;
+                end
+            end
+            if project_info.stochastic_simulation_run && project_info.observed_variables_set
+                handles.output_shocks_dec.Enable = status;
+                handles.output_shocks_decomposition.Enable = status;
+                handles.output_realtime_shocks_decomposition.Enable = status;
+                handles.output_conditional_forecast.Enable = status;
+            end
         end
 
     otherwise
diff --git a/src/gui_estimation.m b/src/gui_estimation.m
index b80fff5..0a48131 100644
--- a/src/gui_estimation.m
+++ b/src/gui_estimation.m
@@ -376,7 +376,6 @@ handles.pushbuttonCommandDefinition = uicontrol( ...
             jObj.stop;
             jObj.setBusyText('All done!');
 
-            gui_tools.menu_options('output','On');
             handles.pushbuttonResults.Enable = 'on';
             project_info.modified = true;
             project_info.estimation_run = true;
diff --git a/src/gui_load_mod_file.m b/src/gui_load_mod_file.m
index 126ce98..02fc8f4 100644
--- a/src/gui_load_mod_file.m
+++ b/src/gui_load_mod_file.m
@@ -204,9 +204,7 @@ end
             gui_create_model_settings();
 
             %enable menu options
-            gui_tools.menu_options('model', 'On');
             gui_set_menus(true);
-
             gui_tools.project_log_entry('Running .mod/.dyn file', ['mod_file=' project_info.mod_file]);
         catch ME
             %restore globals
diff --git a/src/gui_observed_vars.m b/src/gui_observed_vars.m
index a3039a0..881ca0b 100644
--- a/src/gui_observed_vars.m
+++ b/src/gui_observed_vars.m
@@ -106,6 +106,7 @@ uicontrol(tabId, 'Style','pushbutton','String','Close this tab','Units','normali
                     options_.varobs = varobs(:, 1);
                 end
                 project_info.observed_variables_set = true;
+                gui_set_menus(true);
             end
         catch ME
             gui_tools.show_error('Error saving observed variables and data file information', ME, 'extended');
diff --git a/src/gui_open_project.m b/src/gui_open_project.m
index 7f75bc9..3090a39 100644
--- a/src/gui_open_project.m
+++ b/src/gui_open_project.m
@@ -28,7 +28,7 @@ function gui_open_project(hObject)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global project_info model_settings
+global project_info
 
 [fileName, pathName] = uigetfile('*.dproj', 'Select Dynare GUI project file:');
 if fileName == 0
@@ -65,14 +65,8 @@ try
         cd(project_info.project_folder);
 
         %enable menu options
-        gui_tools.menu_options('project','On');
+        gui_set_menus(true);
 
-        if ~isempty(project_info) && isfield(project_info, 'model_name')
-            gui_tools.menu_options('model','On');
-            if ~isempty(model_settings) && ~isempty(fieldnames(model_settings))
-                gui_set_menus(true);
-            end
-        end
         project_info.modified = false;
         gui_tools.project_log_entry('Project Open', ...
             ['project_name=' project_info.project_name '; project_folder=' project_info.project_folder]);
diff --git a/src/gui_set_menus.m b/src/gui_set_menus.m
index b180be0..4fd9b4b 100644
--- a/src/gui_set_menus.m
+++ b/src/gui_set_menus.m
@@ -28,9 +28,17 @@ function gui_set_menus(enable)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global project_info
+global project_info model_settings
 
 if enable
+    gui_tools.menu_options('project', 'On');
+    if isempty(model_settings) || isempty(fieldnames(model_settings))
+        return
+    end
+    gui_tools.menu_options('model', 'On');
+    if isempty(project_info)
+        return
+    end
     if project_info.project_model_stochastic
         gui_tools.menu_options('estimation', 'On');
         gui_tools.menu_options('stochastic', 'On');
@@ -47,6 +55,7 @@ if enable
         gui_tools.menu_options('output', 'On');
     end
 else
+    gui_tools.menu_options('model', 'Off');
     gui_tools.menu_options('model_special','Off');
     gui_tools.menu_options('output','Off');
     gui_tools.menu_options('estimation','Off');
diff --git a/src/gui_stoch_simulation.m b/src/gui_stoch_simulation.m
index e12eedd..6779376 100644
--- a/src/gui_stoch_simulation.m
+++ b/src/gui_stoch_simulation.m
@@ -197,11 +197,10 @@ handles.pushbuttonCommandDefinition = uicontrol( ...
             end
             jObj.stop;
             jObj.setBusyText('Done');
-            %enable menu options
-            gui_tools.menu_options('output','On');
-            set(handles.pushbuttonResults, 'Enable', 'on');
+            handles.pushbuttonResults.Enable = 'on';
             project_info.modified = true;
             project_info.stochastic_simulation_run = true;
+            gui_set_menus(true);
         catch ME
             jObj.stop;
             jObj.setBusyText('Done with errors');
-- 
GitLab