# Personalización avanzadaPanel Frontalpersonalización del Panel Frontal

Los usuarios pueden personalizar el Panel Frontal utilizando los menús emergentes y los controles de Instalar Icono de los subpaneles.

Este capítulo trata sobre la personalización del Panel Frontal mediante la creación y edición de archivos de configuración.

SAG.FrPC.mkr.3
SAG.FrPC.mkr.5
SAG.FrPC.mkr.6
SAG.FrPC.mkr.9
SAG.FrPC.mkr.13
SAG.FrPC.mkr.15
SAG.FrPC.mkr.23
SAG.FrPC.mkr.26

## Consultas adicionales

- Para obtener información de consulta sobre los controles y la configuración del Panel Frontal, consulte la página de manual `dtfpfile(4X)`.

- Para obtener información de consulta sobre el Gestor de espacios de trabajo, consulte las páginas de manual `dtwm(1)` y `dtwmrc(4)`.

## Archivos de configuración del Panel Frontal

El Panel Frontal se define en una base de datos de archivos de configuración.

Los archivos de configuración proporcionan un procedimiento para personalizar el Panel Frontal. Ciertas modificaciones, entre las que se incluyen las siguientes, sólo se pueden realizar editando un archivo de configuración:

- Añadir una nueva posición de control en el Panel Frontal.

- Añadir tipos especiales de controles, tales como ventanas de clientes.

- Cambiar determinados comportamientos predeterminados: por ejemplo, si los controles del Panel Frontal responden a una pulsación o a una doble pulsación.

Para proporcionar la máxima flexibilidad en la configuración del panel, estos archivos pueden ser personales, accesibles en el sistema o ubicados en otros sistemas.

El Panel Frontal lo crea y lo gestiona el Gestor de espacios de trabajo.

### Archivo de configuración del Panel Frontal predeterminado

El Panel Frontal predeterminado está definido en el archivo de configuración del Panel Frontal `/usr/dt/appconfig/types/`idioma`/dtwm.fp`.

Este archivo no debe modificarse.

### Ruta de búsqueda para los archivos de configuración del Panel Frontal

La definición del Panel Frontal puede distribuirse entre cualquier número de archivos ubicados localmente o en sistemas remotos.

Los archivos utilizados para definir el Panel Frontal deben cumplir estos requisitos:

- El nombre de archivo debe terminar por `.fp`; por ejemplo, `mail.fp`.

- El archivo debe estar ubicado en la ruta de búsqueda de la base de datos de acciones.

La ruta de búsqueda de base de datos de acciones predeterminada incluye estos directorios, en los que se realiza la búsqueda en este orden:

DirectorioInicio`/.dt/types` | Personalizaciones personales
`/etc/dt/appconfig/types/`idioma | Personalizaciones accesibles en el sistema
`/usr/dt/appconfig/types/`idioma | Panel y controles incorporados

Se utiliza un directorio adicional, DirectorioInicio`/.dt/types/fp_dynamic`
, para las personalizaciones personales efectuadas con la interfaz de usuario. No utilice este directorio para las personalizaciones manuales.

La ruta de búsqueda de la base de datos de acciones puede incluir directorios adicionales añadidos para configurar el sistema para la función de red. En concreto, las ubicaciones remotas adicionales se añaden cuando se configura el sistema para acceder a un servidor de aplicaciones. Para obtener más información, consulte la sección SAG.Datab.mkr.12.

### Cómo se ensambla el Panel Frontal: Reglas de prioridad

El Panel Frontal se ensambla a partir de todos los archivos de configuración ubicados en la ruta de búsqueda de la base de datos de acciones.

Cuando existe un conflicto entre los componentes de la definición, las reglas de prioridad determinan la definición que se debe utilizar. Dos componentes están en conflicto entre sí cuando:

- Tienen el mismo nombre de control, `CONTAINER_NAME`, y `CONTAINER_TYPE`.

- O compiten por la misma posición (tienen nombres diferentes pero los mismos `CONTAINER_NAME`, `CONTAINER_TYPE` y `POSITION_HINTS`).

El Panel Frontal utiliza estas reglas de prioridad:

- Si los componentes tienen el mismo nombre de control y los mismos nombres y tipos de contenedor, se utiliza el componente que se lee primero.

  Por ejemplo, si un control accesible en el sistema y un control incorporado contienen estos campos, pero en cambio son diferentes:

      CONTROL TextEditor
      {
         CONTAINER_TYPE BOX
         CONTAINER_NAME Top
         …
      }

  el control accesible en el sistema tiene prioridad.

- Si dos componentes compiten por la misma posición, se ponen en el orden en que se leen.

  Por ejemplo, si un usuario crea un nuevo control personal para el Panel Principal (`CONTAINER_TYPE` BOX y `CONTAINER_NAME` Top) y le asigna `POSITION_HINTS` 5, el control personal desplazará el control incorporado y el restode controles con números de posición más altos una posición a la derecha.

Cuando modifique un control creando una nueva versión del mismo accesible en el sistema o personal, la nueva definición de control debe especificar el mismo nombre de control `CONTAINER_NAME` y `CONTAINER_TYPE`. De lo contrario, además del control existente aparecerá el nuevo control.

###
Archivos del Panel Frontal creados dinámicamente

