この節では、簡単なサンプル・プログラム actions.c について説明します。actions.c の完全なリストは、この章の終わりにあります。
アプリケーションがアクションを実行するには、その前に、デスクトップ・サービス・ライブラリ (アクション実行 API を含む) を初期化して、アクションおよびデータ型定義のデータベースを読み込まなければなりません。
デスクトップ・サービス・ライブラリを初期化するには、DtInitialize() 関数を使用します。
DtInitialize(*display,widget,*name,*tool_class)
DtInitialize() は、デフォルトのイントリンシクス関数 XtAppContext を使用します。API は、アプリケーションが app_context を指定しなければならないときに使用する追加の関数 DtAppInitialize() を提供します。
DtAppInitialize(app_context,*display,widget,*name, tool_class)
次のコードの一部分は、サンプル・プログラム actions.c の中で DtInitialize() がどのように使用されているかを示しています。
if (DtInitialize(XtDisplay(shell), shell, argv[0],ApplicationClass)==False) { /* DtInitialize() has already logged an appropriate error msg */ exit(-1); }
アクションおよびデータ型データベースを読み込むには、DtDbLoad() 関数を使用します。
DtDbLoad(void)
DtDbLoad() は、アクションおよびデータ型データベースを読み込みます。この関数は、データベース・ファイルを検索するディレクトリのセット (データベース検索パス) を判断して、データベース内で見つかった *.dt ファイルを読み込みます。ディレクトリ検索パスは、DTDATABASESEARCHPATH 環境変数と内部のデフォルト値に基づきます。
長時間実行中のアプリケーションの中で DtDbLoad() を使用する場合、データベースが変更されたときには、動的に再読み込みしなければなりません。
DtDbReloadNotify() 関数を使用して、再読み込みイベントの通知を要求します。
/* Notice changes to the database without needing to restart application */ DtDbReloadNotify(DbReloadCallbackProc, callback_proc, XTPointer, client_data);
次の作業を実行するコールバックを指定します。
アプリケーションによって保持されている、キャッシュされたデータベース情報を破棄する。
DtDbLoad() 関数を再コールする。
callback_proc は、アプリケーションが保持している、キャッシュされたデータベース情報をクリーンアップしてから、DtDbLoad() を呼び出します。client_data を使用して、追加のクライアント情報をコールバック・ルーチンに渡すことができます。
アプリケーションは、アクションのアイコンまたはラベルを表示する必要がある場合には、データベースにアクセスします。また、アクションを実行することによって、アプリケーションはアクションの存在をチェックできます。データベース内のアクションは、アクション名によって識別されます。
ACTION action_name { ... }
たとえば、[電卓] アクションの定義は次のとおりです。
ACTION Dtcalc { LABEL 電卓 ICON Dtcalc ARG_COUNT 0 TYPE COMMAND WINDOW_TYPE NO_STDIO EXEC_STRING /usr/dt/bin/dtcalc DESCRIPTION 電卓 (Dtcalc) アクションは、デスクトップ電卓 ¥ アプリケーションを起動します }
[電卓] アクションのアクション名は Dtcalc です。
実行形式ファイルがデータベース内のアクション名と一致するファイル名を持つ場合には、そのファイルはアクション・ファイルです。すなわち、基本のアクションの表現です。そのファイルのアイコンとラベルに関する情報は、データベースに格納されます。
指定されたアクション定義が存在するかどうかを判断するには、DtActionExists() 関数を使用します。
DtActionExists(*name)
DtActionExists() は、指定された名前がデータベース内のアクションの名前に一致するかどうかをチェックします。この関数は、名前がアクション名に一致する場合には True を返し、その名前のアクションが見つからない場合には False を返します。
アイコン・イメージ情報を取り出すには、DtActionIcon() 関数を使用します。
DtActionIcon(char *action_name)
アクション定義は、アクションを表すために使われるアイコン・イメージを定義の ICON フィールドで指定します。
ACTION action_name { ICON icon_image_base_name ... }
DtActionIcon() は、アイコン・イメージ・フィールドの値にある文字列を返します。アクション定義にアイコン・フィールドがない場合には、この関数はデフォルトのアクション・アイコン・イメージの値 Dtactn を返します。
次に、使用したいアイコンとサイズの位置を決めます。アイコンには 4 つのサイズがあり、ビットマップまたはピックスマップ形式で使用できます。たとえば、[電卓] のアクション定義からアイコン・ファイルのベース名を見つけることができます。次に、そのベース名と表 8-1 の情報の組み合わせと、すべてのアイコンの格納情報から、目的のアイコン・ファイルを見つけ出せます。
[電卓] アクションのアイコン名は Dtcalc ですが、これはファイル名全体ではありません。アイコン・ファイル名はアイコンのサイズに基づき、4 つのサイズがあります。表 8-1 は、デスクトップ・アイコンのサイズとファイル名の命名規則を示します。
表 8-1 アイコンのサイズとファイル名
アイコンのサイズ |
ビットマップ名 |
ピックスマップ名 |
---|---|---|
16 * 16 (極小) |
name.t.bm |
name.t.pm |
24 * 24 (小) |
name.s.bm |
name.s.pm |
32 * 32 (中) |
name.m.bm |
name.m.pm |
48 * 48 (大) |
name.l.bm |
name.l.pm |
デスクトップ・アイコン・ファイルの詳細は、『Solaris 共通デスクトップ環境 上級ユーザ及びシステム管理者ガイド』の第 14 章「デスクトップのアイコンの作成」を参照してください。
ビットマップの場合、マスクとして使われる追加のファイルがあり、そのファイルの拡張子 _m.bm で終わります。したがって、各サイズのアイコンに対して合計 3 個のファイルがあります。次に、電卓のアイコン・ファイルを示します。
Dtcalc.t.bm Dtcalc.t.pm Dtcalc.t_m.bm Dtcalc.m.bm Dtcalc.m.pm Dtcalc.m_m.bm Dtcalc.l.bm Dtcalc.l.pm Dtcalc.l_m.bm
電卓には小型アイコン (Dtcalc.s.bm、Dtcalc.s.pm、Dtcalc.s_m.bm) がない点に注意してください。
DtActionIcon() はベース名だけを返します。電卓の場合は Dtcalc です。種類 (ピックスマップまたはビットマップ) とサイズ (極小、小、中、大) を選択して、適用可能な拡張子をベース名に追加してください。また、ファイルがどこにあるかを知っておいてください。
アクションのローカライズ・ラベルを取り出すには、DtActionLabel() 関数を使用します。
char *DtActionLabel(char *actionName)
アクション定義にはラベルを入れることができます。ラベルは、label_text フィールドを使用して定義されます。
ACTION action_name { LABEL label_text ... } |
このラベルは、グラフィック・コンポーネント (ファイル・マネージャやアプリケーション・マネージャなど) の中でアクションのアイコンにラベルを付けるために使用されます。アクション定義に label_text フィールドがない場合には、action_name が使用されます。
label_text 文字列の値は、エンドユーザがアクションを見分けられるように、すべてのインタフェース・コンポーネントによって使用されなければなりません。
DtActionLabel() 関数は、actionName という名前のアクションのアクション定義の中の label_text フィールドの値を返します。label_text フィールドがない場合には、この関数は actionName を返します。
アプリケーションがデスクトップ・サービス・ライブラリを初期化した後は、アクションを実行できます。
アクションを実行するには、DtActionInvoke() 関数を使用します。
DtActionInvoke (widget, action, args, argCount, termOpts, execHost,, contexDir, useIndicator,statusUpdateCb, client_data)
DtActionInvoke() は、アクション・データベースから、指定されたアクション名に一致するエントリを探して、指定されたクラス、型、およびカウントの引き数を受け入れます。アクションを実行する前に、アプリケーションはデータベースを初期化し、読み込まなければならないので注意してください。