1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#ifndef CLFILESYSTEMWATCHER_H
#define CLFILESYSTEMWATCHER_H
#include "codelite_exports.h"
#include "clFileSystemEvent.h"
#include <map>
#include <wx/timer.h>
#include <wx/filename.h>
#ifdef __WXMSW__
#define CL_FSW_USE_TIMER 1
#else
#define CL_FSW_USE_TIMER 1
#endif
#if !CL_FSW_USE_TIMER
#include <wx/fswatcher.h>
#endif
class WXDLLIMPEXP_CL clFileSystemWatcher : public wxEvtHandler
{
public:
struct File {
wxFileName filename;
time_t lastModified;
size_t file_size;
typedef std::map<wxString, File> Map_t;
};
wxEvtHandler* m_owner;
#if CL_FSW_USE_TIMER
clFileSystemWatcher::File::Map_t m_files;
wxTimer* m_timer;
#else
wxFileSystemWatcher m_watcher;
wxFileName m_watchedFile;
#endif
public:
typedef wxSharedPtr<clFileSystemWatcher> Ptr_t;
protected:
#if CL_FSW_USE_TIMER
void OnTimer(wxTimerEvent& event);
#else
void OnFileModified(wxFileSystemWatcherEvent& event);
#endif
public:
clFileSystemWatcher();
virtual ~clFileSystemWatcher();
void SetOwner(wxEvtHandler* owner) { this->m_owner = owner; }
wxEvtHandler* GetOwner() { return m_owner; }
/**
* @brief add a file to watch
*/
void SetFile(const wxFileName& filename);
/**
* @brief remove file from the watch list
*/
void RemoveFile(const wxFileName& filename);
/**
* @brief start to watching list of files.
* This object fires the following events (clFileSystemEvent):
* wxEVT_FILE_MODIFIED, wxEVT_FILE_DELETED
*/
void Start();
/**
* @brief stop watching the list of files
*/
void Stop();
/**
* @brief clear the list of files to watch and stop the watcher
*/
void Clear();
/**
* @brief is the watcher running?
*/
bool IsRunning() const;
};
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CL, wxEVT_FILE_MODIFIED, clFileSystemEvent);
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CL, wxEVT_FILE_NOT_FOUND, clFileSystemEvent);
#endif // CLFILESYSTEMWATCHER_H
|