Programando para Haiku – Barras de menús – Parte III

Seguimos con los tutoriales de Haiku, hoy veremos como crear barras de menú. Partimos del código de la ventana vacía, lo tienes en la foto junto con el comando de compilación.

MiAplicacionHaikuCodigo
Haz click en la imagen para verlo en grande

Debemos saber que en la API de BeOS hay tres clases que nos van a servir.

  • BMenuBar, se trata de la barra en sí, que esta pegada a la ventana. Un BMenuBar contiene BMenus.
  • BMenu, son los menús en sí. Un menú es un elemento que contiene acciones, organizadas como si fuera una lista. Los menús no definen acciones, pero sí su organización. Así, a un BMenu le tendremos que añadir BMenuItems u otro BMenus (menús anidados).
  • BMenuItem, son las acciones de los menús. Cada BMenuItem tiene la capacidad de generar un BMessage nuevo, listo para ser procesado por nuestra aplicación.

En la imagen se puede ver perfectamente

BMenu

Vamos a crear una barra de menú con dos menús, uno de ellos simple y otro con un menú anidado y un separador.

Y el resultado es el siguiente:

BMenuBar

Como vemos, SetShortcut hace que los menús sean seleccionables con combinaciones de teclado. Hay que tener en cuenta que en BeOS, la tecla que en Windows normalmente Ctrl, es Alt. Así operaciones como copiar y pegar con Alt+C y Alt+V. Para responder al evento solo hace falta escuchar en la función MessageReceived. En el caso de B_QUIT_REQUESTED, el mensaje ya está implementado en la función QuitRequested.

Programando para Haiku – File panel – Parte II

Continuamos los tutoriales de programación en Haiku. Hoy veremos como usar el File Panel. ¿Qué es el File Panel? El File Panel es el diálogo que nos aparece cuando queremos abrir o guardar un archivo o carpeta. En todos los sistemas operativos gráficos es similar.

File Panel de Windows

BFilePanel

La clase básica es BFilePanel. Esta clase se encarga de mostrar esa ventanita que nos deja elegir el archivo o carpeta para abrir o para guardar. Lo primero que tenemos que saber si queremos hacer un File Panel es si va a ser para abrir un archivo existente o para guardar un nuevo archivo. Así, distinguimos entre B_OPEN_PANEL y B_SAVE_PANEL. Si estamos dentro de un B_OPEN_PANEL además indicaremos si aceptamos archivos, carpetas, enlaces simbólicos o alguna combinación de estas cosas. Por último, ¿cómo recibimos la información del panel? Pues usando BMessage, como es habitual en Haiku/BeOS. Pero hay que indicar quién va procesar el mensaje, el conocido como BMessenger. Veamos código:

En este código creamos un file panel para abrir un archivo. El BMessenger encargado de procesarlo será el del mismo contexto en el que se ejecute este código. Hay que tener en cuenta que tanto BApplication como BWindow heredan de BMessenger y por tanto cualquier objeto de estas clases es apto. El siguiente parámetro es la carpeta por defecto, que con NULL la dejamos a elección de Haiku. Luego indicamos que queremos abrir archivos, no carpetas ni enlaces simbólicos. Por último especificamos el ID del BMessage que enviará el panel. Esto nos servirá para después saber que ID tenemos que leer dentro de la función MessageReceived del BMessenger. Por último mostramos el panel para que el usuario decida el archivo a abrir. Si la acción es cancelada también será disparado el mensaje, tendremos que comprobar si el usuario eligió el archivo o cerró el diálogo.

Haiku File Panel

Leer la respuesta

Dentro de la función MessageReceived del BMessenger tenemos que accionar un caso especial si el ID del BMessage es el que hemos especificado en el panel.

Tenemos que comprobar si el mensaje tiene la propiedad “refs”. La propiedad “refs” la ajusta el File Panel cuando se ha seleccionado un archivo. Si la propiedad existe entonces lo leemos. Leeremos una entryref. Un entryref es una entrada dentro del sistema de archivos. Sin embargo esta estructura es de bajo nivel y no sabe exactamente donde se ubica. BEntry representa localizaciones dentro del sistema de archivos. Se construye con un entry_ref y esta clase ya sabe donde se ubica de forma legible por un humano (o un programador perezoso). Si queremos saber la ruta del archivo antes tendremos que crear un objeto vacío BPath que llenaremos con contenido. Finalmente la ruta, como string, la podremos leer llamando a la función Path dentro del objeto BPath.

Ya hemos visto como se usan los file panel en Haiku. Los file panel de guardar archivo se programan exactamente igual cambiando esa pequeña flag al principio.

