* Bugs 16120 16121 16128 fixed: tree_show() with cells & void + improved
[scilab.git] / scilab / modules / data_structures / macros / tree_show.sci
1 //  Scicos
2 //
3 //  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
4 //  Copyright (C) 2019 - Samuel GOUGEON
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 //
20 // See the file ../license.txt
21
22 function tree_show(x, titleRoot, styles, arrayByFields)
23     // x : list, cells or structs array, tlist, mlist, Xcos block
24     // titleRoot: single string: label of the tree root, for instance
25     //     the name of x in the calling environment
26     // styles: single string = HTML 4 tag styling either the address of
27     //   each data (fields names, lists indices..), or their content, or both.
28     //   In the string, "$" is replaced with the address.
29     //   Example: "<b>$</b>"  where $ will be replaced with the address.
30     // arrayByFields: single boolean (when x is an array of structs).
31     //   %T => For each field: the array of its values is displayed.
32     //   %F => For each array component, all its fields are displayed.
33
34     // CHECKING INPUT ARGUMENTS
35     // ------------------------
36     if argn(2) < 1 then
37         msg = _("%s: Wrong number of input argument(s): %d to %d expected.\n")
38         error(sprintf(msg, "tree_show", 1, 4));
39     end
40
41     if and(type(x)<>[15 16 17 128]) then
42         msg = _("%s: Argument #%d: Container or Xcos object expected.\n")
43         error(msprintf(msg, "tree_show", 1))
44     end
45
46     if ~isdef("titleRoot","l") then
47         titleRoot = ""
48     end
49
50     if ~isdef("arrayByFields","l") then
51         arrayByFields = %f
52     elseif type(arrayByFields) <> 4
53         msg = _("%s: Argument #%d: Boolean(s) expected.\n")
54         error(msprintf(msg, "tree_show", 3))
55     else
56         arrayByFields = arrayByFields(1)
57     end
58
59     if ~isdef("styles","l") then
60         styles = "<font color=""blue"">$</font>"
61     elseif type(styles) <> 10
62         msg = _("%s: Argument #%d: Text(s) expected.\n")
63         error(msprintf(msg, "tree_show", 4))
64     else
65         styles = styles(1)
66     end
67
68     // BUILDING THE TREE
69     // -----------------
70     tree = list2tree(x, titleRoot, styles, arrayByFields)
71
72     // Displaying it:
73     uiDisplayTree(tree);
74 endfunction