Table of Contents
メニューとツールバーにはそれぞれ専用のAPIがありますが、普通、これらは一緒に扱うべきでしょう。そのためにUIManagerを使って、メニューとツールバーを配置するアクション(Actionクラス)を定義します。この方法を使えば、メニューとツールバーを別々に操作するかわりに、アクションの発動で扱うことができます。さらに、アクションを通じてメニューバーとツールバーを同時に有効化・無効化することができます。
これにはGtk::ActionGroupクラス、Gtk::Actionクラス、UIManagerクラスの使用が必要です。これら全てはcreate()メソッドによってインスタンス化されるべきです。このメソッドはRefPtrを返します。
まずActionをいくつか生成し、それらをActionGroupにActionGroup::add()で追加します。
Action::create()に渡す引数で、そのアクションの名前とメニューとツールバーにどのように表れるかを指定できます。出来るだけストックのアイテムを使用してください。そうすればラベルや、アクセラレータキー、アイコン、ツールチップを指定しなくてすみます。さらに、既存の翻訳カタログも利用できます。
また、ActionGroup::add()を呼ぶ際に、シグナルハンドラを指定することもできます。このシグナルハンドラは、アクションがメニューアイテムやツールバーボタンから発動されたときに呼ばれます。
覚えておいてください。サブメニューのアクションはメニューアイテムのそれを同じように指定しなくてはいけません。
例
m_refActionGroup = Gtk::ActionGroup::create();
m_refActionGroup->add( Gtk::Action::create("MenuFile", "_File") );
m_refActionGroup->add( Gtk::Action::create("New", Gtk::Stock::NEW),
sigc::mem_fun(*this, &ExampleWindow::on_action_file_new) );
m_refActionGroup->add( Gtk::Action::create("ExportData", "Export Data"),
sigc::mem_fun(*this, &ExampleWindow::on_action_file_open) );
m_refActionGroup->add( Gtk::Action::create("Quit", Gtk::Stock::QUIT),
sigc::mem_fun(*this, &ExampleWindow::on_action_file_quit) );
覚えておいてください。ここでは、メニューとツールバーで見えるアクションの名前を自分で指定しています。ですから、この文字列を翻訳可能にするには、あの_()マクロで囲むことで行います。Gtk::Stockのアイテムを使用すれば、もちろん翻訳カタログを自動的に使えます。