summaryrefslogtreecommitdiff
path: root/svx/inc/svx/numfmtsh.hxx
blob: 493cdb6b10d2b4705f69686086c3315ce674ea30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
/*************************************************************************
 *
 * 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 _SVX_NUMFMTSH_HXX
#define _SVX_NUMFMTSH_HXX

// include ---------------------------------------------------------------

#include <tools/string.hxx>
#include <i18npool/lang.h>

#ifndef _SVSTDARR_ULONGS
#define _SVSTDARR_ULONGS
#endif
#ifndef _SVSTDARR_USHORTS
#define _SVSTDARR_USHORTS
#endif
#ifndef _SVSTDARR_STRINGS
#define _SVSTDARR_STRINGS
#endif
#include "svx/svxdllapi.h"

#include <svl/svstdarr.hxx>

// forward ---------------------------------------------------------------

class Color;
class SvNumberFormatter;
class SvNumberFormatTable;
class SvStrings;
class SvStringsDtor;
class NfCurrencyEntry;
// enum ------------------------------------------------------------------

enum SvxNumberValueType
{
    SVX_VALUE_TYPE_UNDEFINED = 0,
    SVX_VALUE_TYPE_NUMBER,
    SVX_VALUE_TYPE_STRING
};

// define ----------------------------------------------------------------

#define CAT_ALL             0   // Reihenfolge der Kategorie-
#define CAT_USERDEFINED     1   // ListBox-Eintraege in der TabPage
#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

typedef NfCurrencyEntry* NfShCurrencyEntryPtr;
SV_DECL_PTRARR( NfShCurrencyEntries, NfShCurrencyEntryPtr, 8, 1 )


class SvxDelStrgs: public SvStrings
{

public:
        ~SvxDelStrgs() { DeleteAndDestroy(0,Count());}

};

// class SvxNumberFormatShell --------------------------------------------

class SVX_DLLPUBLIC SvxNumberFormatShell
{
public:
                        SvxNumberFormatShell( SvNumberFormatter* pNumFormatter,
                                              sal_uInt32         nFormatKey,
                                              SvxNumberValueType eNumValType,
                                              const String&      rNumStr );

                        SvxNumberFormatShell( SvNumberFormatter* pNumFormatter,
                                              sal_uInt32         nFormatKey,
                                              SvxNumberValueType eNumValType,
                                              double             nNumVal,
                                              const String*      pNumStr = NULL );

                        ~SvxNumberFormatShell();


    static SvxNumberFormatShell*    Create( SvNumberFormatter* pNumFormatter,
                                              sal_uInt32         nFormatKey,
                                              SvxNumberValueType eNumValType,
                                              const String&      rNumStr );

    static SvxNumberFormatShell*    Create( SvNumberFormatter* pNumFormatter,
                                              sal_uInt32         nFormatKey,
                                              SvxNumberValueType eNumValType,
                                              double             nNumVal,
                                              const String*      pNumStr = NULL );


    void                GetInitSettings( USHORT&       nCatLbPos,
                                        LanguageType& rLangType,
                                         USHORT&       nFmtLbSelPos,
                                         SvStrings&    rFmtEntries,
                                         String&       rPrevString,
                                         Color*&       rpPrevColor );

    void                CategoryChanged( USHORT     nCatLbPos,
                                        short&     rFmtSelPos,
                                         SvStrings& rFmtEntries );

    void                LanguageChanged( LanguageType eLangType,
                                         short&       rFmtSelPos,
                                         SvStrings&   rFmtEntries );

    void                FormatChanged( USHORT  nFmtLbPos,
                                       String& rPreviewStr,
                                       Color*& rpFontColor );

    BOOL                AddFormat( String&    rFormat,
                                   xub_StrLen& rErrPos,
                                   USHORT&    rCatLbSelPos,
                                   short&     rFmtSelPos,
                                   SvStrings& rFmtEntries );

    BOOL                RemoveFormat( const String& rFormat,
                                      USHORT&       rCatLbSelPos,
                                      short&        rFmtSelPos,
                                      SvStrings&    rFmtEntries );

    void                MakeFormat( String& rFormat,
                                    BOOL    bThousand,
                                    BOOL    bNegRed,
                                    USHORT  nPrecision,
                                    USHORT  nLeadingZeroes,
                                    USHORT  nCurrencyEntryPos);

    void                GetOptions( const String& rFormat,
                                    BOOL&         rThousand,
                                    BOOL&         rNegRed,
                                    USHORT&       rPrecision,
                                    USHORT&       rLeadingZeroes,
                                    USHORT&       rCatLbPos );

    void                MakePreviewString( const String& rFormatStr,
                                           String&       rPreviewStr,
                                           Color*&       rpFontColor );

    void                MakePrevStringFromVal( const String& rFormatStr,        //@ 19.09.97
                                                String& rPreviewStr,
                                                Color*& rpFontColor,
                                                double  nValue);

    BOOL                IsUserDefined( const String& rFmtString );
    BOOL                IsTmpCurrencyFormat( const String& rFmtString );
    BOOL                FindEntry( const String& rFmtString, sal_uInt32* pAt = NULL );

    void                ValidateNewEntries( BOOL bValidate = TRUE ) { bUndoAddList = !bValidate; }
    sal_uInt32          GetUpdateDataCount() const;
    void                GetUpdateData( sal_uInt32* pDelArray, const sal_uInt32 nSize );

    void                SetCurNumFmtKey( sal_uInt32 nNew )  { nCurFormatKey = nNew; }
    void                SetCurLanguage( LanguageType eNew ) { eCurLanguage = eNew; }
    sal_uInt32          GetCurNumFmtKey() const             { return nCurFormatKey; }
    LanguageType        GetCurLanguage() const              { return eCurLanguage; }

                        /** Returns the name of Standard, General, ... for the
                            current language. */
    String              GetStandardName() const;

    String              GetComment4Entry(short nEntry);
    short               GetCategory4Entry(short nEntry);
    BOOL                GetUserDefined4Entry(short nEntry);
    String              GetFormat4Entry(short nEntry);
    void                SetComment4Entry(short nEntry,String aCommentString);

    BOOL                IsBankingSymbol(USHORT nPos);
    void                SetCurrencySymbol(USHORT nPos);
    sal_uInt32          GetCurrencySymbol();
    USHORT              FindCurrencyFormat( const String& rFmtString );
    USHORT              FindCurrencyFormat(const NfCurrencyEntry* pTmpCurrencyEntry,BOOL bTmpBanking);
    NfCurrencyEntry*    GetCurCurrencyEntry();
    void                SetCurCurrencyEntry(NfCurrencyEntry*);
    short               GetListPos4Entry(sal_uInt32 nIdx);
    short               GetListPos4Entry( const String& rFmtString );

    void                GetCurrencySymbols( SvStringsDtor& rList, USHORT* pPos );
    void                GetCurrencySymbols( SvStringsDtor& rList, BOOL bFlag );

    USHORT              FindCurrencyTableEntry( const String& rFmtString, BOOL &bTestBanking );
    BOOL                IsInTable(USHORT nPos,BOOL bTmpBanking,const String &rFmtString);

    void                GetCurrencyFormats(SvStrings& rList);

