summaryrefslogtreecommitdiffstats
path: root/katapult/plugins/catalogs/calculatorcatalog/expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'katapult/plugins/catalogs/calculatorcatalog/expression.cpp')
-rw-r--r--katapult/plugins/catalogs/calculatorcatalog/expression.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/katapult/plugins/catalogs/calculatorcatalog/expression.cpp b/katapult/plugins/catalogs/calculatorcatalog/expression.cpp
new file mode 100644
index 0000000..37e80bc
--- /dev/null
+++ b/katapult/plugins/catalogs/calculatorcatalog/expression.cpp
@@ -0,0 +1,94 @@
+/***************************************************************************
+ * Copyright (C) 2005 Tobi Vollebregt *
+ * tobivollebregt@gmail.com *
+ * *
+ * Copyright (C) 2005 by Joe Ferris *
+ * jferris@optimistictech.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <kservice.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+
+#include "calculatorcatalog.h"
+#include "expression.h"
+
+
+Expression::Expression(CalculatorCatalog* catalog, const QString& text): KatapultItem(), _catalog(catalog), _text(text)
+{
+ evaluate();
+}
+
+QPixmap Expression::icon(int size) const
+{
+ const char* icon = "checkmark";
+ if (_parseError) {
+ icon = "no";
+ }
+ return KGlobal::iconLoader()->loadIcon(icon, KIcon::NoGroup, size);
+}
+
+QString Expression::text() const
+{
+ return _text;
+}
+
+void Expression::setText(const QString& text)
+{
+ _text = text;
+ evaluate();
+}
+
+double Expression::result() const
+{
+ return _result;
+}
+
+bool Expression::parseError() const
+{
+ return _parseError;
+}
+
+CalculatorCatalog* Expression::catalog() const
+{
+ return _catalog;
+}
+
+void Expression::evaluate(bool assignments) const
+{
+ if (!_text.isEmpty()) {
+ QString t = _text;
+ CalculatorCatalog::ParserControl cntrl;
+ cntrl.expression = t.replace(',', '.').ascii();
+ cntrl.catalog = _catalog;
+ cntrl.assignments = assignments;
+ if (yyparse(&cntrl) == 0) {
+ _result = cntrl.result;
+ _parseError = false;
+ if (assignments) {
+ _catalog->setVar(_catalog->getVarID("ans"), _result);
+ }
+ } else {
+ _parseError = true;
+ }
+ } else {
+ _parseError = true;
+ }
+}
+
+#include "expression.moc"