| 1038 | } |
| 1039 | |
| 1040 | bool MainWindow::breakAdd(const QString &label, uint32_t addr, bool enabled, bool toggle, bool unset) { |
| 1041 | const int row = m_breakpoints->rowCount(); |
| 1042 | QString addrStr; |
| 1043 | |
| 1044 | if (unset) { |
| 1045 | addrStr = DEBUG_UNSET_ADDR; |
| 1046 | } else { |
| 1047 | addrStr = int2hex((addr &= 0xFFFFFF), 6).toUpper(); |
| 1048 | } |
| 1049 | |
| 1050 | // return if address is already set |
| 1051 | for (int i = 0; i < row; i++) { |
| 1052 | if (m_breakpoints->item(i, BREAK_ADDR_COL)->text() == addrStr) { |
| 1053 | if (addrStr != DEBUG_UNSET_ADDR) { |
| 1054 | if (!m_useSoftCom) { |
| 1055 | m_breakpoints->selectRow(i); |
| 1056 | if (toggle) { |
| 1057 | breakRemoveRow(i); |
| 1058 | } |
| 1059 | } else { |
| 1060 | ui->lcd->setFocus(); |
| 1061 | } |
| 1062 | return false; |
| 1063 | } |
| 1064 | } |
| 1065 | } |
| 1066 | |
| 1067 | m_breakpoints->blockSignals(true); |
| 1068 | m_breakpoints->setRowCount(row + 1); |
| 1069 | |
| 1070 | QToolButton *btnRemove = new QToolButton; |
| 1071 | btnRemove->setIcon(m_iconRemove); |
| 1072 | |
| 1073 | QToolButton *btnEnable = new QToolButton; |
| 1074 | btnEnable->setIcon(enabled ? m_iconCheck : m_iconCheckGray); |
| 1075 | btnEnable->setCheckable(true); |
| 1076 | btnEnable->setChecked(enabled); |
| 1077 | |
| 1078 | connect(btnRemove, &QToolButton::clicked, this, &MainWindow::breakRemoveSelected); |
| 1079 | connect(btnEnable, &QToolButton::clicked, [this, btnEnable, row](bool checked) { |
| 1080 | uint32_t addr = static_cast<uint32_t>(hex2int(m_breakpoints->item(row, BREAK_ADDR_COL)->text())); |
| 1081 | btnEnable->setIcon(checked ? m_iconCheck : m_iconCheckGray); |
| 1082 | debug_watch(addr, DBG_MASK_EXEC, checked); |
| 1083 | disasmUpdate(); |
| 1084 | memUpdate(); |
| 1085 | }); |
| 1086 | |
| 1087 | QTableWidgetItem *itemLabel = new QTableWidgetItem(label); |
| 1088 | QTableWidgetItem *itemAddr = new QTableWidgetItem(addrStr); |
| 1089 | QTableWidgetItem *itemBreak = new QTableWidgetItem; |
| 1090 | QTableWidgetItem *itemRemove = new QTableWidgetItem; |
| 1091 | |
| 1092 | m_breakpoints->setItem(row, BREAK_NAME_COL, itemLabel); |
| 1093 | m_breakpoints->setItem(row, BREAK_ADDR_COL, itemAddr); |
| 1094 | m_breakpoints->setItem(row, BREAK_ENABLE_COL, itemBreak); |
| 1095 | m_breakpoints->setItem(row, BREAK_REMOVE_COL, itemRemove); |
| 1096 | m_breakpoints->setCellWidget(row, BREAK_REMOVE_COL, btnRemove); |
| 1097 | m_breakpoints->setCellWidget(row, BREAK_ENABLE_COL, btnEnable); |
nothing calls this directly
no test coverage detected