コンテンツにスキップ

X Window Programming/Motif

出典: フリー教科書『ウィキブックス(Wikibooks)』

Motifは、X Window System用のGUIツールキットであり、洗練されたウィジェットと一貫性のあるユーザーインターフェースを提供します。Motifは、企業向けアプリケーションやCDE(Common Desktop Environment)の標準ツールキットとして広く採用されました。

本章では、Motifの特徴、基本的な使用方法、および代表的なウィジェットについて解説します。

Motifの特徴

[編集]

Motifの主な特徴は以下の通りです:

  • 高機能なウィジェット: 複雑なGUIコンポーネントを多数提供します。
  • 一貫性のあるデザイン: 「Motifスタイル」と呼ばれる統一されたデザインガイドラインに基づいています。
  • Xtに基づく拡張性: Xt(X Toolkit Intrinsics)をベースにしているため、Xtの柔軟性を活かしながら高レベルなウィジェットを利用できます。
  • 業界標準: Motifは、CDEや多くの商用UNIXシステムの標準ツールキットとして採用されました。

Motifのライブラリは「libXm」として提供されており、Motifプログラムは通常、このライブラリをリンクしてコンパイルされます。

主なウィジェットの種類

[編集]

Motifには、以下のような多彩なウィジェットが含まれています。

Label

[編集]

テキストやアイコンを表示するウィジェット。シンプルなラベルとして使用します。

Label*label: "Hello, Motif"

PushButton

[編集]

ボタンを作成するためのウィジェットで、ユーザーのクリックイベントを受け取ります。

PushButton*label: "Click Me"

ToggleButton

[編集]

チェックボックスやラジオボタンとして使用されるウィジェットです。オン/オフの状態を持ちます。

TextField

[編集]

単一行のテキスト入力用ウィジェット。

List

[編集]

リストアイテムを表示し、選択可能にするウィジェットです。

[編集]

メニューバーやポップアップメニューを構築するためのウィジェット。

Dialog

[編集]

モーダルまたはモードレスのダイアログウィンドウを作成するウィジェット。

Scale

[編集]

スライダー付きのスケールを表示するウィジェットです。

Container

[編集]

複数のウィジェットを管理するためのコンテナウィジェットで、レイアウト管理機能を持ちます。

Motifの使用方法

[編集]

Motifアプリケーションの基本的な手順を以下に示します。

1. ヘッダーファイルのインクルード

[編集]

Motifプログラムを書くには、Motifのヘッダーファイルをインクルードします。

#include <Xm/Xm.h>
#include <Xm/PushB.h>
#include <Xm/Form.h>

2. ウィジェットの作成

[編集]

ウィジェットは、XtおよびMotifの関数を使用して作成します。

Widget button = XmCreatePushButton(parent, "button", NULL, 0);
XtManageChild(button);

3. コールバック関数の登録

[編集]

ボタンのクリックなどのイベントを処理するコールバック関数を登録します。

void onButtonClick(Widget widget, XtPointer client_data, XtPointer call_data) {
    printf("Button clicked!\n");
}

XtAddCallback(button, XmNactivateCallback, onButtonClick, NULL);

4. イベントループの開始

[編集]

Xtのイベントループを開始します。

XtRealizeWidget(topLevel);
XtAppMainLoop(app_context);

Motifアプリケーションの例

[編集]

以下は、Motifを使用してシンプルなGUIを構築するコード例です。

; 例: シンプルなボタンアプリケーション

[編集]
#include <Xm/Xm.h>
#include <Xm/PushB.h>

void onButtonClick(Widget widget, XtPointer client_data, XtPointer call_data) {
    printf("Button clicked!\n");
}

int main(int argc, char **argv) {
    XtAppContext app_context;

    Widget topLevel = XtVaAppInitialize(&app_context, "MotifApp", NULL, 0, &argc, argv, NULL, NULL);
    Widget button = XmCreatePushButton(topLevel, "button", NULL, 0);
    XtManageChild(button);

    XtAddCallback(button, XmNactivateCallback, onButtonClick, NULL);

    XtRealizeWidget(topLevel);
    XtAppMainLoop(app_context);

    return 0;
}

このプログラムは、「Click Me」というラベルを持つボタンを作成します。ボタンをクリックすると、標準出力に「Button clicked!」と表示されます。

まとめ

[編集]

Motifは、高機能なGUIウィジェットを提供し、商用アプリケーションやUNIX環境で広く使用されてきました。そのシンプルなAPI設計と柔軟性により、複雑なGUIの構築が可能です。本章で学んだ基本的な概念とウィジェットを活用し、Motifプログラムの開発を進めてください。