# FLUID

FLUID (del Inglés, Fast Light User Interface Designer) es un editor gráfico que facilita el diseño de la interfaz gráfica de usuario (IGU) de programas basados en la biblioteca FLTK. FLUID genera los archivos de código fuente así como también los archivos de cabecera que contienen la parte gráfica de las aplicaciones. FLUID también permite adicionar código a los widgets que se ejecuta cuando se interactúa con los objetos gráficos, esta acción es conocida como respuesta al llamado o simplemente callback. El formato de los archivos FLUID es texto plano, que por razones de estilo se guardan en archivos con la extensión .fl. Los archivos .fl pueden ser editados con cualquier editor de archivos de texto, esto en el caso de necesitar de realizar tareas no permitidas o no disponible en FLUID.
Una vez desarrollado el diseño de una interfaz gráfica, FLUID genera a partir del archivo .fl la declaración global de los objetos en el archivo .h de cabecera y sus definiciones en el archivo fuente con extensión .cxx en lenguaje C++. FLUID también soporta internacionalización y localización de etiquetas utilizadas por los widgets, estándar también conocido como I18N. FLUID soporta tres métodos definidos en el I18N, el primero es usar el idioma por defecto y las otras dos opciones son las interfaces GNU gettext o POSIX catgets.
Un programa simple puede ser desarrollado escribiendo todo el código de la aplicación (incluyendo la función principal main) dentro del archivo .fl desarrollado con FLUID, de tal manera, que cuando se generen los archivos .h y .cxx el programa puede ser compilado sin la necesidad de añadir más código, esta es una característica muy importante para los que se inician en el uso de la biblioteca. Por supuesto que la mayoría de programas son más complejos que este ejemplo, para esto otros archivos fuentes con códigos no-IGU pueden ser implementados y ser llamados a través de las funciones callback en FLUID. Esto se puede lograr incluyendo el archivo de cabecera foo.h por medio de la macro #include"foo.h" desde FLUID, o simplemente, adicionando el código directamente dentro del archivo .cxx generado. Esta última posibilidad no es recomendable, ya que hace el mantenimiento de la interfaz gráfica de un proyecto casi imposible. Así que en general, en programas sencillos el código puede ser escrito directamente dentro de los callbacks, mientras que en proyectos grandes lo más recomendable es escribir todo el código no-IGU en diferentes archivos .h y .cxx, que luego serán incluidos dentro del archivo .fl para permitir el llamado de las funciones definidas dentro de los callbacks.
Normalmente el archivo FLUID define una o más ventanas de FLTK y todos los widgets contenidos dentro de las ventanas. Estas ventanas y widgets determinan las funciones o clases del código C++ generadas por FLUID. Widgets creados por FLUID son nombrados de alguna de las siguiente maneras: "nombre", "nombre complejo" o "sin nombre". Un widget con nombre, tiene una variable legal en C++ (i.e. caracteres alfanuméricos y el símbolo underscore) como nombre identificador, y es definido como variable global o miembro de la clase que será apuntada por el widget. Un objeto con nombre complejo usa una puntuación como '.' o '->' o cualquier otro símbolo en su nombre, en este caso, FLUID asigna un puntero al widget para el nombre, que puede ser usado para encontrar widgets dentro de la estructura. Un widget sin nombre tiene nombre en blanco y ningún puntero es almacenado.
Widgets pueden hacer llamados a funciones que sean escritas en otro archivo fuente, o pueden ser dadas como pequeños porciones de código y FLUID las reescribirá como un callback dentro del archivo .cxx.