File indexing completed on 2024-04-21 14:42:57

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