Введение

FOX Toolkit – это инструментарий виджетов с открытым исходным кодом и кроссплатформенной поддержкой, то есть библиотека базовых элементов для создания графического пользовательского интерфейса (GUI). Аббревиатура FOX расшифровывается как Free Objects for X. Он включает в себя встроенную тему оформления в стиле Windows 95, доступную как для самой Microsoft Windows, так и для X Window System (которая используется во многих UNIX и UNIX-подобных операционных системах). FOX Toolkit распространяется под лицензией GNU Lesser General Public License. Разработка началась в 1997 году Йеруном ван дер Зийпом во время его работы в CFDRC. С тех пор Йерун ван дер Зийп поддерживает основную библиотеку и тестовые приложения при поддержке пользовательского сообщества. FOX Toolkit написан на C++, с доступными привязками для языков Python, Ruby и Eiffel. Распространяемый исходный код FOX поддерживает компиляцию с использованием множества различных (коммерческих и бесплатных) C++ компиляторов.

Система передачи сообщений

FOX предлагает прозрачную двунаправленную систему обмена сообщениями. Каждый виджет отправляет свое сообщение определенному получателю. Каждое сообщение состоит из селектора, идентифицирующего его тип, и уникального идентификатора, предоставляемого перечислением виджета. Преимущество заключается в том, что каждый виджет может вызывать метод целевого виджета прозрачным образом, даже если этот метод не существует. В свою очередь, при реализации обработчика сообщения, поскольку отправитель известен, получатель также может отправить сообщение обратно отправителю. Это особенно важно в компонентно-ориентированном программном обеспечении, где компоненты могут быть разработаны разными разработчиками или даже разными организациями. Система обмена сообщениями FOX упрощает стратегию обновления графического интерфейса: во время обновления виджеты могут запрашивать у своих получателей обновление. Это означает, что командное сообщение не обязано явно обновлять какие-либо виджеты, как это обычно происходит. Если приложение реализует N командных сообщений, каждое из которых обновляет M виджетов, то потребуется выполнить M*N обновлений и реализовать не более M*N сообщений. Однако, если виджеты запрашивают обновление, необходимо реализовать только N командных сообщений и не более M сообщений об обновлении. Эта стратегия отделяет обновление графического интерфейса от изменений данных, обеспечивая отображение графического интерфейса в реальном времени, соответствующее базовым структурам данных.