# フロントパネル拡張機能のカスタマイズフロントパネルカスタマイズ

フロントパネルのポップアップ・メニューと、サブパネルのアイコンのインストール・コントロールを使用して、フロントパネルをカスタマイズすることができます。

本章では、構成ファイルの作成および編集によるフロントパネルのカスタマイズについて説明します。

SAG.FrPC.div.3
SAG.FrPC.div.8
SAG.FrPC.div.11
SAG.FrPC.div.19
SAG.FrPC.div.26
SAG.FrPC.div.34
SAG.FrPC.div.46
SAG.FrPC.div.50

## 関連項目

- フロントパネル・コントロール構成に関する参照情報は、 `dtfpfile(4X)` のマニュアル・ページを参照してください。

- ワークスペース・マネージャに関する参照情報は、 `dtwm`(1) と `dtwmrc(4)` のマニュアル・ページを参照してください。

## フロントパネル構成ファイル

フロントパネルは、構成ファイルのデータベースで定義されます。

構成ファイルは、フロントパネルをカスタマイズする方法を提供します。次のような変更は、構成ファイルを編集しないと実行できません。

- 新しいコントロールの位置をメイン・パネルに追加する。

- 特殊な型のコントロール（クライアントのウィンドウなど）を追加する。

- 特定のデフォルト動作を変更する。たとえば、フロントパネル・コントロールがシングルクリックとダブルクリックのどちらに反応するか変更するなどです。

パネル構成に最大限の柔軟性を提供するために、構成ファイルは個人用、システム共通、または他のシステムに配置することができます。

フロントパネルは、ワークスペース・マネージャによって作成および管理されます。

### デフォルトのフロントパネル構成ファイル

デフォルトのフロントパネル構成ファイルは、フロントパネル構成ファイル `/usr/dt/appconfig/types/`language`/
dtwm.fp` で定義されます。

このファイルは変更してはいけません。

### フロントパネル構成ファイルの検索パス

フロントパネル定義は、ローカルに位置するファイルやリモート・システムのファイルに分散することができます。

フロントパネルの定義に使用するファイルは、次の要求事項を満たさなければなりません。

- ファイル名が `.fp` で終わる。例: `mail.fp.`

- ファイルがアクション・データベース検索パス上に位置する。

デフォルトのアクション・データベース検索パスには次のディレクトリがあります。次の順番で検索されます。

HomeDirectory`/.dt/types` | 個人用カスタマイズ
`/etc/dt/appconfig/types/`language | システム共通カスタマイズ
`/usr/dt/appconfig/types/`language | 組み込みパネルおよびコントロール

追加のディレクトリ HomeDirectory`/.dt/types/fp_dynamic` は、ユーザ・インタフェースで行われる個人用カスタマイズに使用します。このディレクトリを手動のカスタマイズに使用しないでください。

アクション・データベース検索パスに、システムをネットワーク用に構成するためにディレクトリを追加することもあります。特に、システムがアプリケーション・サーバにアクセスするよう構成する場合は、リモート位置が追加されます。詳細については、 SAG.Datab.mkr.12 を参照してください。

### フロントパネルの構成方法: 優先規則

フロントパネルは、アクション・データベース検索パス上のすべての構成ファイルで作成されます。

定義のコンポーネントが競合する場合は、どの定義を使用するかは優先規則が決定します。次の場合、２つのコンポーネントは競合します。

- `CONTAINER_NAME` と `CONTAINER_TYPE` が同じコントロール名である

- ２つのコンポーネントが同じ位置にある（名前は異なるが、`CONTAINER_NAME`、`CONTAINER_TYPE`、および `POSITION_HINTS` が同じである）

フロントパネルは次の優先規則を使用します。

- コンポーネントのコントロール名、コンテナ名、コンテナ型がすべて同じである場合、先に読み込まれたコンポーネントを使用します。

  たとえば、次のフィールドをもつという点以外は異なるシステム共通コントロールと組み込みコントロールの場合、システム共通コントロールが優先されます。

      CONTROL TextEditor
      {
       CONTAINER_TYPE  BOX
       CONTAINER_NAME  Top
       …
      }

- ２つのコンポーネントが同じ位置にある場合は、読み込まれた順番に配置します。

  たとえば、メインパネルに新しい個人用コントロール (`CONTAINER_TYPE` BOX と `CONTAINER_NAME` Top) を作成して `POSITION_HINTS`(5) を割り当てた場合、その個人用コントロールは組み込みコントロールとその他の 5 より高い位置番号をもつすべてのコントロールをひとつずつ右へずらします。

新規にシステム共通または個人用のコントロールを作成することによってコントロールを変更する場合は、新しいコントロール定義に同じコントロール名、`CONTAINER_NAME`、`CONTAINER_TYPE` を指定しなければなりません。そうしないと、既存のコントロールと新しいコントロールの両方が表示されてしまいます。

