xref: /trunk/main/sw/source/ui/envelp/labimg.cxx (revision ffd38472365e95f6a578737bc9a5eb0fac624a86)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 #include <tools/stream.hxx>
29 #ifndef _RESID_HXX //autogen
30 #include <tools/resid.hxx>
31 #endif
32 #include <com/sun/star/uno/Any.hxx>
33 #include <com/sun/star/uno/Sequence.hxx>
34 #include <unotools/useroptions.hxx>
35 #include <tools/shl.hxx>
36 #include <swmodule.hxx>
37 #include "labimg.hxx"
38 #include "cmdid.h"
39 #include "swtypes.hxx"
40 #include <unomid.h>
41 
42 using namespace utl;
43 using namespace rtl;
44 using namespace ::com::sun::star::uno;
45 
46 
47 // ----------------------------------------------------------------------------
48 SwLabItem::SwLabItem() :
49 
50     SfxPoolItem(FN_LABEL),
51     lLeft (0),
52     lUpper(0),
53     nCols (1),
54     nRows (1),
55     nCol  (1),
56     nRow  (1),
57     lPaperWidth(0),
58     lPaperHeight(0)
59 {
60     bAddr = bCont = bSynchron = sal_False;
61     bPage = sal_True;
62     lHDist  =
63     lVDist  =
64     lWidth  =
65     lHeight = 5669; // 10 cm
66 }
67 
68 // ----------------------------------------------------------------------------
69 SwLabItem::SwLabItem(const SwLabItem& rItem) :
70     SfxPoolItem(FN_LABEL)
71 {
72         *this = rItem;
73 }
74 // ----------------------------------------------------------------------------
75 SwLabItem& SwLabItem::operator =(const SwLabItem& rItem)
76 {
77     bAddr    = rItem.bAddr;
78     aWriting = rItem.aWriting;
79     bCont    = rItem.bCont;
80     sDBName  = rItem.sDBName;
81     aLstMake = rItem.aLstMake;
82     aLstType = rItem.aLstType;
83     aMake    = rItem.aMake;
84     aType    = rItem.aType;
85     bPage    = rItem.bPage;
86     bSynchron = rItem.bSynchron;
87     aBin     = rItem.aBin;
88     nCol     = rItem.nCol;
89     nRow     = rItem.nRow;
90     lHDist   = rItem.lHDist;
91     lVDist   = rItem.lVDist;
92     lWidth   = rItem.lWidth;
93     lHeight  = rItem.lHeight;
94     lLeft    = rItem.lLeft;
95     lUpper   = rItem.lUpper;
96     nCols    = rItem.nCols;
97     nRows    = rItem.nRows;
98     lPaperWidth  = rItem.lPaperWidth;
99     lPaperHeight  = rItem.lPaperHeight;
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            lPaperWidth  == rLab.lPaperWidth &&
161            lPaperHeight == rLab.lPaperHeight &&
162            aWriting == rLab.aWriting&&
163            aMake    == rLab.aMake   &&
164            aType    == rLab.aType   &&
165            aLstMake == rLab.aLstMake&&
166            aLstType == rLab.aLstType&&
167            sDBName  == rLab.sDBName &&
168             aPrivFirstName ==       rLab.aPrivFirstName&&
169             aPrivName ==             rLab.aPrivName&&
170             aPrivShortCut ==         rLab.aPrivShortCut&&
171             aPrivFirstName2 ==       rLab.aPrivFirstName2&&
172             aPrivName2 ==            rLab.aPrivName2&&
173             aPrivShortCut2 ==        rLab.aPrivShortCut2&&
174             aPrivStreet ==           rLab.aPrivStreet&&
175             aPrivZip ==              rLab.aPrivZip&&
176             aPrivCity ==             rLab.aPrivCity&&
177             aPrivCountry ==          rLab.aPrivCountry&&
178             aPrivState ==            rLab.aPrivState&&
179             aPrivTitle ==            rLab.aPrivTitle&&
180             aPrivProfession ==       rLab.aPrivProfession&&
181             aPrivPhone ==            rLab.aPrivPhone&&
182             aPrivMobile ==           rLab.aPrivMobile&&
183             aPrivFax ==              rLab.aPrivFax&&
184             aPrivWWW ==              rLab.aPrivWWW&&
185             aPrivMail ==             rLab.aPrivMail&&
186             aCompCompany ==          rLab.aCompCompany&&
187             aCompCompanyExt ==       rLab.aCompCompanyExt&&
188             aCompSlogan ==           rLab.aCompSlogan&&
189             aCompStreet ==           rLab.aCompStreet&&
190             aCompZip ==              rLab.aCompZip&&
191             aCompCity ==             rLab.aCompCity&&
192             aCompCountry ==          rLab.aCompCountry&&
193             aCompState ==            rLab.aCompState&&
194             aCompPosition ==         rLab.aCompPosition&&
195             aCompPhone ==            rLab.aCompPhone&&
196             aCompMobile ==           rLab.aCompMobile&&
197             aCompFax ==              rLab.aCompFax&&
198             aCompWWW ==              rLab.aCompWWW&&
199             aCompMail ==             rLab.aCompMail &&
200             sGlossaryGroup ==        rLab.sGlossaryGroup &&
201             sGlossaryBlockName ==    rLab.sGlossaryBlockName;
202 }
203 
204 // --------------------------------------------------------------------------
205 SfxPoolItem* SwLabItem::Clone(SfxItemPool*) const
206 {
207     return new SwLabItem(*this);
208 }
209 
210 /* -----------------------------25.09.00 16:25--------------------------------
211 
212  ---------------------------------------------------------------------------*/
213 Sequence<rtl::OUString> SwLabCfgItem::GetPropertyNames()
214 {
215     static const char* aLabelPropNames[] =
216     {
217         "Medium/Continuous",            // 0
218         "Medium/Brand",             // 1
219         "Medium/Type",              // 2
220         "Format/Column",            // 3
221         "Format/Row",               // 4
222         "Format/HorizontalDistance",// 5
223         "Format/VerticalDistance",  // 6
224         "Format/Width",             // 7
225         "Format/Height",            // 8
226         "Format/LeftMargin",        // 9
227         "Format/TopMargin",         //10
228         "Format/PaperWidth",        //11
229         "Format/PaperHeight",       //12
230         "Option/Synchronize",       //13
231         "Option/Page",              //14
232         "Option/Column",            //15
233         "Option/Row",               //16
234         "Inscription/UseAddress",   //17
235         "Inscription/Address",      //18
236         "Inscription/Database"      //19
237     };
238     static const char* aBusinessPropNames[] =
239     {
240         "PrivateAddress/FirstName",             //  0
241         "PrivateAddress/Name",                  //  1
242         "PrivateAddress/ShortCut",              //  2
243         "PrivateAddress/SecondFirstName",       //  3
244         "PrivateAddress/SecondName",            //  4
245         "PrivateAddress/SecondShortCut",        //  5
246         "PrivateAddress/Street",                //  6
247         "PrivateAddress/Zip",                   //  7
248         "PrivateAddress/City",                  //  8
249         "PrivateAddress/Country",               //  9
250         "PrivateAddress/State",                 // 10
251         "PrivateAddress/Title",                 // 11
252         "PrivateAddress/Profession",            // 12
253         "PrivateAddress/Phone",                 // 13
254         "PrivateAddress/Mobile",                // 14
255         "PrivateAddress/Fax",                   // 15
256         "PrivateAddress/WebAddress",            // 16
257         "PrivateAddress/Email",                 // 17
258         "BusinessAddress/Company",              // 18
259         "BusinessAddress/CompanyExt",           // 19
260         "BusinessAddress/Slogan",               // 20
261         "BusinessAddress/Street",               // 21
262         "BusinessAddress/Zip",                  // 22
263         "BusinessAddress/City",                 // 23
264         "BusinessAddress/Country",              // 24
265         "BusinessAddress/State",                // 25
266         "BusinessAddress/Position",             // 26
267         "BusinessAddress/Phone",                // 27
268         "BusinessAddress/Mobile",               // 28
269         "BusinessAddress/Fax",                  // 29
270         "BusinessAddress/WebAddress",           // 30
271         "BusinessAddress/Email",                // 31
272         "AutoText/Group",                       // 32
273         "AutoText/Block"                        // 33
274     };
275     const int nBusinessCount = bIsLabel ? 0 : 34;
276     const int nLabelCount = bIsLabel ? 20 : 17;
277     Sequence<OUString> aNames(nBusinessCount + nLabelCount);
278     OUString* pNames = aNames.getArray();
279     int nIndex = 0;
280     for(int nLabel = 0; nLabel < nLabelCount; nLabel++)
281         pNames[nIndex++] = OUString::createFromAscii(aLabelPropNames[nLabel]);
282     for(int nBusiness = 0; nBusiness < nBusinessCount; nBusiness++)
283         pNames[nIndex++] = OUString::createFromAscii(aBusinessPropNames[nBusiness]);
284     return aNames;
285 }
286 /* ----------------------------------------------------------------------------
287 
288  ---------------------------------------------------------------------------*/
289 SwLabCfgItem::SwLabCfgItem(sal_Bool bLabel) :
290     ConfigItem(bLabel ? C2U("Office.Writer/Label") :  C2U("Office.Writer/BusinessCard")),
291     bIsLabel(bLabel)
292 {
293     Sequence<OUString> aNames = GetPropertyNames();
294     Sequence<Any> aValues = GetProperties(aNames);
295     EnableNotification(aNames);
296     const Any* pValues = aValues.getConstArray();
297     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
298     sal_Bool bNoConfigValues = sal_True;
299     if(aValues.getLength() == aNames.getLength())
300     {
301         for(int nProp = 0, nProperty = 0; nProp < aNames.getLength(); nProp++, nProperty++)
302         {
303 
304             if(pValues[nProp].hasValue())
305             {
306                 //to have a continuous switch an offset is added
307                 if(nProp == 17 && !bIsLabel)
308                     nProperty += 3;
309                 if(nProperty >= 20)
310                     bNoConfigValues = sal_False;
311                 switch(nProperty)
312                 {
313                     case  0: aItem.bCont = *(sal_Bool*)pValues[nProp].getValue(); break;// "Medium/Continuous",
314                     case  1: pValues[nProp] >>= aItem.aMake;            break;// "Medium/Brand",
315                     case  2: pValues[nProp] >>= aItem.aType;            break;// "Medium/Type",
316                     case  3: pValues[nProp] >>= aItem.nCols;            break;// "Format/Column",
317                     case  4: pValues[nProp] >>= aItem.nRows;            break;// "Format/Row",
318                     case  5:
319                         pValues[nProp] >>= aItem.lHDist;
320                         aItem.lHDist = MM100_TO_TWIP(aItem.lHDist);
321                     break;// "Format/HorizontalDistance",
322                     case  6:
323                         pValues[nProp] >>= aItem.lVDist;
324                         aItem.lVDist = MM100_TO_TWIP(aItem.lVDist);
325                     break;// "Format/VerticalDistance",
326                     case  7:
327                         pValues[nProp] >>= aItem.lWidth;
328                         aItem.lWidth = MM100_TO_TWIP(aItem.lWidth);
329                     break;// "Format/Width",
330                     case  8:
331                         pValues[nProp] >>= aItem.lHeight;
332                         aItem.lHeight = MM100_TO_TWIP(aItem.lHeight);
333                     break;// "Format/Height",
334                     case  9:
335                         pValues[nProp] >>= aItem.lLeft;
336                         aItem.lLeft = MM100_TO_TWIP(aItem.lLeft);
337                     break;// "Format/LeftMargin",
338                     case 10:
339                         pValues[nProp] >>= aItem.lUpper;
340                         aItem.lUpper = MM100_TO_TWIP(aItem.lUpper);
341                     break;// "Format/TopMargin",
342                     case  11:
343                         pValues[nProp] >>= aItem.lPaperWidth;
344                         aItem.lPaperWidth = MM100_TO_TWIP(aItem.lPaperWidth);
345                     break;// "Format/PaperWidth",
346                     case  12:
347                         pValues[nProp] >>= aItem.lPaperHeight;
348                         aItem.lPaperHeight = MM100_TO_TWIP(aItem.lPaperHeight);
349                     break;// "Format/PaperHeight",
350                     case 13: aItem.bSynchron = *(sal_Bool*)pValues[nProp].getValue(); break;// "Option/Synchronize",
351                     case 14: aItem.bPage = *(sal_Bool*)pValues[nProp].getValue(); break;// "Option/Page",
352                     case 15: pValues[nProp] >>= aItem.nCol;     break;// "Option/Column",
353                     case 16: pValues[nProp] >>= aItem.nRow;     break;// "Option/Row"
354                     case 17: aItem.bAddr = *(sal_Bool*)pValues[nProp].getValue();       break;// "Inscription/UseAddress",
355                     case 18: pValues[nProp] >>= aItem.aWriting;         break;// "Inscription/Address",
356                     case 19: pValues[nProp] >>= aItem.sDBName;          break;// "Inscription/Database"
357                     case 20: pValues[nProp] >>= aItem.aPrivFirstName;   break;// "PrivateAddress/FirstName",
358                     case 21: pValues[nProp] >>= aItem.aPrivName;        break;// "PrivateAddress/Name",
359                     case 22: pValues[nProp] >>= aItem.aPrivShortCut;    break;// "PrivateAddress/ShortCut",
360                     case 23: pValues[nProp] >>= aItem.aPrivFirstName2;  break;// "PrivateAddress/SecondFirstName",
361                     case 24: pValues[nProp] >>= aItem.aPrivName2;       break;// "PrivateAddress/SecondName",
362                     case 25: pValues[nProp] >>= aItem.aPrivShortCut2;   break;// "PrivateAddress/SecondShortCut",
363                     case 26: pValues[nProp] >>= aItem.aPrivStreet;      break;// "PrivateAddress/Street",
364                     case 27: pValues[nProp] >>= aItem.aPrivZip;         break;// "PrivateAddress/Zip",
365                     case 28: pValues[nProp] >>= aItem.aPrivCity;        break;// "PrivateAddress/City",
366                     case 29: pValues[nProp] >>= aItem.aPrivCountry;     break;// "PrivateAddress/Country",
367                     case 30: pValues[nProp] >>= aItem.aPrivState;       break;// "PrivateAddress/State",
368                     case 31: pValues[nProp] >>= aItem.aPrivTitle;       break;// "PrivateAddress/Title",
369                     case 32: pValues[nProp] >>= aItem.aPrivProfession;  break;// "PrivateAddress/Profession",
370                     case 33: pValues[nProp] >>= aItem.aPrivPhone;       break;// "PrivateAddress/Phone",
371                     case 34: pValues[nProp] >>= aItem.aPrivMobile;      break;// "PrivateAddress/Mobile",
372                     case 35: pValues[nProp] >>= aItem.aPrivFax;         break;// "PrivateAddress/Fax",
373                     case 36: pValues[nProp] >>= aItem.aPrivWWW;         break;// "PrivateAddress/WebAddress",
374                     case 37: pValues[nProp] >>= aItem.aPrivMail;        break;// "PrivateAddress/Email",
375                     case 38: pValues[nProp] >>= aItem.aCompCompany;     break;// "BusinessAddress/Company",
376                     case 39: pValues[nProp] >>= aItem.aCompCompanyExt;  break;// "BusinessAddress/CompanyExt",
377                     case 40: pValues[nProp] >>= aItem.aCompSlogan;      break;// "BusinessAddress/Slogan",
378                     case 41: pValues[nProp] >>= aItem.aCompStreet;      break;// "BusinessAddress/Street",
379                     case 42: pValues[nProp] >>= aItem.aCompZip;         break;// "BusinessAddress/Zip",
380                     case 43: pValues[nProp] >>= aItem.aCompCity;        break;// "BusinessAddress/City",
381                     case 44: pValues[nProp] >>= aItem.aCompCountry;     break;// "BusinessAddress/Country",
382                     case 45: pValues[nProp] >>= aItem.aCompState;       break;// "BusinessAddress/State",
383                     case 46: pValues[nProp] >>= aItem.aCompPosition;    break;// "BusinessAddress/Position",
384                     case 47: pValues[nProp] >>= aItem.aCompPhone;       break;// "BusinessAddress/Phone",
385                     case 48: pValues[nProp] >>= aItem.aCompMobile;      break;// "BusinessAddress/Mobile",
386                     case 49: pValues[nProp] >>= aItem.aCompFax;         break;// "BusinessAddress/Fax",
387                     case 50: pValues[nProp] >>= aItem.aCompWWW;         break;// "BusinessAddress/WebAddress",
388                     case 51: pValues[nProp] >>= aItem.aCompMail;        break;// "BusinessAddress/Email",
389                     case 52: pValues[nProp] >>= aItem.sGlossaryGroup;   break;// "AutoText/Group"
390                     case 53: pValues[nProp] >>= aItem.sGlossaryBlockName; break;// "AutoText/Block"
391                 }
392             }
393         }
394     }
395     if(!bIsLabel && bNoConfigValues)
396     {
397 
398         SvtUserOptions& rUserOpt = SW_MOD()->GetUserOptions();
399         aItem.aPrivFirstName = rUserOpt.GetFirstName();
400         aItem.aPrivName = rUserOpt.GetLastName();
401         aItem.aPrivShortCut = rUserOpt.GetID();
402         aItem.aCompCompany = rUserOpt.GetCompany();
403         aItem.aCompStreet = aItem.aPrivStreet = rUserOpt.GetStreet();
404 
405         aItem.aCompCountry = aItem.aPrivCountry = rUserOpt.GetCountry();
406         aItem.aCompZip = aItem.aPrivZip= rUserOpt.GetZip();
407         aItem.aCompCity = aItem.aPrivCity = rUserOpt.GetCity();
408         aItem.aPrivTitle = rUserOpt.GetTitle();
409         aItem.aCompPosition = rUserOpt.GetPosition();
410         aItem.aPrivPhone = rUserOpt.GetTelephoneHome();
411         aItem.aCompPhone = rUserOpt.GetTelephoneWork();
412         aItem.aCompFax = aItem.aPrivFax = rUserOpt.GetFax();
413         aItem.aCompMail = aItem.aPrivMail = rUserOpt.GetEmail();
414         aItem.aCompState = aItem.aPrivState = rUserOpt.GetState();
415         aItem.bSynchron = sal_True;
416         SetModified();
417     }
418 }
419 /* -----------------------------25.09.00 16:26--------------------------------
420 
421  ---------------------------------------------------------------------------*/
422 void SwLabCfgItem::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
423 
424 void    SwLabCfgItem::Commit()
425 {
426     Sequence<OUString> aNames = GetPropertyNames();
427     Sequence<Any> aValues(aNames.getLength());
428     Any* pValues = aValues.getArray();
429 
430     const Type& rType = ::getBooleanCppuType();
431     for(int nProp = 0, nProperty = 0; nProp < aNames.getLength(); nProp++, nProperty++)
432     {
433         //to have a continuous switch an offset is added
434         if(nProp == 17 && !bIsLabel)
435             nProperty += 3;
436         switch(nProperty)
437         {
438             case  0: pValues[nProp].setValue(&aItem.bCont, rType); break;// "Medium/Continuous",
439             case  1: pValues[nProp] <<= aItem.aMake;            break;// "Medium/Brand",
440             case  2: pValues[nProp] <<= aItem.aType;            break;// "Medium/Type",
441             case  3: pValues[nProp] <<= aItem.nCols;            break;// "Format/Column",
442             case  4: pValues[nProp] <<= aItem.nRows;            break;// "Format/Row",
443             case  5: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lHDist));break;// "Format/HorizontalDistance",
444             case  6: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lVDist));break;// "Format/VerticalDistance",
445             case  7: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lWidth));            break;// "Format/Width",
446             case  8: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lHeight));           break;// "Format/Height",
447             case  9: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lLeft));         break;// "Format/LeftMargin",
448             case 10: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lUpper));            break;// "Format/TopMargin",
449             case 11: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lPaperWidth));           break;// "Format/PaperWidth",
450             case 12: pValues[nProp] <<= static_cast<sal_Int32>(TWIP_TO_MM100(aItem.lPaperHeight));          break;// "Format/PaperHeight",
451             case 13: pValues[nProp].setValue(&aItem.bSynchron, rType); break;// "Option/Synchronize",
452             case 14: pValues[nProp].setValue(&aItem.bPage, rType); break;// "Option/Page",
453             case 15: pValues[nProp] <<= aItem.nCol;     break;// "Option/Column",
454             case 16: pValues[nProp] <<= aItem.nRow;     break;// "Option/Row"
455             case 17: pValues[nProp].setValue(&aItem.bAddr, rType);      break;// "Inscription/UseAddress",
456             case 18: pValues[nProp] <<= aItem.aWriting;         break;// "Inscription/Address",
457             case 19: pValues[nProp] <<= aItem.sDBName;          break;// "Inscription/Database"
458             case 20: pValues[nProp] <<= aItem.aPrivFirstName;   break;// "PrivateAddress/FirstName",
459             case 21: pValues[nProp] <<= aItem.aPrivName;        break;// "PrivateAddress/Name",
460             case 22: pValues[nProp] <<= aItem.aPrivShortCut;    break;// "PrivateAddress/ShortCut",
461             case 23: pValues[nProp] <<= aItem.aPrivFirstName2;  break;// "PrivateAddress/SecondFirstName",
462             case 24: pValues[nProp] <<= aItem.aPrivName2;       break;// "PrivateAddress/SecondName",
463             case 25: pValues[nProp] <<= aItem.aPrivShortCut2;   break;// "PrivateAddress/SecondShortCut",
464             case 26: pValues[nProp] <<= aItem.aPrivStreet;      break;// "PrivateAddress/Street",
465             case 27: pValues[nProp] <<= aItem.aPrivZip;         break;// "PrivateAddress/Zip",
466             case 28: pValues[nProp] <<= aItem.aPrivCity;        break;// "PrivateAddress/City",
467             case 29: pValues[nProp] <<= aItem.aPrivCountry;     break;// "PrivateAddress/Country",
468             case 30: pValues[nProp] <<= aItem.aPrivState;       break;// "PrivateAddress/State",
469             case 31: pValues[nProp] <<= aItem.aPrivTitle;       break;// "PrivateAddress/Title",
470             case 32: pValues[nProp] <<= aItem.aPrivProfession;  break;// "PrivateAddress/Profession",
471             case 33: pValues[nProp] <<= aItem.aPrivPhone;       break;// "PrivateAddress/Phone",
472             case 34: pValues[nProp] <<= aItem.aPrivMobile;      break;// "PrivateAddress/Mobile",
473             case 35: pValues[nProp] <<= aItem.aPrivFax;         break;// "PrivateAddress/Fax",
474             case 36: pValues[nProp] <<= aItem.aPrivWWW;         break;// "PrivateAddress/WebAddress",
475             case 37: pValues[nProp] <<= aItem.aPrivMail;        break;// "PrivateAddress/Email",
476             case 38: pValues[nProp] <<= aItem.aCompCompany;     break;// "BusinessAddress/Company",
477             case 39: pValues[nProp] <<= aItem.aCompCompanyExt;  break;// "BusinessAddress/CompanyExt",
478             case 40: pValues[nProp] <<= aItem.aCompSlogan;      break;// "BusinessAddress/Slogan",
479             case 41: pValues[nProp] <<= aItem.aCompStreet;      break;// "BusinessAddress/Street",
480             case 42: pValues[nProp] <<= aItem.aCompZip;         break;// "BusinessAddress/Zip",
481             case 43: pValues[nProp] <<= aItem.aCompCity;        break;// "BusinessAddress/City",
482             case 44: pValues[nProp] <<= aItem.aCompCountry;     break;// "BusinessAddress/Country",
483             case 45: pValues[nProp] <<= aItem.aCompState;       break;// "BusinessAddress/State",
484             case 46: pValues[nProp] <<= aItem.aCompPosition;    break;// "BusinessAddress/Position",
485             case 47: pValues[nProp] <<= aItem.aCompPhone;       break;// "BusinessAddress/Phone",
486             case 48: pValues[nProp] <<= aItem.aCompMobile;      break;// "BusinessAddress/Mobile",
487             case 49: pValues[nProp] <<= aItem.aCompFax;         break;// "BusinessAddress/Fax",
488             case 50: pValues[nProp] <<= aItem.aCompWWW;         break;// "BusinessAddress/WebAddress",
489             case 51: pValues[nProp] <<= aItem.aCompMail;        break;// "BusinessAddress/Email",
490             case 52: pValues[nProp] <<= aItem.sGlossaryGroup;   break;// "AutoText/Group"
491             case 53: pValues[nProp] <<= aItem.sGlossaryBlockName; break;// "AutoText/Block"
492         }
493     }
494     PutProperties(aNames, aValues);
495 }
496