Programando para Haiku – BApplication, BWindow y BButton – Parte I

Hoy voy a comenzar una serie de tutoriales donde explicaré la programación de una apliación en Haiku. Para ello vamos a usar C++ y la BeAPI. Siempre que tengais cualquier duda podéis visitar la documentación oficial: tanto la antigua de BeOS en el BeBook y la nueva de Haiku en Haiku API. Aun así hay APIs nuevas que todavía no aparecen documentadas. En ese caso hay que recurrir al código fuente.

Librerías en Haiku

Haiku (y BeOS) comparte con UNIX muchas características de bajo nivel. El tema de las librerías es uno de ellos. También han de empezar por lib y terminar por .so si son compartidas y .a si son estáticas. Para compilar también se usa GCC. Sin embargo hay una pequeña diferencia con el resto de sistemas UNIX. En UNIX normalmente disponemos de una librería del C, libc y una librería de funciones matemáticas, libm. En Haiku no existe libm, en cambio existen muchas más, libroot y libbe, para interactuar con el sistema de manera básica, libtracker, con funciones relacionadas con el explorador de archivos, libnetwork y libnetapi, con funciones de red, y muchas otras.

Además la API se divide en Kits, cada Kit se encarga de una tareas diferentes dentro del sistema operativo. AppKit, Game Kit, Interface Kit, Media Kit, Storage Kit, etc… Si queremos usar la funcionalidad de un kit tendremos que revisar que hemos añadido la librería correcta al compilador y que hemos añadido #include dentro del código que lo usemos.

Un hola mundo

Vamos a empezar por lo simple, una aplicación que muestre una ventana y ya.

Creamos un archivo de C++, será el punto de inicio de nuestra aplicación. Como sabéis, el punto de inicio de un programa de C o C++ es la función main.

Hemos creado un objeto llamado app del tipo AplicacionPrueba y después hemos ejecutado la aplicación. AplicacionPrueba tiene que ser del tipo BApplication. Es la clase básica de todas las aplicaciones Haiku/BeOS. BApplication provee de mensajería entre los distintos procesos del programa (hay que tener en cuenta que BeOS se diseñó pensando en el multiproceso). Vamos a ver como definimos AplicacionPrueba

Las Application necesitan un MIME type, al igual que se usa para indicar los tipos de archivo. No es necesario que sea real. Además hemos creado un objeto VentanaPrueba y la mostramos. VentanaPrueba es del tipo BWindow y es la ventana básica de Haiku, lo que vemos. Veamos la definición:

BWindow necesita un tamaño, que es indicado con BRect, un título, un estilo (por defecto es BTITLEDWINDOW, pero podemos tener ventanas sin bordes o modal) y opciones varias. En las opciones varias podemos especificar que al cerrar la ventana se cierre la aplicación (BQUITONWINDOWCLOSE), que el usuario no pueda cambiar su tamaño (BNOTRESIZABLE), que no se pueda minimizar (BNOTMINIMIZABLE) y otras opciones por el estilo.

Además dentro de la clase hemos definido dos funciones virtuales, es decir, que tienen implementación por defecto de la clase padre, BWindow, pero nosotros podemos modificar su comportamiento.

QuitRequested es llamada cuando algo pide el cierre de la ventana. El objeto global beappmessenger es del tipo BApplication, pero está definido en todos los puntos de nuestra aplicación sin que nosotros hagamos nada. Gracias a este objeto podemos enviar mensajes entre procesos. En este caso enviamos el mensaje a la aplicación de BQUITREQUESTED. Y luego llamamos a la función sin modificar.

MessageReceived es muy importante. Se encarga de procesar todos los mensajes que recibe la ventana. Para distinguir los mensajes (que son del tipo BMessage) tenemos que inspeccionar la propiedad what. Se trata de un valor de tipo uint32. Hay algunos ya definidos por el sistema como BQUITREQUESTED pero nosotros podemos definir más. Veremos más tarde como. De momento simplemente devolvemos el procesado de mensajes a BWindow padre.

Con esto ya podemos compilar.

Añadiendo BView, BButton y BGroupLayout

Ahora vamos a añadir cosas a nuestra ventana sosa. Ponemos una vista dentro de la ventana. Las vistas en Haiku son muy potentes pero eso lo trataré en otro momento. A esa vista le añadiremos un botón.

