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 GUI_Playlist;
48 class AsyncWebAccess;
53 class IconLoader;
54 
55 #ifdef WITH_MTP
56  class GUI_MTP;
57 #endif
58 
59 class GUI_Player :
60  public SayonaraMainWindow,
61  public ShortcutWidget,
63  private Ui::Sayonara
64 {
65 
66  Q_OBJECT
67 
68 signals:
69  void sig_player_closed();
70 
71 
72 public:
73 
74  GUI_Player(QTranslator* translator, QWidget *parent=nullptr);
75  ~GUI_Player();
76 
77  void set_libraries(LibraryPluginHandler* plugin_loader);
78 
79  void set_player_plugin_handler(PlayerPluginHandler* pph);
80  void register_preference_dialog(PreferenceDialogInterface* dialog);
81 
82  void ui_loaded();
83  QString get_shortcut_text(const QString &shortcut_identifier) const override;
84 
85 
86 public slots:
87 
88  void set_cur_pos_ms(quint64 pos_ms);
89  void set_file_info_label();
90  void id3_tags_changed(const MetaDataList& v_md_old, const MetaDataList& v_md_new);
91 
92  void md_changed(const MetaData&);
93  void dur_changed(const MetaData&);
94  void br_changed(const MetaData&);
95 
96  void really_close();
97  void reload_skin();
98 
99  void tray_icon_activated(QSystemTrayIcon::ActivationReason reason);
100 
101  /* Plugins */
102  void show_plugin(PlayerPluginInterface* plugin);
103  void hide_all_plugins();
104 
105 
106 private:
107 
108  QWidget* _cur_library=nullptr;
109 
110  PlayerPluginHandler* _pph=nullptr;
111  LibraryPluginHandler* _lph=nullptr;
112 
113 #ifdef WITH_MTP
114  GUI_MTP* _mtp=nullptr;
115 #endif
116 
117  GUI_TrayIcon* _tray_icon=nullptr;
118 
119  QTranslator* _translator=nullptr;
120  QStringList _translators;
121 
122  PlayManager* _play_manager=nullptr;
123  QMessageBox* _about_box=nullptr;
124 
125  MetaData _md;
126  IconLoader* _icon_loader=nullptr;
127 
128 
129 private:
130  void init_gui();
131 
132  void setup_tray_actions ();
133  void setup_volume_button(int percent);
134  void setup_connections();
135 
136  void set_album_label();
137  void set_artist_label();
138  void set_title_label();
139  void set_info_labels();
140 
141  void set_radio_mode(RadioMode model);
142 
143  void closeEvent(QCloseEvent* e) override;
144  void keyPressEvent(QKeyEvent* e) override;
145  void resizeEvent(QResizeEvent* e) override;
146  void moveEvent(QMoveEvent* e) override;
147 
148  void language_changed() override;
149  void skin_changed() override;
150 
151  void set_total_time_label(qint64 length_ms);
152  void set_cur_pos_label(int val);
153  void set_cover_location();
154 
155  template<typename T>
156  void init_action(QAction* action, T setting_key){
157  bool b = _settings->get(setting_key);
158  action->setChecked(b);
159  }
160 
161  // Methods for other mudules to display info/warning/error
162  GlobalMessage::Answer error_received(const QString &error, const QString &sender_name=QString()) override;
163  GlobalMessage::Answer warning_received(const QString &error, const QString &sender_name=QString()) override;
164  GlobalMessage::Answer info_received(const QString &error, const QString &sender_name=QString()) override;
165  GlobalMessage::Answer question_received(const QString &info, const QString &sender_name=QString(), GlobalMessage::QuestionType type=GlobalMessage::QuestionType::YesNo) override;
166 
167 
168 private slots:
169 
170  void play_clicked();
171  void stop_clicked();
172  void prev_clicked();
173  void next_clicked();
174  void rec_clicked(bool);
175  void buffering(int progress);
176  void set_progress_tooltip(int val);
177 
178  void played();
179  void paused();
180  void stopped();
181  void playstate_changed(PlayManager::PlayState);
182 
183  void track_changed(const MetaData& md);
184 
185  void seek(int);
186  void jump_forward();
187  void jump_backward();
188  void jump_forward_ms();
189  void jump_backward_ms();
190 
191  void mute_button_clicked();
192  void volume_slider_moved(int val);
193  void volume_changed(int val);
194  void mute_changed(bool mute);
195  void change_volume_by_tick(int val);
196  void increase_volume();
197  void decrease_volume();
198 
199  /* File */
200  void open_files_clicked();
201  void open_dir_clicked();
202 
203 
204  /* View */
205  void show_library(bool);
206  void show_fullscreen_toggled(bool);
207  void skin_toggled(bool);
208 
209  void main_splitter_moved(int pos, int idx);
210 
211  void library_idx_changed(int idx);
212  void check_library_menu_action();
213 
214 
215  void about();
216  void help();
217 
218  void set_standard_cover();
219  void cover_changed(const QImage& cover);
220 
221  void awa_version_finished(bool success);
222  void awa_translators_finished(bool success);
223 
224  void _sl_sr_active_changed();
225 
226 
227 };
228 
229 
230 #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:59
Definition: ui_GUI_Player.h:665
Definition: MetaData.h:49
PlayState
Current Playing state.
Definition: PlayManager.h:89
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