#pragma once #include #include #include #include #include #include #include "AudioEngine.h" #include "PlayerControls.h" #include "CommonWidgets.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget* parent = nullptr); ~MainWindow(); void loadPath(const QString& path, bool recursive); protected: void closeEvent(QCloseEvent* event) override; private slots: void onOpenFile(); void onOpenFolder(); void onPermissionsResult(bool granted); void updateLoop(); void onTrackFinished(); void onTrackLoaded(bool success); void onTrackDoubleClicked(QListWidgetItem* item); void play(); void pause(); void nextTrack(); void prevTrack(); void seek(float pos); void onDspChanged(int fft, int hop); void onBinsChanged(int n); void onToggleFullScreen(); void saveSettings(); private: void initUi(); void loadIndex(int index); void loadSettings(); QStackedWidget* m_stack; WelcomeWidget* m_welcome; PlayerPage* m_playerPage; QDockWidget* m_dock; QTabWidget* m_mobileTabs; QListWidget* m_playlist; AudioEngine* m_engine; QTimer* m_timer; struct TrackInfo { QString path; Utils::Metadata meta; }; QVector m_tracks; int m_currentIndex = -1; enum class PendingAction { None, File, Folder }; PendingAction m_pendingAction = PendingAction::None; QString m_settingsDir; };