qalc
This commit is contained in:
@@ -43,6 +43,7 @@ qml_module(ZShell
|
|||||||
imageanalyser.hpp imageanalyser.cpp
|
imageanalyser.hpp imageanalyser.cpp
|
||||||
requests.hpp requests.cpp
|
requests.hpp requests.cpp
|
||||||
toaster.hpp toaster.cpp
|
toaster.hpp toaster.cpp
|
||||||
|
qalculator.hpp qalculator.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
Qt::Quick
|
Qt::Quick
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#include "qalculator.hpp"
|
||||||
|
|
||||||
|
#include <libqalculate/qalculate.h>
|
||||||
|
|
||||||
|
namespace ZShell {
|
||||||
|
|
||||||
|
Qalculator::Qalculator(QObject* parent)
|
||||||
|
: QObject(parent) {
|
||||||
|
if (!CALCULATOR) {
|
||||||
|
new Calculator();
|
||||||
|
CALCULATOR->loadExchangeRates();
|
||||||
|
CALCULATOR->loadGlobalDefinitions();
|
||||||
|
CALCULATOR->loadLocalDefinitions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Qalculator::eval(const QString& expr, bool printExpr) const {
|
||||||
|
if (expr.isEmpty()) {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
EvaluationOptions eo;
|
||||||
|
PrintOptions po;
|
||||||
|
|
||||||
|
std::string parsed;
|
||||||
|
std::string result = CALCULATOR->calculateAndPrint(
|
||||||
|
CALCULATOR->unlocalizeExpression(expr.toStdString(), eo.parse_options), 100, eo, po, &parsed);
|
||||||
|
|
||||||
|
std::string error;
|
||||||
|
while (CALCULATOR->message()) {
|
||||||
|
if (!CALCULATOR->message()->message().empty()) {
|
||||||
|
if (CALCULATOR->message()->type() == MESSAGE_ERROR) {
|
||||||
|
error += "error: ";
|
||||||
|
} else if (CALCULATOR->message()->type() == MESSAGE_WARNING) {
|
||||||
|
error += "warning: ";
|
||||||
|
}
|
||||||
|
error += CALCULATOR->message()->message();
|
||||||
|
}
|
||||||
|
CALCULATOR->nextMessage();
|
||||||
|
}
|
||||||
|
if (!error.empty()) {
|
||||||
|
return QString::fromStdString(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (printExpr) {
|
||||||
|
return QString("%1 = %2").arg(parsed).arg(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString::fromStdString(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ZShell
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qqmlintegration.h>
|
||||||
|
|
||||||
|
namespace ZShell {
|
||||||
|
|
||||||
|
class Qalculator : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
QML_ELEMENT
|
||||||
|
QML_SINGLETON
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit Qalculator(QObject* parent = nullptr);
|
||||||
|
|
||||||
|
Q_INVOKABLE QString eval(const QString& expr, bool printExpr = true) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ZShell
|
||||||
Reference in New Issue
Block a user