Google
Web dns.bdat.net

Kdialog

Introducción a Kdialog

Kdialog es un programa que se llama desde la línea de órdenes y abre una ventana en modo gráfico según la opción que le suministremos en la llamada. Por ejemplo: kdialog -- title "Mi ventana" -- msgbox "Hola Mundo" abriría una ventana de mensaje titulada "Mi ventana" y con el texto "Hola Mundo";

Tabla 1. Opciones de Kdialog

Opción descripción
-- yesno Cuadro de texto de preguntas con botones de si/no
- - yesnocancel texto Cuadro de texto de mensajes con botones de si/no/cancelar
- - warningyesno texto Cuadro de aviso de mensajes con botones de si/no
- - warningcontinuecancel texto Cuadro de aviso de mensajes con botones de continuar/cancelar
- - warningyesnocancel texto Cuadro de aviso de mensajes con botones de si/no/cancelar
- - sorry texto Cuadro de mensaje de 'Lo sentimos'
- - error texto Cuadro de mensaje de 'error'
- - msgbox texto Cuadro de diálogo de mensaje
- - inputbox texto inicial Cuadro de diálogo de entrada
- - password texto Diálogo de contraseña
- - textbox file [ancho] [alto] Cuadro de diálogo de texto
- - combobox texto [tag item] [tag item] ... Diálogo de lista desplegable
- - menu texto [tag item] [tag item] ... Diálogo de menú
- - checklist texto [tag item status] ... Diálogo de lista de comprobación
- - radiolist texto [tag item status] ... Diálogo de lista de selecciones excluyentes
- - getopenfilename [DirInicial] [filtro] El diálogo de archivos abre un archivo existente
- - getsavefilename [DirInicial] [filtro] Diálogo de archivos para guardar un archivo
- - getexistingdirectory [Dirinicial] Diálogo de archivo para seleccionar un directorio existente
- - getopenurl [startDir] [filtro] El diálogo de archivos abre una URL existente
- - getsaveurl [startDir] [filtro] Diálogo de archivos para guardar una URL
- - title texto Título de diálogo

Podéis encontrar más unformación en http://developer.kde.org/documentation/tutorials/kdialog/t1.html o ejecutar kdialog - -help

Kdialog en shell

Ventanas informativas

Por ventanas informativas me refiero a ventanas que simplemente muestran una información sin pretender leer ningún valor de entrada. En este caso simplemente realizamos la llamda a kdialog sin necesidad de esperar ningún valor de retorno. Vemos un ejemplo:

kdialog --title "Atención" --msgbox " Su selección es:1"

Figura 1. apariencia de un msgbox:



con lo que aparecería una ventana con los título y contenido especificados en la llamada. No cabe esperar más de este tipo de ventanas. Digo este tipo de ventanas porque podemos encontrarlas que pongan simplemente un mensaje (- - msgbox), que muestren un mensaje de indisponibilidad (- - sorry)

Figura 2. Resultado de kdialog - - sorry "Sorry, lo siento"

o un mensaje de error (- - error).

Figura 3. Resultado de kdialog - - error "Se ha producido un error"

Todas ellas son iguales, sólo se diferencian en el gráfico que aparece en ellas.

Ventanas de lectura

Por ventanas de lectura me refiero a ventanas que se muestran para leer una información que puede ser, una cadena de texto, una contraseña, una opción de algún tipo de menú, un valor si/no/cancelar o la selección de un fichero. En este caso realizamos la llamda a kdialog pero tendremos que guardar el retorno de alguna forma. Vemos un ejemplo:

Si ejecutamos:

kdialog --title "Ejemplo" - -yesnocancel "¿Seguro que quiere terminar el programa?"

Figura 4. Resultado de kdialog - - yesnocancel "yesnocancel"

Nos aparecerá una ventana con tres botones, , No y Cancelar. Una vez que hemos pulsado en uno de ellos, en la variable de shell $? tendremos el código de terminación de la orden, que será:

Tabla 2. Opciones de lectura en Kdialog

Botón valor de $?
0
No 1
Cancelar 2

Esto es lo más simple que podemos hacer, pero también existe la posibilidad de leer una cadena de texto, el nombre de una fichero o seleccionar una opción. En ese caso tenemos que guardar el resultado de la lectura en una variable para podelo manipular posteriormente. Además seguiremos teniendo el código de salida de la operación en la variable $? para el caso de que hayamos pulsado la tecla cancelar. En este caso el código corresopondiente a Cancelar toma el valor 1. Vemos un ejemplo:

kdialog - - inputbox Ventana predeterminado

Mostraría una ventana con el valor inicial "predeterminado", pero claro ¿donde se guarda el resultado de la lectura?. Necesitamos una variable en la que guardar el resultado de la ejecución. Deberíamos poner:

