blob: 655f2184dbc5f07ec35a2bf8630879d7bdd6e421 [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
// ============================================================================
#ifndef SC_XLTRACER_HXX
#define SC_XLTRACER_HXX
#include "global.hxx" // ScAddress
#include "xltools.hxx"
// As Trace features become implemented, we can safely delete the enum entry as
// we use the member mnID to keep track of the actual trace tag ID value.
enum XclTracerId
{
eUnKnown , /// unused but allows us to set the correct index
eRowLimitExceeded ,
eTabLimitExceeded ,
ePassword ,
ePrintRange ,
eShortDate ,
eBorderLineStyle ,
eFillPattern ,
eInvisibleGrid ,
eFormattedNote ,
eFormulaExtName ,
eFormulaMissingArg ,
ePivotDataSource ,
ePivotChartExists ,
eChartUnKnownType ,
eChartTrendLines ,
eChartErrorBars ,
eChartOnlySheet ,
eChartRange ,
eChartDSName,
eChartDataTable,
eChartLegendPosition,
eChartTextFormatting,
eChartEmbeddedObj,
eChartAxisAuto,
eChartAxisManual,
eChartInvalidXY,
eUnsupportedObject ,
eObjectNotPrintable ,
eDVType,
eTraceLength /// this *should* always be the final entry
};
struct XclTracerDetails
{
XclTracerId meProblemId; /// Excel Import Trace index.
sal_uInt32 mnID; /// actual ID Index trace tag Value
const sal_Char* mpContext; /// Context for problem e.g. Limits
const sal_Char* mpDetail; /// Context Detail e.g. SheetX
const sal_Char* mpProblem; /// Description of problem
};
// ============================================================================
class MSFilterTracer;
/** This class wraps an MSFilterTracer to create trace logs for import/export filters. */
class XclTracer
{
public:
explicit XclTracer( const String& rDocUrl, const ::rtl::OUString& rConfigPath );
virtual ~XclTracer();
/** Returns true, if tracing is enabled. */
inline bool IsEnabled() const { return mbEnabled; }
/** Adds an attribute to be traced with the next Trace() call. */
void AddAttribute( const ::rtl::OUString& rName, const ::rtl::OUString& rValue );
/** Creates an element including all attributes set up to this call.
@descr Removes all attributes after the element is traced. */
void Trace( const ::rtl::OUString& rElementID, const ::rtl::OUString& rMessage );
/** Calls Trace() with a known document properties problem. */
void TraceLog( XclTracerId eProblem, sal_Int32 nValue = 0 );
/** Calls AddAttribute() to create the Context & Detail for known problems. */
void Context( XclTracerId eProblem, SCTAB nTab = 0 );
/** Ensure that particular traces are logged once per document. */
void ProcessTraceOnce(XclTracerId eProblem, SCTAB nTab = 0);
void TraceInvalidAddress(const ScAddress& rPos, const ScAddress& rMaxPos);
void TraceInvalidRow( SCTAB nTab, sal_uInt32 nRow, sal_uInt32 nMaxrow );
void TraceInvalidTab( SCTAB nTab, SCTAB nMaxTab);
void TracePrintRange();
void TraceDates(sal_uInt16 nNumFmt);
void TraceBorderLineStyle(bool bBorderLineStyle);
void TraceFillPattern(bool bFillPattern);
void TraceFormulaMissingArg();
void TracePivotDataSource(bool bExternal);
void TracePivotChartExists();
void TraceChartUnKnownType();
void TraceChartOnlySheet();
void TraceChartDataTable();
void TraceChartLegendPosition();
void TraceChartEmbeddedObj();
void TraceUnsupportedObjects();
void TraceObjectNotPrintable();
void TraceDVType(bool bType);
/** Returns the SVX filter tracer for usage in external code (i.e. Escher). */
inline MSFilterTracer& GetBaseTracer() { return *mpTracer; }
private:
typedef ::std::auto_ptr< MSFilterTracer > MSFilterTracerPtr;
MSFilterTracerPtr mpTracer;
bool mbEnabled;
typedef ::std::vector< bool > BoolVec;
/** array of flags corresponding to each entry in the XclTracerDetails table. */
BoolVec maFirstTimes;
};
// ============================================================================
#endif