Forked from
Software / ArmarX / RobotAPI
1060 commits behind the upstream repository.
-
Fabian Tërnava authored
# Conflicts: # source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
Fabian Tërnava authored# Conflicts: # source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
SkillManagerMonitorWidgetController.h 6.62 KiB
/*
* This file is part of ArmarX.
*
* ArmarX is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* ArmarX is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package RobotAPI::gui-plugins::SkillManagerMonitorWidgetController
* @author Raphael Grimm ( raphael dot grimm at kit dot edu )
* @date 2020
* @copyright http://www.gnu.org/licenses/gpl-2.0.txt
* GNU General Public License
*/
#pragma once
#include <stack>
#include <thread>
#include <vector>
#include <QTimer>
#include <ArmarXCore/core/system/ImportExportComponent.h>
#include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
#include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h>
#include <ArmarXGui/libraries/SimpleConfigDialog/SimpleConfigDialog.h>
#include <RobotAPI/gui-plugins/SkillManagerPlugin/ui_SkillManagerMonitorWidget.h>
#include <RobotAPI/interface/skills/SkillMemoryInterface.h>
#include <RobotAPI/libraries/aron/core/data/variant/All.h>
#include <RobotAPI/libraries/aron/core/type/variant/All.h>
#include <RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h>
#include <RobotAPI/libraries/skills/core/ProviderID.h>
#include <RobotAPI/libraries/skills/core/SkillDescription.h>
#include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h>
#include "aronTreeWidget/AronTreeWidgetController.h"
namespace armarx
{
class SkillDescriptionWidget;
class SkillInfoTreeWidgetItem : public QTreeWidgetItem
{
public:
SkillInfoTreeWidgetItem(const skills::SkillDescription& desc, QTreeWidgetItem* parent) :
QTreeWidgetItem(parent), skillDescription(desc)
{
}
SkillInfoTreeWidgetItem(const skills::SkillDescription& desc, QTreeWidget* parent) :
QTreeWidgetItem(parent), skillDescription(desc)
{
}
skills::SkillDescription skillDescription;
};
class SkillExecutionInfoTreeWidgetItem : public QTreeWidgetItem
{
//Q_OBJECT
public:
SkillExecutionInfoTreeWidgetItem(const skills::SkillExecutionID& id,
QTreeWidgetItem* parent) :
QTreeWidgetItem(parent), executionId(id)
{
}
SkillExecutionInfoTreeWidgetItem(const skills::SkillExecutionID& id, QTreeWidget* parent) :
QTreeWidgetItem(parent), executionId(id)
{
}
static SkillExecutionInfoTreeWidgetItem*
SearchRecursiveForMatch(SkillExecutionInfoTreeWidgetItem* el,
const skills::SkillExecutionID& needle);
skills::SkillExecutionID executionId;
};
class ARMARXCOMPONENT_IMPORT_EXPORT SkillManagerMonitorWidgetController :
public armarx::ArmarXComponentWidgetControllerTemplate<SkillManagerMonitorWidgetController>
{
Q_OBJECT
public:
/// Controller Constructor
explicit SkillManagerMonitorWidgetController();
/// Controller destructor
virtual ~SkillManagerMonitorWidgetController();
void loadSettings(QSettings* settings) override;
void saveSettings(QSettings* settings) override;
QPointer<QDialog> getConfigDialog(QWidget* parent) override;
void configured() override;
/**
* Returns the Widget name displayed in the ArmarXGui to create an
* instance of this class.
*/
static QString
GetWidgetName()
{
return "Skills.Manager";
}
void onInitComponent() override;
void onConnectComponent() override;
void onDisconnectComponent() override;
private slots:
void skillSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
void skillExecutionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
void stopSkill();
void executeSelectedSkill();
void updateTimerFrequency();
void refreshSkills();
void refreshExecutions();
void refreshSkillsAndExecutions();
void copyCurrentConfig();
void pasteCurrentConfig();
void resetCurrentConfig();
void prepareAndRunMenu(const QPoint& pos);
void rerunSkillWithSimilarParams();
void searchSkills();
private:
aron::data::DictPtr getConfigAsAron() const;
private:
/**
* Widget Form
*/
Ui::SkillManagerMonitorWidget widget;
QPointer<SimpleConfigDialog> dialog;
QString currentSkillSearch;
std::string observerName = "SkillManager";
skills::dti::SkillMemoryInterfacePrx memory = nullptr;
// Data taken from observer (snapshot of it)
mutable std::mutex updateMutex;
std::map<skills::ProviderID, std::map<skills::SkillID, skills::SkillDescription>> skills =
{};
std::map<skills::SkillExecutionID, skills::SkillStatusUpdate> skillStatusUpdates = {};
// store copies (!) of skill descriptions
//std::map<skills::SkillExecutionID, skills::SkillParameterization> skillExecutionParams = {};
// User Input
struct SelectedSkill
{
skills::SkillID skillId;
skills::SkillExecutionID skillExecutionId;
// make default constructable
SelectedSkill() :
skillId({}, skills::SkillID::UNKNOWN),
skillExecutionId({{}, skills::SkillID::UNKNOWN},
skills::SkillExecutionID::UNKNOWN,
armarx::core::time::DateTime::Invalid())
{
}
} selectedSkill;
void executeSkillWithParams(skills::SkillID skillId, aron::data::DictPtr params);
void matchSkillUpdateToSearch(std::map<skills::manager::dto::SkillID,
skills::manager::dto::SkillDescription>& update);
// Helper to get the treeWidgetItem easily
QTreeWidgetItem* skillsArgumentsTreeWidgetItem = nullptr;
AronTreeWidgetControllerPtr aronTreeWidgetController = nullptr;
// others
QTimer* refreshSkillsResultTimer;
SkillDescriptionWidget* skillDescriptionWidget = nullptr;
// connected flag
std::atomic_bool connected = false;
};
} // namespace armarx