Aquí hemos hecho varias cosas. Por una parte he creado un layout horizontal. Es decir, dispongo el espacio de la ventana de manera horizontal, según se vayan añadiendo elementos lo harán a la derecha. Esto no estaba en BeOS y es particular de Haiku, pero recomiendo usar este sistema pues permite realizar un responsive design. Creamos una vista o panel. Bounds() indica que cubra todo el espacio disponible. El resto son propiedades de la vista más o menos estándar. Con SetViewColor le podemos poner un color de fondo, y con SetLayout le aplicamos el layout previamente creado.

Creamos un botón, que es del tipo BButton. BButton tiene muchos constructores si revisais la documentación pero este es muy cómodo si usamos el sistema de layouts. Simplemente indicamos el texto que va a mostrar y el mensaje que envía. En este caso NULL pues no vamos a poner ninguno.

sizer->AddView() lo usamos para añadir el botón al layaout y AddChild para añadir la vista a la ventana. Puedes compilar.

Añadiendo eventos. Mensajería con BMessage. Diálogo con BAlert.

Vamos ahora a crear un evento para el botón. Cuando pulsemos el botón mostrará un mensaje al usuario.

Los eventos se realizan por el sistema de mensajería basado en BMessage y BHandler. Para crear un BMessage necesitamos un ID, que es del tipo uint32. Eso es lo mínimo y con eso ya serviría para este caso.

Pero los mensajes pueden llevar información adicional de cualquier tipo. Por ejemplo si queremos añadir además una cadena de texto al mensaje usaremos AddString.

Podremos recuperar el valor en cualquier momento con FindString.

Ahora si vamos a MessageReceived podemos añadir código que gestione este tipo de mensaje.

Con un simple case gestionamos el mensaje. Para mostrar un diálogo simple se puede usar BAlert. Es muy simple, indicamos el título, el contenido del mensaje y el texto del botón que aparecerá. Y con Go lo mostramos.

Esta ha sido la primera parte del tutorial. Os ha gustado. Hay algo que no haya quedado claro. Comentádmelo.

Kovel 1.0, diseña modelos en 3D usando vóxeles

Hoy me he decidido y finalmente he decidido publicar la primera versión pública de Kovel. Estuve trabajando en esta aplicación a finales de 2015 y no he hecho muchos cambios últimamente por lo que voy a publicarlo antes de que ¡se me olvide!

¿Qué es Kovel?

Kovel es una aplicación para Linux, Haiku y Windows para diseñar modelos en 3D usando el concepto de los vóxeles. ¿Qué es un vóxel? Se ha definido un vóxel como un píxel con volumen, es decir, el equivalente a un píxel en entornos tridimensionales. Los vóxeles nunca existieron (los gráficos 3D no funcionan a través de vóxeles, son siempre vectoriales) y son simplemente un concepto artístico, muy sencillo de usar.

Kovel-1

KovelRotate

¿Cómo funciona?

Es muy sencillo. Al crear un nuevo archivo seleccionaremos el tamaño de la rejilla. Por defecto la rejilla está puesta en 5. Esto quiere decir que el modelo tendrá una dimensión máxima de 5x5x5. Ahora seleccionamos el material. En esta versión solo hay colores puros como materiales, en futuras versiones habrá texturas también. Ahora simplemente hacemos click en los elementos de la rejilla. Vemos como se pone un vóxel en la posición que hemos indicado en la rejilla. Para subir y bajar de piso usamos los botones Up y Down. Podemos rotar y hacer zoom al modelos para centrarnos en determinadas áreas. En cualquier momento podemos deshacer. Los modelos se guardan como ficheros KVL. Es un formato que he tenido que inventar, es compacto y a la vez muy fácil de manipular. Está basado en BSON, la implementación binaria de JSON hecha por la gente de MongoDB. Pero además podemos exportar nuestras creaciones al formato Collada DAE (se puede abrir con Blender, Maya, etc).

BlenderKovel

¿Dónde puedo obtenerlo?

Todo el código fuente está en GitHub y se compila usando CMake. Pero además hay disponible un PPA para usuarios de Ubuntu. Lamentablemente por temas de dependencias con CMake, solo está disponible en Wily (15.10) y Xenial (16.04), aunque si os descargais el DEB manualmente quizá os funcione también en Trusty (14.04) y Jessie (Debian 8). Los usuarios de Windows tienen un ejecutable también para 64 bits (no he compilado para 32 todavía) pero requiere las DLL de wxWidgets 3.0. Los usuarios de Haiku tendrán que conformarse de momento con el código fuente. Todas las descargas están en la página oficial de Kovel (incluidas las DLL).

KovelHaiku

¿Algo más?

