diff -r 73e448b2943d -r 68443f5be176 src/libraries.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/libraries.h Sat Oct 05 23:47:03 2019 +0300 @@ -0,0 +1,61 @@ +#pragma once +#include +#include +#include "main.h" + +class QSettings; + +struct Library +{ + enum Role + { + OfficialLibrary, + UnofficialLibrary, + WorkingLibrary, + } role; + QDir path; + static QString libraryRoleName(const Role role); +}; + +Q_DECLARE_METATYPE(Library) +QDataStream &operator<<(QDataStream&, const Library&); +QDataStream &operator>>(QDataStream&, Library&); + +using Libraries = QVector; +Q_DECLARE_METATYPE(Libraries) + +class LibraryManager : public QAbstractTableModel +{ + Q_OBJECT +public: + LibraryManager(QObject* parent = nullptr); + LibraryManager(QSettings* settings, QObject* parent = nullptr); + QVector::const_iterator begin() const; + QVector::const_iterator end() const; + QFileInfo findFile(QString fileName) const; + void addLibrary(const Library& library); + const Library& library(int libraryIndex) const; + void setLibraryPath(int libraryIndex, const QDir& path); + void setLibraryRole(int libraryIndex, const Library::Role role); + void restoreFromSettings(QSettings* settings); + void storeToSettings(QSettings* settings); + int count() const; + // Definitions for QAbstractTableModel + Qt::ItemFlags flags(const QModelIndex& index) const override; + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + QVariant headerData( + int section, + Qt::Orientation orientation, + int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; +private: + enum Column + { + RoleColumn, + PathColumn + }; + void signalLibraryChange(int library); + bool isValidIndex(int libraryIndex); + Libraries libraries; +};