Cuando el usuario personaliza el Panel Frontal utilizando el control Instalar Icono y los menús emergentes, los archivos se graban en el directorio DirectorioInicio`/.dt/types/fp_dynamic`.

El Panel Frontal crea un archivo adicional, DirectorioInicio`/.dt/sessions/dtwmfp.session`
, que se utiliza para guardar y restaurar en cada sesión el estado del Panel Frontal personalizado.

## Administración de las personalizaciones de la interfaz de usuario

Los usuarios pueden utilizar los menús emergentes de los controles y los controles de Instalar Iconos para personalizar ampliamente el Panel Frontal.

Esta sección describe cómo:

- Impedir determinadas personalizaciones personales. Por ejemplo, tal vez le convenga imposibilitar que un usuario suprima un control.

- Deshacer personalizaciones personales. Por ejemplo, puede que un usuario le solicite que restaure un control individual suprimido accidentalmente.

### Impedir personalizaciones personales

1. Si el control es un control incorporado, copie su definición de `/usr/dt/appconfig/types/`idioma`/dtwm.fp` a `/etc/dt/appconfig/types/idioma/nombre.fp`.

2. Añada la siguiente línea a la definición del control:

        LOCKED True

### Restaurar un Panel Frontal modificado o un control suprimido o un subpanel

Si desea eliminar
todas las personalizaciones del Panel Frontal y restablecer las definiciones predeterminadas, utilice la acción Restaurar Panel Frontal del grupo de aplicaciones Herramientas_Escritorio.
Esta acción elimina todas las personalizaciones efectuadas con los menús emergentes del Panel Frontal por el usuario.

Para restaurar un control individual que ha sido suprimido, utilice el siguiente procedimiento.

- En el directorio DirectorioInicio`/.dt/types/fp_dynamic`, elimine el archivo que se ha creado cuando el usuario ha suprimido el control. El control tendrá el mismo nombre que el control original suprimido.

  Por ejemplo, si el usuario ha suprimido el control Editor de iconos, un archivo del directorio `fp_dynamic` contendrá:

      CONTROL IconEditor
      {
         …
         DELETE True
      }

Cuando el usuario suprime un subpanel, se crea un archivo dinámico independiente para el subpanel y para cada control del subpanel.

Para obtener más información, consulteSAG.FrPC.div.11.

## Organización de la definición del Panel Frontal

En Panel Frontal se crea ensamblando definiciones para sus componentes. Cada uno de estos componentes tiene una sintaxis necesaria que define en qué lugar del Panel Frontal se coloca el componente, el aspecto del componente y el comportamiento del mismo.

### Componentes del Panel Frontal

El Panel Frontal se ensambla de fuera hacia dentro:

- El `
  PANEL` es el contenedor de nivel superior, o padre, de todo el Panel Frontal.

- El `PANEL` es un contenedor para uno o más `BOX` (recuadros).

- Un `
  BOX` es un contenedor para uno o más `CONTROL` (controles).

Existen dos tipos especiales de contenedores:

- Un `
  SUBPANEL` está asociado con un control determinado (el control es el contenedor del subpanel). Los subpaneles “surgen” del control con el que están asociados.

- El
  `SWITCH` (conmutador) contiene los botones para cambiar los espacios de trabajo más controles adicionales.

### Sintaxis general de la definición del Panel Frontal

Cada componente del Panel Frontal se define por separado utilizando la sintaxis:

    COMPONENT nombre
    {
       KEYWORD valor
       KEYWORD valor
       …
    }

Algunas palabras clave son necesarias, otras son opcionales. Para obtener más información, consulte la página de manual `dtfpfile(4X`).

####
Definición de PANEL

El `PANEL` es el componente de nivel superior. Su definición incluye:

- El nombre del Panel Frontal

- Campos que describen el aspecto y el comportamiento generales de todo el Panel Frontal

    PANEL nombre_panel_frontal
    {
       KEYWORD valor
       KEYWORD valor
       …
    }

El nombre_panel_frontal es un nombre exclusivo para el Panel Frontal. El nombre predeterminado es “FrontPanel”.

####
Definiciones de BOX

Una definición de `BOX` describe:

- El nombre del `BOX`

- El `PANEL` en que se encuentra el recuadro (`
  CONTAINER_NAME`)

- La posición del recuadro en el `PANEL` (`POSITION_HINTS`)

- Campos que describen el aspecto y el comportamiento aplicables a todo el recuadro

    BOX nombre_recuadro
    {
       CONTAINER_NAME nombre_panel_frontal
       POSITION_HINTS posición
       KEYWORD        valor
       KEYWORD        valor
       …
    }

####
Definiciones de CONTROL

Una definición de `CONTROL` describe:

- El nombre del `CONTROL`

- Si el control está en un recuadro, un subpanel o un conmutador (`
  CONTAINER_TYPE`)

- El recuadro, subpanel o conmutador en que se encuentra el control (`
  CONTAINER_NAME` )

- La posición del `CONTROL` en el `BOX` (`POSITION_HINTS`).

- Campos que describen el aspecto y el comportamiento del control

    CONTROL nombre_control
    {
       CONTAINER_TYPE  BOX o SUBPANEL o SWITCH
       CONTAINER_NAME  nombre_recuadro o nombre_subpanel o nombre_conmutador
       TYPE            tipo_control
       POSITION_HINTS  posición
       KEYWORD         valor
       KEYWORD         valor
       …

    }

