Sayonara Player
GUI_AbstractLibrary.h
1 /* GUI_AbstractLibrary.h */
2 
3 /* Copyright (C) 2011-2017 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 #ifndef GUI_ABSTRACTLIBRARY_H
22 #define GUI_ABSTRACTLIBRARY_H
23 
24 #include "GUI/Helper/Delegates/ComboBoxDelegate.h"
25 #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
26 
27 #include "Helper/Library/Filter.h"
28 #include "Helper/Library/LibraryNamespaces.h"
29 #include "Helper/typedefs.h"
30 #include "Helper/Library/Sortorder.h"
31 #include "Helper/MetaData/MetaDataFwd.h"
32 #include "Helper/SetFwd.h"
33 
34 #include <QPoint>
35 #include <QComboBox>
36 #include <QAbstractItemView>
37 
38 class QItemDelegate;
39 class QPushButton;
40 class QComboBox;
41 class AbstractLibrary;
42 class LibraryTableView;
43 class LibraryViewAlbum;
48 
50  public SayonaraWidget
51 {
52  Q_OBJECT
53 
54 public:
55  explicit GUI_AbstractLibrary(AbstractLibrary* library,
56  QWidget *parent=nullptr);
57 
58  virtual ~GUI_AbstractLibrary();
59 
60 protected:
61  AbstractLibrary* _library = nullptr;
62 
63  Library::Filter _cur_searchfilter;
64 
65  BoolList _shown_cols_albums;
66  BoolList _shown_cols_artist;
67  BoolList _shown_cols_tracks;
68 
69  LibraryItemModelTracks* _track_model = nullptr;
70  LibraryItemModelAlbums* _album_model = nullptr;
71  LibraryItemModelArtists* _artist_model = nullptr;
72 
73  LibraryRatingDelegate* _track_delegate = nullptr;
74  LibraryRatingDelegate* _album_delegate = nullptr;
75  QItemDelegate* _artist_delegate = nullptr;
76 
77  virtual void init_headers();
78  virtual void init_shortcuts();
79  virtual void language_changed() override;
80  virtual Library::TrackDeletionMode show_delete_dialog(int n_tracks)=0;
81 
82 private:
83  QComboBox* _combo_libchooser = nullptr;
84  LibraryTableView* _lv_artist = nullptr;
85  LibraryViewAlbum* _lv_album = nullptr;
86  LibraryTableView* _lv_tracks = nullptr;
87 
88  QComboBox* _combo_search = nullptr;
89  QPushButton* _btn_clear = nullptr;
90  QLineEdit* _le_search = nullptr;
91  QPushButton* _btn_refresh = nullptr;
92 
93  void init_finished();
94 
95 protected slots:
96  virtual void _sl_live_search_changed();
97 
98 protected slots:
99 
100  virtual void refresh();
101 
102  virtual void lib_fill_tracks(const MetaDataList&);
103  virtual void lib_fill_albums(const AlbumList&);
104  virtual void lib_fill_artists(const ArtistList&);
105  virtual void track_info_available(const MetaDataList& v_md);
106 
107  virtual void artist_sel_changed(const SP::Set<int>&);
108  virtual void album_sel_changed(const SP::Set<int>&);
109  virtual void track_sel_changed(const SP::Set<int>&);
110 
111  virtual void artist_middle_clicked(const QPoint& p);
112  virtual void album_middle_clicked(const QPoint& p);
113  virtual void tracks_middle_clicked(const QPoint& p);
114 
115  virtual void artist_dbl_clicked(const QModelIndex &);
116  virtual void album_dbl_clicked(const QModelIndex &);
117  virtual void track_dbl_clicked(const QModelIndex &);
118 
119  virtual void columns_title_changed(const BoolList&);
120  virtual void columns_album_changed(const BoolList&);
121  virtual void columns_artist_changed(const BoolList&);
122 
123  virtual void sortorder_title_changed(Library::SortOrder);
124  virtual void sortorder_album_changed(Library::SortOrder);
125  virtual void sortorder_artist_changed(Library::SortOrder);
126 
127  virtual void text_line_edited(const QString&);
128  virtual void clear_button_pressed();
129  virtual void combo_search_changed(int idx);
130  virtual void return_pressed();
131 
132  virtual void delete_artist();
133  virtual void delete_album();
134  virtual void delete_tracks();
135 
136  virtual void refresh_artist();
137  virtual void refresh_album();
138  virtual void refresh_tracks();
139 
140  virtual void album_rating_changed(int);
141  virtual void title_rating_changed(int);
142 
143  virtual void append();
144  virtual void append_tracks();
145  virtual void play_next();
146  virtual void play_next_tracks();
147 
148  virtual void show_delete_answer(QString);
149 
150 
151 public slots:
152  virtual void id3_tags_changed();
153 
154 protected:
155  template<typename T, typename UI>
156  void setup_parent(T* subclass, UI** ui){
157  *ui = new UI();
158 
159  UI* ui_ptr = *ui;
160  ui_ptr->setupUi(subclass);
161 
162  _combo_libchooser = ui_ptr->combo_lib_chooser;
163  _lv_artist = ui_ptr->lv_artist;
164  _lv_album = ui_ptr->lv_album;
165  _lv_tracks = ui_ptr->tb_title;
166  _btn_clear = ui_ptr->btn_clear;
167  _le_search = ui_ptr->le_search;
168  _combo_search = ui_ptr->combo_searchfilter;
169 
170  _combo_search->setItemDelegate(new ComboBoxDelegate(this));
171  _combo_search->setIconSize(QSize(16, 16));
172  _combo_search->view()->setIconSize(QSize(16, 16));
173 
174  init_shortcuts();
175  init_finished();
176  }
177 };
178 
179 #endif // GUI_ABSTRACTLIBRARY_H
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:35
Definition: AbstractLibrary.h:44
The Filter class.
Definition: Filter.h:43
Definition: MetaDataList.h:39
Definition: LibraryTableView.h:31
Widget with Settings connection. Also contains triggers for language_changed() and skin_changed() wi...
Definition: SayonaraWidget.h:36
The AlbumList class.
Definition: Album.h:79
Definition: LibraryRatingDelegate.h:27
Definition: GUI_AbstractLibrary.h:49
Definition: LibraryViewAlbum.h:30
ArtistList.
Definition: Artist.h:62
Definition: LibraryItemModelAlbums.h:37
Definition: LibraryItemModelArtists.h:36
Definition: LibraryItemModelTracks.h:36
The ComboBoxDelegate class Set this delegate to ComboBoxes if they should look nice.
Definition: ComboBoxDelegate.h:31
A set structure. Inherited from std::set with some useful methods. For integer and String this set is...
Definition: AbstractPlaylist.h:37