#pragma once #include #include #include #include #include #include #include class FileSelector : public QObject { Q_OBJECT; Q_PROPERTY(QString directory READ directory WRITE setDirectory NOTIFY directoryChanged REQUIRED); Q_PROPERTY(unsigned int epoch READ epoch WRITE setEpoch NOTIFY epochChanged REQUIRED); Q_PROPERTY(QString seed READ seed WRITE setSeed NOTIFY seedChanged); Q_PROPERTY(QString selected READ selected NOTIFY selectedChanged); QML_ELEMENT; public: explicit FileSelector(QObject* parent = nullptr); QString directory() const; void setDirectory(QString directory); unsigned int epoch() const; void setEpoch(unsigned int epoch); QString seed() const; void setSeed(QString seed); QString selected() const; signals: void directoryChanged(); void epochChanged(); void seedChanged(); void selectedChanged(); private slots: void onTimeout(); private: std::optional mDirectory; std::optional mEpoch; std::set mFiles; QString mSeed; QTimer timer; void update(); };