Sayonara Player
GUI_AbstractLibrary.h
1 /* GUI_AbstractLibrary.h */
2 
3 /* Copyright (C) 2011-2016 Lucio Carreras
4  *
5  * This file is part of sayonara player
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 
22 
23 #ifndef GUI_ABSTRACTLIBRARY_H
24 #define GUI_ABSTRACTLIBRARY_H
25 
26 #include "Components/Library/LibraryNamespaces.h"
27 #include "GUI/Helper/Delegates/ComboBoxDelegate.h"
28 #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
29 
30 #include "Views/LibraryView.h"
31 #include "Views/LibraryViewAlbum.h"
32 
33 #include "Models/LibraryItemModelAlbums.h"
34 #include "Models/LibraryItemModelArtists.h"
35 #include "Models/LibraryItemModelTracks.h"
36 
37 #include "Delegates/LibraryItemDelegateAlbums.h"
38 #include "Delegates/LibraryItemDelegateTracks.h"
39 
40 #include "Helper/Settings/SayonaraClass.h"
41 #include "Helper/Filter.h"
42 
43 #include <QStringList>
44 #include <QPoint>
45 #include <QList>
46 #include <QMap>
47 #include <QIcon>
48 #include <QComboBox>
49 #include <QPushButton>
50 
51 class ColumnHeader;
52 class AbstractLibrary;
53 
55  public SayonaraWidget
56 {
57  Q_OBJECT
58 
59 public:
60  explicit GUI_AbstractLibrary(AbstractLibrary* library,
61  QWidget *parent=nullptr);
62 
63  virtual ~GUI_AbstractLibrary();
64 
65  void set_lib_chooser(const QMap<QString, QIcon>&);
66  void set_index(int idx);
67 
68 
69 protected:
70  AbstractLibrary* _library = nullptr;
71 
72  Filter _cur_searchfilter;
73 
74  BoolList _shown_cols_albums;
75  BoolList _shown_cols_artist;
76  BoolList _shown_cols_tracks;
77 
78 
79  LibraryItemModelTracks* _track_model = nullptr;
80  LibraryItemModelAlbums* _album_model = nullptr;
81  LibraryItemModelArtists* _artist_model = nullptr;
82 
83  LibraryItemDelegateTracks* _track_delegate = nullptr;
84  LibraryItemDelegateAlbums* _album_delegate = nullptr;
85  QItemDelegate* _artist_delegate = nullptr;
86 
87  virtual void init_headers();
88  virtual void init_shortcuts();
89  virtual void language_changed() override;
90  virtual Library::TrackDeletionMode show_delete_dialog(int n_tracks)=0;
91 
92 private:
93  QComboBox* _combo_libchooser = nullptr;
94  LibraryView* _lv_artist = nullptr;
95  LibraryViewAlbum* _lv_album = nullptr;
96  LibraryView* _lv_tracks = nullptr;
97 
98  QComboBox* _combo_search = nullptr;
99  QPushButton* _btn_clear = nullptr;
100  QLineEdit* _le_search = nullptr;
101  QPushButton* _btn_refresh = nullptr;
102 
103 
104  void init_finished();
105 
106 
107 protected slots:
108  virtual void _sl_live_search_changed();
109 
110 protected slots:
111 
112  virtual void refresh();
113 
114  virtual void lib_fill_tracks(const MetaDataList&);
115  virtual void lib_fill_albums(const AlbumList&);
116  virtual void lib_fill_artists(const ArtistList&);
117  virtual void track_info_available(const MetaDataList& v_md);
118 
119  virtual void artist_sel_changed(const SP::Set<int>&);
120  virtual void album_sel_changed(const SP::Set<int>&);
121  virtual void track_sel_changed(const SP::Set<int>&);
122 
123  virtual void artist_middle_clicked(const QPoint& p);
124  virtual void album_middle_clicked(const QPoint& p);
125  virtual void tracks_middle_clicked(const QPoint& p);
126 
127  virtual void artist_dbl_clicked(const QModelIndex &);
128  virtual void album_dbl_clicked(const QModelIndex &);
129  virtual void track_dbl_clicked(const QModelIndex &);
130 
131  virtual void columns_title_changed(const BoolList&);
132  virtual void columns_album_changed(const BoolList&);
133  virtual void columns_artist_changed(const BoolList&);
134 
135  virtual void sortorder_title_changed(SortOrder);
136  virtual void sortorder_album_changed(SortOrder);
137  virtual void sortorder_artist_changed(SortOrder);
138 
139  virtual void text_line_edited(const QString&);
140  virtual void clear_button_pressed();
141  virtual void combo_search_changed(int idx);
142  virtual void return_pressed();
143 
144  virtual void delete_artist();
145  virtual void delete_album();
146  virtual void delete_tracks();
147 
148  virtual void refresh_artist();
149  virtual void refresh_album();
150  virtual void refresh_tracks();
151 
152  virtual void album_rating_changed(int);
153  virtual void title_rating_changed(int);
154 
155  virtual void append();
156  virtual void append_tracks();
157  virtual void play_next();
158  virtual void play_next_tracks();
159 
160  virtual void show_delete_answer(QString);
161 
162 
163 public slots:
164  virtual void id3_tags_changed();
165 
166 protected:
167  template<typename T>
168  void setup_parent(T* subclass){
169 
170  subclass->setupUi(subclass);
171 
172  _combo_libchooser = subclass->combo_lib_chooser;
173  _lv_artist = subclass->lv_artist;
174  _lv_album = subclass->lv_album;
175  _lv_tracks = subclass->tb_title;
176  _btn_clear = subclass->btn_clear;
177  _le_search = subclass->le_search;
178  _combo_search = subclass->combo_searchfilter;
179 
180 
181  _combo_search->setItemDelegate(new ComboBoxDelegate(this));
182  _combo_search->setIconSize(QSize(16, 16));
183  _combo_search->view()->setIconSize(QSize(16, 16));
184 
185  init_shortcuts();
186  init_finished();
187 
188  }
189 };
190 
191 #endif // GUI_ABSTRACTLIBRARY_H
Definition: LibraryItemDelegateAlbums.h:38
Definition: LibraryItemDelegateTracks.h:35
Definition: Filter.h:31
Definition: AbstractLibrary.h:50
Definition: MetaDataList.h:44
Widget with Settings connection. Also contains triggers for language_changed() and skin_changed() wi...
Definition: SayonaraWidget.h:41
The AlbumList class.
Definition: Album.h:72
Definition: GUI_AbstractLibrary.h:54
Definition: LibraryView.h:61
Definition: LibraryViewAlbum.h:33
Definition: ColumnHeader.h:40
ArtistList.
Definition: Artist.h:64
Definition: LibraryItemModelAlbums.h:38
Definition: LibraryItemModelArtists.h:38
Definition: LibraryItemModelTracks.h:35
The ComboBoxDelegate class Set this delegate to ComboBoxes if they should look nice.
Definition: ComboBoxDelegate.h:33