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 <QAbstractListModel>
9 
10 namespace QGBA {
11 
12 class ShortcutController;
13 class Shortcut;
14 
15 class ShortcutModel : public QAbstractItemModel {
16 Q_OBJECT
17 
18 public:
19 	ShortcutModel(QObject* parent = nullptr);
20 
21 	void setController(ShortcutController* controller);
22 
23 	virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
24 
25 	virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
26 
27 	virtual QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
28 	virtual QModelIndex parent(const QModelIndex& index) const override;
29 
30 	virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override;
31 	virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
32 
33 	QString name(const QModelIndex&) const;
34 
35 private slots:
36 	void addRowNamed(const QString&);
37 	void clearMenu(const QString&);
38 
39 private:
40 	ShortcutController* m_controller = nullptr;
41 
42 	struct Item {
43 		QString name;
44 		const Shortcut* shortcut = nullptr;
45 	};
46 
47 	mutable QHash<QString, Item> m_cache;
48 };
49 
50 }