Ключ "ribbon"

Секция «ribbon» - описание структуры динамических лент интерфейса.

Процесс создания ленточного интерфейса состоит из следующих действий:

  1. Создание вкладок внутри ключа модели проекта rbproj
  2. Создание подгрупп элементов интерфейса на вкладках
  3. Добавление элементов интерфейса в подгруппы

Создание вкладок

Объекты вкладок добавляются в массив items ключа модели проекта rbproj.
Каждая вкладка состоит из следующих параметров:

Параметр Описание
«group» Строковый идентификатор вкладки
«title» Заголовок вкладки отображаемый на экране
«flags» (необязательный) Флаги отображения. Допускаемые значения: «0» - показывать, «1» - скрыть.
По умолчанию установлено значение «1»
Для более подробного рассмотрения функционала ленточного интерфейса, в приведённых ниже примерах присутствуют секции action и variables.
Подробнее о ключе «action» читайте в разделе справочника Ключ "action"
Подробнее о ключе «variables» читайте в разделе справочника Ключ "variables"

Добавим две новые вкладки. Вкладка my_custom_tab_rail будет отображаться на экране только тогда, когда активной будет модель железной дороги. Для этого в параметр flags передадим значение переменной rail, определяющей тип текущей модели на соответствие типу модели железной дороги.
Вкладка my_custom_tab_common будет отображаться на экране всегда.

...
"rbproj": {
  "items": [
    // Вкладка отображаемая только тогда, когда активна модель железной дороги
    {
      "group": "my_custom_tab_rail",
      "title": "Моя вкладка для ЖД",
      "flags": "$(rail)"
    },
    // Вкладка отображаемая всегда
    {
      "group": "my_custom_tab_common",
      "title": "Моя вкладка общая"
    }
  ]
}
...

Создание подгрупп элементов интерфейса на вкладках

Объекты подгрупп вкладываются в массив items ключа вкладки. Ключом вкладки является комбинация ключа модели проекта rbproj и идентификатора вкладки.
Каждая подгруппа состоит из следующих параметров:

Параметр Описание
«group» Строковый идентификатор подгруппы
«title» Заголовок подгруппы отображаемый на экране

Добавим две подгруппы на вкладку rbproj.my_custom_tab_common

...
"rbproj.my_custom_tab_common": {
  "items":[        
    {
      "group": "my_custom_subgroup_1",
      "title": "Моя подгруппа 1"
    },
    {
      "group": "my_custom_subgroup_2",
      "title": "Моя подгруппа 2"
    }
  ]
}
...

Добавление элементов интерфейса в подгруппы

Объекты элементов интерфейса вкладываются в массив items ключа подгруппы. Ключом подгруппы является комбинация ключа модели проекта rbproj, идентификатора вкладки и идентификатора подгруппы.
В качестве элементов интерфейса могут использоваться объекты со следующими параметрами:

Кнопка
«button» Строковый идентификатор action'a
«size» Размер кнопки. Допускаемые значения:
«large» - большая
«middle» - маленькая с подписью
«small» - маленькая
«items» (необязательный) Массив вложенных элементов. Если массив не пустой, то кнопка работает как раскрывающийся список элементов. В то же время кнопка запоминает последний выбранный элемент. В массив допускается вкладывать строковые идентификаторы action'ов.
Раскрывающийся список элементов
«title» Заголовок списка отображаемый на экране
«icon» Имя файла пиктограммы без расширения
«size» Размер списка. Допускаемые значения:
«large» - большая
«middle» - маленькая с подписью
«small» - маленькая
«items» Массив вложенных элементов. В массив допускается вкладывать строковые идентификаторы action'ов.
Action в качестве кнопки
Для использования action'а, достаточно в качестве объекта указать его строковый идентификатор

Добавим различные элементы интерфейса в подгруппы rbproj.my_custom_tab_common.my_custom_subgroup_1 и rbproj.my_custom_tab_common.my_custom_subgroup_2.

