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/LibraryItemDelegateArtists.h"
39 #include "Delegates/LibraryItemDelegateTracks.h"
40 
41 #include "Helper/Settings/SayonaraClass.h"
42 #include "Helper/Filter.h"
43 
44 #include <QStringList>
45 #include <QPoint>
46 #include <QList>
47 #include <QMap>
48 #include <QIcon>
49 #include <QComboBox>
50 #include <QPushButton>
51 
52 class ColumnHeader;
53 
54 class GUI_InfoDialog;
55 class AbstractLibrary;
56 
58  public SayonaraWidget
59 {
60  Q_OBJECT
61 
62 public:
63  explicit GUI_AbstractLibrary(AbstractLibrary* library,
64  QWidget *parent=nullptr);
65 
66  virtual ~GUI_AbstractLibrary();
67 
68  void set_lib_chooser(const QMap<QString, QIcon>&);
69  void set_index(int idx);
70 
71 
72 protected:
73  AbstractLibrary* _library = nullptr;
74  GUI_InfoDialog* _info_dialog = nullptr;
75 
76  Filter _cur_searchfilter;
77 
78  BoolList _shown_cols_albums;
79  BoolList _shown_cols_artist;
80  BoolList _shown_cols_tracks;
81 
82 
83  LibraryItemModelTracks* _track_model = nullptr;
84  LibraryItemModelAlbums* _album_model = nullptr;
85  LibraryItemModelArtists* _artist_model = nullptr;
86 
87  LibraryItemDelegateTracks* _track_delegate = nullptr;
88  LibraryItemDelegateAlbums* _album_delegate = nullptr;
89  LibraryItemDelegateArtists* _artist_delegate = nullptr;
90 
91  virtual void init_headers();
92  virtual void init_shortcuts();
93  virtual void language_changed() override;
94  virtual Library::TrackDeletionMode show_delete_dialog(int n_tracks)=0;
95 
96 
97 
98 private:
99  QComboBox* _combo_libchooser = nullptr;
100  LibraryView* _lv_artist = nullptr;
101  LibraryViewAlbum* _lv_album = nullptr;
102  LibraryView* _lv_tracks = nullptr;
103 
104  QComboBox* _combo_search = nullptr;
105  QPushButton* _btn_clear = nullptr;
106  QLineEdit* _le_search = nullptr;
107  QPushButton* _btn_refresh = nullptr;
108 
109 
110  void init_finished();
111 
112 
113 
114 protected slots:
115  virtual void _sl_live_search_changed();
116 
117 protected slots:
118 
119  virtual void refresh();
120 
121  virtual void lib_fill_tracks(const MetaDataList&);
122  virtual void lib_fill_albums(const AlbumList&);
123  virtual void lib_fill_artists(const ArtistList&);
124  virtual void track_info_available(const MetaDataList& v_md);
125 
126  virtual void artist_sel_changed(const SP::Set<int>&);
127  virtual void album_sel_changed(const SP::Set<int>&);
128  virtual void track_sel_changed(const SP::Set<int>&);
129 
130  virtual void artist_middle_clicked(const QPoint& p);
131  virtual void album_middle_clicked(const QPoint& p);
132  virtual void tracks_middle_clicked(const QPoint& p);
133 
134  virtual void artist_dbl_clicked(const QModelIndex &);
135  virtual void album_dbl_clicked(const QModelIndex &);
136  virtual void track_dbl_clicked(const QModelIndex &);
137 
138  virtual void columns_title_changed(const BoolList&);
139  virtual void columns_album_changed(const BoolList&);
140  virtual void columns_artist_changed(const BoolList&);
141 
142  virtual void sortorder_title_changed(SortOrder);
143  virtual void sortorder_album_changed(SortOrder);
144  virtual void sortorder_artist_changed(SortOrder);
145 
146  virtual void text_line_edited(const QString&);
147  virtual void clear_button_pressed();
148  virtual void combo_search_changed(int idx);
149  virtual void return_pressed();
150 
151  virtual void info_artist();
152  virtual void info_album();
153  virtual void info_tracks();
154 
155  virtual void edit_artist();
156  virtual void edit_album();
157  virtual void edit_tracks();
158 
159  virtual void delete_artist();
160  virtual void delete_album();
161  virtual void delete_tracks();
162 
163  virtual void refresh_artist();
164  virtual void refresh_album();
165  virtual void refresh_tracks();
166 
167 
168  virtual void album_rating_changed(int);
169  virtual void title_rating_changed(int);
170 
171  virtual void append();
172  virtual void append_tracks();
173  virtual void play_next();
174  virtual void play_next_tracks();
175 
176  virtual void show_delete_answer(QString);
177 
178 
179 public slots:
180  virtual void id3_tags_changed();
181 
182 protected:
183  template<typename T>
184  void setup_parent(T* subclass){
185 
186  subclass->setupUi(subclass);
187 
188  _combo_libchooser = subclass->combo_lib_chooser;
189  _lv_artist = subclass->lv_artist;
190  _lv_album = subclass->lv_album;
191  _lv_tracks = subclass->tb_title;
192  _btn_clear = subclass->btn_clear;
193  _le_search = subclass->le_search;
194  _combo_search = subclass->combo_searchfilter;
195 
196 
197  _combo_search->setItemDelegate(new ComboBoxDelegate(this));
198  _combo_search->setIconSize(QSize(16, 16));
199  _combo_search->view()->setIconSize(QSize(16, 16));
200 
201  init_shortcuts();
202  init_finished();
203 
204  }
205 };
206 
207 #endif // GUI_ABSTRACTLIBRARY_H
Definition: LibraryItemDelegateAlbums.h:38
Definition: LibraryItemDelegateTracks.h:35
Definition: GUI_InfoDialog.h:41
Definition: Filter.h:31
Definition: AbstractLibrary.h:50
Definition: MetaDataList.h:46
Widget with Settings connection. Also contains triggers for language_changed() and skin_changed() wi...
Definition: SayonaraWidget.h:41
The AlbumList class.
Definition: Album.h:73
Definition: GUI_AbstractLibrary.h:57
Definition: LibraryView.h:59
Definition: LibraryViewAlbum.h:32
Definition: ColumnHeader.h:40
ArtistList.
Definition: Artist.h:64
Definition: LibraryItemModelAlbums.h:38
Definition: LibraryItemModelArtists.h:36
Definition: LibraryItemModelTracks.h:35
Definition: LibraryItemDelegateArtists.h:41
The ComboBoxDelegate class Set this delegate to ComboBoxes if they should look nice.
Definition: ComboBoxDelegate.h:33