/************************************************************** * * 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