Skip to content
Snippets Groups Projects
Commit 4da104fb authored by albrecpe's avatar albrecpe
Browse files

Make widgets accept update instead of requesting it

parent 9d4d2f27
No related branches found
No related tags found
1 merge request!442Fix: skill gui live search
Pipeline #18373 passed
Showing
with 51 additions and 56 deletions
......@@ -105,22 +105,25 @@ namespace armarx::skills::gui
&PeriodicUpdateWidget::startTimerIfEnabled);
connect(this, &SkillMemoryGUI::connectGui, skillGroupBox, &SkillGroupBox::connectGui);
// update cascade
connect(this, &SkillMemoryGUI::updateGui, skillGroupBox, &SkillGroupBox::updateGui);
// timer
connect(this->updateWidget,
&PeriodicUpdateWidget::update,
this->memory.get(),
&SkillManagerWrapper::updateFromMemory);
// updates
connect(this->memory.get(),
&SkillManagerWrapper::updateAvailable,
this,
&SkillMemoryGUI::updateGui);
connect(this, &SkillMemoryGUI::updateGui, this->skillGroupBox, &SkillGroupBox::updateGui);
// we don't want to update the skill details periodically, update can be triggered manually
/*
connect(
this, &SkillMemoryGUI::updateGui, skillDetailGroupBox, &SkillDetailGroupBox::updateGui);
*/
connect(this,
&SkillMemoryGUI::updateGui,
skillExecutionTreeWidget,
&SkillExecutionTreeWidget::updateExecutions);
this->skillExecutionTreeWidget,
&SkillExecutionTreeWidget::updateGui);
// timer -> update
connect(
this->updateWidget, &PeriodicUpdateWidget::update, this, &SkillMemoryGUI::updateGui);
// stop all
connect(stopAllButton,
......
......@@ -52,10 +52,7 @@ namespace armarx::skills::gui
*/
void connectGui(std::string observerName);
/**
* @brief Notify widgets to update themselves
*/
void updateGui();
void updateGui(SkillManagerWrapper::Snapshot update);
private:
void setupUi();
......
......@@ -140,13 +140,14 @@ namespace armarx::skills::gui
}
void
SkillExecutionTreeWidget::updateExecutions()
SkillExecutionTreeWidget::updateGui(SkillManagerWrapper::Snapshot update)
{
auto currentManagerStatuses = memory->getExecutions();
if (currentManagerStatuses.empty())
if (update.statuses.empty())
{
return;
}
for (const auto& [k, v] : currentManagerStatuses)
for (const auto& [k, v] : update.statuses)
{
skills::SkillExecutionID executionId = k;
skills::SkillStatusUpdate statusUpdate = v;
......
......@@ -9,6 +9,7 @@
namespace armarx::skills::gui
{
using StatusMap = std::map<skills::SkillExecutionID, skills::SkillStatusUpdate>;
class SkillExecutionTreeWidget : public QTreeWidget, public MemoryCommunicatorBase
{
......@@ -38,7 +39,7 @@ namespace armarx::skills::gui
public slots:
void disconnectGui();
void updateExecutions();
void updateGui(SkillManagerWrapper::Snapshot update);
private slots:
void executionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
......
......@@ -221,8 +221,7 @@ namespace armarx::skills::gui
snapshot.skills = fetchSkillsFromMemory();
// notify registered widgets of update
emit skillUpdate(snapshot.skills);
emit statusUpdate(snapshot.statuses);
emit updateAvailable(this->snapshot);
}
const std::optional<ProviderID>
......
......@@ -67,10 +67,20 @@ namespace armarx::skills::gui
*/
StatusMap getExecutions();
struct Snapshot
{
StatusMap statuses;
SkillMap skills;
// default constructor (construct empty)
Snapshot() : statuses({}), skills({})
{
}
};
signals:
void connectionUpdate(std::string const& message, std::string const& error);
void skillUpdate(SkillMap update);
void statusUpdate(StatusMap update);
void updateAvailable(Snapshot update);
public slots:
/**
......@@ -101,17 +111,6 @@ namespace armarx::skills::gui
armarx::skills::manager::dti::SkillManagerInterfacePrx memory;
std::string currentSkillSearch = "";
struct Snapshot
{
StatusMap statuses;
SkillMap skills;
// default constructor (construct empty)
Snapshot() : statuses({}), skills({})
{
}
};
Snapshot snapshot;
/**
......
......@@ -32,14 +32,9 @@ namespace armarx::skills::gui
signals:
void disconnectGui();
/**
* @brief Notify widgets to update themselves
*/
void updateGui();
public slots:
/**
* @brief Update subwidgets of an updated skill selection.
* @brief Notify subwidgets of an updated skill selection.
* @param skillId
*/
void updateSkillDetails(skills::SkillID& skillId);
......
......@@ -64,11 +64,12 @@ namespace armarx::skills::gui
this,
&SkillGroupBox::updateSkillDetails);
// update
connect(
this, &SkillGroupBox::updateGui, this->skillTreeWidget, &SkillTreeWidget::updateGui);
// disconnect
connect(
this, &SkillGroupBox::disconnectGui, skillTreeWidget, &SkillTreeWidget::disconnectGui);
// update cascade
connect(this, &SkillGroupBox::updateGui, skillTreeWidget, &SkillTreeWidget::updateSkills);
}
} // namespace armarx::skills::gui
......@@ -36,10 +36,7 @@ namespace armarx::skills::gui
void disconnectGui();
/**
* @brief Notify widgets to update themselves
*/
void updateGui();
void updateGui(SkillManagerWrapper::Snapshot update);
public slots:
void connectGui(std::string observerName);
......
......@@ -25,10 +25,9 @@ namespace armarx::skills::gui
}
void
SkillTreeWidget::updateSkills()
SkillTreeWidget::updateGui(SkillManagerWrapper::Snapshot update)
{
setSortingEnabled(false);
const auto skills = memory->getSkills();
// update tree view. Remove non-existing elements
int i = 0;
......@@ -38,7 +37,7 @@ namespace armarx::skills::gui
auto providerName = providerItem->text(0).toStdString();
skills::ProviderID providerId{.providerName = providerName};
if (skills.find(providerId) == skills.end())
if (update.skills.find(providerId) == update.skills.end())
{
providerItem = nullptr; // reset
auto remove = this->takeTopLevelItem(i);
......@@ -49,8 +48,8 @@ namespace armarx::skills::gui
++i;
// sanity check
ARMARX_CHECK(skills.count(providerId) > 0);
auto& providedSkills = skills.at(providerId);
ARMARX_CHECK(update.skills.count(providerId) > 0);
auto& providedSkills = update.skills.at(providerId);
int j = 0;
while (j < providerItem->childCount())
......@@ -75,7 +74,7 @@ namespace armarx::skills::gui
}
// update tree view. Add new elements
for (const auto& [providerId, providedSkills] : skills)
for (const auto& [providerId, providedSkills] : update.skills)
{
bool newProvider = false;
QTreeWidgetItem* providerItem = nullptr;
......
......@@ -9,6 +9,8 @@
namespace armarx::skills::gui
{
using SkillMap =
std::map<skills::ProviderID, std::map<skills::SkillID, skills::SkillDescription>>;
class SkillTreeWidget : public QTreeWidget, public MemoryCommunicatorBase
{
......@@ -42,7 +44,8 @@ namespace armarx::skills::gui
public slots:
void disconnectGui();
void updateSkills();
void updateGui(SkillManagerWrapper::Snapshot update);
private slots:
void skillSelectionChanged(QTreeWidgetItem* current, int column);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment