Hi, I do not understand how to make a dialog with gtkmm.
I am only a beginner programmer.
My exercise is this:
I have a main window with some buttons. After clicking one of this, I would like to show a simple window dialog with 2 button (the classic "ok" button and "cancel" button).
I have wrote this code:
dialog.h
Code:
#ifndef DIALOG_H
#define DIALOG_H
#include<gtkmm.h>
class dialogo : public Gtk::Dialog
{
public:
dialogo();
virtual ~dialogo();
protected:
void show_dialog();
Gtk::VButtonBox box;
Gtk::Button ok,annulla;
Gtk::HBox hbox;
};
#endif
dialog.cpp
Code:
#include"dialog.h"
#include<gtkmm.h>
dialogo::dialogo()
: ok("OK"),
annulla("ANNULLA")
{
set_title("primo dialgo");
add(box);
box.pack_start(ok);
box.pack_start(annulla);
show_all_children();
}
dialogo::~dialogo()
{
}
void dialogo::show_dialog()
{
dialogo dialogo(*this, "questo è un esempio");
//dialogo.set_secondary_test("prova testo secondario");
dialogo.run();
}
main.cpp
Code:
#include "MainWindow.h"
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
window win;
Gtk::Main::run(win);
return 0;
}
Mainwindow.cpp
Code:
#include "MainWindow.h"
#include "dialog.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
window::window()
{
//maximize(); //massimizza la finestra
set_title("Finestra principale");
set_resizable(false);
set_border_width(13);
set_size_request(250,250);
set_position(Gtk::WIN_POS_CENTER); //avvia l'applicazione al centro dello schermo
button.set_label("Ciao Mondo!");
close.set_label("Close");
summ.set_label("Somma");
clear.set_label("Clear");
dia.set_label("Dialog");
entry.set_text("Clicca il pulsante!");
label.set_text("Somma:");
hbox.set_spacing(2);
hbox1.set_spacing(2);
button.signal_clicked().connect(sigc::mem_fun(*this,&window::click_button));
close.signal_clicked().connect(sigc::mem_fun(*this, &window::close_button));
summ.signal_clicked().connect(sigc::mem_fun(*this, &window::somma_button));
clear.signal_clicked().connect(sigc::mem_fun(*this, &window::clear_button));
dia.signal_clicked().connect(sigc::mem_fun(*this, &dialogo::show_dialog));
hbox.pack_start(label);
hbox.pack_start(entry3);
hbox1.pack_start(close);
hbox1.pack_start(dia);
add(vbox);
vbox.pack_start(button);
vbox.pack_start(hbox1);
vbox.pack_start(summ);
vbox.pack_start(clear);
vbox.pack_start(entry);
vbox.pack_start(entry1);
vbox.pack_start(entry2);
vbox.pack_start(hbox);
show_all();
}
window::~window()
{
}
void window::click_button()
{
stringa = button.get_label();
if (stringa == "Ciao Mondo!")
{
entry.set_text(stringa);
button.set_label("Clicca ancora:)");
}
else
{
stringa = "Ciao Mondo!";
button.set_label(stringa);
stringa = "Clicca ancora:)";
entry.set_text(stringa);
}
}
void window::close_button()
{
hide(); //Chiude l'applicazione
}
void window::somma_button()
{
istringstream in, in2;//Uso sstream per convertire la stringa in numero
ostringstream out;//Uso sstream per convertire il numero in stringa
stringa = entry1.get_text();//prendo la stringa iniziale
in.str(stringa);//la inserisco nella variabile in e la converto in numero
in>>a;//la posiziono in a
s=entry2.get_text();
in2.str(s);
in2>>b;
c=a+b;//eseguo la somma
out<<c;//la posiziono in out per riconvertire in stringa il numero ottenuto
o=out.str();//converto il numero in stringa e la metto in s
entry3.set_text(o);//stampo il valore ottenuto
}
void window::clear_button()
{
entry.set_text("Clicca il pulsante!");
entry1.set_text("");
entry2.set_text("");
entry3.set_text("");
}
MainWindow.h
Code:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <gtkmm.h>
#include <glibmm.h>
#include <string>
using namespace std;
using Glib::ustring;
class window : public Gtk::Window
{
public:
window(); //costruttore
virtual ~window(); //distruttore
protected:
void click_button(); //funzione click button
void close_button(); //pulsante di chiusura
void somma_button(); //pulsnte per la somma
void clear_button(); //pulsante che cancella i 3 entry
void dialog_button(); //pulsante che lancia una finestra di dialogo
Gtk::Button button,close,summ,clear,dia; // oggetti che compongono la finestra window
Gtk::Entry entry,entry1,entry2,entry3; // altri oggetti della finestra window
Gtk::Label label;
Gtk::VBox vbox; //contenitore principale della finestra window
Gtk::HBox hbox,hbox1; //contenitore secondario per un label ed un pulsante
double a,b,c;
string stringa,s,o;
};
#endif
but it do not run...
Can you help me?