Настройка отображения нескалярных объектов, включая пустые массивы объектов.
Примечание
В этом примере используется EmployeeInfo класс, описанный в разделе «Класс с отображением объектов по умолчанию».
Целью этого настраиваемого дисплея является:
Создание пользовательского заголовка с использованием некоторых элементов заголовка по умолчанию
Отображение подмножества информации о свойствах для каждого объекта в массиве.
Список дескрипторов удаленных объектов в массиве с помощью char вектор со ссылками на документацию по объектам-дескрипторам и классу.
Отображение пустых объектов с незначительным изменением заголовка по умолчанию
Вот настраиваемый дисплей массива из трех EmployeeInfo объекты
1x3 EmployeeInfo array with members:
1. Employee:
Name: 'Bill Tork'
Department: 'Product Development'
2. Employee:
Name: 'Alice Blackwell'
Department: 'QE'
3. Employee:
Name: 'Nancy Green'
Department: 'Documentation'
Удаленные дескрипторы объектов в массиве указывают их состояние:
1x3 EmployeeInfo members: 1. Employee: Name: 'Bill Tork' Department: 'Product Development' 2. handle to deleted EmployeeInfo 3. Employee: Name: 'Nancy Green' Department: 'Documentation'
Для достижения желаемого результата EmployeeInfo переопределяет следующие методы matlab.mixin.CustomDisplay класс:
displayNonScalarObject - Вызывается для отображения массивов непустых объектов
displayEmptyObject - Вызывается для отображения пустых массивов объектов
MATLAB ® вызывает displayNonScalarObject способ отображения массивов объектов. Переопределение этого метода в EmployeeInfo класс:
Строит текст заголовка с помощью convertDimensionsToString для получения размера массива и getClassNameForHeader чтобы получить имя класса со ссылкой на справку для этого класса.
Отображение измененного текста заголовка.
Петля элементов в массиве, построение двух различных подзаголовков в зависимости от состояния отдельного объекта. В цикле этот метод:
Обнаруживает дескрипторы удаленных объектов (с помощью isvalid метод класса дескриптора). Использование getDeletedHandleText и getClassNameForHeader для построения текста для элементов массива, которые являются дескрипторами удаленных объектов.
Построение пользовательского подзаголовка для допустимых элементов объекта в массиве
Создает PropertyGroup объект, содержащий Name и Department свойства для действительных objects
Использует displayPropertyGroups статический метод для создания отображения свойств для допустимых объектов.
Вот реализация displayNonScalarObjects:
methods (Access = protected) function displayNonScalarObject(objAry) dimStr = matlab.mixin.CustomDisplay.convertDimensionsToString(objAry); cName = matlab.mixin.CustomDisplay.getClassNameForHeader(objAry); headerStr = [dimStr,' ',cName,' members:']; header = sprintf('%s\n',headerStr); disp(header) for ix = 1:length(objAry) o = objAry(ix); if ~isvalid(o) str1 = matlab.mixin.CustomDisplay.getDeletedHandleText; str2 = matlab.mixin.CustomDisplay.getClassNameForHeader(o); headerInv = [str1,' ',str2]; tmpStr = [num2str(ix),'. ',headerInv]; numStr = sprintf('%s\n',tmpStr); disp(numStr) else numStr = [num2str(ix),'. Employee:']; disp(numStr) propList = struct('Name',o.Name,... 'Department',o.Department); propgrp = matlab.mixin.util.PropertyGroup(propList); matlab.mixin.CustomDisplay.displayPropertyGroups(o,propgrp); end end end end
MATLAB вызывает displayEmptyObject для отображения пустых массивов объектов. Реализация этого метода в EmployeeInfo строит пользовательский заголовок для пустых объектов следующим образом:
Получение размеров массива в символьном формате с помощью convertDimensionsToString статический метод.
Получение текста с именем класса, связанным с helpPopup с помощью функции getClassNameForHeader статический метод.
Построение и отображение пользовательского текста для пустых массивов.
methods (Access = protected) function displayEmptyObject(obj) dimstr = matlab.mixin.CustomDisplay.convertDimensionsToString(obj); className = matlab.mixin.CustomDisplay.getClassNameForHeader(obj); emptyHeader = [dimstr,' ',className,' with no employee information']; header = sprintf('%s\n',emptyHeader); disp(header) end end
Например, пустой EmployeeInfo объекты отображаются следующим образом:
Empt = EmployeeInfo.empty(0,5)
Empt =
0x5 EmployeeInfo with no employee information