| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/private/fswatcher.h
 
- // Purpose:     File system watcher impl classes
 
- // Author:      Bartosz Bekier
 
- // Created:     2009-05-26
 
- // Copyright:   (c) 2009 Bartosz Bekier <bartosz.bekier@gmail.com>
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- #ifndef WX_PRIVATE_FSWATCHER_H_
 
- #define WX_PRIVATE_FSWATCHER_H_
 
- #include "wx/sharedptr.h"
 
- #ifdef wxHAS_INOTIFY
 
-     class wxFSWatchEntryUnix;
 
-     #define wxFSWatchEntry wxFSWatchEntryUnix
 
-     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr<wxFSWatchEntry>,wxFSWatchEntries);
 
-     #include "wx/unix/private/fswatcher_inotify.h"
 
- #elif defined(wxHAS_KQUEUE)
 
-     class wxFSWatchEntryKq;
 
-     #define wxFSWatchEntry wxFSWatchEntryKq
 
-     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr<wxFSWatchEntry>,wxFSWatchEntries);
 
-     #include "wx/unix/private/fswatcher_kqueue.h"
 
- #elif defined(__WINDOWS__)
 
-     class wxFSWatchEntryMSW;
 
-     #define wxFSWatchEntry wxFSWatchEntryMSW
 
-     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr<wxFSWatchEntry>,wxFSWatchEntries);
 
-     #include "wx/msw/private/fswatcher.h"
 
- #else
 
-     #define wxFSWatchEntry wxFSWatchEntryPolling
 
- #endif
 
- class wxFSWatcherImpl
 
- {
 
- public:
 
-     wxFSWatcherImpl(wxFileSystemWatcherBase* watcher) :
 
-         m_watcher(watcher)
 
-     {
 
-     }
 
-     virtual ~wxFSWatcherImpl()
 
-     {
 
-         (void) RemoveAll();
 
-     }
 
-     virtual bool Init() = 0;
 
-     virtual bool Add(const wxFSWatchInfo& winfo)
 
-     {
 
-         if ( m_watches.find(winfo.GetPath()) != m_watches.end() )
 
-         {
 
-             wxLogTrace(wxTRACE_FSWATCHER,
 
-                        "Path '%s' is already watched", winfo.GetPath());
 
-             // This can happen if a dir is watched, then a parent tree added
 
-             return true;
 
-         }
 
-         // construct watch entry
 
-         wxSharedPtr<wxFSWatchEntry> watch(new wxFSWatchEntry(winfo));
 
-         if (!DoAdd(watch))
 
-             return false;
 
-         // add watch to our map (always succeedes, checked above)
 
-         wxFSWatchEntries::value_type val(watch->GetPath(), watch);
 
-         return m_watches.insert(val).second;
 
-     }
 
-     virtual bool Remove(const wxFSWatchInfo& winfo)
 
-     {
 
-         wxFSWatchEntries::iterator it = m_watches.find(winfo.GetPath());
 
-         if ( it == m_watches.end() )
 
-         {
 
-             wxLogTrace(wxTRACE_FSWATCHER,
 
-                        "Path '%s' is not watched", winfo.GetPath());
 
-             // This can happen if a dir is watched, then a parent tree added
 
-             return true;
 
-         }
 
-         wxSharedPtr<wxFSWatchEntry> watch = it->second;
 
-         m_watches.erase(it);
 
-         return DoRemove(watch);
 
-     }
 
-     virtual bool RemoveAll()
 
-     {
 
-         bool ret = true;
 
-         for ( wxFSWatchEntries::iterator it = m_watches.begin();
 
-               it != m_watches.end();
 
-               ++it )
 
-         {
 
-             if ( !DoRemove(it->second) )
 
-                ret = false;
 
-         }
 
-         m_watches.clear();
 
-         return ret;
 
-     }
 
-     // Check whether any filespec matches the file's ext (if present)
 
-     bool MatchesFilespec(const wxFileName& fn, const wxString& filespec) const
 
-     {
 
-         return filespec.empty() || wxMatchWild(filespec, fn.GetFullName());
 
-     }
 
- protected:
 
-     virtual bool DoAdd(wxSharedPtr<wxFSWatchEntry> watch) = 0;
 
-     virtual bool DoRemove(wxSharedPtr<wxFSWatchEntry> watch) = 0;
 
-     wxFSWatchEntries m_watches;
 
-     wxFileSystemWatcherBase* m_watcher;
 
- };
 
- #endif /* WX_PRIVATE_FSWATCHER_H_ */
 
 
  |