IUP

IUP — кроссплатформенная библиотека базовых элементов графического пользовательского интерфейса с использованием языков C и Lua. С её помощью можно создавать быстрые, не требующие компиляции графические приложения.

Общие сведения

Поддерживаемые языки и платформы

В среде Linux и других Unix-подобных операционных систем работает посредством Gtk, Motif/Lesstif или непосредственно взаимодействуя с X-сервером. В Windows использует графические средства данной операционной системы. В 2017 году были представлены бэкэнды, позволяющие разрабатывать с помощью IUP нативные приложения для MacOS[2], iOS[3], Android[4], а также веб-приложения с использованием Emscripten[5].

Библиотека написана на C, её архитектура позволяет достаточно естественным образом использовать её из объектно-ориентированного кода на C++. Будучи, как и Lua, разработанной в Католическом университете Рио-де-Жанейро[6], она «из коробки» поддерживает интеграцию с этим скриптовым языком.

Доступны также библиотеки-обвязки для использования IUP во множестве языков, таких как Ruby[7], Euphoria[8], FreeBasic[9], Perl[10], Scheme[11], Eiffel[12], Nim[13] и других.

Особенности

Для описания файлов ресурсов в IUP традиционно используется язык LED, который в современных версиях библиотеки считается устаревшим и заменяется языком Lua. Можно создавать IUP-приложения и без использования LED или Lua, пользуясь только C API.

В поставку библиотеки входит также разработанная в 1994 году IupVisualLED[14], простая RAD IDE, позволяющая редактировать GUI-диалоги в режиме, близком к WYSIWYG. IupVisualLED также позволяет экспорт полученного кода на LED, Lua или C. Для работы с Lua-скриптами в состав IUP входит IupLuaScripter — редактор Lua-кода с поддержкой отладки.

IUP имеет достаточно минималистичный API (около ста C-функций) и отличается от других аналогичных библиотек способом реализации 4 важных концепций:

  • Время создание управляющих элементов. При создании виджета не происходит его немедленного отображения в ОС. Оно выполняется при показе содержащего виджет диалога или путём ручного вызова функции IupMap для этого диалога.
  • Система атрибутов. В IUP очень мало функций, поскольку основным способом работы с виджетами является доступ к их атрибутам (текстового типа) с помощью функций IupSetAttribute и IupGetAttribute.
  • Абстрактное позиционирование макета. Виджеты в IUP никогда не позиционируются путём явного задания координат; их позиции рассчитываются динамически, в соответствии с абстрактной иерархией макета, задаваемой с помощью виджетов-контейнеров IupFill, IupHbox, IupVbox и т. д. (впрочем, явное позиционирование допускается внутри виджетов-контейнеров специального типа).
  • Система обратных вызовов. Язык LED поддерживает косвенное задание связи виджетов с функциями обратного вызова. Для связывания Си-функции используется конструкция IupSetFunction имя с последующим связыванием атрибутов обратного вызова с использованием IupSetAttribute. Также можно осуществлять прямое связывание виджета с callback-функцией с помощью IupSetCallback.

При проектировании IUP удалены ограничения на класс/тип экземпляров объекта, но сохранена иерархия наследования в стиле Lua (см. прототипное программирование).

Начиная с версии 3.9, IUP поддерживает работу со строками в формате UTF-8.

Дополнительные функции

Кроме функций создания виджетов, IUP предлагает ряд дополнительных возможностей:

  • рисование;
  • создание массивов и хеш-таблиц;
  • работа со строками;
  • получение информации о шрифтах;
  • получение информации о системе.

Лицензия

IUP доступно для скачивания, бесплатного использования, модификации, использования в коммерческих целях и распространения под лицензией MIT[15].

Примечания

  1. The iup Open Source Project on Open Hub: Languages Page — 2006.
  2. Проект IupCocoa на сайте GitHub
  3. Проект IupCocoaTouch на сайте GitHub
  4. Проект IupAndroid на сайте GitHub
  5. Проект IupEmscripten на сайте GitHub
  6. Часть разработчиков IUP являются также разработчиками Lua
  7. Ruby-IUP Архивная копия от 14 апреля 2011 на Wayback Machine (репозиторий исходного кода Архивная копия от 11 июня 2018 на Wayback Machine на github)
  8. EuIup. Дата обращения: 26 апреля 2011. Архивировано 14 июля 2012 года.
  9. Portable GUI toolkit (IUP) version 3.0 (RC2) Архивная копия от 4 февраля 2010 на Wayback Machine на форуме FreeBasic
  10. perl-iup. Дата обращения: 26 апреля 2011. Архивировано 11 июня 2018 года.
  11. IUP: IUP. Дата обращения: 29 мая 2012. Архивировано из оригинала 9 марта 2011 года. Архивировано 9 марта 2011 года.
  12. eiffel-iup Архивная копия от 26 сентября 2019 на Wayback Machine — IUP toolkit library for GOBO Eiffel
  13. IUP-wrapper является Архивная копия от 26 января 2017 на Wayback Machine частью стандартной библиотеки Nim
  14. Oliveira Prates, R.; Gattass, M. ;and Figueiredo, L. H. Visual LED: uma ferramenta interativa para geração de interfaces gráficas (порт.) // M.Sc. dissertation, Computer Science Department. — PUC-Rio, 1994. Архивировано 2 сентября 2009 года.
  15. Tecgraf Library License. Дата обращения: 15 сентября 2009. Архивировано 22 октября 2009 года.

Ссылки