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