diff options
Diffstat (limited to 'plugins/warp/ui/shared/function.cpp')
| -rw-r--r-- | plugins/warp/ui/shared/function.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/plugins/warp/ui/shared/function.cpp b/plugins/warp/ui/shared/function.cpp index e177c285..06d4cbcf 100644 --- a/plugins/warp/ui/shared/function.cpp +++ b/plugins/warp/ui/shared/function.cpp @@ -70,6 +70,15 @@ void WarpFunctionItemModel::InsertFunction(uint64_t address, WarpFunctionItem* i m_insertableFunctionRows[address] = rowCount() - 1; } +void WarpFunctionItemModel::RemoveFunction(uint64_t address) +{ + const auto iter = m_insertableFunctionRows.find(address); + if (iter == m_insertableFunctionRows.end()) + return; + removeRow(iter->second); + m_insertableFunctionRows.erase(iter); +} + WarpFunctionItem* WarpFunctionItemModel::GetItem(const QModelIndex& index) const { if (!index.isValid()) @@ -173,7 +182,7 @@ WarpFunctionTableWidget::WarpFunctionTableWidget(QWidget* parent) : QWidget(pare m_table->setSelectionBehavior(QAbstractItemView::SelectRows); m_table->setSelectionMode(QAbstractItemView::SingleSelection); m_table->setEditTriggers(QAbstractItemView::NoEditTriggers); - m_table->setFocusPolicy(Qt::NoFocus); + m_table->setFocusPolicy(Qt::FocusPolicy::StrongFocus); m_table->setShowGrid(false); m_table->setAlternatingRowColors(false); m_table->setSortingEnabled(true); @@ -219,6 +228,15 @@ WarpFunctionTableWidget::WarpFunctionTableWidget(QWidget* parent) : QWidget(pare if (!item || !item->GetFunction()) return; + for (QAction* action : m_contextMenu->actions()) + { + bool enabled = true; + auto iter = m_contextMenuIsValid.find(action->text()); + if (iter != m_contextMenuIsValid.end()) + enabled = iter->second(item, m_model->GetAddress(sourceIndex)); + action->setEnabled(enabled); + } + // Execute the menu and get the selected action const QAction* selectedAction = m_contextMenu->exec(m_table->viewport()->mapToGlobal(pos)); if (!selectedAction) @@ -238,6 +256,16 @@ void WarpFunctionTableWidget::RegisterContextMenuAction( m_contextMenuActions[name] = callback; } +void WarpFunctionTableWidget::RegisterContextMenuAction( + const QString& name, + const std::function<void(WarpFunctionItem*, std::optional<uint64_t>)>& callback, + const std::function<bool(WarpFunctionItem*, std::optional<uint64_t>)>& isValid) +{ + // Reuse existing registration then add optional validator + RegisterContextMenuAction(name, callback); + m_contextMenuIsValid[name] = isValid; +} + void WarpFunctionTableWidget::SetFunctions(QVector<WarpFunctionItem*> functions) { // Clear matches as they are no longer valid. @@ -266,6 +294,11 @@ void WarpFunctionTableWidget::InsertFunction(uint64_t address, WarpFunctionItem* m_model->InsertFunction(address, function); } +void WarpFunctionTableWidget::RemoveFunction(uint64_t address) +{ + m_model->RemoveFunction(address); +} + void WarpFunctionTableWidget::setFilter(const std::string& filter) { m_proxyModel->setFilterFixedString(QString::fromStdString(filter)); |
