WingHexExplorer2/3rdparty/qcodeedit2/lib/qreliablefilewatch.h

67 lines
1.7 KiB
C++

/****************************************************************************
**
** Copyright (C) 2006-2009 fullmetalcoder <fullmetalcoder@hotmail.fr>
**
** This file is part of the Edyuk project <http://edyuk.org>
**
** This file may be used under the terms of the GNU General Public License
** version 3 as published by the Free Software Foundation and appearing in the
** file GPL.txt included in the packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#ifndef _QRELIABLE_FILE_WATCH_H_
#define _QRELIABLE_FILE_WATCH_H_
#include "qce-config.h"
/*!
\file qreliablefilewatch.h
\brief Definition of the QReliableFileWatch class
*/
#include <QFileSystemWatcher>
#include <QHash>
#include <QPointer>
#include <QTimer>
class QCE_EXPORT QReliableFileWatch : protected QFileSystemWatcher {
friend class QPointer<QReliableFileWatch>;
Q_OBJECT
public:
QReliableFileWatch(QObject *p = nullptr);
virtual ~QReliableFileWatch();
public slots:
void addWatch(const QString &file, QObject *recipient);
void removeWatch(QObject *recipient);
void removeWatch(const QString &file, QObject *recipient);
protected:
virtual void timerEvent(QTimerEvent *e);
private slots:
void sourceChanged(const QString &filepath);
private:
enum State { Clean = 0, Recent = 1, Duplicate = 2 };
struct Watch {
char state;
qint64 size;
QList<QPointer<QObject>> recipients;
};
QBasicTimer m_timer;
QHash<QString, Watch> m_targets;
};
#endif // !_QRELIABLE_FILE_WATCH_H_