Solaris 共通デスクトップ環境 Motif への移行

XView ライブラリと Solaris Motif ライブラリの違い

この節では、XView と Solaris Motif のライブラリの違いについて説明します。

用語

XView ツールキットと Xt (OLIT と Motif) のツールキットは、次の用語を使用します。

XView 

Xt (OLIT と Motif) 

パッケージ 

ウィジェット 

属性 

リソース 

フレーム 

シェル 

XView は Xlib を直接ベースとしていますが、Motif はイントリンシクス (Xt) ツールキットを、イントリンシクスツールキットは Xlib をそれぞれベースとしています。

XView 

OLIT 

Motif 

XLib 

Xt 

Xt 

 

XLib 

XLib 

このように根本的な違いがあるため、環境を初期化し、グラフィカルオブジェクトを作成、変更、削除する基本的なライブラリ関数には、次の例のような違いがあります。

XView 

Motif/Xt 

xv_init()

XtAppInitialize()

xv_create()

XtCreateWidget()

xv_set()

XtSetValues()

xv_destroy()

XtDestroyWidget()

たとえば、イベント処理コールバックを取り扱う関数や国際化機能はさらに複雑です。これらの機能には、単純な 1 対 1 の対応関係は存在しません。

OPEN LOOK と Motif のツールキットアーキテクチャ

OLIT と Motif のアーキテクチャはよく似ていますが、XView と Motif には違いがあります。XView から Motif に移行するときには、このようなツールキットの違いに注意する必要があります。

XView のツールキットでは、「パッケージ」と呼ばれるユーザインタフェースオブジェクトと、インタフェースをまとめて保持するルーチンやプロセス (作成ルーチン、イベント処理など) が実装されます。これに対して Motif と OLIT には、基本的にはユーザインタフェースオブジェクトである「ウィジェット」しか実装されず、ルーチンとプロセスはイントリンシクスライブラリに残されます。たとえば xv_init() は、XView ライブラリに入っている関数です。それに対応するものとして OLIT や Motif のプログラミングに使用する関数である XtAppInitialize() がありますが、これは Xt イントリンシクスライブラリに入っています。

これら 3 つのツールキットは、2 つの異なる GUI を示します。XView と OLIT のツールキットの外観は似ていますが、Solaris Motif の外観は大きく異なります。ライブラリ内の関数呼び出し間には、ほぼ 1 対 1 の対応関係がありますが、並列プログラムの「動作」は異なります。つまり、Solaris Motif ライブラリを使用するように OLIT (または XView) プログラムを変換した後も、ある程度は OPEN LOOK の外観が残ります。このような状態のプログラムは、どちらのスタイルにも完全に準拠していません。

プログラミングモデル

API は異なりますが、XView と Motif はユーザインタフェースのプログラミングに関して、次のように同じオブジェクト指向方法論に基づきます。

すべての関数呼び出しを一方の API から他方へ変換しなければならない場合でも、XView から Motif に移植されるプログラムの構造全体はそのまま保持できます。

共通タイプのユーザインタフェースオブジェクト

XView と Motif は、共通タイプのユーザインタフェースオブジェクトをサポートするユーザインタフェースツールキットです。ただし XView では、1 つの XView オブジェクトと同等の効果を生むために、これらのオブジェクトの多くは複数の Motif ウィジェットを必要とする上位に実装されます。

表 5-3 は、XView の共通オブジェクトの基本マッピングと、対応する Solaris Motif ウィジェットを示します。

表 5-3 共通オブジェクトの基本マッピング

XView のパッケージ

対応する Solaris Motif ウィジェット 

ベース・フレーム 

XmTopLevelShell + XmMainWindow

コマンド・フレーム 

XmDialogShell + XmBulletinBoard

確認 

XmDialogShell + XmMessageBox (メッセージダイアログ)

キャンバス 

XmScrolledWindow + XmDrawingArea

パネル 

XmBulletinBoard または XmForm

パネル・ボタン 

XmPushButton

メニュー・ボタン 

DtMenuButton (OpenWindows 環境ではアクセスできない)

アブリビエイト・メニュー・ボタン 

XmRowColumn (オプションメニュー)

チェックボックス 

XmRowColumn + XmToggleButtons (チェックボックス)

排他的選択肢 

XmRowColumn + XmToggleButtons (ラジオボックス)

スクローリング・リスト 

XmScrolledWindow + XmList

メッセージ 

XmLabel

スライダ 

XmScale

テキストフィールド 

XmTextField

数値テキストフィールド 

DtSpinBox (OpenWindows 環境ではアクセスできない)

テキスト・サブウィンドウ 

XmScrolledWindow + XmText (スクロールテキスト)

TTY サブウィンドウ 

XmScrolledWindow + XmTermPane

DtTerm (OpenWindows 環境ではアクセスできない)

スクロールバー 

XmScrollBar

ポップアップ・メニュー 

XmMenuShell + XmRowColumn (ポップアップメニュー)

プルダウン・メニュー 

XmMenuShell + XmRowColumn (プルダウンメニュー)

プルライト・メニュー 

XmMenuShell + XmRowColumn (プルダウンメニュー)

ファイルチューザ 

XmDialogShell + XmFileSelectionBox

XView と Solaris Motif の違い

XView では、Motif (Xt) では提供されない多数の X11 関数を抽象化して提供しています。XView と同等の機能を Motif に持たせるには、Xlib の関数を直接使用して、これらの関数をコーディングし直さなければなりません。

Motif には、次の XView パッケージに対応するものがありません。

Solaris Motif には、ウィンドウを別の表示に分割する OPEN LOOK のユーザインタフェースと同等の機能がありません。この機能を実装するには、Motif のマネージャウィジェットの 1 つをサブクラスに入れなければなりません。

XView の機能には Motif/Xt の API を使用してコーディングできるものもありますが、これらの API はまったく異なるので、全面的に設計変更してコーディングし直す必要があります。これらの機能は次のとおりです。

XView の API 

Motif/Xt 

選択サービス 

Xt 選択 API 

ドロップターゲットパッケージ 

Motif ドラッグ&ドロップ API1

通知用インタフェース 

Xt イベント管理 API 

  1. CDE に移植する場合は、CDE のドラッグ&ドロップ API を使用してください。この API は、Motif 1.2 のドラッグ&ドロップ API の拡張機能で簡単に使用できます。

X リソース

XView アプリケーションと Motif アプリケーションでは、その動作と外観を制御する X リソースが異なります。Motif/Xt のオブジェクトと違って、XView のオブジェクトにはインスタンス名が接続されているとは限りません。XView のリソースはインスタンス名から独立しています。たとえば Window.Foreground.Color は、関連するすべての XView オブジェクトに影響を与えます。

Motif/Xt のリソースには、mainframe.control_panel.button1.foreground などのクラス名またはインスタンス名が入っています。Xt リソースが複数のオブジェクトに影響を与えるようにするには、ワイルドカードとクラス名を使用します。

外部ファイル

XView は、メッセージファイルや、X リソースが入っているアプリケーション固有のデフォルトファイルなどの複数のファイルを起動時に読み込みます。これらのファイルのなかには、内容と位置が Motif と異なるものがあります (たとえば、Motif/Xt は $OPENWINHOME の下のメッセージドメインファイル (.mo ファイル) を読み込みません)。国際化メッセージスキーマは、Motif とはまったく異なります。