|
1 #pragma once |
|
2 #include <QDir> |
|
3 #include <QAbstractTableModel> |
|
4 #include "main.h" |
|
5 |
|
6 class QSettings; |
|
7 |
|
8 struct Library |
|
9 { |
|
10 enum Role |
|
11 { |
|
12 OfficialLibrary, |
|
13 UnofficialLibrary, |
|
14 WorkingLibrary, |
|
15 } role; |
|
16 QDir path; |
|
17 static QString libraryRoleName(const Role role); |
|
18 }; |
|
19 |
|
20 Q_DECLARE_METATYPE(Library) |
|
21 QDataStream &operator<<(QDataStream&, const Library&); |
|
22 QDataStream &operator>>(QDataStream&, Library&); |
|
23 |
|
24 using Libraries = QVector<Library>; |
|
25 Q_DECLARE_METATYPE(Libraries) |
|
26 |
|
27 class LibraryManager : public QAbstractTableModel |
|
28 { |
|
29 Q_OBJECT |
|
30 public: |
|
31 LibraryManager(QObject* parent = nullptr); |
|
32 LibraryManager(QSettings* settings, QObject* parent = nullptr); |
|
33 QVector<Library>::const_iterator begin() const; |
|
34 QVector<Library>::const_iterator end() const; |
|
35 QFileInfo findFile(QString fileName) const; |
|
36 void addLibrary(const Library& library); |
|
37 const Library& library(int libraryIndex) const; |
|
38 void setLibraryPath(int libraryIndex, const QDir& path); |
|
39 void setLibraryRole(int libraryIndex, const Library::Role role); |
|
40 void restoreFromSettings(QSettings* settings); |
|
41 void storeToSettings(QSettings* settings); |
|
42 int count() const; |
|
43 // Definitions for QAbstractTableModel |
|
44 Qt::ItemFlags flags(const QModelIndex& index) const override; |
|
45 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; |
|
46 QVariant headerData( |
|
47 int section, |
|
48 Qt::Orientation orientation, |
|
49 int role = Qt::DisplayRole) const override; |
|
50 int rowCount(const QModelIndex &parent = QModelIndex()) const override; |
|
51 int columnCount(const QModelIndex &parent = QModelIndex()) const override; |
|
52 private: |
|
53 enum Column |
|
54 { |
|
55 RoleColumn, |
|
56 PathColumn |
|
57 }; |
|
58 void signalLibraryChange(int library); |
|
59 bool isValidIndex(int libraryIndex); |
|
60 Libraries libraries; |
|
61 }; |