• 検索結果がありません。

ツール”Glade”を使った GUI アプリケーション作成

ドキュメント内 LinuxによるPCI/CompactPCI/CardBus制御 入門編 (ページ 48-61)

自分でGTK+のプログラミングをすることに敷居が高いと感じた場合には、GTK+のプログラミン

グ部分をサポートするユーザインタフェースビルダ「Glade」があります。この章では、Gladeの

使い方とGladeを使ったGUIアプリケーションの作成法について説明します。

Glade について

Gladeは、GTK+用のフリーのユーザインタフェースビルダです。ディストリビューションに添付

している場合もありますし、インターネットの以下のWeb siteからダウンロードすることもでき ます。

 URLアドレス http://glade.gnome.org/

図5-1 Glade起動時の画面

(1)「Glade」メインウィンドウ:プロジェクトの設定、ファイルの保存などの設定

(2)パレット:ウィジェットを選択

(3)プロパティ:ウィジェットのサイズやシグナルとそのハンドラの登録などを設定

パレットで「ウィンドウ」や「ボタン」などのウィジェットをマウスで選択し、フォームを作成 することで、GTK+のプログラミング部分はGladeが自動作成してくれます。ユーザは、シグナル が発生することによって呼び出されるコールバック関数に自分が実行したい処理を記述するだけ で、グラフィカルなXWindow用のアプリケーションを作成することができます。

(1)

(2) (3)

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

■Gladeの起動から実行ファイル作成までの手順

(1) XWindow上の端末から次のコマンドを実行すると、Gladeが起動します。

%glade

(2) プロジェクトの設定を行います。

プロジェクトの設定は、「Glade」メイン ウィンドウのメニューバーの中から

「ファイル」を選び、その中にある

「プロジェクト設定」を選択します。

「プロジェクトのオプション」ウィンドウでプロジェクトディレクトリ、プログラム名 などを設定してください。

コンパイラ言語は、「C」を選んでください。

「OK」ボタンを押して、「プロジェクトのオプション」ウィンドウを閉じてください。

(3) 「パレット」ウィンドウにある、任意のウィジェット(ウィンドウ、ボタンなど)を 選択し、希望するデザインにフォームを作成してください(詳細は次項参照)。

(4) ソースコードの書出しを行います。

ソースコードの書出しは、「Glade」

C言語

プロジェクト名 などの設定

「OK」ボタン

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

(5) 端末から「プロジェクト設定」で設定した「プロジェクトディレクトリ」で、次のよう に入力し「enter」キーを押してください。

%./autogen.sh

実行すると様々なメッセージが出力されます。最後に「Now type ‘make’ to compile the

package.」と表示されたら、makeを実行してください。

%make

問題なくコンパイルできた場合、実行ファイルが、「/(プロジェクトディレクトリ)/src/」

ディレクトリに作成されます。

プログラムの実行(実行ファイルが「Project1」のとき)

%./src/Project1

※ 以後、フォームを修正した場合、その都度、「ソースコード書出し」と「make」の 実行が必要ですが、「./autogen.sh」は必要ありません。

■Gladeが自動作成するソースコードについて

「Glade」の「ソースコード書出し」と「./autogen.sh」の実行によって、たくさんのファイルが 生成します。そのうち、「/(プロジェクトディレクトリ)/src」ディレクトリに生成したファイルを ユーザがソースコードを追加したり、修正したりすることになります。

●編集禁止のファイル

なお「/(プロジェクトディレクトリ)/src」ディレクトリに生成したファイルのうち、

・interface.c ・interface.h ・support.c ・support.h

の4つのファイルはユーザが編集することを禁止しています。

●編集可能なファイル

実際にユーザが編集するのは、主に

・main.c ・callbacks.c ・callbacks.h の3つのファイルになります。

うち、callbacks.cとcallbacks.hは、コールバック関数のハンドラが設定されるたびに、その関 数のプロトタイプがファイルの最後に追加されます。

main.cは一度出力されるとGladeでは更新しないため、独自の編集が必要になります。

特にウィンドウ ウィジェットのポインタは、デフォルトではmain関数の内部変数ですが、グロ ーバル宣言し、他のファイルからも参照できるようにした方がいいでしょう。

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

■ライブラリのリンク

GTK+のライブラリはGladeが作成するMakefileの中で自動的にリンクされていますが、その他

の 弊社Linuxソフトウェアで提供している関数を利用するなどには それらの関数が存在するラ

イブラリをリンクする必要があります。

「/(プロジェクトディレクトリ)/src」ディレクトリにある「Makefile.am」ファイル(※プロジェ クトディレクトリに同名のファイルがありますが、こちらは編集しません。)に「LIBS= ‑l(ラ

イブラリ名)」という1行を追加します。たとえばGPG-3300の関数を使用するためのライブラリ

libgpg3300.soをリンクに追加したい場合は、「LIBS= ‑lgpg3300」になります。

サンプルプログラム 「/(プロジェクトディレクトリ)/src/Makefile.am」でGPG-3300の関数 を使用するためのライブラリlibgpg3300.soをリンクに追加する(7行 目)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

## Process this file with automake to produce Makefile.in INCLUDES = ¥

‑I$(top̲srcdir)/intl ¥

$(GNOME̲INCLUDEDIR) LIBS = ‑lgpg3300

bin̲PROGRAMS = xdawave xdawave̲SOURCES = ¥

main.c ¥

