Пример рабочего меню:


{
  "rootname": "Links",
  "rooticon": 196,
  "items": 11,
  "item1": {
    "name": "Sales requests",
    "icon": 173,
    "type": "open-link",
    "data": "https://mycompany.com/kanban/#project=74"
  },
  "item2": {
    "type": "hr"
  },
  "item3": {
    "name": "iOS bugs",
    "icon": 173,
    "type": "open-link",
    "data": "https://mycompany.com/kanban/#project=48"
  },
  "item4": {
    "name": "Android bugs",
    "icon": 173,
    "type": "open-link",
    "data": "https://mycompany.com/kanban/#project=25"
  },
  "item5": {
    "name": "Kanban bugs",
    "icon": 173,
    "type": "open-link",
    "data": "https://mycompany.com/kanban/#project=3"
  },
  "item6": {
    "name": "Blue flag (server script)",
    "icon": 172,
    "type": "server-script",
    "data": "OpenPrivateSupport",
    "params": "%username% :)"
  },
  "item7": {
    "name": "Tree example"
  },
    "item8": {
      "parent": "item7",
      "name": "Red flag (action link)",
      "icon": 177,
      "type": "exec-action",
      "data": "about",
      "params": ""
    },
    "item9": {
      "parent": "item7",
      "name": "Pill icon (Open help topic)",
      "icon": 185,
      "type": "open-help",
      "data": "mychatclientwindows"
    },
  "item10": {
    "name": "Disabled item",
    "enable": false
  },
  "item11": {
    "name": "Open text file",
    "type": "open-link",
    "data": "F:\\Public\\docs\\инструкция для техников.txt"
  }
}


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

Обязательные элементы

Параметр

Тип

Описание

rootname

string

строка, название корневого элемента меню, что будет видно в приложении MyChat Client в главном меню;

rooticon

integer

индекс иконки из готового списка;

items

integer

общее количество элементов меню. Все они будут называться "item1", "item2", "item3" и так далее. Нумерация с единицы, пропуски не разрешаются.


Вложенные элементы

Все вложенные пункты меню имеют обязательное название "item" и номер элемента, например, "item15". Последовательность не имеет значения, можно перечислять элементы по порядку или согласно другой схеме, как вам удобнее. Главное, чтобы количество элементов было не меньше, чем указано в параметре "items".

Параметр

Тип

Описание

name

string

название пункта меню, текстовая строка;

parent

string

если этого параметра нет, то пункт меню будет в корневом разделе, если есть — то указывается название родительского раздела, например "item12";

icon

integer

индекс иконки из готового списка;

type

string

тип элемента меню, возможные варианты:

  • hr — горизонтальная черта-разделитель в меню;
  • open-link — открыть ссылку в браузере;
  • server-script — выполнить скрипт на сервере;
  • exec-action — выполнить action из доступного списка action-команд;
  • open-file — открыть файл, локальный или сетевой;
  • exec-app — запустить локальное приложение, можно передать параметры;
  • exec-cmd — выполнить клиентскую консольную команду, можно передать параметры;
  • open-help — открыть справку на указанном разделе;

data

string

содержимое, с которым надо будет работать команде:

  • open-link — URL, текст ссылки;
  • server-script — название скрипта на сервере;
  • exec-action — название action;
  • open-file — полный путь к открываемому файлу;
  • exec-app — полный путь к приложению, которое следует запустить;
  • exec-cmd — название консольной команды MyChat Client;
  • open-help — название раздела справки MyChat, например, "userscustommenutool" (без пути и точки с расширением html-файла, приложение само разберётся, откуда его открыть и на каком языке);

params

string

  • server-script — параметры для скрипта, опционально;
  • exec-action — параметры для action, опционально;
  • exec-app — параметры для запуска приложения, опционально;
  • exec-cmd — параметры для консольной команды, если есть;

enable

boolean

если указать false, то пункт меню будет показываться неактивным (disable) и по нему нельзя будет кликнуть мышкой. Это бывает удобно, если нужно временно запретить какой-то элемент, но удалять его из JSON не хочется.