====== 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