####
Definiciones de SUBPANEL

Una definición de `SUBPANEL` describe:

- El nombre del `SUBPANEL`

- El nombre del control al que está conectado el subpanel
  (`
  CONTAINER_NAME`)

- Campos que describen el aspecto y el comportamiento específico del subpanel

    SUBPANEL nombre_subpanel
    {
       CONTAINER_NAME nombre_control
       KEYWORD        valor
       KEYWORD        valor
       …
    }

####
Definición de SWITCH

La definición de `SWITCH` describe:

- El nombre del `SWITCH`

- El `BOX` en que se encuentra el `SWITCH` (`
  CONTAINER_NAME`)

- La posición del `SWITCH` dentro del `BOX` (`POSITION_HINTS`)

- Campos que describen el aspecto y el comportamiento del `SWITCH`

    SWITCH nombre_conmutador
    {
       CONTAINER_NAME nombre_recuadro
       POSITION_HINTS posición
       KEYWORD        valor
       KEYWORD        valor
       …
    }

## Modificación del Panel Principal

El Panel Principal es la ventana Panel Frontal, excluidos los subpaneles.

### Contenedores del Panel Principal

Las modificaciones que se pueden realizar incluyen:

- Añadir o eliminar controles

- Intercambiar las posiciones de los controles

### Añadir un control al Panel Principal

