author | ar <ar> | 2004-06-12 09:24:00 (UTC) |
---|---|---|
committer | ar <ar> | 2004-06-12 09:24:00 (UTC) |
commit | 7a62e8e3601ee98f5f06261c361fe8132334cd56 (patch) (side-by-side diff) | |
tree | 72e1e68878e32c70140fe1de478bced96670e348 /noncore/apps/opie-sheet/sheet.cpp | |
parent | 3fbf3cb264200c5ac11dbef43a51f3ab2a969587 (diff) | |
download | opie-7a62e8e3601ee98f5f06261c361fe8132334cd56.zip opie-7a62e8e3601ee98f5f06261c361fe8132334cd56.tar.gz opie-7a62e8e3601ee98f5f06261c361fe8132334cd56.tar.bz2 |
- rename sheet-qt -> opie-sheet
- format source code for a better readability
Diffstat (limited to 'noncore/apps/opie-sheet/sheet.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-sheet/sheet.cpp | 122 |
1 files changed, 85 insertions, 37 deletions
diff --git a/noncore/apps/opie-sheet/sheet.cpp b/noncore/apps/opie-sheet/sheet.cpp index 88847da..477c982 100644 --- a/noncore/apps/opie-sheet/sheet.cpp +++ b/noncore/apps/opie-sheet/sheet.cpp @@ -1,25 +1,47 @@ -/*************************************************************************** - * * - * 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 file is part of the Opie Project + .=l. Copyright (C) 2004 Opie Developer Team <opie-devel@handhelds.org> + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. 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 +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /* * Opie Sheet (formerly Sheet/Qt) * by Serdar Ozler <sozler@sitebest.com> */ #include "sheet.h" +/* QT */ #include <qmessagebox.h> + +/* STD */ #include <math.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #define DEFAULT_COL_WIDTH 50 Sheet::Sheet(int numRows, int numCols, QWidget *parent) @@ -43,18 +65,17 @@ Sheet::Sheet(int numRows, int numCols, QWidget *parent) horizontalHeader()->setLabel(i, getHeaderString(i+1), DEFAULT_COL_WIDTH); connect(this, SIGNAL(currentChanged(int,int)), this, SLOT(slotCellSelected(int,int))); connect(this, SIGNAL(valueChanged(int,int)), this, SLOT(slotCellChanged(int,int))); } Sheet::~Sheet() -{ -} +{} typeCellData *Sheet::findCellData(int row, int col) { typeCellData *tempCellData; for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) { if (tempCellData->row==row && tempCellData->col==col) return tempCellData; } @@ -62,17 +83,18 @@ typeCellData *Sheet::findCellData(int row, int col) } void Sheet::slotCellSelected(int row, int col) { typeCellData *cellData=findCellData(row, col); if (cellData) { emit currentDataChanged(cellData->data); - }else + } + else emit currentDataChanged(""); } typeCellData *Sheet::createCellData(int row, int col) { if (row<0 || col<0) return NULL; typeCellData *cellData=new typeCellData; cellData->row=row; @@ -223,34 +245,36 @@ double Sheet::BesselI0(double x) //Returns the modi ed Bessel function I0(x) for any real x. double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=1.0+y*(3.5156229+y*(3.0899424+y*(1.2067492 +y*(0.2659732+y*(0.360768e-1+y*0.45813e-2))))); - }else + } + else { y=3.75/ax; ans=(exp(ax)/sqrt(ax))*(0.39894228+y*(0.1328592e-1 +y*(0.225319e-2+y*(-0.157565e-2+y*(0.916281e-2 +y*(-0.2057706e-1+y*(0.2635537e-1+y*(-0.1647633e-1 +y*0.392377e-2)))))))); } return ans; }; double Sheet::BesselI1(double x) { double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=ax*(0.5+y*(0.87890594+y*(0.51498869+y*(0.15084934 +y*(0.2658733e-1+y*(0.301532e-2+y*0.32411e-3)))))); - } else + } + else { y=3.75/ax; ans=0.2282967e-1+y*(-0.2895312e-1+y*(0.1787654e-1 -y*0.420059e-2)); ans=0.39894228+y*(-0.3988024e-1+y*(-0.362018e-2 +y*(0.163801e-2+y*(-0.1031555e-1+y*ans)))); ans *= (exp(ax)/sqrt(ax)); } return x < 0.0 ? -ans : ans; }; @@ -287,32 +311,34 @@ double Sheet::BesselI(int n, double x) double Sheet::BesselK0(double x) { double y,ans; if (x <= 2.0) { y=x*x/4.0; ans=(-log(x/2.0)*BesselI0(x))+(-0.57721566+y*(0.42278420 +y*(0.23069756+y*(0.3488590e-1+y*(0.262698e-2 +y*(0.10750e-3+y*0.74e-5)))))); - } else + } + else { y=2.0/x; ans=(exp(-x)/sqrt(x))*(1.25331414+y*(-0.7832358e-1 +y*(0.2189568e-1+y*(-0.1062446e-1+y*(0.587872e-2 +y*(-0.251540e-2+y*0.53208e-3)))))); } return ans; }; double Sheet::BesselK1(double x) { double y,ans; if (x <= 2.0) { y=x*x/4.0; ans=(log(x/2.0)*BesselI1(x))+(1.0/x)*(1.0+y*(0.15443144 +y*(-0.67278579+y*(-0.18156897+y*(-0.1919402e-1 +y*(-0.110404e-2+y*(-0.4686e-4))))))); - } else + } + else { y=2.0/x; ans=(exp(-x)/sqrt(x))*(1.25331414+y*(0.23498619 +y*(-0.3655620e-1+y*(0.1504268e-1+y*(-0.780353e-2 +y*(0.325614e-2+y*(-0.68245e-3))))))); } return ans; }; double Sheet::BesselK(int n, double x) @@ -337,17 +363,18 @@ double Sheet::BesselJ0(double x) double ax,z; double xx,y,ans,ans1,ans2; if ((ax=fabs(x)) < 8.0) { y=x*x; ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7 +y*(-11214424.18+y*(77392.33017+y*(-184.9052456))))); ans2=57568490411.0+y*(1029532985.0+y*(9494680.718 +y*(59272.64853+y*(267.8532712+y*1.0)))); ans=ans1/ans2; - } else + } + else { z=8.0/ax; y=z*z; xx=ax-0.785398164; ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6))); ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+y*(0.7621095161e-6 -y*0.934935152e-7))); ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2); } @@ -359,17 +386,18 @@ double Sheet::BesselY0(double x) double z; double xx,y,ans,ans1,ans2; if (x < 8.0) { y=x*x; ans1 = -2957821389.0+y*(7062834065.0+y*(-512359803.6 +y*(10879881.29+y*(-86327.92757+y*228.4622733)))); ans2=40076544269.0+y*(745249964.8+y*(7189466.438 +y*(47447.26470+y*(226.1030244+y*1.0)))); ans=(ans1/ans2)+0.636619772*BesselJ0(x)*log(x); - } else + } + else { z=8.0/x; y=z*z; xx=x-0.785398164; ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6))); ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+y*(0.7621095161e-6 +y*(-0.934945152e-7)))); ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2); } @@ -381,17 +409,18 @@ double Sheet::BesselJ1(double x) double ax,z; double xx,y,ans,ans1,ans2; if ((ax=fabs(x)) < 8.0) { y=x*x; ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1 +y*(-2972611.439+y*(15704.48260+y*(-30.16036606)))))); ans2=144725228442.0+y*(2300535178.0+y*(18583304.74 +y*(99447.43394+y*(376.9991397+y*1.0)))); ans=ans1/ans2; - } else + } + else { z=8.0/ax; y=z*z; xx=ax-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4 +y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3 +y*(0.8449199096e-5+y*(-0.88228987e-6 +y*0.105787412e-6))); ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2); if (x < 0.0) ans = -ans; } return ans; @@ -402,17 +431,18 @@ double Sheet::BesselY1(double x) double z; double xx,y,ans,ans1,ans2; if (x < 8.0) { y=x*x; ans1=x*(-0.4900604943e13+y*(0.1275274390e13 +y*(-0.5153438139e11+y*(0.7349264551e9 +y*(-0.4237922726e7+y*0.8511937935e4))))); ans2=0.2499580570e14+y*(0.4244419664e12 +y*(0.3733650367e10+y*(0.2245904002e8 +y*(0.1020426050e6+y*(0.3549632885e3+y))))); ans=(ans1/ans2)+0.636619772*(BesselJ1(x)*log(x)-1.0/x); - } else + } + else { z=8.0/x; y=z*z; xx=x-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4 +y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3 +y*(0.8449199096e-5+y*(-0.88228987e-6 +y*0.105787412e-6))); ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2); } @@ -453,17 +483,18 @@ double Sheet::BesselJ(int n, double x) bj=BesselJ1(ax); for (j=1;j<n;j++) { bjp=j*tox*bj-bjm; bjm=bj; bj=bjp; } ans=bj; - } else + } + else { tox=2.0/ax; m=2*((n+(int) sqrt(ACC*n))/2); jsum=0; bjp=ans=sum=0.0; bj=1.0; for (j=m;j>0;j--) { @@ -513,17 +544,18 @@ double Sheet::GammaP(double a, double x) //void gcf(float *gammcf, float a, float x, float *gln); //void gser(float *gamser, float a, float x, float *gln); double gamser,gammcf,gln; if (x < 0.0 || a <= 0.0) return 0.0;//error if (x < (a+1.0)) { GammaSeries(&gamser,a,x,&gln); return gamser; - }else + } + else { GammaContinuedFraction(&gammcf,a,x,&gln); return 1.0-gammcf; } }; double Sheet::GammaQ(double a,double x) { @@ -539,31 +571,33 @@ void Sheet::GammaSeries(double *gamser, double a, double x, double *gln) int n; double sum,del,ap; *gln=GammaLn(a); if (x <= 0.0) { if (x < 0.0) return;//error *gamser=0.0; return; - } else + } + else { ap=a; del=sum=1.0/a; for (n=1;n<=ITMAX;n++) { ++ap; del *= x/ap; sum += del; if (fabs(del) < fabs(sum)*EPS) { *gamser=sum*exp(-x+a*log(x)-(*gln)); return; } - } return; + } + return; return; } }; void Sheet::GammaContinuedFraction(double *gammcf, double a, double x, double *gln) { double EPS=3.0e-7; @@ -657,17 +691,18 @@ double Sheet::functionSum(const QString ¶m1, const QString ¶m2) { for (row=row1; row<=row2; ++row) for (col=col1; col<=col2; ++col) { tempResult=text(row, col).toDouble(&ok); if (ok) result+=tempResult; } return result; - }else + } + else { double d1=0,d2=0; d1=calculateVariable(param1).toDouble(&ok); d2=calculateVariable(param2).toDouble(&ok); return(d1+d2); }; return 0; } @@ -784,17 +819,18 @@ double Sheet::functionSumSQ(const QString ¶m1, const QString ¶m2) { for (row=row1; row<=row2; ++row) for (col=col1; col<=col2; ++col) { tempResult=text(row, col).toDouble(&ok); if (ok) result+=tempResult*tempResult; } return result; - }else + } + else { double d1=0,d2=0; d1=calculateVariable(param1).toDouble(&ok); d2=calculateVariable(param2).toDouble(&ok); return(d1*d1+d2*d2); }; return 0; } @@ -814,17 +850,18 @@ double Sheet::functionMin(const QString ¶m1, const QString ¶m2) tempMin=text(row, col).toDouble(&ok); if (ok && (!init || tempMin<min)) { min=tempMin; init=TRUE; } } return min; - }else + } + else { double d1=0,d2=0; d1=calculateVariable(param1).toDouble(&ok); d2=calculateVariable(param2).toDouble(&ok); if(d1<d2) return(d1); else return(d2); }; return 0; } @@ -842,17 +879,18 @@ double Sheet::functionMax(const QString ¶m1, const QString ¶m2) tempMax=text(row, col).toDouble(&ok); if (ok && (!init || tempMax>max)) { max=tempMax; init=TRUE; } }; return max; - }else + } + else { double d1=0,d2=0; d1=calculateVariable(param1).toDouble(&ok); d2=calculateVariable(param2).toDouble(&ok); if(d1>d2) return(d1); else return(d2); }; return 0; } @@ -872,17 +910,18 @@ double Sheet::functionCount(const QString ¶m1, const QString ¶m2) { for (row=row1; row<=row2; ++row) for (col=col1; col<=col2; ++col) { text(row, col).toDouble(&ok); if (ok) ++divider; }; return divider; - }else + } + else { double d1=0,d2=0;int ii=0; d1=calculateVariable(param1).toDouble(&ok); if (ok) ii++; d2=calculateVariable(param2).toDouble(&ok); if (ok) ii++; return(ii); }; @@ -987,43 +1026,47 @@ QString Sheet::calculateFunction(const QString &func, const QString ¶meters, }; //LOGICAL / INFO if (function=="ISBLANK") { if(findRowColumn(getParameter(parameters, 0), &row, &col, FALSE)) { if(text(row,col).length()==0) val1=1; else val1=0; - }else + } + else { if(findRowColumn(calculateVariable(getParameter(parameters, 0)), &row,&col, FALSE)) { if(text(row,col).length()==0) val1=1; else val1=0; - }else + } + else { val1=0; }; }; return QString::number(val1); }; if (function=="ISNUMBER") { if(findRowColumn(getParameter(parameters, 0, TRUE, function), &row, &col, FALSE)) { val1=text(row,col).toDouble(&ok); if(ok) val1=1; else val1=0; - }else + } + else { if(findRowColumn(calculateVariable(getParameter(parameters, 0, TRUE, function)), &row,&col, FALSE)) { val1=text(row,col).toDouble(&ok); if(ok) val1=1; else val1=0; - }else + } + else { val1=0; }; }; return QString::number(val1); }; if (function=="AND") { @@ -1384,17 +1427,18 @@ QString Sheet::calculateFunction(const QString &func, const QString ¶meters, { //usage: IF(param1,param2,param3) //returns param4 if true(param1)/ param5 if false(param1) val1=getParameter(parameters, 0, TRUE, function).toDouble(&ok); if(val1==1.0) { s1=calculateVariable(getParameter(parameters, 1, TRUE, function)); return QString(s1); - }else + } + else { s1=calculateVariable(getParameter(parameters, 2, TRUE, function)); return QString(s1); }; }; if (function=="SUM") { //NumOfParams @@ -1547,47 +1591,50 @@ QString Sheet::calculateFunction(const QString &func, const QString ¶meters, { // POISSON DISTR(x,n,distr/desnt) val1=calculateVariable(getParameter(parameters, 0, TRUE, function)).toDouble(&ok); val2=calculateVariable(getParameter(parameters, 1, TRUE, function)).toDouble(&ok); vali=calculateVariable(getParameter(parameters, 2, TRUE, function)).toInt(&ok); if(vali==1) { return QString::number(GammaQ(floor(val1)+1, val2)); - }else + } + else { return QString::number(exp(-val2)*pow(val2,val1)/exp(GammaLn(val1+1.0))); }; }; if(function=="CHIDIST") { // POISSON CHIDIST(x,n,distr/density) val1=calculateVariable(getParameter(parameters, 0, TRUE, function)).toDouble(&ok); val2=calculateVariable(getParameter(parameters, 1, TRUE, function)).toDouble(&ok); vali=calculateVariable(getParameter(parameters, 2, TRUE, function)).toInt(&ok); if(vali==1) { return QString::number(GammaP(val2/2.0,val1*val1/2.0)); - } else + } + else { return QString::number( pow(val1,val2-1.0)*exp(-val1*val1/2)/ ( pow(2,val2/2.0-1.0)*exp(GammaLn(val2/2.0))) ); }; }; if(function=="CHI2DIST") { // POISSON CHISQUAREDIST(x,n,distr/density) val1=calculateVariable(getParameter(parameters, 0, TRUE, function)).toDouble(&ok); val2=calculateVariable(getParameter(parameters, 1, TRUE, function)).toDouble(&ok); vali=calculateVariable(getParameter(parameters, 2, TRUE, function)).toInt(&ok); if(vali==1) { return QString::number(GammaP(val2/2.0,val1/2.0)); - } else + } + else { return QString::number( pow(val1,val2/2.0-1.0)/(exp(val1/2.0)*pow(sqrt(2.0),val2)*exp(GammaLn(val2/2.0))) ); }; }; if(function=="BETAI") { @@ -2380,17 +2427,18 @@ void Expression::GetNext() } } else { break; } }//while }//else if -};//end function +} +;//end function void Expression::First() { GetNext(); if (!(chunk=="") && !ErrorFound) Third(); else ErrorFound = true; }; |