File indexing completed on 2024-05-12 05:29: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 <KRunner/Action>
0013 #include <KUnitConversion/Converter>
0014 #include <KUnitConversion/UnitCategory>
0015 #include <QLocale>
0016 #include <QRegularExpression>
0017 #include <QTimer>
0018 
0019 using namespace KRunner;
0020 
0021 /**
0022  * This class converts values to different units.
0023  */
0024 class ConverterRunner : public AbstractRunner
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     ConverterRunner(QObject *parent, const KPluginMetaData &metaData);
0030     void init() override;
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 Q_SLOTS:
0038     void updateCompatibleUnits();
0039 
0040 private:
0041     std::unique_ptr<KUnitConversion::Converter> converter;
0042     const QLocale locale;
0043     QRegularExpression valueRegex;
0044     QRegularExpression unitSeperatorRegex;
0045     /** To convert currency symbols back to ISO string and handle case sensitive units */
0046     QMap<QString, QString> compatibleUnits;
0047 
0048     QTimer m_currencyUpdateTimer;
0049 
0050     const KRunner::Actions actionList;
0051     QPair<bool, double> stringToDouble(const QStringView &value);
0052     QPair<bool, double> getValidatedNumberValue(const QString &value);
0053     QList<KUnitConversion::Unit> createResultUnits(QString &outputUnitString, const KUnitConversion::UnitCategory &category);
0054 };
0055 
0056 #endif