Download this file

153 lines (112 with data), 4.7 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
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
classdef ( Hidden, Sealed ) PointerManager < handle
%uix.PointerManager Pointer manager
% Copyright 2016 The MathWorks, Inc.
% $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
properties( SetAccess = private )
Figure % figure
end
properties( Access = private )
Tokens % tokens
Pointers % pointers
NextToken % next token
PointerListener % listener
end
methods( Access = private )
function obj = PointerManager( figure )
%uix.PointerManager Create pointer manager
%
% m = uix.PointerManager(f) creates a pointer manager for the
% figure f.
obj.Figure = figure;
obj.Tokens = 0;
obj.Pointers = {figure.Pointer};
obj.NextToken = 1;
obj.PointerListener = event.proplistener( figure, ...
findprop( figure, 'Pointer' ), 'PostSet', ...
@obj.onPointerChanged );
end % constructor
end % structors
methods( Access = private )
function doSetPointer( obj, token, pointer )
%doSetPointer Set pointer
%
% m.doSetPointer(t,p) sets the pointer to p with the token t.
% Remove old entry
tf = obj.Tokens == token;
obj.Tokens(tf) = [];
obj.Pointers(tf) = [];
% Add new entry
obj.Tokens(end+1) = token;
obj.Pointers{end+1} = pointer;
% Set pointer
obj.PointerListener.Enabled = false;
obj.Figure.Pointer = pointer;
obj.PointerListener.Enabled = true;
end % doSetPointer
function doUnsetPointer( obj, token )
%doUnsetPointer Unset pointer
%
% m.doUnsetPointer(s) unsets the pointer with the token t.
% Remove old entry
tf = obj.Tokens == token;
obj.Tokens(tf) = [];
obj.Pointers(tf) = [];
% Update pointer
obj.PointerListener.Enabled = false;
obj.Figure.Pointer = obj.Pointers{end};
obj.PointerListener.Enabled = true;
end % doUnsetPointer
end % private methods
methods
function onPointerChanged( obj, ~, ~ )
%onPointerChanged Event handler
% Log as unknown setter
obj.doSetPointer( 0, obj.Figure.Pointer )
end % onPointerChanged
end % event handlers
methods( Static )
function token = setPointer( figure, pointer )
%setPointer Set pointer
%
% t = uix.PointerManager.setPointer(f,p) sets the pointer of
% the figure f to p. The returned token t can be used
% subsequently to unset the pointer.
% Get pointer manager
obj = uix.PointerManager.getInstance( figure );
% Retrieve token
token = obj.NextToken;
% Set
obj.doSetPointer( token, pointer )
% Increment token
obj.NextToken = token + 1;
end % setPointer
function unsetPointer( figure, token )
%unsetPointer Unset pointer
%
% uix.PointerManager.unsetPointer(f,t) unsets the pointer of
% the figure f using the token t.
% Check ID
validateattributes( token, {'numeric'}, {'scalar','integer','>',0} )
% Get pointer manager
obj = uix.PointerManager.getInstance( figure );
% Unset
obj.doUnsetPointer( token )
end % unsetPointer
function obj = getInstance( figure )
%getInstance Get pointer manager
%
% m = uix.PointerManager.getInstance(f) gets the pointer
% manager for the figure f.
% Get pointer manager
name = 'UIxPointerManager';
if isprop( figure, name ) % existing, retrieve
obj = figure.( name );
else % new, create and store
obj = uix.PointerManager( figure );
p = addprop( figure, name );
p.Hidden = true;
figure.( name ) = obj;
end
end % getInstance
end % static methods
end % classdef