Текстовый интерфейс для сценарного языка OneScript.
Цель данной разработки - создать простой инструмент для построения текстового интерфейса (TUI) на сценарном языке OneScript. Библиотека основана на кроссплатформенной библиотеке Terminal.Gui , распространяемой под лицензией MIT License. Название OneScriptTerminalGui составлено из названий библиотеки, положенной в основу кода, и сценарного языка, для которого она адаптирована. У пользователей появляется возможность взаимодействовать со сценарием с помощью окон, кнопок меню, флажков и других элементов, которые недоступны в чистом интерфейсе командной строки. Это визуализация данных и действий за счёт использования элементов управления и цветовых решений.
- Доступно управление как с клавиатуры, так и с помощью мыши, включая перетаскивание.
- Есть таймеры (для них поддерживается многопоточность).
- Обработка событий с получением аргументов события.
- Использование буфера обмена. Можно вырезать, копировать и вставлять фрагменты текста.
- Видимые элементы могут содержать произвольное количество дочерних элементов.
- Можно создать панель меню в верхней части экрана и строку состояния в нижней части экрана.
- Можно создать всплывающее контекстное меню.
- Кросс-платформенность, консольные приложения будут работать там, где возможно запустить сценарий OneScript.
- Выбор цвета для элементов управления по своему усмотрению.
- Поддерживается абсолютная и вычисляемая система макетов, что облегчает расположение элементов.
- Следующие элементы управления реализованы:
- Верхний (Toplevel)
- Вкладка (TabPage)
- ВыборЦвета (ColorPicker)
- Дерево (TreeView)
- Диалог (Dialog)
- ДиалогОткрытия (OpenDialog)
- ДиалогСохранения (SaveDialog)
- Индикатор (ProgressBar)
- Кнопка (Button)
- КонтекстноеМеню (ContextMenu)
- Надпись (Label)
- Окно (Window)
- ОкноСообщений (MessageBox)
- ПанельВкладок (TabView)
- ПанельМеню (MenuBar)
- Переключатель (RadioGroup)
- ПолеВвода (TextField)
- ПолеВремени (TimeField)
- ПолеВыбора (ComboBox)
- ПолеДаты (DateField)
- ПолосаПрокрутки (ScrollBarView)
- Прокручиваемый (ScrollView)
- РамкаГруппы (FrameView)
- СписокЭлементов (ListView)
- СтрокаСостояния (StatusBar)
- Таблица (TableView)
- Текстовый (TextView)
- Уведомление (Balloons)
- Флажок (CheckBox)
default.mp4
Вы можете создать приложение, которое:
- Будет написано на сценарном языке OneScript (читай - языке 1С).
- Будет запускаться в окне терминала.
- Использует событийно-ориентированный подход.
- Предоставляет элементы управления, созданные в текстовом режиме.
При подключении библиотеки в коде сценария она будет искать и определять терминал, в котором выполняется сценарий, подключит соответствующий драйвер и создаст приложение с элементом управления Верхний (Toplevel). Это элемент верхнего уровня, который действует как контейнер. Его подэлементами и будут все элементы управления. Этот Верхний займет собой весь экран терминала. Завершить работу приложения можно методом Завершить (Shutdown) в коде сценария, закрыв окно терминала или нажав назначенную свойством КлавишаВыхода (QuitKey) клавишу.
- Установите на компьютере OneScript.
- Скачайте библиотеку OneScriptTerminalGui.dll из данного репозитория (находится в релизе). Или скачайте из каталога docs архив с именем формата OneScriptTerminalGuiх_х_х_х.zip. Скачайте последнюю версию. Поместите находящуюся в архиве библиотеку, в какой либо каталог на диске. Возможно будет необходимо правой кнопкой мыши вызвать свойства распакованных файлов и разблокировать их.
- Напишите сценарий приложения (статья на инфостарте).
ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptTerminalGui.dll");
ТФ = Новый ТерминалФормыДляОдноСкрипта();
Окно1 = ТФ.Окно("Окно1");
Окно1.Текст = "Когда я был маленький – очень, очень давно, – я читал одну книжку:
|она называлась «Пиноккио, или Похождения деревянной куклы»
|(деревянная кукла по-итальянски – буратино).";
Окно1.Ширина = ТФ.Величина.Процент(80);
Окно1.Высота = ТФ.Величина.Процент(80);
Окно1.Центр();
ТФ.Верхний.Добавить(Окно1);
ТФ.Запуск();- Запустите сценарий на исполнение. В среде Windows просто кликните (или дважды кликните) по файлу сценария. В среде Linux сначала запустите терминал, а затем выполните команду формата:
oscript.exe <script_path>Не получится запустить сценарий на исполнение непосредственно из редакторов, которые имеют какую либо реализацию консоли. Например Notepad++ с помощью плагина NppExec создает консоль. Вы получите сообщение об ошибке: Unable to initialize the console. This can happen if the console is already in use by another process or in unit tests. Обойти это можно написав сценарий запуска (назовем его Старт.os), в котором запустите уже МойСценарий.os такой строкой:
ЗапуститьПриложение("C:\444\МойСценарий.os", , Истина);Старт.os уже можно будет запускать из Notepad++ по F5 (или какая там будет назначена для запуска клавиша).
Условно можно обозначить два варианта использования библиотеки.
Первый - это работа внутри приложения. Вы пишите код сценария на языке OneScript, запускаете сценарий на исполнение в окне терминала и при этом вся информация для пользователя может быть показана только средствами элементов интерфейса. Командная строка не видна, она закрыта приложением. При закрытии приложения закроется и окно терминала.
Второй вариант - вызов интерактивных диалогов или таблиц и другой информации как дополнительная возможность по ходу выполнения вашего основного сценария. Вы при этом остаетесь в командной строке и видите результат например метода Сообщить() непосредственно. При закрытии приложения окно терминала не закроется.
Примеры можно посмотреть в справке в разделе "Дополнения" - "Вызов из основного сценария".
Рекомендую использовать упрощенный вариант - без запуска фонового задания. Вот пример.
Перем ТФ, РезультатВызова;
Процедура ВызватьTUI() Экспорт
ТФ = Новый ТерминалФормыДляОдноСкрипта();
ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение"));
ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт");
ДиалогОткрытия1.ПоказатьДиалог();
ТФ.Запуск();
КонецПроцедуры
Процедура ДиалогЗакрыт() Экспорт
РезультатВызова = Неопределено;
Пока РезультатВызова = Неопределено Цикл
Если ТФ.АргументыСобытия.РезультатДиалога = ТФ.РезультатДиалога.ОК Тогда
Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда
РезультатВызова = ТФ.АргументыСобытия.Файлы.Получить(0);
КонецЕсли;
Иначе
РезультатВызова = ТФ.АргументыСобытия.РезультатДиалога;
КонецЕсли;
Приостановить(500);
КонецЦикла;
ТФ.Завершить();
КонецПроцедуры
ПодключитьВнешнююКомпоненту("OneScriptTerminalGui.dll");
ВызватьTUI();
Сообщить("РезультатВызова = " + РезультатВызова);
Приостановить(3000);
ВызватьTUI();
Сообщить("РезультатВызова = " + РезультатВызова);
Пока Истина Цикл
Приостановить(1000);
КонецЦикла;В примере вызов TUI для наглядности делается дважды.
CallingTUI.mp4
На странице справки для каждого метода-свойства-события есть примеры кода и тестовые примеры. Это ускорит написание сценария вашего приложения. Тестирование проведено для односкрипта v1.8.4.5 в Windows 10 и в Linux Mint 20.3 (терминал - "mate-terminal").
Работать ещё есть над чем. В планах добавление новых классов. Пишите замечания и пожелания. Контакт указан на сайте по ссылке вверху.
- По данной работе на сайте Инфостарт размешена публикация Текстовый пользовательский интерфейс (TUI) для сценарного языка OneScript