/* For general Scribus (>=1.3.2) copyright and licensing information please refer to the COPYING file provided with the program. Following this notice may exist a copyright and/or license notice that predates the release of Scribus 1.3.2 for which a new license (GPL+exception) is in place. */ #ifndef FILEWATCHER_H #define FILEWATCHER_H #include #include #include #include #include #include #include "scribusapi.h" class SCRIBUS_API FileWatcher : public QObject { Q_OBJECT public: FileWatcher(QObject* parent); ~FileWatcher(); bool isActive(); // Get if file check loop is running void isFileCheckRunning(); // Set the timer length in milliseconds void setTimeOut(const int newTimeOut, const bool restartTimer=false); // Get the timer length int timeOut() const; QList files(); public slots: //Add a file to the watch list for monitoring void addFile(QString fileName); //Remove a file from the watch list void removeFile(QString fileName); //Add a directory to the watch list for monitoring void addDir(QString fileName); //Remove a directory from the watch list void removeDir(QString fileName); //Start the watcher's timer for file monitoring void start(); //Stop the watcher's timer void stop(); //Force a scan of the watched item list void forceScan(); private: struct fileMod { QFileInfo info; QDateTime timeInfo; int pendingCount; bool pending; int refCount; }; typedef enum { AddRemoveBlocked = 1, FileCheckRunning = 2, StopRequested = 4, TimerStopped = 8, Dying = 16, FileCheckMustStop = 20 //StopRequested + Dying } StateFlags; QMap watchedFiles; QTimer* watchTimer; int m_stateFlags; int m_timeOut; // milliseconds private slots: void checkFiles(); signals: void fileChanged(QString); void fileDeleted(QString); void dirChanged(QString); void dirDeleted(QString); void statePending(QString); }; #endif