###
動的に作成されたフロントパネル・ファイル

[アイコンのインストール]コントロールとポップアップ・メニューを使用してフロントパネルをカスタマイズすると、ファイルは HomeDirectory`/.dt/types/fp_dynamic.` ディレクトリに書き込まれます。

フロントパネルは追加のファイル HomeDirectory`/.dt/sessions/dtwmfp.session` を作成します。このファイルは、カスタマイズしたフロントパネルの状態をセッションごとに保存および復元するのに使用します。

## ユーザ・インタフェースのカスタマイズの管理

コントロールのポップアップ・メニューと[アイコンのインストール]コントロールを使用して、フロントパネルを大規模にカスタマイズすることができます。

この節では、次のことを説明します。

- 特定の個人用カスタマイズを回避する方法。たとえば、ユーザがコントロールを削除できないようにする方法など。

- 個人用カスタマイズを元に戻す方法。たとえば、うっかり削除してしまったひとつのコントロールを復元するよう他のユーザが要求してきた場合の方法など。

### 個人用カスタマイズを回避するには

1. コントロールが組み込みコントロールの場合は、定義を `/usr/dt/appconfig/types/`language`/dtwm.fp` から `/etc/dt/appconfig/types/`language`/`name`.fp.` へコピーします。

2. 次の行をコントロール定義に追加します。

       LOCKED   True

### 変更されたフロントパネル、削除されたコントロールまたはサブパネルを復元するには

[デスクトップツール]アプリケーション・グループの[フロントパネルの復元]アクションは、ユーザ・インタフェースで行われたフロントパネルのカスタマイズをすべて削除します。このアクションを使用して、フロントパネルのポップアップ・メニューで行った個人用カスタマイズをすべて削除できます。

個々のコントロールを復元するには次の手順にしたがってください。

1. HomeDirectory`/.dt/types/fp_dynamic` ディレクトリで、コントロールを削除したときに作成されたファイルを削除します。コントロールは、削除された元のコントロールと同じ名前になります。

   たとえば、アイコン・エディタ・コントロールを削除した場合、`fp_dynamic` ディレクトリのファイルの内容は次のようになります。

       IconEditor
       { …
        DELETE   True
       }

サブパネルを削除すると、そのサブパネルとサブパネルの各コントロールに対して、別の動的ファイルが作成されます。

関連情報については、 SAG.FrPC.div.19 を参照してください。

## フロントパネル定義の構成

フロントパネルは、フロントパネルのコンポーネントの定義を集めて構築されます。各コンポーネントは、フロントパネル上のコンポーネントの配置、コンポーネントの外観および動作を定義する構文が必要です。

### フロントパネル・コンポーネント

#### フロントパネルのコンポーネント

フロントパネルは次のように構成されます。

- `
  PANEL` は、フロントパネル全体のトップレベルのコンテナ（親）です。

- `PANEL` はひとつ以上の `BOX` のコンテナです。

- `
  BOX` はひとつ以上の `CONTROL` のコンテナです。

特別なコンテナは２種類あります。

- `
  SUBPANEL` は、特定のコントロールと関連付けられています（このコントロールはサブパネルのコンテナです)。サブパネルは、関連付けられているコントロールから上方に「スライド」して表示されます。

- `SWITCH` には、ワークスペースを変更するボタンと追加のコントロールが入っています。

### フロントパネル定義の一般的な構文

フロントパネルの各コンポーネントは、次の構文を使用して別々に定義されます。

    COMPONENT name
    {
    KEYWORD   value
    KEYWORD   value
    …
    }

キーワードには必須なものとオプションのものがあります。詳細については、 `dtfpfile(4X`) のマニュアル・ページを参照してください。

####
PANEL 定義

`PANEL` はトップレベルのコンポーネントです。定義には次のものが含まれます。

- フロントパネル名

