===== Библиотека функций =====
==== Функции доступные из lua-кода ====
**Log(string msg) **- вывести сообщение в лог\\
//msg// - текст сообщения
**PlaySound(string id)** - воспроизвести аудиофайл\\
//id// - идентификатор аудиофайла. Список загружаемых файлов и их идентификаторы задаются через главный конфигурационный файл (см. "[[:lm2:ce:s_config|Главный конфигурационный файл]]")
**Set(string prop)** - установить значение свойства.\\
//prop// - строка, вида <адрес>=<значение>, где <адрес> - адрес свойства, а <значение> - значение, которое должно быть присвоено свойству. Eсли prop имеет вид <имя_плагина>:<адрес>=<значение>, то <значение> присваивается соответствующему свойству плагина.
**Set(string addr, string value)** - установить значение свойства.\\
Эквивалентно вызову Set(addr..'='..value)
**string Get(string addr)** - получить значение свойства\\
addr - адрес свойства. Может иметь вид <имя_плагина>:<адрес> для получения значения свойства плагина.
**SetText(string addr, string textID)** - установить значение свойства из строковых данных\\
//addr// - адрес свойства\\
//textID// - идентификатор строки из строковых данных
**string GetText(string textID)** - получить строку из строковых данных\\
//textID// - идентификатор строки из строковых данных
**Include(string luaFileName)** - выполнить lua-код из файла. Аналогична функции dofile(…), но с учетом путей\\
//luaFileName// - имя файла с кодом
**Panel(string viewportName, string panelName)** - присоединить панель к вьюпорту. Одну панель можно присоединить только к одному вьюпорту, один раз.\\
//viewportName// - имя вьюпорта или пустая строка, если панель надо отвязать от вьюпорта\\
//panelName// - имя панели
**Text(string textResourceName)** - загрузить строковые данные из файла\\
//textResourceName// - имя файла со строковыми данными
**AddEventHandler(string event, string fname)** - добавить ссылку на обработчик события\\
//event// - описание события в виде <адрес>[=<значение>] или <имя_плагина>:<адрес>[=<значение>]\\
//fname// - имя функции - обработчика события. Функция обработчик события должна иметь вид:
function (ev)
...
return isContinue
end
//ev// - таблица вида (описывает событие):\\
ev.Plugin\\
ev.Panel\\
ev.Element\\
ev.Entry\\
ev.Property\\
ev.Value\\
//isContinue// - если функция возвращает true, то виртуальная машина продолжит искать подходящие обработчики для этого события
**PushEvent(string event)** - поместить событие в очередь на обработку\\
//event //- событие (вида [<имя_плагина>:]<адрес>[=<значение>])
**CheckMouse(string viewportName, number x, number y, bool isClick) **- НЕТ ДАННЫХ\\
//viewportName //- имя вьювпорт\\
//x //- координата по горизонтали\\
//y //- координата по вертикали\\
//isClick - //НЕТ ДАННЫХ
**sys.Exit()** - закрыть приложение
**sys.StartTimer(string id, integer time[, bool once = true]) **- запустить таймер\\
//id// - имя таймера\\
//time //- засекаемое время, мс\\
//once //- true - если таймер должен сработать один раз, false - если должен работать циклично. Если опустить этот параметр, то он по умолчанию считается равным true.\\
После истечения времени time, возникает событие вида: timer..finished.=true. Таймер не очень точный.
**sys.StopTimer(string id)** - остановить таймер\\
//id //- имя таймера\\
После остановки таймера этой функцией событие таймера не возникает.
**sys.GetPanelList()** - получить имена всех панелей\\
Возвращает массив строк с именами панелей
**sys.GetElementList(string PanelID)** - получить имена элементов в заданной панели\\
//PanelID// - имя панели, в которой ищем элементы.\\
Возвращает массив строк с именами элементов
**sys.GetSubList(string PanelID, string ElementID)** - получить имена подэлементов в заданном элементе\\
//PanelID// - Имя панели\\
//ElementID// - Имя элемента\\
Возвращает массив строк с именами подэлементов
**sys.GetViewportList()** - получить имена всех вьюпортов\\
Возвращает массив строк с именами вьюпортов
**sys.GetViewportName(string PanelID)** - получить имя вьюпорта по имени панели\\
//PanelID// - Имя панели\\
Возвращает имя вьюпорта или пустую строку, если такой панели нет или она не присоединена к вьюпорту
**sys.InitViewport(string ID, integer Left, integer Top, integer Width, integer Height, bool Windowed)** - добавить новый вьюпорт\\
//ID //- имя вьюпорта\\
//Left //- позиция вьюпорта на мониторе по горизонтали\\
//Top //- позиция вьюпорта на мониторе по вертикали\\
//Width //- Ширина вьюпорта\\
//Height //- Высота вьюпорта\\
//Windowed// - Флаг рамки\\
Возвращает true, если вьюпорт создан удачно
**sys.InitViewport(string ID, integer Width, integer Height, integer HWND)** - добавить новый вьюпорт\\
//ID //- имя вьюпорта\\
//Width //- ширина вьюпорта\\
//Height //- высота вьюпорта\\
//HWND// - хэндл существующего окна\\
Возвращает true, если вьюпорт создан удачно
**sys.LoadLogic(string fileName)** - перезапуск логической машины. Все панели отвязываются от вьюпортов\\
//fileName// - имя стартового lua скрипта
**sys.Exec(string id, string cmd)** - выполнить внешнюю команду в отдельном потоке\\
//id// - id (имя) потока\\
//cmd //- команда\\
Возвращает true, ести поток запустился успешно\\
После завершения работы возникает событие: exec..finished.=\\
В текущей реализации одновременно можно запустить на выполнение только одну команду
**[RPI] lic.GetSerial()** - получить серийный номер устройства\\
Возвращает серийный номер
**sys.SavePanelPNG(string PanelName, string FileName, integer Width, integer Height) **- НЕТ ДАННЫХ\\
//PanelName// - имя панели\\
//FileName// - имя файла\\
//Width// - ширина в пикселях\\
//Height// - высота в пикселях
**sys.SaveElementPNG(string PanelName, string ElementName, string FileName, integer Width, integer Height[, number Scale])** - НЕТ ДАННЫХ\\
//PanelName //- имя панели\\
//ElementName //- имя элемента\\
//FileName //- имя файла\\
//Width// - ширина в пикселях\\
//Height// - высота в пикселях\\
//Scale //- масштаб
**sys.SaveXML() **- НЕТ ДАННЫХ
**sys.SaveLib()** - НЕТ ДАННЫХ
**sys.SetXMLAttr(string Prop)** - НЕТ ДАННЫХ\\
//Prop// - НЕТ ДАННЫХ
**sys.SetLibAttr(string Prop)** - НЕТ ДАННЫХ\\
//Prop// - НЕТ ДАННЫХ
**sys.GetXMLAttr(string Prop)** - НЕТ ДАННЫХ\\
//Prop// - НЕТ ДАННЫХ
**sys.GetLibAttr(string Prop) ** - НЕТ ДАННЫХ\\
//Prop// - НЕТ ДАННЫХ
**sys.ShowViewport(string ViewportID)** - показать вьюпорт\\
//ViewportID// - имя вьюпорта
**sys.HideViewport(string ViewportID)** - скрыть вьюпорт\\
//ViewportID //- имя вьюпорта
**sys.MoveViewport(string ViewportID, number x, number y)** - переместить вьюпорт\\
//ViewportID //- имя вьюпорта\\
//x//- координата по горизонтали\\
//y//- координата по вертикали
**sys.ScaleViewport(string ViewportID, number x, number y, number scale) **- масштабировать вьюпорт\\
//ViewportID //- Имя вьюпорта\\
//x// - НЕТ ДАННЫХ\\
//y// - НЕТ ДАННЫХ\\
//scale //- масштаб
**sys.ResetViewport(string ViewportID)** - НЕТ ДАННЫХ\\
//ViewportID //- имя вьюпорта
**sys.GetMousePos(string ViewportID) **- получить координаты курсора мыши относительно вьюпорта\\
//ViewportID //- имя вьюпорта\\
Возвращает number x, number y - координаты курсора или nil
**sys.SetMousePos(string ViewportID, integer x, integer y)** - установить курсор мыши относительно вьюпорта\\
//ViewportID //- имя вьюпорта\\
//x //- координата по горизонтали\\
//y //- координата по вертикали
**sys.ShowCursor(string ViewportID)** - показать курсор мыши\\
//ViewportID //- имя вьюпорта
**sys.HideCursor(string ViewportID)** - спрятать курсор мыши\\
//ViewportID //- имя вьюпорта
**sys.GrabCursor(string ViewportID)** - запретить курсору мыши выходить за пределы вьюпорта\\
//ViewportID //- имя вьюпорта\\
Этот режим работает только если окно вьюпорта имеет фокус
**sys.UngrabCursor(string ViewportID)** - выключить режим запрета выхода курсора за пределы вьюпорта\\
//ViewportID //- имя вьюпорта
**sys.RequestFocus(string ViewportID) **- запросить получение фокуса для окна вьюпорта\\
//ViewportID //- имя вьюпорта\\
Фактическое получение фокуса зависит от ОС
**sys.HasFocus(string ViewportID)** - запросить состояние фокуса у окна вьюпорта\\
//ViewportID// - имя вьюпорта\\
Возвращает true, если окно имеет фокус
**sys.SetVPPos(string ViewportID, number x, number y)** - НЕТ ДАННЫХ\\
//ViewportID //- имя вьюпорта\\
//x //- координата по горизонтали\\
//y //- координата по вертикали
**sys.SetVPScale(string ViewportID, number ScaleX, number ScaleY, number Scale) **- НЕТ ДАННЫХ\\
//ViewportID //- имя вьюпорта\\
//ScaleX //- масштаб по горизонтали\\
//ScaleY //- масштаб по вертикали\\
//Scale //- масштаб
**sys.SetVPZoomScale(string ViewportID, number ZoomScaleX, number ZoomScaleY, number ZoomScale)** - НЕТ ДАННЫХ\\
//ViewportID //- имя вьюпорта\\
//ZoomScaleX //- дополнительный масштаб по горизонтали\\
//ZoomScaleY //- дополнительный масштаб по вертикали\\
//ZoomScale //- дополнительный масштаб
==== Функции, доступные из Lua кода в пропертях элементов ====
**Log(string msg) **- см. выше
**PlaySound(string name)** - см. выше
**Set(string prop)** - установить значение **своего ** свойства\\
//prop //- строка, вида <имя_подэлемента>.<имя_свойства>=<значение> или <имя_свойства>.=<значение>
**Set(string addr, string value) **- установить значение **своего ** свойства.\\
Эквивалентно вызову Set(addr..'='..value)
**string Get(string addr)** - получить значение **своего ** свойства\\
addr - адрес свойства. Должен иметь вид <имя_подэлемента>.<имя_свойства> или <имя_свойства>..
**SetText(string addr, string textID)** - установить значение **своего ** свойства из строковых данных\\
//addr //- адрес свойстваtextID - идентификатор строки из строковых данных
**string GetText(string textID)** - см. выше
**PushEvent(string event)** - см. выше