summaryrefslogtreecommitdiff
path: root/noncore/tools/calc2/main/engine.h
Side-by-side diff
Diffstat (limited to 'noncore/tools/calc2/main/engine.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/calc2/main/engine.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/noncore/tools/calc2/main/engine.h b/noncore/tools/calc2/main/engine.h
new file mode 100644
index 0000000..15c9aa1
--- a/dev/null
+++ b/noncore/tools/calc2/main/engine.h
@@ -0,0 +1,111 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include <qwidget.h>
+#include <qstack.h> // Instruction stack
+#include <qstring.h> // Display
+#include "instruction.h"
+
+// Possible states
+enum State {
+ sStart, // start inputting a new number
+ sAppend, // continue inputting a number
+ sError
+};
+
+// State machine
+class Engine:public QWidget {
+
+Q_OBJECT
+public:
+ Engine (QWidget * parent = 0, const char *name = 0):QWidget (parent, name) {
+ hardReset();
+ setRepresentation(rDec);
+ };
+
+ ~Engine () { };
+
+ void immediateInstruction (Instruction *);
+ void pushInstruction (Instruction *);
+ void eval ();
+
+ void pushValue (char);
+ void del ();
+
+ void openBrace ();
+ void closeBrace ();
+
+ void softReset () { // clears the number being inputted
+ decimalPlaces = -1;
+ clearData(&num);
+ displayData(num);
+ state = sStart;
+ };
+ void hardReset () { // a "real" reset of the stack
+ stack.clear ();
+ memClear();
+ braces = 0;
+ softReset ();
+ };
+
+ void memSave () {
+ mem = num;
+ };
+ void memRecall () {
+ num = mem;
+ state = sStart;
+ displayData(num);
+ };
+ void memClear () {
+ clearData(&mem);
+ };
+
+ // rFraction will require a special display enabled here
+ void setRepresentation(Representation);
+
+ // you dont want to call this
+ void decBraces(void){ braces--; };
+
+private:
+ void displayData(Data d);
+ void clearData(Data *d);
+ int calcBase();
+ Data evalStack (Data, bool);
+ Data num,mem;
+ State state;
+ QStack < Instruction > stack;
+ Representation currentRep;
+ int braces, decimalPlaces; // count of finishing 0's in num
+ QString displayString; // saves instatiating it over and over
+
+signals:
+ void display(const QString &);
+ void display(double); // could get rid of this and
+ // use a QLabel instead.
+ void setHexMode();
+ void setBinMode();
+ void setDecMode();
+ void setOctMode();
+};
+
+#endif