File indexing completed on 2024-03-24 03:43:23
0001 // SPDX-FileCopyrightText: 2010 Aleix Pol <aleixpol@kde.org> 0002 // SPDX-License-Identifier: GPL-2.0-or-later 0003 0004 #ifndef ANALITZAWRAPPER_H 0005 #define ANALITZAWRAPPER_H 0006 0007 #include <QScopedPointer> 0008 #include <QObject> 0009 #include <QVariant> 0010 #include <QtQml/qqmlregistration.h> 0011 #include <QtQml/qqmlengine.h> 0012 0013 #include <analitza/expression.h> 0014 #include <analitza/variables.h> 0015 #include <analitzaplot/plotsmodel.h> 0016 #include <analitzagui/variablesmodel.h> 0017 #include <analitzagui/operatorsmodel.h> 0018 #include <analitza/variables.h> 0019 0020 namespace Analitza { 0021 class Analyzer; 0022 } 0023 0024 class ExpressionWrapper : public QObject 0025 { 0026 Q_OBJECT 0027 QML_NAMED_ELEMENT(Expression) 0028 Q_PROPERTY(QString expression READ toString CONSTANT) 0029 Q_PROPERTY(bool isCorrect READ isCorrect CONSTANT) 0030 public: 0031 explicit ExpressionWrapper(QObject* parent=nullptr); 0032 explicit ExpressionWrapper(const Analitza::Expression & e, QObject* parent = nullptr); 0033 0034 bool isCorrect() const; 0035 QString toString() const; 0036 0037 public Q_SLOTS: 0038 QVariant value() const; 0039 QStringList errors() const; 0040 0041 private: 0042 Analitza::Expression m_exp; 0043 }; 0044 0045 class AnalitzaWrapper : public QObject 0046 { 0047 Q_OBJECT 0048 QML_NAMED_ELEMENT(Analitza) 0049 Q_PROPERTY(bool calculate READ isCalculate WRITE setCalculate NOTIFY isCalculateChanged) 0050 Q_PROPERTY(bool isCorrect READ isCorrect) 0051 Q_PROPERTY(QStringList errors READ errors) 0052 Q_PROPERTY(QSharedPointer<Analitza::Variables> variables READ variables WRITE setVariables) 0053 public: 0054 explicit AnalitzaWrapper(QObject* parent = nullptr); 0055 ~AnalitzaWrapper() override; 0056 0057 void setCalculate(bool calc); 0058 bool isCalculate() const { return m_calc; } 0059 0060 Analitza::Analyzer* wrapped() const { return m_wrapped.data(); } 0061 0062 Q_SCRIPTABLE QVariant simplify(const QString& expression); 0063 0064 Q_SCRIPTABLE QVariant execute(const QString& expression); 0065 Q_SCRIPTABLE QVariant executeFunc(const QString& name, const QVariantList& args); 0066 Q_SCRIPTABLE QString unusedVariableName() const; 0067 Q_SCRIPTABLE QString dependenciesToLambda(const QString& expression) const; 0068 Q_SCRIPTABLE void insertVariable(const QString& name, const QString& expression) const; 0069 Q_SCRIPTABLE void removeVariable(const QString& name); 0070 0071 QStringList errors() const; 0072 bool isCorrect() const; 0073 0074 QSharedPointer<Analitza::Variables> variables() const { return m_vars; } 0075 void setVariables(const QSharedPointer<Analitza::Variables> &v); 0076 0077 Q_SIGNALS: 0078 void isCalculateChanged(bool isCalculate); 0079 0080 private: 0081 void initWrapped(); 0082 0083 QScopedPointer<Analitza::Analyzer> m_wrapped; 0084 QSharedPointer<Analitza::Variables> m_vars; 0085 bool m_calc; 0086 }; 0087 0088 class VariablesModelForeign 0089 { 0090 Q_GADGET 0091 QML_FOREIGN(Analitza::VariablesModel) 0092 QML_NAMED_ELEMENT(VariablesModel) 0093 }; 0094 0095 class OperatorsModelForeign 0096 { 0097 Q_GADGET 0098 QML_NAMED_ELEMENT(OperatorsModel) 0099 QML_FOREIGN(OperatorsModel) 0100 }; 0101 0102 class PlotsModelForeign 0103 { 0104 Q_GADGET 0105 QML_NAMED_ELEMENT(PlotsModel) 0106 QML_FOREIGN(Analitza::PlotsModel) 0107 }; 0108 0109 #endif // ANALITZAWRAPPER_H