| 251 | |
| 252 | |
| 253 | bool DebugStackListModel::setData(const QModelIndex& index, const QVariant& value, int role) |
| 254 | { |
| 255 | if ((flags(index) & Qt::ItemIsEditable) != Qt::ItemIsEditable) |
| 256 | return false; |
| 257 | |
| 258 | QString valueStr = value.toString(); |
| 259 | if (valueStr.size() == 0) |
| 260 | return false; |
| 261 | |
| 262 | if (index.column() >= columnCount() || (size_t)index.row() >= m_items.size()) |
| 263 | return false; |
| 264 | |
| 265 | DebugStackItem* item = static_cast<DebugStackItem*>(index.internalPointer()); |
| 266 | if (!item) |
| 267 | return false; |
| 268 | |
| 269 | bool ok = false; |
| 270 | uint64_t newValue = valueStr.toULongLong(&ok, 16); |
| 271 | if (!ok) |
| 272 | return false; |
| 273 | |
| 274 | if (newValue == item->value()) |
| 275 | return false; |
| 276 | |
| 277 | size_t addressSize = m_controller->GetRemoteArchitecture()->GetAddressSize(); |
| 278 | BinaryWriter* writer = new BinaryWriter(m_controller->GetLiveView()); |
| 279 | ok = false; |
| 280 | writer->Seek(item->address()); |
| 281 | switch (addressSize) |
| 282 | { |
| 283 | case 1: |
| 284 | ok = writer->TryWrite8(newValue); |
| 285 | break; |
| 286 | case 2: |
| 287 | ok = writer->TryWrite16(newValue); |
| 288 | break; |
| 289 | case 4: |
| 290 | ok = writer->TryWrite32(newValue); |
| 291 | break; |
| 292 | case 8: |
| 293 | ok = writer->TryWrite64(newValue); |
| 294 | break; |
| 295 | default: |
| 296 | break; |
| 297 | } |
| 298 | if (!ok) |
| 299 | return false; |
| 300 | |
| 301 | item->setValue(newValue); |
| 302 | item->setValueStatus(DebugStackValueModified); |
| 303 | return true; |
| 304 | } |
| 305 | |
| 306 | |
| 307 | DebugStackItemDelegate::DebugStackItemDelegate(QWidget* parent) : QStyledItemDelegate(parent) |
nothing calls this directly
no test coverage detected