1. Cree un archivo de configuración del Panel Frontal:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/*.fp`

   - Personal: DirectorioInicio`/.dt/types/*.fp`

2. Defina el control en el archivo.

   Utilice los campos `CONTAINER_NAME` y `CONTAINER_TYPE` para especificar el contenedor del control:

       CONTAINER_NAME Superior
       CONTAINER_TYPE BOX

   Utilice `POSITION_HINTS` para especificar la colocación del control de izquierda a derecha. Dado que las personalizaciones tienen prioridad sobre los controles incorporados, el nuevo control “desplazará” el control existente que tiene dicha posición hasta la siguiente posición de la derecha.

3. Guarde el archivo de configuración.

4. Cree un icono para el control del Panel Frontal.

   Consulte la sección SAG.CrAct.mkr.10.

5. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

Por ejemplo, la siguiente definición de control colocada en el archivo /etc/dt/appconfig/types/idioma/audio.fp inserta un control de aplicación de audio entre los controles Reloj y Agenda.

    CONTROL AudioApplication
    {
       TYPE           icon
       CONTAINER_NAME Superior
       CONTAINER_TYPE BOX
       ICON           AplAudio
       POSITION_HINTS 2
       PUSH_ACTION    StartAudioApplication
       PUSH_RECALL    true
    }

### Eliminar un control

1. Cree un archivo de configuración del Panel Frontal:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/nombre.fp`

   - Personal: DirectorioInicio`/.dt/types/`nombre`.fp`

2. Copie en el nuevo archivo la definición del control que desea suprimir.

   Si el control es incorporado, su definición está en `/usr/dt/appconfig/types/`idioma`/dtwm.fp`.

   No es necesario que copie la definición entera. Sin embargo, la parte que copie debe incluir los campos `CONTAINER_NAME` y `CONTAINER_TYPE`.

3. Añada el campo `DELETE` a la definición:

        DELETE True

4. Guarde el archivo de configuración.

5. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

Por ejemplo, la siguiente definición de control colocada en el archivo `/etc/dt/appconfig/types/`idioma`/TrashCan.fp` elimina el control Papelera del Panel Frontal.

    CONTROL Trash
    {
       CONTAINER_NAME Superior
       CONTAINER_TYPE BOX
       DELETE         True
    }

### Modificar un control

Utilice este procedimiento cuando necesite modificar una definición de control—por ejemplo, cambiar su imagen de icono.

1. Copie la definición de control entera de `/usr/dt/appconfig/types/`idioma`/dtwm.fp` a:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/nombre.fp`

   - Personal: DirectorioInicio`/.dt/types/`nombre`.fp`.

2. Edite el campo que desee cambiar. También puede añadir campos adicionales.

3. Guarde el archivo.

4. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

### Intercambiar la posición de los controles

1. Copie las definiciones de los controles cuyas posiciones desea cambiar de `/usr/dt/appconfig/types/idioma/dtwm.fpa`:

   - Accesible en el sistema:`/etc/dt/appconfig/types/idioma/nombre.fp`

   - Personal: DirectorioInicio`/.dt/types/`nombre`.fp`.

     Deberá copiar la definición de control entera para cada control que se deba mover.

2. Intercambie los valores de los campos `
   POSITION_HINTS` de las definiciones de control.

3. Guarde el archivo.

4. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

Por ejemplo, las siguientes definiciones colocadas en un archivo `/etc/dt/appconfig/types/C/AyudaCorreo.fp` intercambian las posiciones de los controles Correo y Gestor de ayudas y bloquea estos controles para los cambios personales.

    CONTROL Mail
    {
       POSITION_HINTS 12
       LOCKED         True
       …resto de la definición decontrol
    }

    CONTROL Help
    {
       POSITION_HINTS 5
       LOCKED         True
       …resto de la definición de control
    }

### Sustituir un control del Panel Frontal

- Cree otra definición de control con el mismo:

  - nombre_control

  - `
    valor de CONTAINER_NAME`

Por ejemplo, los dos controles siguientes están definidos en dos archivos de configuración diferentes. Los controles tienen el mismo nombre de control y el mismo nombre de contenedor y, por consiguiente, se les considera como el mismo control.

- Definición en `/etc/dt/appconfig/types/C/SysControls.fp`:

      Control AplicaciónImportante
      {
         CONTAINER_NAME Superior
         CONTAINER_TYPE BOX
         POSITION_HINTS 2
         …
      }

- Definición en DirectorioInicio`/.dt/types/MyControls.fp`:

      Control AplicaciónImportante
      {
         CONTAINER_NAME Superior
         CONTAINER_TYPE BOX
         POSITION_HINTS 6
         …
      }

El control personal tiene prioridad, por lo tanto el control se ubicará en la posición 6.

### Especificación del icono utilizado por un control

El campo `
ICON` de la definición de control define la imagen de icono utilizada para el control.

El valor del campo `ICON` puede ser:

- Un nombre de archivo base.

  El nombre de archivo base es el nombre del archivo que contiene la imagen de icono menos los sufijos de nombre de archivo para el tamaño (`m` y `t`) y el tipo de imagen (`bm` y `pm`). Por ejemplo, si los archivos se llaman `MiJuego.l.pm` y`MiJuego.m.pm`, utilice `MiJuego`.

  Si utiliza el nombre de archivo base, los archivos de iconos deben ponerse en un directorio de la ruta de búsqueda de iconos:

  - Iconos personales: DirectorioInicio`/.dt/icons`

  - Iconos accesibles en el sistema: `/etc/dt/appconfig/icons/`idioma

- Una ruta absoluta al archivo de iconos, incluido el nombre de archivo completo.

  Sólo deberá utilizar la ruta absoluta si el archivo de iconos no está ubicado en la ruta de búsqueda de iconos.

El tamaño de icono necesario depende de la ubicación del control:

Ubicación | Tamaño
Panel Principal | 48 por 48 pixels (nombre`.l.pm` o nombre `.l.bm)`
Subpanel | 32 por 32 pixels (nombre`.m.pm` o nombre `.m.bm)`

Ponga el archivo de iconos en una de estas ubicaciones:

- Iconos personales: DirectorioInicio`/.dt/icons`

- Iconos accesibles en el sistema: `/etc/dt/appconfig/icons/`idioma

## Creación y modificación de subpaneles

Los usuarios pueden crear y modificar los subpaneles utilizando los menús emergentes del Panel Frontal.

Esta sección describe cómo proporcionar una personalización accesible en el sistema, que requiere modificar los archivos de configuración del Panel Frontal.

Un subpanel está “conectado” a un control del Panel Principal.

### El contenedor de un subpanel es el control al que está conectado

La conexión se realiza en la definición del subpanel. El campo `CONTAINER_NAME` especifica el control al que está conectado el subpanel:

    CONTROL nombre_control
    {
       …
    }
    SUBPANEL nombre_subpanel
    {
       CONTAINER_NAME nombre_control
       …
    }

### Crear un nuevo subpanel accesible en el sistema

1. Localice el nombre_control del control del Panel Principal al que desea conectar el subpanel.

   Si el control es uno de los controles incorporados, su definición está en `/usr/dt/appconfig/types/`idioma`/dtwm.fp`.

2. Cree un nuevo archivo `/etc/dt/appconfig/types/`idioma`/*.fp`.

3. Defina el subpanel:

       SUBPANEL nombre_subpanel
       {
          CONTAINER_NAME nombre_control
          TITLE          valor
          KEYWORD        valor
          …
       }

4. Guarde el nuevo archivo de configuración.

5. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

### Personalización de los subpaneles incorporados

Se pueden modificar las propiedades generales (como por ejemplo, el título) y el contenido de los subpaneles incorporados.

#### Modificar las propiedades generales de un subpanel incorporado

1. Cree un nuevo archivo de configuración del Panel Frontal:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/nombre.fp`

   - Personal: DirectorioInicio`/.dt/types/`nombre`.fp`.

2. Copie toda la definición predeterminada `SUBPANEL` de `/usr/dt/appconfig/types/`idioma/`dtwm.fp` en el nuevo archivo:

        SUBPANEL nombre_subpanel
       {
          …
       }

3. Modifique la definición del subpanel.

4. Guarde el nuevo archivo de configuración.

5. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

Por ejemplo, la siguiente definición, que se encuentra en el archivo `/users/juana/.dt/types/AplsPers.fp`, cambia el nombre del subpanel Aplicaciones personales:

    SUBPANEL PersAppsSubpanel
    {
       CONTAINER_NAME TextEditor
       TITLE          Aplicaciones de Juana
    }

#### Añadir un control accesible en el sistema a un subpanel incorporado

1. Cree un archivo de configuración del Panel Frontal `/etc/dt/appconfig/types/idioma/nombre.fp`.

2. Defina en el archivo el control accesible en el sistema.

   Utilice los campos `CONTAINER_NAME` y `CONTAINER_TYPE` para especificar el contenedor para el control:

       CONTROL nombre_control
       {
          CONTAINER_NAME nombre_subpanel
          CONTAINER_TYPE SUBPANEL
           …
       }

   Consulte la sección SAG.FrPC.mkr.15.

3. Guarde el archivo de configuración.

4. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

Por ejemplo, el siguiente control definido en un nuevo archivo /etc/dt/appconfig/types/idioma/RelojDigital.fp añade el RelojDigital (en el grupo de aplicaciones Herramientas_Escritorio) al subpanel Aplicaciones Personales para todos los usuarios.

    CONTROL DigitalClockControl
    {
       TYPE           icon
       CONTAINER_NAME PerAppsSubpanel
       CONTAINER_TYPE SUBPANEL
       ICON           Dtdgclk
       PUSH_ACTION    DigitalClock
       PUSH_RECALL    True
    }

#### Eliminar un control de un subpanel incorporado

- Utilice el mismo procedimiento que para eliminar un control del Panel Principal. Consulte la sección SAG.FrPC.mkr.11.

#### Eliminar el
control Instalar icono

- Añada el siguiente campo a la definición del subpanel:

       CONTROL_INSTALL False

### Cambiar el comportamiento de cierre automático de los subpaneles

El comportamiento predeterminado de los subpaneles consiste en cerrarse cuando el usuario elige un control, a no ser que el usuario haya movido el subpanel respecto a su posición original.

El Panel Frontal puede configurarse para que los subpaneles se conserven abiertos hasta que el usuario los cierre explícitamente.

1. Cree un nuevo archivo de configuración del Panel Frontal en:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/*.fp`

   - Personal: DirectorioInicio`/.dt/types/*.fp`

2. Copie la definición `PANEL` predeterminada de `/usr/dt/appconfig/types/`idioma/`dtwm.fp` en el nuevo archivo:

        PANEL FrontPanel
       {
          …
       }

3. Añada el siguiente campo a la definición de `PANEL`:

        SUBPANEL_UNPOST False

4. Guarde el nuevo archivo de configuración.

5. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

## Definición de los controles del Panel Frontal

El usuario puede crear controles personales soltando iconos en los controles Instalar Icono.

A pesar de que esta acción facilita la personalización, las funciones que proporciona constituyen sólo una parte de las posibilidades ofrecidas por los controles del Panel Frontal. Por ejemplo, un control creado utilizando el control Instalar Icono no puede:

- Proporcionar animación

- Mostrar una ventana del cliente

- Cambiar de aspecto cuando se produce un suceso (por ejemplo, al recibir correo nuevo)

Esta sección describe cómo crear manualmente los controles del Panel Frontal.

Para obtener información de consulta sobre la sintaxis de los controles del Panel Frontal, consulte la página de manual `dtfpfile(4X)`.

### Definiciones de controles del Panel Frontal

La estructura de una definición de control del Panel Frontal es:

    CONTROL nombre_control
    {
       TYPE           tipo_control
       CONTAINER_NAME valor
       CONTAINER_TYPE valor
       otros campos que definen el aspecto y el comportamiento
    }

###
Tipos de control

El campo `
TYPE` de la definición de control especifica el comportamiento básico del control.

TIPO control | Comportamiento del control
`icon` | (Valor predeterminado). El control ejecutará una acción especificada cuando el usuario pulse el control o suelte un archivo sobre él.
`blank` | Espacio reservado para ajustar el espaciado de los controles.
`busy` | Indicador luminoso de espera. El control parpadea (conmuta imágenes) cuando se invoca una acción.
`client` | Una ventana de cliente del Panel Frontal.
`clock` | Reloj.
`date` | Muestra la fecha actual.
`file` | Representa un archivo. Al elegir el control se ejecuta la acción predeterminada para el archivo.

### Crear un nuevo control

Esta sección describe los pasos generales para definir un control y describe cómo crear diversos tipos de controles.

1. Si el control ha de tener `PUSH_ACTION` y/o `DROP_ACTION`, cree las definiciones de acción. Éstas son las acciones que se ejecutan cuando el usuario pulsa sobre el control o suelta un archivo sobre él.

2. Cree los archivos de imágenes de iconos para el control.

   Para obtener información sobre los tamaños, nombres y ubicaciones de los iconos, consulte la sección SAG.CrIcn.mkr.3.

3. Cree un nuevo archivo de configuración del Panel Frontal en:

   - Accesible en el sistema: `/etc/dt/appconfig/types/idioma/*.fp`

   - Personal: DirectorioInicio`/.dt/types/*.fp`

4. Añada la definición de control al archivo.

5. Guarde el archivo.

6. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

#### Creación de un control que ejecuta una acción cuando se pulsa

Utilice estos campos para definir el comportamiento del control:

- `TYPE`: Establecido en `icon`

- `
  PUSH_ACTION:` Especifica el nombre de la acción a ejecutar

Por ejemplo, el siguiente control, que se pondrá en el subpanel Aplicaciones personales, ejecuta un juego que el usuario ha adquirido:

    CONTROL Ball
    {
       TYPE            icon
       CONTAINER_NAME  PersAppsSubpanel
       CONTAINER_TYPE  SUBPANEL
       ICON            ball
       PUSH_ACTION     RunBallGame
       HELP_STRING     Elija este control para jugar a Ball.
    }

El siguiente control se ubicará en la esquina superior izquierda del conmutador. Inicia una acción llamada CutDisp.

    CONTROL StartCutDisp
    {
       TYPE           icon
       CONTAINER_NAME Switch
       CONTAINER_TYPE SWITCH
       POSITION_HINTS first
       ICON           cutdisp
       HELP_STRING    Elija este control para ejecutar cutdisp.
       PUSH_ACTION    CutDisp
    }

####
Creación de un control que abre un archivo

Utilice estos campos para definir el comportamiento del control:

- `TYPE`: Establecido en `file`

- `
  FILE_NAME`: Especifica la ruta del archivo que se debe abrir

- `PUSH_ACTION`: Establecido en `Abrir`

Se tiene que haber definido una acción Abrir para el tipo de datos del archivo.

Por ejemplo, el siguiente control se ubicará en el extremo derecho del Panel Principal. Inicia el Editor de Textos con el archivo de datos `/users/elena/ListaTeléfonos.txt`. La acción Abrir para los archivos `*.txt` forma parte de la base de datos de acciones predeterminada.

    CONTROL EditPhoneList
    {
       TYPE           file
       FILE_NAME      /users/ellen/PhoneList.txt
       CONTAINER_NAME Superior
       CONTAINER_TYPE BOX
       POSITION_HINTS last
       ICON           PhoneBook
       HELP_STRING    Este control muestra la lista de teléfonos de Elena.
       PUSH_ACTION    Abrir
    }

#### Creación de un control que se comporta como una zona de soltar

Utilice el campo `
DROP_ACTION` para especificar la acción que se ejecuta cuando el usuario suelta un archivo sobre el control. La acción tiene que poder aceptar un argumento de archivo.

Normalmente, una definición de control incluye un campo `PUSH_ACTION` y un campo `DROP_ACTION`. Se puede utilizar la misma acción para la acción de pulsar y de soltar.

Por ejemplo, el siguiente control ubicado en el subpanel Aplicaciones personales ejecuta el cliente de X `xwud`, que toma un argumento de archivo.

    CONTROL Run_xwud
    {
       CONTAINER_NAME PerAppsSubpanel
       CONTAINER_TYPE SUBPANEL
       POSITION_HINTS 2
       ICON           XwudImage
       PUSH_ACTION    RunXwud
       DROP_ACTION    RunXwud
    }

#### Creación de un control que supervisa un archivo

Utilice estos campos para definir el comportamiento del control:

- `TYPE`: Especifique uno de los siguientes valores:

  `icon` | Utilice este tipo si desea especificar `PUSH_ACTION` y/o `DROP_ACTION` para el control`.`
  `file` | Utilice este tipo si desea que al elegir el control, éste se comporte igual que el archivo cuando se pulsa dos veces el icono del archivo en el Gestor de archivos.

- `ICON` y `
  ALTERNATE_ICON:`Describen las imágenes utilizadas para indicar el estado no modificado y modificado del archivo supervisado.

- `
  MONITOR_TYPE`: Describe las condiciones que hacen cambiar la imagen. Utilice uno de los siguientes valores:

  `mail` | El control cambiará de aspecto cuando se añada información al archivo.
  `file` | El control cambiará cuando el archivo especificado no quede vacío.

- `FILE_NAME
  `: Especifica el archivo que se debe supervisar.

Por ejemplo, el siguiente control busca si existe un archivo llamado `meetings` que espera transferir al sistema utilizando un ftp anónimo. El control se coloca en la parte superior del subpanel Aplicaciones personales.

    CONTROL MonitorCalendar
    {
       TYPE           file
       CONTAINER_NAME PersonalApps
       CONTAINER_TYPE SUBPANEL
       POSITION_HINTS first
       FILE_NAME      /users/ftp/meetings
       MONITOR_TYPE   file
       ICON           meetingsno
       ALTERNATE_ICON meetingsyes
    }

#### Creación de un control (de conmutación) de un caso

Un control de un caso comprueba si el proceso iniciado por `PUSH_ACTION` ya se está ejecutando. Si el proceso no se está ejecutando, se ejecuta `PUSH_ACTION`. Si el proceso ya se está ejecutando, la ventana se mueve a la parte superior de la pila de ventanas del espacio de trabajo actual.

Utilice estos campos para definir el comportamiento del control:

- `PUSH_RECALL`: Establecido en `True`.

- `
  CLIENT_NAME`: Especifica el nombre del cliente al control.

  El valor de `CLIENT_NAME` debe coincidir con la primera cadena (nombre_rec) de la propiedad WM_CLASS de la ventana de nivel superior de la aplicación. Para obtener más información, consulte la página de manual `xprop(1)`.

- `PUSH_ACTION`: Describe la acción ejecutada cuando el usuario pulsa el control.

Por ejemplo, el siguiente control ejecuta un caso de una aplicación cuya acción se llama MiEditor.

    CONTROL MyEditor
    {
       TYPE           icon
       CONTAINER_NAME Superior
       CONTAINER_TYPE BOX
       POSITION_HINTS 15
       PUSH_RECALL    True
       CLIENT_NAME    BestEditor
       PUSH_ACTION    StartMyEditor
       ICON           MyEd
    }

#### Crear un control de ventana de cliente

Un control de ventana de cliente es una ventana de aplicación incorporada al Panel Frontal. Por ejemplo, se puede poner un medidor de carga del sistema en el Panel Frontal creando un control de ventana de cliente `xload`.

1. Defina el control.

   Utilice estos campos para definir el comportamiento del control:

   - `TYPE`: Establecido en `client`.

   - `
     CLIENT_NAME`: Especifica el cliente que se debe iniciar.

     El valor de `CLIENT_NAME` debe coincidir con la primera cadena (nombre_rec) de la propiedad WM_CLASS de la ventana de nivel superior de la aplicación. Para obtener más información, consulte la página de manual `xprop(1)`.

   - `
     CLIENT_GEOMETRY`: Especifica el tamaño, en pixels, necesario para la ventana Panel Frontal del cliente.

     La página de manual `xwininfo(1)` describe cómo averiguar el tamaño de una ventana en pixels.

2. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

3. Inicie el cliente desde una línea de mandatos del emulador de terminal.

Por ejemplo, el siguiente control muestra un medidor de carga de 30 x 20 pixels.

    CONTROL LoadMeter
    {
       TYPE            client
       CONTAINER_NAME  Superior
       CONTAINER_TYPE  BOX
       CLIENT_NAME     xload
       CLIENT_GEOMETRY 30x20
    }

Si el cliente no se guarda y se restaura entre sesiones, es aconsejable configurar el control para que inicie el cliente cuando el usuario lo pulse. Por ejemplo, puede configurar el control LoadMeter para iniciar `xload` añadiendo la siguiente línea a la definición:

    PUSH_ACTION StartXload

y creando la acción:

    ACTION StartXload
    {
       WINDOW_TYPE  NO_STDIO
       EXEC_STRING  /usr/contrib/bin/X11/xload
    }

#### Animación de un control

Se puede conectar una secuencia de animación para utilizarla cuando el usuario elija el control o suelte un objeto sobre él.

Para tener una secuencia de animación, un control debe:

- Ser del tipo `icon`

- Tener `PUSH_ACTION` o `DROP_ACTION`

  1. Especifique la secuencia de animación utilizando el componente `
     ANIMATION`:

         ANIMATION nombre_animación
         {
          ANIMATION imagen_icono [retardo]
          ANIMATION imagen_icono [retardo]
            …
         }

     donde retardo es el tiempo de retardo entre iconos de animación, en milisegundos.

  2. Añada los campos `
     PUSH_ANIMATION` y/o `
     DROP_ANIMATION` a la definición de control. El valor es el nombre de la secuencia `ANIMATION`.

Por ejemplo, las líneas siguientes dotan de animación un control que inicia la aplicación MejorEditor. El tiempo de retardo entre iconos es de 300 milisegundos. En el ejemplo se supone que se han creado los archivos de iconos `frame1`, `frame2`, etc.

    CONTROL BestEditor
    {
       …
       PUSH_ANIMATION BestEdAnimation
       …
    }

    ANIMATION BestEdAnimation
    {
     ANIMATION frame1 300
     ANIMATION frame2
       …
    }

#### Cómo proporcionar Ayuda sobre el tema para los controles del Panel Frontal

Existen dos procedimientos para proporcionar ayuda para un control:

- Proporcionar una cadena de ayuda en la definición del control.

  La cadena de ayuda se muestra en el visor de ayuda cuando el usuario invoca la ayuda sobre el tema para el control. La cadena de ayuda no puede incluir formato (como por ejemplo, cabeceras) ni enlaces.

  Para proporcionar una cadena de ayuda, especifíquela en la definición del control:

       HELP_STRING cadena_ayuda

- Especificar un tema de ayuda en un volumen de ayudas registrado.

  Un tema de ayuda es información creada utilizando todas las posibilidades del sistema de ayudas. Para crear un tema de ayuda es necesario utilizar el Help Developer's Kit del escritorio.

  Para proporcionar un tema de ayuda, especifique el volumen de ayudas y el ID de tema en la definición del control:

      HELP_VOLUME nombre_volumen_ayudas
      HELP_TOPIC id_tema

## Personalización del conmutador de espacios de trabajo

Existen varios procedimientos para personalizar el conmutador de espacios de trabajo:

- Cambiar el número de espacios de trabajo

- Cambiar el diseño del conmutador

- Cambiar los controles del conmutador

### Cambiar el número predeterminado de espacios de trabajo

- Modifique el siguiente recurso del Gestor de espacios de trabajo:

  `Dtwm*workspaceCount`: n

Para obtener más información, consulte la sección SAG.WMCnf.mkr.6.

### Cambiar el número de filas de conmutadores

- Modifique el campo `
  NUMBER_OF_ROWS` en la definición de `SWITCH`.

Por ejemplo, la siguiente definición define un conmutador de tres filas.

    SWITCH Switch
    {
       CONTAINER_NAME  nombre_recuadro
       NUMBER_OF_ROWS  3
       …
    }

### Cambiar o añadir controles en el conmutador de espacios de trabajo

1. Cree un archivo de configuración del Panel Frontal con la definición del control.

   - Especifique que el control esté dentro del conmutador:

         CONTAINER_NAME Switch
         CONTAINER_TYPE SWITCH

   - Especifique la posición en el conmutador:

     POSITION_HINTS n

     donde n es un entero. Las posiciones se numeran secuencialmente de izquierda a derecha y de arriba a abajo. (Para el conmutador de dos filas predeterminado, las posiciones son de 1 a 4.)

2. Cree el icono para el control. Se recomienda un tamaño de 16 por 16 pixels.

Por ejemplo, el siguiente control pone un control Terminal en el conmutador.

    CONTROL SwitchTerminal
    {
       TYPE           icon
       CONTAINER_NAME Switch
       CONTAINER_TYPE SWITCH
       POSITION_HINTS 3
       ICON           Fpterm
       LABEL          Terminal
       PUSH_ACTION    Dtterm
       HELP_TOPIC     FPOnItemTerm
       HELP_VOLUME    FPanel
    }

El control utiliza un icono incorporado y el mismo tema de ayuda utilizado por el control Terminal del subpanel Aplicaciones personales.

## Configuración del Panel Frontal general

La sintaxis `PANEL` del Panel Frontal permite:

- Cambiar la ubicación del Panel Frontal

- Cambiar los accesorios de la ventana

- Establecer un aspecto y un comportamiento generales de los controles

La descripción `PANEL` predeterminada se encuentra en `/usr/dt/appconfig/types/`idioma`/dtwm.fp`.

Para obtener información adicional, consulte la página de manual `dtfpfile(4X)`.

### Pasos generales

1. Cree un nuevo archivo de configuración del Panel Frontal en `/etc/dt/appconfig/types/`idioma o DirectorioInicio`/.dt/types`.

2. Copie la descripción `PANEL` predeterminada de `/usr/dt/types/`idioma`/dtwm.fp` en el nuevo archivo.

3. Edite la descripción `PANEL`.

La nueva descripción `PANEL` tiene prioridad sobre la predeterminada.

### Cambiar la ubicación predeterminada del Panel Frontal

- Utilice el campo `
  PANEL_GEOMETRY` de la definición `PANEL` para especificar la ubicación.

  Por ejemplo, el siguiente panel se encuentra en la esquina superior derecha.

      PANEL SpecialFrontPanel
      {
         PANEL_GEOMETRY -1+1
         …
      }

### Etiquetar los controles del Panel Principal

1. Añada la línea siguiente a la definición `PANEL`:

        DISPLAY_CONTROL_LABELS True

2. Añada un campo `LABEL` a cada control.

nombre_control se utilizará si no se especifica `LABEL`.

### Cambiar el comportamiento de pulsación de los controles

- Utilice el campo `
  CONTROL_BEHAVIOR` en la definición `PANEL` para especificar el modo en que el usuario ejecuta `PUSH_ACTION` en un control. Los valores para el campo son:

  `single_click` | El usuario pulsa el control para ejecutar `PUSH_ACTION`
  `double_click` | El usuario pulsa dos veces el control para ejecutar `PUSH_ACTION`

### Crear un Panel Frontal completamente nuevo

Es preferible crear un Panel Frontal nuevo cuando se quieren realizar muchos cambios.

Para evitar conflictos con los componentes del Panel Frontal incorporado, un Panel Frontal nuevo deberá utilizar nombres nuevos para PANEL y para otros contenedores.

1. Cree el componente `PANEL` para el nuevo Panel Frontal. Déle un nombre exclusivo:

       PANEL nombre_panel_frontal
       {
          …
       }

2. Cree los recuadros y los controles nuevos, utilizando los nuevos nombres de contenedor.

   Si desea utilizar componentes existentes, deberá copiar sus definiciones y cambiar el valor `CONTAINER_NAME`.

3. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.

### Ejemplo de creación de un Panel Frontal personal con tres filas

El ejemplo siguiente cambia el Panel Frontal predeterminado de forma que sus controles estén ordenados en tres filas.

1. Copie `/usr/dt/appconfig/types/`idioma`/dtwm.fp` en DirectorioInicio`/.dt/types/MyFrontPanel.fp`. Proporcione el permiso de escritura del archivo.

   Éste es el archivo que se editará para proporcionar el nuevo Panel Frontal.

2. Cambie el nombre del Panel Frontal:

   PANEL NewFrontPanel

3. Cambie el nombre del recuadro llamado Superior y edite el nombre de su contenedor:

       BOX NewFrontPanelTop
       {
          CONTAINER_NAME NewFrontPanel
          POSITION_HINTS first
        …
       }

4. Añade las definiciones de recuadro para las filas del centro e inferior:

       BOX NewFrontPanelMiddle
       {
          CONTAINER_NAME NewFrontPanel
          POSITION_HINTS second
       }
       BOX NewFrontPanelBottom
       {
          CONTAINER_NAME NewFrontPanel
          POSITION_HINTS second
       }

5. Cambie el `CONTAINER_NAME` de los siguientes controles por `NewFrontPanelTop`:

   - Clock

   - Date

   - Home

   - TextEditor

   - Mail

6. Cambie el `CONTAINER_NAME` de los siguientes controles por `NewFrontPanelBottom`:

   - Printer

   - Style

   - Applications

   - Help

   - Trash

7. Cambie el `CONTAINER_NAME` del conmutador por `NewFrontPanelMiddle`.

8. Establezca el recurso:

   `Dtwm*frontPanel*name`: NewFrontPanel

9. Elija Reiniciar el Gestor de espacios de trabajo en el menú Espacio de trabajo.