/**************************************************************
 * 
 * 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
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"


#include <hintids.hxx>
#include <sot/clsids.hxx>
#include <tools/stream.hxx>
#include <vcl/svapp.hxx>
#include <svl/mailenum.hxx>
#ifndef _SVX_SVXIDS_HRC //autogen
#include <svx/svxids.hrc>
#endif
#include <editeng/svxenum.hxx>
#include <tools/debug.hxx>

#include <tools/globname.hxx>
#include <swtypes.hxx>
#include <itabenum.hxx>
#ifndef _MODCFG_HXX
#include <modcfg.hxx>
#endif
#include <fldupde.hxx>
#include <unotools/syslocaleoptions.hxx>
#include <caption.hxx>
#include <com/sun/star/uno/Any.hxx>

#include <unomid.h>

using namespace utl;
using rtl::OUString;
using namespace com::sun::star::uno;

#define GLOB_NAME_CALC		0
#define GLOB_NAME_IMPRESS   1
#define GLOB_NAME_DRAW      2
#define GLOB_NAME_MATH      3
#define GLOB_NAME_CHART     4

SV_IMPL_PTRARR_SORT(InsCapOptArr, InsCaptionOptPtr)
/* -----------------03.11.98 13:46-------------------
 *
 * --------------------------------------------------*/
InsCaptionOpt* InsCaptionOptArr::Find(const SwCapObjType eType, const SvGlobalName *pOleId) const
{
	for (sal_uInt16 i = 0; i < Count(); i++ )
	{
		InsCaptionOpt* pObj = GetObject(i);
		if (pObj->GetObjType() == eType &&
			(eType != OLE_CAP ||
			 (pOleId &&
              pObj->GetOleId() == *pOleId)))
			return pObj;
	}

	return 0;
}

/* -----------------03.11.98 15:05-------------------
 *
 * --------------------------------------------------*/

const InsCaptionOpt* SwModuleOptions::GetCapOption(
	sal_Bool bHTML, const SwCapObjType eType, const SvGlobalName *pOleId)
{
	if(bHTML)
	{
		DBG_ERROR("no caption option in sw/web!");
		return 0;
	}
	else
	{
		sal_Bool bFound = sal_False;
		if(eType == OLE_CAP && pOleId)
		{
			for( sal_uInt16 nId = 0; nId <= GLOB_NAME_CHART && !bFound; nId++)
				bFound = *pOleId == aInsertConfig.aGlobalNames[nId  ];
			if(!bFound)
				return aInsertConfig.pOLEMiscOpt;
		}
		return aInsertConfig.pCapOptions->Find(eType, pOleId);
	}
}

/* -----------------03.11.98 15:05-------------------
 *
 * --------------------------------------------------*/

sal_Bool SwModuleOptions::SetCapOption(sal_Bool bHTML, const InsCaptionOpt* pOpt)
{
	sal_Bool bRet = sal_False;

	if(bHTML)
	{
		DBG_ERROR("no caption option in sw/web!");
	}
	else if (pOpt)
	{
		sal_Bool bFound = sal_False;
		if(pOpt->GetObjType() == OLE_CAP && &pOpt->GetOleId())
		{
			for( sal_uInt16 nId = 0; nId <= GLOB_NAME_CHART; nId++)
				bFound = pOpt->GetOleId() == aInsertConfig.aGlobalNames[nId  ];
			if(!bFound)
			{
				if(aInsertConfig.pOLEMiscOpt)
					*aInsertConfig.pOLEMiscOpt = *pOpt;
				else
					aInsertConfig.pOLEMiscOpt = new InsCaptionOpt(*pOpt);
			}
		}

		InsCaptionOptArr& rArr = *aInsertConfig.pCapOptions;
		InsCaptionOpt *pObj = rArr.Find(pOpt->GetObjType(), &pOpt->GetOleId());

		if (pObj)
		{
			*pObj = *pOpt;
		}
		else
			rArr.Insert(new InsCaptionOpt(*pOpt));

		aInsertConfig.SetModified();
		bRet = sal_True;
	}

	return bRet;
}
/*-----------------13.01.97 12.44-------------------

--------------------------------------------------*/
SwModuleOptions::SwModuleOptions() :
	aInsertConfig(sal_False),
	aWebInsertConfig(sal_True),
	aTableConfig(sal_False),
	aWebTableConfig(sal_True),
	bHideFieldTips(sal_False)
{
}
/* -----------------------------19.01.01 12:26--------------------------------

 ---------------------------------------------------------------------------*/
String SwModuleOptions::ConvertWordDelimiter(const String& rDelim, sal_Bool bFromUI)
{
	String sReturn;
	if(bFromUI)
	{
		String sChar;

		xub_StrLen i = 0;
		sal_Unicode c;

		while (i < rDelim.Len())
		{
			c = rDelim.GetChar(i++);

			if (c == '\\')
			{
				c = rDelim.GetChar(i++);

				switch (c)
				{
					case 'n':	sReturn += '\n';	break;
					case 't':	sReturn += '\t';	break;
					case '\\':	sReturn += '\\';	break;

					case 'x':
					{
						sal_Unicode nVal, nChar;
						sal_Bool bValidData = sal_True;
						xub_StrLen n;
						for( n = 0, nChar = 0; n < 2 && i < rDelim.Len(); ++n, ++i )
						{
							if( ((nVal = rDelim.GetChar( i )) >= '0') && ( nVal <= '9') )
								nVal -= '0';
							else if( (nVal >= 'A') && (nVal <= 'F') )
								nVal -= 'A' - 10;
							else if( (nVal >= 'a') && (nVal <= 'f') )
								nVal -= 'a' - 10;
							else
							{
								DBG_ERROR( "ungueltiger Hex-Wert" );
								bValidData = sal_False;
								break;
							}

                            (nChar <<= 4 );
                            nChar = nChar + nVal;
						}
						if( bValidData )
							sReturn += nChar;
						break;
					}

					default:	// Unbekannt, daher nur Backslash einfuegen
						sReturn += '\\';
						i--;
						break;
				}
			}
			else
				sReturn += c;
		}
	}
	else
	{
		for (xub_StrLen i = 0; i < rDelim.Len(); i++)
		{
			sal_Unicode c = rDelim.GetChar(i);

			switch (c)
			{
				case '\n':	sReturn.AppendAscii(RTL_CONSTASCII_STRINGPARAM("\\n"));	break;
				case '\t':	sReturn.AppendAscii(RTL_CONSTASCII_STRINGPARAM("\\t"));	break;
				case '\\':	sReturn.AppendAscii(RTL_CONSTASCII_STRINGPARAM("\\\\"));	break;

				default:
					if( c <= 0x1f || c >= 0x7f )
					{
						sReturn.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\\x" ))
							+= String::CreateFromInt32( c, 16 );
					}
					else
						sReturn += c;
			}
		}
	}
	return sReturn;
}
/* -----------------------------10.10.00 16:22--------------------------------

 ---------------------------------------------------------------------------*/
const Sequence<OUString>& SwRevisionConfig::GetPropertyNames()
{
	static Sequence<OUString> aNames;
	if(!aNames.getLength())
	{
		const int nCount = 8;
		aNames.realloc(nCount);
		static const char* aPropNames[] =
		{
			"TextDisplay/Insert/Attribute",   			// 0
			"TextDisplay/Insert/Color",   				// 1
			"TextDisplay/Delete/Attribute",   			// 2
			"TextDisplay/Delete/Color",   				// 3
			"TextDisplay/ChangedAttribute/Attribute",   // 4
			"TextDisplay/ChangedAttribute/Color",   	// 5
			"LinesChanged/Mark",   						// 6
			"LinesChanged/Color"   						// 7
		};
		OUString* pNames = aNames.getArray();
		for(int i = 0; i < nCount; i++)
			pNames[i] = OUString::createFromAscii(aPropNames[i]);
	}
	return aNames;
}
/*-- 10.10.00 16:22:22---------------------------------------------------

  -----------------------------------------------------------------------*/
