Download this file

94 lines (69 with data), 2.9 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
classdef ( Hidden ) Node < dynamicprops
%uix.Node Node
%
% n = uix.Node(o) creates a node for the handle o.
%
% Node is a helper class for managing trees of objects and associated
% listeners.
% Copyright 2009-2015 The MathWorks, Inc.
% $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
properties( SetAccess = private )
Object % object
Children = uix.Node.empty( [0 1] ) % children
end
properties( Access = private )
ChildListeners = event.listener.empty( [0 1] ) % internal listeners
end
methods
function obj = Node( object )
%uix.Node Node
%
% n = uix.Node(o) creates a node for the handle o.
% Check
assert( isa( object, 'handle' ) && ...
isequal( size( object ), [1 1] ) && isvalid( object ), ...
'uix:InvalidArgument', 'Object must be a handle.' )
% Set properties
obj.Object = object;
end % constructor
end % structors
methods
function addChild( obj, child )
%addChild Add child
%
% n.addChild(c) adds the child node c to the parent node n.
% Check
assert( isa( child, 'uix.Node' ) && ...
isequal( size( child ), [1 1] ), ...
'uix:InvalidArgument', 'Invalid node.' )
% Add
childListener = event.listener( child, ...
'ObjectBeingDestroyed', @obj.onChildDeleted );
obj.Children(end+1,:) = child;
obj.ChildListeners(end+1,:) = childListener;
end % addChild
function removeChild( obj, child )
%removeChild Remove child
%
% n.removeChild(c) removes the child node c from the parent
% node n.
% Check
assert( isa( child, 'uix.Node' ) && ...
isequal( size( child ), [1 1] ), ...
'uix:InvalidArgument', 'Invalid node.' )
assert( ismember( child, obj.Children ), ...
'uix:ItemNotFound', 'Node not found.' )
% Remove
tf = child == obj.Children;
obj.Children(tf,:) = [];
obj.ChildListeners(tf,:) = [];
end % removeChild
end % public methods
methods( Access = private )
function onChildDeleted( obj, source, ~ )
%onChildDeleted Event handler for deletion of child nodes
% Remove
obj.removeChild( source )
end % onChildDeleted
end % event handlers
end % classdef