xref: /trunk/main/sw/source/ui/envelp/labimg.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 
32 #include <tools/stream.hxx>
33 #ifndef _RESID_HXX //autogen
34 #include <tools/resid.hxx>
35 #endif
36 #include <com/sun/star/uno/Any.hxx>
37 #include <com/sun/star/uno/Sequence.hxx>
38 #include <unotools/useroptions.hxx>
39 #include <tools/shl.hxx>
40 #include <swmodule.hxx>
41 #include "labimg.hxx"
42 #include "cmdid.h"
43 #include "swtypes.hxx"
44 #include <unomid.h>
45 
46 using namespace utl;
47 using namespace rtl;
48 using namespace ::com::sun::star::uno;
49 
50 
51 // ----------------------------------------------------------------------------
52 SwLabItem::SwLabItem() :
53 
54     SfxPoolItem(FN_LABEL),
55     lLeft (0),
56     lUpper(0),
57     nCols (1),
58     nRows (1),
59     nCol  (1),
60     nRow  (1)
61 {
62     bAddr = bCont = bSynchron = sal_False;
63     bPage = sal_True;
64     lHDist  =
65     lVDist  =
66     lWidth  =
67     lHeight = 5669; // 10 cm
68 }
69 
70 // ----------------------------------------------------------------------------
71 SwLabItem::SwLabItem(const SwLabItem& rItem) :
72     SfxPoolItem(FN_LABEL)
73 {
74         *this = rItem;
75 }
76 // ----------------------------------------------------------------------------
77 SwLabItem& SwLabItem::operator =(const SwLabItem& rItem)
78 {
79     bAddr    = rItem.bAddr;
80     aWriting = rItem.aWriting;
81     bCont    = rItem.bCont;
82     sDBName  = rItem.sDBName;
83     aLstMake = rItem.aLstMake;
84     aLstType = rItem.aLstType;
85     aMake    = rItem.aMake;
86     aType    = rItem.aType;
87     bPage    = rItem.bPage;
88     bSynchron = rItem.bSynchron;
89     aBin     = rItem.aBin;
90     nCol     = rItem.nCol;
91     nRow     = rItem.nRow;
92     lHDist   = rItem.lHDist;
93     lVDist   = rItem.lVDist;
94     lWidth   = rItem.lWidth;
95     lHeight  = rItem.lHeight;
96     lLeft    = rItem.lLeft;
97     lUpper   = rItem.lUpper;
98     nCols    = rItem.nCols;
99     nRows    = rItem.nRows;
100     aPrivFirstName =        rItem.aPrivFirstName;
101     aPrivName =             rItem.aPrivName;
102     aPrivShortCut =         rItem.aPrivShortCut;
103     aPrivFirstName2 =       rItem.aPrivFirstName2;
104     aPrivName2 =            rItem.aPrivName2;
105     aPrivShortCut2 =        rItem.aPrivShortCut2;
106     aPrivStreet =           rItem.aPrivStreet;
107     aPrivZip =              rItem.aPrivZip;
108     aPrivCity =             rItem.aPrivCity;
109     aPrivCountry =          rItem.aPrivCountry;
110     aPrivState =            rItem.aPrivState;
111     aPrivTitle =            rItem.aPrivTitle;
112     aPrivProfession =       rItem.aPrivProfession;
113     aPrivPhone =            rItem.aPrivPhone;
114     aPrivMobile =           rItem.aPrivMobile;
115     aPrivFax =              rItem.aPrivFax;
116     aPrivWWW =              rItem.aPrivWWW;
117     aPrivMail =             rItem.aPrivMail;
118     aCompCompany =          rItem.aCompCompany;
119     aCompCompanyExt =       rItem.aCompCompanyExt;
120     aCompSlogan =           rItem.aCompSlogan;
121     aCompStreet =           rItem.aCompStreet;
122     aCompZip =              rItem.aCompZip;
123     aCompCity =             rItem.aCompCity;
124     aCompCountry =          rItem.aCompCountry;
125     aCompState =            rItem.aCompState;
126     aCompPosition =         rItem.aCompPosition;
127     aCompPhone =            rItem.aCompPhone;
128     aCompMobile =           rItem.aCompMobile;
129     aCompFax =              rItem.aCompFax;
130     aCompWWW =              rItem.aCompWWW;
131     aCompMail =             rItem.aCompMail;
132     sGlossaryGroup =        rItem.sGlossaryGroup;
133     sGlossaryBlockName =    rItem.sGlossaryBlockName;
134     return *this;
135 }
136 
137 // --------------------------------------------------------------------------
138 
139 
140 
141 int SwLabItem::operator ==(const SfxPoolItem& rItem) const
142 {
143     const SwLabItem& rLab = (const SwLabItem&) rItem;
144 
145     return bAddr    == rLab.bAddr   &&
146            bCont    == rLab.bCont   &&
147            bPage    == rLab.bPage   &&
148            bSynchron == rLab.bSynchron &&
149            aBin     == rLab.aBin    &&
150            nCol     == rLab.nCol    &&
151            nRow     == rLab.nRow    &&
152            lHDist   == rLab.lHDist  &&
153            lVDist   == rLab.lVDist  &&
154            lWidth   == rLab.lWidth  &&
155            lHeight  == rLab.lHeight &&
156            lLeft    == rLab.lLeft   &&
157            lUpper   == rLab.lUpper  &&
158            nCols    == rLab.nCols   &&
159            nRows    == rLab.nRows   &&
160            aWriting == rLab.aWriting&&
161            aMake    == rLab.aMake   &&
162            aType    == rLab.aType   &&
163            aLstMake == rLab.aLstMake&&
164            aLstType == rLab.aLstType&&
165            sDBName  == rLab.sDBName &&
166             aPrivFirstName ==       rLab.aPrivFirstName&&
167             aPrivName ==             rLab.aPrivName&&
168             aPrivShortCut ==         rLab.aPrivShortCut&&
169             aPrivFirstName2 ==       rLab.aPrivFirstName2&&
170             aPrivName2 ==            rLab.aPrivName2&&
171             aPrivShortCut2 ==        rLab.aPrivShortCut2&&
172             aPrivStreet ==           rLab.aPrivStreet&&
173             aPrivZip ==              rLab.aPrivZip&&
174             aPrivCity ==             rLab.aPrivCity&&
175             aPrivCountry ==          rLab.aPrivCountry&&
176             aPrivState ==            rLab.aPrivState&&
177             aPrivTitle ==            rLab.aPrivTitle&&
178             aPrivProfession ==       rLab.aPrivProfession&&
179             aPrivPhone ==            rLab.aPrivPhone&&
180             aPrivMobile ==           rLab.aPrivMobile&&
181             aPrivFax ==              rLab.aPrivFax&&
182             aPrivWWW ==              rLab.aPrivWWW&&
183             aPrivMail ==             rLab.aPrivMail&&
184             aCompCompany ==          rLab.aCompCompany&&
185             aCompCompanyExt ==       rLab.aCompCompanyExt&&
186             aCompSlogan ==           rLab.aCompSlogan&&
187             aCompStreet ==           rLab.aCompStreet&&
188             aCompZip ==              rLab.aCompZip&&
189             aCompCity ==             rLab.aCompCity&&
190             aCompCountry ==          rLab.aCompCountry&&
191             aCompState ==            rLab.aCompState&&
192             aCompPosition ==         rLab.aCompPosition&&
193             aCompPhone ==            rLab.aCompPhone&&
194             aCompMobile ==           rLab.aCompMobile&&
195             aCompFax ==              rLab.aCompFax&&
196             aCompWWW ==              rLab.aCompWWW&&
197             aCompMail ==             rLab.aCompMail &&
198             sGlossaryGroup ==        rLab.sGlossaryGroup &&
199             sGlossaryBlockName ==    rLab.sGlossaryBlockName;
200 }
201 
202 // --------------------------------------------------------------------------
203 SfxPoolItem* SwLabItem::Clone(SfxItemPool*) const
204 {
205     return new SwLabItem(*this);
206 }
207 
208 /* -----------------------------25.09.00 16:25--------------------------------
209 
210  ---------------------------------------------------------------------------*/
211 Sequence<rtl::OUString> SwLabCfgItem::GetPropertyNames()
212 {
213     static const char* aLabelPropNames[] =
214     {
215         "Medium/Continous",         // 0
216         "Medium/Brand",             // 1
217         "Medium/Type",              // 2
218         "Format/Column",            // 3
219         "Format/Row",               // 4
220         "Format/HorizontalDistance",// 5
221         "Format/VerticalDistance",  // 6
222         "Format/Width",             // 7
223         "Format/Height",            // 8
224         "Format/LeftMargin",        // 9
225         "Format/TopMargin",         //10
226         "Option/Synchronize",       //11
227         "Option/Page",              //12
228         "Option/Column",            //13
229         "Option/Row",               //14
230         "Inscription/UseAddress",   //15
231         "Inscription/Address",      //16
232         "Inscription/Database"      //17
233     };
234     static const char* aBusinessPropNames[] =
235     {
236         "PrivateAddress/FirstName",             //  0
237         "PrivateAddress/Name",                  //  1
238         "PrivateAddress/ShortCut",              //  2
239         "PrivateAddress/SecondFirstName",       //  3
240         "PrivateAddress/SecondName",            //  4
241         "PrivateAddress/SecondShortCut",        //  5
242         "PrivateAddress/Street",                //  6
243         "PrivateAddress/Zip",                   //  7
244         "PrivateAddress/City",                  //  8
245         "PrivateAddress/Country",               //  9
246         "PrivateAddress/State",                 // 10
247         "PrivateAddress/Title",                 // 11
248         "PrivateAddress/Profession",            // 12
249         "PrivateAddress/Phone",                 // 13
250         "PrivateAddress/Mobile",                // 14
251         "PrivateAddress/Fax",                   // 15
252         "PrivateAddress/WebAddress",            // 16
253         "PrivateAddress/Email",                 // 17
254         "BusinessAddress/Company",              // 18
255         "BusinessAddress/CompanyExt",           // 19
256         "BusinessAddress/Slogan",               // 20
257         "BusinessAddress/Street",               // 21
258         "BusinessAddress/Zip",                  // 22
259         "BusinessAddress/City",                 // 23
260         "BusinessAddress/Country",              // 24
261         "BusinessAddress/State",                // 25
262         "BusinessAddress/Position",             // 26
263         "BusinessAddress/Phone",                // 27
264         "BusinessAddress/Mobile",               // 28
265         "BusinessAddress/Fax",                  // 29
266         "BusinessAddress/WebAddress",           // 30
267         "BusinessAddress/Email",                // 31
268         "AutoText/Group",                       // 32
269         "AutoText/Block"                        // 33
270     };
271     const int nBusinessCount = bIsLabel ? 0 : 34;
272     const int nLabelCount = bIsLabel ? 18 : 15;
273     Sequence<OUString> aNames(nBusinessCount + nLabelCount);
274     OUString* pNames = aNames.getArray();
275     int nIndex = 0;
276     for(int nLabel = 0; nLabel < nLabelCount; nLabel++)
277         pNames[nIndex++] = OUString::createFromAscii(aLabelPropNames[nLabel]);
278     for(int nBusiness = 0; nBusiness < nBusinessCount; nBusiness++)
279         pNames[nIndex++] = OUString::createFromAscii(aBusinessPropNames[nBusiness]);
280     return aNames;
281 }
282 /* ----------------------------------------------------------------------------
283 
284  ---------------------------------------------------------------------------*/
285 SwLabCfgItem::SwLabCfgItem(sal_Bool bLabel) :
286     ConfigItem(bLabel ? C2U("Office.Writer/Label") :  C2U("Office.Writer/BusinessCard")),
287     bIsLabel(bLabel)
288 {
289     Sequence<OUString> aNames = GetPropertyNames();
290     Sequence<Any> aValues = GetProperties(aNames);
291     EnableNotification(aNames);
292     const Any* pValues = aValues.getConstArray();
293     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
294     sal_Bool bNoConfigValues = sal_True;
295     if(aValues.getLength() == aNames.getLength())
296     {
297         for(int nProp = 0, nProperty = 0; nProp < aNames.getLength(); nProp++, nProperty++)
298         {
299 
300             if(pValues[nProp].hasValue())
301             {
302                 //to have a contiuous switch an offset is added
303                 if(nProp == 15 && !bIsLabel)
304                     nProperty += 3;
305                 if(nProperty >= 18)
306                     bNoConfigValues = sal_False;
307                 switch(nProperty)
308                 {
309                     case  0: aItem.bCont = *(sal_Bool*)pValues[nProp].getValue(); break;// "Medium/Continous",
310                     case  1: pValues[nProp] >>= aItem.aMake;            break;// "Medium/Brand",
311                     case  2: pValues[nProp] >>= aItem.aType;            break;// "Medium/Type",
312                     case  3: pValues[nProp] >>= aItem.nCols;            break;// "Format/Column",
313                     case  4: pValues[nProp] >>= aItem.nRows;            break;// "Format/Row",
314                     case  5:
315                         pValues[nProp] >>= aItem.lHDist;
316                         aItem.lHDist = MM100_TO_TWIP(aItem.lHDist);
317                     break;// "Format/HorizontalDistance",
318                     case  6:
319                         pValues[nProp] >>= aItem.lVDist;
320                         aItem.lVDist = MM100_TO_TWIP(aItem.lVDist);
321                     break;// "Format/VerticalDistance",
322                     case  7:
323                         pValues[nProp] >>= aItem.lWidth;
324                         aItem.lWidth = MM100_TO_TWIP(aItem.lWidth);
325                     break;// "Format/Width",
326                     case  8:
327                         pValues[nProp] >>= aItem.lHeight;
328                         aItem.lHeight = MM100_TO_TWIP(aItem.lHeight);
329                     break;// "Format/Height",
330                     case  9:
331                         pValues[nProp] >>= aItem.lLeft;
332                         aItem.lLeft = MM100_TO_TWIP(aItem.lLeft);
333                     break;// "Format/LeftMargin",
334                     case 10:
335                         pValues[nProp] >>= aItem.lUpper;
336                         aItem.lUpper = MM100_TO_TWIP(aItem.lUpper);
337                     break;// "Format/TopMargin",
338                     case 11: aItem.bSynchron = *(sal_Bool*)pValues[nProp].getValue(); break;// "Option/Synchronize",
339                     case 12: aItem.bPage = *(sal_Bool*)pValues[nProp].getValue(); break;// "Option/Page",
340                     case 13: pValues[nProp] >>= aItem.nCol;     break;// "Option/Column",
341                     case 14: pValues[nProp] >>= aItem.nRow;     break;// "Option/Row"
342                     case 15: aItem.bAddr = *(sal_Bool*)pValues[nProp].getValue();       break;// "Inscription/UseAddress",
343                     case 16: pValues[nProp] >>= aItem.aWriting;         break;// "Inscription/Address",
344                     case 17: pValues[nProp] >>= aItem.sDBName;          break;// "Inscription/Database"
345                     case 18: pValues[nProp] >>= aItem.aPrivFirstName;   break;// "PrivateAddress/FirstName",
346                     case 19: pValues[nProp] >>= aItem.aPrivName;        break;// "PrivateAddress/Name",
347                     case 20: pValues[nProp] >>= aItem.aPrivShortCut;    break;// "PrivateAddress/ShortCut",
348                     case 21: pValues[nProp] >>= aItem.aPrivFirstName2;  break;// "PrivateAddress/SecondFirstName",
349                     case 22: pValues[nProp] >>= aItem.aPrivName2;       break;// "PrivateAddress/SecondName",
350                     case 23: pValues[nProp] >>= aItem.aPrivShortCut2;   break;// "PrivateAddress/SecondShortCut",
351                     case 24: pValues[nProp] >>= aItem.aPrivStreet;      break;// "PrivateAddress/Street",
352                     case 25: pValues[nProp] >>= aItem.aPrivZip;         break;// "PrivateAddress/Zip",
353                     case 26: pValues[nProp] >>= aItem.aPrivCity;        break;// "PrivateAddress/City",
354                     case 27: pValues[nProp] >>= aItem.aPrivCountry;     break;// "PrivateAddress/Country",
355                     case 28: pValues[nProp] >>= aItem.aPrivState;       break;// "PrivateAddress/State",
356                     case 29: pValues[nProp] >>= aItem.aPrivTitle;       break;// "PrivateAddress/Title",
357                     case 30: pValues[nProp] >>= aItem.aPrivProfession;  break;// "PrivateAddress/Profession",
358                     case 31: pValues[nProp] >>= aItem.aPrivPhone;       break;// "PrivateAddress/Phone",
359                     case 32: pValues[nProp] >>= aItem.aPrivMobile;      break;// "PrivateAddress/Mobile",
360                     case 33: pValues[nProp] >>= aItem.aPrivFax;         break;// "PrivateAddress/Fax",
361                     case 34: pValues[nProp] >>= aItem.aPrivWWW;         break;// "PrivateAddress/WebAddress",
362                     case 35: pValues[nProp] >>= aItem.aPrivMail;        break;// "PrivateAddress/Email",
363                     case 36: pValues[nProp] >>= aItem.aCompCompany;     break;// "BusinessAddress/Company",
364                     case 37: pValues[nProp] >>= aItem.aCompCompanyExt;  break;// "BusinessAddress/CompanyExt",
365                     case 38: pValues[nProp] >>= aItem.aCompSlogan;      break;// "BusinessAddress/Slogan",
366                     case 39: pValues[nProp] >>= aItem.aCompStreet;      break;// "BusinessAddress/Street",
367                     case 40: pValues[nProp] >>= aItem.aCompZip;         break;// "BusinessAddress/Zip",
368                     case 41: pValues[nProp] >>= aItem.aCompCity;        break;// "BusinessAddress/City",
369                     case 42: pValues[nProp] >>= aItem.aCompCountry;     break;// "BusinessAddress/Country",
370                     case 43: pValues[nProp] >>= aItem.aCompState;       break;// "BusinessAddress/State",
371                     case 44: pValues[nProp] >>= aItem.aCompPosition;    break;// "BusinessAddress/Position",
372                     case 45: pValues[nProp] >>= aItem.aCompPhone;       break;// "BusinessAddress/Phone",
373                     case 46: pValues[nProp] >>= aItem.aCompMobile;      break;// "BusinessAddress/Mobile",
374                     case 47: pValues[nProp] >>= aItem.aCompFax;         break;// "BusinessAddress/Fax",
375                     case 48: pValues[nProp] >>= aItem.aCompWWW;         break;// "BusinessAddress/WebAddress",
376                     case 49: pValues[nProp] >>= aItem.aCompMail;        break;// "BusinessAddress/Email",
377                     case 50: pValues[nProp] >>= aItem.sGlossaryGroup;   break;// "AutoText/Group"
378                     case 51: pValues[nProp] >>= aItem.sGlossaryBlockName; break;// "AutoText/Block"
379                 }
380             }
381         }
382     }
383     if(!bIsLabel && bNoConfigValues)
384     {
385 
386         SvtUserOptions& rUserOpt = SW_MOD()->GetUserOptions();
387         aItem.aPrivFirstName = rUserOpt.GetFirstName();
388         aItem.aPrivName = rUserOpt.GetLastName();
389         aItem.aPrivShortCut = rUserOpt.GetID();
390         aItem.aCompCompany = rUserOpt.GetCompany();
391         aItem.aCompStreet = aItem.aPrivStreet = rUserOpt.GetStreet();
392 
393         aItem.aCompCountry = aItem.aPrivCountry = rUserOpt.GetCountry();
394         aItem.aCompZip = aItem.aPrivZip= rUserOpt.GetZip();
395         aItem.aCompCity = aItem.aPrivCity = rUserOpt.GetCity();
396         aItem.aPrivTitle = rUserOpt.GetTitle();
397         aItem.aCompPosition = rUserOpt.GetPosition();
398         aItem.aPrivPhone = rUserOpt.GetTelephoneHome();
399         aItem.aCompPhone = rUserOpt.GetTelephoneWork();
400         aItem.aCompFax = aItem.aPrivFax = rUserOpt.GetFax();
401         aItem.aCompMail = aItem.aPrivMail = rUserOpt.GetEmail();
402         aItem.aCompState = aItem.aPrivState = rUserOpt.GetState();
403         aItem.bSynchron = sal_True;
404         SetModified();
405     }
406 }
407 /* -----------------------------25.09.00 16:26--------------------------------
408 
409  ---------------------------------------------------------------------------*/
410 void SwLabCfgItem::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
411 
412 void    SwLabCfgItem::Commit()
413 {
414     Sequence<OUString> aNames = GetPropertyNames();
415     Sequence<Any> aValues(aNames.getLength());
416     Any* pValues = aValues.getArray();
417 
418     const Type& rType = ::getBooleanCppuType();
419     for(int nProp = 0, nProperty = 0; nProp < aNames.getLength(); nProp++, nProperty++)
420     {
421         //to have a contiuous switch an offset is added
422         if(nProp == 15 && !bIsLabel)
423             nProperty += 3;
424         switch(nProperty)
425         {
426             case  0: pValues[nProp].setValue(&aItem.bCont, rType); break;// "Medium/Continous",
427             case  1: pValues[nProp] <<= aItem.aMake;            break;// "Medium/Brand",
428             case  2: pValues[nProp] <<= aItem.aType;            break;// "Medium/Type",
429             case  3: pValues[nProp] <<= aItem.nCols;            break;// "Format/Column",
430             case  4: pValues[nProp] <<= aItem.nRows;            break;// "Format/Row",
431             case  5: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lHDist));break;// "Format/HorizontalDistance",
432             case  6: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lVDist));break;// "Format/VerticalDistance",
433             case  7: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lWidth));            break;// "Format/Width",
434             case  8: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lHeight));           break;// "Format/Height",
435             case  9: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lLeft));         break;// "Format/LeftMargin",
436             case 10: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lUpper));            break;// "Format/TopMargin",
437             case 11: pValues[nProp].setValue(&aItem.bSynchron, rType); break;// "Option/Synchronize",
438             case 12: pValues[nProp].setValue(&aItem.bPage, rType); break;// "Option/Page",
439             case 13: pValues[nProp] <<= aItem.nCol;     break;// "Option/Column",
440             case 14: pValues[nProp] <<= aItem.nRow;     break;// "Option/Row"
441             case 15: pValues[nProp].setValue(&aItem.bAddr, rType);      break;// "Inscription/UseAddress",
442             case 16: pValues[nProp] <<= aItem.aWriting;         break;// "Inscription/Address",
443             case 17: pValues[nProp] <<= aItem.sDBName;          break;// "Inscription/Database"
444             case 18: pValues[nProp] <<= aItem.aPrivFirstName;   break;// "PrivateAddress/FirstName",
445             case 19: pValues[nProp] <<= aItem.aPrivName;        break;// "PrivateAddress/Name",
446             case 20: pValues[nProp] <<= aItem.aPrivShortCut;    break;// "PrivateAddress/ShortCut",
447             case 21: pValues[nProp] <<= aItem.aPrivFirstName2;  break;// "PrivateAddress/SecondFirstName",
448             case 22: pValues[nProp] <<= aItem.aPrivName2;       break;// "PrivateAddress/SecondName",
449             case 23: pValues[nProp] <<= aItem.aPrivShortCut2;   break;// "PrivateAddress/SecondShortCut",
450             case 24: pValues[nProp] <<= aItem.aPrivStreet;      break;// "PrivateAddress/Street",
451             case 25: pValues[nProp] <<= aItem.aPrivZip;         break;// "PrivateAddress/Zip",
452             case 26: pValues[nProp] <<= aItem.aPrivCity;        break;// "PrivateAddress/City",
453             case 27: pValues[nProp] <<= aItem.aPrivCountry;     break;// "PrivateAddress/Country",
454             case 28: pValues[nProp] <<= aItem.aPrivState;       break;// "PrivateAddress/State",
455             case 29: pValues[nProp] <<= aItem.aPrivTitle;       break;// "PrivateAddress/Title",
456             case 30: pValues[nProp] <<= aItem.aPrivProfession;  break;// "PrivateAddress/Profession",
457             case 31: pValues[nProp] <<= aItem.aPrivPhone;       break;// "PrivateAddress/Phone",
458             case 32: pValues[nProp] <<= aItem.aPrivMobile;      break;// "PrivateAddress/Mobile",
459             case 33: pValues[nProp] <<= aItem.aPrivFax;         break;// "PrivateAddress/Fax",
460             case 34: pValues[nProp] <<= aItem.aPrivWWW;         break;// "PrivateAddress/WebAddress",
461             case 35: pValues[nProp] <<= aItem.aPrivMail;        break;// "PrivateAddress/Email",
462             case 36: pValues[nProp] <<= aItem.aCompCompany;     break;// "BusinessAddress/Company",
463             case 37: pValues[nProp] <<= aItem.aCompCompanyExt;  break;// "BusinessAddress/CompanyExt",
464             case 38: pValues[nProp] <<= aItem.aCompSlogan;      break;// "BusinessAddress/Slogan",
465             case 39: pValues[nProp] <<= aItem.aCompStreet;      break;// "BusinessAddress/Street",
466             case 40: pValues[nProp] <<= aItem.aCompZip;         break;// "BusinessAddress/Zip",
467             case 41: pValues[nProp] <<= aItem.aCompCity;        break;// "BusinessAddress/City",
468             case 42: pValues[nProp] <<= aItem.aCompCountry;     break;// "BusinessAddress/Country",
469             case 43: pValues[nProp] <<= aItem.aCompState;       break;// "BusinessAddress/State",
470             case 44: pValues[nProp] <<= aItem.aCompPosition;    break;// "BusinessAddress/Position",
471             case 45: pValues[nProp] <<= aItem.aCompPhone;       break;// "BusinessAddress/Phone",
472             case 46: pValues[nProp] <<= aItem.aCompMobile;      break;// "BusinessAddress/Mobile",
473             case 47: pValues[nProp] <<= aItem.aCompFax;         break;// "BusinessAddress/Fax",
474             case 48: pValues[nProp] <<= aItem.aCompWWW;         break;// "BusinessAddress/WebAddress",
475             case 49: pValues[nProp] <<= aItem.aCompMail;        break;// "BusinessAddress/Email",
476             case 50: pValues[nProp] <<= aItem.sGlossaryGroup;   break;// "AutoText/Group"
477             case 51: pValues[nProp] <<= aItem.sGlossaryBlockName; break;// "AutoText/Block"
478         }
479     }
480     PutProperties(aNames, aValues);
481 }
482 
483