SwRevisionConfig::SwRevisionConfig() :
    ConfigItem(C2U("Office.Writer/Revision"),
        CONFIG_MODE_DELAYED_UPDATE|CONFIG_MODE_RELEASE_TREE)
{
	aInsertAttr.nItemId = SID_ATTR_CHAR_UNDERLINE;
	aInsertAttr.nAttr = UNDERLINE_SINGLE;
	aInsertAttr.nColor = COL_TRANSPARENT;
	aDeletedAttr.nItemId = SID_ATTR_CHAR_STRIKEOUT;
	aDeletedAttr.nAttr = STRIKEOUT_SINGLE;
	aDeletedAttr.nColor = COL_TRANSPARENT;
	aFormatAttr.nItemId = SID_ATTR_CHAR_WEIGHT;
	aFormatAttr.nAttr = WEIGHT_BOLD;
	aFormatAttr.nColor = COL_BLACK;

    Load();
}
/*-- 10.10.00 16:22:23---------------------------------------------------

  -----------------------------------------------------------------------*/
SwRevisionConfig::~SwRevisionConfig()
{
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
sal_Int32 lcl_ConvertAttrToCfg(const AuthorCharAttr& rAttr)
{
	sal_Int32 nRet = 0;
	switch(rAttr.nItemId)
	{
		case  SID_ATTR_CHAR_WEIGHT:	nRet = 1; break;
		case  SID_ATTR_CHAR_POSTURE: nRet = 2; break;
		case  SID_ATTR_CHAR_UNDERLINE: nRet = UNDERLINE_SINGLE == rAttr.nAttr ? 3 : 4; break;
        case  SID_ATTR_CHAR_STRIKEOUT: nRet = 3; break;
		case  SID_ATTR_CHAR_CASEMAP:
		{
			switch(rAttr.nAttr)
			{
				case  SVX_CASEMAP_VERSALIEN   : nRet = 5;break;
				case  SVX_CASEMAP_GEMEINE     : nRet = 6;break;
				case  SVX_CASEMAP_KAPITAELCHEN: nRet = 7;break;
				case  SVX_CASEMAP_TITEL       : nRet = 8;break;
			}
		}
        break;
		case SID_ATTR_BRUSH : nRet = 9; break;
	}
	return nRet;
}
//-----------------------------------------------------------------------------
void SwRevisionConfig::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}

void SwRevisionConfig::Commit()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues(aNames.getLength());
	Any* pValues = aValues.getArray();

	for(int nProp = 0; nProp < aNames.getLength(); nProp++)
	{
		sal_Int32 nVal = -1;
		switch(nProp)
		{
            case 0 : nVal = lcl_ConvertAttrToCfg(aInsertAttr); break;
			case 1 : nVal = aInsertAttr.nColor 	; break;
            case 2 : nVal = lcl_ConvertAttrToCfg(aDeletedAttr); break;
			case 3 : nVal = aDeletedAttr.nColor ; break;
            case 4 : nVal = lcl_ConvertAttrToCfg(aFormatAttr); break;
			case 5 : nVal = aFormatAttr.nColor 	; break;
			case 6 : nVal = nMarkAlign 			; break;
			case 7 : nVal = aMarkColor.GetColor(); break;
		}
		pValues[nProp] <<= nVal;
	}
	PutProperties(aNames, aValues);
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
void lcl_ConvertCfgToAttr(sal_Int32 nVal, AuthorCharAttr& rAttr, sal_Bool bDelete = sal_False)
{
	rAttr.nItemId = rAttr.nAttr = 0;
	switch(nVal)
	{
		case 1: rAttr.nItemId = SID_ATTR_CHAR_WEIGHT;	rAttr.nAttr = WEIGHT_BOLD              ; break;
		case 2: rAttr.nItemId = SID_ATTR_CHAR_POSTURE;  rAttr.nAttr = ITALIC_NORMAL            ; break;
        case 3: if(bDelete)
                {
                    rAttr.nItemId = SID_ATTR_CHAR_STRIKEOUT;
                    rAttr.nAttr = STRIKEOUT_SINGLE;
                }
                else
                {
                    rAttr.nItemId = SID_ATTR_CHAR_UNDERLINE;
                    rAttr.nAttr = UNDERLINE_SINGLE;
                }
        break;
		case 4: rAttr.nItemId = SID_ATTR_CHAR_UNDERLINE;rAttr.nAttr = UNDERLINE_DOUBLE         ; break;
		case 5: rAttr.nItemId = SID_ATTR_CHAR_CASEMAP;  rAttr.nAttr = SVX_CASEMAP_VERSALIEN    ; break;
		case 6: rAttr.nItemId = SID_ATTR_CHAR_CASEMAP;  rAttr.nAttr = SVX_CASEMAP_GEMEINE      ; break;
		case 7: rAttr.nItemId = SID_ATTR_CHAR_CASEMAP;  rAttr.nAttr = SVX_CASEMAP_KAPITAELCHEN ; break;
		case 8: rAttr.nItemId = SID_ATTR_CHAR_CASEMAP;  rAttr.nAttr = SVX_CASEMAP_TITEL        ; break;
		case 9: rAttr.nItemId = SID_ATTR_BRUSH;	break;
	}
}
void SwRevisionConfig::Load()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues = GetProperties(aNames);
	const Any* pValues = aValues.getConstArray();
	DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
	if(aValues.getLength() == aNames.getLength())
	{
		for(int nProp = 0; nProp < aNames.getLength(); nProp++)
		{
			if(pValues[nProp].hasValue())
			{
				sal_Int32 nVal = 0;
				pValues[nProp] >>= nVal;
				switch(nProp)
				{
					case 0 : lcl_ConvertCfgToAttr(nVal, aInsertAttr); break;
					case 1 : aInsertAttr.nColor 	= nVal; break;
                    case 2 : lcl_ConvertCfgToAttr(nVal, aDeletedAttr, sal_True); break;
					case 3 : aDeletedAttr.nColor 	= nVal; break;
					case 4 : lcl_ConvertCfgToAttr(nVal, aFormatAttr); break;
					case 5 : aFormatAttr.nColor 	= nVal; break;
                    case 6 : nMarkAlign = sal::static_int_cast< sal_uInt16, sal_Int32>(nVal); break;
					case 7 : aMarkColor.SetColor(nVal); break;
				}
			}
		}
	}
}
/* -----------------------------10.10.00 16:22--------------------------------

 ---------------------------------------------------------------------------*/
