====== Una classe di esempio con Gtkmm ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//15/02/2008//** \\ \\ "gtkmm è l'interfaccia C++ ufficiale del popolare toolkit grafico GTK+. Include le typesafe callback e un completo set di widget facilmente estendibili grazie all'ereditarietà."\\ [[http://it.wikipedia.org/wiki/Gtkmm|Da Wikipedia, l'enciclopedia libera.]] \\ ===== Cosa otterremo ===== {{programmazione:gtkmm:gtkmm1.png|}} Creeremo una finestra che sarà in grado di lanciare un'applicazione scrivendo semplicemente il nome della stessa sulla casella di testo. \\ Faremo tutto questo grazie a due file: ''main.cc '' contenente il blocco principale del programma ''main_window.cc'' la classe che disegna l'interfaccia. ====== 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 main_window ===== #include #include 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; void on_button1_clicked() { system(entry.get_text().c_str()); } public: MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio classe gtkmm"); add(fisso); //contenitore che permette un posizionamento "al pixel" dei widget fisso.put(button1,160, 170); //posiziono i widget sul contenitore fisso.put(entry,60, 140); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); 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) ); } ~MainWindow() { } }; ===== Il Makefile ===== CPP = g++ OPTS = `pkg-config --cflags --libs gtkmm-2.4` all: $(CPP) main.cc -o main $(OPTS) clean: rm main ===== Spezzare la classe in file di intestazioni e implementazione ===== Può essere utile dover spezzare la classe in due file con rispettivamente le intestazioni con i prototipi dei metodi e l'implementazione della classe stessa. \\ Di seguito i due file e il main. Ci sono di differenze con il codice precedente solo per quanto riguarda il makefile che questa volta include esplicitamente la compilazione della classe con la riga''$(CPP) main.cc main_window.cc -o main $(OPTS) '' che vedremo meglio in seguito. **La main** #include #include "main_window.h" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); MainWindow window1; Gtk::Main::run(window1); return 0; } **Il main_window.h** //avrei potuto usare solamente #include #include #include #include #include class MainWindow : public Gtk::Window { public: MainWindow(); virtual ~MainWindow(); Gtk::Entry entry; //publica in quanto si potrà accedere al contenuto protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Button button1; void on_button1_clicked(); }; **main_window.cc** #include #include #include "main_window.h" MainWindow::MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio classe gtkmm"); add(fisso); fisso.put(button1,160, 170); fisso.put(entry,60, 140); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); 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) ); } MainWindow::~MainWindow() { } void MainWindow::on_button1_clicked() { system(entry.get_text().c_str()); } **Il Makefile** CPP = g++ OPTS = `pkg-config --cflags --libs gtkmm-2.4` all: $(CPP) main.cc main_window.cc -o main $(OPTS) clean: rm main