IUP (IUP)

Перейти к навигации Перейти к поиску
IUP
Тип SDK
Авторы Tecgraf/PUC-Rio в сотрудничестве с Petrobras
Написана на Си[1]
Операционные системы Кроссплатформенное программное обеспечение (Linux и Microsoft Windows)
Последняя версия 3.31 (13 октября 2023)
Лицензия MIT
Сайт IUP

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

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

[править | править код]

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

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

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

Особенности

[править | править код]

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

В поставку библиотеки входит также разработанная в 1994 году IupVisualLED[15], простая 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[16].

Примечания

[править | править код]
  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. Lua Workshop 2017: IUP Next - Eric Wing & Chris Matzenbach на YouTube
  7. Часть разработчиков IUP являются также разработчиками Lua
  8. Ruby-IUP Архивная копия от 14 апреля 2011 на Wayback Machine (репозиторий исходного кода Архивная копия от 11 июня 2018 на Wayback Machine на github)
  9. EuIup. Дата обращения: 26 апреля 2011. Архивировано 14 июля 2012 года.
  10. Portable GUI toolkit (IUP) version 3.0 (RC2) Архивная копия от 4 февраля 2010 на Wayback Machine на форуме FreeBasic
  11. perl-iup. Дата обращения: 26 апреля 2011. Архивировано 11 июня 2018 года.
  12. IUP: IUP. Дата обращения: 29 мая 2012. Архивировано из оригинала 9 марта 2011 года. Архивировано 9 марта 2011 года.
  13. eiffel-iup Архивная копия от 26 сентября 2019 на Wayback Machine — IUP toolkit library for GOBO Eiffel
  14. IUP-wrapper является Архивная копия от 26 января 2017 на Wayback Machine частью стандартной библиотеки Nim
  15. 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 года.
  16. Tecgraf Library License. Дата обращения: 15 сентября 2009. Архивировано 22 октября 2009 года.