...
"rbproj.my_custom_tab_common.my_custom_subgroup_1":{
  "items":[
    // Раскрывающийся список элементов
    {
      "title": "Мои сгруппированые элементы",
      "icon": "my_icon0",
      "size": "large",
      "items": [
        "my_action_id_1",
        "my_action_id_2"
      ]
    }
  ]
},
"rbproj.my_custom_tab_common.my_custom_subgroup_2":{
  "items":[
    // Кнопка с вложенными элементами
    {
      "button": "my_action_id_3",
      "size": "large",
      "items": [
        "my_action_id_4"
      ]
    },
    // Обычная кнопка маленькая кнопка с текстовым описанием
    {
      "button": "my_action_id_5",
      "size": "middle"
    },
    // Идентификатор action'а, который превратится в кнопку
    "my_action_id_5"
  ]
}
...

Пример plugin-файла

Plugin-файлы читаются по алфавитному порядку. От порядка чтения будет зависеть расположение вкладок относительно друг друга. Ниже приведён пример plugin-файла, который сформирует следующий вид пользовательской ленты:

my_ribbon.plugin
{
  "actions":{    
    "my_action_id_1": {
      "cmd": "my_command_1",
      "title": "Пользовательская команда 1",
      "description": "Вызов пользовательской комманды 1",
      "icon": "my_icon1"
    },
    "my_action_id_2": {
      "cmd": "my_command_2",
      "title": "Пользовательская команда 2",
      "description": "Вызов пользовательской комманды 2",
      "icon": "my_icon2"
    },
    "my_action_id_3": {
      "cmd": "my_command_3",
      "title": "Пользовательская команда 3",
      "description": "Вызов пользовательской комманды 3",
      "icon": "my_icon3"
    },
    "my_action_id_4": {
      "cmd": "my_command_4",
      "title": "Пользовательская команда 4",
      "description": "Вызов пользовательской комманды 4",
      "icon": "my_icon4"
    },
    "my_action_id_5": {
      "cmd": "my_command_5",
      "title": "Пользовательская команда 5",
      "description": "Вызов пользовательской комманды 5",
      "icon": "my_icon5"
    }
  },
 
 
  "variables": {
    "readonly_alg_flag": "$(if,$(viewer),1,$(if,$(hasactivelayer,{C39120BC-F870-41bd-8711-79AD50BE3799},0,plan),0,1))",
    // Проверка типа текущей активной модели на соответствие типу модели железной дороги
    "rail": "$(if,$(configuration,rail),$(if,$(readonly_alg_flag),1,$(if,$(strncasecmp,$(get_active_model_type),rail),0,1)),1)"
  },
 
 
  "ribbon": {
    "rbproj": {
      "items": [
        // Вкладка отображаемая только тогда, когда активна модель железной дороги
        {
          "group": "my_custom_tab_rail",
          "title": "Моя вкладка для ЖД",
          "flags": "$(rail)"
        },
        // Вкладка отображаемая всегда
        {
          "group": "my_custom_tab_common",
          "title": "Моя вкладка общая"
        }
      ]
    },
    "rbproj.my_custom_tab_common": {
      "items":[        
        {
          "group": "my_custom_subgroup_1",
          "title": "Моя подгруппа 1"
        },
        {
          "group": "my_custom_subgroup_2",
          "title": "Моя подгруппа 2"
        }
      ]
    },
    "rbproj.my_custom_tab_common.my_custom_subgroup_1":{
      "items":[
        // Раскрывающийся список элементов
        {
          "title": "Мои сгруппированые элементы",
          "icon": "my_icon0",
          "size": "large",
          "items": [
            "my_action_id_1",
            "my_action_id_2"
          ]
        }
      ]
    },
    "rbproj.my_custom_tab_common.my_custom_subgroup_2":{
      "items":[
        // Кнопка с вложенными элементами
        {
          "button": "my_action_id_3",
          "size": "large",
          "items": [
            "my_action_id_4"
          ]
        },
        // Обычная кнопка маленькая кнопка с текстовым описанием
        {
          "button": "my_action_id_5",
          "size": "middle"
        },
        // Идентификатор action'а, который превратится в кнопку
        "my_action_id_5"
      ]
    }
  }
}
developers/references/core.plugin/ribbon.txt · Последние изменения: 2023/01/25 10:39 — proxor