### Tutorial
« AccelLabel | The Tooltips Object »

## Arrows

The Arrow widget draws an arrowhead, facing in a number of possible directions and having a number of possible styles. It can be very useful when placed on a button in many applications. Like the Label widget, it emits no signals.
To create a new arrow, use one of the following constructors:

`Arrow(); Arrow(Gtk::ArrowType arrow_type, Gtk::ShadowType shadow_type);`

The values for ArrowType are:

- ARROW_UP
- ARROW_DOWN
- ARROW_LEFT
- ARROW_RIGHT

and the values for ShadowType are

- SHADOW_IN
- SHADOW_OUT - the default
- SHADOW_ETCHED_IN
- SHADOW_ETCHED_OUT

The first constructor creates a default arrow widget with an ArrowType of ARROW_RIGHT and a ShadowType of SHADOW_OUT. The second constructor creates an arrow widget with the specified arrow_type and shadow_type.
You can set the arrow type with this method:

`void set(Gtk::ArrowType arrow_type, Gtk::ShadowType shadow_type);`

Here's a brief example to illustrate their use.
The header file for Arrow Buttons is arrow.h:

`#include<inti/main.h> #include <inti/core.h> #include <inti/gtk/arrow.h> #include <inti/gtk/button.h> using namespace Inti; // ArrowButton class ArrowButton : public Gtk::Button { ArrowButton(const ArrowButton&); ArrowButton& operator=(const ArrowButton&); public: ArrowButton(Gtk::ArrowType arrow_type, Gtk::ShadowType shadow_type); virtual ~ArrowButton(); }; // ArrowWindow class ArrowWindow : public Gtk::Window { ArrowWindow(const ArrowWindow&); ArrowWindow& operator=(const ArrowWindow&); public: ArrowWindow(); virtual ~ArrowWindow(); };`

and the source file is arrow.cc:

`#include"arrow.h" // ArrowButton ArrowButton::ArrowButton(Gtk::ArrowType arrow_type, Gtk::ShadowType shadow_type) { // Create an Arrow widget with the specified parameters and pack it into the button. Gtk::Arrow *arrow = new Gtk::Arrow(arrow_type, shadow_type); add(*arrow); } ArrowButton::~ArrowButton() { } // ArrowWindow ArrowWindow::ArrowWindow() { set_title("Arrow Buttons"); set_border_width(10); // Create a box to hold the arrows/buttons Gtk::HBox *hbox = new Gtk::HBox; hbox->set_border_width(2); add(*hbox); // Pack and show all the widgets. ArrowButton *button = new ArrowButton(Gtk::ARROW_UP, Gtk::SHADOW_IN); hbox->pack_start(*button, false,false, 3); button = new ArrowButton(Gtk::ARROW_DOWN, Gtk::SHADOW_OUT); hbox->pack_start(*button, false,false, 3); button = new ArrowButton(Gtk::ARROW_LEFT, Gtk::SHADOW_ETCHED_IN); hbox->pack_start(*button, false,false, 3); button = new ArrowButton(Gtk::ARROW_RIGHT, Gtk::SHADOW_ETCHED_OUT); hbox->pack_start(*button, false,false, 3); show_all(); } ArrowWindow::~ArrowWindow() { } // Convenience macro for a simple main function GCODE_MAIN(ArrowWindow)`

The INTI_MAIN macro is a convenience macro that writes a simple main function, its only argument is the name of the main window class. The macro is defined in `<inti/main.h>` as

`#define INTI_MAIN(MainWidget)\ int main (int argc, char *argv[])\ {\ Inti::Main::init(&argc, &argv);\ MainWidget main_widget;\ main_widget.sig_destroy().connect(slot(&Inti::Main::quit));\ main_widget.show();\ Inti::Main::run();\ return 0;\ }`

Most main functions in C++ are as simple as this because all the creation work for the main window is done inside its constructor, not the main function.

« AccelLabel | Index Miscellaneous Widgets Top | The Tooltips Object »