File indexing completed on 2024-05-12 05:38:19

0001 /*
0002     SPDX-FileCopyrightText: 2007 Barış Metin <baris@pardus.org.tr>
0003     SPDX-FileCopyrightText: 2010 Matteo Agostinelli <agostinelli@gmail.com>
0004     SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-only
0007 */
0008 
0009 #pragma once
0010 
0011 #include <QMimeData>
0012 
0013 class QalculateEngine;
0014 
0015 #include <KRunner/AbstractRunner>
0016 #include <KRunner/Action>
0017 
0018 /**
0019  * This class evaluates the basic expressions given in the interface.
0020  */
0021 class CalculatorRunner : public KRunner::AbstractRunner
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     CalculatorRunner(QObject *parent, const KPluginMetaData &metaData);
0027     ~CalculatorRunner() override;
0028 
0029     void match(KRunner::RunnerContext &context) override;
0030 
0031 protected Q_SLOTS:
0032     void run(const KRunner::RunnerContext &context, const KRunner::QueryMatch &match) override;
0033     QMimeData *mimeDataForMatch(const KRunner::QueryMatch &match) override;
0034 
0035 private:
0036     QString calculate(const QString &term, bool *isApproximate, int base, const QString &customBase);
0037     void userFriendlyMultiplication(QString &cmd);
0038     void userFriendlySubstitutions(QString &cmd);
0039 
0040     std::unique_ptr<QalculateEngine> m_engine;
0041     const KRunner::Actions m_actions;
0042 };