enum InsertConfigProp
{
    INS_PROP_TABLE_HEADER = 0,
    INS_PROP_TABLE_REPEATHEADER,                        // 1
    INS_PROP_TABLE_BORDER,                              // 2
    INS_PROP_TABLE_SPLIT,                               // 3 from here not in writer/web
    INS_PROP_CAP_AUTOMATIC,                             // 4
    INS_PROP_CAP_CAPTIONORDERNUMBERINGFIRST,            // 5
    INS_PROP_CAP_OBJECT_TABLE_ENABLE,                   // 6
    INS_PROP_CAP_OBJECT_TABLE_CATEGORY,                 // 7
    INS_PROP_CAP_OBJECT_TABLE_NUMBERING,                // 8
    INS_PROP_CAP_OBJECT_TABLE_NUMBERINGSEPARATOR,       // 9
    INS_PROP_CAP_OBJECT_TABLE_CAPTIONTEXT,              //10
    INS_PROP_CAP_OBJECT_TABLE_DELIMITER,                //11
    INS_PROP_CAP_OBJECT_TABLE_LEVEL,                    //12
    INS_PROP_CAP_OBJECT_TABLE_POSITION,                 //13
    INS_PROP_CAP_OBJECT_TABLE_CHARACTERSTYLE,           //14
    INS_PROP_CAP_OBJECT_FRAME_ENABLE,                   //15
    INS_PROP_CAP_OBJECT_FRAME_CATEGORY,                 //16
    INS_PROP_CAP_OBJECT_FRAME_NUMBERING,                //17
    INS_PROP_CAP_OBJECT_FRAME_NUMBERINGSEPARATOR,       //18
    INS_PROP_CAP_OBJECT_FRAME_CAPTIONTEXT,              //19
    INS_PROP_CAP_OBJECT_FRAME_DELIMITER,                //20
    INS_PROP_CAP_OBJECT_FRAME_LEVEL,                    //21
    INS_PROP_CAP_OBJECT_FRAME_POSITION,                 //22
    INS_PROP_CAP_OBJECT_FRAME_CHARACTERSTYLE,           //23
    INS_PROP_CAP_OBJECT_GRAPHIC_ENABLE,                          //24
    INS_PROP_CAP_OBJECT_GRAPHIC_CATEGORY,               //25
    INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERING,              //26
    INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERINGSEPARATOR,     //27
    INS_PROP_CAP_OBJECT_GRAPHIC_CAPTIONTEXT,            //28
    INS_PROP_CAP_OBJECT_GRAPHIC_DELIMITER,              //29
    INS_PROP_CAP_OBJECT_GRAPHIC_LEVEL,                  //30
    INS_PROP_CAP_OBJECT_GRAPHIC_POSITION,               //31
    INS_PROP_CAP_OBJECT_GRAPHIC_CHARACTERSTYLE,         //32
    INS_PROP_CAP_OBJECT_GRAPHIC_APPLYATTRIBUTES,        //33
    INS_PROP_CAP_OBJECT_CALC_ENABLE,                             //34
    INS_PROP_CAP_OBJECT_CALC_CATEGORY,                  //35
    INS_PROP_CAP_OBJECT_CALC_NUMBERING,                 //36
    INS_PROP_CAP_OBJECT_CALC_NUMBERINGSEPARATOR,        //37
    INS_PROP_CAP_OBJECT_CALC_CAPTIONTEXT,               //38
    INS_PROP_CAP_OBJECT_CALC_DELIMITER,                 //39
    INS_PROP_CAP_OBJECT_CALC_LEVEL,                     //40
    INS_PROP_CAP_OBJECT_CALC_POSITION,                  //41
    INS_PROP_CAP_OBJECT_CALC_CHARACTERSTYLE,            //42
    INS_PROP_CAP_OBJECT_CALC_APPLYATTRIBUTES,           //43
    INS_PROP_CAP_OBJECT_IMPRESS_ENABLE,                          //44
    INS_PROP_CAP_OBJECT_IMPRESS_CATEGORY,               //45
    INS_PROP_CAP_OBJECT_IMPRESS_NUMBERING,              //46
    INS_PROP_CAP_OBJECT_IMPRESS_NUMBERINGSEPARATOR,     //47
    INS_PROP_CAP_OBJECT_IMPRESS_CAPTIONTEXT,            //48
    INS_PROP_CAP_OBJECT_IMPRESS_DELIMITER,              //49
    INS_PROP_CAP_OBJECT_IMPRESS_LEVEL,                  //50
    INS_PROP_CAP_OBJECT_IMPRESS_POSITION,               //51
    INS_PROP_CAP_OBJECT_IMPRESS_CHARACTERSTYLE,         //52
    INS_PROP_CAP_OBJECT_IMPRESS_APPLYATTRIBUTES,        //53
    INS_PROP_CAP_OBJECT_CHART_ENABLE,                            //54
    INS_PROP_CAP_OBJECT_CHART_CATEGORY,                 //55
    INS_PROP_CAP_OBJECT_CHART_NUMBERING,                //56
    INS_PROP_CAP_OBJECT_CHART_NUMBERINGSEPARATOR,       //57
    INS_PROP_CAP_OBJECT_CHART_CAPTIONTEXT,              //58
    INS_PROP_CAP_OBJECT_CHART_DELIMITER,                //59
    INS_PROP_CAP_OBJECT_CHART_LEVEL,                    //60
    INS_PROP_CAP_OBJECT_CHART_POSITION,                 //61
    INS_PROP_CAP_OBJECT_CHART_CHARACTERSTYLE,           //62
    INS_PROP_CAP_OBJECT_CHART_APPLYATTRIBUTES,          //63
    INS_PROP_CAP_OBJECT_FORMULA_ENABLE,                          //64
    INS_PROP_CAP_OBJECT_FORMULA_CATEGORY,               //65
    INS_PROP_CAP_OBJECT_FORMULA_NUMBERING,              //66
    INS_PROP_CAP_OBJECT_FORMULA_NUMBERINGSEPARATOR,     //67
    INS_PROP_CAP_OBJECT_FORMULA_CAPTIONTEXT,            //68
    INS_PROP_CAP_OBJECT_FORMULA_DELIMITER,              //69
    INS_PROP_CAP_OBJECT_FORMULA_LEVEL,                  //70
    INS_PROP_CAP_OBJECT_FORMULA_POSITION,               //71
    INS_PROP_CAP_OBJECT_FORMULA_CHARACTERSTYLE,         //72
    INS_PROP_CAP_OBJECT_FORMULA_APPLYATTRIBUTES,        //73
    INS_PROP_CAP_OBJECT_DRAW_ENABLE,                             //74
    INS_PROP_CAP_OBJECT_DRAW_CATEGORY,                  //75
    INS_PROP_CAP_OBJECT_DRAW_NUMBERING,                 //76
    INS_PROP_CAP_OBJECT_DRAW_NUMBERINGSEPARATOR,        //77
    INS_PROP_CAP_OBJECT_DRAW_CAPTIONTEXT,               //78
    INS_PROP_CAP_OBJECT_DRAW_DELIMITER,                 //79
    INS_PROP_CAP_OBJECT_DRAW_LEVEL,                     //80
    INS_PROP_CAP_OBJECT_DRAW_POSITION,                  //81
    INS_PROP_CAP_OBJECT_DRAW_CHARACTERSTYLE,            //82
    INS_PROP_CAP_OBJECT_DRAW_APPLYATTRIBUTES,           //83
    INS_PROP_CAP_OBJECT_OLEMISC_ENABLE,                          //84
    INS_PROP_CAP_OBJECT_OLEMISC_CATEGORY,               //85
    INS_PROP_CAP_OBJECT_OLEMISC_NUMBERING,              //86
    INS_PROP_CAP_OBJECT_OLEMISC_NUMBERINGSEPARATOR,     //87
    INS_PROP_CAP_OBJECT_OLEMISC_CAPTIONTEXT,            //88
    INS_PROP_CAP_OBJECT_OLEMISC_DELIMITER,              //89
    INS_PROP_CAP_OBJECT_OLEMISC_LEVEL,                  //90
    INS_PROP_CAP_OBJECT_OLEMISC_POSITION,               //91
    INS_PROP_CAP_OBJECT_OLEMISC_CHARACTERSTYLE,         //92
    INS_PROP_CAP_OBJECT_OLEMISC_APPLYATTRIBUTES        //93
};    
const Sequence<OUString>& SwInsertConfig::GetPropertyNames()
{
	static Sequence<OUString> aNames;
	static Sequence<OUString> aWebNames;
	if(!aNames.getLength())
	{
		static const char* aPropNames[] =
		{
            "Table/Header",                                                 // 0
            "Table/RepeatHeader",                                           // 1
            "Table/Border",                                                 // 2
            "Table/Split",                                                  // 3 from here not in writer/web
            "Caption/Automatic",                                            // 4
            "Caption/CaptionOrderNumberingFirst",                           // 5
            "Caption/WriterObject/Table/Enable",                            // 6
            "Caption/WriterObject/Table/Settings/Category",                 // 7
            "Caption/WriterObject/Table/Settings/Numbering",                // 8
            "Caption/WriterObject/Table/Settings/NumberingSeparator",       // 9
            "Caption/WriterObject/Table/Settings/CaptionText",              //10
            "Caption/WriterObject/Table/Settings/Delimiter",                //11
            "Caption/WriterObject/Table/Settings/Level",                    //12
            "Caption/WriterObject/Table/Settings/Position",                 //13
            "Caption/WriterObject/Table/Settings/CharacterStyle",           //14
            "Caption/WriterObject/Frame/Enable",                            //15
            "Caption/WriterObject/Frame/Settings/Category",                 //16
            "Caption/WriterObject/Frame/Settings/Numbering",                //17
            "Caption/WriterObject/Frame/Settings/NumberingSeparator",       //18
            "Caption/WriterObject/Frame/Settings/CaptionText",              //19
            "Caption/WriterObject/Frame/Settings/Delimiter",                //20
            "Caption/WriterObject/Frame/Settings/Level",                    //21
            "Caption/WriterObject/Frame/Settings/Position",                 //22
            "Caption/WriterObject/Frame/Settings/CharacterStyle",           //23
            "Caption/WriterObject/Graphic/Enable",                          //24
            "Caption/WriterObject/Graphic/Settings/Category",               //25
            "Caption/WriterObject/Graphic/Settings/Numbering",              //26
            "Caption/WriterObject/Graphic/Settings/NumberingSeparator",     //27
            "Caption/WriterObject/Graphic/Settings/CaptionText",            //28
            "Caption/WriterObject/Graphic/Settings/Delimiter",              //29
            "Caption/WriterObject/Graphic/Settings/Level",                  //30
            "Caption/WriterObject/Graphic/Settings/Position",               //31
            "Caption/WriterObject/Graphic/Settings/CharacterStyle",         //32
            "Caption/WriterObject/Graphic/Settings/ApplyAttributes",        //33
            "Caption/OfficeObject/Calc/Enable",                             //34
            "Caption/OfficeObject/Calc/Settings/Category",                  //35
            "Caption/OfficeObject/Calc/Settings/Numbering",                 //36
            "Caption/OfficeObject/Calc/Settings/NumberingSeparator",        //37
            "Caption/OfficeObject/Calc/Settings/CaptionText",               //38
            "Caption/OfficeObject/Calc/Settings/Delimiter",                 //39
            "Caption/OfficeObject/Calc/Settings/Level",                     //40
            "Caption/OfficeObject/Calc/Settings/Position",                  //41
            "Caption/OfficeObject/Calc/Settings/CharacterStyle",            //42
            "Caption/OfficeObject/Calc/Settings/ApplyAttributes",           //43
            "Caption/OfficeObject/Impress/Enable",                          //44
            "Caption/OfficeObject/Impress/Settings/Category",               //45
            "Caption/OfficeObject/Impress/Settings/Numbering",              //46
            "Caption/OfficeObject/Impress/Settings/NumberingSeparator",     //47
            "Caption/OfficeObject/Impress/Settings/CaptionText",            //48
            "Caption/OfficeObject/Impress/Settings/Delimiter",              //49
            "Caption/OfficeObject/Impress/Settings/Level",                  //50
            "Caption/OfficeObject/Impress/Settings/Position",               //51
            "Caption/OfficeObject/Impress/Settings/CharacterStyle",         //52
            "Caption/OfficeObject/Impress/Settings/ApplyAttributes",        //53
            "Caption/OfficeObject/Chart/Enable",                            //54
            "Caption/OfficeObject/Chart/Settings/Category",                 //55
            "Caption/OfficeObject/Chart/Settings/Numbering",                //56
            "Caption/OfficeObject/Chart/Settings/NumberingSeparator",       //57
            "Caption/OfficeObject/Chart/Settings/CaptionText",              //58
            "Caption/OfficeObject/Chart/Settings/Delimiter",                //59
            "Caption/OfficeObject/Chart/Settings/Level",                    //60
            "Caption/OfficeObject/Chart/Settings/Position",                 //61
            "Caption/OfficeObject/Chart/Settings/CharacterStyle",           //62
            "Caption/OfficeObject/Chart/Settings/ApplyAttributes",          //63
            "Caption/OfficeObject/Formula/Enable",                          //64
            "Caption/OfficeObject/Formula/Settings/Category",               //65
            "Caption/OfficeObject/Formula/Settings/Numbering",              //66
            "Caption/OfficeObject/Formula/Settings/NumberingSeparator",     //67
            "Caption/OfficeObject/Formula/Settings/CaptionText",            //68
            "Caption/OfficeObject/Formula/Settings/Delimiter",              //69
            "Caption/OfficeObject/Formula/Settings/Level",                  //70
            "Caption/OfficeObject/Formula/Settings/Position",               //71
            "Caption/OfficeObject/Formula/Settings/CharacterStyle",         //72
            "Caption/OfficeObject/Formula/Settings/ApplyAttributes",        //73
            "Caption/OfficeObject/Draw/Enable",                             //74
            "Caption/OfficeObject/Draw/Settings/Category",                  //75
            "Caption/OfficeObject/Draw/Settings/Numbering",                 //76
            "Caption/OfficeObject/Draw/Settings/NumberingSeparator",        //77
            "Caption/OfficeObject/Draw/Settings/CaptionText",               //78
            "Caption/OfficeObject/Draw/Settings/Delimiter",                 //79
            "Caption/OfficeObject/Draw/Settings/Level",                     //80
            "Caption/OfficeObject/Draw/Settings/Position",                  //81
            "Caption/OfficeObject/Draw/Settings/CharacterStyle",            //82
            "Caption/OfficeObject/Draw/Settings/ApplyAttributes",           //83
            "Caption/OfficeObject/OLEMisc/Enable",                          //84
            "Caption/OfficeObject/OLEMisc/Settings/Category",               //85
            "Caption/OfficeObject/OLEMisc/Settings/Numbering",              //86
            "Caption/OfficeObject/OLEMisc/Settings/NumberingSeparator",     //87
            "Caption/OfficeObject/OLEMisc/Settings/CaptionText",            //88
            "Caption/OfficeObject/OLEMisc/Settings/Delimiter",              //89
            "Caption/OfficeObject/OLEMisc/Settings/Level",                  //90
            "Caption/OfficeObject/OLEMisc/Settings/Position",               //91
            "Caption/OfficeObject/OLEMisc/Settings/CharacterStyle",         //92
            "Caption/OfficeObject/OLEMisc/Settings/ApplyAttributes"         //93
        };                                                                  
        const int nCount = INS_PROP_CAP_OBJECT_OLEMISC_APPLYATTRIBUTES + 1;
        const int nWebCount = INS_PROP_TABLE_BORDER + 1;
		aNames.realloc(nCount);
		aWebNames.realloc(nWebCount);
		OUString* pNames = aNames.getArray();
		OUString* pWebNames = aWebNames.getArray();
		int i;
		for(i = 0; i < nCount; i++)
			pNames[i] = C2U(aPropNames[i]);
		for(i = 0; i < nWebCount; i++)
			pWebNames[i] = C2U(aPropNames[i]);
	}
	return bIsWeb ? aWebNames : aNames;
}
/*-- 10.10.00 16:22:22---------------------------------------------------

  -----------------------------------------------------------------------*/
