Xfce Foundation Classes
« Main Page | Index
# 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 ButtonBox 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 enum: BUTTONBOX_DEFAULT_STYLE - default packing. BUTTONBOX_SPREAD - buttons are evenly spread across the ButtonBox. BUTTONBOX_EDGE - buttons are placed at the edges of the ButtonBox. BUTTONBOX_START - buttons are grouped towards the start of box, (on the left for a HBox, or the top for a VBox). BUTTONBOX_END - buttons are grouped towards the end of a box, (on the right for a HBox, or the bottom for a VBox). 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 set or retrieved using the inherited Gtk::Box::set_spacing() and Gtk::Box::get_spacing() methods. `void set_spacing(int spacing); int get_spacing() const;` The Button Box layout can be set or retrieved using the following methods, respectively. `void set_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);` ## Button Box Example Here's an example that illustrates all the different layout settings for Button Boxes. The header file for the Button Box example is <buttonbox.h>: `#include <xfc/main.hh> #include <xfc/gtk/button.hh> #include <xfc/gtk/buttonbox.hh> #include <xfc/gtk/frame.hh> #include <xfc/gtk/window.hh> using namespace Xfc; 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.hh" #include <xfc/gtk/box.hh> #include <xfc/gtk/stockid.hh> // 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::Button(Gtk::StockId::OK); bbox->add(*button); button = new Gtk::Button(Gtk::StockId::CANCEL); bbox->add(*button); button = new Gtk::Button(Gtk::StockId::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.signal_destroy().connect(sigc::ptr_fun(&Xfc::Main::quit)); run(); return 0; }` ## Compiling Button Box If you compiled and installed XFC yourself, you will find the source code for Button Box in the <examples/buttonbox> source directory along with a Makefile. If XFC came pre-installed, or you installed it from an RPM package, you will find the source code in the </usr/share/doc/xfcui-X.X/examples/buttonbox> subdirectory. In this case you will have to create the Makefile yourself (replace X.X with the version number of the libXFCui library you have installed). To create a Makefile for Button Box, add the following lines to a new text file and save it using the name "Makefile": `CC = g++ CFLAGS = -Wall -O2 buttonbox: buttonbox.cc buttonbox.hh $(CC) buttonbox.cc -o buttonbox $(CFLAGS) `pkg-config xfcui-X.X --cflags --libs` clean: rm -f *.o buttonbox` If you cut and paste these lines make sure the whitespace before $(CC) and rm is a tab character. When you compile and run this program you will see the following window appear: This window displays several vertical and horizontal button boxes, each using a different layout style.
Copyright © 2004-2005 The XFC Development Team | Top | XFC 4.4