* Bug 6973 fixed: missing stable demo figure
[scilab.git] / scilab / modules / demo_tools / macros / demo_gui_update.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008 - INRIA - Pierre MARECHAL
4 // Copyright (C) 2012 - DIGITEO - Vincent COUVERT
5 // Copyright (C) 2014 - Scilab Enterprises - Anais AUBERT
6 // Copyright (C) 2018 - Samuel GOUGEON
7 //
8 // Copyright (C) 2012 - 2016 - Scilab Enterprises
9 //
10 // This file is hereby licensed under the terms of the GNU GPL v2.0,
11 // pursuant to article 5.3.4 of the CeCILL v.2.1.
12 // This file was originally licensed under the terms of the CeCILL v2.1,
13 // and continues to be available under such terms.
14 // For more information, see the COPYING file which you should have received
15 // along with this program.
16 //
17
18 function script_path = demo_gui_update()
19     global subdemolist;
20
21     // Deleting All existing demo figures, except the first one (it may be
22     // docked in order to view demos figures in a stable way:
23     // http://bugzilla.scilab.org/6973
24     all_figs = winsid();
25     all_figs = all_figs(all_figs >= 100001); // All Scilab graphic windows opened for demos
26     for fig_index = 2:size(all_figs, "*")
27         fig_to_del = get_figure_handle(all_figs(fig_index));
28         if ~isempty(fig_to_del) then
29             delete(fig_to_del);
30         end
31     end
32
33     // Handle of the main demos GUI
34     demo_fig = get("scilab_demo_fig");
35
36     // Frame sur laquelle on a cliqué
37     my_selframe_num = msscanf(gcbo.tag, "listbox_%d");
38
39     // Récupération de la liste des démos
40     my_index = gcbo.value;
41     if my_index == [] then
42         script_path = [];
43         return;
44     end
45
46     my_data = gcbo.user_data;
47
48     script_path = my_data(my_index(1,1),2);
49     if grep(script_path,"dem.gateway.sce") == 1 then
50         // On est dans le cas ou une nouvelle frame va être affichée
51
52         // Mise à jour du nombre de frame
53         demo_fig.userdata.frame_number = my_selframe_num+1;
54         resize_demo_gui(demo_fig.userdata.frame_number);
55         previous_demolist = demo_fig.userdata.subdemolist;
56
57         mode(-1);
58         exec(script_path,-1); // This script erases subdemolist variable if needed
59
60         // Create a temporary variable for userdata
61         // because mixing handles and structs can lead to problems
62         ud = demo_fig.userdata;
63         ud.subdemolist = subdemolist;
64         demo_fig.userdata = ud;
65         clearglobal subdemolist
66
67         frame = get("frame_" + string(my_selframe_num+1));
68
69         b = frame.border;
70         b.title = my_data(my_index(1,1),1)
71         frame.border = b;
72
73         listbox = get("listbox_" + string(my_selframe_num+1));
74         listbox.string = demo_fig.userdata.subdemolist(:, 1);
75
76         listbox.userdata = demo_fig.userdata.subdemolist;
77
78         //Prints an arrow if its a submenu
79         a = grep(listbox.userdata(:,2),"dem.gateway.sce")
80         if listbox.string(a) <> [] then
81             listbox.string(a) = "<html>"+listbox.string(a)+" &#x2023; </html>";
82         end
83         ud = demo_fig.userdata;
84         ud.subdemolist = previous_demolist;
85         demo_fig.userdata = ud;
86     else
87         // Mise à jour du nombre de frame
88         demo_fig.userdata.frame_number = my_selframe_num;
89         resize_demo_gui(demo_fig.userdata.frame_number);
90     end
91 endfunction