VALOR=`kdialog - - inputbox Ventana predeterminado`

o en el caso de bash:

VALOR=$(kdialog - - inputbox Ventana predeterminado)

echo $VALOR

debería mostrar el valor que hemos intorducido en la ventana. El proceso sería el mismo para leer un nombre de fichero o la opción del menú. La diferencia sólo sería la opción con la que llamamos a kdialog.

Kdialog en PHP

Ahora es cuando entramos en el objetivo de este documento, la integración de PHP con KDE.

¿Por qué PHP? Para mí la respuesta es muy fácil, por todo, por su facilidad de aprendizaje, por su disponibilidad y facilidad de instalación, por la amplia gama de funcionalidades que presenta y por la gran difusión que ha tenido como lenguaje de programación para la web. No obstante, todo lo que hemos visto aquí sería aplicable a otros lenguajes.

Ventanas informativas

Estamos en el mismo caso que vimos anteriormente para la programación en la shell. Sólo necesitamos lanzar la ejecución de kdialog sin necesidad de esperar ningún valor de retorno. Para ejecutar la orden usaremos la función system que proporciona PHP para estos casos:

system("kdialog --title \"Atención\" --msgbox \" Los datos se han insertado correctamente\" ");

con lo que aparecería una ventana con los título y contenido especificados en la llamada. Como indicamos anteriomente, no cabe esperar más de este tipo de ventanas, - - msgbox, - - sorry, o - - error.

Ventanas de lectura

Si tenemos que leer algún valor, necesitaremos siempre el código de salida para saber si hemos pulsado si/no/cancelar, y en su caso, el valor que hemos leído. En este caso realizamos la llamada a kdialog y como hicimos en el caso de la shell, tendremos que guardar el retorno de alguna forma: Vemos un ejemplo:

Si ejecutamos:


$respuesta=system("kdialog - - title \"Ejemplo\" - - inputbox \"Dime tu nombre"", $error);
if ($error==0)
        system("kdialog - - title \"Atención\" - - msgbox \" Te llamas $respuesta\" ");
else
        system("kdialog - - title \"Atención\" - - msgbox \" Has pulsado cancelar\" ");

Y en este caso tendremos los códigos de salida:

Tabla 3. Opciones de lectura en Kdialog

Botón valor de $?
0
Cancelar 1

Observamos como el código de salida de Cancelar es 1 cuando sólo tenemos dos botones.

Creo que no merece la pena, dada la simplicidad, detallar cada una de las opciones salvo las de lectura de ficheros y las que crean menúes con distintas opciones.

Ventanas de lectura de ficheros

La característica principal de la lectura de ficheros es la posibilidad de recordar el último direcorio del cual hemos seleccionado un fichero y de establecer un filtro para el nombre de los ficheros.

return(system("kdialog --title \"titulo\" --getopenfilename :et1 \"$filtro\"", $error));

  • Recordar el último directorio:

    Simplmente añadimos a - - getopenfilename una etiqueta precedida de ":" que se utiliza para contener la referencia del último directorio abierto. En el anterior ejemplo hemos puesto :et1.

  • Los filtros que podemos establecer se basan en una cadena de texto que en el ejemplo anterior hemos denominado $filtro y se pueden establecer respecto a dos criterios, el nombre de fichero y el tipo MIME del fichero. Ponemos dos ejemplos que resultan significativos:

    • Por nombre de fichero:

      "*.swx *.txt *.doc *.abw |Documentos de texto"

      y mostraría sólo los ficheros que verificaran esos nombres.

    • Por tipo MIME:

      "image/png text/html text/plain"

      y mostraría sólo los ficheros que verificaran esos tipos de fichero.




Ventanas de lectura de menúes

Las opciones de los menúes se pueden pasar a kdialog son:

  • Para --menu "valor1 Texto1 valor2 Texto2 valor3 Texto3 ..." donde Texto1 sería el texto que se muestra en la ventana y valor1 sería el valor que se lee.

  • Para --checklist "valor1 Texto1 off valor2 Texto2 on valor3 Texto3 off..." donde off indica que la opción no está preseleccionada y on que sí está preseleccionada.

  • Para --combobox "Texto1 Texto2 Texto3..." donde estos serían los valores que aparecen el el desplgable y que se leen al seleccionarlos.



Si en nuestro script en PHP queremos definir una función para llamar a algún tipo de ventanas de tipo menu, en algunos casos puede que nos interese pasar a la función la lista de valores contenida en un array. En este caso podemos usar las funciones serialize> para convertir el array en una cadena y unserialize> para convertir la cadena de nuevo en un array. Por cuestiones pedagógicas he escogido este método para pasar valores a las funciones de los ejemplos que vienen a continuación, pero en la mayoría de los casos será mejor pasarlo directamente como una cadena de texto generada fuera de la función.