Tutorial

Inti Logo

« Scrolled Windows
 Toolbar »

Button Boxes

Button Boxes are a convenient way to quickly layout a group of buttons. They come in both horizontal and vertical flavours. You create a new Button Box with one of the following constructors, which create a horizontal or vertical box, respectively:

HButtonBox(Gtk::ButtonBoxStyle layout = Gtk::BUTTONBOX_DEFAULT_STYLE, int spacing = default_spacing);

VButtonBox(Gtk::ButtonBoxStyle layout = Gtk::BUTTONBOX_DEFAULT_STYLE, int spacing = default_spacing
);

The layout argument sets the method used to spread the buttons in a button box. It can be one of the values from the Gtk::ButtonBoxStyle enumeration:
The spacing argument specifies the number of pixels to put between the buttons in the button box. The default_spacing is defined as -1 and implies zero pixels. The spacing can be retrieved or altered using the inherited Gtk::Box::set_spacing() and Gtk::Box::get_spacing() methods.

The Button Box layout can be altered or retrieved using the following methods, respectively.

voidset_layout(Gtk::ButtonBoxStyle layout_style);

Gtk::ButtonBoxStyle get_layout() const;


Buttons are added to a Button Box using the usual method, Gtk::Container::add():

buttonbox->add(*button);

Here's an example that illustrates all the different layout settings for Button Boxes.

Button Boxes

The header file for Button Boxes is buttonbox.h:

#include<inti/main.h>
#include <inti/core.h>
#include <inti/gtk/buttonbox.h>
#include <inti/gtk/frame.h>
#include <inti/gtk/button.h>


using namespace Inti;

class ButtonBoxFrame : public Gtk::Frame
{
public:
    ButtonBoxFrame(bool horizontal, const char *title, int spacing, Gtk::ButtonBoxStyle layout);
    virtual ~ButtonBoxFrame();
};

class ButtonBoxWindow : public Gtk::Window
{
public:
    ButtonBoxWindow();
    virtual ~ButtonBoxWindow();
};


and the source file is buttonbox.cc:

#include"buttonbox.h"

// ButtonBoxFrame

ButtonBoxFrame::ButtonBoxFrame(bool horizontal, const char *title, int spacing, Gtk::ButtonBoxStyle layout)
{
    set_label(title);

    Gtk::ButtonBox *bbox;
    if (horizontal)
        bbox = new Gtk::HButtonBox;
    else
        bbox = new Gtk::VButtonBox;

    bbox->set_border_width(5);
    add(*bbox);
    bbox->set_layout(layout);
    bbox->set_spacing(spacing);

    Gtk::Button *button = new Gtk::StockButton(GTK_STOCK_OK);
    bbox->add(*button);
 
    button = new Gtk::StockButton(GTK_STOCK_CANCEL);
    bbox->add(*button);

    button = new Gtk::StockButton(GTK_STOCK_HELP);
    bbox->add(*button);
}

ButtonBoxFrame::~ButtonBoxFrame()
{
}

// ButtonBoxWindow

ButtonBoxWindow::ButtonBoxWindow()
{
    set_title("Button Boxes");
    set_border_width(10);

    Gtk::VBox *main_vbox = new Gtk::VBox;
    add(*main_vbox);

    // Horizontal Button Boxes
    Gtk::Frame *frame = new Gtk::Frame("Horizontal Button Boxes");
    main_vbox->pack_start(*frame, true, true, 10);

    Gtk::Box *box = new Gtk::VBox;
    box->set_border_width(10);
    frame->add(*box);
   
    ButtonBoxFrame *button_box_frame = new ButtonBoxFrame(true, "Spread (spacing 40)", 40, Gtk::BUTTONBOX_SPREAD);
    box->pack_start(*button_box_frame);
    button_box_frame = new ButtonBoxFrame(true, "Edge (spacing 30)", 30, Gtk::BUTTONBOX_EDGE);
    box->pack_start(*button_box_frame, true, true, 5);
    button_box_frame = new ButtonBoxFrame(true, "Start (spacing 20)", 20, Gtk::BUTTONBOX_START);
    box->pack_start(*button_box_frame, true, true, 5);
    button_box_frame = new ButtonBoxFrame(true, "End (spacing 10)", 10, Gtk::BUTTONBOX_END);
    box->pack_start(*button_box_frame, true, true, 5);

    // Vertical Button Boxes
    frame = new Gtk::Frame("Vertical Button Boxes");
    main_vbox->pack_start(*frame, true, true, 10);

    box = new Gtk::HBox;
    box->set_border_width(10);
    frame->add(*box);

    button_box_frame = new ButtonBoxFrame(false, "Spread (spacing 5)", 5, Gtk::BUTTONBOX_SPREAD);
    box->pack_start(*button_box_frame);
    button_box_frame = new ButtonBoxFrame(false, "Edge (spacing 30)", 30, Gtk::BUTTONBOX_EDGE);
    box->pack_start(*button_box_frame, true, true, 5);
    button_box_frame = new ButtonBoxFrame(false, "Start (spacing 20)", 20, Gtk::BUTTONBOX_START);
    box->pack_start(*button_box_frame, true, true, 5);
    button_box_frame = new ButtonBoxFrame(false, "End (spacing 20)", 20, Gtk::BUTTONBOX_END);
    box->pack_start(*button_box_frame, true, true, 5);

    show_all();
}

ButtonBoxWindow::~ButtonBoxWindow()
{
}

int main (int argc, char *argv[])
{
    using namespace Main;

    init(&argc, &argv);

    ButtonBoxWindow window;
    window.sig_destroy().connect(slot(&Inti::Main::quit));

    run();
    return 0;
}




« Scrolled Windows Index
Container Widgets
Top
 Toolbar »