SwInsertConfig::SwInsertConfig(sal_Bool bWeb) :
    ConfigItem(bWeb ? C2U("Office.WriterWeb/Insert") : C2U("Office.Writer/Insert"),
        CONFIG_MODE_DELAYED_UPDATE|CONFIG_MODE_RELEASE_TREE),
	pCapOptions(0),
	pOLEMiscOpt(0),
    bInsWithCaption( sal_False ),
    bCaptionOrderNumberingFirst( sal_False ),
    aInsTblOpts(0,0),
    bIsWeb(bWeb)
{
	aGlobalNames[GLOB_NAME_CALC	  ] = SvGlobalName(SO3_SC_CLASSID);
	aGlobalNames[GLOB_NAME_IMPRESS] = SvGlobalName(SO3_SIMPRESS_CLASSID);
	aGlobalNames[GLOB_NAME_DRAW   ] = SvGlobalName(SO3_SDRAW_CLASSID);
	aGlobalNames[GLOB_NAME_MATH   ] = SvGlobalName(SO3_SM_CLASSID);
	aGlobalNames[GLOB_NAME_CHART  ] = SvGlobalName(SO3_SCH_CLASSID);
	if(!bIsWeb)
		pCapOptions = new InsCaptionOptArr;

    Load();
}
/*-- 10.10.00 16:22:23---------------------------------------------------

  -----------------------------------------------------------------------*/
SwInsertConfig::~SwInsertConfig()
{
	delete pCapOptions;
	delete pOLEMiscOpt;
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
void lcl_WriteOpt(const InsCaptionOpt& rOpt, Any* pValues, sal_Int32 nProp, sal_Int32 nOffset)
{
	switch(nOffset)
	{
		case 0:
		{
			sal_Bool bTemp = rOpt.UseCaption();
			pValues[nProp].setValue(&bTemp, ::getBooleanCppuType());
		}
		break;//Enable
		case 1: pValues[nProp] <<= OUString(rOpt.GetCategory()); break;//Category
		case 2: pValues[nProp] <<= (sal_Int32)rOpt.GetNumType(); break;//Numbering",
        case 3: pValues[nProp] <<= rOpt.GetNumSeparator(); break;//NumberingSeparator",
        case 4: pValues[nProp] <<= OUString(rOpt.GetCaption());  break;//CaptionText",
        case 5: pValues[nProp] <<= OUString(rOpt.GetSeparator());break;//Delimiter",
        case 6: pValues[nProp] <<= (sal_Int32)rOpt.GetLevel();   break;//Level",
        case 7: pValues[nProp] <<= (sal_Int32)rOpt.GetPos();     break;//Position",
        case 8: pValues[nProp] <<= (::rtl::OUString&)rOpt.GetCharacterStyle(); break; //CharacterStyle
        case 9: pValues[nProp] <<= rOpt.CopyAttributes(); break; //ApplyAttributes
	}
}
//-----------------------------------------------------------------------------
void SwInsertConfig::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}

