File indexing completed on 2024-04-28 16:44:43

0001 /*
0002  * SPDX-FileCopyrightText: 2007, 2008 Petri Damstén <damu@iki.fi>
0003  * SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef CONVERTERRUNNER_H
0009 #define CONVERTERRUNNER_H
0010 
0011 #include <KRunner/AbstractRunner>
0012 #include <KUnitConversion/Converter>
0013 #include <KUnitConversion/UnitCategory>
0014 #include <QAction>
0015 #include <QLocale>
0016 #include <QRegularExpression>
0017 
0018 using namespace Plasma;
0019 
0020 /**
0021  * This class converts values to different units.
0022  */
0023 class ConverterRunner : public AbstractRunner
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     ConverterRunner(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args);
0029     void init() override;
0030     void insertCompatibleUnits();
0031     ~ConverterRunner() override;
0032 
0033     void match(RunnerContext &context) override;
0034     void run(const RunnerContext &context, const QueryMatch &match) override;
0035     QMimeData *mimeDataForMatch(const QueryMatch &match) override;
0036 
0037 private:
0038     std::unique_ptr<KUnitConversion::Converter> converter;
0039     const QLocale locale;
0040     QRegularExpression valueRegex;
0041     QRegularExpression unitSeperatorRegex;
0042     /** To convert currency symbols back to ISO string and handle case sensitive units */
0043     QMap<QString, QString> compatibleUnits;
0044 
0045     QList<QAction *> actionList;
0046 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0047     QPair<bool, double> stringToDouble(const QStringRef &value);
0048 #else
0049     QPair<bool, double> stringToDouble(const QStringView &value);
0050 #endif
0051     QPair<bool, double> getValidatedNumberValue(const QString &value);
0052     QList<KUnitConversion::Unit> createResultUnits(QString &outputUnitString, const KUnitConversion::UnitCategory &category);
0053 };
0054 
0055 #endif