There are two ways to set up a group of radio buttons. The first way
is to create the buttons, and set up their groups afterwards. Only
the first two constructors are used. In the following example, we
make a new window class called RadioButtons, and then put three
radio buttons in it:
class RadioButtons : public Gtk::Window
{
public:
RadioButtons();
protected:
Gtk::RadioButton m_rb1, m_rb2, m_rb3;
};
RadioButtons::RadioButtons()
: m_rb1("button1"),
m_rb2("button2"),
m_rb3("button3")
{
Gtk::RadioButton::Group group = m_rb1.get_group();
m_rb2.set_group(group);
m_rb3.set_group(group);
}
We told gtkmm to put all three
RadioButtons in the same group by obtaining the group with
get_group() and using
set_group() to tell the othe
RadioButtons to share that group.
Note that you can't just do
m_rb2.set_group(m_rb1.get_group()); //doesn't work
because the group is modified by
set_group() and therefore non-const.
The second way to set up radio buttons is to make a group first, and
then add radio buttons to it. Here's an example:
class RadioButtons : public Gtk::Window
{
public:
RadioButtons();
};
RadioButtons::RadioButtons()
{
Gtk::RadioButton::Group group;
Gtk::RadioButton *m_rb1 = manage( new Gtk::RadioButton(group,"button1"));
Gtk::RadioButton *m_rb2 = manage( new Gtk::RadioButton(group,"button2"));
Gtk::RadioButton *m_rb3 = manage( new Gtk::RadioButton(group,"button3"));
}
We made a new group by simply declaring a variable, group, of type
Gtk::RadioButton::Group. Then we made three radio buttons, using
a constructor to make each of them part of group.
The following example demonstrates the use of RadioButtons:
Source Code
File: radiobuttons.h
#ifndef GTKMM_EXAMPLE_RADIOBUTTONS_H
#define GTKMM_EXAMPLE_RADIOBUTTONS_H
#include <gtkmm/window.h>
#include <gtkmm/radiobutton.h>
#include <gtkmm/box.h>
#include <gtkmm/separator.h>
class RadioButtons : public Gtk::Window
{
public:
RadioButtons();
virtual ~RadioButtons();
protected:
//Signal handlers:
virtual void on_button_clicked();
//Child widgets:
Gtk::VBox m_Box_Top, m_Box1, m_Box2;
Gtk::RadioButton m_RadioButton1, m_RadioButton2, m_RadioButton3;
Gtk::HSeparator m_Separator;
Gtk::Button m_Button_Close;
};
#endif //GTKMM_EXAMPLE_RADIOBUTTONS_H
File: main.cc
#include <gtkmm/main.h>
#include "radiobuttons.h"
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
RadioButtons buttons;
Gtk::Main::run(buttons); //Shows the window and returns when it is closed.
return 0;
}
File: radiobuttons.cc
#include "radiobuttons.h"
RadioButtons::RadioButtons() :
m_Box1(false, 10),
m_Box2(false, 10),
m_RadioButton1("button1"),
m_RadioButton2("button2"),
m_RadioButton3("button3"),
m_Button_Close("close")
{
set_title("radio buttons");
set_border_width(0);
//Put radio buttons 2 and 3 in the same group as 1:
Gtk::RadioButton::Group group = m_RadioButton1.get_group();
m_RadioButton2.set_group(group);
m_RadioButton3.set_group(group);
add(m_Box_Top);
//Put Box1 in m_Box_Top:
m_Box1.set_border_width(10);
m_Box_Top.pack_start(m_Box1);
//Put the radio buttons in Box1:
m_Box1.pack_start(m_RadioButton1);
m_Box1.pack_start(m_RadioButton2);
m_Box1.pack_start(m_RadioButton3);
m_RadioButton2.set_active();
//Add a separator:
m_Box_Top.pack_start(m_Separator, Gtk::PACK_SHRINK);
//Put Box2 in m_Box_Top:
m_Box2.set_border_width(10);
m_Box_Top.pack_start(m_Box2, Gtk::PACK_SHRINK);
//Put Close button in Box2:
m_Box2.pack_start(m_Button_Close);
m_Button_Close.set_flags(Gtk::CAN_DEFAULT);
m_Button_Close.grab_default();
m_Button_Close.signal_clicked().connect( SigC::slot(*this, &RadioButtons::on_button_clicked) );
show_all_children();
}
RadioButtons::~RadioButtons()
{
}
void RadioButtons::on_button_clicked()
{
hide(); //to close the application.
}