ソフトウェア設計及び演習用の班Wiki

第3回10/17(THU)

GTK続き

メニューバーの追加

  • GtkUIManagerを用いる。
  • 手順としては、
    • 1:メニューの構成の作成
      • メニューの構成はXML形式で記述する。
    • 2:メニューアイテムの詳細設定
    • 3:構成と、アイテム情報の登録
    • 4:メニューバーの登録
  • ショートカットキーの追加もできる。

1:メニューの構成の作成

  • <ui></ui>タグ中に記述。
  • メニューバーの作成は<menubar></menubar>タグ内に記述。
  • 細かい構成は<menu></menu>タグや<menuitem></menuitem>タグを用いる。

2:メニューアイテムの詳細設定

  • 配列static GtkActionEntry entries[] を用いる。
  • 以下の6つを設定する。
  • A.メニューもしくはメニューアイテムのID
  • B.メニューアイコン
    • Gtk+に前もって用意されているアイコンはGTK_STOCK_OPENやGTK_STOCK_QUITなどで表す。
  • B.メニューラベル
    • ラベルの前に「_(アンダーバー)」を入力するとメニューバー内で境界線を入れられる。
  • D.ショートカットキー
    • ここではキーの割り当てのみ。
      あとで関連付けをしないと、ショートカットキーを押しても正しく動作しない。
  • E.メニューアイテムの説明
  • F.コールバック関数
    • 教科書P207あたりに他の一覧あり。

3:構成と、アイテム情報の登録

  • GtkUIManagerに1,2の情報を登録する
  • UIマネージャーの作成は以下の通り。
GtkUIManager *ui;
ui = gtk_ui_manager_new ();
  • 次にアクショングループを作成して、メニューアイテムの詳細情報を登録する。
    • void gtk_action_group_add_actions(グループ, アイテムの定義情報, アイテム数, 渡すデータ);
  • さらにアクショングループからUIマネージャーに登録。
    • void gtk_ui_manager_insert_action_group(UIマネージャー, 登録グループ, 登録位置);
  • 文字列からメニュー構成要素を登録する。
    • guint gtk_ui_manager_add_ui_from_string(UIマネージャー, 構成文字列, 文字列の長さ,
      エラー情報を格納するポインタ);
      戻り値は登録したUIのIDになる。
  • ショートカットキーを関連付けする。
    • void gtk_window_add_accel_group(ウインドウウィジェット, ショートカットキー情報) ;

4:メニューバーの取得

  • メニューバーウィジェットを取得する。
    • GtkWidget* gtk_ui_manager_get_widget(UIマネージャー, メニューアイテムパス);
      戻り値はウィジェットになる。

ファイル選択ダイアログの実装

  • 画像ファイル等を指定して表示できるようにする。

  • ダイアログの作成
    • GtkWidget* gtk_file_chooser_dialog_new(ダイアログのタイトル, 親ウインドウ, ダイアログの種類,
      追加するボタンアイコン,ボタンを押した時の応答ID, NULL);
      戻り値はダイアログになる。
  • アイコンと応答IDはセットで入力する。
    • なので、形式としては(タイトル, 親,種類, アイコン, ID, アイコン, ID,・・・, NULL);となる。
ダイアログの種類
ファイルを開く:GTK_FILE_CHOOSER_ACTION_OPEN 
ファイルの保存:GTK_FILE_CHOOSER_ACTION_SAVE
ボタンの応答関係
キャンセルボタン:GTK_STOCK_CANCEL 応答:GTK_RESPONSE_CANCEL
開くボタン:GTK_STOCK_OPEN 応答:GTK_RESPONSE_ACCEPT(キャンセル以外に用いる(?))
  • ダイアログの表示とファイル処理
    • gint gtk_dialog_run(ダイアログ);
      戻り値は応答ID。
  • ファイル名の取得はgtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
    画像の表示はgtk_image_set_from_file(GTK_IMAGE (image), filename);を用いる。
    最後にメモリ領域をg_free()で開放する。


最終更新日:2013/10/17 14:05:48