1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX 21 #define INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX 22 23 24 #include <com/sun/star/sheet/XAddIn.hpp> 25 #include <com/sun/star/lang/XServiceName.hpp> 26 #include <com/sun/star/lang/XServiceInfo.hpp> 27 #include <com/sun/star/sheet/addin/XAnalysis.hpp> 28 #include <com/sun/star/sheet/XCompatibilityNames.hpp> 29 30 #include <cppuhelper/implbase.hxx> 31 32 #include "analysishelper.hxx" 33 34 #include <memory> 35 36 namespace com::sun::star::lang { class XMultiServiceFactory; } 37 namespace com::sun::star::sheet { struct LocalizedName; } 38 39 css::uno::Reference< css::uno::XInterface > AnalysisAddIn_CreateInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& ); 40 41 42 class AnalysisAddIn : public cppu::WeakImplHelper< 43 css::sheet::XAddIn, 44 css::sheet::XCompatibilityNames, 45 css::sheet::addin::XAnalysis, 46 css::lang::XServiceName, 47 css::lang::XServiceInfo > 48 { 49 private: 50 css::lang::Locale aFuncLoc; 51 std::unique_ptr<css::lang::Locale[]> pDefLocales; 52 std::unique_ptr<sca::analysis::FuncDataList> pFD; 53 std::unique_ptr<double[]> pFactDoubles; 54 std::unique_ptr<sca::analysis::ConvertDataList> pCDL; 55 std::locale aResLocale; 56 57 sca::analysis::ScaAnyConverter aAnyConv; 58 59 /// @throws css::uno::RuntimeException 60 OUString GetFuncDescrStr(const char** pResId, sal_uInt16 nStrIndex); 61 void InitDefLocales(); 62 inline const css::lang::Locale& GetLocale( sal_uInt32 nInd ); 63 void InitData(); 64 65 /// Converts an Any to sal_Int32 in the range from 0 to 4 (date calculation mode). 66 /// 67 /// @throws css::uno::RuntimeException 68 /// @throws css::lang::IllegalArgumentException 69 sal_Int32 getDateMode( 70 const css::uno::Reference< css::beans::XPropertySet >& xPropSet, 71 const css::uno::Any& rAny ); 72 73 public: 74 explicit AnalysisAddIn( 75 const css::uno::Reference< css::uno::XComponentContext >& xContext ); 76 77 OUString AnalysisResId(const char* pId); 78 79 virtual ~AnalysisAddIn() override; 80 81 /// @throws css::uno::RuntimeException 82 /// @throws css::lang::IllegalArgumentException 83 double FactDouble( sal_Int32 nNum ); 84 85 static OUString getImplementationName_Static(); 86 static css::uno::Sequence< OUString > getSupportedServiceNames_Static(); 87 88 // XAddIn 89 virtual OUString SAL_CALL getProgrammaticFuntionName( const OUString& aDisplayName ) override; 90 virtual OUString SAL_CALL getDisplayFunctionName( const OUString& aProgrammaticName ) override; 91 virtual OUString SAL_CALL getFunctionDescription( const OUString& aProgrammaticName ) override; 92 virtual OUString SAL_CALL getDisplayArgumentName( const OUString& aProgrammaticFunctionName, sal_Int32 nArgument ) override; 93 virtual OUString SAL_CALL getArgumentDescription( const OUString& aProgrammaticFunctionName, sal_Int32 nArgument ) override; 94 virtual OUString SAL_CALL getProgrammaticCategoryName( const OUString& aProgrammaticFunctionName ) override; 95 virtual OUString SAL_CALL getDisplayCategoryName( const OUString& aProgrammaticFunctionName ) override; 96 97 // XCompatibilityNames 98 virtual css::uno::Sequence< css::sheet::LocalizedName > SAL_CALL getCompatibilityNames( const OUString& aProgrammaticName ) override; 99 100 // XLocalizable 101 virtual void SAL_CALL setLocale( const css::lang::Locale& eLocale ) override; 102 virtual css::lang::Locale SAL_CALL getLocale( ) override; 103 104 // XServiceName 105 virtual OUString SAL_CALL getServiceName( ) override; 106 107 // XServiceInfo 108 virtual OUString SAL_CALL getImplementationName( ) override; 109 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; 110 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; 111 112 // methods from own interfaces start here 113 114 // XAnalysis 115 // virtual double SAL_CALL get_Test( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nMode, double f1, double f2, double f3 ) throw( css::uno::RuntimeException ); 116 117 virtual sal_Int32 SAL_CALL getWorkday( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nDays, const css::uno::Any& aHDay ) override; 118 virtual double SAL_CALL getYearfrac( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nEndDate, const css::uno::Any& aMode ) override; 119 virtual sal_Int32 SAL_CALL getEdate( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nMonths ) override; 120 virtual sal_Int32 SAL_CALL getWeeknum( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nMode ) override; 121 virtual sal_Int32 SAL_CALL getEomonth( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nMonths ) override; 122 virtual sal_Int32 SAL_CALL getNetworkdays( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nStartDate, sal_Int32 nEndDate, const css::uno::Any& aHDay ) override; 123 124 virtual sal_Int32 SAL_CALL getIseven( sal_Int32 nVal ) override; 125 virtual sal_Int32 SAL_CALL getIsodd( sal_Int32 nVal ) override; 126 127 virtual double SAL_CALL getMultinomial( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< sal_Int32 > >& aVLst, const css::uno::Sequence< css::uno::Any >& aOptVLst ) override; 128 virtual double SAL_CALL getSeriessum( double fX, double fN, double fM, const css::uno::Sequence< css::uno::Sequence< double > >& aCoeffList ) override; 129 virtual double SAL_CALL getQuotient( double fNum, double fDenum ) override; 130 131 virtual double SAL_CALL getMround( double fNum, double fMult ) override; 132 virtual double SAL_CALL getSqrtpi( double fNum ) override; 133 134 virtual double SAL_CALL getRandbetween( double fMin, double fMax ) override; 135 136 virtual double SAL_CALL getGcd( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< double > >& aVLst, const css::uno::Sequence< css::uno::Any >& aOptVLst ) override; 137 virtual double SAL_CALL getLcm( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< double > >& aVLst, const css::uno::Sequence< css::uno::Any >& aOptVLst ) override; 138 139 virtual double SAL_CALL getBesseli( double fNum, sal_Int32 nOrder ) override; 140 virtual double SAL_CALL getBesselj( double fNum, sal_Int32 nOrder ) override; 141 virtual double SAL_CALL getBesselk( double fNum, sal_Int32 nOrder ) override; 142 virtual double SAL_CALL getBessely( double fNum, sal_Int32 nOrder ) override; 143 144 virtual OUString SAL_CALL getBin2Oct( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 145 virtual double SAL_CALL getBin2Dec( const OUString& aNum ) override; 146 virtual OUString SAL_CALL getBin2Hex( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 147 148 virtual OUString SAL_CALL getOct2Bin( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 149 virtual double SAL_CALL getOct2Dec( const OUString& aNum ) override; 150 virtual OUString SAL_CALL getOct2Hex( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 151 152 virtual OUString SAL_CALL getDec2Bin( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 fNum, const css::uno::Any& rPlaces ) override; 153 virtual OUString SAL_CALL getDec2Oct( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 fNum, const css::uno::Any& rPlaces ) override; 154 virtual OUString SAL_CALL getDec2Hex( const css::uno::Reference< css::beans::XPropertySet >& xOpt, double fNum, const css::uno::Any& rPlaces ) override; 155 156 virtual OUString SAL_CALL getHex2Bin( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 157 virtual double SAL_CALL getHex2Dec( const OUString& aNum ) override; 158 virtual OUString SAL_CALL getHex2Oct( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const OUString& aNum, const css::uno::Any& rPlaces ) override; 159 160 virtual sal_Int32 SAL_CALL getDelta( const css::uno::Reference< css::beans::XPropertySet >& xOpt, double fNum1, const css::uno::Any& rNum2 ) override; 161 162 virtual double SAL_CALL getErf( const css::uno::Reference< css::beans::XPropertySet >& xOpt, double fLowerLimit, const css::uno::Any& rUpperLimit ) override; 163 virtual double SAL_CALL getErfc( double fLowerLimit ) override; 164 165 virtual sal_Int32 SAL_CALL getGestep( const css::uno::Reference< css::beans::XPropertySet >& xOpt, double fNum, const css::uno::Any& rStep ) override; 166 167 virtual double SAL_CALL getFactdouble( sal_Int32 nNum ) override; 168 169 virtual double SAL_CALL getImabs( const OUString& aNum ) override; 170 virtual double SAL_CALL getImaginary( const OUString& aNum ) override; 171 virtual OUString SAL_CALL getImpower( const OUString& aNum, double fPower ) override; 172 virtual double SAL_CALL getImargument( const OUString& aNum ) override; 173 virtual OUString SAL_CALL getImcos( const OUString& aNum ) override; 174 virtual OUString SAL_CALL getImdiv( const OUString& aDivident, const OUString& aDivisor ) override; 175 virtual OUString SAL_CALL getImexp( const OUString& aNum ) override; 176 virtual OUString SAL_CALL getImconjugate( const OUString& aNum ) override; 177 virtual OUString SAL_CALL getImln( const OUString& aNum ) override; 178 virtual OUString SAL_CALL getImlog10( const OUString& aNum ) override; 179 virtual OUString SAL_CALL getImlog2( const OUString& aNum ) override; 180 virtual OUString SAL_CALL getImproduct( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< OUString > >& aNum1, const css::uno::Sequence< css::uno::Any >& aNumList ) override; 181 virtual double SAL_CALL getImreal( const OUString& aNum ) override; 182 virtual OUString SAL_CALL getImsin( const OUString& aNum ) override; 183 virtual OUString SAL_CALL getImsub( const OUString& aNum1, const OUString& aNum2 ) override; 184 virtual OUString SAL_CALL getImsum( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< OUString > >& aNum1, const css::uno::Sequence< css::uno::Any >& aFollowingPars ) override; 185 186 virtual OUString SAL_CALL getImsqrt( const OUString& aNum ) override; 187 virtual OUString SAL_CALL getImtan( const OUString& aNum ) override; 188 virtual OUString SAL_CALL getImsec( const OUString& aNum ) override; 189 virtual OUString SAL_CALL getImcsc( const OUString& aNum ) override; 190 virtual OUString SAL_CALL getImcot( const OUString& aNum ) override; 191 virtual OUString SAL_CALL getImsinh( const OUString& aNum ) override; 192 virtual OUString SAL_CALL getImcosh( const OUString& aNum ) override; 193 virtual OUString SAL_CALL getImsech( const OUString& aNum ) override; 194 virtual OUString SAL_CALL getImcsch( const OUString& aNum ) override; 195 virtual OUString SAL_CALL getComplex( double fReal, double fImaginary, const css::uno::Any& rSuffix ) override; 196 197 virtual double SAL_CALL getConvert( double fVal, const OUString& aFromUnit, const OUString& aToUnit ) override; 198 199 virtual double SAL_CALL getAmordegrc( const css::uno::Reference< css::beans::XPropertySet >&, double fCost, sal_Int32 nDate, sal_Int32 nFirstPer, double fRestVal, double fPer, double fRate, const css::uno::Any& rOptBase ) override; 200 virtual double SAL_CALL getAmorlinc( const css::uno::Reference< css::beans::XPropertySet >&, double fCost, sal_Int32 nDate, sal_Int32 nFirstPer, double fRestVal, double fPer, double fRate, const css::uno::Any& rOptBase ) override; 201 virtual double SAL_CALL getAccrint( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nIssue, sal_Int32 nFirstInter, sal_Int32 nSettle, double fRate, const css::uno::Any& rVal, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 202 virtual double SAL_CALL getAccrintm( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nIssue, sal_Int32 nSettle, double fRate, const css::uno::Any& rVal, const css::uno::Any& rOptBase ) override; 203 virtual double SAL_CALL getReceived( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fInvest, double fDisc, const css::uno::Any& rOptBase ) override; 204 virtual double SAL_CALL getDisc( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fPrice, double fRedemp, const css::uno::Any& rOptBase ) override; 205 virtual double SAL_CALL getDuration( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fCoup, double fYield, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 206 virtual double SAL_CALL getEffect( double fNominal, sal_Int32 nPeriods ) override; 207 virtual double SAL_CALL getCumprinc( double fRate, sal_Int32 nNumPeriods, double fVal, sal_Int32 nStartPer, sal_Int32 nEndPer, sal_Int32 nPayType ) override; 208 virtual double SAL_CALL getCumipmt( double fRate, sal_Int32 nNumPeriods, double fVal, sal_Int32 nStartPer, sal_Int32 nEndPer, sal_Int32 nPayType ) override; 209 virtual double SAL_CALL getPrice( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fRate, double fYield, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 210 virtual double SAL_CALL getPricedisc( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fDisc, double fRedemp, const css::uno::Any& rOptBase ) override; 211 virtual double SAL_CALL getPricemat( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nIssue, double fRate, double fYield, const css::uno::Any& rOptBase ) override; 212 virtual double SAL_CALL getMduration( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fCoup, double fYield, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 213 virtual double SAL_CALL getNominal( double fRate, sal_Int32 nPeriods ) override; 214 virtual double SAL_CALL getDollarfr( double fDollarDec, sal_Int32 nFrac ) override; 215 virtual double SAL_CALL getDollarde( double fDollarFrac, sal_Int32 nFrac ) override; 216 virtual double SAL_CALL getYield( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fCoup, double fPrice, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 217 virtual double SAL_CALL getYielddisc( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fPrice, double fRedemp, const css::uno::Any& rOptBase ) override; 218 virtual double SAL_CALL getYieldmat( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nIssue, double fRate, double fPrice, const css::uno::Any& rOptBase ) override; 219 virtual double SAL_CALL getTbilleq( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fDisc ) override; 220 virtual double SAL_CALL getTbillprice( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fDisc ) override; 221 virtual double SAL_CALL getTbillyield( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fPrice ) override; 222 virtual double SAL_CALL getOddfprice( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nIssue, sal_Int32 nFirstCoup, double fRate, double fYield, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 223 virtual double SAL_CALL getOddfyield( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nIssue, sal_Int32 nFirstCoup, double fRate, double fPrice, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 224 virtual double SAL_CALL getOddlprice( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nLastInterest, double fRate, double fYield, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 225 virtual double SAL_CALL getOddlyield( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nLastInterest, double fRate, double fPrice, double fRedemp, sal_Int32 nFreq, const css::uno::Any& rOptBase) override; 226 virtual double SAL_CALL getXirr( const css::uno::Reference< css::beans::XPropertySet >& xOpt, const css::uno::Sequence< css::uno::Sequence< double > >& rValues, const css::uno::Sequence< css::uno::Sequence< sal_Int32 > >& rDates, const css::uno::Any& rGuess ) override; 227 virtual double SAL_CALL getXnpv( double fRate, const css::uno::Sequence< css::uno::Sequence< double > >& rValues, const css::uno::Sequence< css::uno::Sequence< sal_Int32 > >& rDates ) override; 228 virtual double SAL_CALL getIntrate( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, double fInvest, double fRedemp, const css::uno::Any& rOptBase ) override; 229 virtual double SAL_CALL getCoupncd( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 230 virtual double SAL_CALL getCoupdays( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 231 virtual double SAL_CALL getCoupdaysnc( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 232 virtual double SAL_CALL getCoupdaybs( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 233 virtual double SAL_CALL getCouppcd( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 234 virtual double SAL_CALL getCoupnum( const css::uno::Reference< css::beans::XPropertySet >& xOpt, sal_Int32 nSettle, sal_Int32 nMat, sal_Int32 nFreq, const css::uno::Any& rOptBase ) override; 235 virtual double SAL_CALL getFvschedule( double fPrinc, const css::uno::Sequence< css::uno::Sequence< double > >& rSchedule ) override; 236 }; 237 238 #endif 239 240 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 241