Discman
Loading...
Searching...
No Matches
album_art_component.cc
Go to the documentation of this file.
1
6
7 #include "album_art_component.h"
8
9AlbumArtComponent::AlbumArtComponent(Glib::RefPtr<Gtk::Builder> builder) {
10 _done_button = builder->get_widget<Gtk::Button>("albumArtDoneButton");
11 _viewport = builder->get_widget<Gtk::Viewport>("albumArtViewport");
12 _grid = builder->get_widget<Gtk::Grid>("albumArtGrid");
13
14 _done_button->signal_clicked().connect(sigc::mem_fun(*this, &AlbumArtComponent::on_done_button_clicked));
15}
16
18 delete _grid;
19 delete _viewport;
20 delete _done_button;
21}
22
26
30
31void AlbumArtComponent::set_album_arts(const std::vector<AlbumArtProvider::AlbumArt>& arts, const int window_width) {
32 Gtk::Grid* newGrid = new Gtk::Grid();
33 newGrid->set_halign(Gtk::Align::CENTER);
34 newGrid->set_valign(Gtk::Align::START);
35 newGrid->set_column_spacing(SPACING);
36 newGrid->set_row_spacing(SPACING);
37
38 int cols = window_width / (ART_SIZE + SPACING);
39 int rows = std::ceil(((float)arts.size())/((float)cols));
40
41 for (int i = 0; i < cols; i++) {
42 newGrid->insert_column(0);
43 }
44
45 for (int i = 0; i < rows; i++) {
46 newGrid->insert_row(0);
47 }
48
49 bool done = false;
50 for (int i = 0; i < rows; i++) {
51 for (int j = 0; j < cols; j++) {
52 if (((unsigned long)((i * cols) + j)) == arts.size()) {
53 done = true;
54 break;
55 }
56 Gtk::Button* button = Gtk::make_managed<Gtk::Button>();
57 Gtk::Image* image = Gtk::make_managed<Gtk::Image>();
58
59
60 image->set(arts[(i * cols) + j].art);
61 button->set_has_frame(false);
62 button->set_size_request(ART_SIZE, ART_SIZE);
63 button->set_child(*image);
64
65 const std::string url = arts[(i * cols) + j].url;
66 button->signal_clicked().connect([this,url]() {
67 _signal_art.emit(url);
68 });
69
70 newGrid->attach(*button, j, i);
71 }
72 if (done) {
73 break;
74 }
75 }
76
77 _viewport->set_child(*newGrid);
78
79 delete _grid;
80 _grid = newGrid;
81}
82
Gtk::Button * _done_button
Done button on the art selection screen.
Gtk::Viewport * _viewport
Viewport that displays the grid of album art.
AlbumArtComponent(Glib::RefPtr< Gtk::Builder > builder)
AlbumArtComponent constructor.
~AlbumArtComponent()
AlbumArtComponent destructior.
void on_done_button_clicked()
Called when the "done" button is clicked.
sig_done _signal_done
Emitted when the user leaves the art selection screen.
sigc::signal< void(const std::string)> sig_art
"Art selected" signal type.
static constexpr int SPACING
The spacing between images.
static constexpr int ART_SIZE
The width and height of art displayed on the album art selection screen.
void set_album_arts(const std::vector< AlbumArtProvider::AlbumArt > &arts, const int window_width)
Set the album art images to show on the selection screen.
Gtk::Grid * _grid
Grid of album art.
sig_done signal_done()
Getter for _signal_done.
sig_art signal_art()
Getter for _signal_art.
sigc::signal< void()> sig_done
"Done with screen" signal type.
sig_art _signal_art
Emitted when the user selects an album art image.