1 --- sc/inc/dpobject.hxx.old 2009-04-06 16:41:48.000000000 +0000
2 +++ sc/inc/dpobject.hxx 2009-04-06 16:41:48.000000000 +0000
3 @@ -110,6 +110,7 @@ private:
5 BOOL bInfoValid; // affects: nHeaderRows
6 long nHeaderRows; // page fields plus filter button
7 + bool bHeaderLayout; // TRUE : grid, FALSE : standard
10 SC_DLLPRIVATE void CreateObjects();
11 @@ -141,6 +142,9 @@ public:
12 void SetAutoFormatIndex (const USHORT nIndex);
13 const USHORT GetAutoFormatIndex () { if (this == NULL) return 65535; else return nAutoFormatIndex; }
15 + void SetHeaderLayout (bool bUseGrid);
16 + bool GetHeaderLayout () const { return bHeaderLayout; }
18 void SetSheetDesc(const ScSheetSourceDesc& rDesc);
19 void SetImportDesc(const ScImportSourceDesc& rDesc);
20 void SetServiceData(const ScDPServiceDesc& rDesc);
21 --- sc/inc/dpoutput.hxx.old 2009-04-02 10:45:43.000000000 +0000
22 +++ sc/inc/dpoutput.hxx 2009-04-06 16:41:48.000000000 +0000
23 @@ -109,6 +109,7 @@ private:
27 + bool bHeaderLayout; // TRUE : grid, FALSE : standard
30 SCCOL nMemberStartCol;
31 @@ -162,6 +163,9 @@ public:
33 void GetMemberResultNames( ScStrCollection& rNames, long nDimension );
35 + void SetHeaderLayout (bool bUseGrid);
36 + bool GetHeaderLayout () const { return bHeaderLayout; }
38 static void GetDataDimensionNames( String& rSourceName, String& rGivenName,
39 const com::sun::star::uno::Reference<
40 com::sun::star::uno::XInterface>& xDim );
41 --- sc/source/core/data/dpobject.cxx.old 2009-04-06 16:41:48.000000000 +0000
42 +++ sc/source/core/data/dpobject.cxx 2009-04-06 16:41:48.000000000 +0000
43 @@ -168,7 +168,8 @@ ScDPObject::ScDPObject( ScDocument* pD )
49 + bHeaderLayout( false )
53 @@ -188,7 +189,8 @@ ScDPObject::ScDPObject(const ScDPObject&
56 bInfoValid( r.bInfoValid ),
57 - nHeaderRows( r.nHeaderRows )
58 + nHeaderRows( r.nHeaderRows ),
59 + bHeaderLayout( r.bHeaderLayout )
62 pSaveData = new ScDPSaveData(*r.pSaveData);
63 @@ -241,6 +243,11 @@ void ScDPObject::SetAutoFormatIndex(cons
64 nAutoFormatIndex = nIndex;
67 +void ScDPObject::SetHeaderLayout (bool bUseGrid)
69 + bHeaderLayout = bUseGrid;
72 void ScDPObject::SetOutRange(const ScRange& rRange)
75 @@ -348,6 +355,7 @@ void ScDPObject::CreateOutput()
77 BOOL bFilterButton = IsSheetData() && pSaveData && pSaveData->GetFilterButton();
78 pOutput = new ScDPOutput( pDoc, xSource, aOutRange.aStart, bFilterButton );
79 + pOutput->SetHeaderLayout ( bHeaderLayout );
81 long nOldRows = nHeaderRows;
82 nHeaderRows = pOutput->GetHeaderRows();
83 --- sc/source/core/data/dpoutput.cxx.old 2009-04-02 10:45:01.000000000 +0000
84 +++ sc/source/core/data/dpoutput.cxx 2009-04-06 16:41:48.000000000 +0000
85 @@ -376,7 +376,8 @@ ScDPOutput::ScDPOutput( ScDocument* pD, const uno::Reference<sheet::XDimensionsS
89 - bSizeOverflow( FALSE )
90 + bSizeOverflow( FALSE ),
91 + bHeaderLayout( false )
93 nTabStartCol = nMemberStartCol = nDataStartCol = nTabEndCol = 0;
94 nTabStartRow = nMemberStartRow = nDataStartRow = nTabEndRow = 0;
95 @@ -666,7 +667,11 @@ void ScDPOutput::CalcSizes()
96 nRowCount = aData.getLength();
97 const uno::Sequence<sheet::DataResult>* pRowAry = aData.getConstArray();
98 nColCount = nRowCount ? ( pRowAry[0].getLength() ) : 0;
99 - nHeaderSize = 1; // one row for field names
102 + if (GetHeaderLayout() && nColFieldCount == 0)
103 + // Insert an extra header row only when there is no column field.
106 // calculate output positions and sizes
108 @@ -1185,6 +1190,12 @@ bool ScDPOutput::GetDataResultPositionDa
112 +void ScDPOutput::SetHeaderLayout (bool bLayout)
114 + bHeaderLayout = bLayout;
115 + bSizesValid = FALSE;
119 // helper functions for ScDPOutput::GetPivotData
121 --- sc/source/filter/excel/read.cxx.old 2009-04-02 10:44:55.000000000 +0000
122 +++ sc/source/filter/excel/read.cxx 2009-04-06 16:41:48.000000000 +0000
123 @@ -1152,6 +1152,7 @@ FltError ImportExcel8::Read( void )
124 case EXC_ID_SXDI: rPTableMgr.ReadSxdi( maStrm ); break;
125 case EXC_ID_SXVDEX: rPTableMgr.ReadSxvdex( maStrm ); break;
126 case EXC_ID_SXEX: rPTableMgr.ReadSxex( maStrm ); break;
127 + case EXC_ID_SXVIEWEX9: rPTableMgr.ReadSxViewEx9( maStrm ); break;
131 --- sc/source/filter/excel/xepivot.cxx.old 2009-04-02 10:44:55.000000000 +0000
132 +++ sc/source/filter/excel/xepivot.cxx 2009-04-06 16:41:48.000000000 +0000
133 @@ -1220,6 +1220,8 @@ XclExpPivotTable::XclExpPivotTable( cons
134 maPTInfo.maDataName = ScGlobal::GetRscString( STR_PIVOT_DATA );
135 maPTInfo.mnCacheIdx = mrPCache.GetCacheIndex();
137 + maPTAutoFormat.Init( rDPObj );
139 if( const ScDPSaveData* pSaveData = rDPObj.GetSaveData() )
141 // additional properties from ScDPSaveData
142 @@ -1299,6 +1301,8 @@ void XclExpPivotTable::Save( XclExpStrea
143 WriteSxli( rStrm, maPTInfo.mnDataCols, maPTInfo.mnColFields );
147 + WriteSxAutoformat( rStrm );
151 @@ -1439,6 +1443,8 @@ void XclExpPivotTable::Finalize()
152 rnDataXclRow = rnXclRow1 + maPTInfo.mnColFields + 1;
153 if( maDataFields.empty() )
155 + if( 0 == maPTAutoFormat.mnGridLayout )
157 rnXclCol2 = ::std::max( rnXclCol2, rnDataXclCol );
158 rnXclRow2 = ::std::max( rnXclRow2, rnDataXclRow );
159 maPTInfo.mnDataCols = rnXclCol2 - rnDataXclCol + 1;
160 @@ -1446,6 +1452,8 @@ void XclExpPivotTable::Finalize()
163 maPTInfo.mnFirstHeadRow = rnXclRow1 + 1;
164 + if( 0 == maPTAutoFormat.mnGridLayout )
165 + maPTInfo.mnFirstHeadRow++;
168 // records ----------------------------------------------------------------
169 @@ -1521,6 +1529,18 @@ void XclExpPivotTable::WriteSxex( XclExp
173 +void XclExpPivotTable::WriteSxAutoformat( XclExpStream& rStrm ) const
175 + // Until we sync the autoformat ids only export if using grid header layout
176 + // That could only have been set via xls import so far.
177 + if ( 0 == maPTAutoFormat.mnGridLayout )
179 + rStrm.StartRecord( EXC_ID_SXVIEWEX9, 17 );
180 + rStrm << maPTAutoFormat;
185 // ============================================================================
188 --- sc/source/filter/excel/xipivot.cxx.old 2009-04-02 10:44:55.000000000 +0000
189 +++ sc/source/filter/excel/xipivot.cxx 2009-04-06 16:41:48.000000000 +0000
190 @@ -1296,6 +1296,11 @@ void XclImpPivotTable::ReadSxex( XclImpS
191 rStrm >> maPTExtInfo;
194 +void XclImpPivotTable::ReadSxViewEx9( XclImpStream& rStrm )
196 + rStrm >> maPTAutoFormat;
199 // ----------------------------------------------------------------------------
201 void XclImpPivotTable::Convert()
202 @@ -1363,6 +1368,7 @@ void XclImpPivotTable::Convert()
203 pDPObj->SetSheetDesc( aDesc );
204 pDPObj->SetOutRange( aOutRange );
205 pDPObj->SetAlive( TRUE );
206 + pDPObj->SetHeaderLayout( maPTAutoFormat.mnGridLayout == 0 );
207 GetDoc().GetDPCollection()->Insert( pDPObj );
210 @@ -1458,6 +1464,12 @@ void XclImpPivotTableManager::ReadSxex(
211 maPTables.back()->ReadSxex( rStrm );
214 +void XclImpPivotTableManager::ReadSxViewEx9( XclImpStream& rStrm )
216 + if( !maPTables.empty() )
217 + maPTables.back()->ReadSxViewEx9( rStrm );
220 // ----------------------------------------------------------------------------
222 void XclImpPivotTableManager::ReadPivotCaches( XclImpStream& rStrm )
223 @@ -1473,4 +1485,85 @@ void XclImpPivotTableManager::ConvertPiv
226 // ============================================================================
228 +// Pivot table autoformat settings ============================================
231 +classic : 10 08 00 00 00 00 00 00 20 00 00 00 01 00 00 00 00
232 +default : 10 08 00 00 00 00 00 00 20 00 00 00 01 00 00 00 00
233 +report01 : 10 08 02 00 00 00 00 00 20 00 00 00 00 10 00 00 00
234 +report02 : 10 08 02 00 00 00 00 00 20 00 00 00 01 10 00 00 00
235 +report03 : 10 08 02 00 00 00 00 00 20 00 00 00 02 10 00 00 00
236 +report04 : 10 08 02 00 00 00 00 00 20 00 00 00 03 10 00 00 00
237 +report05 : 10 08 02 00 00 00 00 00 20 00 00 00 04 10 00 00 00
238 +report06 : 10 08 02 00 00 00 00 00 20 00 00 00 05 10 00 00 00
239 +report07 : 10 08 02 00 00 00 00 00 20 00 00 00 06 10 00 00 00
240 +report08 : 10 08 02 00 00 00 00 00 20 00 00 00 07 10 00 00 00
241 +report09 : 10 08 02 00 00 00 00 00 20 00 00 00 08 10 00 00 00
242 +report10 : 10 08 02 00 00 00 00 00 20 00 00 00 09 10 00 00 00
243 +table01 : 10 08 00 00 00 00 00 00 20 00 00 00 0a 10 00 00 00
244 +table02 : 10 08 00 00 00 00 00 00 20 00 00 00 0b 10 00 00 00
245 +table03 : 10 08 00 00 00 00 00 00 20 00 00 00 0c 10 00 00 00
246 +table04 : 10 08 00 00 00 00 00 00 20 00 00 00 0d 10 00 00 00
247 +table05 : 10 08 00 00 00 00 00 00 20 00 00 00 0e 10 00 00 00
248 +table06 : 10 08 00 00 00 00 00 00 20 00 00 00 0f 10 00 00 00
249 +table07 : 10 08 00 00 00 00 00 00 20 00 00 00 10 10 00 00 00
250 +table08 : 10 08 00 00 00 00 00 00 20 00 00 00 11 10 00 00 00
251 +table09 : 10 08 00 00 00 00 00 00 20 00 00 00 12 10 00 00 00
252 +table10 : 10 08 00 00 00 00 00 00 20 00 00 00 13 10 00 00 00
253 +none : 10 08 00 00 00 00 00 00 20 00 00 00 15 10 00 00 00
256 +XclPTAutoFormat::XclPTAutoFormat() :
259 + mnGridLayout( 0x10 )
263 +void XclPTAutoFormat::Init( const ScDPObject& rDPObj )
265 + if( rDPObj.GetHeaderLayout() )
274 + // TODO : sync with autoformat indicies
277 + mnGridLayout = 0x10;
281 +XclImpStream& operator>>( XclImpStream& rStrm, XclPTAutoFormat& rInfo )
284 + rStrm >> rInfo.mbReport; /// 2 for report* fmts ?
288 + >> rInfo.mnAutoFormat
289 + >> rInfo.mnGridLayout
290 + >> nDummy >> nDummy >> nDummy;
293 +XclExpStream& operator<<( XclExpStream& rStrm, const XclPTAutoFormat& rInfo )
296 + << EXC_PT_AUTOFMT_HEADER
298 + << EXC_PT_AUTOFMT_ZERO
299 + << EXC_PT_AUTOFMT_FLAGS
300 + << rInfo.mnAutoFormat
301 + << rInfo.mnGridLayout
302 + << static_cast<sal_uInt8>(0x00)
303 + << static_cast<sal_uInt8>(0x00)
304 + << static_cast<sal_uInt8>(0x00);
307 +// ============================================================================
309 --- sc/source/filter/inc/xepivot.hxx.old 2009-04-02 10:44:58.000000000 +0000
310 +++ sc/source/filter/inc/xepivot.hxx 2009-04-06 16:41:48.000000000 +0000
311 @@ -412,6 +412,8 @@ private:
312 void WriteSxli( XclExpStream& rStrm, sal_uInt16 nLineCount, sal_uInt16 nIndexCount ) const;
313 /** Writes the SXEX records containing additional pivot table info. */
314 void WriteSxex( XclExpStream& rStrm ) const;
315 + /** Writes the SX_AUTOFORMAT records with the autoformat id and header layout */
316 + void WriteSxAutoformat( XclExpStream& rStrm ) const;
318 // ------------------------------------------------------------------------
320 @@ -422,6 +424,7 @@ private:
321 const XclExpPivotCache& mrPCache; /// The pivot cache this pivot table bases on.
322 XclPTInfo maPTInfo; /// Info about the pivot table (SXVIEW record).
323 XclPTExtInfo maPTExtInfo; /// Extended info about the pivot table (SXEX record).
324 + XclPTAutoFormat maPTAutoFormat; /// The selected autoformat (SXVIEWEX9)
325 XclExpPTFieldList maFieldList; /// All fields in pivot cache order.
326 ScfUInt16Vec maRowFields; /// Row field indexes.
327 ScfUInt16Vec maColFields; /// Column field indexes.
328 --- sc/source/filter/inc/xipivot.hxx.old 2009-04-02 10:44:58.000000000 +0000
329 +++ sc/source/filter/inc/xipivot.hxx 2009-04-06 16:41:48.000000000 +0000
330 @@ -350,6 +350,9 @@ public:
331 void ReadSxdi( XclImpStream& rStrm );
332 /** Reads an SXEX record containing additional settings for the pivot table. */
333 void ReadSxex( XclImpStream& rStrm );
334 + /** Reads an SXVIEWEX9 record that specifies the pivot tables
336 + void ReadSxViewEx9( XclImpStream& rStrm );
338 // ------------------------------------------------------------------------
340 @@ -364,6 +367,7 @@ private:
342 XclPTInfo maPTInfo; /// General info about the pivot table (SXVIEW record).
343 XclPTExtInfo maPTExtInfo; /// Extended info about the pivot table (SXEX record).
344 + XclPTAutoFormat maPTAutoFormat; /// The selected autoformat (SX_AUTOFORMAT)
345 XclImpPTFieldVec maFields; /// Vector containing all fields.
346 XclImpPTFieldRef mxCurrField; /// Current field for importing additional info.
347 ScfStringVec maVisFieldNames; /// Vector containing all visible field names.
348 @@ -422,6 +426,9 @@ public:
349 void ReadSxvi( XclImpStream& rStrm );
350 /** Reads an SXEX record containing additional settings for a pivot table. */
351 void ReadSxex( XclImpStream& rStrm );
352 + /** Reads an SXVIEWEX9 record that specifies the pivot tables
354 + void ReadSxViewEx9( XclImpStream& rStrm );
356 // ------------------------------------------------------------------------
358 --- sc/source/filter/inc/xlpivot.hxx.old 2009-04-02 10:44:58.000000000 +0000
359 +++ sc/source/filter/inc/xlpivot.hxx 2009-04-06 16:41:48.000000000 +0000
361 #include <tools/datetime.hxx>
362 #include "ftools.hxx"
363 #include "xladdress.hxx"
364 +#include "dpobject.hxx"
368 @@ -73,6 +74,10 @@ const sal_uInt16 EXC_PT_MAXDATACOUNT
370 const sal_uInt16 EXC_PT_MAXITEMCOUNT = 32500;
372 +const sal_uInt16 EXC_PT_AUTOFMT_HEADER = 0x810;
373 +const sal_uInt16 EXC_PT_AUTOFMT_ZERO = 0;
374 +const sal_uInt32 EXC_PT_AUTOFMT_FLAGS = 0x20;
376 /** Data type of a pivot cache item. */
379 @@ -396,6 +401,9 @@ const double EXC_SXDBEX_CREATION_DATE
380 const sal_uInt16 EXC_ID_SXFDBTYPE = 0x01BB;
381 const sal_uInt16 EXC_SXFDBTYPE_DEFAULT = 0x0000;
383 +// (0x0810) SXVIEWEX9 ---------------------------------------------------------
384 +const sal_uInt16 EXC_ID_SXVIEWEX9 = 0x0810;
386 // ============================================================================
388 // ============================================================================
389 @@ -786,5 +794,22 @@ XclExpStream& operator<<( XclExpStream&
391 // ============================================================================
393 +// Pivot table autoformat settings ==============================================
395 +/** Pivot table autoformat settings (SX_AUTOFORMAT record). */
396 +struct XclPTAutoFormat
398 + sal_uInt32 mbReport; /// 2 for report* fmts ?
399 + sal_uInt8 mnAutoFormat; /// AutoFormat ID
400 + sal_uInt8 mnGridLayout; /// 0 == gridlayout, 0x10 == modern
402 + explicit XclPTAutoFormat();
403 + void Init( const ScDPObject& rDPObj );
406 +XclImpStream& operator>>( XclImpStream& rStrm, XclPTAutoFormat& rInfo );
407 +XclExpStream& operator<<( XclExpStream& rStrm, const XclPTAutoFormat& rInfo );
409 +// ============================================================================
412 --- sc/source/filter/xml/XMLExportDataPilot.cxx.old 2009-04-06 16:41:48.000000000 +0000
413 +++ sc/source/filter/xml/XMLExportDataPilot.cxx 2009-04-06 16:41:48.000000000 +0000
414 @@ -781,6 +781,8 @@ void ScXMLExportDataPilot::WriteDataPilo
415 rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SHOW_FILTER_BUTTON, XML_FALSE);
416 if (!pDPSave->GetDrillDown())
417 rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK, XML_FALSE);
418 + if ((*pDPs)[i]->GetHeaderLayout ())
419 + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_HEADER_GRID_LAYOUT, XML_TRUE);
420 SvXMLElementExport aElemDP(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_TABLE, sal_True, sal_True);
421 rExport.CheckAttrList();
422 if ((*pDPs)[i]->IsSheetData())
423 --- sc/source/filter/xml/xmldpimp.cxx.old 2009-04-02 10:44:57.000000000 +0000
424 +++ sc/source/filter/xml/xmldpimp.cxx 2009-04-06 16:41:48.000000000 +0000
425 @@ -132,7 +132,8 @@ ScXMLDataPilotTableContext::ScXMLDataPil
426 bTargetRangeAddress(sal_False),
427 bSourceCellRange(sal_False),
428 bShowFilter(sal_True),
429 - bDrillDown(sal_True)
430 + bDrillDown(sal_True),
431 + bHeaderGridLayout(sal_False)
433 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
434 const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableAttrTokenMap();
435 @@ -192,6 +193,11 @@ ScXMLDataPilotTableContext::ScXMLDataPil
436 bDrillDown = IsXMLToken(sValue, XML_TRUE);
439 + case XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT :
441 + bHeaderGridLayout = IsXMLToken(sValue, XML_TRUE);
447 @@ -313,6 +319,7 @@ void ScXMLDataPilotTableContext::EndElem
448 pDPObject->SetName(sDataPilotTableName);
449 pDPObject->SetTag(sApplicationData);
450 pDPObject->SetOutRange(aTargetRangeAddress);
451 + pDPObject->SetHeaderLayout(bHeaderGridLayout);
455 --- sc/source/filter/xml/xmldpimp.hxx.old 2009-04-02 10:44:57.000000000 +0000
456 +++ sc/source/filter/xml/xmldpimp.hxx 2009-04-06 16:41:48.000000000 +0000
457 @@ -111,6 +111,7 @@ class ScXMLDataPilotTableContext : publi
458 sal_Bool bSourceCellRange;
459 sal_Bool bShowFilter;
461 + sal_Bool bHeaderGridLayout;
463 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
464 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
465 --- sc/source/filter/xml/xmlimprt.cxx.old 2009-04-02 10:44:57.000000000 +0000
466 +++ sc/source/filter/xml/xmlimprt.cxx 2009-04-06 16:41:48.000000000 +0000
467 @@ -1327,6 +1327,7 @@ const SvXMLTokenMap& ScXMLImport::GetDat
468 { XML_NAMESPACE_TABLE, XML_BUTTONS, XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS },
469 { XML_NAMESPACE_TABLE, XML_SHOW_FILTER_BUTTON, XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON },
470 { XML_NAMESPACE_TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK, XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN },
471 + { XML_NAMESPACE_TABLE, XML_HEADER_GRID_LAYOUT, XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT },
475 --- sc/source/filter/xml/xmlimprt.hxx.old 2009-04-02 10:44:57.000000000 +0000
476 +++ sc/source/filter/xml/xmlimprt.hxx 2009-04-06 16:41:48.000000000 +0000
477 @@ -482,7 +482,8 @@ enum ScXMLDataPilotTableAttrTokens
478 XML_TOK_DATA_PILOT_TABLE_ATTR_TARGET_RANGE_ADDRESS,
479 XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS,
480 XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON,
481 - XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN
482 + XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN,
483 + XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT
486 enum ScXMLDataPilotTableElemTokens
487 --- xmloff/inc/xmloff/xmltoken.hxx.old 2009-04-06 16:41:48.000000000 +0000
488 +++ xmloff/inc/xmloff/xmltoken.hxx 2009-04-06 16:41:48.000000000 +0000
489 @@ -2508,6 +2508,7 @@ namespace xmloff { namespace token {
491 XML_SHOW_FILTER_BUTTON,
492 XML_DRILL_DOWN_ON_DOUBLE_CLICK,
493 + XML_HEADER_GRID_LAYOUT,
497 --- xmloff/source/core/xmltoken.cxx.old 2009-04-06 16:41:48.000000000 +0000
498 +++ xmloff/source/core/xmltoken.cxx 2009-04-06 16:41:48.000000000 +0000
499 @@ -2513,6 +2513,7 @@ namespace xmloff { namespace token {
501 TOKEN( "show-filter-button", XML_SHOW_FILTER_BUTTON ),
502 TOKEN( "drill-down-on-double-click", XML_DRILL_DOWN_ON_DOUBLE_CLICK ),
503 + TOKEN( "header-grid-layout", XML_HEADER_GRID_LAYOUT ),
504 TOKEN( "grouped-by", XML_GROUPED_BY ),
505 TOKEN( "days", XML_DAYS ),
506 TOKEN( "months", XML_MONTHS ),