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