# Erweiterte Anpassung des Bedienfeldes BedienfeldAnpassung

Der Benutzer kann das Bedienfeld über dessen Menüs und das Bedienelement 'Symbol installieren' in den Bedientafeln anpassen.

In diesem Kapitel wird die Anpassung des Bedienfeldes durch das Erstellen und Bearbeiten von Konfigurationsdateien behandelt.

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.20
SAG.FrPC.mkr.22

## Weiterführende Informationen

- Referenzinformationen zu Bedienelementen im Bedienfeld und der Konfiguration des Bedienfeldes können der Hilfeseite `dtfpfile(4X)` entnommen werden.

- Referenzinformationen zum Arbeitsbereichsmanager können der Hilfeseite `dtwm(1)` und `dtwmrc(4)` entnommen werden.

## Bedienfeldkonfigurationsdateien

Das Bedienfeld wird in einer Datenbank mit Konfigurationsdateien definiert.

Über diese Konfigurationsdateien kann das Bedienfeld angepaßt werden. Bestimmte Änderungen können nur durch Bearbeitung der Konfigurationsdatei durchgeführt werden. Dazu gehören

- das Hinzufügen eines neuen Bedienelements im Hauptbedienfeld.

- das Hinzufügen spezieller Bedienelemente, wie zum Beispiel Client-Fenster.

- das Ändern bestimmter Standardverhaltensweisen, zum Beispiel, ob die Bedienelemente im Bedienfeld durch einfaches Klicken oder durch Doppelklicken aktiviert werden.

Um dem Benutzer einen möglichst großen Spielraum bei der Konfiguration des Bedienfelds zu lassen, können die Konfigurationsdateien für einen einzelnen Benutzer definiert (persönlich), für das System definiert (systemweit) oder auf anderen Systemen gespeichert sein.

Das Bedienfeld wird durch den Arbeitsbereichsmanager erstellt und verwaltet.

### Standardkonfigurationsdatei des Bedienfeldes

Das Standardbedienfeld wird in der Bedienfeldkonfigurationsdatei `/usr/dt/appconfig/types/`sprache`/dtwm.fp`
definiert.

Diese Datei sollte nicht geändert werden.

### Suchpfad für Bedienfeldkonfigurationsdateien

Die Bedienfelddefinition kann auf beliebig viele Dateien im lokalen oder in anderen Systemen verteilt sein.

Dateien, die das Bedienfeld definieren, müssen folgenden Anforderungen entsprechen:

- Der Dateiname muß die Erweiterung `.fp` tragen, z. B., `mail.fp`.

- Die Datei muß sich im Datenbanksuchpfad für Aktionen befinden.

Der Standarddatenbanksuchpfad für Aktionen enthält folgende Verzeichnisse, die in der hier aufgeführten Reihenfolge durchsucht werden:

Standardverzeichnis`/.dt/types` | Persönliche Anpassungen
`/etc/dt/appconfig/types/`sprache | Systemweite Anpassungen
`/usr/dt/appconfig/types/`sprache | Integriertes Bedienfeld und Bedienelemente

Um persönliche Anpassungen, die über die Benutzerschnittstelle durchgeführt wurden, zu speichern,

wird ein zusätzliches Verzeichnis, Standardverzeichnis`/.dt/types/fp_dynamic`
angelegt. Dieses Verzeichnis nicht für manuelle Anpassungen verwenden.

Der Datenbanksuchpfad für Aktionen enthält möglicherweise zusätzliche Verzeichnisse, die das System für das Netzwerk konfigurieren. Insbesondere werden zusätzliche Positionen auf anderen Systemen hinzugefügt, wenn das System für den Zugriff auf einen Anwendungs-Server konfiguriert wird. Weitere Informationen können dem Abschnitt SAG.Datab.mkr.12 entnommen werden.

### Wie das Bedienfeld assembliert wird: Vorrangregeln

Das Bedienfeld wird aus allen Konfigurationsdateien im Datenbanksuchpfad für Aktionen assembliert.

Kommt es zu einem Konflikt zwischen Komponenten der Definition, bestimmen Vorrangregeln, welche Definition verwendet wird. Zwei Komponenten geraten in Konflikt miteinander, wenn

- sie denselben Bedienelementnamen, `CONTAINER_NAME` und `CONTAINER_TYPE` haben

- oder für sie dieselbe Position definiert ist (zwar unterschiedliche Namen, aber derselbe `CONTAINER_NAME`, `CONTAINER_TYPE` und `POSITION_HINTS`).

Für das Bedienfeld gelten folgende Vorrangregeln:

- Haben Komponenten denselben Bedienelementnamen, Container-Namen und -typ, wird die Komponente verwendet, die zuerst gelesen wird.

  Enthalten beispielsweise sowohl ein systemweites als auch ein integriertes Bedienelement die folgenden Felder, sind aber ansonsten unterschiedlich,

      CONTROL TextEditor
      {
         CONTAINER_TYPE   BOX
         CONTAINER_NAME   Top
         …
      }

  hat das systemweite Bedienelement Vorrang.

- Konkurrieren zwei Komponenten für dieselbe Position, werden sie in der Reihenfolge gesetzt, in der sie gelesen werden.

  Erstellt ein Benutzer beispielsweise ein neues persönliches Bedienelement für das Hauptbedienfeld (`CONTAINER_TYPE` BOX und `CONTAINER_NAME` Top) und ordnet ihm `POSITION_HINTS` 5 zu, schiebt das persönliche Bedienelement das integrierte Bedienelement und alle anderen Bedienelemente mit höheren Positionsnummern um eine Position nach rechts.

Wird ein Bedienelement geändert, indem eine neue systemweite oder persönliche Version davon erstellt wird, muß in der neuen Bedienelementdefinition derselbe Bedienelementname, `CONTAINER_NAME`, und `CONTAINER_TYPE` angegeben werden. Sonst wird das neue Bedienelement dem existierenden Bedienelement hinzugefügt.