Sí, aparte de Kovel, la aplicación gráfica, también existe kovelcli, la interfaz de línea de comandos. Permite realizar la conversión de KVL a Collada DAE de manera automática.

Finalmente, doy las gracias a todos los que vayan a probar Kovel, un simple comentario con sugerencias o de agradecimiento si os ha servido vale mucho para mí. ¡Felices vóxeles!

Un repaso por las aplicaciones de Haiku

Haiku dispone de un catálogo pequeño pero interesante de aplicaciones que merecen la pena ser vistas. Voy a probar estas aplicaciones en una versión nightly recién descargada del sitio de Haiku (hrev49344)
Solo voy a usar los paquetes binarios. En Haikuports hay todavía más software, pero requiere compilación y puede estar desactualizado.

HaikuDepot

Se trata de la tienda de aplicaciones de Haiku. Similar a Ubuntu Software Center. Desde aquí podemos instalar cientos de aplicaciones ya compiladas para Haiku. Además permite comentar los progranas con una valoración.
HaikuDepot dispone de una versión web

HaikuDepot

HaikuDepot2

Instalar

HaikuDepot ya viene instalado en Haiku

WonderBrush

WonderBrush se trata del editor gráfico de Haiku para imágenes de mapa de bits como PNG, JPEG o BMP.

La ventana principal puede contener cualquier número de documentos llamados Canvas. Un canvas tiene asociado un nombre y una resolución por píxel además de muchas otras propiedades. También referencia a dos archivos, uno como formato de exportación y otro como formato nativo.
Cada canvas puede tener cualquier número de capas, actualmente representadas como una lista. Cada capa representa una imagen del tamaño del canvas. Dependiendo del método de fusión de capas, estas son unidas para formar la imagen final.

WonderBrush WonderBrush2

Instalar

Lo puedes encontrar en HaikuDepot o

Icon-O-Matic

Icon-O-Matic es la aplicación de gráficos vectoriales nativa de Haiku. Trabaja con el formato HVIF (Haiku Vector Icon Format) y está pensada para diseñar iconos principalmente. También exporta a PNG y SVG.

IconOMatic

Instalar

Ya viene instalado por defecto en Haiku

WebPositive

WebPositive es el navegador web por defecto en Haiku. Usa una versión especial de WebKit adaptada a Haiku y algo retrasada en funcionalidad.

haiku-webpositive

MultiversosHaiku

Instalar

WebPositive ya viene instalado

PoorMan

PoorMan es un ligero servidor HTTP totalmente gráfico.

PoorMan

Instalar

PoorMan ya viene instalado por defecto en Haiku

Vision

Vision es un cliente IRC

Vision

Instalar

Ya viene instalado por defecto en Haiku

People

People es el gestor de contactos de Haiku

People

Instalar

Ya viene instalado por defecto en Haiku

Album

Una aplicación para tratar los metadatos de las imágenes

Album

Instalar

En HaikuDepot o pkgman install album

ArmyKnife

Una aplicación para tratar los metadatos de las canciones

ArmyKnife

Instalar

En HaikuDepot o pkgman install armyknife

BeAE

BeAE es una gran aplicación junto a Wonderbrush e Icon-O-Matic para la edición multimedia. En este caso podremos editar audio de manera muy intuitiva. En su momento fue una aplicación de pago para BeOS.

BeAE

Instalar

En HaikuDepot o pkgman install beae

BePDF

El visor de documentos PDF de Haiku

BePDF

Instalar

En HaikuDepot o pkgman install bepdf

BeShare

Haiku también dispone de un sistema de transferencia de archivos P2P propio. Se trata de BeShare y esta es la implementación referencia. BeShare como no podía ser menos, tiene un magnífico soporte para búsquedas.

BeShare

Instalar

En HaikuDepot o pkgman install beshare_x86. Para permitir la conexión entre distintos sistemas operativos a las redes BeShare se creó JavaShare

BeZilla

El port de Mozilla Firefox para Haiku. Está muy desactualizado y no lo recomiendo.

BeZilla

Instalar

En HaikuDepot o pkgman install bezilla

MailNews

El port de Mozilla Thunderbird para Haiku. Está igual de desactualizado que BeZilla pero al tratarse de correo electrónico puedes tener menos problemas al usarlo.

MailNews MailNews-2

Instalar

En HaikuDepot o pkgman install mailnews

Beam

Se trata de un cliente de correo electrónico plenamente integrado en Haiku

Beam

Instalar

En HaikuDepot o pkgman install beam

BlogPositive

Una aplicación para escribir en blogs de WordPress y otros proveedores sin tener que usar el navegador

