Nemodální dialogové okno s informacemi o aplikaci (AboutDialog)
AboutDialog nabízí jednoduchý způsob pro zobrazení informací o programu, jako je jeho logo, název, copyright, webové stránky a licence.
Většina dialogových oken v této kapitole je modálních, což znamená, že po dobu co jsou zobrazená, zmrazí zbytek aplikace. Je možné vytvářet i nemodální dialogová okna, která ostatní okna v aplikaci nezmrazí. Následující příklad ukazuje nemodální AboutDialog. Není to ale druh dialogového okna, které byste běžně dělali jako nemodální, ale nemodální dialogová okna se hodí v různých jiných situacích. Např. dialogové okno pro hledání a nahrazování v aplikaci gedit je nemodální.
- 15.5.1. Příklad
15.5.1. Příklad
File: examplewindow.h (For use with gtkmm 4)
#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(); //Child widgets: Gtk::Box m_VBox; Gtk::Label m_Label; Gtk::Box m_ButtonBox; Gtk::Button m_Button; Gtk::AboutDialog m_Dialog; }; #endif //GTKMM_EXAMPLEWINDOW_H
File: main.cc (For use with gtkmm 4)
#include "examplewindow.h" #include <gtkmm/application.h> int main(int argc, char *argv[]) { auto app = Gtk::Application::create("org.gtkmm.example"); //Shows the window and returns when it is closed. return app->make_window_and_run<ExampleWindow>(argc, argv); }
File: examplewindow.cc (For use with gtkmm 4)
#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"); set_default_size(400, 150); set_child(m_VBox); m_VBox.append(m_Label); m_Label.set_expand(true); m_Label.set_wrap(true); m_Label.set_selectable(true); m_VBox.append(m_ButtonBox); m_ButtonBox.append(m_Button); m_Button.set_expand(true); m_Button.set_halign(Gtk::Align::CENTER); m_Button.set_valign(Gtk::Align::CENTER); m_Button.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_clicked) ); m_Dialog.set_transient_for(*this); m_Dialog.set_hide_on_close(); m_Dialog.set_logo(Gdk::Texture::create_from_resource("/about/gtkmm_logo.gif")); 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_Button.grab_focus(); } ExampleWindow::~ExampleWindow() { } void ExampleWindow::on_button_clicked() { m_Dialog.show(); //Bring it to the front, in case it was already shown: m_Dialog.present(); }
File: aboutdialog.gresource.xml (For use with gtkmm 4)
<?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/about"> <file>gtkmm_logo.gif</file> </gresource> </gresources>