Program Listing for File dataload_ros2.h

Return to documentation for file (src/DataLoadROS2/dataload_ros2.h)

#ifndef DATALOAD_ROS2_H
#define DATALOAD_ROS2_H

#include <QObject>
#include <QtPlugin>
#include <QSettings>

#include <rosbag2_cpp/reader.hpp>
#include <PlotJuggler/dataloader_base.h>
#include "dialog_select_ros_topics.h"
#include "parser_configuration.h"

class DataLoadROS2 : public PJ::DataLoader
{
  Q_OBJECT
  Q_PLUGIN_METADATA(IID "facontidavide.PlotJuggler3.ROS2DataLoader")
  Q_INTERFACES(PJ::DataLoader)

public:
  DataLoadROS2();

  virtual const std::vector<const char*>& compatibleFileExtensions() const override;

  virtual bool readDataFromFile(PJ::FileLoadInfo* fileload_info,
                                PJ::PlotDataMapRef& destination) override;

  virtual const char* name() const override
  {
    return "DataLoad ROS2 bags";
  }

  virtual ~DataLoadROS2() override = default;

  virtual bool xmlSaveState(QDomDocument& doc, QDomElement& parent_element) const override;

  virtual bool xmlLoadState(const QDomElement& parent_element) override;

private:
  std::shared_ptr<rosbag2_cpp::Reader> _bag_reader;

  std::vector<const char*> _extensions;

  PJ::RosParserConfig _config;

  std::vector<std::pair<QString, QString>> getAndRegisterAllTopics();

  void saveDefaultSettings();

  void loadDefaultSettings();
};

#endif  // DATALOAD_ROS2_H