Interfaces de usuario definidas en XML+CSS

10:20PM ene 23, 2004 in category Estándares by Alberto Gimeno

El tema, del que habla Aitor, de desarrollar interfaces gráficas de usuario mediante XML+CSS me parece muy interesante. Voy a aportar mi granito de arena.

Supongamos que tenemos un XML para definir los componentes como el que tenemos a continuación.

<frame id="frame">

<panel>

<label id="user-label"/>
<text-field id="user-text"/>

</panel>
<panel>

<label id="pass-label"/>
<text-field id="pass-text"/>

</panel>

</frame>

A través de CSS definiríamos el aspecto de la interfaz. Por ejemplo:

@media x-swing {
  #frame {
    layout: grid-layout(2, 1, 20, 30); /* filas, columnas, hgap, vgap */
    width: 400;
    height: 200;
  }

  panel {
    layout: border-layout(20, 20); /* hgap, vgap */
  }

  #pass-label, #user-label {
    position: border-layout.west;
    color: blue;
    font-size: 20px;
  }
}

Como se puede observar podemos explotar al máximo las capacidades de CSS creando nuestras propias funciones (como grid-layout y border-layout) y propiedades para definir colores, tipografías y layouts. También se podrían definir propiedades CSS diferentes según la librería gráfica que vayamos a utilizar mediante la creación de diferentes medias

La librería que interpretase esta información podría hacer uso de la implementación DOM de velero. Acceder a las propiedades sería algo parecido a esto:

Document document = ...; //se carga el documento
ViewCSS view = (ViewCSS)((DocumentStyle)document.getDefaultView());
Element e = ...; //un elemento cualquiera

//obtenemos un objeto que almacena las propiedades asignadas a este elemento
CSSStyleDeclaration declaration = view.getComputedStyle(e, null);

//obtenemos las propiedades individualmente
float width = declaration.getPropertyCSSValue("width").getFloatValue();
RGBColor color = declaration.getPropertyCSSValue("color").getRGBColor();

Como se observa, para obtener las propiedades CSS de un elemento sólo hay que llamar al método getComputedStyle() pasándole el elemento en cuestión. Esto nos devuelve un objeto CSSStyleDeclaration con el que podemos acceder a las propiedades a través de getPropertyCSSValue(String property).

Aitor, si estás interesado en llevar estas ideas a la realidad, aquí estoy para echarte una mano en lo que necesites. Supongo que tendré que liberar el código de Velero que por el momento está sólo en mi disco duro.

Aprovechando os dejo otra captura de pantalla de Velero. En este caso se puede ver un documento XML visualizándose en una versión antigua de Mozilla y a la derecha el mismo documento visualizándose en un componente que estoy desarrollando que permitirá hacer un editor/navegador web a través de Velero.

Comentarios[2]

Comentarios:

Perdona mi ignorancia, ¿para definir los componentes en XML os estáis basando en XUL?

Enviado por Carlos en enero 26, 2004 a las 09:55 AM GMT+01:00 #

La idea es definir la interfaz mediante XML. Existen muchos proyectos por ese estilo, XUL entre ellos. Lo que quería exponer es la idea de hacer un vocabulario XML (o basarse en uno ya existente) y combinárlo con CSS para los layouts y la apariencia.<br/><br/>

No conozco en profundidad otros proyectos para definir interfaces gráficas en XML. El ejemplo que he puesto no está basado en ninguno, lo he improvisado.

Enviado por gimenete en enero 26, 2004 a las 12:27 PM GMT+01:00 #

Enviar un comentario:
  • Sintaxis HTML: Deshabilitado