Настройка отображения массивов объектов

Цель

Настройте отображение нескалярных объектов, включая пустые объектные массивы.

Проект пользовательского отображения

Примечание

Этот пример использует 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 - Вызывается, чтобы отобразить пустые объектные массивы

Переопределение displayNonScalarObject

MATLAB® вызывает displayNonScalarObject метод для отображения объектных массивов. Переопределение этого метода в EmployeeInfo класс:

  • Создает текст заголовка с помощью convertDimensionsToString для получения размера и getClassNameForHeader массива для получения имени класса со ссылкой на справку для этого класса.

  • Отображение измененного текста заголовка.

  • Циклы через элементы массива, построение двух различных подглавов в зависимости от состояния отдельного объекта. В цикле этот метод:

    • Обнаруживает указатели на удаленные объекты (используя isvalid класс Handle method). Использует 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

Переопределение displayEmptyObject

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

 Полный список классов

Похожие темы