support bookmark-file; refs #116
parent
ac8fa676c0
commit
4c1a396547
13 changed files with 305 additions and 121 deletions
@ -0,0 +1,72 @@ |
|||||||
|
/*! @file
|
||||||
|
|
||||||
|
@id $Id$ |
||||||
|
*/ |
||||||
|
// 1 2 3 4 5 6 7 8
|
||||||
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||||
|
|
||||||
|
#include <QtCore/QFile> |
||||||
|
#include <QtCore/QFileInfo> |
||||||
|
#include <QtCore/QFileSystemWatcher> |
||||||
|
#include <QtCore/QString> |
||||||
|
#include <QtCore/QStringList> |
||||||
|
|
||||||
|
#include <cassert> |
||||||
|
|
||||||
|
class Storage: public QObject { |
||||||
|
Q_OBJECT; |
||||||
|
Q_SIGNALS: |
||||||
|
void changed(); |
||||||
|
public: |
||||||
|
Storage() {} |
||||||
|
bool valid() { |
||||||
|
return readable() || writeable(); |
||||||
|
} |
||||||
|
operator bool() { |
||||||
|
return valid(); |
||||||
|
} |
||||||
|
virtual bool readable() = 0; |
||||||
|
virtual bool writeable() = 0; |
||||||
|
virtual QStringList read() = 0; |
||||||
|
virtual bool write(const QStringList& out) = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
class FileStorage: public Storage { |
||||||
|
Q_OBJECT; |
||||||
|
public: |
||||||
|
FileStorage(QString file): _file(file) { |
||||||
|
if (valid()) { |
||||||
|
assert(connect(new QFileSystemWatcher(QStringList()<<_file.fileName(), |
||||||
|
this), |
||||||
|
SIGNAL(fileChanged(const QString&)), |
||||||
|
SLOT(changed()))); |
||||||
|
} |
||||||
|
} |
||||||
|
bool readable() { |
||||||
|
return QFileInfo(_file).exists(); |
||||||
|
} |
||||||
|
bool writeable() { |
||||||
|
return readable() || !_file.fileName().isEmpty(); |
||||||
|
} |
||||||
|
QStringList read() { |
||||||
|
QStringList res; |
||||||
|
if (readable()) { |
||||||
|
if (_file.open(QIODevice::ReadOnly)) |
||||||
|
res=QString::fromUtf8(_file.readAll()).split("\n"); |
||||||
|
_file.close(); |
||||||
|
} |
||||||
|
return res; |
||||||
|
} |
||||||
|
bool write(const QStringList& out) { |
||||||
|
bool res(false); |
||||||
|
if (writeable()) { |
||||||
|
if (_file.open(QIODevice::WriteOnly)) |
||||||
|
if (_file.write(out.join("\n").toUtf8())>=0) res=true; |
||||||
|
_file.close(); |
||||||
|
} |
||||||
|
return res; |
||||||
|
} |
||||||
|
private: |
||||||
|
QFile _file; |
||||||
|
}; |
||||||
|
|
Loading…
Reference in new issue