Go to the documentation of this file.00001 #pragma once
00002
00003 #include <memory>
00004 #include <string>
00005 #include <QWidget>
00006 #include <QString>
00007 #include <QDomDocument>
00008 #include <QString>
00009 #include <QJSEngine>
00010 #include "PlotJuggler/plotdata.h"
00011
00012 class CustomFunction;
00013 class QJSEngine;
00014 typedef std::shared_ptr<CustomFunction> CustomPlotPtr;
00015 typedef std::unordered_map<std::string, CustomPlotPtr> CustomPlotMap;
00016
00017 struct SnippetData{
00018 QString name;
00019 QString globalVars;
00020 QString equation;
00021 };
00022
00023 typedef std::map<QString, SnippetData> SnippetsMap;
00024
00025 SnippetsMap GetSnippetsFromXML(const QString& xml_text);
00026
00027 SnippetsMap GetSnippetsFromXML(const QDomElement& snippets_element);
00028
00029 QDomElement ExportSnippets(const SnippetsMap& snippets,
00030 QDomDocument& destination_doc);
00031
00032 class CustomFunction
00033 {
00034 public:
00035 CustomFunction(const std::string &linkedPlot,
00036 const std::string &plotName,
00037 const QString &globalVars,
00038 const QString &function);
00039
00040 CustomFunction(const std::string &linkedPlot,
00041 const SnippetData &snippet);
00042
00043 void calculateAndAdd(PlotDataMapRef &plotData);
00044
00045 void calculate(const PlotDataMapRef &plotData, PlotData *dst_data);
00046
00047 const std::string& name() const;
00048
00049 const std::string& linkedPlotName() const;
00050
00051 const QString& globalVars() const;
00052
00053 const QString& function() const;
00054
00055 QDomElement xmlSaveState(QDomDocument &doc) const;
00056
00057 static CustomPlotPtr createFromXML(QDomElement &element );
00058
00059 static QStringList getChannelsFromFuntion(const QString& function);
00060
00061 private:
00062 void initJsEngine();
00063
00064 PlotData::Point calculatePoint(QJSValue &calcFct,
00065 const PlotData &src_data,
00066 const std::vector<const PlotData *> &channels_data,
00067 QJSValue &chan_values,
00068 size_t point_index);
00069
00070 const std::string _linked_plot_name;
00071 const std::string _plot_name;
00072 const QString _global_vars;
00073 const QString _function;
00074 QString _function_replaced;
00075 std::vector<std::string> _used_channels;
00076
00077 std::unique_ptr<QJSEngine> _jsEngine;
00078 double _last_updated_timestamp;
00079 };
00080
00081
00082