author | hayzel <hayzel> | 2004-01-07 08:08:29 (UTC) |
---|---|---|
committer | hayzel <hayzel> | 2004-01-07 08:08:29 (UTC) |
commit | 08bc72c34cae85e5cc6541c9daaeba121597c961 (patch) (side-by-side diff) | |
tree | df5b263a84099ffdf8e0b86fda9a9fe61b90d30e /noncore/apps/opie-sheet/sheet.h | |
parent | 656e80e7b35c4aefd49ffe7756d895f4e7370de1 (diff) | |
download | opie-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) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-sheet/sheet.h | 93 |
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 ¶meters); - QChar popCharStack(QStack<QChar> *stackChars); - QString popStringStack(QStack<QString> *stackStrings); + QString calculateVariable(const QString &variable); + QString calculateFunction(const QString &function, const QString ¶meters, int NumOfParams); QString getParameter(const QString ¶meters, 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 ¶m1, const QString ¶m2, const QString ¶m3); + double functionSumSQ(const QString ¶m1, const QString ¶m2); //sum of squares + QString functionIndex(const QString ¶m1, const QString ¶m2, 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 ¶m1, const QString ¶m2); + double functionVariancePopulation(const QString ¶m1, const QString ¶m2); + double functionSkew(const QString ¶m1, const QString ¶m2); + double functionKurt(const QString ¶m1, const QString ¶m2); // Sheet/Qt parser functions double functionSum(const QString ¶m1, const QString ¶m2); @@ -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(); |