summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-sheet/sheet.h
authorhayzel <hayzel>2004-01-07 08:08:29 (UTC)
committer hayzel <hayzel>2004-01-07 08:08:29 (UTC)
commit08bc72c34cae85e5cc6541c9daaeba121597c961 (patch) (side-by-side diff)
treedf5b263a84099ffdf8e0b86fda9a9fe61b90d30e /noncore/apps/opie-sheet/sheet.h
parent656e80e7b35c4aefd49ffe7756d895f4e7370de1 (diff)
downloadopie-08bc72c34cae85e5cc6541c9daaeba121597c961.zip
opie-08bc72c34cae85e5cc6541c9daaeba121597c961.tar.gz
opie-08bc72c34cae85e5cc6541c9daaeba121597c961.tar.bz2
January 7, 2004
* Release by hayzel (koppermind@panafonet.gr) This version has many valuable changes, though It may have some annoying bugs. Please if you are interested in opie-sheet try it hard, so I can fix some of them. Also If you want some other functions that must be here and are missing feel free to ask them. (no financial functions please. :) I really hate them ) -Fixed a bug with non closed parenthesis editing&recalculation infinite loop. -Added support for functions that can parse parameters not ONLY as numbers but also as strings. -Added many functions that cover many computational topics rendering opie-sheet a computational tool-spreadsheet at last. (total 90 functions!) -Maintained compatibility with the opie-fileformat. -New icons. -Found that the DataParser was not a real RPN compiler of the expressions. In fact it was returning faulty results in calculations, in both binary or unary operations. A1-A2-A3 was parsed as A1-(A2-A3). A1 was parsed as A1. -Added new class "Expression" a general Parser for spreadsheet-expression. Imported from an old C# project of mine. -Now can also parse <>=!%&^|"" in expressions. -Added experimental Excel File format import!. The opie-sheet can import any excel file in BIFF7/BIFF8 format. These formats are used in Excel XP,2000,95. The Excel Importer class is in a good coding level.. BUT it is not complete. Only strings,numbers,formulas are imported. Not formatting rules. Not all the functions are converted in the functions of opie-sheet. Infact FEW functions are converted. -Fixed a bug with Sheet Recalculation. Added ReCalc() function. Opie-sheet was calculating wrong the values of expression in opening/importing. if a value needed was not loaded yet in the time of calculation. Solved with ReCalc() each time the active sheet is changing. *known issues: -if someone enters directly text as parameter to a string function the text renders as uppercase due to the calculation engine that uppercases all the parsing sentence. -randbetween return only integer part random... if both limit numbers are integers. -skew and kurt function give different results compared to kspread-oofice equivalents. -unstable parser Excel Class -string vars and string functions are not correctly handled by excel importer. -unicode strings are converted FINE in QString unicode format, but cannot be rendered fine if a suitable unicode font is not setuped as the default string. So the string is junked in the opie-sheet and may crash the parser. *TODOs: -surelly a much full-stable excel importer. -Cell Manipulation of many Data is really slow.... must change the QList data type. To a structure more efficient. -maybe some more functions. -maybe some kind of charts drawing? -maybe kspread or ooffice files import/export.
Diffstat (limited to 'noncore/apps/opie-sheet/sheet.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-sheet/sheet.h93
1 files changed, 84 insertions, 9 deletions
diff --git a/noncore/apps/opie-sheet/sheet.h b/noncore/apps/opie-sheet/sheet.h
index f4e9d38..41f1b86 100644
--- a/noncore/apps/opie-sheet/sheet.h
+++ b/noncore/apps/opie-sheet/sheet.h
@@ -34,6 +34,52 @@ typedef struct typeCellData
QString data;
};
+
+#define NONE_TOKEN 0
+#define NUMBER_TOKEN 1
+#define VARIABLE_TOKEN 2
+#define FUNCTION_TOKEN 3
+#define SYMBOL_TOKEN 4
+#define STRING_TOKEN 5
+
+class Expression
+{
+public:
+ QString Body;
+ QList<QString> CompiledBody;
+ QList<int> CompiledBodyType;
+ QString SYMBOL;
+ QString MATHSYMBOL;
+ QArray<int> ArgsOfFunc;
+ int FuncDepth;
+ bool ErrorFound;
+ int n; // holds the current parser position
+ QString chunk; // the piece in the parser we are on
+ int SymbGroup; // the current type
+
+ QString InExpr;
+
+ QChar chunk0(void); // retunrs the first char of expression;
+ Expression(QString expr1);// constructor
+
+ bool isSymbol(QChar ch);
+ bool isMathSymbol(QChar ch);
+ void GetNext();
+ void First();
+ void Third();
+ void Fourth();
+ void Fifth();
+ void Sixth();
+ void Seventh();
+ void Eighth();
+ void Ninth();
+
+ bool Expression::Parse(); //parses the expression in RPN format;
+
+};
+
+
+
class Sheet: public QTable
{
Q_OBJECT
@@ -50,21 +96,50 @@ class Sheet: public QTable
QStringList listDataParser;
// Private functions
- int getOperatorPriority(char oper);
bool findRowColumn(const QString &variable, int *row, int *col, bool giveError=FALSE);
QString findCellName(int row, int col);
bool findRange(const QString &variable1, const QString &variable2, int *row1, int *col1, int *row2, int *col2);
- double calculateVariable(const QString &variable);
- double calculateFunction(const QString &function, const QString &parameters);
- QChar popCharStack(QStack<QChar> *stackChars);
- QString popStringStack(QStack<QString> *stackStrings);
+ QString calculateVariable(const QString &variable);
+ QString calculateFunction(const QString &function, const QString &parameters, int NumOfParams);
QString getParameter(const QString &parameters, int paramNo, bool giveError=FALSE, const QString funcName="");
QString dataParser(const QString &cell, const QString &data);
QString dataParserHelper(const QString &data);
typeCellData *createCellData(int row, int col);
typeCellData *findCellData(int row, int col);
- void pushCharStack(QStack<QChar> *stackChars, const QChar &character);
- void pushStringStack(QStack<QString> *stackStrings, const QString &string);
+
+
+//LOGICAL / INFO
+ double functionCountIf(const QString &param1, const QString &param2, const QString &param3);
+ double functionSumSQ(const QString &param1, const QString &param2); //sum of squares
+ QString functionIndex(const QString &param1, const QString &param2, int indx);
+//math functions computations
+ double BesselI0(double x);
+ double BesselI(int n, double x);
+ double BesselK0(double x);
+ double BesselI1(double x);
+ double BesselK1(double x);
+ double BesselK(int n, double x);
+ double BesselJ0(double x);
+ double BesselY0(double x);
+ double BesselJ1(double x);
+ double BesselY1(double x);
+ double BesselY(int n, double x);
+ double BesselJ(int n, double x);
+ double GammaLn(double xx);
+ double Factorial(double n);
+ double GammaP(double a, double x);
+ double GammaQ(double a,double x);
+ void GammaSeries(double *gamser, double a, double x, double *gln);
+ void GammaContinuedFraction(double *gammcf, double a, double x, double *gln);
+ double ErrorFunction(double x);
+ double ErrorFunctionComplementary(double x);
+ double Beta(double z, double w);
+ double BetaContinuedFraction(double a, double b, double x);
+ double BetaIncomplete(double a, double b, double x);
+ double functionVariance(const QString &param1, const QString &param2);
+ double functionVariancePopulation(const QString &param1, const QString &param2);
+ double functionSkew(const QString &param1, const QString &param2);
+ double functionKurt(const QString &param1, const QString &param2);
// Sheet/Qt parser functions
double functionSum(const QString &param1, const QString &param2);
@@ -79,14 +154,14 @@ class Sheet: public QTable
void viewportMouseMoveEvent(QMouseEvent *e);
void viewportMouseReleaseEvent(QMouseEvent *e);
- private slots:
+ public slots:
void slotCellSelected(int row, int col);
void slotCellChanged(int row, int col);
public:
Sheet(int numRows, int numCols, QWidget *parent);
~Sheet();
-
+ void ReCalc(void);
void setData(const QString &data);
QString getData();