Copyright © 2004 Equipo de desarrollo de Kommander
Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia Libre de Documentación de GNU, versión 1.1 o posterior publicada por la Free Software Foundation; con secciones no invariantes, con textos que no estén en la cubierta, y con textos que no estén en la contraportada. Se incluye una copia de la licencia en the section entitled "GNU Free Documentation License".
Kommander es un juego de herramientas que le permiten crear cuadros de diálogo dinámicos del GUI que se generan, según su estado, de un trozo de texto. El trozo de texto puede ser una línea de órdenes para un programa, un trozo de código, documentos comerciales que contengas mucho texto repetitivo y con plantillas y así sucesivamente. El texto generado como resultado se ejecutará como un programa de la línea de órdenes (de ahí el nombre, “Kommander”), se escribirá en un archivo, se pasará a un guión para un procesamiento extendido y, literalmente, cualquier otra cosa en la que pueda pensar. ¿Qué es lo mejor de todo? Que no es necesario que escriba ni una sola línea de código.
Tabla de contenidos
Kommander es una herramienta visual para construir cuadros de diálogo, que se puede expandir para crear aplicaciones de ventana principal completas. El primer objetivo es crear tanta funcionalidad como sea posible sin usar un lenguaje de guiones. Se proporcionan las siguientes características:
Los especiales vienen precedidos de una “@”, como @widgetText. Los especiales también ofrecen otras características como el valor de un widget, funciones, aliases, variables globales y demás.
La integración con DCOP permite a los cuadros de diálogo de Kommander controlar y ser controlados en las interacciones con otras aplicaciones de KDE. Esta característica es muy poderosa.
Las señales y los slots son menos intuitivos para los usuarios noveles. Se está revisando cómo procesar las cosas en la próxima versión principal. Ofrecen un modelo de eventos limitados para cuando se pulse un botón o cambie un widget. En combinación con el “Texto de la población”, son bastante poderosos.
La característica clave de los cuadros de diálogo de Kommander es que puede enlazar texto (Kommander Text) a un widget. Así, si tiene @widget1 y @widget2 y son líneas de edición, puede definir que Kommander muestre su contenido introduciendo @widgetText en el área de texto de Kommander. Luego introduzca hola en @widget1 y mundo en @widget2. Un botón puede tener la cadena Mi primer programa @widget1 @widget2 en Kommander. Si ejecuta este cuadro de diálogo desde una consola, la salida que obtendrá será Mi primer programa hola mundo en Kommander.
Con suerte, comenzará a ver una tenue luz de todo el potencial. Kommander le permite un modelo de desarrollo muy rápido para aplicaciones sencillas porque le evita pensar demasiado en el lenguaje e invertir todas esas energías en un modelo conceptual más básico y natural. En los lenguajes de programación, se pretende definir conceptos y poner una capa entre los conceptos y la implementación que impida progresar sin tener en cuenta las minucias. Kommander pretende minimizar esta capa.
Kommander también pretende construirse según los estándares. Se construye con el entorno de trabajo Qt™ Designer y crea archivos *.ui que renombra a *.kmdr. Puede importar de forma sencilla widgets de KDE y puede hacer todo esto sin tener que recompilar Kommander, usando complementos.
Otro factor significativo de Kommander es cómo afronta los requisitos del lenguaje. Los lenguajes de programación pueden ser cosas maravillosas, pero tienden a tener sus propios dogmas y los zelotas a menudo consiguen proporcionar un avance al diseño de GUI en un entorno de desarrollo integrado. Irónicamente, la aceptación de ese IDE es limitado, porque hay mucha gente deseando adoptar un lenguaje todavía más nuevo que tenga acceso a una característica deseada. Ciertamente, no es razonable esperar que la gente tenga que cambiar una docena de ves entre lenguajes para tener acceso a varios juegos de características. Al ser neutrales en cuanto al lenguaje y permitir que un cuadro de diálogo se pueda extender usando cualquier lenguaje de guiones, Kommander se posiciona como una opción de amplio espectro. Se pueden usar varios lenguajes de guiones en un mismo cuadro de diálogo y las aplicaciones se pueden modificar usando un lenguaje diferente al que empleó originalmente el desarrollador e ir convirtiéndolo y extendiéndolo gradualmente. Los nuevos widgets y características están disponibles de forma inmediata para todos los lenguajes disponibles.
Esperamos que Kommander comience a obtener el soporte de los desarrolladores y el reconocimiento necesario para alcanzar el potencial que ofrece. Nuestro objetivo final es hacer que Kommander sea útil para que los usuarios noveles extiendan y creen sus aplicaciones. Al mismo tiempo, debería ser una buena herramienta para crear prototipos. También abre la puerta a la promesa del código abierto con una nueva vía. Sabemos que la gente puede ampliar los programas GPL, pero el hecho es que muy pocos tienen las habilidades necesarias. Con Kommander, ese número se multiplicará por un factor muy grande. Algunas aplicaciones pueden ser más lógicas como una aplicación de Kommander. Ya lo estamos usando en algunas áreas que permiten la capacidad de extensión en Quanta Plus.
Esperamos que disfrute de Kommander. Haga el favor de ayudarnos, enviando informes de errores y cuadros de diálogo de ejemplo, así como cualquier petición que considere oportuna. Puede apuntarse a nuestra lista de usuarios para obtener ayuda en el desarrollo de aplicaciones de Kommander enhttp://mail.kdewebdev.org/mailman/listinfo/kommander
Los mejores deseos de parte del equipo de desarrollo de Kommander.
Kommander se diseñó orignariamente con un concepto muy simple que ha demostrado ser revolucionario entre las herramientas visuales de diseño. Típicamente, estas herramientas permitían crear cuadros de diálogo y, posiblemente, interfaces con ventana principal. Por supuesto, un interfaz de ventana principal es la ventana principal del programa que típicamente tiene menús, barra de herramientas, barra de estado y el área de la aplicación. Los cuadros de diálogo son ventanas hija que no suelen tener menús y se llaman así porque su propósito es “establecer un diálogo” o intercambiar información entre usted y la aplicación principal. Los elementos de un cuadro de diálogo se llaman “widgets”, y sirven de enlace para su programa. Kommander es diferente porque es inherente a lo no programático. Usa el concepto de asociación de texto con los widgets del cuadro de diálogo. Inicialmente, a esto se le llamó “Texto asociado”, pero ahora se le llama “Texto de Kommander”. Los widgets de los cuadros de diálogo de Kommander pueden incluir el contenido de otros widgets como referencia y un widget puede referenciar su propio contenido de una forma “especial” que es algo así: @widgetText. Los especiales son comandos que no tienen ningún significado especial en Kommander. Por tanto, si creó un cuadro de diálogo con dos widgets de edición de línea y llamó al primero “Nombre” y al segundo “Apellido”, podría crear un botón y definir el texto de Kommander como “Mi nombre es @Nombre y mis apellidos son @Apellidos”. Tendría que definir @widgetText en los widgets del nombre y los apellidos. ¿Recuerda? Necesitamos decirle a Kommander que haga referencia al texto que hay en ellos. Podría hacerlo desde Konsole, y la salida sería la cadena. Así podría hacer referncia al nombre como: @Nombre -> obtiene el contenido del elementoobtiene el elemento denominado Nombre(@Nombre). En este caso, @Nombre devolvería “Eric”: @Nombre -> @widgetText -> “Eric”.
Así de simple es el núcleo de Kommander. Lo que pueda hacer con esto es lo verdaderamente interesante. En primer lugar, esto no es nada en comparación a la aproximación de la herramienta basada en un lenguaje, Kommander no necesita sentencias de programación para definir estas operaciones. Esto hace que los desarrolladores de Kommander avancen más rápido. Para los usuarios finales, es mucho más sencillo que aprender que las construcciones de un lenguaje. Esto significa que se puede centrar en la tarea en lugar de hacer a mano eternamente la referencia material. Al principio, cuando a la gente se le presenta una herramienta como Kommander, la primera pregunta es “¿Dónde puede usar una herramienta tan interesante como esta?” Como resulta evidente, la manipulación de cadenas se usa en casi cualquier sitio que pueda imaginar.
Entonces, ¿qué puede hacer Kommander? Aquí tiene una lista detallada de las operaciones básicas. Kommander puede:
Pasar cadenas al programa llamante por medio de la salida estándar.
Hacer llamadas a programas ejecutables.
Usar DCOP para interactuar con programas de KDE.
Si no es un programadorlo que debe saber es lo siguiente. En primer lugar, si lanza Kommander desde una consola, la consola es el programa llamante. Aquí hay una relación padre-hijo. El envío de un mensaje a la consola se hace con la salida estándar (stdout, llamada así porque también hay una salida de error) del programa hijo. Es interesante porque algunos programas como Quanta Plus usan la salida estándar para recibir información de los programas que lanzan. Así que los cuadros de diálogo de Kommander pueden producir directamente una salida de cadenas de texto en el editor de Quanta Plus si lo llama Quanta Plus. Esto significa que los cuadros de diálogo de Kommander pueden ser extensiones útiles para los programas.
El segundo caso es llamar a un ejecutable. Cualquier programa que funcione en el sistema es un ejecutable. Incluso un guión que corre con un intérprete técnicamente también se ejecuta. Kommander puede hacer correr comandos como en la consola aunque lo haga desde el menú. Por tanto, si quiere abrir The GIMP, debería tener un botón que tuviera la cadena “gimp” y ponerle algún especial como: @exec(gimp). Sólo con eso, se abrirá The GIMP cada vez que lo use. También puede ejecutar “ls -l”, pero sólo vería la salida si lo hubiera lanzado desde una consola.
El tercer caso también es muy interesante. DCOP es la abreviatura de Desktop COmmunication Protocol (n.t. Protocolo de Comunicación con el Escritorio) de KDE, y es verdaderamente potente. Vaya y haga funcionar el programa kdcop y échele un vistazo. Rápidamente se dará cuenta de que casi cualquier aplicación de KDE que se haya construido conforme a los estándares tiene cosas que suceden con DCOP y las que además están bien diseñadas tienen muchos sucesos de este tipo. Con DCOP puede consultar información de todos los tipos así como definir valores de widgets y más. Hay una sección sobre cómo usar DCOP en este manual. Kommander puede enviar DCOP a cualquier programa de KDE, así como ser controlado por DCOP. De hecho, puede enviar DCOP desde la línea de órdenes a cualquier programa de KDE. Entonces, ¿qué es lo bueno de todo esto? Pues que, si quiere hacer un elevado número de comandos, se dará cuenta de que la línea de órdenes de DCOP está bien para comandos cortos, pero puede provocar retrasos si, por ejemplo, se llama varios cientos de veces desde un bucle. Por ello, Kommander tiene un especial @dcop, porque es aproximadamente 1000 veces más rápido. Debido a que Kommander puede enviar y recibir DCOP,puede usar DCOP para hacer los guiones con Kommander. Y por eso además tenemos un especial para DCOP local, @ldcop, que le permite teclear mucho menos para emitir un comando.
¿Son éstos todos los conceptos fundamentales de Kommander? No, pero le deberían ayudar a hacerse una idea de cómo funciona y para que no interprete lo que le rodea como un idioma extranjero. Hay algunos más. Señales y slots son los gestores de eventos de Kommander. Un evento de un programa significa básicamente que “ha ocurrido algo”, como que se ha creado un widget o que ha cambiado su texto. Estos cambios “emiten señales” y puede conectar esas señales a un slot de recepción que haga algo cuando suceda el evento. Uno de los usos en Kommander es similar a Kommander Text, “Population Text”. Population Text poblará un widget cuando se llame. Igual que Kommander Text, Population Text puede tener cadenas de texto o guiones.
Con este debería tener claros los conceptos básicos para comenzar a usar Kommander. Intentamos mantener bajo el número de especiales y usamos mucho DCOP. La ida es que queremos mantener la potencia de Kommander, pero de forma consistente y fluida como sea posible. Descubrirá que puede incorporar cualquier lenguaje de guiones que necesite a Kommander, e incluso varios lenguajes de guiones en un cuadro de diálogo. La restante información del documento asumen que ya está familiarizado con los conceptos y términos que se han presentado aquí. Los ejemplos y tutoriales también son muy útiles para comprender qué se puede hacer con Kommander.
El editor se basa en Qt™ Designer, una herramienta para diseñar e implementar interfaces de usuario, creada por Trolltech. Hemos modificado Qt™ Designer de las siguientes formas:
Su interfaz es mucho más simple.
Construimos nuestros propios widgets.
Añadida la capacidad de configurar Kommander Text.
Otros cambios superficiales varios.
Para los que ya estén familiarizados con el uso de Qt™ Designer, el uso de Kommander Editor será trivial.
Las barras de herramientas tienen varios botones que proporcionan un acceso rápido a varias funciones.
La vista genérica del archivo muestra todos los archivos. Use el campo de búsqueda para pasar rápidamente entre los archivos.
El explorador de objetos le proporciona una visión general de las relaciones que hay entre los widgets de un formulario. Es útil para seleccionar widgets en un formulario con una disposición compleja.
En el editor de propiedades es donde se cambia el comportamiento y la apariencia del widget.
El cuadro de diálogo del Editor es donde crea y edita los cuadros de diálogo.
Crea un nuevo cuadro de diálogo
Busca en el sistema de archivos para abrir un cuadro de diálogo existente
Cierra el cuadro de diálogo activo
Guarda el cuadro de diálogo activo
Guarda el cuadro de diálogo activo con otro nombre
Guarda todos los cuadros de diálogo abiertos
Lista rápida de los últimos archivos que ha abierto. Esta lista cambiará cada vez que abra un archivo que no esté en ella, y se quitará de allí la entrada más antigua.
Sale de Kommander
Deshace la última acción realizada.
Rehace la última acción deshecha.
Corta el elemento actual y lo pone en el portapapeles.
Copia el elemento actual en el portapapeles.
Pega el contenido del portapapeles en la posición actual del cursor.
Elimina el elemento actual.
Selecciona todos los elementos del cuadro de diálogo actual.
Comprueba que todos los aceleradores se usen una sola vez.
Muestra la ventana para editar y crear slots y funciones.
Muestra el cuadro de diálogo de vista y edición de conexiones.
Muestra el cuadro de diálogo de opciones del formulario.
Muestra el cuadro de diálogo de preferencias.
Cierra el cuadro de diálogo actual.
Cierra todos los cuadros de diálogo.
Inicia el sistema de ayuda de KDE mostrando las páginas de información de Kommander. (este documento).
Modifica la forma del puntero transformandola en una combinación de flecha e interrogación. Al pulsar sobre elementos dentro de Kommander se abrirá una ventana de ayuda (si existe para ese caso particular) describiendo la función de dicho elemento.
Abre un cuadro de diálogo de informe de fallos donde puede informar de un fallo o solicitar una mejora o nueva propiedad “deseable”.
Mostrará información sobre la versión y el autor.
Muestra la versión de KDE y otra información básica.
El ejecutor, llamado kmdr-executor, hace funcionar los guiones de Kommander. Carga los archivos .kmdr
y produce dinámicamente un cuadro de diálogo plenamente operativo.
Los desarrolladores de C++ pueden usar de forma sencilla la clase KmdrDialogInstance en sus programas en C++, de tal forma que la funcionalidad de ejecución se puede incrustar en cualquier aplicación, haciendo obsoleta la invocación al programa externo executor. Para la creación del cuadro de diálogo estándar, la sobrecarga es mínima, pero la creación de la aplicación de KDE puede retrasar el cuadro de diálogo sobre un segundo.
Los bloques de construcción de un cuadro de diálogo de Kommander son los widgets. Son como cualquier otro widget de las bibliotecas deQt™ y de KDE, salvo que tienen alguna funcionalidad extra que les permite tener una “asociación de texto”. El texto se asocia con el estado del widget o su slot de población. El número de estados depende del widget. Si un widget sólo tiene un estado, a este estado se le llama predefinido.
Texto del widget bla bla
El cuadro de diálogo tiene dos estados especiales para el texto de Kommander. Son Initiate (iniciar) y Destroy (destruir). Se ejecutan cuando se inicializa el cuadro de diálogo y cuando se destruye. Protegen contra los llamados problemas de “race” (n.t. condiciones de fuga) al abrir y hacen que no sea necesario ningún procedimiento especial al cerrar para mantenerse a salvo.
Un contenedor para organizar los botones de un grupo. Se puede definir un título opcional usando la propiedad title (título). El marco se puede ajustar con la propiedad lineWidth (anchura de línea). El grupo de botones se puede definir para que sea exclusivo, definiendo la propiedad exclusive (exclusivo) como true (cierto). Esto significa que cuando se haga clic sobre un botón, todos los demás botones se desactivarán, con la excepción de los botones de radio, que siempre son mutuamente exclusivos aunque el grupo no sea exclusivo. los botones de radio se pueden definir para que no sean exclusivos usando la propiedad radioButtonExclusive (botón de radio exclusivo). (No estoy seguro de que esta propiedad funcione realmente).
ButtonGroup tiene un estado, default (predefinido).
El widget de texto para un grupo de botones son las asociaciones de texto para cada uno de los botones en el orden el que aparecen en el grupo de botones.
Un botón que puede estar marcado o sin marcar. También puede estar semimarcado si la proipedad tristate (triestado) está definida como true (cierto). La etiqueta asociada con la CheckBox (casilla de verificación) se define en la propiedad text (texto). Definiendo la propiedad cheched (marcado) tendrá marcada inicialmente la casilla de verificación.
Una CheckBox (casilla de verificación) tiene 3 estados, checked (marcado), semichecked (semimarcado) y unchecked (sin marcar).
El texto del widget para una Checkbox (casilla de verificación) es el valor de la propiedad text (texto).
Un botón que, cuando se hace clic sobre él, ejecuta su asociación de texto y luego cierra el cuadro de diálogo. La etiqueta del botón se define con la propiedad text (texto). La salida de la asociación de texto (cómo decirlo) se mostrará en la salida estándar siempre que la propiedad writeStdout (n.t. escribir a salida estándar) esté definida como true (cierto).
CloseButton tiene un estado, default (predefinido).
No han ningún texto de widget asociado con CloseButton.
ComboBox (lista de selección) es un widget de selección que combina un botón y un menú desplegable. Muestra la opción actual del usuario en una lista de opciones en un espacio mínimo. Los elementos se añaden a la lista usando la ventana de edición. Si está definida la propiedad editable como true (cierto), el usuario puede introducir cadenas arbitrarias.
ComboBox tiene un estado, default (predefinido).
El texto del widget de un ComboBox es el texto del elemento que esté seleccionado.
Un botón que, cuando se pulsa, ejecuta su asociación de texto. La etiqueta del botón se define con la propiedad text (texto). La salida de la asociación de texto (cómo decirlo) se mostrará en la salida estándar siempre que la propiedad writeStdout (n.t. escribir a salida estándar) esté definida como true (cierto).
ExecButton tiene un estado, default (predefinido).
No hay ningún texto de widget asociado con ExecButton.
El widget FileChooser (selector de archivos) combina un LineEdit (editor de línea) con un botón que, cuando se usa, presenta un cuadro de diálogo para seleccionar archivos o carpetas. El archivo o carpeta seleccionado se almacena en el LineEdit. El tipo de FileChooser se define con la propiedad selectionType (tipo de selección). Los tipos disponibles son Open (abrir), Save (guardar) y Directory (directorio). Se pueden seleccionar varios archivos o carpetas si la propiedad selectionOpenMultiple (selección de apertura múltiple) está definida como true (cierto). Se muestra como el título de la ventana del cuadro de diálogo. Si no se indica el título, se mostrará como título el tipo de selección. Los archivos que se muestran en el cuadro de diálogo se pueden limitar usando la propiedad selectionFilter (filtro de selección).
FileChooser (selector de archivos) tiene un estado, default (predefinido).
El texto del widget para un FileChooser (selector de archivos) es el texto que tiene LineEdit (el archivo que haya seleccionado el usuario).
Un widget contenedor que alberga otros widgets. El marco se ajusta con la propiedad lineWidth (ancho de línea). Se puede añadir un título si se define la propiedad title (título).
GroupBox (caja de grupo) tiene un estado, default (predefinido).
El texto del widget GroupBox (caja de grupo) es la combinación de las asociaciones del texto de cada uno de los widgets de texto que contiene. Estarán en el orden en el que aparezcan dentro del GroupBox.
Un widget LineEdit (editor de línea) es un editor de textos de una línea. Permite que el usuario introduzca y modifique una sola línea de texto. El texto inicial para el editor se puede definir en la propiedad text (texto). El widget se puede definir como de sólo lectura con la propiedad readOnly (sólo lectura). Hay 3 modos para el widget: Normal, NoEcho (sin eco) y Password (contraseña). El modo se define con la propiedad echoMode (modo de eco).
LineEdit tiene un estado, predefinido.
El widget text (texto) para LineEdit es el texto que contiene el editor.
Un widget ListBox (lista de selección múltiple) proporciona una lista en la que los elementos son seleccionables. Normalmente, hay uno o ningún elemento seleccionado. Este comportamiento se puede cambiar con la propiedad selectionMode (modo de selección). Los elementos se añaden al ListBox usando la ventana de edición.
Una ListBox (lista de selección múltiple) tiene sólo un estado, default (predefinido).
El widget text (texto) para una ListBox son los elementos que contiene el ListBox. @selectedWidgetText sólo devolverá los elementos que estén seleccionados en ese momento.
Este widget ahora está activado en Kommander. Su funcionalidad es la misma que el widget de árbol, así que puede dirigirse allí para tener la referencia completa.
Un widget sencillo que contiene una imagen o una etiqueta de texto. El pixmap que se vaya a mostrar se define en la propiedad pixmap. El texto se define en la propiedad text (texto). Sólo se puede definir una de las dos propiedades (eso creo, porque no puedo hacer que el editor defina ambas simultáneamente). Si scaledContents (contenido escalado) está definido como true (cierto), la imagen se escalará hasta que ajuste con el tamaño del widget. El formato del texto se puede definir con la propiedad textFormat (formato de texto).
Este widget no está activado en Kommander y no tienen ningún estado o widget text (de texto).
Un botón que se puede marcar o desmarcar, utilizado habitualmente en el ButtonGroup (grupo de botones) para hacer un selección exclusiva. Una etiqueta asociada con el botón se puede definir en la propiedad text (texto). Se puede inicializar un botón como marcado si se define la propiedad checked (marcado) como true (cierto). Si todos los RadioButtons (botones de radio) de un ButtonGroup tienen la propiedad checked (marcado) definida como true (cierto), el único que quedará marcado será el último.
RadioButton (botón de radio) tiene 2 estados, checked (marcado) y unchecked (no marcado).
No hay ningún widget de texto asociado con un RadioButton (botón de radio).
Este widget proporciona un editor de textos que permite el formateo simple del texto.
RichTextEditor (editor de texto rico) tiene un estado, default (predefinido).
El widget text (de texto) para RichTextEditor (editor de texto rico) es el texto que contiene el editor, en formato de texto rico. El texto seleccionado se puede devolver con @selectedWidgetText.
Un widget que permite al usuario cambiar un valor entero bien presionando las flechas arriba y abajo o introduciendo un valor en la casilla. Los valores mínimo y máximo del widget se pueden definir con las propiedades minValue(valor mín.) y maxValue (valor máx.). La propiedad specialValueText (texto de valor especial) se usa para definir un valor de texto que se mostrará en lugar del valor mínimo.
Este widget sólo tiene un estado, default (predefinido).
El widget text (de texto) para SpinBoxInt (casilla de selección numérica entera) es el valor entero que se muestra actualmente.
Un botón que hace funcionar otro cuadro de diálogo de Kommander cuando se presiona. El cuadro de diálogo que se va a hacer funcionar se define en la propiedad kmdrFile (archivo kmdr). Si la propiedad default (predefinida) está definida como true (cierto), el cuadro de diálogo se hará funcionar si se pulsa Intro cuando el cuadro de diálogo tenga el foco. Creo que también se puede usar como contenedor, aunque tengo que jugar con esto un poco más.
SubDialog (sub-cuadro de diálogo) tiene un estado, default (predefinido).
El widget text (de texto) para SubDialog (sub-cuadro de diálogo) es la asociación de texto del cuadro de diálogo que ejecuta.
Esto es algo parecido a contener el cuadro de diálogo, que se ha quedado obsoleto con el nuevo concepto de proyecto. ¿Deberíamos dejarlo con @dialog()
en el texto de Kommander u olvidarnos de ello? No está bien tal y como está.
Un widget que proporciona varias solapas, cada una de las cuales puede contener otros widgets.
Un editor de texto simple con varias líneas.
Un widget sencillo que contiene un trozo de texto. Este widget le permite también definir un pixmal. De acuerdo, el editor dice que ambos son QLabels. Entonces, ¿por qué tenemos 2 widgets que parecen ser la misma cosa pero con dos nombres diferentes? Está planificado para que se corrija en A7.
En la alpha 6, este widget está parcialmente activado, y se puede definir usando llamadas DCOP externas.
Un widget que proporciona una lista con forma y estructura de árbol. Este widget no está activado completamente para añadir o eliminar elementos en la alpha 6. Puede añadir elementos hijo y datos de varias columnas. La limitación actual es que no puede modificar las columnas. Para añadir un nodo hijo, use “/” como separador. Para añadir los datos de la columna, use el carácter de tabulador con escape “\t” entre las columnas.
Los especiales son funciones que Kommander procesa. Debería tener en cuenta que hasta que Kommander tenga un analizador completo, todas las especiales de Kommander se ejecutarán primero, y luego se ejecutará el guión. En la mayoría de los casos, no suele ser un problema, pero en algunos sí que lo es.
@dcop(appId
, objeto
, funcion
, argumentos
)
Hace una llamada DCOP. @dcop(“kmail”, “KMailIface”, “checkMail()”, “”)
@dcopid
El id. DCOP del proceso. (kmdr-executor-@pid)
@dialog(dialog
[,parameters
])
Lanza el cuadro de diálogo de Kommander especificado. El cuadro de diálogo se obtiene del directorio dialog y del actual, en ese orden. Esto se hace con antelación a la llamada al ejecutor y define el directorio predefinido en el que está la aplicación de Kommader. Los parámetros (parameters) se pueden pasar al estilo de Unix o por nombre, como “variable=valor”. Luego puede buscar los parámetros globales pasados. @global(variable) devolvería “valor”.
@env(environmentVariable
)
Expande la environmentVariable (variable de entorno) pasada. @env(PWD) se expande como $PWD. Recuerde que “$” es parte de la shell y no se debe usar.
@exec(command
)
devuelve la salida de la ejecución del command (comando) especificado. @exec(ls -l).
@execBegin ... @execEnd
igual que @exec
, pero admite shebang (n.t. la marca de comienzo de un guión en Unix) y guiones de varias líneas. Sirve para varios lenguajes de guiones, así como para declararlos o usar una shebang.
@execBegin(php)
@execBegin
#!/usr/bin/php
El primero usa el nombre del ejecutable PHP. Kommander busca PATH (n.t. la ruta) para php y, si no lo encontrara, buscaría si está registrado con Kommander en una ubicación externa a su ruta. Si no fuera así, le diría al usuario que no se puede encontrar. El segundo ejemplo usa el “shebang” (n.t. la marca de comienzo de un guión en Unix) clásico, que tiene algunas ventajas y también algunos inconvenientes. Si tiene una copia de la beta de PHP5, por ejemplo, en /usr/local/bin
, podría no encontrarse por no estar en /usr/bin
, y para ello sería muy útil. Sin embargo, si distribuye el cuadro de diálogo a alguien que tenga PHP en /opt/bin
, no lo encontrará cuando use shebang. Por tanto, use con cuidado las shebangs y, si va a compartir archivos, se recomienda que use el ejecutable.
@global(variable
)
expande el valor de la variable global especificada.
@null
Devuelve null (nulo). Ahora que Kommander comprueba si widgetText extá vacío en la ejecución, esto evitará que haya errores erróneos en el caso de que haya un estado no definido en el widget.
@parentPid
El PID del proceso padre.
@pid
El PID del proceso.
@readSetting(key
, defaultValue
)
lee un valor de kommanderrc
@selectedWidgetText
el contenido seleccionado de un widget que puede mostrar más de un valor, como los widgets de lista
@setGlobal(variable
, value
)
Define la variable global como el value (valor) especificado.
@widgetText
el contenido de un widget
@writeSetting(key
, value
)
escribe un valor en kommanderrc
@Array.values(array
)
Devuelve la lista separada por EOL de todos los valores del array (vector). Se puede usar para pasear a través de los elementos de un vector.
@Array.keys(array
)
Devuelve una lista separada por EOL con todas las claves del array (vector).
@Array.setValue(array
, key
, value
)
Define una key (clave) y un value (valor) para un elemento del array (vector). Si no existe el vector, se crea.
@Array.clear(array
)
Elimina todos los elementos del array (vector).
@Array.count(array
)
Devuelve el número de elementos que hay en el array (vector).
@Array.value(array
,key
)
Devuelve el valor asociado a la key (clave) dada.
@Array.remove(array
,key
)
Elimina el elemento que hay en la key (clave) dada del array (vector).
@Array.fromString(array
,string
)
Añade al array (vector) todos los elementos de la string (cadena de caracteres). La cadena de caracteres debería tener el formato clave\tvalor\n."
@Array.toString(array
,string
)
"Devuelve todos los elementos del array (vector) en el formato clave\tvalor\n."
@File.read(file
)
Devuelve el contendo del file (archivo) dado.
@File.write(file
string
)
Escribe la string (cadena de caracteres) dada en file (archivo).
@File.append(file
string
)
Añade la string (cadena de caracteres) dada al final del file (archivo).
@String.length(string
)
Devuelve el número de caracteres que hay en la cadena de caracteres (string).
@String.contains(string
,substring
)
Comprueba si la cadena de caracteres (string) contiene la subcadena (substring) dada.
@String.find(string
)
Devuelve la posición de una subcadena de caracteres (substring) en la cadena (string), o -1 si no se encuentra."
Tiene una posición opcional de comienzo, entera (integer) para encontrar los usos en alfa 6.
@String.left(string
, int
)
Devuelve los n primeros caracteres de la cadena (string).
@String.right(string
, int
)
Devuelve los n últimos caracteres de la cadena (string).
@String.mid(string
, int start
, int end
)
Devuelve la subcadena de caracteres (substring) de la cadena (string), comenzando en las posiciones indicadas.
@String.remove(string
, substring
)
Elimina todas las ocurrencias de una subcadena de caracteres (substring) dada.
@String.replace(string
, substring find
, substring replace
)
Reemplaza todas las ocurrencias de una subcadena de caracteres (substring) dada con un reemplazo (replace) dado.
@String.upper(string
)
Convierte la cadena de caracteres (string) a mayúsculas.
@String.lower(string
)
Convierte la cadena de caracteres (string) a minúsculas.
@String.compare(string
, string
)
Compara dos cadenas de caracteres (string). Devuelve 0 si son iguales. -1 si la primera es menor, 1 si la primera es mayor.
@String.isEmpty(string
)
Comprueba si la cadena de caracteres (string) está vacía.
@String.isNumber(string
)
Comprueba si la cadena de caracteres (string) es un número válido.
DCOP se puede llamar de varias formas desde Kommander. El primero, es el método de la consola
dcop kmdr-executor-@pid KommanderIf changeWidgetText miWidget “nuevo texto”
Asume que está dentro de un archivo de Kommander y que tiene acceso al especial @pid, que contiene el id. del proceso. De hecho, es más fácil reemplazar “kmdr-executor-@pid” por @dcopid. Sin embargo, puede usar esta sintaxis (obviamente, sin los especiales) desde la línea de órdenes o desde cualquier guión exteno para alterar la ventana de Kommander.
Debido a que Kommander no tiene un analizador completo en su estado alfa, si quiere usar el DCOP interno mucho más rápido para la ventana de otra aplicación (DCOP en consola es muy lento) es más complicado porque debe dar mucha información, entre la que se incluye un prototipo para la llamada. La llamada de lo de arriba sería así:
@dcop(@dcopid, KommanderIf, “enableWidget(QString, bool)”, Widget, true)
En el momento de escribir este manual, debería evitar anidar llamadas DCOP dentro de las estructuras de lenguajes de guiones (como bash), lo que significa que debería usar métodos de llamada desde consola. Si usa DCOP interno, todos los especiales de Kommander se ejecutarán primero y luego se ejecutará el guión.
Hay una forma simplificada de usar DCOP desde dentro de Kommander, usando la sintaxis del objeto. Digamos que quiere cambiar el texto de un widget que se llama @EditLine1. Tendría esta pinta:
@EditLine1.changeWidgetText(Texto nuevo)
Como puede ver, la sintaxis es muy sencilla, así como visualmente consistente con los grupos de funciones. Todas las referencias DCOP de aquí usarán la nueva sintaxis del objeto que se mostró arriba. Tenga en cuenta que si está referenciando un widget usando DCOP desde otra ventana o desde otra aplicación, el primer parámetro será siempre el nombre del widget. Todas las funciones que se muestran aquí comienzan en el segundo parámetro.
Devuelve el valor de la variable global indicada. Cuando un guión se ejecuta desde la ventana de Kommander cualquier variable (no global) definida en el guión dejará de existir una vez completado el guión y, por tanto, no estará disponible para otros procesos de guiones ni en nuevos ejemplares del proceso llamante. El “ámbito” global de la variable significa que existirá para cualquier proceso de la ventana hasta que se cierre la misma. Puede cambiar estas variables en cualquier momento con una nueva llamada a @setGlobal
.
Crea una variable global en el proceso de la ventana y le asigna un valor. Este valor se puede recuperar o volver a definir con global(QString nombreVariable).
Debería cambiar el nombre por setWidgetText y probablemente este nombre quede obsoleto. Elimina el texto que se muestra en el widget y lo reemplaza con el texto que se suministra.
Activa o desactiva el widget.
Devuelve el texto asociado con el widget especificado. No es el mismo que el texto que se muestra. Sería “@widgetText” o el texto y/o el guión que se use para que llegue el valor que se muestra.
Define la cadena predefinida de texto de Kommander. Típicamente se define como “@widgetText” para mostrar lo que se introduzca en el widget. Posiblemente no lo necesite, pero ahí está por si acaso. Se aplica a todos los widgets que tengan datos.
Añade un elemento a un widget de lista de selección en el índice (index) especificado. El índice de la lista comienza en el cero. Para añadirlo al final de la lista, use -1.
Añade una lista de cadenas de una vez. La lista debería delimitarla por EOL (\n - saltos de línea). Es tan hábil que puede usar bash para derivar la lista de forma bastante sencilla. Por ejemplo, usando @exec(ls -l ~/projects | grep kmdr) para que los elementos que proporcione conformen un listado de los archivos de Kommander de la carpeta projects. El índice de la lista comienza en el cero. Para añadirlo al final de la lista, use -1.
addUniqueItem añade un elemento (item) al final de la lista sólo si es único.
Elimina todos los elementos.
Elimina el elemento que hay en el índice (index) indicado.
Devuelve el texto del elemento en el index (índice) especificado.
Define el elemento actual (o seleccionado) con el index (índice) especificado. Se aplica a widgets de lista y de lista de selección múltiple.
Marca/quita la marca de widgets de casilla de verificación y botones de radio.
Con Kommander puede crear widgets nuevos basándose en widgets que no son de Kommander de forma bastante sencilla. La aproximación es derivar la nueva clase widget de Kommander del widget de Qt™ o KDE que quiera integrar en Kommander y luego también de la clase KommanderWidget. Los métodos sobrecargados de esta clase le darán al widget de Kommander la funcionalidad.
La mayor parte del código de un widget de Kommander sólo es el código de una plantilla. Además, puede usar el cuadro de diálogo widgetgenerator.kmdr de Kommander para generar la mayor parte del código del widget de Kommander. Todo lo que tiene que hacer es rellenar las partes importantes en relación con el widget como la información de estado, el texto del widget, etc.
Digamos que queremos crear un widget de edición de línea nuevo para Kommander, basado en el widget KLineEdit de KDE. Usando el cuadro de diálogo de generación de widgets, obtendremos algo como esto en el archivo de encabezado que se genera como salida:
Muestra las llamadas DCOP global y setGlobal para proporcionarle variables globales para el guión
Muestra cómo usar las llamadas DCOP, tanto local como externa, para comunicarse con la aplicación externa.
Le muestra cómo usar conexiones y slots para gestionar eventos. Se usan tanto los slots de población como los estándares.
Le muestra cómo usar las funciones @readSetting y @writeSetting para escribir y restaurar el contenido del widget. También le muestra cómo usar el slot populate() para inicializar el contenido del widget.
Le muestra cómo puede añadir texto a TextEdit y cómo puede usarlo para mostrar texto con formato.
Le muestra cómo puede pasar parámetros al cuadro de diálogo de Kommander por medio de la línea de órdenes. También le muestra cómo cambiar el contenido de la lista y el texto del botón.
Le muestra cómo usar la «inicialización» para «destruir» guiones del cuadro de diálogo principal para inicializar y almacenar algunas opciones.
Si encuentra algún error en la documentación o en su traducción dirijase a la página http://bugs.kde.org para informar del error.
Este documento puede que haya sido actualizado desde su instalación. Compruebe en http://docs.kde.org si existe una versión más moderna.
El equipo de desarrollo de Kommander.
(consume AT optusnet.com.au)
Desarrollo y documentación.
(tik AT acm.org)
Documentación
(sequitur AT kde.org)
Responsable del proyecto y documentación
(amantia AT kde.org)
Desarrollador
(mrudolf AT kdewebdev.org)
Desarrollador
Kommander © 2004 el equipo de desarrollo de Kommander
Manual de usuario de Kommander © 2004 el equipo de desarrollo de Kommander
Juan Manuel García Molina (juanma AT superiodico.net)
Esta documentación está sujeta a los términos de la Licencia de Documentación Libre GNU.
Este programa está sujeto a los términos de la Licencia Pública General GNU.
Tabla de contenidos
Kommander forma parte del proyecto KDE http://www.kde.org/.
Kommander está incluido en el paquete kdewebdev en ftp://ftp.kde.org/pub/kde/, el servidor FTP del proyecto KDE.
Para poder compilar e instalar Kommander en su sistema, introduzca las siguientes instrucciones en el directorio raíz de la distribución de Kommander:
%
./configure
%
make
%
make install
Como Kommander utiliza autoconf y automake no debería producirse ningún problema en la compilación. Si encuentra alguna dificultad le rogamos que se dirija a los foros de discusión de KDE.
Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team