28 enero 2009

Simple Environment

Hace unos dias configuré mi joystick para usarlo como si fuera un mouse en las X y lo expliqué en este post. Prometí que haría alguna aplicación para adaptar el PC a la TV (y que sea usable). Aquí teneis la promesa en cuestión:

Haré alguna aplicación en Qt para convertir el PC en algo usable (ver stream, abrir archivos, navegar por internet, emulador de super nintendo...). Ya la publicaré por estos lares ;)

Pues bien, he empezado el proyecto y ya tengo algo "publicable". Se trata de un entorno de escritorio basado en Qt. Se llama Simple Environment (web del proyecto).

Para empezar, he desarrollado un pequeño framework llamado SFramework que provee al programador de herramientas para facilitar el desarrollo de aplicaciones para Simple Environment. Unos ejemplos de estas herramientas son:
  • SDirectoryBoard: pequeño widget que muestra el contenido de un directorio en forma de botones, al estilo del iPhone. Soporta paginación (cuando los archivos no caben en la pantalla, se añaden en la página siguiente). Además, interpreta Desktop Entries (accesos directos, para que nos entendamos) usando el estándar definido por freedesktop.org
  •  SEnvironment: ¿Quién no ha necesitado alguna vez saber dónde se encontraba el home del usuario? ¿O saber en qué directorios se guarda la configuración de las aplicaciones? Esta clase provee de métodos estáticos que informan sobre cosas como: la ruta al home del usuario, los directorios de configuración de las aplicaciones, los directorios de datos de las aplicaciones, los temas de iconos instalados en el sistema, etc. Y además, todo ello respetando el estandar de freedesktop.org
  • SIconProvider: una simple clase que provee al programador de soporte para temas de iconos, incluyendo herencia entre temas. Basado también en el estandar de freedesktop.org
Una vez creado un framework que me permitiera trabajar, me puse a desarrollar un SDesktop, una simple aplicación que, haciendo uso de SDirectoryBoard, mostrase los iconos del escritorio en pantalla completa. Además, tiene una toolbar superior para navegar entre las páginas del escritorio y una pequeña toolbar a su izquierda, que contiene un par de botones: "configurar" y "apagar".

Os dejo una screenshot de ejemplo:



El botón "configurar" ejecuta el proceso "scontrol", otra aplicación que he desarrollado especialmente para configurar Simple Environment. Se parece al panel de configuración de Firefox: tiene tres botones superiores ("Look and feel", "Applications" y "Paths"). Te permite configurar cosas como el tamaño de las fuentes, el tamaño de los iconos, el tema de iconos, el número de filas y columnas del escritorio...

Una screenshot:



Al guardar la configuración, scontrol hace una llamada mediante el sistema DBus (sistema de intercomunicación de aplicaciones desarrollado por freedesktop.org) al método "reload" de org.simple-environment.sdesktop. Así se consigue que el escritorio actualice su configuración.

El proyecto está hosteado en sourceforge.net, y esta es su página.

De momento carece de documentación sobre SFramework, pero en cuanto tenga tiempo subiré algo. Lo que sí que contiene son las instrucciones de instalación a partir del repositorio SVN.

Finalmente, quiero aclarar que esto se trata de un proyecto chorra, para satisfacer mis necesidades, por eso le voy a ir añadiendo funcionabilidades y voy a ir desarrollando aplicaciones según las necesite. Podeis hacer aportaciones y sugerencias, por supuesto.

PD: algunos se preguntarán "¿Por qué este tío es tan matado y no ha cogido uno de los millones centros multimedia que hay ya creados?". Simple: he probado varios y a todos les falta alguna funcionabilidad que tienen los demás.

Por ejemplo, si ahora quiero crear un gestor de archivos, es tan simple como usar SDirectoryBoard, cuatro chorradas más del framework de Qt y un poco de tiempo.

¿Que ahora me hace falta un cliente de IRC? Pues lo mismo. ¿Que le quiero añadir el texto-hablado como ya comenté en este post? Pues en un flis lo hago y puedo jugar a algún emulador mientras oigo lo que dicen por el IRC.