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