From 2e237900aaf38e8e3ccf402c5c4e0397057ed1e5 Mon Sep 17 00:00:00 2001
From: Johannes Pfeifer <jpfeifer@gmx.de>
Date: Mon, 8 Jan 2024 12:49:03 +0100
Subject: [PATCH] Tag Dynare figures and add utility for moving figures to
 uitabgroup

(cherry picked from commit 0187ebe0a22b502213f2742f8682da1113791a7a)
---
 license.txt                           |  5 ++++
 matlab/collapse_figures_in_tabgroup.m | 42 +++++++++++++++++++++++++++
 matlab/dyn_figure.m                   |  6 ++--
 3 files changed, 50 insertions(+), 3 deletions(-)
 create mode 100644 matlab/collapse_figures_in_tabgroup.m

diff --git a/license.txt b/license.txt
index 278cce8d45..c16b157650 100644
--- a/license.txt
+++ b/license.txt
@@ -123,6 +123,11 @@ Copyright: 2010-2015 Alexander Meyer-Gohde
            2015-2017 Dynare Team
 License: GPL-3+
 
+Files: matlab/collapse_figures_in_tabgroup.m
+Copyright: 2023 Eduard Benet Cerda
+           2024 Dynare Team
+License: GPL-3+
+
 Files: matlab/convergence_diagnostics/raftery_lewis.m
 Copyright: 2016 Benjamin Born and Johannes Pfeifer
            2016-2017 Dynare Team
diff --git a/matlab/collapse_figures_in_tabgroup.m b/matlab/collapse_figures_in_tabgroup.m
new file mode 100644
index 0000000000..bacb3d6903
--- /dev/null
+++ b/matlab/collapse_figures_in_tabgroup.m
@@ -0,0 +1,42 @@
+function collapse_figures_in_tabgroup
+
+% Copyright © 2023 Eduard Benet Cerda
+% Copyright © 2024 Dynare Team
+%
+% This file is part of Dynare.
+%
+% Dynare is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% Dynare is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Dynare.  If not, see <https://www.gnu.org/licenses/>.
+
+% Create a new figure with results
+fig = uifigure(Name = 'Dynare Results');
+
+% Add a grid layout to make sure it spans the entire width
+g = uigridlayout(fig, [1,1], Padding = 0);
+
+% Add a tabgroup
+tg = uitabgroup(g);
+
+% Find all figures with Dynare Tag 
+f = findobj('-regexp','tag','dynare-figure');
+
+% Loop over all figures and reparent them to a tab. Avoid legends, they are
+% automatically tied.
+for j = 1 : numel(f)
+    t = uitab(tg);
+    types = arrayfun(@class, f(j).Children, 'UniformOutput', false);
+    idx = ismember(types, 'matlab.graphics.illustration.Legend'); % no need to reparent legends
+    set(f(j).Children(~idx),'Parent',t)
+    t.Title = f(j).Name;
+    delete(f(j))
+end
\ No newline at end of file
diff --git a/matlab/dyn_figure.m b/matlab/dyn_figure.m
index 6de9474281..ccf678855a 100644
--- a/matlab/dyn_figure.m
+++ b/matlab/dyn_figure.m
@@ -12,7 +12,7 @@ function h = dyn_figure(nodisplay, varargin)
 % SPECIAL REQUIREMENTS
 %    none
 
-% Copyright © 2012-2017 Dynare Team
+% Copyright © 2012-2024 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -30,7 +30,7 @@ function h = dyn_figure(nodisplay, varargin)
 % along with Dynare.  If not, see <https://www.gnu.org/licenses/>.
 
 if nodisplay
-    h = figure(varargin{:},'visible','off');
+    h = figure(varargin{:},'visible','off','tag','dynare-figure');
 else
-    h = figure(varargin{:});
+    h = figure(varargin{:},'tag','dynare-figure');
 end
-- 
GitLab