Xcos MVC: allow passing mlists as Superblocks' subdiagrams
[scilab.git] / scilab / modules / xcos / macros / xcosPal.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) DIGITEO - 2010-2010 - Clément DAVID
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10 //
11 //
12
13 function pal = xcosPal(name, scs_m)
14     // Instanciate a new Xcos palette on Scilab.
15     //
16     // Calling Sequence
17     //   pal = xcosPal();
18     //   pal = xcosPal(name);
19     //   pal = xcosPal(scs_m);
20     //   pal = xcosPal([], scs_m);
21     //   pal = xcosPal(name, scs_m);
22     //
23     // Parameters
24     //   name: string; the optional palette name
25     //   scs_m: diagram mlist; the optional source diagram
26     //   pal: palette tlist; the palette instance
27     //
28     // Description
29     // Instanciate a new palette diagram.
30     //
31     // The optional name argument can be used to set a name to the palette. The optional scs_m argument can be used to import diagrams as palettes.
32     //
33     // Examples
34     //   loadXcosLibs();
35     //
36     //   // from scratch
37     //   pal = xcosPal("My sum palette");
38     //   pal = xcosPalAddBlock(pal, "SUM_f");
39     //   pal = xcosPalAddBlock(pal, "BIGSOM_f");
40     //   xcosPalAdd(pal);
41     //
42     //   // from an old palette
43     //   exec(SCI + "/modules/scicos/palettes/Integer.cosf", -1);
44     //   pal = xcosPal(scs_m);
45     //   xcosPalAdd(pal);
46     //
47     // See also
48     //   xcosPal
49     //   xcosPalAddBlock
50     //
51     // Authors
52     //   Clément DAVID
53
54
55     [lhs,rhs] = argn(0);
56
57     if rhs > 2 then
58         error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "xcosPal", 0, 2));
59     end
60
61     if exists("name", "l") == 0 then
62         name = "New palette";
63     elseif typeof(name) == "diagram" then
64         scs_m = name;
65         name = "New palette";
66     elseif isempty(name) then
67         name = "New palette";
68     end
69     // loading the scicos_diagram macro
70     if exists("scicos_diagram", "a") == 0 then loadXcosLibs(), end
71     if exists("scs_m", "l") == 0 then scs_m = scicos_diagram(), end
72
73     if typeof(name) <> "string" then
74         error(msprintf(gettext("%s: Wrong type for input argument ""%s"": string type expected.\n"), "xcosPal","name"));
75     end
76
77     if typeof(scs_m) <> "diagram" then
78         error(msprintf(gettext("%s: Wrong type for input argument ""%s"": diagram type expected.\n"), "xcosPal","scs_m"));
79     end
80
81     // default instance
82     pal = tlist(["palette", "name",  "blockNames", "icons", "style"],..
83     [],        [],      [],      []);
84
85     // find palette name
86     if length(scs_m.objs) > 0 then
87         name = scs_m.props.title(1);
88     end
89
90     // getting a block name list
91     varsToLoad = [];
92     for block = scs_m.objs
93         if typeof(block)=="Block" & block.gui == "PAL_f" then
94             // customize palette name
95             name = block.model.rpar.props.title(1);
96
97             // Add PAL_f children blocks
98             children = block.model.rpar.objs;
99             for jBlock = 1:size(children)
100                 varsToLoad($+1) = children(jBlock).gui;
101             end
102         elseif typeof(block)=="Block" then
103             // old scicos palettes doesn't have a PAL_f block but directly
104             // the reference instances instead.
105             varsToLoad($+1) = block.gui
106         end
107     end
108
109     // set name
110     pal.name = name;
111
112     // add block instance by interfunction (will generate a new reference instance).
113     for index = 1:size(varsToLoad, "*")
114         pal = xcosPalAddBlock(pal, varsToLoad(index));
115     end
116 endfunction
117