コンテンツにスキップ

X Window Programming/Athena Widgets

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

Athena Widgets(アテナウィジェット)は、X Window System用の基本的なウィジェットツールキットです。Xt(X Toolkit Intrinsics)をベースに構築されており、シンプルで軽量なGUI部品を提供します。Athena Widgetsは多くのXアプリケーションで使用されてきた歴史があり、教育や実験的な目的にも適しています。

本章では、Athena Widgetsの特徴、主なウィジェットの種類、使用方法について解説します。

Athena Widgetsの特徴

[編集]

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

  • シンプルで軽量: 必要最低限のウィジェットのみを提供し、学習や実験に適しています。
  • Xtに基づく構造: Xtを使用して開発されているため、Xtの概念を学ぶ上での基盤として利用できます。
  • 拡張性: 独自のカスタムウィジェットを追加したり、既存のウィジェットを拡張したりすることが容易です。

Athena Widgetsは「Xaw」という名前で提供され、多くのXライブラリに含まれています。

主なウィジェットの種類

[編集]

Athena Widgetsには、以下のような基本的なウィジェットが含まれています。

Label

[編集]

テキストやアイコンを表示するためのウィジェットです。

Label*label: "Hello, World!"

Command

[編集]

ボタンとして使用されるウィジェットです。クリックするとアクションを実行します。

Command*label: "Click Me"

Toggle

[編集]

チェックボックスやラジオボタンのように、オン/オフの状態を持つウィジェットです。

Toggle*label: "Enable Option"

Form

[編集]

他のウィジェットをレイアウトするためのコンテナウィジェットです。ウィジェット間の位置関係を制御します。

Box

[編集]

ウィジェットを水平または垂直に配置するためのコンテナウィジェットです。

Scrollbar

[編集]

スクロール可能な領域を提供するウィジェットです。範囲を指定して使用します。

Text

[編集]

テキスト入力や編集を行うためのウィジェットです。

List

[編集]

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

Athena Widgetsの使用方法

[編集]

Athena Widgetsを使用するには、以下の手順に従います。

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

[編集]

Athena Widgetsを利用するには、<X11/Xaw/*.h>ヘッダーファイルをインクルードします。

#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>

2. ウィジェットの作成

[編集]

ウィジェットは、Xt関数を使用して作成します。例えば、XtVaCreateManagedWidget関数を使用してボタンを作成します。

Widget button = XtVaCreateManagedWidget("button",
                                        commandWidgetClass,
                                        parent,
                                        XtNlabel, "Click Me",
                                        NULL);

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

[編集]

ボタンのクリックイベントなど、ユーザー操作に応じてアクションを実行するコールバック関数を登録します。

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

XtAddCallback(button, XtNcallback, onButtonClick, NULL);

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

[編集]

作成したウィジェットを表示し、Xtのイベントループを開始します。

XtRealizeWidget(topLevel);
XtAppMainLoop(app_context);

Athena Widgetsの応用例

[編集]

以下は、Athena Widgetsを使用してシンプルなGUIを作成するコード例です。

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

[編集]
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.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, "MyApp", NULL, 0, &argc, argv, NULL, NULL);
    Widget form = XtVaCreateManagedWidget("form", formWidgetClass, topLevel, NULL);

    Widget button = XtVaCreateManagedWidget("button", commandWidgetClass, form,
                                     XtNlabel, "Click Me",
                                     NULL);
    XtAddCallback(button, XtNcallback, onButtonClick, NULL);

    XtRealizeWidget(topLevel);
    XtAppMainLoop(app_context);

    return 0;
}

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

まとめ

[編集]

Athena Widgetsは、X Window System用のシンプルかつ軽量なGUIツールキットとして、Xtプログラミングの基礎を学ぶのに適しています。基本的なウィジェットを理解し、アプリケーションに応用することで、柔軟なGUIを構築することが可能です。