====== 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()
{
}
};