BlogPositive

Instalar

En HaikuDepot o pkgman install blogpositive

CapitalBe

Una aplicación de contabilidad sencilla y fácil de empezar a utilizar. GnuCash, que es el que uso en Linux, es mucho más complejo de empezar a usar.

CapitalBe CapitalBe2

Instalar

En HaikuDepot o pkgman install capitalbe

Sum-It

Una sencilla hoja de cálcula para realizar operaciones no muy complejas. La mejor hoja de cálcula es la de GoBe Productive, pero sigue siendo un producto privado que no se puede adquirir.

SumIt

Instalar

En HaikuDepot o pkgman install sum_it

Caya

Caya es una aplicación que unifica la mensajería instantánea el estilo de Pidgin. Soporta AIM, Google Talk, Jabber, Facebook, MSN y Yahoo.

Caya

Instalar

En HaikuDepot o pkgman install caya

LibreCAD

LibreCAD es una aplicación de CAD 2D escrita en Qt.

LibreCAD

Instalar

En HaikuDepot o pkgman install librecad_x86

Pe

Pe es el editor de texto más usado en Haiku. Tiene resaltado de sintaxis y soporte para extensiones.

Pe Pe-2

Instalar

Pe viene instalado por defecto en Haiku

NetSurf

NetSurf es un navegador ligero que no implementa JavaScript. Tiene una arquitectura interna muy limpia. Todo está contenido y modularizado. Está diseñado pensando en Haiku, RISC OS y otros sistemas desconocidos, aunque en Linux también funciona.

NetSurf

Instalar

En HaikuDepot o pkgman install netsurf

BePodder

BePodder es una aplicación para escuchar tus podcasts favoritos por RSS

BePodder

Instalar

En HaikuDepot o pkgman install bepodder

A-Book

Una aplicación de calendario con recordatorios

Instalar

En HaikuDepot o pkgman install a_book

BurnItNow

Una aplicación gráfica y fácil de usar para grabar CDs de todo tipo (datos, audio, rescate, …)

BurnItNow

Instalar

En HaikuDepot o pkgman install burnitnow_x86

Clockwerk

Ya hemos hablado de Wonderbrush, Icon-O-Matic y BeAE. Le toca el turno a Clockwerk, el editor de vídeo no linear open source que trabaja en Haiku.

Clockwerk

Instalar

En HaikuDepot o pkgman install clockwerk

LMMS

LMMS es una completa suite de edición de audio pensada para Linux pero que funciona también en Haiku.

LMMS

Instalar

En HaikuDepot o pkgman install lmms_x86

MilkyTracker

MilkyTracker es un programa para componer música de estilo 8 bits o tune.

MilkyTracker

Instalar

En HaikuDepot o pkgman install milkytracker

Paladin

Paladin nace con la idea de ser el IDE de referencia en Haiku. Trae plantillas y ejemplos y se integra con el resto de Haiku para no reduplicar esfuerzos. Por ejemplo, el editor de texto es Pe.

Paladin

Instalar

En HaikuDepot o pkgman install paladin

QEMU

QEMU es un contenedor de máquinas virtuales open source que permite emular arquitecturas diferentes a la de nuestro ordenador. Con QEMU podemos ejecutar Linux dentro de Haiku.

Instalar

En HaikuDepot o pkgman install qemu_x86

Yab IDE

Yab es un entorno que permite programar aplicaciones para Haiku en BASIC. Yab IDE es el IDE para este entorno espefífico.

Yab Yab2

Instalar

En HaikuDepot o pkgman install yab_ide

Juegos

En este apartado voy a mencionar algunos juegos disponibles para Haiku. Todos se pueden encontrar en HaikuDepot

BeMines

  • BeLife – pkgman install belife
  • BeMines – pkgman install bemines
  • Critical Mass – pkgman install criticalmass
  • DOSBox – pkgman install dosbox_x86
  • Flare – pkgman install flare_x86
  • FreedroidRPG – pkgman install freedroidrpg_x86
  • LBreakout2 – pkgman install lbreakout2
  • LMarbles – pkgman install lmarbles
  • LTris – pkgman install ltris
  • OpenTTD – pkgman install openttd_x86
  • Pipepanic – pkgman install pipepanic
  • Road Fighter – pkgman install roadfighter
  • Rocks’n’diamonds – pkgman install rocksndiamonds_x86
  • SDL Lopan – pkgman install sdllopan
  • Slime Volley – pkgman install slime_volley
  • Super Transball 2 – pkgman install super_transball
  • XRick – pkgman install xrick