support.c support.h ¥ interface2.c interface.h ¥ callbacks.c callbacks.h

xdawave̲LDADD = $(GNOME̲LIBDIR) $(GNOMEUI̲LIBS) $(INTLLIBS)

※このソースコードはGPG-3300添付のDA波形出力プログラムxdawaveのMakefile.Amです。

GPG-3300インストール後に「/usr/src/interface/gpg3300/linux/util/xdawave/src」に存在します。

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

Glade の操作法

(1)パレットでウィジェットを選択し、フォームを作成します。

前章で自分でプログラミングしたときと同様に、まずウィンドウを配置し、その上に水平 ボックス、垂直ボックス、テーブルなどでレイアウトをし、最後にラベルやテキストエン トリ、ボタンなどを設置します。

   パレットと各ウィジェットの対比表(「GTK+ Basic」タグの場合)

ウィンドウ メニューバー ツールバー ハンドル ボックス ラベル テキスト

エントリ コンボボックス テキスト ボックス ボタン トグルボタン チェックボタン ラジオボタン リスト ツリー コラムリスト コラムツリー オプション

メニュー スピンボタン プログレスバー ステータス バー 水平セパレータ 垂直セパレータ ピックスマップ ドローイング

エリア ダイアログ ファイル選択

ダイアログ

カラー選択 ダイアログ

フォント選択 ダイアログ 水平ボックス 垂直ボックス テーブル 位置の固定

水平ボタン ボックス

垂直ボタンボッ

クス 水平ペイン 垂直ペイン ノートブック フレーム スクロール

ウィンドウ ビューポート

(2)プロパティで各種設定を行う。

プロパティは「ウィジェット」、「配置」、「基本」、「シグナ ル」の4つのタグから構成されています。

ウィジェットにより設定できる内容が異なります。

図5-2 パレット

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

タグ 設定内容

ウィジェット ウィジェットの名前、タイトル(ラベル)などウィジェットのメインの設定。

ウィジェットがウィンドウの時に設定できる「モーダル」を「はい」にする と、そのウィンドウが表示されたとき、他のウィンドウに対するシグナル(ボ タンのクリックやテキストエントリの入力など)を無効にすることができま す。たとえばエラーが発生してポップアップを表示したときに、そのポップ アップを閉じなければ他の処理ができないようにすることが可能です。

配置 他のウィジェットとの位置関係や隙間などの設定。

基本 ウィジェットの幅や高さなどの設定。

シグナル シグナルとそれに伴うハンドラ(コールバック関数)の設定。

「シグナル」タグでコールバック関数の登録を行います。シグナルを指定し、

対応するハンドラ(コールバック関数の関数名)を登録すると、「ソースコ ードの書出し」で、callbacks.hファイルにコールバック関数のプロトタイ プ宣言が、callbacks.cファイルにコールバック関数の雛形がそれぞれ出力さ れます。

※Gladeで画面を作成するときの注意事項として、編集中の画面が実行時の大きさとは限らない ことがあげられます。プロパティの「基本」タグで、幅と高さを指定するか、「位置の固定(  : パレットの一番右の列の下から3つ目)」を利用します。「位置の固定」をウィンドウに追加 すると、その「位置の固定」上に追加するウィジェットはフォームの位置とサイズ(つまり見 たままの状態)で固定されます。

手順

(1)パレットで「  (ウィンドウ)」を選択。ウィンドウのフォームが表示される。

(2)パレットで「  (位置の固定)」を選択。ウィンドウのフォームに追加する。

(3)フォームの「位置の固定」上に任意のウィジェットを追加する。

第五章 ツール”Glade”を使ったGUIアプリケーションの作成

応用編

ウィジェットのハンドラを取得する

テキストエントリやテキストボックスの文字列など、各ウィジェットの現在の状態を取得したい 場合、各ウィジェットのハンドラが必要になります。そのようなときはlookup̲widget関数を使 って取得します。

lookup_widget関数

GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name);

widget 目的のウィジェットが存在するウィンドウ上にある、ハンドラがわかってい

るウィジェット名

widget_name 目的のウィジェット名

戻り値 目的のウィジェットのハンドラ

※lookup̲widget関数は、Glade独自の関数です。Gladeが自動作成する「(プロジェクト  ディレクトリ)/src/support.c」ファイルに定義されています。

サンプルプログラム GPG-4910添付メモリエディタユーティリティxmleditのcallbacks.c よりOpenダイアログで「OK」ボタンを押された場合、ダイアログ のテキストエントリentry19の文字列を取得し、デバイス番号として Open関数を実行する。

566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586

void

on̲Openbutton̲clicked (GtkButton *button,        gpointer  user̲data) {

    int nData;

    GtkWidget *entry;

   

    entry = lookup̲widget(GTK̲WIDGET (button), "entry19");

    nData = atoi(strdup(gtk̲entry̲get̲text(GTK̲ENTRY(entry))));

    ret = MlOpen(nData,0);

    if(ret){

        ErrorFunction(ret);

    } else {

        nDevice = nData;

        nOpenflag = 1;

        OpenInit();

        gtk̲widget̲destroy(gtk̲widget̲get̲toplevel(GTK̲WIDGET(button)));

    }     return;

} ダイアログ表示の

削除

目的のウィジェ ットのハンドラ を取得

テキストエントリの文字 列の取得

Open関数の実行

ドキュメント内 LinuxによるPCI/CompactPCI/CardBus制御 入門編 (ページ 48-61)

関連したドキュメント