diff options
author | Weblate <noreply@weblate.org> | 2016-10-17 06:30:04 +0000 |
---|---|---|
committer | Weblate <noreply@weblate.org> | 2016-10-17 06:30:04 +0000 |
commit | 15f388cffbbf3b331f38ea761995dbb98534228a (patch) | |
tree | 8d2d406cb57eaf11c44d52272510b9982ecd67ec /src-qt5/desktop-utils/lumina-calculator/mainUI.cpp | |
parent | Translated using Weblate (lumina_OPEN@hu (generated)) (diff) | |
parent | Oops - forgot to save the fallback CPU temperature reading into the variable. (diff) | |
download | lumina-15f388cffbbf3b331f38ea761995dbb98534228a.tar.gz lumina-15f388cffbbf3b331f38ea761995dbb98534228a.tar.bz2 lumina-15f388cffbbf3b331f38ea761995dbb98534228a.zip |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'src-qt5/desktop-utils/lumina-calculator/mainUI.cpp')
-rw-r--r-- | src-qt5/desktop-utils/lumina-calculator/mainUI.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src-qt5/desktop-utils/lumina-calculator/mainUI.cpp b/src-qt5/desktop-utils/lumina-calculator/mainUI.cpp new file mode 100644 index 00000000..244a7f3e --- /dev/null +++ b/src-qt5/desktop-utils/lumina-calculator/mainUI.cpp @@ -0,0 +1,133 @@ +//=========================================== +// Lumina Desktop source code +// Copyright (c) 2016, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "mainUI.h" +#include "ui_mainUI.h" + +#include <QDebug> +#include <LuminaXDG.h> + +#define VALIDSYMBOLS QString("+-*x/.") + +#include <math.h> +#define BADVALUE NAN + +mainUI::mainUI() : QMainWindow(), ui(new Ui::mainUI()){ + ui->setupUi(this); + connect(ui->tool_clear, SIGNAL(clicked()), this, SLOT(clear_calc()) ); + connect(ui->line_eq, SIGNAL(returnPressed()), this, SLOT(start_calc()) ); + connect(ui->button_1, SIGNAL (clicked()), this, SLOT (captureButton1())); + connect(ui->button_2, SIGNAL (clicked()), this, SLOT (captureButton2())); + connect(ui->button_3, SIGNAL (clicked()), this, SLOT (captureButton3())); + connect(ui->button_4, SIGNAL (clicked()), this, SLOT (captureButton4())); + connect(ui->button_5, SIGNAL (clicked()), this, SLOT (captureButton5())); + connect(ui->button_6, SIGNAL (clicked()), this, SLOT (captureButton6())); + connect(ui->button_7, SIGNAL (clicked()), this, SLOT (captureButton7())); + connect(ui->button_8, SIGNAL (clicked()), this, SLOT (captureButton8())); + connect(ui->button_9, SIGNAL (clicked()), this, SLOT (captureButton9())); + connect(ui->button_0, SIGNAL (clicked()), this, SLOT (captureButton0())); + connect(ui->button_Subtract, SIGNAL (clicked()), this, SLOT (captureButtonSubtract())); + connect(ui->button_Add, SIGNAL (clicked()), this, SLOT (captureButtonAdd())); + connect(ui->button_Divide, SIGNAL (clicked()), this, SLOT (captureButtonDivide())); + connect(ui->button_Multiply, SIGNAL (clicked()), this, SLOT (captureButtonMultiply())); + connect(ui->button_Decimal, SIGNAL (clicked()), this, SLOT (captureButtonDecimal())); + connect(ui->button_Equal, SIGNAL (clicked()), this, SLOT (start_calc())); + + this->setWindowTitle(tr("Calculator")); + this->setWindowIcon( LXDG::findIcon("accessories-calculator","") ); + ui->line_eq->setFocus(); +} + +mainUI::~mainUI(){ +} + +void mainUI::start_calc(){ + if(ui->line_eq->text().isEmpty()){ return; } //nothing to do + double result = strToNumber(ui->line_eq->text()); + if(result!=result){ return; } //bad calculation - NaN's values are special in that they don't equal itself + QString res = "%1 \t(%2)"; + ui->list_results->addItem(res.arg(QString::number(result), ui->line_eq->text())); + ui->list_results->scrollToItem( ui->list_results->item( ui->list_results->count()-1) ); + ui->line_eq->clear(); +} + +void mainUI::clear_calc(){ + ui->line_eq->clear(); + ui->line_eq->setFocus(); +} + +void mainUI::captureButton1(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_1->text()); } +void mainUI::captureButton2(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_2->text()); } +void mainUI::captureButton3(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_3->text()); } +void mainUI::captureButton4(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_4->text()); } +void mainUI::captureButton5(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_5->text()); } +void mainUI::captureButton6(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_6->text()); } +void mainUI::captureButton7(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_7->text()); } +void mainUI::captureButton8(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_8->text()); } +void mainUI::captureButton9(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_9->text()); } +void mainUI::captureButton0(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_0->text()); } +void mainUI::captureButtonSubtract(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Subtract->text()); } +void mainUI::captureButtonAdd(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Add->text()); } +void mainUI::captureButtonDivide(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Divide->text()); } +void mainUI::captureButtonMultiply(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Multiply->text()); } +//void mainUI::captureButtonEqual(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Equal->text()); } +void mainUI::captureButtonDecimal(){ ui->line_eq->setText(ui->line_eq->text() += ui->button_Decimal->text()); } + +double mainUI::performOperation(double LHS, double RHS, QChar symbol){ + if(symbol== '+'){ return (LHS+RHS); } + else if(symbol== '-'){ return (LHS-RHS); } + else if(symbol== '*' || symbol=='x'){ return (LHS*RHS); } + else if(symbol== '/'){ return (LHS/RHS); } + //else if(symbol== '%'){ return (LHS%RHS); } + qDebug() << "Invalid Symbol:" << symbol; + return BADVALUE; +} + +double mainUI::strToNumber(QString str){ + //Look for perentheses first + //qDebug() << "String to Number: " << str; + if(str.indexOf("(")>=0){ + //qDebug() << "Found Parenthesis"; + int start = str.indexOf("("); + int need = 1; + int end = -1; + for(int i=start+1; i<str.length() && need>0; i++){ + if(str[i]=='('){ need++; } + else if(str[i]==')'){ need--; } + //qDebug() << "Check char:" << str[i] << need; + if(need==0){ end = i; } + } + if(end<start){ return BADVALUE; } + //qDebug() << "Replace value:" << str << start << end << str.mid(start+1,end-start); + str.replace(start, end-start+1, QString::number( strToNumber( str.mid(start+1, end-start-1)) ) ); + //qDebug() << "Replaced:" << str; + } + // ------------------------------------- + // NOTE: the order of operations appears reversed here due to the recursive nature of the algorithm + // the first operation *found* is actually the last one *evaluated* + // -------------------------------------- + //Now look for add/subtract + int sym = -1; + QStringList symbols; symbols << "+" << "-"; + for(int i=0; i<symbols.length(); i++){ + int tmp = str.indexOf(symbols[i]); + if(sym < tmp){ sym = tmp; } + } + if(sym>0){ return performOperation( strToNumber(str.left(sym)), strToNumber(str.right(str.length()-sym-1)), str[sym]); } + if(sym==0){ return BADVALUE; } + //Now look for multiply/divide + symbols.clear(); symbols << "x" << "*" << "/"; + for(int i=0; i<symbols.length(); i++){ + int tmp = str.indexOf(symbols[i]); + if(sym < tmp){ sym = tmp; } + } + if(sym>0){ return performOperation( strToNumber(str.left(sym)), strToNumber(str.right(str.length()-sym-1)), str[sym]); } + if(sym==0){ return BADVALUE; } + + //Could not find any operations - must be a raw number + //qDebug() << "Found Number:" << str.toDouble(); + return str.toDouble(); +} |