Skip to content

Commit

Permalink
Album tooltips in library
Browse files Browse the repository at this point in the history
  • Loading branch information
kraxarn committed Jun 27, 2023
1 parent 6a7b929 commit 35d5b4f
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 9 deletions.
28 changes: 26 additions & 2 deletions src/list/library.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
#include "list/library.hpp"
#include "mainwindow.hpp"

List::Library::Library(lib::spt::api &spotify, lib::cache &cache, QWidget *parent)
List::Library::Library(lib::spt::api &spotify, lib::cache &cache,
const lib::http_client &httpClient, lib::settings &settings, QWidget *parent)
: QTreeWidget(parent),
spotify(spotify),
cache(cache)
cache(cache),
tooltip(settings, httpClient, cache)
{
setMouseTracking(true);

addTopLevelItems({
Tree::itemWithNoChildren(this, recentlyPlayed,
"Most recently played tracks from any device"),
Expand Down Expand Up @@ -36,6 +40,9 @@ List::Library::Library(lib::spt::api &spotify, lib::cache &cache, QWidget *paren
setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
QWidget::connect(this, &QWidget::customContextMenuRequested,
this, &List::Library::onMenuRequested);

QTreeWidget::connect(this, &QTreeWidget::itemEntered,
this, &List::Library::onItemEntered);
}

void List::Library::load(QTreeWidgetItem *item)
Expand Down Expand Up @@ -304,3 +311,20 @@ void List::Library::onMenuRequested(const QPoint &pos)
auto *menu = new Menu::Album(spotify, cache, album.id, this);
menu->popup(mapToGlobal(pos));
}

void List::Library::onItemEntered(QTreeWidgetItem *item, int column)
{
if (!item->toolTip(0).isEmpty() || column != 0 || item->parent() == nullptr)
{
return;
}

const auto data = item->data(0, dataRole);
if (!data.canConvert<lib::spt::album>())
{
return;
}

const auto album = data.value<lib::spt::album>();
tooltip.set(item, album);
}
6 changes: 5 additions & 1 deletion src/list/library.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include "util/tree.hpp"
#include "listitem/library.hpp"
#include "util/tooltip.hpp"

#include <QTreeWidget>
#include <QHeaderView>
Expand All @@ -16,13 +17,15 @@ namespace List
Q_OBJECT

public:
Library(lib::spt::api &spotify, lib::cache &cache, QWidget *parent);
Library(lib::spt::api &spotify, lib::cache &cache, const lib::http_client &httpClient,
lib::settings &settings, QWidget *parent);

void load(QTreeWidgetItem *item);

private:
lib::spt::api &spotify;
lib::cache &cache;
Tooltip tooltip;

static constexpr const int dataRole = 0x100;
static constexpr const char *followedArtists = "Followed Artists";
Expand All @@ -37,6 +40,7 @@ namespace List
void onDoubleClicked(QTreeWidgetItem *item, int column);
void onExpanded(QTreeWidgetItem *item);
void onMenuRequested(const QPoint &pos);
void onItemEntered(QTreeWidgetItem *item, int column);

void tracksLoaded(const lib::spt::entity &entity, const std::vector<lib::spt::track> &tracks);
static void itemsLoaded(std::vector<ListItem::Library> &items, QTreeWidgetItem *item);
Expand Down
6 changes: 1 addition & 5 deletions src/listitem/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,7 @@ auto ListItem::Library::tooltip() const -> QString
{
if (entity.canConvert<lib::spt::album>())
{
const auto album = entity.value<lib::spt::album>();

return QString("%1\nBy %2")
.arg(QString::fromStdString(album.name),
QString::fromStdString(album.artist));
return {};
}

return QString::fromStdString(name());
Expand Down
2 changes: 1 addition & 1 deletion src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ auto MainWindow::createCentralWidget() -> QWidget *
sidePanel = new SidePanel::View(spotify, settings, cache, httpClient, this);
sidePanel->setVisible(false);

libraryList = new List::Library(spotify, cache, this);
libraryList = new List::Library(spotify, cache, httpClient, settings, this);
playlistList = new List::Playlist(spotify, settings, cache, this);
contextView = new Context::View(spotify, settings, cache, httpClient, this);

Expand Down
9 changes: 9 additions & 0 deletions src/util/tooltip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ void Tooltip::set(QTreeWidgetItem *item, const lib::spt::track &track)
});
}

void Tooltip::set(QTreeWidgetItem *item, const lib::spt::album &album)
{
Http::getAlbumImage(album.image, httpClient, cache,
[this, item, album](const QPixmap &pixmap)
{
item->setToolTip(0, tooltip(album, pixmap));
});
}

void Tooltip::set(QTreeWidgetItem *item, const lib::spt::album &album, const QIcon &albumIcon)
{
const auto icon = albumIcon.pixmap(albumSize, albumSize);
Expand Down
1 change: 1 addition & 0 deletions src/util/tooltip.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Tooltip

void set(QListWidgetItem *item, const lib::spt::track &track, const QIcon &albumIcon);
void set(QTreeWidgetItem *item, const lib::spt::track &track);
void set(QTreeWidgetItem *item, const lib::spt::album &album);
void set(QTreeWidgetItem *item, const lib::spt::album &album, const QIcon &albumIcon);

private:
Expand Down

0 comments on commit 35d5b4f

Please sign in to comment.