Тема этой статьи может не соответствовать рекомендациям Википедии по значимости для продуктов и услуг . ( май 2014 г. ) |
Разработчик(и) | Йерун ван дер Зийп, сообщество FOX |
---|---|
Стабильный релиз | 1.6.58 / 13 мая 2024 г. ( 2024-05-13 ) |
Предварительный релиз | 1.7.86 / 15 августа 2024 г. ( 2024-08-15 ) |
Написано в | С++ |
Операционная система | Кроссплатформенный |
Тип | Библиотека развития |
Лицензия | GNU Lesser General Public License с приложением к лицензии, разрешающим статическую компоновку [1] |
Веб-сайт | fox-toolkit.org |
FOX toolkit — это кроссплатформенный инструментарий виджетов с открытым исходным кодом , т. е. библиотека базовых элементов для создания графического пользовательского интерфейса (GUI). FOX расшифровывается как Free Objects for X.
В нем реализована встроенная тема в стиле Windows 95, доступная как для самой Microsoft Windows , так и для X Window System (которая используется во многих операционных системах UNIX и UNIX-подобных системах). [2]
Инструментарий FOX был выпущен под лицензией GNU Lesser General Public License . Разработка началась в 1997 году Йероеном ван дер Зейпом, когда он был аффилирован с CFDRC. С тех пор Йероен ван дер Зейп поддерживает основную библиотеку и тестовые приложения с помощью сообщества пользователей.
Инструментарий FOX написан на C++ , с языковыми привязками , доступными для Python , Ruby и Eiffel . Исходный код дистрибутива FOX поддерживает сборку с помощью множества различных (коммерческих и бесплатных) компиляторов C++.
FOX отличается от других кроссплатформенных наборов инструментов следующим образом:
Все эти наборы инструментов имеют некоторую поддержку программирования на классических платформах Mac OS и/или macOS , которые в настоящее время FOX не поддерживает. [ необходима цитата ]
FOX использует технику, похожую на подход в стиле Java Swing , для отображения графического пользовательского интерфейса на экране, используя только графические примитивы, доступные на этой платформе, в отличие от оригинального подхода в стиле Java AWT , который использовал собственные виджеты. Это означает, что приложения будут иметь схожий вид и поведение на разных платформах. Теоретически, портирование FOX на новую платформу также должно быть проще, чем реализация поддержки собственных виджетов.
С другой стороны, это обычно означает, что приложения FOX будут выглядеть и ощущаться иначе, чем собственные приложения для этих платформ, что может сбить с толку некоторых пользователей. Кроме того, некоторые собственные функции платформы могут быть недоступны сразу, например, комплексная поддержка печати или интернационализированная обработка ввода, поскольку их необходимо будет повторно реализовать кроссплатформенным способом, прежде чем их можно будет использовать в FOX. Некоторые приложения, например Xfe File Manager , позволяют изменять цветовую схему для лучшей интеграции с цветами темы системы. [3] В Arch Linux доступно приложение под названием FOX Control Panel для изменения цветовой схемы всех приложений FOX в масштабах всей системы. Оно поставляется с основным пакетом FOX Toolkit.
FOX предлагает прозрачную двунаправленную систему обмена сообщениями. Каждый виджет отправляет свое сообщение определенной цели. Каждое сообщение состоит из селектора, который определяет его вид, и идентификатора, который является уникальным и предоставляется перечислением виджета. Преимущество заключается в том, что каждый виджет может вызывать метод целевого виджета прозрачным образом, даже если метод не существует. Наоборот, при реализации индивидуального обработчика сообщений, поскольку отправитель известен, цель также может отправить сообщение отправителю. Это особенно важная функция в компонентно-ориентированном программном обеспечении, где компоненты могут быть написаны разными людьми или даже разными организациями.
Система обмена сообщениями FOX упрощает стратегию обновления GUI: во время обновления виджетов виджеты могут запрашивать у своих целей обновление. Это означает, что командное сообщение также не должно явно обновлять какие-либо виджеты, как это обычно бывает. В случае, если приложение реализует N командных сообщений, каждое из которых обновляет M виджетов, то должно быть выполнено M*N обновлений и должно быть реализовано не более M*N сообщений. С другой стороны, если виджеты запрашивают обновление, реализуются только N командных сообщений и не более M сообщений обновления. Эта стратегия отделяет обновление GUI от изменений данных, делая GUI отражением в реальном времени базовых структур данных.
Под капотом он зависит от кроссплатформенных библиотек, которые включают в себя следующее: [4]
Следующий пример создает приложение FOX и диалоговое окно с кнопкой на C++:
#включить "fx.h" int main ( int argc , char * argv []) { FXApp application ( "Привет" , "FoxTest" ); application.init ( argc , argv ) ; FXMainWindow * main = new FXMainWindow ( & application , "Привет" , NULL , NULL , DECOR_ALL ); new FXButton ( main , "&Привет, мир!" , NULL , & application , FXApp :: ID_QUIT ) ; application.create ( ); main - > show ( PLACEMENT_SCREEN ); return application.run ( ) ; }
Также возможно создавать диалоги с помощью Python 2.2 и Ruby :
FXPy
#!/usr/bin/env питон3из FXPy.fox импорт * импорт sysdef runme (): app = FXApp ( "Привет" , " Тест " ) app.init ( sys.argv ) main = FXMainWindow ( app , " Привет " , None , None , DECOR_ALL ) button = FXButton ( main , " & Привет , мир ! " , None , app , FXApp.ID_QUIT ) app.create ( ) main.show ( PLACEMENT_SCREEN ) app.run ( ) если __name__ == "__main__" : запустить меня ()
FXRuby
требуется ' fox16' включить Fox application = FXApp.new ( "Привет" , " FoxTest" ) main = FXMainWindow.new ( application , " Привет " , nil , nil , DECOR_ALL ) FXButton.new ( main , " & Привет , мир ! " , nil , application , FXApp :: ID_QUIT , LAYOUT_FILL_X | BUTTON_TOOLBAR | FRAME_RAISED | FRAME_THICK ) application.create ( ) main.show ( PLACEMENT_SCREEN ) application.run ( )