| 90 | } |
| 91 | |
| 92 | void ModelsManager::updateModelForGroup(const RegistersGroup& group) |
| 93 | { |
| 94 | QStandardItemModel* model = m_models->modelForName(group.groupName.name()); |
| 95 | |
| 96 | if (!model) { |
| 97 | return; |
| 98 | } |
| 99 | |
| 100 | disconnect(model, &QStandardItemModel::itemChanged, this, &ModelsManager::itemChanged); |
| 101 | |
| 102 | model->setRowCount(group.registers.count()); |
| 103 | model->setColumnCount(group.registers.first().value.split(QLatin1Char(' ')).size() + 1); |
| 104 | |
| 105 | //set names and values separately as names don't change so often. |
| 106 | if (!model->item(0, 0)) { |
| 107 | for (int row = 0; row < group.registers.count(); row++) { |
| 108 | const Register& r = group.registers[row]; |
| 109 | auto* n = new QStandardItem(r.name); |
| 110 | n->setFlags(Qt::ItemIsEnabled); |
| 111 | model->setItem(row, 0, n); |
| 112 | } |
| 113 | } |
| 114 | |
| 115 | for (int row = 0; row < group.registers.count(); row++) { |
| 116 | const Register& r = group.registers[row]; |
| 117 | |
| 118 | const QStringList& values = r.value.split(QLatin1Char(' ')); |
| 119 | |
| 120 | //binary format workaround. |
| 121 | Format currentFormat = formats(group.groupName.name()).first(); |
| 122 | Mode currentMode = modes(group.groupName.name()).first(); |
| 123 | QString prefix; |
| 124 | if (currentFormat == Binary && ((currentMode < v4_float || currentMode > v2_double) && |
| 125 | (currentMode < f32 || currentMode > f64) && group.groupName.type() != floatPoint)) { |
| 126 | prefix = QStringLiteral("0b"); |
| 127 | } |
| 128 | |
| 129 | for (int column = 0; column < values.count(); column ++) { |
| 130 | auto* v = new QStandardItem(prefix + values[column]); |
| 131 | if (group.groupName.type() == flag) { |
| 132 | v->setFlags(Qt::ItemIsEnabled); |
| 133 | } |
| 134 | model->setItem(row, column + 1, v); |
| 135 | } |
| 136 | } |
| 137 | |
| 138 | connect(model, &QStandardItemModel::itemChanged, this, &ModelsManager::itemChanged); |
| 139 | } |
| 140 | |
| 141 | void ModelsManager::flagChanged(const QModelIndex& idx) |
| 142 | { |