void SwInsertConfig::Commit()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues(aNames.getLength());
	Any* pValues = aValues.getArray();

	const Type& rType = ::getBooleanCppuType();
	for(int nProp = 0; nProp < aNames.getLength(); nProp++)
	{
		const InsCaptionOpt* pWriterTableOpt = 0;
		const InsCaptionOpt* pWriterFrameOpt = 0;
		const InsCaptionOpt* pWriterGraphicOpt = 0;
		const InsCaptionOpt* pOLECalcOpt = 0;
		const InsCaptionOpt* pOLEImpressOpt = 0;
		const InsCaptionOpt* pOLEChartOpt = 0;
		const InsCaptionOpt* pOLEFormulaOpt = 0;
		const InsCaptionOpt* pOLEDrawOpt = 0;
		if(pCapOptions)
		{
			pWriterTableOpt = pCapOptions->Find(TABLE_CAP, 0);
			pWriterFrameOpt = pCapOptions->Find(FRAME_CAP, 0);
			pWriterGraphicOpt = pCapOptions->Find(GRAPHIC_CAP, 0);
			pOLECalcOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_CALC]);
			pOLEImpressOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_IMPRESS]);
			pOLEDrawOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_DRAW   ]);
			pOLEFormulaOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_MATH   ]);
			pOLEChartOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_CHART  ]);
		}
		switch(nProp)
		{
            case INS_PROP_TABLE_HEADER:
			{
                sal_Bool bVal = 0 !=(aInsTblOpts.mnInsMode & tabopts::HEADLINE); pValues[nProp].setValue(&bVal, rType);
			}
			break;//"Table/Header",
            case INS_PROP_TABLE_REPEATHEADER:
			{
                sal_Bool bVal = (aInsTblOpts.mnRowsToRepeat>0); pValues[nProp].setValue(&bVal, rType);
			}
			break;//"Table/RepeatHeader",
            case INS_PROP_TABLE_BORDER:
			{
                sal_Bool bVal = 0 !=(aInsTblOpts.mnInsMode & tabopts::DEFAULT_BORDER ); pValues[nProp].setValue(&bVal, rType);
			}
			break;//"Table/Border",
            case INS_PROP_TABLE_SPLIT:
			{
                sal_Bool bVal = 0 !=(aInsTblOpts.mnInsMode & tabopts::SPLIT_LAYOUT); pValues[nProp].setValue(&bVal, rType);
			}
			break;//"Table/Split",
            case INS_PROP_CAP_AUTOMATIC: pValues[nProp].setValue(&bInsWithCaption, rType);break;//"Caption/Automatic",
            case INS_PROP_CAP_CAPTIONORDERNUMBERINGFIRST: 
                pValues[nProp] <<= bCaptionOrderNumberingFirst;
            break;//"Caption/CaptionOrderNumberingFirst"

            case INS_PROP_CAP_OBJECT_TABLE_ENABLE:
            case INS_PROP_CAP_OBJECT_TABLE_CATEGORY:
            case INS_PROP_CAP_OBJECT_TABLE_NUMBERING:
            case INS_PROP_CAP_OBJECT_TABLE_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_TABLE_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_TABLE_DELIMITER:
            case INS_PROP_CAP_OBJECT_TABLE_LEVEL:
            case INS_PROP_CAP_OBJECT_TABLE_POSITION:
            case INS_PROP_CAP_OBJECT_TABLE_CHARACTERSTYLE:
					if(pWriterTableOpt)
                        lcl_WriteOpt(*pWriterTableOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_TABLE_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_FRAME_ENABLE:
            case INS_PROP_CAP_OBJECT_FRAME_CATEGORY:
            case INS_PROP_CAP_OBJECT_FRAME_NUMBERING:
            case INS_PROP_CAP_OBJECT_FRAME_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_FRAME_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_FRAME_DELIMITER:
            case INS_PROP_CAP_OBJECT_FRAME_LEVEL:
            case INS_PROP_CAP_OBJECT_FRAME_POSITION:
            case INS_PROP_CAP_OBJECT_FRAME_CHARACTERSTYLE:
					if(pWriterFrameOpt)
                        lcl_WriteOpt(*pWriterFrameOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_FRAME_ENABLE);
            break;
            case INS_PROP_CAP_OBJECT_GRAPHIC_ENABLE:
            case INS_PROP_CAP_OBJECT_GRAPHIC_CATEGORY:
            case INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERING:
            case INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_GRAPHIC_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_GRAPHIC_DELIMITER:
            case INS_PROP_CAP_OBJECT_GRAPHIC_LEVEL:
            case INS_PROP_CAP_OBJECT_GRAPHIC_POSITION:
            case INS_PROP_CAP_OBJECT_GRAPHIC_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_GRAPHIC_APPLYATTRIBUTES:
					if(pWriterGraphicOpt)
                        lcl_WriteOpt(*pWriterGraphicOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_GRAPHIC_ENABLE);
	        break;
            case INS_PROP_CAP_OBJECT_CALC_ENABLE:
            case INS_PROP_CAP_OBJECT_CALC_CATEGORY:
            case INS_PROP_CAP_OBJECT_CALC_NUMBERING:
            case INS_PROP_CAP_OBJECT_CALC_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_CALC_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_CALC_DELIMITER:
            case INS_PROP_CAP_OBJECT_CALC_LEVEL:
            case INS_PROP_CAP_OBJECT_CALC_POSITION:
            case INS_PROP_CAP_OBJECT_CALC_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_CALC_APPLYATTRIBUTES:
					if(pOLECalcOpt)
                        lcl_WriteOpt(*pOLECalcOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_CALC_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_IMPRESS_ENABLE:
            case INS_PROP_CAP_OBJECT_IMPRESS_CATEGORY:
            case INS_PROP_CAP_OBJECT_IMPRESS_NUMBERING:
            case INS_PROP_CAP_OBJECT_IMPRESS_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_IMPRESS_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_IMPRESS_DELIMITER:
            case INS_PROP_CAP_OBJECT_IMPRESS_LEVEL:
            case INS_PROP_CAP_OBJECT_IMPRESS_POSITION:
            case INS_PROP_CAP_OBJECT_IMPRESS_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_IMPRESS_APPLYATTRIBUTES:
					if(pOLEImpressOpt)
                        lcl_WriteOpt(*pOLEImpressOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_IMPRESS_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_CHART_ENABLE:
            case INS_PROP_CAP_OBJECT_CHART_CATEGORY:
            case INS_PROP_CAP_OBJECT_CHART_NUMBERING:
            case INS_PROP_CAP_OBJECT_CHART_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_CHART_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_CHART_DELIMITER:
            case INS_PROP_CAP_OBJECT_CHART_LEVEL:
            case INS_PROP_CAP_OBJECT_CHART_POSITION:
            case INS_PROP_CAP_OBJECT_CHART_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_CHART_APPLYATTRIBUTES:
					if(pOLEChartOpt)
                        lcl_WriteOpt(*pOLEChartOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_CHART_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_FORMULA_ENABLE:
            case INS_PROP_CAP_OBJECT_FORMULA_CATEGORY:
            case INS_PROP_CAP_OBJECT_FORMULA_NUMBERING:
            case INS_PROP_CAP_OBJECT_FORMULA_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_FORMULA_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_FORMULA_DELIMITER:
            case INS_PROP_CAP_OBJECT_FORMULA_LEVEL:
            case INS_PROP_CAP_OBJECT_FORMULA_POSITION:
            case INS_PROP_CAP_OBJECT_FORMULA_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_FORMULA_APPLYATTRIBUTES:
					if(pOLEFormulaOpt)
                        lcl_WriteOpt(*pOLEFormulaOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_FORMULA_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_DRAW_ENABLE:
            case INS_PROP_CAP_OBJECT_DRAW_CATEGORY:
            case INS_PROP_CAP_OBJECT_DRAW_NUMBERING:
            case INS_PROP_CAP_OBJECT_DRAW_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_DRAW_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_DRAW_DELIMITER:
            case INS_PROP_CAP_OBJECT_DRAW_LEVEL:
            case INS_PROP_CAP_OBJECT_DRAW_POSITION:
            case INS_PROP_CAP_OBJECT_DRAW_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_DRAW_APPLYATTRIBUTES:
					if(pOLEDrawOpt)
                        lcl_WriteOpt(*pOLEDrawOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_DRAW_ENABLE);
			break;
            case INS_PROP_CAP_OBJECT_OLEMISC_ENABLE:
            case INS_PROP_CAP_OBJECT_OLEMISC_CATEGORY:
            case INS_PROP_CAP_OBJECT_OLEMISC_NUMBERING:
            case INS_PROP_CAP_OBJECT_OLEMISC_NUMBERINGSEPARATOR:
            case INS_PROP_CAP_OBJECT_OLEMISC_CAPTIONTEXT:
            case INS_PROP_CAP_OBJECT_OLEMISC_DELIMITER:
            case INS_PROP_CAP_OBJECT_OLEMISC_LEVEL:
            case INS_PROP_CAP_OBJECT_OLEMISC_POSITION:
            case INS_PROP_CAP_OBJECT_OLEMISC_CHARACTERSTYLE:
            case INS_PROP_CAP_OBJECT_OLEMISC_APPLYATTRIBUTES:
					if(pOLEMiscOpt)
                        lcl_WriteOpt(*pOLEMiscOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_OLEMISC_ENABLE);
			break;

		}
	}
	PutProperties(aNames, aValues);
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
void lcl_ReadOpt(InsCaptionOpt& rOpt, const Any* pValues, sal_Int32 nProp, sal_Int32 nOffset)
{
	switch(nOffset)
	{
		case 0:
			rOpt.UseCaption() = *(sal_Bool*)pValues[nProp].getValue();
		break;//Enable
		case 1:
		{
			OUString sTemp; pValues[nProp] >>= sTemp;
			rOpt.SetCategory(sTemp);
		}
		break;//Category
		case 2:
		{
			sal_Int32 nTemp = 0;
			pValues[nProp] >>= nTemp;
            rOpt.SetNumType(sal::static_int_cast< sal_uInt16, sal_Int32>(nTemp));
		}
		break;//Numbering",
        case 3:
        {
            OUString sTemp; pValues[nProp] >>= sTemp;
            rOpt.SetNumSeparator(sTemp);
        }
        break;//NumberingSeparator",
        case 4:
		{
			OUString sTemp; pValues[nProp] >>= sTemp;
			rOpt.SetCaption(sTemp);
		}
		break;//CaptionText",
        case 5:
		{
			OUString sTemp; 
			if(pValues[nProp] >>= sTemp)
				rOpt.SetSeparator(sTemp);
		}
		break;//Delimiter",
        case 6:
		{
			sal_Int32 nTemp = 0;
			pValues[nProp] >>= nTemp;
            rOpt.SetLevel(sal::static_int_cast< sal_uInt16, sal_Int32>(nTemp));
		}
		break;//Level",
        case 7:
		{
			sal_Int32 nTemp = 0;
			pValues[nProp] >>= nTemp;
            rOpt.SetPos(sal::static_int_cast< sal_uInt16, sal_Int32>(nTemp));
		}
		break;//Position",
        case 8 : //CharacterStyle
        {
            ::rtl::OUString sTemp; pValues[nProp] >>= sTemp;
            rOpt.SetCharacterStyle( sTemp );
        }
        break;
        case 9 : //ApplyAttributes
        {
            pValues[nProp] >>= rOpt.CopyAttributes();
        }
        break;
	}
}
//-----------------------------------------------------------------------------
void SwInsertConfig::Load()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues = GetProperties(aNames);
	const Any* pValues = aValues.getConstArray();
	DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
	if(aValues.getLength() == aNames.getLength())
	{
		InsCaptionOpt* pWriterTableOpt = 0;
		InsCaptionOpt* pWriterFrameOpt = 0;
		InsCaptionOpt* pWriterGraphicOpt = 0;
		InsCaptionOpt* pOLECalcOpt = 0;
		InsCaptionOpt* pOLEImpressOpt = 0;
		InsCaptionOpt* pOLEChartOpt = 0;
		InsCaptionOpt* pOLEFormulaOpt = 0;
		InsCaptionOpt* pOLEDrawOpt = 0;
		if(pCapOptions)
		{
			pWriterTableOpt = pCapOptions->Find(TABLE_CAP, 0);
			pWriterFrameOpt = pCapOptions->Find(FRAME_CAP, 0);
			pWriterGraphicOpt = pCapOptions->Find(GRAPHIC_CAP, 0);
			pOLECalcOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_CALC]);
			pOLEImpressOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_IMPRESS]);
			pOLEDrawOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_DRAW   ]);
			pOLEFormulaOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_MATH   ]);
			pOLEChartOpt = pCapOptions->Find(OLE_CAP, &aGlobalNames[GLOB_NAME_CHART  ]);
		}
		else if(!bIsWeb)
			return;

		sal_uInt16 nInsTblFlags = 0;
		for(int nProp = 0; nProp < aNames.getLength(); nProp++)
		{
			if(pValues[nProp].hasValue())
			{
                sal_Bool bBool = nProp < INS_PROP_CAP_OBJECT_TABLE_ENABLE ? *(sal_Bool*)pValues[nProp].getValue() : sal_False;
                switch(nProp)
				{
                    case INS_PROP_TABLE_HEADER:
					{
                        if(bBool)
                            nInsTblFlags|= tabopts::HEADLINE;
					}
					break;//"Table/Header",
                    case INS_PROP_TABLE_REPEATHEADER:
					{
                        aInsTblOpts.mnRowsToRepeat = bBool? 1 : 0;

					}
					break;//"Table/RepeatHeader",
                    case INS_PROP_TABLE_BORDER:
					{
                        if(bBool)
                            nInsTblFlags|= tabopts::DEFAULT_BORDER;
					}
					break;//"Table/Border",
                    case INS_PROP_TABLE_SPLIT:
					{
                        if(bBool)
                            nInsTblFlags|= tabopts::SPLIT_LAYOUT;
					}
					break;//"Table/Split",
                    case INS_PROP_CAP_AUTOMATIC:
                        bInsWithCaption = bBool;
					break;
                    case INS_PROP_CAP_CAPTIONORDERNUMBERINGFIRST: bCaptionOrderNumberingFirst = bBool; break;
                    case INS_PROP_CAP_OBJECT_TABLE_ENABLE:
                    case INS_PROP_CAP_OBJECT_TABLE_CATEGORY:
                    case INS_PROP_CAP_OBJECT_TABLE_NUMBERING:
                    case INS_PROP_CAP_OBJECT_TABLE_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_TABLE_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_TABLE_DELIMITER:
                    case INS_PROP_CAP_OBJECT_TABLE_LEVEL:
                    case INS_PROP_CAP_OBJECT_TABLE_POSITION:
                    case INS_PROP_CAP_OBJECT_TABLE_CHARACTERSTYLE:
						if(!pWriterTableOpt)
						{
							pWriterTableOpt = new InsCaptionOpt(TABLE_CAP);
							pCapOptions->Insert(pWriterTableOpt);
						}
                        lcl_ReadOpt(*pWriterTableOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_TABLE_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_FRAME_ENABLE:
                    case INS_PROP_CAP_OBJECT_FRAME_CATEGORY:
                    case INS_PROP_CAP_OBJECT_FRAME_NUMBERING:
                    case INS_PROP_CAP_OBJECT_FRAME_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_FRAME_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_FRAME_DELIMITER:
                    case INS_PROP_CAP_OBJECT_FRAME_LEVEL:
                    case INS_PROP_CAP_OBJECT_FRAME_POSITION:
                    case INS_PROP_CAP_OBJECT_FRAME_CHARACTERSTYLE:
						if(!pWriterFrameOpt)
						{
							pWriterFrameOpt = new InsCaptionOpt(FRAME_CAP);
							pCapOptions->Insert(pWriterFrameOpt);
						}
                        lcl_ReadOpt(*pWriterFrameOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_FRAME_ENABLE);
                    break;
                    case INS_PROP_CAP_OBJECT_GRAPHIC_ENABLE:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_CATEGORY:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERING:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_DELIMITER:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_LEVEL:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_POSITION:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_GRAPHIC_APPLYATTRIBUTES:
						if(!pWriterGraphicOpt)
						{
							pWriterGraphicOpt = new InsCaptionOpt(GRAPHIC_CAP);
							pCapOptions->Insert(pWriterGraphicOpt);
						}
                        lcl_ReadOpt(*pWriterGraphicOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_GRAPHIC_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_CALC_ENABLE:
                    case INS_PROP_CAP_OBJECT_CALC_CATEGORY:
                    case INS_PROP_CAP_OBJECT_CALC_NUMBERING:
                    case INS_PROP_CAP_OBJECT_CALC_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_CALC_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_CALC_DELIMITER:
                    case INS_PROP_CAP_OBJECT_CALC_LEVEL:
                    case INS_PROP_CAP_OBJECT_CALC_POSITION:
                    case INS_PROP_CAP_OBJECT_CALC_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_CALC_APPLYATTRIBUTES:
                        if(!pOLECalcOpt)
						{
							pOLECalcOpt = new InsCaptionOpt(OLE_CAP, &aGlobalNames[GLOB_NAME_CALC]);
							pCapOptions->Insert(pOLECalcOpt);
						}
                        lcl_ReadOpt(*pOLECalcOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_CALC_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_IMPRESS_ENABLE:
                    case INS_PROP_CAP_OBJECT_IMPRESS_CATEGORY:
                    case INS_PROP_CAP_OBJECT_IMPRESS_NUMBERING:
                    case INS_PROP_CAP_OBJECT_IMPRESS_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_IMPRESS_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_IMPRESS_DELIMITER:
                    case INS_PROP_CAP_OBJECT_IMPRESS_LEVEL:
                    case INS_PROP_CAP_OBJECT_IMPRESS_POSITION:
                    case INS_PROP_CAP_OBJECT_IMPRESS_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_IMPRESS_APPLYATTRIBUTES:
                        if(!pOLEImpressOpt)
						{
							pOLEImpressOpt = new InsCaptionOpt(OLE_CAP, &aGlobalNames[GLOB_NAME_IMPRESS]);
							pCapOptions->Insert(pOLEImpressOpt);
						}
                        lcl_ReadOpt(*pOLEImpressOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_IMPRESS_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_CHART_ENABLE:
                    case INS_PROP_CAP_OBJECT_CHART_CATEGORY:
                    case INS_PROP_CAP_OBJECT_CHART_NUMBERING:
                    case INS_PROP_CAP_OBJECT_CHART_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_CHART_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_CHART_DELIMITER:
                    case INS_PROP_CAP_OBJECT_CHART_LEVEL:
                    case INS_PROP_CAP_OBJECT_CHART_POSITION:
                    case INS_PROP_CAP_OBJECT_CHART_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_CHART_APPLYATTRIBUTES:
						if(!pOLEChartOpt)
						{
							pOLEChartOpt = new InsCaptionOpt(OLE_CAP, &aGlobalNames[GLOB_NAME_CHART]);
							pCapOptions->Insert(pOLEChartOpt);
						}
                        lcl_ReadOpt(*pOLEChartOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_CHART_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_FORMULA_ENABLE:
                    case INS_PROP_CAP_OBJECT_FORMULA_CATEGORY:
                    case INS_PROP_CAP_OBJECT_FORMULA_NUMBERING:
                    case INS_PROP_CAP_OBJECT_FORMULA_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_FORMULA_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_FORMULA_DELIMITER:
                    case INS_PROP_CAP_OBJECT_FORMULA_LEVEL:
                    case INS_PROP_CAP_OBJECT_FORMULA_POSITION:
                    case INS_PROP_CAP_OBJECT_FORMULA_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_FORMULA_APPLYATTRIBUTES:
                        if(!pOLEFormulaOpt)
						{
							pOLEFormulaOpt = new InsCaptionOpt(OLE_CAP, &aGlobalNames[GLOB_NAME_MATH]);
							pCapOptions->Insert(pOLEFormulaOpt);
						}
                        lcl_ReadOpt(*pOLEFormulaOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_FORMULA_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_DRAW_ENABLE:
                    case INS_PROP_CAP_OBJECT_DRAW_CATEGORY:
                    case INS_PROP_CAP_OBJECT_DRAW_NUMBERING:
                    case INS_PROP_CAP_OBJECT_DRAW_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_DRAW_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_DRAW_DELIMITER:
                    case INS_PROP_CAP_OBJECT_DRAW_LEVEL:
                    case INS_PROP_CAP_OBJECT_DRAW_POSITION:
                    case INS_PROP_CAP_OBJECT_DRAW_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_DRAW_APPLYATTRIBUTES:
                        if(!pOLEDrawOpt)
						{
							pOLEDrawOpt = new InsCaptionOpt(OLE_CAP, &aGlobalNames[GLOB_NAME_DRAW]);
							pCapOptions->Insert(pOLEDrawOpt);
						}
                        lcl_ReadOpt(*pOLEDrawOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_DRAW_ENABLE);
					break;
                    case INS_PROP_CAP_OBJECT_OLEMISC_ENABLE:
                    case INS_PROP_CAP_OBJECT_OLEMISC_CATEGORY:
                    case INS_PROP_CAP_OBJECT_OLEMISC_NUMBERING:
                    case INS_PROP_CAP_OBJECT_OLEMISC_NUMBERINGSEPARATOR:
                    case INS_PROP_CAP_OBJECT_OLEMISC_CAPTIONTEXT:
                    case INS_PROP_CAP_OBJECT_OLEMISC_DELIMITER:
                    case INS_PROP_CAP_OBJECT_OLEMISC_LEVEL:
                    case INS_PROP_CAP_OBJECT_OLEMISC_POSITION:
                    case INS_PROP_CAP_OBJECT_OLEMISC_CHARACTERSTYLE:
                    case INS_PROP_CAP_OBJECT_OLEMISC_APPLYATTRIBUTES:
                        if(!pOLEMiscOpt)
						{
							pOLEMiscOpt = new InsCaptionOpt(OLE_CAP);
						}
                        lcl_ReadOpt(*pOLEMiscOpt, pValues, nProp, nProp - INS_PROP_CAP_OBJECT_OLEMISC_ENABLE);
					break;
				}
			}
            else if(nProp == INS_PROP_CAP_CAPTIONORDERNUMBERINGFIRST)
            {
                //#i61007#  initialize caption order, right now only HUNGARIAN seems to need a different order
                SvtSysLocaleOptions aSysLocaleOptions;
                OUString sLang = aSysLocaleOptions.GetLocaleConfigString();
                bCaptionOrderNumberingFirst = ( sLang.getLength() && sLang.matchAsciiL( "hu", 2 )) ? sal_True : sal_False;
            }

		}
		aInsTblOpts.mnInsMode = nInsTblFlags;
	}
}
/* -----------------------------10.10.00 16:22--------------------------------

 ---------------------------------------------------------------------------*/
const Sequence<OUString>& SwTableConfig::GetPropertyNames()
{
	const int nCount = 8;
	static Sequence<OUString> aNames(nCount);
	static const char* aPropNames[] =
	{
		"Shift/Row", 					//	0
		"Shift/Column", 				//  1
		"Insert/Row", 					//  2
		"Insert/Column", 				//  3
		"Change/Effect", 				//  4
		"Input/NumberRecognition",		//  5
		"Input/NumberFormatRecognition",//  6
		"Input/Alignment" 				//  7
	};
	OUString* pNames = aNames.getArray();
	for(int i = 0; i < nCount; i++)
		pNames[i] = OUString::createFromAscii(aPropNames[i]);
	return aNames;
}
/*-- 10.10.00 16:22:22---------------------------------------------------

  -----------------------------------------------------------------------*/
SwTableConfig::SwTableConfig(sal_Bool bWeb) :
    ConfigItem(bWeb ? C2U("Office.WriterWeb/Table") : C2U("Office.Writer/Table"),
        CONFIG_MODE_DELAYED_UPDATE|CONFIG_MODE_RELEASE_TREE)
{
    Load();
}
/*-- 10.10.00 16:22:23---------------------------------------------------

  -----------------------------------------------------------------------*/
SwTableConfig::~SwTableConfig()
{
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
void SwTableConfig::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}

void SwTableConfig::Commit()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues(aNames.getLength());
	Any* pValues = aValues.getArray();

	const Type& rType = ::getBooleanCppuType();
	for(int nProp = 0; nProp < aNames.getLength(); nProp++)
	{
		switch(nProp)
		{
            case 0 : pValues[nProp] <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nTblHMove); break;   //"Shift/Row",
            case 1 : pValues[nProp] <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nTblVMove); break;     //"Shift/Column",
            case 2 : pValues[nProp] <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nTblHInsert); break;   //"Insert/Row",
            case 3 : pValues[nProp] <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nTblVInsert); break;   //"Insert/Column",
			case 4 : pValues[nProp] <<= (sal_Int32)eTblChgMode; break;   //"Change/Effect",
			case 5 : pValues[nProp].setValue(&bInsTblFormatNum, rType); break;  //"Input/NumberRecognition",
			case 6 : pValues[nProp].setValue(&bInsTblChangeNumFormat, rType); break;  //"Input/NumberFormatRecognition",
			case 7 : pValues[nProp].setValue(&bInsTblAlignNum, rType); break;  //"Input/Alignment"
		}
	}
	PutProperties(aNames, aValues);
}
/*-- 10.10.00 16:22:56---------------------------------------------------

  -----------------------------------------------------------------------*/