private:
    static const double     DEFAULT_NUMVALUE;   // 123456789

    SvNumberFormatter*      pFormatter;
    SvNumberFormatTable*    pCurFmtTable;
    SvxNumberValueType      eValType;
    String                  aValStr;
    double                  nValNum;
    BOOL                    bUndoAddList;
    SvULongs                aAddList;
    SvULongs                aDelList;
    SvULongs                aCurEntryList;
    sal_uInt32              nInitFormatKey;
    sal_uInt32              nCurFormatKey;
    short                   nCurCategory;
    LanguageType            eCurLanguage;
    SvUShorts               aCurCurrencyList;
    NfCurrencyEntry*        pCurCurrencyEntry;
    BOOL                    bBankingSymbol;
    USHORT                  nCurCurrencyEntryPos;
    SvStrings               aCurrencyFormatList;

#ifdef _SVX_NUMFMTSH_CXX
    SVX_DLLPRIVATE short                    FillEntryList_Impl( SvStrings& rList );
    SVX_DLLPRIVATE void                 FillEListWithStd_Impl( SvStrings& rList,USHORT aPrivCat, short &Pos);
    SVX_DLLPRIVATE short                    FillEListWithFormats_Impl( SvStrings& rList,short nSelPos,
                                                       NfIndexTableOffset eOffsetStart,
                                                       NfIndexTableOffset eOffsetEnd);

    SVX_DLLPRIVATE short                    FillEListWithDateTime_Impl( SvStrings& rList,short nSelPos);

    SVX_DLLPRIVATE short                    FillEListWithCurrency_Impl( SvStrings& rList,short nSelPos);
    SVX_DLLPRIVATE short                    FillEListWithSysCurrencys( SvStrings& rList,short nSelPos);
    SVX_DLLPRIVATE short                    FillEListWithUserCurrencys( SvStrings& rList,short nSelPos);

    SVX_DLLPRIVATE short                    FillEListWithUsD_Impl( SvStrings& rList, sal_uInt16 nPrivCat, short Pos );
    SVX_DLLPRIVATE BOOL                 IsRemoved_Impl( sal_uInt32 nKey );
    SVX_DLLPRIVATE BOOL                 IsAdded_Impl( sal_uInt32 nKey );
    SVX_DLLPRIVATE void                 GetPreviewString_Impl( String& rString,
                                                   Color*& rpColor );
    SVX_DLLPRIVATE void                 PosToCategory_Impl( USHORT nPos, short& rCategory );
    SVX_DLLPRIVATE void                 CategoryToPos_Impl( short nCategory, USHORT& rPos );
#endif
};


#endif