Descripción General
Pyragua al ser una aplicación gráfica para todo tipo de usuarios, debe poseer una interfaz flexible, y extensible, acorde a las necesidades de extensibilidad que requieren los plugins de Pyragua. El objetivo de este documento es describir las cuestiones de diseño relacionadas con la parte gráfica (UI) de Pyragua.
El Toolkit
Pyragua ha elegido como Toolkit gráfico WxPython?. Este toolkit ha demostrado ser muy potente, y capaz de adaptarse a las necesidades que requiere el editor. Otras características que nos llevaron a su elección, son el hecho de que luce nativo en cada plataforma, y el módulo de AUIs, que con relativa facilidad nos permite realizar interfaces gráficas de una flexibilidad enorme, y de una apariencia visual muy agradable.
Sin embargo, somos concientes de algunas de las limitantes que tiene el widget, relacionadas con la facilidad de codificación que en algunos momentos se aleja de Python y se acerca un poco más a C++, y también el desarrollo de interfaces gráficas por lo general conlleva una gran cantidad de código específico y repetitivo.
Con estas características y debilidades en mente, se espera diseñar la interfaz de Pyragua, de forma que aproveche lo mejor de wxPython y de alguna forma supere los inconvenientes antes mencionados.
Necesidades de la Interfaz
- La interfaz gráfica de Pyragua (PyraguaUI) debe estar lo más separada posible del resto de la funcionalidad de Pyragua. De esta forma, se mantendrá "limpio" el resto de Pyragua del código relacionado con wxPython.
- PyraguaUI debe esconder la "complejidad" de wxPython detrás de una interfaz de programación, y definir un estilo propio para utilizar la interfaz por parte del resto de módulos y de los plugins que más adelante implementaremos.
- PyraguaUI debe poseer una Barra de menús, y una forma para insertar y modificar esta barra de menús (conectando métodos a eventos de estas).
- PyraguaUI debe implementar una forma de introducir diferentes barras de herramientas, y una forma para agregar, modificar y esconder barras de herramientas, haciendo uso de las AUIs.
- Se debe definir una forma de modificar las barras de herramientas y los menús que no sea directamente a través de código.
- La interfaz debe tener un espacio para que los plugins puedan introducir "subventanas". Comúnmente al lado izquierdo, inferior, o derecho se ubicarán estas, sin embargo, debido a la flexibilidad de las AUIs, esto no tiene que ser tan fijo.
- PyraguaUI debe tener un área central sobre la cual se ubicarán los buffers de texto que permiten la edición, y es el área central de la aplicación. Se debe considerar la posibilidad de que determinados plugins puedan tomar control sobre esa área, ubicando algo aparte de los buffer de texto, por lo que no se debe limitar a ellos.
- La vista debe implementar una barra de estado, para que los plugins puedan colocar mensajes allí, y una interfaz para manejar esta barra de estados.
- La vista de Pyragua debe guardar su estado entre sesiones.
- La vista debe implementar una pantalla de splash.
Ideas para la implementación
GTK+ posee una libreria para definir barras de menús y de herramientas haciendo uso de XML. Esta libreria hace automáticamente la creación de estos elementos gráficos, y permite también por ejemplo mezclar varias definiciones para generar una que posea los elementos de ambos. Se puede implementar una libreria similar a esta para wxPython, que permite que los plugins definan de una forma simple como modifican la barra de herramientas y la de menús.
* Insertar ejemplos y enlace a la libreria de GTK+ *
Se debe manejar de manera centralizada los recursos gráficos, utilizando una clase administradora como intermediaria, por ejemplo AdministradorPyraguaUI. Este objeto expone la interfaz a los demás, y debería ser instanciado solo una vez por el objeto principal del editor.
La API
La api debe permitir control sobre el menú, y una forma de insertar barras de herramientas. La api debe incluir formas de control sobre la ventana principal de pyragua. La api debe permitir insertar ventanas dentro del área central de trabajo. La api debe permitir el uso de la barra de estado.
Ventajas/Limitaciones?
La implementación propuesta de PyraguaUI trae consigo una limitante, y es que al esconder tras una interfaz (API) a wxPython, no se tendrá acceso a toda la funcionalidad natural de wx. Dado el caso de que se necesite más funcionalidad, se hace necesario extender la API para implementarla. A cambio de esto, se abre la posibilidad de limitar a los plugins el acceso a la interfaz.