### Dynamisch erstellte Bedienfelddateien

Paßt der Benutzer das Bedienfeld über das Bedienelement 'Symbol installieren' und Menüs an, werden Dateien in das Verzeichnis Standardverzeichnis`/.dt/types/fp_dynamic` geschrieben.

Das Bedienfeld erstellt eine zusätzliche Datei, Standardverzeichnis`/.dt/sessions/dtwmfp.session`,
in der der Status des angepaßten Bedienfeldes für jede Session gesichert und wiederhergestellt wird.

## Benutzerschnittstellenanpassungen verwalten

Über die Menüs der Bedienelemente und die Bedienelemente 'Symbol installieren' kann der Benutzer das Bedienfeld weitreichend anpassen.

Im folgenden Abschnitt wird beschrieben, wie

- bestimmte persönliche Anpassungen ausgeschlossen werden. Beispielsweise kann ausgeschlossen werden, daß ein Benutzer ein Bedienelement löscht.

- persönliche Anpassungen widerrufen werden. Beispielsweise kann ein Benutzer die Wiederherstellung eines versehentlich gelöschten Bedienelements anfordern.

### Persönliche Anpassungen ausschließen

1. Handelt es sich bei dem Bedienelement um ein integriertes Bedienelement, die Definition aus `/usr/dt/appconfig/types/`sprache`/dtwm.fp` in `/etc/dt/appconfig/types/sprache/name.fp` kopieren.

2. Die folgende Zeile zur Bedienelementdefinition hinzufügen:

       LOCKED   True

### Gelöschte Bedienelemente oder gelöschte Bedientafeln wiederherstellen

Die Aktion 'Bedienfeld wiederherstellen'
in der Gruppe von Anwendungen 'Desktop-Werkzeuge'
entfernt alle Bedienfeldanpassungen, die über die Benutzerschnittstelle durchgeführt wurden. Benutzer können mit dieser Aktion alle persönlichen Anpassungen, die sie über die Menüs des Bedienfeldes erstellt haben, entfernen.

Auf folgende Art und Weise ein einzelnes Bedienelement wiederherstellen:

- Im Verzeichnis Standardverzeichnis`/.dt/types/fp_dynamic` die Datei entfernen, die erstellt wurde, als das Bedienelement vom Benutzer gelöscht wurde. Das Bedienelement trägt denselben Namen wie das ursprünglich gelöschte.

  Wurde beispielsweise das Bedienelement Symboleditor gelöscht, enthält eine Datei im Verzeichnis `fp_dynamic` folgenden Eintrag:

      CONTROL IconEditor
      {
         …
         DELETE   True
      }

Wird eine Bedientafel gelöscht, wird eine separate dynamische Datei für die Bedientafel und für jedes Bedienelement in der Bedientafel erstellt.

Für weitere Informationen zu diesem Thema, sieheSAG.FrPC.div.11

## Organisation der Bedienfelddefinition

Das Bedienfeld wird durch Assemblierung der Definitionen seiner Komponenten aufgebaut. Für jede dieser Komponenten ist eine bestimmte Syntax erforderlich, die definiert, wo im Bedienfeld die Komponente steht, wie sie aussieht und wie sie sich verhält.

### Bedienfeldkomponenten

Das Bedienfeld ist folgendermaßen aufgebaut:

