Sayonara Player
GUI_Player.h
1 /* GUI_Simpleplayer.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 #ifndef GUI_SIMPLEPLAYER_H
23 #define GUI_SIMPLEPLAYER_H
24 
25 #include "GUI/Player/ui_GUI_Player.h"
26 
27 #include "Components/PlayManager/PlayManager.h"
28 
29 #include "GUI/Player/GUI_TrayIcon.h"
30 #include "GUI/Helper/Message/GlobalMessageReceiverInterface.h"
31 
32 #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
33 #include "GUI/Helper/Shortcuts/ShortcutWidget.h"
34 
35 
36 #include <QMessageBox>
37 #include <QMainWindow>
38 #include <QShowEvent>
39 #include <QCloseEvent>
40 #include <QTranslator>
41 #include <QKeySequence>
42 #include <QFileSystemWatcher>
43 
44 #include <QAction>
45 
46 class CoverLocation;
47 class LocalLibrary;
48 class GUI_Playlist;
49 class AsyncWebAccess;
54 class IconLoader;
55 
56 #ifdef WITH_MTP
57  class GUI_MTP;
58 #endif
59 
60 class GUI_Player :
61  public SayonaraMainWindow,
62  public ShortcutWidget,
64  private Ui::Sayonara
65 {
66 
67  Q_OBJECT
68 
69 signals:
70  void sig_player_closed();
71 
72 
73 public:
74 
75  GUI_Player(QTranslator* translator, QWidget *parent=nullptr);
76  ~GUI_Player();
77 
78  // set the playlist ui
79 
80  void set_libraries(LibraryPluginHandler* plugin_loader);
81 
82  void set_player_plugin_handler(PlayerPluginHandler* pph);
83  void register_preference_dialog(PreferenceDialogInterface* dialog);
84 
85  void ui_loaded();
86  QString get_shortcut_text(const QString &shortcut_identifier) const override;
87 
88 
89 public slots:
90 
91  void set_cur_pos_ms(quint64 pos_ms);
92  void id3_tags_changed(const MetaDataList& v_md_old, const MetaDataList& v_md_new);
93 
94  void md_changed(const MetaData&);
95  void dur_changed(const MetaData&);
96  void br_changed(const MetaData&);
97 
98  void really_close();
99  void reload_skin();
100 
101  void tray_icon_activated(QSystemTrayIcon::ActivationReason reason);
102 
103  /* Plugins */
104  void show_plugin(PlayerPluginInterface* plugin);
105  void hide_all_plugins();
106 
107 
108 private:
109 
110  QWidget* _cur_library=nullptr;
111  LocalLibrary* _local_library=nullptr;
112 
113  PlayerPluginHandler* _pph=nullptr;
114  LibraryPluginHandler* _lph=nullptr;
115 
116 #ifdef WITH_MTP
117  GUI_MTP* _mtp=nullptr;
118 #endif
119 
120  GUI_TrayIcon* _tray_icon=nullptr;
121 
122  QTranslator* _translator=nullptr;
123  QStringList _translators;
124 
125  PlayManager* _play_manager=nullptr;
126  QMessageBox* _about_box=nullptr;
127 
128  MetaData _md;
129  IconLoader* _icon_loader=nullptr;
130 
131 
132 private:
133  void init_gui();
134 
135  void setup_tray_actions ();
136  void setup_volume_button(int percent);
137  void setup_connections();
138 
139  void set_album_label();
140  void set_artist_label();
141  void set_title_label();
142  void set_info_labels();
143 
144  void set_radio_mode(RadioMode model);
145 
146  bool check_library_path();
147 
148  void closeEvent(QCloseEvent* e) override;
149  void keyPressEvent(QKeyEvent* e) override;
150  void resizeEvent(QResizeEvent* e) override;
151  void moveEvent(QMoveEvent* e) override;
152 
153  void language_changed() override;
154  void skin_changed() override;
155 
156  void set_total_time_label(qint64 length_ms);
157  void set_cur_pos_label(int val);
158  void set_cover_location();
159 
160  template<typename T>
161  void init_action(QAction* action, T setting_key){
162  bool b = _settings->get(setting_key);
163  action->setChecked(b);
164  }
165 
166 
167  // Methods for other mudules to display info/warning/error
168  GlobalMessage::Answer error_received(const QString &error, const QString &sender_name=QString()) override;
169  GlobalMessage::Answer warning_received(const QString &error, const QString &sender_name=QString()) override;
170  GlobalMessage::Answer info_received(const QString &error, const QString &sender_name=QString()) override;
171  GlobalMessage::Answer question_received(const QString &info, const QString &sender_name=QString(), GlobalMessage::QuestionType type=GlobalMessage::QuestionType::YesNo) override;
172 
173 
174 
175 
176 private slots:
177 
178  void play_clicked();
179  void stop_clicked();
180  void prev_clicked();
181  void next_clicked();
182  void rec_clicked(bool);
183  void buffering(int progress);
184  void set_progress_tooltip(int val);
185 
186  void played();
187  void paused();
188  void stopped();
189  void playstate_changed(PlayManager::PlayState);
190 
191  void track_changed(const MetaData& md);
192 
193  void seek(int);
194  void jump_forward();
195  void jump_backward();
196  void jump_forward_ms();
197  void jump_backward_ms();
198 
199  void mute_button_clicked();
200  void volume_slider_moved(int val);
201  void volume_changed(int val);
202  void mute_changed(bool mute);
203  void change_volume_by_tick(int val);
204  void increase_volume();
205  void decrease_volume();
206 
207  /* File */
208  void open_files_clicked();
209  void open_dir_clicked();
210 
211 
212  /* View */
213  void show_library(bool);
214  void show_notification_toggled(bool);
215  void show_fullscreen_toggled(bool);
216  void _sl_fullscreen_toggled();
217  void skin_toggled(bool);
218 
219  void set_library_path_clicked();
220 
221  void min2tray_toggled(bool);
222  void only_one_instance_toggled(bool);
223  void live_search_toggled(bool);
224  void notify_new_version_toggled(bool);
225 
226  void main_splitter_moved(int pos, int idx);
227 
228  void library_idx_changed(int idx);
229  void check_library_menu_action();
230 
231 
232  void about();
233  void help();
234 
235  void set_standard_cover();
236  void cover_changed(const QImage& cover);
237 
238  void awa_version_finished(bool success);
239  void awa_translators_finished(bool success);
240 
241  void _sl_sr_active_changed();
242 
243 
244 };
245 
246 
247 #endif // GUI_SIMPLEPLAYER_H
Abstract Interface you should use when creating a preference dialog.
Definition: PreferenceDialogInterface.h:40
RadioMode
The RadioMode enum.
Definition: MetaData.h:41
Definition: GUI_TrayIcon.h:38
Definition: GUI_Player.h:60
Definition: ui_GUI_Player.h:701
Definition: MetaData.h:49
PlayState
Current Playing state.
Definition: PlayManager.h:89
Definition: LocalLibrary.h:31
Definition: GUI_MTP.h:38
Definition: MetaDataList.h:44
Definition: GUI_Playlist.h:42
The IconLoader class.
Definition: IconLoader.h:39
Global handler for current playback state (Singleton)
Definition: PlayManager.h:77
Library Plugin Manager.
Definition: LibraryPluginHandler.h:38
The CoverLocation class.
Definition: CoverLocation.h:38
The GlobalMessageReceiverInterface class implement this class in order to have the possibility to sho...
Definition: GlobalMessageReceiverInterface.h:35
Interface for PlayerPlugin classes. get_name() and language_changed() must be overwritten.
Definition: PlayerPlugin.h:49
Asynchgronous web access class.
Definition: AsyncWebAccess.h:37
Definition: PlayerPluginHandler.h:34
The SayonaraMainWindow class.
Definition: SayonaraWidget.h:66
Interface that should be implemented when using configurable shortcuts.
Definition: ShortcutWidget.h:33