PlaylistTabBar: Add right click option to star playlist

Fixes #782
This commit is contained in:
Jonas Kvinge 2021-09-28 22:14:25 +02:00
parent d870115467
commit 9bd728889b
4 changed files with 34 additions and 18 deletions

View File

@ -62,10 +62,11 @@ PlaylistTabBar::PlaylistTabBar(QWidget *parent)
manager_(nullptr),
menu_(new QMenu(this)),
menu_index_(-1),
new_(nullptr),
rename_(nullptr),
close_(nullptr),
save_(nullptr),
action_star_(nullptr),
action_close_(nullptr),
action_rename_(nullptr),
action_save_(nullptr),
action_new_(nullptr),
drag_hover_tab_(0),
suppress_current_changed_(false),
initialized_(false),
@ -76,9 +77,10 @@ PlaylistTabBar::PlaylistTabBar(QWidget *parent)
setUsesScrollButtons(true);
setTabsClosable(true);
close_ = menu_->addAction(IconLoader::Load("list-remove"), tr("Close playlist"), this, &PlaylistTabBar::CloseSlot);
rename_ = menu_->addAction(IconLoader::Load("edit-rename"), tr("Rename playlist..."), this, &PlaylistTabBar::RenameSlot);
save_ = menu_->addAction(IconLoader::Load("document-save"), tr("Save playlist..."), this, &PlaylistTabBar::SaveSlot);
action_star_ = menu_->addAction(IconLoader::Load("star"), tr("Star playlist"), this, &PlaylistTabBar::StarSlot);
action_close_ = menu_->addAction(IconLoader::Load("list-remove"), tr("Close playlist"), this, &PlaylistTabBar::CloseSlot);
action_rename_ = menu_->addAction(IconLoader::Load("edit-rename"), tr("Rename playlist..."), this, &PlaylistTabBar::RenameSlot);
action_save_ = menu_->addAction(IconLoader::Load("document-save"), tr("Save playlist..."), this, &PlaylistTabBar::SaveSlot);
menu_->addSeparator();
rename_editor_->setVisible(false);
@ -97,7 +99,7 @@ void PlaylistTabBar::SetActions(QAction *new_playlist, QAction *load_playlist) {
menu_->insertAction(nullptr, new_playlist);
menu_->insertAction(nullptr, load_playlist);
new_ = new_playlist;
action_new_ = new_playlist;
}
@ -126,9 +128,9 @@ void PlaylistTabBar::contextMenuEvent(QContextMenuEvent *e) {
}
menu_index_ = tabAt(e->pos());
rename_->setEnabled(menu_index_ != -1);
close_->setEnabled(menu_index_ != -1 && count() > 1);
save_->setEnabled(menu_index_ != -1);
action_rename_->setEnabled(menu_index_ != -1);
action_close_->setEnabled(menu_index_ != -1 && count() > 1);
action_save_->setEnabled(menu_index_ != -1);
menu_->popup(e->globalPos());
@ -153,7 +155,7 @@ void PlaylistTabBar::mouseDoubleClickEvent(QMouseEvent *e) {
// Discard a double click with the middle button
if (e->button() != Qt::MiddleButton) {
if (index == -1) {
new_->activate(QAction::Trigger);
action_new_->activate(QAction::Trigger);
}
else {
menu_index_ = index;
@ -199,6 +201,17 @@ void PlaylistTabBar::HideEditor() {
}
void PlaylistTabBar::StarSlot() {
if (menu_index_ == -1) return;
FavoriteWidget *favorite_widget = qobject_cast<FavoriteWidget*>(tabButton(menu_index_, QTabBar::LeftSide));
if (favorite_widget) {
favorite_widget->SetFavorite(!favorite_widget->IsFavorite());
}
}
void PlaylistTabBar::CloseSlot() {
if (menu_index_ == -1) return;

View File

@ -95,6 +95,7 @@ class PlaylistTabBar : public QTabBar {
void RenameSlot();
void RenameInline();
void HideEditor();
void StarSlot();
void CloseSlot();
void CloseFromTabIndex(const int index);
// Used when playlist's favorite flag isn't changed from the favorite widget (e.g. from the playlistlistcontainer): will update the favorite widget
@ -109,10 +110,11 @@ class PlaylistTabBar : public QTabBar {
QMenu *menu_;
int menu_index_;
QAction *new_;
QAction *rename_;
QAction *close_;
QAction *save_;
QAction *action_star_;
QAction *action_close_;
QAction *action_rename_;
QAction *action_save_;
QAction *action_new_;
QBasicTimer drag_hover_timer_;
int drag_hover_tab_;

View File

@ -40,7 +40,7 @@ FavoriteWidget::FavoriteWidget(const int tab_index, const bool favorite, QWidget
off_(":/icons/64x64/star-grey.png"),
rect_(0, 0, kStarSize, kStarSize) {}
void FavoriteWidget::SetFavorite(bool favorite) {
void FavoriteWidget::SetFavorite(const bool favorite) {
if (favorite_ != favorite) {
favorite_ = favorite;

View File

@ -40,7 +40,8 @@ class FavoriteWidget : public QWidget {
explicit FavoriteWidget(const int tab_index, const bool favorite = false, QWidget *parent = nullptr);
// Change the value if different from the current one and then update display and emit FavoriteStateChanged signal
void SetFavorite(bool favorite);
bool IsFavorite() const { return favorite_; }
void SetFavorite(const bool favorite);
QSize sizeHint() const override;