diff options
Diffstat (limited to 'include/svx/numfmtsh.hxx')
-rw-r--r-- | include/svx/numfmtsh.hxx | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/include/svx/numfmtsh.hxx b/include/svx/numfmtsh.hxx new file mode 100644 index 000000000..360a067e0 --- /dev/null +++ b/include/svx/numfmtsh.hxx @@ -0,0 +1,229 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_SVX_NUMFMTSH_HXX +#define INCLUDED_SVX_NUMFMTSH_HXX + +#include <i18nlangtag/lang.h> + +#include <svx/svxdllapi.h> + +#include <svl/zforlist.hxx> + +#include <vector> + +class Color; +class SvNumberFormatter; + +enum class SvxNumberValueType +{ + Undefined, + Number, + String +}; + +// sort order of the category ListBox entries in the TabPage +#define CAT_ALL 0 +#define CAT_USERDEFINED 1 +#define CAT_NUMBER 2 +#define CAT_PERCENT 3 +#define CAT_CURRENCY 4 +#define CAT_DATE 5 +#define CAT_TIME 6 +#define CAT_SCIENTIFIC 7 +#define CAT_FRACTION 8 +#define CAT_BOOLEAN 9 +#define CAT_TEXT 10 + +#define SELPOS_NONE -1 + +#define NUMBERFORMAT_ENTRY_NEW_CURRENCY NUMBERFORMAT_ENTRY_NOT_FOUND-1 + + +class SVX_DLLPUBLIC SvxNumberFormatShell +{ +public: + SvxNumberFormatShell( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + const OUString& rNumStr ); + + SvxNumberFormatShell( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + double nNumVal, + const OUString* pNumStr ); + + ~SvxNumberFormatShell(); + + + static SvxNumberFormatShell* Create( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + const OUString& rNumStr ); + + static SvxNumberFormatShell* Create( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + double nNumVal, + const OUString* pNumStr ); + + + void GetInitSettings( sal_uInt16& nCatLbPos, + LanguageType& rLangType, + sal_uInt16& nFmtLbSelPos, + std::vector<OUString>& rFmtEntries, + OUString& rPrevString, + const Color*& rpPrevColor ); + + void CategoryChanged( sal_uInt16 nCatLbPos, + short& rFmtSelPos, + std::vector<OUString>& rFmtEntries ); + + void LanguageChanged( LanguageType eLangType, + short& rFmtSelPos, + std::vector<OUString>& rFmtEntries ); + + void FormatChanged( sal_uInt16 nFmtLbPos, + OUString& rPreviewStr, + const Color*& rpFontColor ); + + bool AddFormat( OUString& rFormat, + sal_Int32& rErrPos, + sal_uInt16& rCatLbSelPos, + short& rFmtSelPos, + std::vector<OUString>& rFmtEntries ); + + void RemoveFormat( std::u16string_view rFormat, + sal_uInt16& rCatLbSelPos, + short& rFmtSelPos, + std::vector<OUString>& rFmtEntries ); + + void MakeFormat( OUString& rFormat, + bool bThousand, + bool bNegRed, + sal_uInt16 nPrecision, + sal_uInt16 nLeadingZeroes, + sal_uInt16 nCurrencyEntryPos); + + void GetOptions( const OUString& rFormat, + bool& rThousand, + bool& rNegRed, + sal_uInt16& rPrecision, + sal_uInt16& rLeadingZeroes, + sal_uInt16& rCatLbPos ); + + sal_uInt16 GetFormatIntegerDigits( std::u16string_view rFormat ) const; + + void MakePreviewString( const OUString& rFormatStr, + OUString& rPreviewStr, + const Color*& rpFontColor ); + + void MakePrevStringFromVal( const OUString& rFormatStr, + OUString& rPreviewStr, + const Color*& rpFontColor, + double nValue); + + bool IsUserDefined( const OUString& rFmtString ); + bool IsTmpCurrencyFormat( const OUString& rFmtString ); + bool FindEntry( const OUString& rFmtString, sal_uInt32* pAt = nullptr ); + + void ValidateNewEntries() { bUndoAddList = false; } + std::vector<sal_uInt32> const & GetUpdateData() const; + + void SetCurNumFmtKey( sal_uInt32 nNew ) { nCurFormatKey = nNew; } + sal_uInt32 GetCurNumFmtKey() const { return nCurFormatKey; } + LanguageType GetCurLanguage() const { return eCurLanguage; } + + /** Returns the name of Standard, General, ... for the + current language. */ + OUString GetStandardName() const; + + OUString GetComment4Entry(short nEntry); + short GetCategory4Entry(short nEntry) const; + bool GetUserDefined4Entry(short nEntry); + OUString GetFormat4Entry(short nEntry); + void SetComment4Entry(short nEntry, const OUString& aCommentString); + + void SetCurrencySymbol(sal_uInt32 nPos); + sal_uInt32 GetCurrencySymbol() const { return nCurCurrencyEntryPos;} + sal_uInt16 FindCurrencyFormat( const OUString& rFmtString ); + sal_uInt16 FindCurrencyFormat(const NfCurrencyEntry* pTmpCurrencyEntry,bool bTmpBanking); + void SetCurCurrencyEntry(NfCurrencyEntry*); + short GetListPos4Entry( sal_uInt32 nIdx, std::u16string_view rFmtString ); + + void GetCurrencySymbols(std::vector<OUString>& rList, sal_uInt16* pPos ); + + sal_uInt16 FindCurrencyTableEntry( const OUString& rFmtString, bool &bTestBanking ); + bool IsInTable(sal_uInt16 nPos, bool bTmpBanking, + std::u16string_view rFmtString) const; + + void SetUseStarFormat( bool bUse ) { bUseStarFormat = bUse; } +private: + SvNumberFormatter* pFormatter; + SvNumberFormatTable* pCurFmtTable; + SvxNumberValueType eValType; + OUString aValStr; + double nValNum; + bool bUndoAddList; + std::vector<sal_uInt32> aAddList; + std::vector<sal_uInt32> aDelList; + std::vector<sal_uInt32> aCurEntryList; + sal_uInt32 nCurFormatKey; + SvNumFormatType nCurCategory; + LanguageType eCurLanguage; + std::vector<sal_uInt16> aCurCurrencyList; + NfCurrencyEntry* pCurCurrencyEntry; + bool bBankingSymbol; + sal_uInt32 nCurCurrencyEntryPos; + std::vector<OUString> aCurrencyFormatList; + bool bUseStarFormat; + bool bIsDefaultValNum; + + SVX_DLLPRIVATE short FillEntryList_Impl( std::vector<OUString>& rList ); + SVX_DLLPRIVATE void FillEListWithStd_Impl( std::vector<OUString>& rList, SvNumFormatType eCategory, short &Pos, + bool bSuppressDuplicates = false ); + SVX_DLLPRIVATE short FillEListWithFormats_Impl( std::vector<OUString>& rList,short nSelPos, + NfIndexTableOffset eOffsetStart, + NfIndexTableOffset eOffsetEnd, + bool bSuppressDuplicates ); + SVX_DLLPRIVATE short FillEListWithDateTime_Impl( std::vector<OUString>& rList,short nSelPos, + bool bSuppressDuplicates ); + SVX_DLLPRIVATE void FillEListWithOneFormat_Impl( std::vector<OUString>& rList, short & nSelPos, + bool bSuppressDuplicates, NfIndexTableOffset nOffset, + bool bSuppressIsoDateTime ); + SVX_DLLPRIVATE short FillEListWithCurrency_Impl( std::vector<OUString>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithSysCurrencys( std::vector<OUString>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithUserCurrencys( std::vector<OUString>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithUsD_Impl( std::vector<OUString>& rList, SvNumFormatType eCategory, short Pos ); + + SVX_DLLPRIVATE bool IsEssentialFormat_Impl( SvNumFormatType eType, sal_uInt32 nKey ); + + SVX_DLLPRIVATE ::std::vector<sal_uInt32>::iterator GetRemoved_Impl( size_t nKey ); + SVX_DLLPRIVATE bool IsRemoved_Impl( size_t nKey ); + SVX_DLLPRIVATE ::std::vector<sal_uInt32>::iterator GetAdded_Impl( size_t nKey ); + + SVX_DLLPRIVATE void GetPreviewString_Impl( OUString& rString, + const Color*& rpColor ); + SVX_DLLPRIVATE static void PosToCategory_Impl(sal_uInt16 nPos, SvNumFormatType& rCategory); + SVX_DLLPRIVATE static void CategoryToPos_Impl(SvNumFormatType nCategory, sal_uInt16& rPos); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |