====== Gtkmm: aprire una seconda finestra ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//17/02/2008//** \\ \\ Facendo riferimento all'articolo [[programmazione:gtkmm:classe_esempio]] vedremo come aggiungere un bottone alla fistra principale che servirà per mostrare una seconda finestra. Di seguito il codice completo dell'esempio. Ultilizzeremo 2 classi più il main per realizzare il tutto, e per comodità metteremo il tutto in 3 file distinti: ''main.cc'' , ''main_window.cc'' e ''secondary_window.cc'' . ===== La Main ===== #include #include "main_window.cc" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); MainWindow window1; Gtk::Main::run(window1); return 0; } ===== La classe MainWindow (main_window.cc) ===== #include #include #include "secondary_window.cc" class MainWindow : public Gtk::Window { protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Entry entry; Gtk::Button button1; Gtk::Button button2; void on_button1_clicked() { system(entry.get_text().c_str()); } void on_button2_clicked() { SecondaryWindow window2; //dichiaro la seconda finestra window2.set_modal(true); //finestra modale Gtk::Main::run(window2); //chiedo al ciclo principale di mostrarla. //quando chiude la nuova finestra prende alcuni dati set_title("Titolo finestra modale: " + window2.get_title()); entry.set_text("Titolo finestra modale: " +window2.get_title()); //invoco il distruttore della classe window2 //così scarico dalla memoria la finestra e i suoi widget window2.~SecondaryWindow(); } public: MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio due finestre gtkmm"); add(fisso); fisso.put(button1,160, 140); fisso.put(button2,160, 180); fisso.put(entry,60, 110); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); button2.set_label("Seconda finestra"); show_all_children(); //collego al click del bottone l'esecuzione del metodo on_button1_clicked() button1.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button1_clicked) ); button2.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button2_clicked) ); } ~MainWindow() { } }; ===== La classe SecondaryWindow (secondary_window.cc) ===== #include #include class SecondaryWindow : public Gtk::Window { protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Button button1; void on_button1_clicked() { Gtk::Main::quit(); //chiude la finestra //exit (0); //chiude tutto il programma } public: SecondaryWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio due finestre gtkmm"); add(fisso); fisso.put(button1,140, 110); button1.set_label("Chiudi !"); show_all_children(); //collego al click del bottone l'esecuzione del metodo on_button1_clicked() button1.signal_clicked().connect( sigc::mem_fun(*this, &SecondaryWindow::on_button1_clicked) ); } ~SecondaryWindow() { } };