Creating a toolbar

We'll start our music player by adding a toolbar with the buttons needed for such software:

That'll be a good start for our first non-empty window.

First of all, we'll need some additional import statements:

use gtk::{
    ContainerExt,
    SeparatorToolItem,
    Toolbar,
    ToolButton,
};

Then, we'll declare a constant because we'll use this value elsewhere:

const PLAY_STOCK: &str = "gtk-media-play";

We'll explain what this is very soon.

We'll now create a toolbar and add it to the window:

fn main() {
    // Same code to initialize gtk, create the window.
    application.connect_startup(|application| {
        // …

        let toolbar = Toolbar::new();
        window.add(&toolbar);

Note: Don't call window.show() yet, as we'll use another method ahead.

This code is pretty straightforward. The only thing to note is that the gtk-rs API requires a reference to values in most cases; in this case, we send a reference to the toolbar as a parameter to the add() method.

You'll see this add() method called literally everywhere. It allows you to add a widget to another. A widget is a component (visual or not) of a user interface. It can be a button, a menu, a separator, but it can also be an invisible component such as a box allowing you to place the widgets horizontally. We'll talk about containers like gtk::Box and how to lay out our widgets later in this chapter.

Let's add a button to this toolbar:

    let open_button = ToolButton::new_from_stock("gtk-open");
    toolbar.add(&open_button);

This creates a toolbar button and adds it to the toolbar.