Tutorial

Inti Logo

« Labels
Arrows »

AccelLabel

The AccelLabel widget is derived from Label and displays an accelerator key on the right of the label text, e.g. 'Ctl+S'. It is commonly used in menus to show the keyboard short-cuts for commands. You most probably wont have much use for an AccelLabel in your day to day programming but if you ever need a custom menu item you will.

You can create an AccelLabel by calling one of the following constructors:

AccelLabel();

explicit AccelLabel(const String& str, bool use_underline = false);

The first constructor creates an empty AccelLabel. The second constructor creates an AccelLabel that displays the specified character string. If use_underline is true the string is parsed for an underscore preceding the mnemonic character.

After construction you can change the label's text by calling one of the following Gtk::Label methods:

void set_text(const String& str);
 
void set_text_with_mnemonic(const String& str);

The sole argument is the new string to display. The second method, set_text_with_mnemonic() parses the string for the mnemonic character (i.e. the character preceded by an underscore). The space needed for the new string will be automatically adjusted if needed.

The accelerator key to display is not set explicitly. Instead, the AccelLabel displays the accelerators which have been added to a particular widget. This widget is set by calling the following method:
 
void set_accel_widget(Gtk::Widget& accel_widget);

For example, a MenuItem widget may have an accelerator added to emit the "activate" signal when the 'Ctl+S' key combination is pressed. An AccelLabel is created and added to the MenuItem, and Gtk::AccelLabel::set_accel_widget() is called with the MenuItem as its argument. The AccelLabel will now display 'Ctl+S' after its label. Note that creating a MenuItem with a label (or one of the similar functions for CheckMenuItem and RadioMenuItem) automatically adds an AccelLabel to the MenuItem and calls Gtk::AccelLabel::set_accel_widget() to set it up for you. So as I said,  you probably wont have much use for an AccelLabel unless your are creating the menu item yourself.

An AccelLabel will only display accelerators which have Gtk::ACCEL_VISIBLE set (see Gtk::AccelFlags). An AccelLabel can display multiple accelerators and even signal names, though it is almost always used to display just one accelerator key.

If you have a window with a menu, to create a simple menu item with an accelerator key you would do something like this:

// Create a Gtk::AccelGroup and add it to the window.
Gtk::AccelGroup *accel_group = new Gtk::AccelGroup;
window->add_accel_group(accel_group);

// Create the menu item using the convenience function.
Gtk::MenuItem *save_item = new Gtk::MenuItem ("Save");
save_item->show();

menu->add (*save_item);

// Now add the accelerator to the Gtk::MenuItem.
// Note Gtk::ACCEL_VISIBLE is the default and doesn't need to be specified.
save_item->add_accelerator ("activate", *accel_group, Gtk::AccelKey(GDK_s, Gdk::CONTROL_MASK));




« Labels Index
Miscellaneous Widgets
Top
Arrows »