1 /* Copyright (c) 2013-2019 Jeffrey Pfau
2  *
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #pragma once
7 
8 #include <QAbstractItemModel>
9 
10 #include "LogController.h"
11 
12 namespace QGBA {
13 
14 class ConfigController;
15 
16 class LogConfigModel : public QAbstractItemModel {
17 Q_OBJECT
18 
19 public:
20 	LogConfigModel(LogController*, QObject* parent = nullptr);
21 
22 	virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
23 	virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
24 	virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
25 
26 	virtual QModelIndex index(int row, int column, const QModelIndex& parent) const override;
27 	virtual QModelIndex parent(const QModelIndex& index) const override;
28 
29 	virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override;
30 	virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
31 	virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
32 
logger()33 	LogController* logger() { return m_controller; }
34 
35 public slots:
36 	void reset();
37 	void save(ConfigController*);
38 
39 private:
40 	struct ConfigSetting {
41 		int index;
42 		QString name;
43 		const char* id;
44 		int levels;
45 
46 		bool operator<(const ConfigSetting& other) const {
47 			return name < other.name;
48 		}
49 	};
50 
51 	LogController* m_controller;
52 
53 	QList<ConfigSetting> m_cache;
54 	int m_levels;
55 };
56 
57 }
58