Table of Contents
ダイアログは第二のウィンドウとして、特別な情報や質問を提供するために使われます。Gtk::Dialogウィンドウはそれぞれ、見た目の一貫性を保つために最初からパックされたウィジットをいくつか持っています。また、run()メソッドはユーザーがダイアログを消すまでブロックし続けます。
Dialogから派生した有用なクラスがいくつかあります。Gtk::MessageDialogはもっともシンプルな通知のために使われます。しかし、それ以外の場面では、もっと複雑な機能を持ったダイアログを派生したいと考えるかもしれません。
カスタムダイアログにウィジットを配置するには、Gtk::VBoxを使ったほうがいいでしょう。get_vbox()から利用可能です。単に、ButtonをDialogに加えたいだけなら、add_button()メソッドが使えます。
run()メソッドはintを返します。これは標準のボタンで閉じたときに返るGtk::ResponseTypeの値です。または、add_button()を使って、カスタムした返り値を指定することもできます。
MessageDialogは有用なクラスです。これはシンプルな標準メッセージダイアログを、メッセージとアイコン、ユーザーが操作できるボタン付きで生成するときに使われます。コンストラクタの中でメッセージの種類とテキストを指定できます。Gtk::ButtonsType列挙型で標準ボタンの種類を指定するのも同様です。
File: examplewindow.h
#ifndef GTKMM_EXAMPLEWINDOW_H
#define GTKMM_EXAMPLEWINDOW_H
#include <gtkmm.h>
class ExampleWindow : public Gtk::Window
{
public:
ExampleWindow();
virtual ~ExampleWindow();
protected:
//Signal handlers:
virtual void on_button_info_clicked();
virtual void on_button_question_clicked();
//Child widgets:
Gtk::VButtonBox m_ButtonBox;
Gtk::Button m_Button_Info, m_Button_Question;
};
#endif //GTKMM_EXAMPLEWINDOW_H
File: main.cc
#include <gtkmm/main.h>
#include "examplewindow.h"
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
ExampleWindow window;
//Shows the window and returns when it is closed.
Gtk::Main::run(window);
return 0;
}
File: examplewindow.cc
#include "examplewindow.h"
#include <gtkmm/dialog.h>
#include <iostream>
ExampleWindow::ExampleWindow()
: m_Button_Info("Show Info MessageDialog"),
m_Button_Question("Show Question MessageDialog")
{
set_title("Gtk::MessageDialog example");
add(m_ButtonBox);
m_ButtonBox.pack_start(m_Button_Info);
m_Button_Info.signal_clicked().connect(sigc::mem_fun(*this,
&ExampleWindow::on_button_info_clicked) );
m_ButtonBox.pack_start(m_Button_Question);
m_Button_Question.signal_clicked().connect(sigc::mem_fun(*this,
&ExampleWindow::on_button_question_clicked) );
show_all_children();
}
ExampleWindow::~ExampleWindow()
{
}
void ExampleWindow::on_button_info_clicked()
{
Gtk::MessageDialog dialog(*this, "This is an INFO MessageDialog");
dialog.set_secondary_text(
"And this is the secondary text that explains things.");
dialog.run();
}
void ExampleWindow::on_button_question_clicked()
{
Gtk::MessageDialog dialog(*this, "This is a QUESTION MessageDialog",
false /* use_markup */, Gtk::MESSAGE_QUESTION,
Gtk::BUTTONS_OK_CANCEL);
dialog.set_secondary_text(
"And this is the secondary text that explains things.");
int result = dialog.run();
//Handle the response:
switch(result)
{
case(Gtk::RESPONSE_OK):
{
std::cout << "OK clicked." << std::endl;
break;
}
case(Gtk::RESPONSE_CANCEL):
{
std::cout << "Cancel clicked." << std::endl;
break;
}
default:
{
std::cout << "Unexpected button clicked." << std::endl;
break;
}
}
}