Инструменты пользователя

Инструменты сайта


Боковая панель

developers:tutorial:cmdattribute

Команды и меню

Для связи между функциями описанными внутри программной библиотеки и командами, доступными пользователю в программном комплексе Топоматик Робур используется следующая схема.

  • Функции модуля, доступные для вызова в качестве команд помечаются атрибутом «cmd»
  • Внутри файла .plugin в секции actions описываются параметры команды
Функции помеченные атрибутом «cmd» доступны для вызова внутри самых разных параметров файла .plugin с использованием системного вызова $(<имя команды>). Например в значениях для секции variables.

После этого полученную команду можно использовать, например в секции menubars, тогда она появится в главном меню. Аналогичным образом можно добавить команду в контекстное меню, на панель инструментов и ленту - просто прописав её в соответствующей секции файла .plugin.

Создайте и настройте новый модуль для подключения к программному комплексу Топоматик Робур.

В теле программного модуля объявите две команды, и декорируйте их атрибутом «cmd».

    partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator
    {
        [cmd("test_cmd")]
        public void ShowPrms(string prms)
        {
            MessageDlg.Show(prms);
        }
 
        [cmd("test_flags_cmd")]
        public bool IsVisible(string prms)
        {
            return !prms.Equals("Выключить");
        }
    }

Задача команды «test_cmd» при вызове вывести на экран параметр, который в неё приходит, а команды «test_flags_cmd» определить, соответствует ли параметр слову «Выключить».

Если Вам необходимо вызвать какую-либо команду из другого модуля, то можно воспользоваться методом Execute из свойства Plugins синглтона ApplicationHost.Current. Например ApplicationHost.Current.Plugins.Execute(«test_cmd», new object[] { «Параметр» }) вызовет команду «test_cmd» с параметром «Параметр»

Теперь необходимо сформировать наш файл .plugin. Заполните его следующим образом.

{
  "assemblies": {
    "tutorial2": {
      "assembly": "tutorial2.dll, tutorial2.ModulePluginHost"
    }
  },
  "actions": {
    "id_test_cmd1": {
      "cmd": "test_cmd \"Параметр внутри команды\"",
      "title": "Параметр внутри команды 1"
    },
    "id_test_cmd2": {
      "cmd": "test_cmd \"%0\"",
      "title": "Параметр снаружи из меню"
    },
    "id_test_cmd3": {
      "cmd": "test_cmd \"%0\"",
      "title": "Выключенный элемент",
      "flags": "$(if, $(test_flags_cmd,Скрыть), 0, 1)"
    }
  },
  "menubars": {
    "rbproj": {
      "items": [
        {
          "id": "test_menu",
          "title": "Примеры"
        }
      ]
    },
    "rbproj.test_menu": {
      "items": [
        "id_test_cmd1",
        "id_test_cmd2 \"Параметр из меню\"",
        "id_test_cmd3"
      ]
    }
  }
}

В секции actions мы описали три наших команды и все три связали с одной функцией из модуля, объявленой при помощи атрибута «cmd».

{
  ...
  "actions": {
    "id_test_cmd1": {
      "cmd": "test_cmd \"Параметр внутри команды\"",
      "title": "Параметр внутри команды 1"
    },
    "id_test_cmd2": {
      "cmd": "test_cmd \"%0\"",
      "title": "Параметр снаружи из меню"
    },
    "id_test_cmd3": {
      "cmd": "test_cmd \"%0\"",
      "title": "Выключенный элемент",
      "flags": "$(if, $(test_flags_cmd,Выключить), 0, 1)"
    }
  }
  ...
}

Отличие состоит в том, что команда «id_test_cmd1» передает в нашу функцию параметр самостоятельно, команда «id_test_cmd2» получает этот параметр снаружи, а команда id_test_cmd2 отображается как выключенная, потому что мы используем нашу функцию «test_flags_cmd» для установки флагов этой команды.

В секции menubars мы для стандартного проекта Топоматик Робур в главном меню определяем пункт Примеры, в котором описываем положение наших команд из секции actions.

{
  ...
  "menubars": {
    "rbproj": {
      "items": [
        {
          "id": "test_menu",
          "title": "Примеры"
        }
      ]
    },
    "rbproj.test_menu": {
      "items": [
        "id_test_cmd1",
        "id_test_cmd2 \"Параметр из меню\"",
        "id_test_cmd3"
      ]
    }
  }
  ...
}

Для этого мы объявляем секцию «rbproj» - которая определяет что меню будет использоваться для проектов Топоматик Робур и в её элементах описываем меню с ключом «test_menu». После этого объявляем секцию «rbproj.test_menu» и в ней размещаем наши команды из секции actions. При этом для команды «id_test_cmd2» в качестве параметра передаем строчку «Параметр из меню».

Результатом запуска проекта будет появления в главном меню пункта «Примеры», с подпунктами, которые будут показаны и работать в соответствии с описанным выше алгоритмом.

Исходный код примера расположен в проекте «tutorial2».
developers/tutorial/cmdattribute.txt · Последние изменения: 2022/03/15 19:10 — proxor