Как добавить "учебное сообщение div" к рисункам?

После установки R2018b первая открытая фигура содержала интересное сообщение (показано синим цветом):

Статическое изображение

Это интересно потому, что он содержит такие функции, как перенос текста, прозрачность, тот факт, что изображение сохраняет постоянную ширину, даже если размер текста изменяется (это напомнило мне о CSS3 flexbox, отсюда и тэг) и т. Д.

Анимация

Последняя часть анимации находится в замедленном режиме, чтобы лучше показать, как размер элемента div соответствует размеру фигуры.

В случае, если это имеет значение, я использую Win 10 v1803.

Вопрос:

Я хотел бы знать, как мы можем нарисовать похожие, нестандартные, div-ы (из-за отсутствия лучшего слова) в наших цифрах. (Важно подчеркнуть, что это не UIFigure!)


Что я нашел до сих пор:

  • Ссылка " Узнать больше" открывает страницу:

    web(fullfile(docroot, 'matlab/creating_plots/interactively-explore-plotted-data.html'))
    

    все же точки останова в точках входа либо web или же docroot (или даже doc) не попали.

  • Предполагая, что этот элемент является Child фигуры, я попытался найти указатель на нее:

    >> set(gcf,'MenuBar','none'); findall(gcf)
    
    ans = 
      22×1 graphics array:
    
      Figure                (1)
      ContextMenu
      AnnotationPane
      Axes
      AxesToolbar
      Text
      Text
      Text
      ToolbarStateButton    (Brush/Select Data)
      ToolbarStateButton    (Data Tips)
      ToolbarStateButton    (Rotate 3-D)
      ToolbarStateButton    (Pan)
      ToolbarStateButton    (Zoom In)
      ToolbarStateButton    (Zoom Out)
      ToolbarPushButton     (Restore View)
      Button
      Button
      Button
      Button
      Button
      Button
      Button
    

    однако, делая эти элементы управления невидимыми, используя set(h(2:end), 'Visible', false) не заставил div исчезнуть.

  • Сохранение фигуры как .fig или создание кода для него, не оставляет следов этого div.

  • когда uiinspect На рисунке, этот div не отображается (или, по крайней мере, я не смог его найти).

  • Я не знаю, что именно я сделал, чтобы он снова появился, но так как он должен появиться при первой загрузке R2018b, я подозреваю, что удаление prefdir (очевидно, после резервного копирования) и перезапуск MATLAB может вернуть его обратно.

  • Единственное, что я еще не пробовал, это подключить Java-отладчик к MATLAB и попытаться отследить вызывающего com.mathworks.mlservices.MLHelpServices.setCurrentLocation (от mlservices.jar), который открывает справку браузера.

1 ответ

Решение

После некоторых копаний в сторону Java вещей (начиная с findjobj а затем много .getComponent(0).getComponent(0)...), Мне наконец удалось найти рассматриваемый компонент. Вот что я узнал:

  1. Этот компонент называется InfoPanel и является частью Java API MATLAB. Само определение класса находится в:

    MATLAB/R2018b/java/jar/hg.jar!/com/mathworks/hg/util/InfoPanel.class
    
  2. Чтобы он появился, нам нужно позвонить static метод addBannerPanel Проходя в ручке фигуры:

    com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)) );
    

    Или другая подпись, которая также принимает пользовательскую панель:

    jIP = com.mathworks.hg.util.InfoPanel;
    jIP.setBackground(java.awt.Color(0.8, 0.7, 0.1));
    com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)), jIP );
    
  3. Параметр MATLAB, который определяет, должно ли это отображаться, showinteractioninfobar внутри <prefdir>/matlab.settings XML.

  4. Похоже, что "интересные части" InfoPanel являются частными, что означает, что он допускает практически любую настройку (в основном, некоторые цвета; не строка или значок), но должно быть довольно легко сделать копию этого класса и предоставить все необходимые нам элементы.

Другие вопросы по тегам