mainwindowa.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #pragma once
  2. #include <QActionGroup>
  3. #include <QElapsedTimer>
  4. #include <QFileDialog>
  5. #include <QMainWindow>
  6. #include <QMessageBox>
  7. #include <QMimeData>
  8. #include <QMouseEvent>
  9. #include <QMutex>
  10. #include <QSettings>
  11. #include <QSizePolicy>
  12. #include <QThread>
  13. #include <QTimer>
  14. #include "AVPlayer2/playercontroller.h"
  15. #include "app_settings.h"
  16. #include "audio_effect_gl.h"
  17. #include "network_url_dlg.h"
  18. #include "play_control_window.h"
  19. #include "playlist_window.h"
  20. // #include "read_thread.h"
  21. // #include "start_play_thread.h"
  22. // #include "stopplay_waiting_thread.h"
  23. // #include "subtitle_decode_thread.h"
  24. // #include "video_decode_thread.h"
  25. // #include "audio_decode_thread.h"
  26. // #include "audio_play_thread.h"
  27. // #include "video_play_thread.h"
  28. // #include "video_state.h"
  29. QT_BEGIN_NAMESPACE
  30. namespace Ui {
  31. class MainWindowA;
  32. }
  33. QT_END_NAMESPACE
  34. class OpenGLVideoWidget;
  35. #define MaxRecentFiles 20 // maximum recent play files
  36. #define MaxSkinStlyes 20 // maximum sytyles
  37. #define MaxPlaylist 5 // maximum playlist numbers
  38. class MainWindowA : public QMainWindow
  39. {
  40. Q_OBJECT
  41. public:
  42. explicit MainWindowA(QWidget* parent = Q_NULLPTR);
  43. ~MainWindowA();
  44. public:
  45. float volume_settings(bool set = true, float vol = 0);
  46. void play_mute(bool mute);
  47. void play_seek();
  48. void play_start_seek();
  49. void set_volume(int volume);
  50. void set_play_speed();
  51. void show_msg_dlg(const QString& message,
  52. const QString& windowTitle = "Warning",
  53. const QString& styleSheet = "");
  54. QString get_playingfile() const;
  55. void show_fullscreen(bool bFullscreen = true);
  56. PlayerController* m_playerController;
  57. public slots:
  58. void frameReady(AVFrame*);
  59. void subtitle_ready(const QString&);
  60. void audio_data(const AudioData& data);
  61. void open_recentFile();
  62. void clear_recentfiles();
  63. void update_play_time();
  64. void play_failed(const QString& file);
  65. void playlist_file_saved(const QString& file);
  66. signals:
  67. // 删除所有与底层线程相关的信号
  68. private:
  69. void keyPressEvent(QKeyEvent* event) override;
  70. void resizeEvent(QResizeEvent* event) override;
  71. void moveEvent(QMoveEvent* event) override;
  72. bool eventFilter(QObject* obj, QEvent* event) override;
  73. void dropEvent(QDropEvent* event) override;
  74. void dragEnterEvent(QDragEnterEvent* event) override;
  75. private slots:
  76. void on_actionOpen_triggered();
  77. void on_actionQuit_triggered();
  78. void on_actionHelp_triggered();
  79. void on_actionAbout_triggered();
  80. void on_actionStop_triggered();
  81. void on_actionFullscreen_triggered();
  82. void on_actionHide_Play_Ctronl_triggered();
  83. void on_actionAspect_Ratio_triggered();
  84. void on_actionLoop_Play_triggered();
  85. void on_actionMedia_Info_triggered();
  86. void on_actionKeyboard_Usage_triggered();
  87. void on_actionPlayList_triggered();
  88. void on_actionOpenNetworkUrl_triggered();
  89. void on_actionOriginalSize_triggered();
  90. void onCvActionToggled();
  91. void onShowMessage(const QString& message,
  92. const QString& windowTitle,
  93. const QString& styleSheet);
  94. void onRequestFullscreen(bool bFullscreen);
  95. void onRequestHideStatusBar(bool bHide);
  96. private:
  97. void print_decodeContext(const AVCodecContext* pVideo, bool bVideo = true) const;
  98. void about_media_info();
  99. void center_window(QRect screen_rec);
  100. bool label_fullscreen();
  101. void hide_statusbar(bool bHide = true);
  102. void hide_menubar(bool bHide = true);
  103. void check_hide_menubar(const QPoint& pt);
  104. void check_hide_play_control();
  105. void auto_hide_play_control(bool bHide = true);
  106. void displayStatusMessage(const QString& message);
  107. void hide_play_control(bool bHide = true);
  108. void set_paly_control_wnd(bool set = true);
  109. void update_paly_control_volume();
  110. void update_paly_control_status();
  111. void update_paly_control_muted();
  112. void print_size() const;
  113. void print_screen() const;
  114. void create_style_menu();
  115. inline QScreen* screen() const;
  116. QRect screen_rect() const;
  117. qreal screen_scale() const;
  118. QSize display_video_size(AVCodecContext* pCtxVideo) const;
  119. inline OpenGLVideoWidget* get_video_widget() const { return m_video_widget.get(); }
  120. inline PlayControlWnd* get_play_control() const { return m_play_control_wnd.get(); }
  121. inline QObject* get_object(const QString& name) const { return findChild<QObject*>(name); }
  122. void create_play_control();
  123. void update_play_control();
  124. void set_volume_updown(bool bUp = true, float unit = 0.05);
  125. void create_recentfiles_menu();
  126. void set_current_file(const QString& fileName);
  127. void remove_recentfiles(const QString& fileName);
  128. void update_recentfile_actions();
  129. QString stripped_name(const QString& fullFileName) const;
  130. void save_settings();
  131. void read_settings();
  132. QString get_selected_style() const;
  133. void set_style_action(const QString& style);
  134. void clear_subtitle_str();
  135. void set_subtitle(const QString& str);
  136. void create_cv_action_group();
  137. void play_speed_adjust(bool up = true);
  138. void create_video_label();
  139. void update_video_label();
  140. void create_audio_effect();
  141. void show_audio_effect(bool bShow = true);
  142. void play_control_key(Qt::Key key);
  143. void video_seek_inc(double incr);
  144. void video_seek(double pos = 0, double incr = 0);
  145. void update_menus();
  146. void enable_menus(bool enable = true);
  147. void enable_v_menus(bool enable = true);
  148. void enable_a_menus(bool enable = true);
  149. bool get_avisual_format(BarHelper::VisualFormat& fmt) const;
  150. void popup_audio_effect();
  151. void set_audio_effect_format(const BarHelper::VisualFormat& fmt);
  152. void create_playlist_wnd();
  153. void add_to_playlist(const QString& file);
  154. void show_playlist(bool show = true);
  155. void playlist_hiden();
  156. void hide_cursor(bool bHide = true);
  157. bool cursor_in_window(QWidget* pWnd);
  158. void create_savedPlaylists_menu();
  159. void remove_playlist_file(const QString& fileName);
  160. void update_savedPlaylists_actions();
  161. bool read_playlist(const QString& playlist_file, QStringList& files) const;
  162. public slots:
  163. void clear_savedPlaylists();
  164. void open_playlist();
  165. private:
  166. // 新增:菜单栏、菜单、Action、状态栏、中央控件等成员变量
  167. QMenuBar* m_menuBar = nullptr;
  168. QMenu* m_menuFile = nullptr;
  169. QMenu* m_menuRecentFiles = nullptr;
  170. QMenu* m_menuSavedPlaylist = nullptr;
  171. QMenu* m_menuCV = nullptr;
  172. QMenu* m_menuStyle = nullptr;
  173. QMenu* m_menuAudioVisualize = nullptr;
  174. QMenu* m_menuHelp = nullptr;
  175. QAction* m_actionOpen = nullptr;
  176. QAction* m_actionQuit = nullptr;
  177. QAction* m_actionHelp = nullptr;
  178. QAction* m_actionAbout = nullptr;
  179. QAction* m_actionAbout_QT = nullptr;
  180. QAction* m_actionStop = nullptr;
  181. QAction* m_actionFullscreen = nullptr;
  182. QAction* m_actionHide_Play_Ctronl = nullptr;
  183. QAction* m_actionAspect_Ratio = nullptr;
  184. QAction* m_actionLoop_Play = nullptr;
  185. QAction* m_actionMedia_Info = nullptr;
  186. QAction* m_actionKeyboard_Usage = nullptr;
  187. QAction* m_actionPlayList = nullptr;
  188. QAction* m_actionOpenNetworkUrl = nullptr;
  189. QAction* m_actionOriginalSize = nullptr;
  190. QAction* m_actionHardware_decode = nullptr;
  191. QAction* m_actionSampling = nullptr;
  192. QAction* m_actionFrequency = nullptr;
  193. QAction* m_actionLine = nullptr;
  194. QAction* m_actionBar = nullptr;
  195. QAction* m_actionPie = nullptr;
  196. QAction* m_actionRemoveCV = nullptr;
  197. QAction* m_actionRotate = nullptr;
  198. QAction* m_actionRepeat = nullptr;
  199. QAction* m_actionEqualizeHist = nullptr;
  200. QAction* m_actionThreshold = nullptr;
  201. QAction* m_actionThreshold_Adaptive = nullptr;
  202. QAction* m_actionReverse = nullptr;
  203. QAction* m_actionColorReduce = nullptr;
  204. QAction* m_actionGamma = nullptr;
  205. QAction* m_actionContrastBright = nullptr;
  206. QAction* m_actionCanny = nullptr;
  207. QAction* m_actionBlur = nullptr;
  208. QAction* m_actionSobel = nullptr;
  209. QAction* m_actionLaplacian = nullptr;
  210. QAction* m_actionScharr = nullptr;
  211. QAction* m_actionPrewitt = nullptr;
  212. QAction* m_actionTest_CV = nullptr;
  213. QAction* m_actionGrayscale = nullptr;
  214. QAction* m_actionMirro = nullptr;
  215. QAction* m_actionTransform = nullptr;
  216. QStatusBar* m_statusBar = nullptr;
  217. QWidget* m_centralWidget = nullptr;
  218. QString m_videoFile;
  219. QTimer m_timer; // mouse moving checking timer
  220. AppSettings m_settings;
  221. QString m_subtitle;
  222. std::unique_ptr<OpenGLVideoWidget> m_video_widget;
  223. std::unique_ptr<PlayControlWnd> m_play_control_wnd;
  224. std::unique_ptr<AudioEffectGL> m_audio_effect_wnd;
  225. std::unique_ptr<PlayListWnd> m_playListWnd;
  226. std::unique_ptr<QAction> m_recentFileActs[MaxRecentFiles];
  227. std::unique_ptr<QAction> m_recentClear;
  228. QActionGroup* m_CvActsGroup; // cv menus group
  229. QActionGroup* m_AVisualTypeActsGroup;
  230. QActionGroup* m_AVisualGrapicTypeActsGroup;
  231. std::unique_ptr<QAction> m_savedPlaylists[MaxPlaylist];
  232. std::unique_ptr<QAction> m_PlaylistsClear;
  233. };