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

第 5 章 ツールキットの移行に関する問題

この章では、ツールキットの用語、共通のウィジェット、CDE 専用ウィジェット、高度なウィジェットについて説明します。また、各種ライブラリについても説明します。

OPEN LOOK と Solaris Motif のツールキットとの比較

OPEN LOOK アプリケーションを Solaris Motif アプリケーションと比べると、対照的な視覚的要素がいくつかあることが一目でわかります。たとえば、OPEN LOOK のボタンは丸型ですが Solaris Motif のボタンは四角型です。三次元的に見せるためにボタンや他のオブジェクトにつけるシェーディングも異なります。このような体裁上の要素はプログラムの動作には影響せず、移植するときには無視されることが多いですが、CDE の見た目からかけ離れるとアプリケーションは CDE スタイルガイドに準拠しなくなります。

変換作業中にいくつかの違いが重要になることがあります。この節では、これらの機能や他の GUI 要素のうち最も重要なものについて説明します。

スタイルガイドのリストと、OPEN LOOK および Solaris Motif の GUI を説明している他の参考資料については、「はじめに」を参照してください。

OPEN LOOK から CDE への GUI 環境の変更点の詳細は、付録 A 「GUI 環境の変更」 を参照してください。

OPEN LOOK ユーザインタフェースに固有の機能

次の機能は OPEN LOOK ユーザインタフェースに組み込まれており、XView や OLIT (またはその両方) に実装されていますが、Solaris Motif にはありません。

Solaris Motif ユーザインタフェースに固有の機能

次の機能は Solaris Motif には組み込まれていますが、OPEN LOOK ユーザインタフェースには組み込まれていません。

ツールキット間での主な実装の違い

OPEN LOOK ユーザインタフェースと Solaris Motif は多くの機能がほぼ同じですが、実装には重要な違いがあります。最も重要な違いは次のとおりです。

その他にも、次の重要な違いがあります。

この節の残りの部分では、これらの機能について説明します。

ティアオフメニュー

Solaris Motif では、OPEN LOOK ユーザインタフェースの「ピンでとめられたメニュー」の代わりにティアオフメニューを使用します。メニュー最上部の破線を選択すると、そのメニューをそのままの状態で表示しておくことができます。

二次テキストセレクション

OPEN LOOK の二次テキストセレクションは、Motif のクイック転送機構とほぼ同じです。

ウィンドウコントロール

もっとも重要な実装上の違いの 1 つは、ウィンドウコントロールに関するものです。Motif ユーザがタイトルバーの左上隅の「ウィンドウ」メニューボタンを押すか、OPEN LOOK ユーザがウィンドウのバックグラウンドのどこか (ヘッダなど) で「メニュー」ボタンを押すとメニューが表示されます。この 2 つの GUI に基づくオプションによってキーの違いが生じます。

Motif の「ウィンドウ」メニューでは、「復元」、「移動」、「サイズ」、「アイコン化」、「最大表示」、「奥へ」、「閉じる」を選択できます。OPEN LOOK の「ヘルプウィンドウ」メニューでは、「クローズ」、「フルサイズ」、「プロパティ」、「後ろへ」、「再表示」、「終了」を選択できます。この 2 つのリストは根本的には同じですが、その効果には大きな違いがあります。

OPEN LOOK ユーザインタフェースでは、「クローズ」オプションを選択するとウィンドウが最小化 (アイコン化) され、「終了」を選択するとアプリケーションが終了します。

Motif では、「アイコン化」オプションを選択するとウィンドウがアイコン化され、「閉じる」オプションを選択するとアプリケーションが終了します。OPEN LOOK ユーザインタフェースに慣れたユーザの多くは、ウィンドウを閉じてアイコン化するときに Motif プログラム自体を終了してしまうことがあるので注意してください。

マウスボタンの動作

マウスボタンの構造はどちらの仕様でもよく似ていますが、混乱を招く可能性のある重要な違いがあります。

表 5-1 は、OPEN LOOK の 3 つのマウスボタンのデフォルトの左から右へのマッピングを示します。

表 5-1 OPEN LOOK のマウスボタン

ボタン 

機能 

セレクト 

オブジェクトを指定するか、オブジェクトとコントロールを操作してドラッグする 

アジャスト 

選択したオブジェクトの数を増減させる 

メニュー 

ポインタ位置または指定したオブジェクトに関連付けられたメニューを表示する 

表 5-2 は Motif の 3 つのマウスボタンの割り当てを示します。OPEN LOOKと同様に、デフォルトは左マウスボタンから始まります。

表 5-2 Motif のマウスボタン

ボタン 

機能 

BSelect 

位置カーソルを選択、起動、設定、またはドラッグする 

BTransfer 

要素を移動してコピーし、転送内容をドラッグ&ドロップする。OPEN LOOK の「アジャスト」ボタンとしてカスタマイズできる。 

BMenu 

メニューを表示する 

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 とはまったく異なります。

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

Solaris Motif と OLIT では、ユーザインタフェース内でオブジェクトを操作するときに役立つ多数のルーチンをサポートしています。

OLIT ライブラリだけにあるルーチン

次の機能は、OLIT ライブラリに固有のものです。

Solaris Motif ライブラリだけにあるルーチン

次の機能は、Solaris Motif ライブラリに固有のものです。

ウィジェット

OLIT と Solaris Motif のツールキットは、類似する機能を持つ多数の共通ウィジェットとガジェットをサポートし、それぞれのツールキットではより固有の多数のウィジェットをサポートします。あるウィジェットが一方のツールキットには実装されているが他方には実装されていない場合は、実装されていないツールキット内で複数のウィジェットを使用すると同等のオブジェクトを構築できる場合が多いです。

表 5-4 は共通ウィジェット名と、各ツールキット内のそのウィジェットに対応する実際のクラス名を示します

表 5-4 共通ウィジェットのマッピング

OLIT のクラス名 

Solaris Motif のクラス名 

BulletinBoard

XmBulletinBoard 

DrawArea

XmDrawingArea

ExclusiveChoice + RectButtons

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

Form

XmForm

Manager

XmManager

MenuButton

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

NoticeShell

XmDialogShell + XmMessageBox

AbbrevMenuButton

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

PopupWindowShell

XmDialogShell

NonExclusiveRectButton

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

PopupMenuShell

XmMenuShell

Primitive

XmPrimitive

OblongButton

XmPushButton

ControlArea

XmRowColumn

Scrollbar

XmScrollBar

ScrollingList

XmList + XmScrolledWindow

ScrolledWindow

XmScrolledWindow

Slider

XmScale

StaticText

XmLabel

TextEdit

XmText

TextField

XmTextField

RectButton

XmToggleButton

Solaris Motif に固有のウィジェット

この節では、Solaris Motif に固有のウィジェットについて簡単に説明します。


注 -

これらのウィジェットのうち、次のウィジェット以外は、OpenWindows 環境での Motif 開発にも使用できます。

DtTermDtEditorDtComboBoxDtSpinBoxDtMenuButton

libDtWidget ライブラリには DtComboBoxDtSpinBoxDtMenuButtonDtEditor ウィジェットが入っていて、次のライブラリに直接依存します。

OLIT に固有のウィジェット

この節では、OLIT に固有のウィジェットについて簡単に説明します。