void SwTableConfig::Load()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues = GetProperties(aNames);
	const Any* pValues = aValues.getConstArray();
	DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
	if(aValues.getLength() == aNames.getLength())
	{
		for(int nProp = 0; nProp < aNames.getLength(); nProp++)
		{
			if(pValues[nProp].hasValue())
			{
				sal_Int32 nTemp = 0;
				switch(nProp)
				{
					case 0 : pValues[nProp] >>= nTemp; nTblHMove = (sal_uInt16)MM100_TO_TWIP(nTemp); break;	 //"Shift/Row",
					case 1 : pValues[nProp] >>= nTemp; nTblVMove = (sal_uInt16)MM100_TO_TWIP(nTemp); break;     //"Shift/Column",
					case 2 : pValues[nProp] >>= nTemp; nTblHInsert = (sal_uInt16)MM100_TO_TWIP(nTemp); break;   //"Insert/Row",
					case 3 : pValues[nProp] >>= nTemp; nTblVInsert = (sal_uInt16)MM100_TO_TWIP(nTemp); break;   //"Insert/Column",
					case 4 : pValues[nProp] >>= nTemp; eTblChgMode = (TblChgMode)nTemp; break;   //"Change/Effect",
					case 5 : bInsTblFormatNum = *(sal_Bool*)pValues[nProp].getValue(); 	break;  //"Input/NumberRecognition",
					case 6 : bInsTblChangeNumFormat = *(sal_Bool*)pValues[nProp].getValue(); break;  //"Input/NumberFormatRecognition",
					case 7 : bInsTblAlignNum = *(sal_Bool*)pValues[nProp].getValue(); break;  //"Input/Alignment"
				}
			}
		}
	}
}
/*-- 18.01.01 17:02:47---------------------------------------------------

  -----------------------------------------------------------------------*/
