El kit de herramientas FOX es un conjunto de herramientas de widgets multiplataforma de código abierto , es decir, una biblioteca de elementos básicos para crear una interfaz gráfica de usuario (GUI). FOX significa Free Objects for X (Objetos libres para X).
Cuenta con un tema cableado al estilo de Windows 95 disponible tanto para el propio Microsoft Windows como para el sistema X Window (que se utiliza en muchos sistemas operativos UNIX y similares a UNIX ). [2]
El kit de herramientas FOX se ha publicado bajo la licencia pública general reducida de GNU . El desarrollo comenzó en 1997 por Jeroen van der Zijp mientras estaba afiliado a CFDRC. Desde entonces, Jeroen van der Zijp mantiene la biblioteca principal y las aplicaciones de prueba, con la ayuda de la comunidad de usuarios.
El kit de herramientas FOX está escrito en C++ , con enlaces de lenguaje disponibles para Python , Ruby y Eiffel . La distribución del código fuente de FOX permite la compilación con muchos compiladores de C++ diferentes (comerciales y gratuitos).
FOX se diferencia de otros kits de herramientas multiplataforma de la siguiente manera:
Todos estos kits de herramientas tienen cierto soporte para la programación nativa en las plataformas clásicas Mac OS y/o macOS , que FOX actualmente no soporta. [ cita requerida ]
FOX utiliza una técnica similar al enfoque de estilo Java Swing para mostrar una interfaz gráfica de usuario en la pantalla, utilizando únicamente primitivas gráficas disponibles en esa plataforma, a diferencia del enfoque original de estilo Java AWT que utilizaba widgets nativos. Esto significa que las aplicaciones tendrán una apariencia similar en todas las plataformas. En teoría, trasladar FOX a una nueva plataforma también debería ser más fácil que implementar compatibilidad con widgets nativos.
En el lado negativo, generalmente significa que las aplicaciones FOX se verán y se sentirán diferentes de las aplicaciones nativas para esas plataformas, lo que algunos usuarios pueden encontrar confuso. Además, ciertas características de la plataforma nativa pueden no estar disponibles de inmediato, como el soporte de impresión integral o el manejo de entrada internacionalizado, porque deberán volver a implementarse de manera multiplataforma antes de que puedan usarse en FOX. Algunas aplicaciones, como Xfe File Manager , permiten cambiar el esquema de colores para integrarse mejor con los colores del tema del sistema. [3] En Arch Linux , una aplicación llamada FOX Control Panel está disponible para cambiar el esquema de colores de todas las aplicaciones FOX en todo el sistema. Se envía con el paquete principal FOX Toolkit.
FOX ofrece un sistema de mensajería bidireccional transparente. Cada widget envía su mensaje a un objetivo determinado. Cada mensaje está compuesto por un selector que identifica su tipo y un identificador único que proporciona la enumeración del widget. La ventaja es que cada widget puede llamar al método de un widget de destino de manera transparente, incluso si el método no existe. Viceversa, en la implementación del controlador de mensajes individual, dado que se conoce el remitente, el destino también puede enviar un mensaje al remitente. Esta es una característica particularmente importante en el software orientado a componentes, donde los componentes pueden ser escritos por diferentes personas o incluso diferentes organizaciones.
El sistema de mensajería FOX simplifica la estrategia de actualización de la GUI: durante la actualización de los widgets, estos pueden solicitar a sus destinos que los actualicen. Esto significa que un mensaje de comando no tiene que actualizar explícitamente ningún widget, como es habitual. En caso de que una aplicación implemente N mensajes de comando que actualicen cada uno de los M widgets, se deben ejecutar M*N actualizaciones y se deben implementar como máximo M*N mensajes. Por otro lado, si los widgets solicitan una actualización, solo se implementan N mensajes de comando y como máximo M mensajes de actualización. Esta estrategia separa la actualización de la GUI de los cambios de datos, lo que hace que la GUI sea un reflejo en tiempo real de las estructuras de datos subyacentes.
En esencia, depende de las bibliotecas multiplataforma, que incluyen las siguientes: [4]
El siguiente ejemplo crea una aplicación FOX y un cuadro de diálogo con un botón en C++:
#incluir "fx.h" int main ( int argc , char * argv []) { FXApp aplicación ( "Hola" , "FoxTest" ); aplicación . init ( argc , argv ); FXMainWindow * main = new FXMainWindow ( & aplicación , "Hola" , NULL , NULL , DECOR_ALL ); new FXButton ( main , "&Hola, Mundo!" , NULL , & aplicación , FXApp :: ID_QUIT ); aplicación . crear (); main -> mostrar ( PLACEMENT_SCREEN ); return aplicación . ejecutar (); }
También es posible crear diálogos con Python 2.2 y Ruby :
FXPY
#!/usr/bin/env python3desde FXPy.fox importar * importar sysdef runme ( ): aplicación = FXApp ( "Hola" , " Prueba" ) aplicación.init ( sys.argv ) principal = FXMainWindow ( aplicación , " Hola " , Ninguno , Ninguno , DECOR_ALL ) botón = FXButton ( principal , " & Hola , Mundo ! " , Ninguno , aplicación , FXApp.ID_QUIT ) aplicación.create ( ) principal.show ( PLACEMENT_SCREEN ) aplicación.run ( ) si __nombre__ == "__principal__" : ejecutarme ()
FXRuby
requiere 'fox16' incluye Fox aplicación = FXApp . new ( "Hola" , "FoxTest" ) principal = FXMainWindow . new ( aplicación , "Hola" , nulo , nulo , DECOR_ALL ) FXButton . new ( principal , "&¡Hola, mundo!" , nulo , aplicación , FXApp :: ID_QUIT , LAYOUT_FILL_X | BUTTON_TOOLBAR | FRAME_RAISED | FRAME_THICK ) aplicación . create () principal . show ( PLACEMENT_SCREEN ) aplicación . run ()