The Hildon::WizardDialog is the Maemo equivalent for the Gtk::Assistant.
The API is very straightforward. You must simply create a Gtk::Notebook with pages for each page of the wizard, and then provide that notebook to the WizardDialog, either to the constructor or to the set_wizard_notebook() method.
Here is the full example code for the WizardDialog:
File: examplewindow.h
#ifndef _MAEMOMM_EXAMPLEDIALOG_H
#define _MAEMOMM_EXAMPLEDIALOG_H
#include <gtkmm/box.h>
#include <hildonmm/window.h>
#include <hildonmm/button.h>
#include "examplewizard.h"
class ExampleWindow : public Hildon::Window
{
public:
ExampleWindow();
virtual ~ExampleWindow();
protected:
// Signal handlers:
void on_button_clicked();
// Child widgets:
Gtk::HButtonBox box_;
Hildon::Button button_;
ExampleWizard wizard_;
};
#endif /* _MAEMOMM_EXAMPLEWINDOW_H */
File: examplewizard.h
#ifndef _MAEMOMM_EXAMPLEDWIZARD_H
#define _MAEMOMM_EXAMPLEDWIZARD_H
#include <hildonmm/wizard-dialog.h>
#include <gtkmm.h>
class ExampleWizard : public Hildon::WizardDialog
{
public:
ExampleWizard();
virtual ~ExampleWizard();
private:
// Child widgets:
Gtk::Notebook notebook_;
Gtk::VBox vbox_pageone_;
Gtk::Label label_;
Gtk::VBox vbox_pagetwo_;
Gtk::CheckButton checkbutton_;
};
#endif /* _MAEMOMM_EXAMPLEDWIZARD_H */
File: examplewizard.cc
#include "examplewizard.h"
ExampleWizard::ExampleWizard() :
Hildon::WizardDialog("Example wizard"),
vbox_pageone_(false, 6),
label_("Example text for page one"),
vbox_pagetwo_(false, 6),
checkbutton_("Example check button for page two")
{
vbox_pageone_.pack_start(label_);
vbox_pagetwo_.pack_start(checkbutton_);
notebook_.append_page(vbox_pageone_);
notebook_.append_page(vbox_pagetwo_);
notebook_.show_all();
set_wizard_notebook(notebook_);
show_all();
}
ExampleWizard::~ExampleWizard()
{
}
File: main.cc
#include <hildonmm.h>
#include "examplewindow.h"
#include <iostream>
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
Hildon::init();
ExampleWindow window;
kit.run(window); //Shows the window and returns when it is closed.
return 0;
}
File: examplewindow.cc
#include "examplewindow.h"
#include <hildonmm/wizard-dialog.h>
#include <iostream>
ExampleWindow::ExampleWindow() :
button_(Gtk::Hildon::SIZE_HALFSCREEN_WIDTH | Gtk::Hildon::SIZE_FINGER_HEIGHT,
Hildon::BUTTON_ARRANGEMENT_VERTICAL,
"Show wizard",
"by clicking this button")
{
set_title("Hildon::WizardDialog example");
add(box_);
box_.pack_start(button_, Gtk::PACK_SHRINK);
button_.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_clicked));
show_all();
}
ExampleWindow::~ExampleWindow()
{
}
void ExampleWindow::on_button_clicked()
{
ExampleWizard dialog;
dialog.set_transient_for(*this);
int response = dialog.run();
//Handle the response:
switch(response)
{
case(2): //TODO: Use the correct enums when the patch in bug #884 has been applied.
{
std::cout << "Finish clicked." << std::endl;
break;
}
case(Gtk::RESPONSE_CANCEL): //TODO: Use the correct enums when the patch in bug #884 has been applied.
{
std::cout << "Cancel clicked." << std::endl;
break;
}
default:
{
std::cout << "Unexpected button clicked: " << response << std::endl;
break;
}
}
}