- フロントパネル全体の一般的な外観と動作

    PANEL front_panel_name
    {
     KEYWORD    value
     KEYWORD    value
        …

front_panel_name はフロントパネルに固有の名前です。デフォルトの名前は「FrontPanel」です。

####
BOX 定義

`BOX` 定義には次のものが含まれます。

- `BOX` 名

- ボックスが入っている `PANEL` (`
  CONTAINER_NAME`)

- `PANEL` 内のボックスの位置 (`POSITION_HINTS`)

- ボックス全体に適用する外観と動作を記述するフィールド

    BOX box_name
    {
     CONTAINER_NAME     front_panel_name
     POSITION_HINTS     position
     KEYWORD            value
     KEYWORD            value
       …
    }

####
CONTROL 定義

`CONTROL` 定義には次のものが含まれます。

- `CONTROL` 名

- コントロールがボックス、サブパネル、スイッチのいずれにあるか (`
  CONTAINER_TYPE`)

- コントロールがどのボックス、サブパネル、スイッチに入っているか (`
  CONTAINER_NAME`)

- `BOX` 内の `CONTROL` の位置 (`POSITION_HINTS`)

- コントロールの外観と動作を記述するフィールド

    CONTROL control_name
    {
     CONTAINER_TYPE     BOX or SUBPANEL or SWITCH
     CONTAINER_NAME     box_name or subpanel_name or switch_name
     TYPE               control_type
     POSITION_HINTS     position
     KEYWORD            value
     KEYWORD            value
     …
    }

####
SUBPANEL 定義

`SUBPANEL` 定義には次のものが含まれます。

- `SUBPANEL` 名

- サブパネルに関連付けるコントロール名
  (`
  CONTAINER_NAME`)

- サブパネルに固有の外観と動作を記述するフィールド

    SUBPANEL subpanel_name
    {
     CONTAINER_NAME  control_name
     KEYWORD         value
     KEYWORD         value
       …
    }

####
SWITCH 定義

`SWITCH` 定義には次のものが含まれます。

- `SWITCH` 名

- `SWITCH` が入っている `BOX` (`
  CONTAINER_NAME`)

- `BOX` 内の `SWITCH` の位置 (`POSITION_HINTS`)

- `SWITCH` の外観と動作を記述するフィールド

    SWITCH switch_name
    {
     CONTAINER_NAME  box_name
     POSITION_HINTS  position
     KEYWORD         value
     KEYWORD         value
       …
    }

## メイン・パネルの変更

メイン・パネルは、サブパネルを除くフロントパネルのウィンドウです。

### メイン・パネルのコンテナ

次の変更を行うことができます。

- コントロールの追加または削除

- コントロールの位置の交換

### メイン・パネルにコントロールを追加するには

1. フロントパネル構成ファイルを作成します。

   - システム共通: `/etc/dt/appconfig/types/`language`/*.fp`

   - 個人用: HomeDirectory`/.dt/types/*.fp`

2. ファイルにコントロールを定義します。

   コントロールのコンテナを指定するために、`CONTAINER_NAME` フィールドと `CONTAINER_TYPE` フィールドを使用します。

       CONTAINER_NAME  Top
       CONTAINER_TYPE  BOX

   コントロールの配置を左から右へ指定するために `POSITION_HINTS` を使用します。カスタマイズは組み込みコントロールに優先するので、新しいコントロールが入ると同じ位置にあった既存のコントロールは、ひとつずつ右へずれます。

3. 構成ファイルを保存します。

4. フロントパネル・コントロールのアイコンを作成します。

   SAG.FrPC.mkr.12 を参照してください。

5. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

たとえば、ファイル `/etc/dt/appconfig/types/`language`/audio.fp` にある次のコントロール定義は、オーディオ・アプリケーションのコントロールを[時計]と[カレンダ]のコントロールの間に挿入します。

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

### コントロールを削除するには

1. フロントパネル構成ファイルを作成します。

   - システム共通: `/etc/dt/appconfig/types/`language`/`name`.fp`

   - 個人用: HomeDirector `y/.dt/types/`name`.fp`

2. 削除したいコントロールの定義を新しいファイルにコピーします。

   削除したいコントロールが組み込みの場合、定義はファイル `/usr/dt/appconfig/types/`language`/dtwm.fp` にあります。

   定義全体をコピーする必要はありません。しかし、必ず `CONTAINER_NAME` と `CONTAINER_TYPE` のフィールドを含む範囲をコピーしてください。

3. 定義に `DELETE` フィールドを追加します。

       DELETE   True

4. 構成ファイルを保存します。

5. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

たとえば、ファイル `/etc/dt/appconfig/types/`language`/TrashCan.fp` にある次のコントロール定義は、[ごみ箱]コントロールを削除します。

    CONTROL Trash
    {
     CONTAINER_NAME  Top
     CONTAINER_TYPE  BOX
     DELETE          True
    }

### コントロールを変更するには

コントロール定義を変更する必要がある場合（たとえば、アイコン・イメージを変更する場合など）は、次の手順を行います。

1. コントロール定義全体を `/usr/dt/appconfig/types/`language`/dtwm.fp` から次のファイルにコピーします。

   - システム共通: `/etc/dt/appconfig/types/`language`/`name`.fp`

   - 個人用: HomeDirectory`/.dt/types/`name`.fp`

2. 変更したいフィールドを編集します。フィールドを追加することもできます。

3. ファイルを保存します。

4. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

### コントロールの位置を交換するには

1. 位置を変更したいコントロールの定義を `/usr/dt/appconfig/types/`language`/dtwm.fp` から次のファイルにコピーします。

   - システム共通: `/etc/dt/appconfig/types/`language`/`name`.fp`

   - 個人用: HomeDirectory`/.dt/types/`name`.fp`

     移動したいコントロールごとにコントロール定義全体をコピーしなければなりません。

2. コントロール定義の `
   POSITION_HINTS` フィールドの値を交換します。

3. ファイルを保存します。

4. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

たとえば、ファイル `/etc/dt/appconfig/types/C/MailInfo.fp` にある次のコントロール定義は、[メール]と[ヘルプ・マネージャ]のコントロールの位置を交換し、それらのコントロールを個人の変更に対してロックします。

    CONTROL Mail
    {
     POSITION_HINTS     12
     LOCKED     True
     …
     the rest of the control definition
    }
    CONTROL InfoManager
    {
     POSITION_HINTS     5
     LOCKED     True
     …
     the rest of the control definition
    }

### フロントパネル・コントロールを置換するには

1. 次のものを同じにして別のコントロール定義を作成します。

   - control_name

   - `
     CONTAINER_NAME` の値

たとえば、次の２つのコントロールは異なる２つの構成ファイルで定義されます。これらのコントロールはコントロール名とコンテナ名が同じなので、同一コントロールとみなされます。

- `/etc/dt/appconfig/types/C/SysControls.fp` にある定義:

      Control ImportantApplication
      {
       CONTAINER_NAME     Top
       CONTAINER_TYPE     BOX
       POSITION_HINTS     2
       …

- HomeDirectory`/.dt/types/MyControls.fp` にある定義:

      Control ImportantApplication
      {
       CONTAINER_NAME     Top
       CONTAINER_TYPE     BOX
       POSITION_HINTS     6
       …

個人用コントロールが優先されるので、コントロールは位置 6 に配置されます。

### コントロールが使用するアイコンの指定

コントロール定義の `
ICON` フィールドは、コントロールが使用するアイコン・イメージを定義します。

`ICON` フィールドの値は次のいずれかになります。

- ベース・ファイル名

  ベース・ファイル名は、アイコン・イメージを格納しているファイルの名前から、サイズの拡張子 (`m` と `t`) とイメージ型 (`bm` と `pm`) を除いたものです。たとえば、ファイル名が `MyGame.l.pm` と `MyGame.m.pm` の場合、`MyGame` を使用します。

  ベース・ファイル名を使用する場合は、アイコン・ファイルはアイコン検索パス上のディレクトリになければなりません。

  - 個人用アイコン: HomeDirectory`/.dt/icons`

  - システム共通アイコン: `/etc/dt/appconfig/icons/`language

- 完全なファイル名を含む、アイコン・ファイルへの絶対パス

  アイコン・ファイルへの絶対パスは、アイコン・ファイルがアイコン検索パス上にない場合のみ使用するようにしてください。

必要なアイコンのサイズは、コントロールの位置によって決まります。

位置 | サイズ
メイン・パネル | 48 × 48 pixels (name`.l.pm` または name`.l.bm)`
サブパネル | 32 × 32 pixels (name`.m.pm` または name`.m.bm)`

アイコン・ファイルを次のいずれかに配置します。

- 個人用アイコン: HomeDirectory`/.dt/icons`

- システム共通アイコン: `/etc/dt/appconfig/icons/`language

## サブパネルの作成と変更

フロントパネルのポップアップ・メニューを使用して、サブパネルの作成および変更ができます。

この節では、システム共通のカスタマイズの方法を説明します。それにはフロントパネル構成ファイルを変更する必要があります。

サブパネルは、メイン・パネル内のコントロールに「接続」されています。

### サブパネルのコンテナはそのサブパネルが接続されているコントロール

接続はサブパネルの定義で行われます。`CONTAINER_NAME` フィールドは、サブパネルが接続されるコントロールを指定します。

    CONTROL control_name
    {
       …
    }

    SUBPANEL subpanel_name
    {
     CONTAINER_NAME      control_name
     …
    }

### 新しいシステム共通サブパネルを作成するには

1. メイン・パネル上の、サブパネルを接続したいコントロールの control_name を検出します。

   コントロールが組み込みの場合、定義はファイル `/usr/dt/appconfig/types/`language`/dtwm.fp` にあります。

2. 新しいファイル `/etc/dt/appconfig/types/`language`/*.fp` を作成します。

3. サブパネルを定義します。

       SUBPANEL subpanel_name{
        CONTAINER_NAME    control_name
        TITLE             value
        KEYWORD    value
        …
       }

4. 新しい構成ファイルを保存します。

5. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

### 組み込みサブパネルのカスタマイズ

組み込みサブパネルの一般的な属性（タイトルなど）と内容を変更することができます。

#### 組み込みサブパネルの一般的な属性を変更するには

1. 新しいフロントパネル構成ファイルを作成します。

   - システム共通: `/etc/dt/appconfig/types/`language`/`name`.fp`

   - 個人用: HomeDirectory`/.dt/types/`name`.fp`

2. デフォルトの `SUBPANEL` 定義全体を `/usr/dt/appconfig/types/`language/`dtwm.fp` から新しいファイルへコピーします。

       SUBPANEL   subpanel_name
       {
         …
       }

3. サブパネル定義を変更します。

4. 新しい構成ファイルを保存します。

5. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

たとえば、ファイル `/users/janice/.dt/types/PerApps.fp` にある次の定義は、[個人アプリケーション]サブパネルの名前を変更します。

    SUBPANEL PersAppsSubpanel
    {
     CONTAINER_NAME  TextEditor
     TITLE           Janice's Applications
    }

#### 組み込みサブパネルにシステム共通コントロールを追加するには

1. フロントパネル構成ファイル `/etc/dt/appconfig/types/`language`/`name`.fp` を作成します。

2. システム共通コントロールをファイルに定義します。

   コントロールのコンテナを指定するために、`CONTAINER_NAME` フィールドと `CONTAINER_TYPE` フィールドを使用します。

       CONTROL control_name
       {
        CONTAINER_NAME     subpanel_name
        CONTAINER_TYPE     SUBPANEL
        …
       }

   SAG.FrPC.div.34 を参照してください。

3. 構成ファイルを保存します。

4. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

たとえば、新しいファイル `/etc/dt/appconfig/types/`language`/DigitalClock.fp` に定義された次のコントロールは（[デスクトップツール]アプリケーション・グループの）[デジタル時計]を、すべてのユーザの[個人アプリケーション]サブパネルに追加します。

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

#### 組み込みサブパネルからコントロールを削除するには

1. メイン・パネルのコントロールを削除する方法と同じです。 SAG.FrPC.mkr.11 を参照してください。

####
アイコンのインストールのコントロールを削除するには

1. 次のフィールドをサブパネル定義に追加します。

       CONTROL_INSTALL     False

### サブパネルの自動的に閉じる動作を変更するには

デフォルトでは、サブパネルを元の位置から移動させていない限り、コントロールを選択するとサブパネルも閉じます。

サブパネルを明示的に閉じるまでサブパネルを開いておくようにフロントパネルを構成できます。

1. フロントパネル構成ファイルを作成します。

   - システム共通: `/etc/dt/appconfig/types/`language`/*.fp`

   - 個人用: HomeDirectory`/.dt/types/*.fp`

2. デフォルトの `PANEL` 定義を `/usr/dt/appconfig/types/`language/`dtwm.fp` から新しいファイルへコピーします。

       PANEL FrontPanel
       {
         …
       }

3. 次のフィールドを `PANEL` 定義に追加します。

       SUBPANEL_UNPOST    False

4. 新しい構成ファイルを保存します。

5. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

## フロントパネル・コントロール定義

アイコンを[アイコンのインストール]コントロールにドロップすることで、個人用のコントロールを作成できます。

この方法によって簡単にカスタマイズできますが、提供される機能はフロントパネル・コントロールの機能のサブセットになります。たとえば、[アイコンのインストール]コントロールを使用して作成されたコントロールは、次のことが行えません。

- アニメーション機能

- クライアント・ウィンドウの表示

- イベント発生時に外観を変更すること（たとえば新しいメールを受け取った場合など）

この節では、手動でフロントパネル・コントロールを作成する方法を説明します。

フロントパネル・コントロールの構文に関する参照情報は、 `dtfpfile(4X)` のマニュアル・ページを参照してください。

### フロントパネル・コントロール定義

フロントパネル定義の構造は次のとおりです。

    CONTROL control_name
    {
      TYPE            control_type
      CONTAINER_NAME  value
      CONTAINER_TYPE  value
      other fields defining appearance and behavior
    }

###
コントロールの型

コントロール定義の `
TYPE` フィールドは、コントロールの基本的な動作を指定します。

コントロールの TYPE | コントロールの動作
`icon` | (デフォルト) コントロールは、コントロールをクリックするかフィイルをコントロール上にドロップすると、指定されたアクションを実行します。
`blank` | コントロールの間隔を調節するためのプレースホルダです。
`ビジー` | ビジー・ライト。アクションが起動されると、コントロールが点滅します（イメージを切り替えます）。
`client` | フロントパネルのクライアント・ウィンドウ
`clock` | 時計です。
`date` | 現在の日付を表示します。
`file` | ファイルを表します。コントロールを選択すると、フィイルのデフォルト・アクションを実行します。

### 新しいコントロールを作成するには

この節では、コントロールを定義する一般的な手順と、さまざまな型のコントロールの作成方法を説明します。

1. コントロールに、`PUSH_ACTION` または `DROP_ACTION`、あるいはその両方が関連付けられている場合は、アクション定義を作成します。これらは、コントロールをクリックする、またはファイルをコントロール上にドロップすると実行されるアクションです。

2. コントロールのアイコン・イメージ・ファイルを作成します。

   アイコンのサイズ、名前、位置については、 SAG.CrIcn.mkr.3 を参照してください。

3. 新しいフロントパネル構成ファイルを作成します。

   - システム共通: `/etc/dt/appconfig/types/`language`/*.fp`

   - 個人用: HomeDirectory`/.dt/types/*.fp`

4. ファイルにコントロール定義を追加します。

5. ファイルを保存します。

6. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

#### クリックするとアクションを実行するコントロールの作成

コントロールの動作を定義するには、次のフィールドを使用します。

- `TYPE`: `icon` に設定します

- `
  PUSH_ACTION:` 実行するアクション名を指定します

たとえば、[個人アプリケーション]サブパネルに入る次のコントロールは、ユーザが獲得したゲームを実行します。

    CONTROL Ball
    {
     TYPE            icon
     CONTAINER_NAME  PersAppsSubpanel
     CONTAINER_TYPE  SUBPANEL
     ICON            ball
     PUSH_ACTION     RunBallGame
     HELP_STRING     “Choose this control to play Ball.”
    }

次のコントロールは、スイッチの左上隅に配置されます。このコントロールは、CutDisp という名前のアクションを起動します。

    CONTROL StartCutDisp
    {
      TYPE             icon
      CONTAINER_NAME   Switch
      CONTAINER_TYPE   SWITCH
      POSITION_HINTS   first
      ICON             cutdisp
      HELP_STRING      “Choose this control to run cutdisp.”
      PUSH_ACTION      CutDisp
    }

####
ファイルを開くコントロールの作成

コントロールの動作を定義するには、次のフィールドを使用します。

- `TYPE`: `file` に設定します

- `
  FILE_NAME:` 開くファイルのパスを指定します

- `PUSH_ACTION:` `Open` に設定します

ファイルのデータ型に Open アクションが定義されていなければなりません。

たとえば、次のコントロールはメイン・パネルの右側奥に配置されます。このコントロールは、テキスト・エディタをデータファイル `/users/ellen/PhoneList.txt` で起動します。`*.txt` ファイルの Open アクションは、デフォルト・アクション・データベースの一部です。

    CONTROL EditPhoneList
    {
     TYPE            file
     FILE_NAME       /users/ellen/PhoneList.txt
     CONTAINER_NAME  Top
     CONTAINER_TYPE  BOX
     POSITION_HINTS  last
     ICON            PhoneBook
     HELP_STRING     “This control displays Ellen's phone list.”
     PUSH_ACTION     Open
    }

#### ドロップ領域として動作するコントロールの作成

ファイルをコントロール上にドロップしたときに実行されるアクションは、`
DROP_ACTION` フィールドに指定します。このアクションはファイル引き数を受け取れなければなりません。

コントロール定義に `PUSH_ACTION` フィールドと `DROP_ACTION` フィールドの両方を含む場合が多いです。同じアクションをプッシュ＆ドロップ・アクションに使用できます。

たとえば、[個人アプリケーション]サブパネルにある次のコントロールは、ファイル引き数を受け取るＸクライアント `xwud` を実行します。

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

#### ファイルを監視するコントロールの作成

コントロールの動作を定義するには、次のフィールドを使用します。

- `TYPE`: 次のいずれかの値を指定します。

  `icon` | コントロールに `PUSH_ACTION`、または `DROP_ACTION`、あるいはその両方を指定したい場合は、この型を使用します。
  `file` | コントロールを選択したときに、ファイル・マネージャでファイル・アイコンをダブルクリックしたときのような動作を行いたい場合は、この型を使用します。

- `ICON` および `
  ALTERNATE_ICON:`監視するファイルの、変更なしの状態と変更ありの状態を示すイメージを記述します。

- `
  MONITOR_TYPE`: イメージを変化させる条件を記述します。次のいずれかの値を使用します。

  `mail` | コントロールは、ファイルに情報が追加されると外観が変わります。
  `file` | コントロールは、指定されたファイルが空でなくなると外観が変わります。

- `FILE_NAME
  `: ファイルを監視するように指定します。

たとえば、次のコントロールは、anonymous ftp を使用して自分のシステムに転送されることになっている `meetings` という名前のファイルの有無を確認します。そのファイルが、このコントロールは、[個人アプリケーション]サブパネルのいちばん上に配置されます。

    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
    }

#### １インスタンス（切り替え）コントロール

１インスタンス・コントロールは、`PUSH_ACTION` によって起動されたプロセスがすでに実行中であるかどうかをチェックします。プロセスが実行中でない場合は、`PUSH_ACTION` が実行されます。プロセスがすでに実行中の場合は、ウィンドウが現在のワークスペースのウィンドウの重なりのいちばん上に移動します。

コントロールの動作を定義するには、次のフィールドを使用します。

- `PUSH_RECALL`: `True` に設定します。

- `
  CLIENT_NAME`: コントロールにクライアント名を指定します。

  `CLIENT_NAME` の値は、アプリケーションのトップレベル・ウィンドウの WM_CLASS 属性の一番目の文字列 (res_name) に一致しなければなりません。詳細については、`xprop`(1) のマニュアル・ページを参照してください。

- `PUSH_ACTION`: コントロールをクリックしたときに実行されるアクションを記述します。

たとえば、次のコントロールは、MyEditor という名前のアクションをもつアプリケーションのインスタンスをひとつ実行します。

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

#### クライアントのウィンドウ・コントロールを作成するには

クライアント・ウィンドウ・コントロールは、フロントパネルにはめ込まれたアプリケーション・ウィンドウです。たとえば、`xload` クライアントのウィンドウ・コントロールを作成することで、システム負荷メータをフロントパネルに入れることができます。

1. コントロールを定義します。

   コントロールの動作を定義するには、次のフィールドを使用します。

   - `TYPE`: `client` に設定します。

   - `
     CLIENT_NAME`: 起動するクライアントを指定します。

     `CLIENT_NAME` の値は、アプリケーションのトップレベル・ウィンドウの WM_CLASS 属性の一番目の文字列 (res_name) に一致しなければなりません。詳細については、`xprop`(1) のマニュアル・ページを参照してください。

   - `
     CLIENT_GEOMETRY`: クライアントのフロントパネル・ウィンドウで必要なサイズをピクセル単位で指定します。

     `xwininfo`(1) のマニュアル・ページで、ピクセル単位のウィンドウ・サイズを調べる方法を説明しています。

2. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

3. 端末エミュレータのコマンド行からクライアントを起動します。

たとえば、次のコントロールは 30 × 20 ピクセルの負荷メータを表示します。

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

セッションの間にクライアントが保存および復元されない場合、コントロールをクリックすると、そのコントロールがクライアントを起動するように構成するとします。たとえば、次の行を定義に追加すると LoadMeter コントロールが `xload` を起動するように構成できます。

    PUSH_ACTION    StartXload

そして、次のアクションを作成します。

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

#### コントロールをアニメーション化するには

アニメーション・シーケンスを接続してコントロールを選択するか、またはオブジェクトをコントロール上にドロップしたときに使用することができます。

アニメーション・シーケンスを指定するためには、コントロールは次の条件が必要です。

- 型が `icon` であること

- `PUSH_ACTION` または `DROP_ACTION` をもっていること

1. `
   ANIMATION` コンポーネントを使用して、アニメーション・シーケンスを指定します。

       ANIMATION animation_name
       {
        ANIMATION icon_image    [delay]
        ANIMATION icon_image    [delay]
        …
       }

   delay は、アニメーション・アイコン間のミリ秒単位の遅延時間です。

2. `
   PUSH_ANIMATION` および `
   DROP_ANIMATION` フィールド、またはそのいずれかをコントロール定義に追加します。値は `ANIMATION` シーケンス名です。

たとえば、次の行は BestEditor アプリケーションを起動するコントロールをアニメーション化します。アイコン間の遅延時間は 300 ミリ秒です。この例では、アイコン・ファイル `frame1`、`frame2` などが作成済みであることを仮定しています。

    CONTROL BestEditor
    {
     …
     PUSH_ANIMATION BestEdAnimation
     …
    }

    ANIMATION BestEdAnimation
    {
     ANIMATION frame1   300
     ANIMATION frame2
     …
    }

#### フロントパネル・コントロールのアイテムヘルプを提供する

コントロールにヘルプを提供するには次の２つの方法があります。

- コントロール定義にヘルプ文字列を提供する

  コントロールのアイテムヘルプを起動すると、ヘルプ文字列がヘルプ・ビューアに表示されます。ヘルプ文字列にはフォーマット（ヘッダなど）やリンクを指定できません。

  ヘルプ文字列を表示するには、コントロール定義にヘルプ文字列を指定します。

      HELP_STRING    help_string

- 登録済みヘルプ・ボリュームにヘルプ・トピックを指定する

  ヘルプ・トピックは、ヘルプ・システムの全機能を使用して作成された情報です。ヘルプ・トピックを記述するには、デスクトップのヘルプ開発者用キットを使用する必要があります。

  ヘルプ・トピックを表示するには、ヘルプ・ボリュームとトピックIDをコントロール定義に指定します。

      HELP_VOLUME    help_volume_name
      HELP_TOPIC     topic_id

## ワークスペース・スイッチのカスタマイズ

ワークスペース・スイッチをカスタマイズするにはいくつかの方法があります。

- ワークスペースの数を変更する

- スイッチの配置を変更する

- スイッチのコントロールを変更する

### ワークスペースのデフォルト数を変更するには

1. 次のワークスペース・マネージャ・リソースを変更します。

       Dtwm*workspaceCount: n

詳細については、 SAG.WMCnf.div.9 を参照してください。

### スイッチの列の数を変更するには

1. `SWITCH` 定義の `
   NUMBER_OF_ROWS` フィールドを変更します。

たとえば、次の例は３列のスイッチを定義します。

    SWITCH Switch
    {
     CONTAINER_NAME    box_name
     NUMBER_OF_ROWS    3
     …
    }

### ワークスペース・スイッチのコントロールを変更および追加するには

1. フロントパネル構成ファイルをコントロール定義とともに作成します。

   - コントロールをスイッチの内側に指定します。

         CONTAINER_NAME   Switch
         CONTAINER_TYPE   SWITCH

   - スイッチ内での位置を指定します。

         POSITION_HINTS    n

     n は整数です。位置は左から右、上から下の順に番号が付けられています（デフォルトの２列スイッチの場合、位置は 1 から 4 です）。

2. コントロールのアイコンを作成します。16 × 16 ピクセルのサイズを推奨します。

たとえば、次のコントロールは、スイッチに端末エミュレータ・コントロールを入れます。

    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
    }

このコントロールは、組み込みアイコンと、[個人アプリケーション]サブパネルの端末エミュレータ・コントロールが使用するのと同じヘルプ・トピックを使用します。

## 一般的なフロントパネルの構成

フロントパネルの `PANEL` 構文により、次のことが実行されます。

- フロントパネルの位置を変更する

- ウィンドウ装飾を変更する

- コントロールの一般的な外観および動作を設定する

デフォルトの `PANEL` 記述は `/usr/dt/appconfig/types/`language`/dtwm.fp` にあります。

追加情報については、`dtfpfile(4X)` のマニュアル・ページを参照してください

### 一般的な手順

1. 新しいフロントパネル構成ファイルを `/etc/dt/appconfig/types/`language または HomeDirectory`/.dt/types` に作成します。

2. デフォルトの `PANEL` 記述を `/usr/dt/types/`language`/dtwm.fp` から新しいファイルにコピーします。

3. `PANEL` 記述を編集します。

新しい `PANEL` 記述は、デフォルトに優先します。

### デフォルトのフロントパネル位置を変更するには

1. 位置を変更するには、`PANEL` 定義の `
   PANEL_GEOMETRY` フィールドを使用します。

   たとえば、次のパネルは右上端にあります。

       PANEL SpecialFrontPanel
       {
         PANEL_GEOMETRY      -1+1
          …
       }

### メインパネルのコントロールにラベルを付けるには

1. `PANEL` 定義に次の行を追加します。

       DISPLAY_CONTROL_LABELS   True

2. 各コントロールに `LABEL` フィールドを追加します。

`LABEL` が指定されていない場合は、control_name を使用します。

### コントロールのクリック動作を変更するには

1. コントロールの `PUSH_ACTION` を実行する方法を指定するには、`PANEL` 定義の `
   CONTROL_BEHAVIOR` フィールドを使用します。指定可能な値は次のとおりです。

   `single_click` | コントロールをクリックして、`PUSH_ACTION` を実行します。
   `double_click` | コントロールをダブルクリックして `PUSH_ACTION` を実行します。

### まったく新しいフロントパネルを作成するには

多数の変更を行いたい場合は、新しいフロントパネルを作成したほうがよいでしょう。

組み込みのフロントパネル・コンポーネントとの競合を避けるために、完全に新しいフロントパネルでは、パネルとその他のコンテナに新しい名前を付けます。

1. 新しいフロントパネル用の `PANEL` パネル・コンポーネントを作成します。一意の名前を指定します。

       PANEL front_panel_name
       {
          …
       }

2. 新しいコンテナ名を使用して、新しいボックスとコントロールを作成します。

   既存のコンポーネントを使用したい場合は、それらの定義をコピーしてから `CONTAINER_NAME` の値を変更する必要があります。

3. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。

### ３列の個人用フロントパネルの作成例

次の例は、デフォルトのフロントパネルを、コントロールが３列になるように変更します。

1. `/usr/dt/appconfig/types/`language`/dtwm.fp` を HomeDirectory`/.dt/types/MyFrontPanel.fp` にコピーします。ファイルに書き込み権を与えます。

   このファイルを編集して新しいフロントパネルを提供します。

2. フロントパネル名を変更します。

       PANEL NewFrontPanel

3. Top という名前のボックス名を変更し、そのコンテナ名を編集します。

       BOX NewFrontPanelTop
       {
         CONTAINER_NAME     NewFrontPanel
         POSITION_HINTS     first
         …
       }

4. 中断と下段のボックス定義を追加します。

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

5. 次のコントロールの `CONTAINER_NAME` を `NewFrontPanelTop` に変更します。

   - [時計]

   - [日付]

   - [ホーム]

   - [テキストエディタ]

   - [メール]

6. 次のコントロールの `CONTAINER_NAME` を `NewFrontPanelBottom` に変更します。

   - [プリンタ]

   - [スタイル]

   - [アプリケーション]

   - [インフォメーション]

   - [ごみ箱]

7. スイッチの `CONTAINER_NAME` を `NewFrontPanelMiddle` に変更します。

8. リソースを設定します。

       Dtwm*frontPanel*name:  NewFrontPanel

9. [ワークスペース]メニューから[ワークスペースマネージャの再起動]を選択します。