Для связи между функциями описанными внутри программной библиотеки и командами, доступными пользователю в программном комплексе Топоматик Робур используется следующая схема.
После этого полученную команду можно использовать, например в секции 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» определить, соответствует ли параметр слову «Выключить».
Теперь необходимо сформировать наш файл .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» в качестве параметра передаем строчку «Параметр из меню».
Результатом запуска проекта будет появления в главном меню пункта «Примеры», с подпунктами, которые будут показаны и работать в соответствии с описанным выше алгоритмом.