/* * Strawberry Music Player * This file was part of Clementine. * Copyright 2010, David Sansome * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Strawberry is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Strawberry. If not, see . * */ #ifndef COLLECTIONVIEW_H #define COLLECTIONVIEW_H #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "core/song.h" #include "widgets/autoexpandingtreeview.h" class QContextMenuEvent; class QHelpEvent; class QMouseEvent; class QPaintEvent; class Application; class CollectionFilterWidget; class EditTagDialog; #ifdef HAVE_GSTREAMER class OrganiseDialog; #endif class CollectionItemDelegate : public QStyledItemDelegate { Q_OBJECT public: CollectionItemDelegate(QObject *parent); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; public slots: bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index); }; class CollectionView : public AutoExpandingTreeView { Q_OBJECT public: CollectionView(QWidget *parent = nullptr); ~CollectionView(); // Returns Songs currently selected in the collection view. // Please note that the selection is recursive meaning that if for example an album is selected this will return all of it's songs. SongList GetSelectedSongs() const; void SetApplication(Application *app); void SetFilter(CollectionFilterWidget *filter); // QTreeView void keyboardSearch(const QString &search); void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible); int TotalSongs(); int TotalArtists(); int TotalAlbums(); public slots: void TotalSongCountUpdated(int count); void TotalArtistCountUpdated(int count); void TotalAlbumCountUpdated(int count); void ReloadSettings(); void FilterReturnPressed(); void SaveFocus(); void RestoreFocus(); signals: void ShowConfigDialog(); void TotalSongCountUpdated_(); void TotalArtistCountUpdated_(); void TotalAlbumCountUpdated_(); protected: // QWidget void paintEvent(QPaintEvent *event); void mouseReleaseEvent(QMouseEvent *e); void contextMenuEvent(QContextMenuEvent *e); private slots: void Load(); void AddToPlaylist(); void AddToPlaylistEnqueue(); void OpenInNewPlaylist(); #ifdef HAVE_GSTREAMER void Organise(); void CopyToDevice(); #endif void EditTracks(); void ShowInBrowser(); void ShowInVarious(); void NoShowInVarious(); private: void RecheckIsEmpty(); void ShowInVarious(bool on); bool RestoreLevelFocus(const QModelIndex &parent = QModelIndex()); void SaveContainerPath(const QModelIndex &child); private: Application *app_; CollectionFilterWidget *filter_; int total_song_count_; int total_artist_count_; int total_album_count_; QPixmap nomusic_; QMenu *context_menu_; QModelIndex context_menu_index_; QAction *load_; QAction *add_to_playlist_; QAction *add_to_playlist_enqueue_; QAction *open_in_new_playlist_; #ifdef HAVE_GSTREAMER QAction *organise_; QAction *copy_to_device_; #endif QAction *delete_; QAction *edit_track_; QAction *edit_tracks_; QAction *show_in_browser_; QAction *show_in_various_; QAction *no_show_in_various_; #ifdef HAVE_GSTREAMER std::unique_ptr organise_dialog_; #endif std::unique_ptr edit_tag_dialog_; bool is_in_keyboard_search_; // Save focus Song last_selected_song_; QString last_selected_container_; QSet last_selected_path_; }; #endif // COLLECTIONVIEW_H