We'll start our music player by adding a toolbar with the buttons needed for such software:
- Open a file
- Play
- Pause
- Stop
- Previous/next song
- Remove song from playlist
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.