AboutDialog no modal
La clase AboutDialog ofrece una manera sencilla de mostrar información sobre el programa, como su logo, nombre, copyright, página web y licencia.
Most dialogs in this chapter are modal, that is, they freeze the rest of the application while they are shown. It's also possible to create a non-modal dialog, which does not freeze other windows in the application. The following example shows a non-modal AboutDialog. This is perhaps not the kind of dialog you would normally make non-modal, but non-modal dialogs can be useful in other cases. E.g. gedit's search-and-replace dialog is non-modal.
- 16.5.1. Ejemplo
16.5.1. Ejemplo
File: examplewindow.h (For use with gtkmm 3, not gtkmm 2)
#ifndef GTKMM_EXAMPLEWINDOW_H #define GTKMM_EXAMPLEWINDOW_H #include <gtkmm.h> class ExampleWindow : public Gtk::Window { public: ExampleWindow(); virtual ~ExampleWindow(); protected: //Signal handlers: void on_button_clicked(); void on_about_dialog_response(int response_id); //Child widgets: Gtk::Box m_VBox; Gtk::Label m_Label; Gtk::ButtonBox m_ButtonBox; Gtk::Button m_Button; Gtk::AboutDialog m_Dialog; }; #endif //GTKMM_EXAMPLEWINDOW_H
File: examplewindow.cc (For use with gtkmm 3, not gtkmm 2)
#include "examplewindow.h" #include <iostream> ExampleWindow::ExampleWindow() : m_VBox(Gtk::ORIENTATION_VERTICAL), m_Label("The AboutDialog is non-modal. " "You can select parts of this text while the AboutDialog is shown."), m_ButtonBox(Gtk::ORIENTATION_VERTICAL), m_Button("Show AboutDialog") { set_title("Gtk::AboutDialog example"); add(m_VBox); m_VBox.pack_start(m_Label); m_Label.set_line_wrap(true); m_Label.set_selectable(true); m_VBox.pack_start(m_ButtonBox); m_ButtonBox.pack_start(m_Button); m_Button.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_clicked) ); m_Dialog.set_transient_for(*this); m_Dialog.set_program_name("Example application"); m_Dialog.set_version("1.0.0"); m_Dialog.set_copyright("Murray Cumming"); m_Dialog.set_comments("This is just an example application."); m_Dialog.set_license("LGPL"); m_Dialog.set_website("http://www.gtkmm.org"); m_Dialog.set_website_label("gtkmm website"); std::vector<Glib::ustring> list_authors; list_authors.push_back("Murray Cumming"); list_authors.push_back("Somebody Else"); list_authors.push_back("AN Other"); m_Dialog.set_authors(list_authors); m_Dialog.signal_response().connect( sigc::mem_fun(*this, &ExampleWindow::on_about_dialog_response) ); show_all_children(); // The widget must be realized and mapped before grab_focus() is called. // That's why it's called after show_all_children(). m_Button.grab_focus(); } ExampleWindow::~ExampleWindow() { } void ExampleWindow::on_about_dialog_response(int response_id) { std::cout << response_id << ", close=" << Gtk::RESPONSE_CLOSE << ", cancel=" << Gtk::RESPONSE_CANCEL << ", delete_event=" << Gtk::RESPONSE_DELETE_EVENT << std::endl; if((response_id == Gtk::RESPONSE_CLOSE) || (response_id == Gtk::RESPONSE_CANCEL) ) { m_Dialog.hide(); } } void ExampleWindow::on_button_clicked() { m_Dialog.show(); //Bring it to the front, in case it was already shown: m_Dialog.present(); }
File: main.cc (For use with gtkmm 3, not gtkmm 2)
#include "examplewindow.h" #include <gtkmm/application.h> int main(int argc, char *argv[]) { Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); ExampleWindow window; //Shows the window and returns when it is closed. return app->run(window); }