SwMiscConfig::SwMiscConfig() :
    ConfigItem(C2U("Office.Writer"),
        CONFIG_MODE_DELAYED_UPDATE|CONFIG_MODE_RELEASE_TREE),
	bDefaultFontsInCurrDocOnly(sal_False),
	bShowIndexPreview(sal_False),
	bGrfToGalleryAsLnk(sal_True),
	bNumAlignSize(sal_True),
	bSinglePrintJob(sal_False),
	bIsNameFromColumn(sal_True),
    bAskForMailMergeInPrint(sal_True),
	nMailingFormats(0)
{
    Load();
}
/*-- 18.01.01 17:02:47---------------------------------------------------

  -----------------------------------------------------------------------*/
SwMiscConfig::~SwMiscConfig()
{
}
/*-- 18.01.01 17:02:47---------------------------------------------------

  -----------------------------------------------------------------------*/
const Sequence<OUString>& SwMiscConfig::GetPropertyNames()
{
	static Sequence<OUString> aNames;
	if(!aNames.getLength())
	{
        const int nCount = 12;
		aNames.realloc(nCount);
		static const char* aPropNames[] =
		{
			"Statistics/WordNumber/Delimiter",   		// 0
			"DefaultFont/Document",   					// 1
			"Index/ShowPreview",   						// 2
			"Misc/GraphicToGalleryAsLink",   			// 3
			"Numbering/Graphic/KeepRatio",   			// 4
			"FormLetter/PrintOutput/SinglePrintJobs",   // 5
			"FormLetter/MailingOutput/Format",   		// 6
			"FormLetter/FileOutput/FileName/FromDatabaseField",  // 7
			"FormLetter/FileOutput/Path",   			// 8
			"FormLetter/FileOutput/FileName/FromManualSetting",   // 9
            "FormLetter/FileOutput/FileName/Generation",//10
            "FormLetter/PrintOutput/AskForMerge"        //11
		};
		OUString* pNames = aNames.getArray();
		for(int i = 0; i < nCount; i++)
			pNames[i] = C2U(aPropNames[i]);
	}
	return aNames;
}
/*-- 18.01.01 17:02:47---------------------------------------------------

  -----------------------------------------------------------------------*/
