MATLAB Answers

0

Customize display of an enumeration class

Asked by Sam Roberts on 11 Jul 2014
Latest activity Edited by Neha Talnikar on 23 Jul 2014
I'd like to customize the display of an enumeration class using matlab.mixin.CustomDisplay .
If I have a regular (non-enumeration) class such as the following:
classdef test < handle & matlab.mixin.CustomDisplay
properties
value
end
methods
function obj = test(value)
obj.value = value;
end
end
methods (Access = protected)
function displayScalarObject(obj)
disp(['hello ', num2str(obj.value)])
end
end
end
then everything works fine - for example,
>> a = test(1)
a =
hello 1
But if I have an enumeration class such as the following (note the addition of the enumeration block):
classdef test < handle & matlab.mixin.CustomDisplay
properties
value
end
methods
function obj = test(value)
obj.value = value;
end
end
methods (Access = protected)
function displayScalarObject(obj)
disp(['hello ', num2str(obj.value)])
end
end
enumeration
enum1(1)
end
end
then the display is not customized - for example,
>> a = test.enum1
a =
enum1
Using the debugger, I can see that my displayScalarObject method is never called. Implementing other methods of matlab.mixin.CustomDisplay such as displayNonScalarObject and so on doesn't seem to help - these never get called either.
What's going on? Do disp and display work differently for enumeration classes, in such a way that anything that's overridden by matlab.mixin.CustomDisplay just gets ignored?
Is there a way to get a customized display with matlab.mixin.CustomDisplay , but using an enumeration class?
PS I am able to directly overload disp and/or display on an enumeration class that does not inherit from matlab.mixin.CustomDisplay , and this works fine. But I'm looking to use matlab.mixin.CustomDisplay if possible.

  0 Comments

Sign in to comment.

1 Answer

Answer by Neha Talnikar on 23 Jul 2014
Edited by Neha Talnikar on 23 Jul 2014
 Accepted Answer

I tried your code and run into the same issue. It seems that this cannot be done.
However, you can override the “disp” and/or “display” in an enumeration class and implement the required code in it.

  0 Comments

Sign in to comment.