diff options
Diffstat (limited to 'sc/inc/funcdesc.hxx')
-rw-r--r-- | sc/inc/funcdesc.hxx | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/sc/inc/funcdesc.hxx b/sc/inc/funcdesc.hxx new file mode 100644 index 000000000000..a46b8f52a638 --- /dev/null +++ b/sc/inc/funcdesc.hxx @@ -0,0 +1,180 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SC_FUNCDESC_HXX +#define SC_FUNCDESC_HXX + +/* Function descriptions for function wizard / autopilot / most recent used + * list et al. Separated from the global.hxx lump, implementation still in + * global.cxx + */ + +#include <tools/list.hxx> +#include <tools/string.hxx> +#include <formula/IFunctionDescription.hxx> + +#define MAX_FUNCCAT 12 /* maximum number of categories for functions */ + +class ScFuncDesc : public formula::IFunctionDescription +{ +public: + + virtual ::rtl::OUString getFunctionName() const ; + virtual const formula::IFunctionCategory* getCategory() const ; + virtual ::rtl::OUString getDescription() const ; + // GetSuppressedArgCount + virtual xub_StrLen getSuppressedArgumentCount() const ; + /** Returns the function signature with parameters from the passed string array. */ + virtual ::rtl::OUString getFormula(const ::std::vector< ::rtl::OUString >& _aArguments) const ; + // GetVisibleArgMapping + /** Returns mapping from visible arguments to real arguments, e.g. if of 4 + parameters the second one is suppressed {0,2,3}. For VAR_ARGS + parameters only one element is added to the end of the sequence. */ + virtual void fillVisibleArgumentMapping(::std::vector<USHORT>& _rArguments) const ; + virtual void initArgumentInfo() const; + virtual ::rtl::OUString getSignature() const ; + virtual rtl::OString getHelpId() const ; + + // parameter + virtual sal_uInt32 getParameterCount() const ; + virtual ::rtl::OUString getParameterName(sal_uInt32 _nPos) const ; + virtual ::rtl::OUString getParameterDescription(sal_uInt32 _nPos) const ; + virtual bool isParameterOptional(sal_uInt32 _nPos) const ; + + struct ParameterFlags + { + bool bOptional :1; // Parameter is optional + bool bSuppress :1; // Suppress parameter in UI because not implemented yet + + ParameterFlags() : bOptional(false), bSuppress(false) {} + }; + + + ScFuncDesc(); + virtual ~ScFuncDesc(); + + void Clear(); + + /** Returns a semicolon separated list of all parameter names. */ + String GetParamList () const; + /** Returns the full function signature: "FUNCTIONNAME( parameter list )". */ + String GetSignature () const; + + + + /** Returns the number of non-suppressed arguments. In case there are + variable arguments the number of fixed non-suppressed arguments plus + VAR_ARGS, same as for nArgCount (variable arguments can't be + suppressed). */ + USHORT GetSuppressedArgCount() const; + + String *pFuncName; // Function name + String *pFuncDesc; // Description of function + String **ppDefArgNames; // Parameter name(s) + String **ppDefArgDescs; // Description(s) of parameter(s) + ParameterFlags *pDefArgFlags; // Flags for each parameter + USHORT nFIndex; // Unique function index + USHORT nCategory; // Function category + USHORT nArgCount; // All parameter count, suppressed and unsuppressed + rtl::OString sHelpId; // HelpID of function + bool bIncomplete :1; // Incomplete argument info (set for add-in info from configuration) + bool bHasSuppressedArgs :1; // Whether there is any suppressed parameter. +}; + +//============================================================================ + +class ScFunctionList +{ +public: + ScFunctionList(); + ~ScFunctionList(); + + ULONG GetCount() const + { return aFunctionList.Count(); } + + const ScFuncDesc* First() + { return (const ScFuncDesc*) aFunctionList.First(); } + + const ScFuncDesc* Next() + { return (const ScFuncDesc*) aFunctionList.Next(); } + + const ScFuncDesc* GetFunction( ULONG nIndex ) const + { return (const ScFuncDesc*) aFunctionList.GetObject( nIndex ); } + + xub_StrLen GetMaxFuncNameLen() const + { return nMaxFuncNameLen; } + +private: + List aFunctionList; + xub_StrLen nMaxFuncNameLen; +}; + +//============================================================================ +class ScFunctionCategory : public formula::IFunctionCategory +{ + ScFunctionMgr* m_pMgr; + List* m_pCategory; + mutable ::rtl::OUString m_sName; + sal_uInt32 m_nCategory; +public: + ScFunctionCategory(ScFunctionMgr* _pMgr,List* _pCategory,sal_uInt32 _nCategory) : m_pMgr(_pMgr),m_pCategory(_pCategory),m_nCategory(_nCategory){} + virtual ~ScFunctionCategory(){} + virtual sal_uInt32 getCount() const; + virtual const formula::IFunctionManager* getFunctionManager() const; + virtual const formula::IFunctionDescription* getFunction(sal_uInt32 _nPos) const; + virtual sal_uInt32 getNumber() const; + virtual ::rtl::OUString getName() const; +}; +//============================================================================ +#define SC_FUNCGROUP_COUNT ID_FUNCTION_GRP_ADDINS +class ScFunctionMgr : public formula::IFunctionManager +{ +public: + ScFunctionMgr(); + virtual ~ScFunctionMgr(); + + static String GetCategoryName(sal_uInt32 _nCategoryNumber ); + + const ScFuncDesc* Get( const String& rFName ) const; + const ScFuncDesc* Get( USHORT nFIndex ) const; + const ScFuncDesc* First( USHORT nCategory = 0 ) const; + const ScFuncDesc* Next() const; + + // formula::IFunctionManager + virtual sal_uInt32 getCount() const; + virtual const formula::IFunctionCategory* getCategory(sal_uInt32 nPos) const; + virtual void fillLastRecentlyUsedFunctions(::std::vector< const formula::IFunctionDescription*>& _rLastRUFunctions) const; + virtual const formula::IFunctionDescription* getFunctionByName(const ::rtl::OUString& _sFunctionName) const; + virtual sal_Unicode getSingleToken(const formula::IFunctionManager::EToken _eToken) const; +private: + ScFunctionList* pFuncList; + List* aCatLists[MAX_FUNCCAT]; + mutable List* pCurCatList; +}; + +//============================================================================ +#endif // SC_FUNCDESC_HXX |