- Das Bedienfeld (`
  PANEL)` ist der Container der obersten Ebene, das übergeordnete Verzeichnis, des gesamten Bedienfeldes.

- Das `PANEL` ist ein Container für ein oder mehrere Felder (`BOX`en).

- Eine `
  BOX` ist ein Container für ein oder mehrere Bedienelemente (`CONTROL`s).

Es gibt zwei spezielle Typen von Containern:

- Eine Bedientafel (`
  SUBPANEL)` ist einem bestimmten Bedienelement zugeordnet (das Bedienelement ist der Container für die Bedientafel). Bedientafeln öffnen sich von dem Bedienelement, dem sie zugeordnet sind, nach oben.

- Der Arbeitsbereichsumschalter
  (`SWITCH)` enthält die Tasten zum Wechseln der Arbeitsbereiche sowie zusätzliche Bedienelemente.

### Allgemeine Syntax der Bedienfelddefinition

Jede Komponente im Bedienfeld wird einzeln definiert. Dabei wird folgende Syntax verwendet:

    COMPONENT name
    {
       KEYWORD wert
       KEYWORD wert
       …
    }

Einige Schlüsselwörter sind erforderlich, andere sind wahlfrei. Weitere Informationen können der Hilfeseite `dtfpfile(4X`) entnommen werden.

#### Bedienfelddefinition (PANEL)

`PANEL` ist die Komponente der obersten Ebene. Die Definition enthält

- den Bedienfeldnamen

- Felder, die das allgemeine Erscheinungsbild und das Verhalten des gesamten Bedienfeldes beschreiben.

    PANEL bedienfeld_name
    {
       KEYWORD  wert
       KEYWORD  wert
     …
    }

Der Parameter bedienfeld_name ist ein eindeutiger Name für das Bedienfeld. Der Standardname ist “FrontPanel.”

#### Felddefinitionen (BOX)

Eine Definition für `BOX` beschreibt

- den Namen der `BOX`

- in welchem Bedienfeld (`PANEL)` sich das Feld befindet (`
  CONTAINER_NAME`)

- die Position des Feldes im Bedienfeld (`POSITION_HINTS` )

- Felder, die das allgemeine Erscheinungsbild und das Verhalten des gesamten Feldes beschreiben

    BOX feld_name
    {
       CONTAINER_NAME  bedienfeld_name
       POSITION_HINTS  position
       KEYWORD         wert
       KEYWORD         wert
       …
    }

#### Bedienelementdefinitionen (CONTROL)

Eine Definition für `CONTROL` beschreibt

- den Namen des Bedienelements (`CONTROL)`

- ob es sich bei dem Bedienelement um ein Feld, eine Bedientafel oder den Arbeitsbereichsumschalter handelt (`
  CONTAINER_TYPE`)

- in welchem/r Feld, Bedientafel oder Arbeitsbereichsumschalter sich das Bedienelement befindet (`
  CONTAINER_NAME`)

- die Position des Bedienelements im Feld (`POSITION_HINTS` ).

- Felder, die das allgemeine Erscheinungsbild und das Verhalten des Bedienelements beschreiben

    CONTROL bedienelement_name
    {
       CONTAINER_TYPE     BOX oder SUBPANEL oder SWITCH
       CONTAINER_NAME     feld_name oder bedientafel_name oder schalter_name
       TYPE               bedienelement_typ
       POSITION_HINTS     position
       KEYWORD            wert
       KEYWORD            wert
       …
    }

#### Bedientafeldefinitionen (SUBPANEL)

Eine Definition für `SUBPANEL` beschreibt

- den Namen der Bedientafel (`SUBPANEL)`

- den Namen des Bedienelements, dem die Bedientafel zugeordnet ist
  (`
  CONTAINER_NAME`)

- Felder, die das spezifische Erscheinungsbild und Verhalten der Bedientafel beschreiben

    SUBPANEL bedientafel_name
    {
       CONTAINER_NAME   bedienelement_name
       KEYWORD          wert
       KEYWORD          wert
       …
    }

#### Arbeitsbereichsumschalterdefinition (SWITCH)

Die Definition für `SWITCH` beschreibt

- den Namen des Arbeitsbereichsumschalters

- in welchem Feld sich der Arbeitsbereichsumschalter befindet (`
  CONTAINER_NAME` )

- die Position des Arbeitsbereichsumschalters innerhalb des Feldes (`POSITION_HINTS`)

- Felder, die das Erscheinungsbild und Verhalten des Arbeitsbereichsumschalters beschreiben

    SWITCH schalter_name
    {
       CONTAINER_NAME  feld_name
       POSITION_HINTS  position
       KEYWORD         wert
       KEYWORD         wert
       …
    }

## Hauptanzeige ändern

Bei der Hauptanzeige handelt es sich um das Bedienfeldfenster ohne die Bedientafeln.

### Container der Hauptanzeige

Folgende Änderungen können vorgenommen werden:

- Hinzufügen oder Entfernen von Bedienelementen

- Austauschen der Positionen von Bedienelementen

### Bedienelemente der Hauptanzeige hinzufügen

1. Eine Bedienfeldkonfigurationsdatei erstellen:

   - systemweit: `/etc/dt/appconfig/types/sprache/*.fp`

   - persönlich: Standardverzeichnis`/.dt/types/*.fp`

2. Das Bedienelement in der Datei definieren.

   Mit den Feldern `CONTAINER_NAME` und `CONTAINER_TYPE` den Container für das Bedienelement spezifizieren:

       CONTAINER_NAME   Top
       CONTAINER_TYPE   BOX

   Mit `POSITION_HINTS` die Position von links nach rechts für das Bedienelement angeben. Da Anpassungen Vorrang vor integrierten Bedienelementen haben, schiebt das neue Bedienelement das bereits vorhandene Bedienelement um eine Position nach rechts.

3. Die Konfigurationsdatei sichern.

4. Ein Symbol für das Bedienelement im Bedienfeld erstellen.

   Nähere Informationen hierzu können dem Abschnitt SAG.CrAct.mkr.10 entnommen werden.

5. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

Beispielsweise stellt die folgende Bedienelementdefinition in der Datei `/etc/dt/appconfig/types/sprache/audio.fp` ein Bedienelement für eine Audio-Anwendung zwischen die Bedienelemente für Uhr und Kalender.

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

### Bedienelemente entfernen

1. Eine Bedienfeldkonfigurationsdatei erstellen:

   - systemweit: `/etc/dt/appconfig/types/sprache/name.fp`

   - persönlich: Standardverzeichnis`/.dt/types/`name`.fp`

2. Die Definition des Bedienelements, das gelöscht werden soll, in die neue Datei kopieren.

   Handelt es sich um ein integriertes Bedienelement, befindet sich die Definition in `/usr/dt/appconfig/types/`sprache`/dtwm.fp.`

   Es ist nicht notwendig, die gesamte Definition zu kopieren. Die Felder `CONTAINER_NAME` und `CONTAINER_TYPE`müssen jedoch auf jeden Fall kopiert werden.

3. Das Feld `DELETE` der Definition hinzufügen:

   `DELETE True`

4. Die Konfigurationsdatei sichern.

5. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

Beispielsweise entfernt die folgende Bedienelementdefinition in der Datei `/etc/dt/appconfig/types/`sprache`/TrashCan.fp` das Bedienelement 'Papierkorb' aus dem Bedienfeld.

    CONTROL Trash
    {
       CONTAINER_NAME  Top
       CONTAINER_TYPE  BOX
       DELETE          True
    }

### Bedienelemente ändern

Zum Ändern einer Bedienelementdefinition, zum Beispiel eines Symbolbildes, die folgende Prozedur verwenden.

1. Die gesamte Bedienelementdefinition aus `/usr/dt/appconfig/types/`sprache`/dtwm.fp` in folgende Dateien kopieren:

   - systemweit: `/etc/dt/appconfig/types/sprache/name.fp`

   - persönlich: Standardverzeichnis`/.dt/types/`name`.fp`.

2. Das Feld, das geändert werden soll, bearbeiten. Es können auch zusätzliche Felder hinzugefügt werden.

3. Die Datei sichern.

4. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

### Positionen von Bedienelementen austauschen

1. Die Bedienelementdefinitionen der Bedienelemente, deren Positionen geändert werden sollen, von `/usr/dt/appconfig/types/`sprache`/dtwm.fp` in folgende Dateien kopieren:

   - systemweit:`/etc/dt/appconfig/types/sprache/name.fp`

   - persönlich: Standardverzeichnis`/.dt/types/`name`.fp`.

     Die gesamte Bedienelementdefinition für jedes Bedienelement, das verschoben werden soll, kopieren.

2. Die Werte der Felder `
   POSITION_HINTS` der Bedienelementdefinitionen austauschen.

3. Die Datei sichern.

4. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

Beispielsweise tauschen die folgenden Definitionen in einer Datei `/etc/dt/appconfig/types/C/MailHelp.fp` die Positionen der Bedienelemente für Post und Hilfemanager aus und sperren diese gegen persönliche Änderungen einzelner Benutzer.

    CONTROL Mail
    {
       POSITION_HINTS  12
       LOCKED          True
       …der rest der definition des bedienelements
    }

    CONTROL Help
    {
       POSITION_HINTS  5
       LOCKED          True
       …der rest der definition des bedienelements
    }

### Ein Bedienelement im Bedienfeld ersetzen

- Eine weitere Bedienelementdefinition mit denselben Parametern erstellen:

  - bedienelement_name

  - `
    CONTAINER_NAME` Wert

Beispielsweise sind die beiden folgenden Bedienelemente in zwei verschiedenen Konfigurationsdateien definiert. Die Bedienelemente haben denselben Bedienelementnamen und Container-Namen und werden daher als dasselbe Bedienelement betrachtet.

- Definition in `/etc/dt/appconfig/types/C/SysControls.fp`:

      Control ImportantApplication
      {
         CONTAINER_NAME   Top
         CONTAINER_TYPE   BOX
         POSITION_HINTS   2
         …

- Definition in Standardverzeichnis`/.dt/types/MyControls.fp`:

      Control ImportantApplication
      {
         CONTAINER_NAME   Top
         CONTAINER_TYPE   BOX
         POSITION_HINTS   6
         …

Das persönliche Bedienelement hat Vorrang, so daß das Bedienelement an die Position 6 gestellt wird.

### Symbol angeben, das von einem Bedienelement verwendet werden soll

Das Feld `
ICON` der Bedienelementdefinition definiert, welches Symbolbild für das Bedienelement verwendet wird.

Der Wert für das Feld `ICON` kann auf die folgenden Weisen angegeben werden:

- durch den Dateinamen ohne Pfad

  Der Dateiname ohne Pfad ist der Name der Datei, die das Symbolbild enthält, ohne die Dateinamenerweiterungen für Größe (`m` und `t`) und Abbildtyp (`bm` und `pm`). Beispielsweise lautet bei den Dateien mit den Namen `MyGame.l.pm` und `MyGame.m.pm` der Dateiname ohne Pfad `MyGame`.

  Wird der Dateiname ohne Pfad verwendet, müssen sich die Symboldateien in einem Verzeichnis im Symbolsuchpfad befinden:

  - persönliche Symbole: Standardverzeichnis`/.dt/icons`

  - systemweite Symbole: `/etc/dt/appconfig/icons/`sprache

- durch einen absoluten Pfad zu der Symboldatei, einschließlich des vollständigen Dateinamens

  Der absolute Pfad sollte nur verwendet werden, wenn sich die Symboldatei nicht im Symbolsuchpfad befindet.

Die Größe des Symbols richtet sich nach der Position des Bedienelements:

Position | Größe
Hauptanzeige | 48 x 48 Pixel (name`.l.pm` oder name`.l.bm`)
Bedientafel | 32 x 32 Pixel (name`.m.pm` oder name`.m.bm`)

Die Symboldatei in eine der folgenden Positionen stellen:

- persönliche Symbole: Standardverzeichnis`/.dt/icons`

- systemweite Symbole: `/etc/dt/appconfig/icons/`sprache

## Bedientafeln erstellen und ändern

Der Benutzer kann Bedientafeln über die Menüs des Bedienfeldes erstellen und ändern.

Im folgenden Abschnitt wird erläutert, wie durch Änderung der Bedienfeldkonfigurationsdateien eine systemweite Anpassung erreicht wird.

Eine Bedientafel ist einem Bedienelement in der Hauptanzeige zugeordnet.

### Der Container einer Bedientafel ist das Bedienelement, dem sie zugeordnet ist.

Die Zuordnung erfolgt über die Bedientafeldefinition. Im Feld `CONTAINER_NAME` wird angegeben, welchem Bedienelement die Bedientafel zugeordnet ist.

    CONTROL bedienelement_name
    {
       …
    }

    SUBPANEL bedientafel_name
    {
       CONTAINER_NAME  bedienelement_name
       …
    }

### Neue systemweite Bedientafeln erstellen

1. Den bedienelement_name des Bedienelements in der Hauptanzeige feststellen, dem die Bedientafel zugeordnet werden soll.

   Handelt es sich bei dem Bedienelement um eines der integrierten Bedienelemente, befindet sich die Definition in `/usr/dt/appconfig/types/`sprache`/dtwm.fp`.

2. Eine neue Datei `/etc/dt/appconfig/types/`sprache`/*.fp` erstellen.

3. Die Bedientafel definieren:

       SUBPANEL bedientafel_name
       {
          CONTAINER_NAME  bedienelement_name
          TITLE           wert
          KEYWORD         wert
          …
       }

4. Die neue Konfigurationsdatei sichern.

5. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

### Integrierte Bedientafeln anpassen

Es können allgemeine Merkmale (wie zum Beispiel der Titel) sowie der Inhalt der integrierten Bedientafeln geändert werden.

#### Allgemeine Merkmale einer integrierten Bedientafel ändern

1. Eine neue Bedienfeldkonfigurationsdatei erstellen:

   - systemweit: `/etc/dt/appconfig/types/sprache/name.fp`

   - persönlich: Standardverzeichnis`/.dt/types/`name`.fp`.

2. Die gesamte Standardbedientafeldefinition (`SUBPANEL)` aus der Datei `/usr/dt/appconfig/types/`sprache`/dtwm.fp` in die neue Datei kopieren:

       SUBPANEL bedientafel_name
       {
          …
       }

3. Die Bedientafeldefinition ändern.

4. Die neue Konfigurationsdatei sichern.

5. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

Wird beispielsweise die folgende Definition in die Datei`/users/janice/.dt/types/PerApps.fp` gestellt, wird dadurch der Name der Bedientafel Persönliche Anwendungen geändert:

    SUBPANEL PersAppsSubpanel
    {
     CONTAINER_NAME  TextEditor
     TITLE           anwendungen von Janice
    }

#### Systemweite Bedienelemente einer integrierten Bedientafel hinzufügen

1. Eine Bedienfeldkonfigurationsdatei `/etc/dt/appconfig/types/sprache/name.fp` erstellen.

2. Das systemweite Bedienelement in der Datei definieren.

   Mit den Feldern `CONTAINER_NAME` und `CONTAINER_TYPE` den Container für das Bedienelement angeben:

       CONTROL bedienelement_name
       {
          CONTAINER_NAME   bedientafel_name
          CONTAINER_TYPE   SUBPANEL
          …
       }

   Weitere Informationen hierzu können dem Abschnitt SAG.FrPC.mkr.15 entnommen werden.

3. Die Konfigurationsdatei sichern.

4. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

Beispielsweise fügt das folgende Bedienelement, das in einer neuen Datei `/etc/dt/appconfig/types/sprache/DigitalClock.fp` definiert ist, die Anwendung Digitaluhr (in der Gruppe von Anwendungen 'Desktop- Werkzeuge') der Bedientafel 'Persönliche Anwendungen' für alle Benutzer hinzu.

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

#### Bedienelemente aus einer integrierten Bedientafel entfernen

- Dieselbe Prozedur wie zum Entfernen eines Bedienelements aus der Hauptanzeige verwenden. Weitere Infomationen hierzu können dem Abschnitt SAG.FrPC.mkr.11 entnommen werden.

#### Bedienelement 'Symbol installieren' entfernen

- Das folgende Feld der Bedientafeldefinition hinzufügen:

      CONTROL_INSTALL   False

### Automatisches Schließen von Bedientafeln ändern

Standardmäßig werden Bedientafeln geschlossen, wenn der Benutzer ein Bedienelement auswählt, es sei denn, der Benutzer hat die Bedientafel aus ihrer ursprünglichen Position verschoben.

Das Bedienfeld kann so konfiguriert werden, daß Bedientafeln geöffnet bleiben, bis der Benutzer sie explizit schließt.

1. Eine neue Bedienfeldkonfigurationsdatei erstellen:

   - systemweit: `/etc/dt/appconfig/types/sprache/*.fp`

   - persönlich: Standardverzeichnis`/.dt/types/*.fp`

2. Die Standarddefinition für `PANEL` aus der Datei `/usr/dt/appconfig/types/`sprache/`dtwm.fp` in die neue Datei kopieren:

       PANEL FrontPanel
       {
          …
       }

3. Das folgende Feld zu der Definition für `PANEL` hinzufügen:

       SUBPANEL_UNPOST   False

4. Die neue Konfigurationsdatei sichern.

5. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

## Bedienelemente im Bedienfeld definieren

Der Benutzer kann persönliche Bedienelemente erstellen, indem er Symbole an die Bedienelemente 'Symbol installieren' übergibt.

Dadurch wird die Anpassung zwar wesentlich vereinfacht, aber ein Teil der Funktionalität der Bedienelemente im Bedienfeld geht verloren. Beispielsweise kann ein Bedienelement, das mit dem Bedienelement 'Symbol installieren' erstellt wurde

- keine Animation zur Verfügung stellen

- kein Client-Fenster anzeigen

- nicht bei Auftreten eines Ereignisses das Erscheinungsbild ändern (beispielsweise beim Empfangen von Post)

Im folgenden Abschnitt wird beschrieben, wie Bedienelemente im Bedienfeld manuell erstellt werden.

Referenzinformationen zur Syntax von Bedienelementen im Bedienfeld können der Hilfeseite `dtfpfile(4X)` entnommen werden.

### Definitionen für ein Bedienelement im Bedienfeld

Eine Definition eines Bedienelements im Bedienfeld hat folgende Struktur:

    CONTROL bedienelement_name
    {
       TYPE             control_type
       CONTAINER_NAME   wert
       CONTAINER_TYPE   wert
       andere felder zur definition von erscheinungsbild und verhalten
    }

### Bedienelementtypen

Das Feld `
TYPE` in der Bedienelementdefinition gibt das grundlegende Verhalten des Bedienelements an.

Bedienelementtyp | Bedienelementverhalten
`icon` | (Standard). Das Bedienelement führt eine angegebene Aktion aus, wenn der Benutzer das Bedienelement doppelklickt oder dem Bedienelement eine Datei übergibt.
`blank` | Platzhalter, mit dem der Abstand zwischen Bedienelementen geregelt werden kann.
`busy` | Betriebsanzeige. Das Bedienelement blinkt (schaltet zwischen Bildschirmen hin und her), wenn eine Aktion aufgerufen wird.
`client` | Ein Client-Fenster im Bedienfeld.
`clock` | Uhr.
`date` | Zeigt das aktuelle Datum an.
`file` | Stellt eine Datei dar. Durch Auswahl des Bedienelements wird die Standardaktion für die Datei ausgeführt.

### Neue Bedienelemente erstellen

Im folgenden Abschnitt wird die Vorgehensweise bei der Definition eines Bedienelements beschrieben und erläutert, wie verschiedene Bedienelementtypen erstellt werden.

1. Soll das Bedienelement über die Aktionen `PUSH_ACTION` und/oder `DROP_ACTION` verfügen, die entsprechenden Aktionsdefinitionen erstellen. Hierbei handelt es sich um die Aktionen, die ausgeführt werden, wenn der Benutzer das Bedienelement anklickt oder ihm eine Datei übergibt.

2. Die Symbolbilddateien für das Bedienelement erstellen.

   Informationen zu Symbolgrößen, -namen und -positionen können dem Abschnitt SAG.CrIcn.mkr.3 entnommen werden.

3. Eine neue Bedienfeldkonfigurationsdatei erstellen in:

   - systemweit: `/etc/dt/appconfig/types/sprache/*.fp`

   - persönlich: Standardverzeichnis`/.dt/types/*.fp`

4. Die Bedienelementdefinition der Datei hinzufügen.

5. Die Datei sichern.

6. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

#### Bedienelement erstellen, das bei Anklicken eine Aktion ausführt

Folgende Felder verwenden, um das Verhalten des Bedienelements zu definieren:

- `TYPE`: Auf `icon` setzen

- `
  PUSH_ACTION:` Gibt den Namen der Aktion an, die ausgeführt werden soll

Beispielsweise führt das folgende Bedienelement, das in die Bedientafel 'Persönliche Anwendungen' gestellt wird, ein Spiel aus, das der Benutzer am System installiert hat.

    CONTROL Ball
    {
       TYPE           icon
       CONTAINER_NAME PersAppsSubpanel
       CONTAINER_TYPE SUBPANEL
       ICON           ball
       PUSH_ACTION    RunBallGame
       HELP_STRING    "Dieses Bedienelement auswählen, um Ball zu spielen."
    }

Das folgende Bedienelement wird in die obere linke Ecke des Arbeitsbereichsumschalters gestellt. Es startet eine Aktion mit dem Namen 'CutDisp'.

    CONTROL StartCutDisp
    {
       TYPE            icon
       CONTAINER_NAME  Switch
       CONTAINER_TYPE  SWITCH
       POSITION_HINTS  first
       ICON            cutdisp
       HELP_STRING     "Dieses Bedienelement auswählen, um cutdisp auszuführen."
       PUSH_ACTION     CutDisp
    }

#### Bedienelement erstellen, das eine Datei öffnet

Folgende Felder verwenden, um das Verhalten des Bedienelements zu definieren:

- `TYPE`: Auf `file` setzen

- `
  FILE_NAME:` Gibt den Pfad der Datei an, die geöffnet werden soll.

- `PUSH_ACTION:` Auf `Open` setzen

Eine Aktion 'Öffnen' muß für den Datentyp der Datei definiert sein.

Beispielsweise wird das folgende Bedienelement ganz rechts in die Hauptanzeige gestellt. Es startet den Texteditor mit der Datendatei `/users/ellen/PhoneList.txt`. Die Aktion 'Öffnen' für Dateien des Typs `*.txt` ist Bestandteil der Standarddatenbank für Aktionen.

    CONTROL EditPhoneList
    {
       TYPE            file
       FILE_NAME       /users/ellen/PhoneList.txt
       CONTAINER_NAME  Top
       CONTAINER_TYPE  BOX
       POSITION_HINTS  last
       ICON            PhoneBook
       HELP_STRING     "Dieses Bedienelement zeigt Ellens Telefonliste"
       PUSH_ACTION     Open
    }

#### Bedienelement erstellen, das als Übergabebereich fungiert

Im Feld `
DROP_ACTION` die Aktion angeben, die ausgeführt wird, wenn der Benutzer eine Datei an das Bedienelement übergibt. Die Aktion muß ein Dateiargument akzeptieren können.

Häufig enthält eine Bedienelementdefinition sowohl ein Feld `PUSH_ACTION` als auch ein Feld `DROP_ACTION`. Dieselbe Aktion kann sowohl für Übergabe als auch für Anklicken verwendet werden.

Beispielsweise führt das folgende Bedienelement in der Bedientafel 'Persönliche Anwendungen' den X-Client `xwud` aus, der ein Dateiargument benötigt.

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

#### Bedienelement erstellen, das eine Datei überwacht

Folgende Felder verwenden, um das Verhalten des Bedienelements zu definieren:

- `TYPE`: Einen der folgenden Werte eingeben:

  `icon` | Diesen Typ verwenden, wenn `PUSH_ACTION` und/oder `DROP_ACTION` für das Bedienelement angegeben werden soll.
  `file` | Diesen Typ verwenden, wenn das Bedienelement sich nach der Auswahl wie die Datei verhalten soll, wenn das Symbol der Datei im Dateimanager doppelgeklickt wird.

- `ICON` und `
  ALTERNATE_ICON:` Beschreiben die Bilder, mit denen der ursprüngliche und der geänderte Status der überwachten Datei angegeben wird.

- `
  MONITOR_TYPE`: Beschreibt die Bedingungen, unter denen ein Bild sich ändert. Einen der folgenden Werte verwenden:

  `mail` | Das Bedienelement ändert sein Erscheinungsbild, wenn der Datei Informationen hinzugefügt werden.
  `file` | Das Bedienelement ändert sich, wenn der angegebenen Datei Informationen hinzugefügt werden.

- `FILE_NAME
  `: Gibt die zu überwachende Datei an.

Beispielsweise sucht das folgende Bedienelement eine Datei `meetings`, die mit einem anonymen ftp auf das System übertragen werden soll. Das Bedienelement wird an erster Position in die Bedientafel 'Persönliche Anwendungen' gestellt.

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

#### Bedienelement zum Umschalten erstellen

Ein Bedienelement zum Umschalten prüft, ob der Prozeß, der von `PUSH_ACTION` gestartet wurde, bereits ausgeführt wird. Wenn der Prozeß nicht ausgeführt wird, wird `PUSH_ACTION` ausgeführt. Wenn der Prozeß bereits ausgeführt wird, erhält das Fenster die oberste Ebene im Fensterstapel des aktuellen Arbeitsbereichs.

Folgende Felder verwenden, um das Verhalten des Bedienelements zu definieren:

- `PUSH_RECALL`: Auf `True` setzen.

- `
  CLIENT_NAME`: Gibt den Namen des Clients an das Bedienelement.

  Der Wert von `CLIENT_NAME` muß mit der ersten Zeichenfolge (res_name) der Eigenschaft WM_CLASS übereinstimmen. Informationen dazu können der Hilfeseite `xprop(1)` entnommen werden.

- `PUSH_ACTION`: Beschreibt die Aktion 'Ausführen', wenn der Benutzer auf das Bedienelement klickt.

Beispielsweise führt das folgende Bedienelement eine Anwendung mit der Aktion MyEditor einmalig aus:

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

#### Clientfensterbedienelement erstellen

Ein Clientfensterbedienelement ist ein Anwendungsfenster im Bedienfeld. Beispielsweise kann durch das Erstellen eines `xload` Clientfensterbedienelements eine Systemauslastungsanzeige in das Bedienfeld gestellt werden.

1. Das Bedienelement definieren.

   Folgende Felder verwenden, um das Verhalten des Bedienelements zu definieren:

   - `TYPE`: Auf `client` setzen.

   - `
     CLIENT_NAME`: Gibt den Client an, der gestartet werden soll.

     Der Wert von `CLIENT_NAME` muß mit der ersten Zeichenfolge (res_name) der Eigenschaft WM_CLASS übereinstimmen. Informationen dazu können der Hilfeseite `xprop(1)` entnommen werden.

   - `
     CLIENT_GEOMETRY`: Gibt in Pixel die Größe des Bedienfeldfensters für den Benutzer an.

     Die Hilfeseite `xwininfo(1)` beschreibt, wie man die Größe eines Fensters in Pixel erhält.

2. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

3. Den Client aus einer Terminal-Emulatorbefehlszeile starten.

Beispielsweise zeigt das folgende Bedienelement eine Auslastung von 30 x 20 Pixel.

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

Wenn der Client zwischen Sessions nicht gespeichert und wiederhergestellt wird, kann das Bedienelement so konfiguriert werden, daß es den Client startet, wenn es vom Benutzer angeklickt wird. Beispielsweise kann das Bedienelement zur Systemauslastung so konfiguriert werden, daß xload gestartet wird durch Hinzufügen der folgenden Zeile in der Definition

    PUSH_ACTION  StartXload

und dem Erstellen dieser Aktion.

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

#### Bedienelement animieren

Eine Animationsfolge kann hinzugefügt werden, die ausgeführt wird, wenn der Benutzer das Bedienelement anwählt oder ihm ein Objekt übergibt.

Für eine Animationsfolge muß ein Bedienelement folgende Eigenschaften besitzen:

- Vom Typ `icon`sein

- Über `PUSH_ACTION` oder `DROP_ACTION` verfügen

  1. Die Animationsfolge mit der Komponente `
     ANIMATION` angeben:

         ANIMATION animation_name
         {
          ANIMATION symbol_bild  [verzögerung]
          ANIMATION symbol_bild  [verzögerung]
            …
         }

     wobei verzögerung die Zeitverzögerung in Millisekunden zwischen der Animation von Symbolen angibt.

  2. Die Felder `
     PUSH_ANIMATION` und/oder `
     DROP_ANIMATION` der Bedienelementdefinition hinzufügen. Der Wert ist der Name der Folge `ANIMATION`.

Beispielsweise animieren die folgenden Zeilen ein Bedienelement, das die Anwendung BestEditor startet. Die Zeitverzögerung zwischen Symbolen beträgt 300 Millisekunden. In diesem Beispiel wird angenommen, daß die Symboldateien `frame1`, `frame2` usw. erstellt wurden.

    CONTROL BestEditor
    {
       …
       PUSH_ANIMATION BestEdAnimation
       …
    }

    ANIMATION BestEdAnimation
    {
     ANIMATION frame1    300
     ANIMATION frame2
       …
    }

#### Kontexthilfe für Bedienelemente des Bedienfeldes

Es gibt zwei Möglichkeiten der Kontexthilfe für ein Bedienelement:

- Eine Hilfezeichenfolge in der Bedienelementdefinition.

  Die Hilfezeichenfolge wird in der Hilfeanzeige angezeigt, wenn der Benutzer Kontexthilfe für das Bedienelement aufruft. Die Hilfezeichenfolge kann keine Formatierungen (z.B. Kopfzeilen) oder Verweise enthalten.

  Die Hilfezeichenfolge in der Bedienelementdefinition angeben:

      HELP_STRING   hilfe_zeichenfolge

- Ein Hilfethema in einem registrierten Hilfeband:

  Ein Hilfethema sind zusammengefaßte Informationen mit den vollen Möglichkeiten des Hilfesystems. Um ein Hilfethema zu verfassen, ist der Help Developers Kit des Desktops erforderlich.

  Den Hilfeband und Kennummer des Themas in der Bedienelementdefinition angeben.

      HELP_VOLUME   hilfeband_name
      HELP_TOPIC    thema_kennummer

## Arbeitsbereichsumschalter anpassen

Es gibt verschiedene Möglichkeiten, den Arbeitsbereichsumschalter anzupassen:

- Anzahl der Arbeitsbereiche ändern

- Anordnung des Schalters ändern

- Bedienelemente im Schalter ändern

### Standardanzahl der Arbeitsbereiche ändern

- Die folgende Arbeitsbereichsmanagerressource ändern:

  `Dtwm*workspaceCount`: n

Mehr Informationen können dem Abschnitt “Die Anzahl von Arbeitsplätzen auf einer systemweiten Basis” auf Seite 244 entnommen werden.

### Anzahl der Schalterzeilen ändern

- Das Feld `
  NUMBER_OF_ROWS` in der `SWITCH` Definition ändern.

Beispielsweise definiert die folgende Definition einen Schalter mit drei Zeilen.

    SWITCH Switch
    {
       CONTAINER_NAME  feld_name
       NUMBER_OF_ROWS  3
       …
    }

### Bedienelemente im Arbeitsbereichsumschalter ändern oder hinzufügen

1. Eine Bedienfeldkonfigurationsdatei mit der Bedienelementdefinition erstellen.

   - Das Bedienelement angeben, das im Schalter angezeigt werden soll:

         CONTAINER_NAME   Switch
         CONTAINER_TYPE   SWITCH

   - Die Position im Schalter angeben:

         POSITION_HINTS   n

     wobei n eine ganze Zahl ist. Die Positionen werden durchnumeriert von links nach rechts und von oben nach unten. (Beim standardmäßig eingestellten Schalter mit zwei Zeilen sind dies die Positionen 1 bis 4.)

2. Das Symbol für das Bedienelement erstellen. Die empfohlene Größe beträgt 16 auf 16 Pixel.

Beispielsweise stellt das folgende Bedienelement ein Bedienelement für Terminalfenster in den Schalter.

    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
    }

Das Bedienelement verwendet ein integriertes Symbol und dasselbe Hilfethema, das von dem Bedienelement für Terminalfenster und der Bedientafel Persönliche Anwendungen benutzt wird.

## Allgemeine Bedienfeldkonfiguration

Die PANEL Syntax des Bedienfelds ermöglicht:

- Position des Bedienfeldes ändern

- Aussehen des Fensters ändern

- Allgemeines Erscheinungsbild und Verhalten von Bedienelementen einstellen.

Die Standardbeschreibung von `PANEL` befindet sich in der Datei `/usr/dt/appconfig/types/`sprache`/dtwm.fp`.

Zusätzliche Informationen können der Hilfeseite `dtfpfile(4X)` entnommen werden.

### Allgemeine Schritte

1. Eine neue Bedienfeldkonfigurationsdatei erstellen in: `/etc/dt/appconfig/types/`sprache oder Standardverzeichnis`/.dt/types`.

2. Die Standardbeschreibung von `PANEL` aus der Datei `/usr/dt/types/`sprache`/dtwm.fp` in die neue Datei kopieren.

3. Die `PANEL` Beschreibung bearbeiten.

Die neue `PANEL` Beschreibung hat Vorrang vor der Standardbeschreibung.

### Standardposition des Bedienfeldes ändern

- Mit dem Feld `
  PANEL_GEOMETRY` in der Definition für `PANEL` die Position angeben.

  Das folgende Bedienfeld ist zum Beispiel in der oberen rechten Ecke.

      PANEL SpecialFrontPanel
      {
         PANEL_GEOMETRY      -1+1
         …
      }

### Bezeichnungen für Bedienelemente in der Hauptanzeige erstellen

1. Die folgende Zeile der Definition für `PANEL` hinzufügen:

       DISPLAY_CONTROL_LABELS   True

2. Jedem Bedienelement ein Feld `LABEL` hinzufügen.

Der bedienelement_name wird verwendet, wenn kein `LABEL` angegeben wird.

### Klickverhalten von Bedienelementen ändern

- Mit dem Feld `
  CONTROL_BEHAVIOR` in der Definition für `PANEL` angeben, wie der Benutzer die `PUSH_ACTION` eines Bedienelements ausführt. Es gibt folgende Werte für das Feld:

  `single_click` | Der Benutzer klickt das Bedienelement an, um `PUSH_ACTION` auszuführen.
  `double_click` | Der Benutzer doppelklickt das Bedienelement, um `PUSH_ACTION` auszuführen.

### Völlig neue Bedienfelder erstellen

Das Erstellen eines neuen Bedienfeldes kann von Vorteil sein, wenn umfangreiche Änderungen gemacht werden sollen.

Um nicht mit den integrierten Bedienfeldkomponenten in Konflikt zu geraten, sollte ein völlig neues Bedienfeld neue Namen für das PANEL und andere Container verwenden.

1. Die `PANEL` Komponente mit einem eindeutigen Namen für das neue Bedienfeld erstellen.

       PANEL bedienfeld_name
       {
          …
       }

2. Die neuen Felder und Bedienelemente mit den neuen Container-Namen erstellen.

   Wenn existierende Komponenten benutzt werden sollen, müssen ihre Definitionen kopiert und der Wert von `CONTAINER_NAME` geändert werden.

3. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.

### Beispiel für die Erstellung eines persönlichen Bedienfeldes mit drei Zeilen

Das folgende Beispiel ändert das Standardbedienfeld, so daß die Bedienelemente in drei Zeilen organisiert werden.

1. Die Datei `/usr/dt/appconfig/types/`sprache`/dtwm.fp` in die Datei Standardverzeichnis`/.dt/types/MyFrontPanel.fp`. kopieren. Der Datei Schreibzugriff geben.

   Diese Datei wird zum Erstellen des neuen Bedienfeldes bearbeitet.

2. Den Namen des Bedienfeldes ändern:

       PANEL NewFrontPanel

3. Den Namen des Feldes Top ändern und den Container-Namen bearbeiten:

       BOX NewFrontPanelTop
       {
          CONTAINER_NAME  NewFrontPanel
          POSITION_HINTS  first
          …
       }

4. Felddefinitionen für die mittlere und untere Zeile hinzufügen:

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

5. Den `CONTAINER_NAME` der folgenden Bedienelemente zu `NewFrontPanelTop` ändern:

   - Clock

   - Date

   - Home

   - TextEditor

   - Mail

6. Den `CONTAINER_NAME` der folgenden Bedienelemente zu `NewFrontPanelBottom` ändern:

   - Printer

   - Style

   - Applications

   - Help

   - Trash

7. Den `CONTAINER_NAME` des Arbeitsbereichsschalters zu `NewFrontPanelMiddle` ändern.

8. Die Ressource einstellen:

   `Dtwm*frontPanel*name`: NewFrontPanel

9. 'Arbeitsbereichsmanager neu starten' im Arbeitsbereichsmenü auswählen.