void SwMiscConfig::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}

void SwMiscConfig::Commit()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues(aNames.getLength());
	Any* pValues = aValues.getArray();

	const Type& rType = ::getBooleanCppuType();
	for(int nProp = 0; nProp < aNames.getLength(); nProp++)
	{
		switch(nProp)
		{
			case 0 :
				pValues[nProp] <<= OUString(
					SwModuleOptions::ConvertWordDelimiter(sWordDelimiter, sal_False));
			break;
			case 1 : pValues[nProp].setValue(&bDefaultFontsInCurrDocOnly, rType); break;
			case 2 : pValues[nProp].setValue(&bShowIndexPreview, rType) ;  		 break;
			case 3 : pValues[nProp].setValue(&bGrfToGalleryAsLnk, rType); 		 break;
			case 4 : pValues[nProp].setValue(&bNumAlignSize, rType);			break;
			case 5 : pValues[nProp].setValue(&bSinglePrintJob, rType);			break;
			case 6 : pValues[nProp] <<= nMailingFormats;			 break;
			case 7 : pValues[nProp] <<= OUString(sNameFromColumn);  break;
			case 8 : pValues[nProp] <<= OUString(sMailingPath);		break;
			case 9 : pValues[nProp] <<= OUString(sMailName);		break;
			case 10: pValues[nProp].setValue(&bIsNameFromColumn, rType);break;
            case 11: pValues[nProp] <<= bAskForMailMergeInPrint; break;
		}
	}
	PutProperties(aNames, aValues);
}
/*-- 18.01.01 17:02:48---------------------------------------------------

  -----------------------------------------------------------------------*/
void SwMiscConfig::Load()
{
	const Sequence<OUString>& aNames = GetPropertyNames();
	Sequence<Any> aValues = GetProperties(aNames);
	const Any* pValues = aValues.getConstArray();
	DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
	if(aValues.getLength() == aNames.getLength())
	{
		OUString sTmp;
		for(int nProp = 0; nProp < aNames.getLength(); nProp++)
		{
			if(pValues[nProp].hasValue())
			{
				switch(nProp)
				{
					case 0 : pValues[nProp] >>= sTmp;
						sWordDelimiter = SwModuleOptions::ConvertWordDelimiter(sTmp, sal_True);
					break;
					case 1 : bDefaultFontsInCurrDocOnly = *(sal_Bool*)pValues[nProp].getValue(); break;
					case 2 : bShowIndexPreview = *(sal_Bool*)pValues[nProp].getValue(); break;
					case 3 : bGrfToGalleryAsLnk = *(sal_Bool*)pValues[nProp].getValue(); break;
					case 4 : bNumAlignSize = *(sal_Bool*)pValues[nProp].getValue(); break;
					case 5 : bSinglePrintJob = *(sal_Bool*)pValues[nProp].getValue(); break;
					case 6 : pValues[nProp] >>= nMailingFormats;			  ; break;
					case 7 : pValues[nProp] >>= sTmp; sNameFromColumn = sTmp; break;
					case 8 : pValues[nProp] >>= sTmp; sMailingPath = sTmp; 	break;
					case 9 : pValues[nProp] >>= sTmp; sMailName = sTmp; 	break;
					case 10: bIsNameFromColumn = *(sal_Bool*)pValues[nProp].getValue(); break;
                    case 11: pValues[nProp] >>= bAskForMailMergeInPrint; break;
                }
			}
		}
	}
}
