1 #include "controllers/controllermappingtablemodel.h"
2
3 #include "moc_controllermappingtablemodel.cpp"
4
ControllerMappingTableModel(QObject * pParent)5 ControllerMappingTableModel::ControllerMappingTableModel(QObject* pParent)
6 : QAbstractTableModel(pParent),
7 m_pMidiPreset(nullptr),
8 m_pHidPreset(nullptr) {
9 }
10
~ControllerMappingTableModel()11 ControllerMappingTableModel::~ControllerMappingTableModel() {
12
13 }
14
setPreset(ControllerPresetPointer pPreset)15 void ControllerMappingTableModel::setPreset(ControllerPresetPointer pPreset) {
16 m_pPreset = pPreset;
17 if (m_pPreset) {
18 // This immediately calls one of the two visit() methods below.
19 m_pPreset->accept(this);
20 }
21
22 // Notify the child class a preset was loaded.
23 onPresetLoaded();
24 }
25
cancel()26 void ControllerMappingTableModel::cancel() {
27 // Apply mutates the preset so to revert to the time just before the last
28 // apply, simply call setPreset again.
29 setPreset(m_pPreset);
30 }
31
visit(MidiControllerPreset * pMidiPreset)32 void ControllerMappingTableModel::visit(MidiControllerPreset* pMidiPreset) {
33 m_pMidiPreset = pMidiPreset;
34 }
35
visit(HidControllerPreset * pHidPreset)36 void ControllerMappingTableModel::visit(HidControllerPreset* pHidPreset) {
37 m_pHidPreset = pHidPreset;
38 }
39
setHeaderData(int section,Qt::Orientation orientation,const QVariant & value,int role)40 bool ControllerMappingTableModel::setHeaderData(int section,
41 Qt::Orientation orientation,
42 const QVariant& value,
43 int role) {
44 int numColumns = columnCount();
45 if (section < 0 || section >= numColumns) {
46 return false;
47 }
48
49 if (orientation != Qt::Horizontal) {
50 // We only care about horizontal headers.
51 return false;
52 }
53
54 if (m_headerInfo.size() != numColumns) {
55 m_headerInfo.resize(numColumns);
56 }
57
58 m_headerInfo[section][role] = value;
59 emit headerDataChanged(orientation, section, section);
60 return true;
61 }
62
headerData(int section,Qt::Orientation orientation,int role) const63 QVariant ControllerMappingTableModel::headerData(int section,
64 Qt::Orientation orientation,
65 int role) const {
66 if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
67 QVariant headerValue = m_headerInfo.value(section).value(role);
68 if (!headerValue.isValid()) {
69 // Try EditRole if DisplayRole wasn't present
70 headerValue = m_headerInfo.value(section).value(Qt::EditRole);
71 }
72 if (!headerValue.isValid()) {
73 headerValue = QVariant(section).toString();
74 }
75 return headerValue;
76 }
77 return QAbstractTableModel::headerData(section, orientation, role);
78 }
79
flags(const QModelIndex & index) const80 Qt::ItemFlags ControllerMappingTableModel::flags(const QModelIndex& index) const {
81 if (!index.isValid()) {
82 return Qt::ItemIsEnabled;
83 }
84
85 Qt::ItemFlags defaultFlags = QAbstractTableModel::flags(index);
86 return defaultFlags | Qt::ItemIsEditable;
87 }
88