The item values of compatibility option tab page is read from the resource file
(officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs)
This document is illustrated how to read this file.
1. Related definitions in compatibility.hxx/cxx
#define COMPATIBILITY_PROPERTYNAME_NAME OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) )
#define COMPATIBILITY_PROPERTYNAME_MODULE OUString( RTL_CONSTASCII_USTRINGPARAM( "Module" ) )
#define COMPATIBILITY_PROPERTYNAME_USEPRTMETRICS OUString( RTL_CONSTASCII_USTRINGPARAM( "UsePrinterMetrics" ) )
#define COMPATIBILITY_PROPERTYNAME_ADDSPACING OUString( RTL_CONSTASCII_USTRINGPARAM( "AddSpacing" ) )
#define COMPATIBILITY_PROPERTYNAME_ADDSPACINGATPAGES OUString( RTL_CONSTASCII_USTRINGPARAM( "AddSpacingAtPages" ) )
#define COMPATIBILITY_PROPERTYNAME_USEOURTABSTOPS OUString( RTL_CONSTASCII_USTRINGPARAM( "UseOurTabStopFormat" ) )
#define COMPATIBILITY_PROPERTYNAME_NOEXTLEADING OUString( RTL_CONSTASCII_USTRINGPARAM( "NoExternalLeading" ) )
#define COMPATIBILITY_PROPERTYNAME_USELINESPACING OUString( RTL_CONSTASCII_USTRINGPARAM( "UseLineSpacing" ) )
#define COMPATIBILITY_PROPERTYNAME_ADDTABLESPACING OUString( RTL_CONSTASCII_USTRINGPARAM( "AddTableSpacing" ) )
#define COMPATIBILITY_PROPERTYNAME_USEOBJECTPOSITIONING OUString( RTL_CONSTASCII_USTRINGPARAM( "UseObjectPositioning" ) )
#define COMPATIBILITY_PROPERTYNAME_USEOURTEXTWRAPPING OUString( RTL_CONSTASCII_USTRINGPARAM( "UseOurTextWrapping" ) )
#define COMPATIBILITY_PROPERTYNAME_CONSIDERWRAPPINGSTYLE OUString( RTL_CONSTASCII_USTRINGPARAM( "ConsiderWrappingStyle" ) )
#define COMPATIBILITY_DEFAULT_NAME OUString( RTL_CONSTASCII_USTRINGPARAM( "_default" ) )
#define ROOTNODE_OPTIONS OUString( RTL_CONSTASCII_USTRINGPARAM( "Office.Compatibility/" ) )
#define PATHDELIMITER OUString( RTL_CONSTASCII_USTRINGPARAM( "/" ) )
#define SETNODE_ALLFILEFORMATS OUString( RTL_CONSTASCII_USTRINGPARAM( "AllFileFormats" ) )
#define PROPERTYNAME_NAME COMPATIBILITY_PROPERTYNAME_NAME
#define PROPERTYNAME_MODULE COMPATIBILITY_PROPERTYNAME_MODULE
#define PROPERTYNAME_USEPRTMETRICS COMPATIBILITY_PROPERTYNAME_USEPRTMETRICS
#define PROPERTYNAME_ADDSPACING COMPATIBILITY_PROPERTYNAME_ADDSPACING
#define PROPERTYNAME_ADDSPACINGATPAGES COMPATIBILITY_PROPERTYNAME_ADDSPACINGATPAGES
#define PROPERTYNAME_USEOURTABSTOPS COMPATIBILITY_PROPERTYNAME_USEOURTABSTOPS
#define PROPERTYNAME_NOEXTLEADING COMPATIBILITY_PROPERTYNAME_NOEXTLEADING
#define PROPERTYNAME_USELINESPACING COMPATIBILITY_PROPERTYNAME_USELINESPACING
#define PROPERTYNAME_ADDTABLESPACING COMPATIBILITY_PROPERTYNAME_ADDTABLESPACING
#define PROPERTYNAME_USEOBJPOS COMPATIBILITY_PROPERTYNAME_USEOBJECTPOSITIONING
#define PROPERTYNAME_USEOURTEXTWRAP COMPATIBILITY_PROPERTYNAME_USEOURTEXTWRAPPING
#define PROPERTYNAME_CONSIDERWRAPSTYLE COMPATIBILITY_PROPERTYNAME_CONSIDERWRAPPINGSTYLE
2. Get the name and values
1) initialize config item: ConfigItem( ROOTNODE_OPTIONS )
2) get property names regarding to nodes hierarchy in the source file: impl_GetPropertyNames
3) get the values regarding to the property names: GetProperties
SvtCompatibilityOptions_Impl::SvtCompatibilityOptions_Impl()
// Init baseclasses first
: ConfigItem( ROOTNODE_OPTIONS )
// Init member then...
{
// Get names and values of all accessable menu entries and fill internal structures.
// See impl_GetPropertyNames() for further informations.
Sequence< OUString > lNodes;
Sequence< OUString > lNames = impl_GetPropertyNames( lNodes );
sal_uInt32 nCount = lNodes.getLength();
Sequence< Any > lValues = GetProperties( lNames );
}
ConfigItem( ROOTNODE_OPTIONS ): define that the source file of this config item is officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs.
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
Sequence< OUString > SvtCompatibilityOptions_Impl::impl_GetPropertyNames( Sequence< OUString >& rItems )
{
// First get ALL names of current existing list items in configuration!
rItems = GetNodeNames( SETNODE_ALLFILEFORMATS );
// expand list to result list ...
Sequence< OUString > lProperties( rItems.getLength() * ( PROPERTYCOUNT - 1 ) );
impl_ExpandPropertyNames( rItems, lProperties );
// Return result.
return lProperties;
}
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
void SvtCompatibilityOptions_Impl::impl_ExpandPropertyNames(
const Sequence< OUString >& lSource, Sequence< OUString >& lDestination )
{
OUString sFixPath;
sal_Int32 nDestStep = 0;
sal_Int32 nSourceCount = lSource.getLength();
// Copy entries to destination and expand every item with 2 supported sub properties.
for( sal_Int32 nSourceStep = 0; nSourceStep < nSourceCount; ++nSourceStep )
{
sFixPath = SETNODE_ALLFILEFORMATS;
sFixPath += PATHDELIMITER;
sFixPath += lSource[ nSourceStep ];
sFixPath += PATHDELIMITER;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_MODULE;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_USEPRTMETRICS;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_ADDSPACING;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_ADDSPACINGATPAGES;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_USEOURTABSTOPS;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_NOEXTLEADING;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_USELINESPACING;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_ADDTABLESPACING;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_USEOBJPOS;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_USEOURTEXTWRAP;
++nDestStep;
lDestination[nDestStep] = sFixPath;
lDestination[nDestStep] += PROPERTYNAME_CONSIDERWRAPSTYLE;
++nDestStep;
}
}