playlist_window.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #pragma once
  2. #include <QDebug>
  3. #include <QDialog>
  4. #include <QDropEvent>
  5. #include <QFileInfo>
  6. #include <QLabel>
  7. #include <QMenu>
  8. #include <QMimeData>
  9. #include <QMimeDatabase>
  10. #include <memory>
  11. #include <set>
  12. #include "ui_playlist_window.h"
  13. QT_BEGIN_NAMESPACE
  14. namespace Ui
  15. {
  16. class PlayList;
  17. }
  18. QT_END_NAMESPACE
  19. #define PLAYLIST_SEPERATE_CHAR "\n"
  20. class PlayListWnd : public QWidget
  21. {
  22. Q_OBJECT
  23. public:
  24. explicit PlayListWnd(QWidget* parent = Q_NULLPTR);
  25. ~PlayListWnd(){};
  26. public:
  27. typedef struct
  28. {
  29. QString fileName;
  30. QString file;
  31. QString duration;
  32. } PlayListLine;
  33. public:
  34. void add_file(const QString& file);
  35. void add_files(const QStringList& files);
  36. void get_files(QStringList& files) const;
  37. void update_files(const QStringList& files);
  38. void set_cur_palyingfile();
  39. signals:
  40. void play_file(const QString& file);
  41. void save_playlist_signal(const QStringList& files);
  42. void hiden();
  43. void playlist_file_saved(const QString& file);
  44. public slots:
  45. void cellSelected(int row, int col);
  46. void deleteBtn_clicked();
  47. void clearBtn_clicked();
  48. bool saveBtn_clicked();
  49. void displayMenu(const QPoint& pos);
  50. protected:
  51. void closeEvent(QCloseEvent* event) override;
  52. void dropEvent(QDropEvent* event) override;
  53. void dragEnterEvent(QDragEnterEvent* event) override;
  54. void keyPressEvent(QKeyEvent* event) override;
  55. private:
  56. inline QTableWidget* get_table() const { return ui->tableWidget; }
  57. static QString get_file_name(const QString& path);
  58. inline bool already_in(const QString& file) const;
  59. QString get_cursel_file() const;
  60. QString get_row_file(int row) const;
  61. void init_list();
  62. void add_table_line(const PlayListLine& data);
  63. void update_table_list();
  64. void clear_table_list();
  65. bool add_data_file(const QString& file);
  66. void del_data_file(const QString& file);
  67. inline QString get_data_file(int id) const;
  68. void clear_data_files();
  69. void set_sel_file(const QString& file);
  70. QString get_file_duration(const QString& file) const;
  71. QString get_file_duration(int64_t duration) const;
  72. void create_temp_menu();
  73. static QString mimeType(const QString& filePath);
  74. static bool is_local(const QString& file);
  75. bool is_media(const QString& file) const;
  76. private:
  77. std::unique_ptr<Ui::PlayList> ui;
  78. std::unique_ptr<QMenu> m_tmpMenu;
  79. std::map<QString, PlayListLine> m_dataItems;
  80. };