blob: be98702c6391bdf0af17fdf5fedf33e7b8039417 [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_XMLSTYLESEXPORTHELPER_HXX
#define SC_XMLSTYLESEXPORTHELPER_HXX
#include <vector>
#include <list>
#include <com/sun/star/uno/Any.h>
#include <com/sun/star/table/CellRangeAddress.hpp>
#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/sheet/ConditionOperator.hpp>
#include <com/sun/star/sheet/ValidationAlertStyle.hpp>
#include <com/sun/star/sheet/ValidationType.hpp>
class ScDocument;
class ScXMLExport;
struct ScMyValidation
{
rtl::OUString sName;
rtl::OUString sErrorMessage;
rtl::OUString sErrorTitle;
rtl::OUString sImputMessage;
rtl::OUString sImputTitle;
rtl::OUString sFormula1;
rtl::OUString sFormula2;
com::sun::star::table::CellAddress aBaseCell;
com::sun::star::sheet::ValidationAlertStyle aAlertStyle;
com::sun::star::sheet::ValidationType aValidationType;
com::sun::star::sheet::ConditionOperator aOperator;
sal_Int16 nShowList;
sal_Bool bShowErrorMessage;
sal_Bool bShowImputMessage;
sal_Bool bIgnoreBlanks;
ScMyValidation();
~ScMyValidation();
sal_Bool IsEqual(const ScMyValidation& aVal) const;
};
typedef std::vector<ScMyValidation> ScMyValidationVec;
class ScMyValidationsContainer
{
private:
ScMyValidationVec aValidationVec;
const rtl::OUString sEmptyString;
const rtl::OUString sERRALSTY;
const rtl::OUString sIGNOREBL;
const rtl::OUString sSHOWLIST;
const rtl::OUString sTYPE;
const rtl::OUString sSHOWINP;
const rtl::OUString sSHOWERR;
const rtl::OUString sINPTITLE;
const rtl::OUString sINPMESS;
const rtl::OUString sERRTITLE;
const rtl::OUString sERRMESS;
const rtl::OUString sOnError;
const rtl::OUString sEventType;
const rtl::OUString sStarBasic;
const rtl::OUString sScript;
const rtl::OUString sLibrary;
const rtl::OUString sMacroName;
public:
ScMyValidationsContainer();
~ScMyValidationsContainer();
sal_Bool AddValidation(const com::sun::star::uno::Any& aAny,
sal_Int32& nValidationIndex);
rtl::OUString GetCondition(ScXMLExport& rExport, const ScMyValidation& aValidation);
rtl::OUString GetBaseCellAddress(ScDocument* pDoc, const com::sun::star::table::CellAddress& aCell);
void WriteMessage(ScXMLExport& rExport,
const rtl::OUString& sTitle, const rtl::OUString& sMessage,
const sal_Bool bShowMessage, const sal_Bool bIsHelpMessage);
void WriteValidations(ScXMLExport& rExport);
const rtl::OUString& GetValidationName(const sal_Int32 nIndex);
};
//==============================================================================
struct ScMyDefaultStyle
{
sal_Int32 nIndex;
sal_Int32 nRepeat;
sal_Bool bIsAutoStyle;
ScMyDefaultStyle() : nIndex(-1), nRepeat(1),
bIsAutoStyle(sal_True) {}
};
typedef std::vector<ScMyDefaultStyle> ScMyDefaultStyleList;
class ScFormatRangeStyles;
class ScMyDefaultStyles
{
ScMyDefaultStyleList* pRowDefaults;
ScMyDefaultStyleList* pColDefaults;
sal_Int32 GetStyleNameIndex(const ScFormatRangeStyles* pCellStyles,
const sal_Int32 nTable, const sal_Int32 nPos,
const sal_Int32 i, const sal_Bool bRow, sal_Bool& bIsAutoStyle);
void FillDefaultStyles(const sal_Int32 nTable,
const sal_Int32 nLastRow, const sal_Int32 nLastCol,
const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc,
const sal_Bool bRow);
public:
ScMyDefaultStyles() : pRowDefaults(NULL), pColDefaults(NULL) {}
~ScMyDefaultStyles();
void FillDefaultStyles(const sal_Int32 nTable,
const sal_Int32 nLastRow, const sal_Int32 nLastCol,
const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc);
const ScMyDefaultStyleList* GetRowDefaults() { return pRowDefaults; }
const ScMyDefaultStyleList* GetColDefaults() { return pColDefaults; }
};
struct ScMyRowFormatRange
{
sal_Int32 nStartColumn;
sal_Int32 nRepeatColumns;
sal_Int32 nRepeatRows;
sal_Int32 nIndex;
sal_Int32 nValidationIndex;
sal_Bool bIsAutoStyle;
ScMyRowFormatRange();
sal_Bool operator<(const ScMyRowFormatRange& rRange) const;
};
typedef std::list<ScMyRowFormatRange> ScMyRowFormatRangesList;
class ScRowFormatRanges
{
ScMyRowFormatRangesList aRowFormatRanges;
const ScMyDefaultStyleList* pRowDefaults;
const ScMyDefaultStyleList* pColDefaults;
sal_uInt32 nSize;
void AddRange(const sal_Int32 nPrevStartCol, const sal_Int32 nRepeat, const sal_Int32 nPrevIndex,
const sal_Bool bPrevAutoStyle, const ScMyRowFormatRange& rFormatRange);
public:
ScRowFormatRanges();
ScRowFormatRanges(const ScRowFormatRanges* pRanges);
~ScRowFormatRanges();
void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; }
void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; }
void Clear();
void AddRange(ScMyRowFormatRange& rFormatRange, const sal_Int32 nStartRow);
sal_Bool GetNext(ScMyRowFormatRange& rFormatRange);
sal_Int32 GetMaxRows();
sal_Int32 GetSize();
void Sort();
};
typedef std::vector<rtl::OUString*> ScMyOUStringVec;
struct ScMyFormatRange
{
com::sun::star::table::CellRangeAddress aRangeAddress;
sal_Int32 nStyleNameIndex;
sal_Int32 nValidationIndex;
sal_Int32 nNumberFormat;
sal_Bool bIsAutoStyle;
ScMyFormatRange();
sal_Bool operator< (const ScMyFormatRange& rRange) const;
};
typedef std::list<ScMyFormatRange> ScMyFormatRangeAddresses;
typedef std::vector<ScMyFormatRangeAddresses*> ScMyFormatRangeListVec;
class ScFormatRangeStyles
{
ScMyFormatRangeListVec aTables;
ScMyOUStringVec aStyleNames;
ScMyOUStringVec aAutoStyleNames;
const ScMyDefaultStyleList* pRowDefaults;
const ScMyDefaultStyleList* pColDefaults;
public:
ScFormatRangeStyles();
~ScFormatRangeStyles();
void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; }
void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; }
void AddNewTable(const sal_Int32 nTable);
sal_Bool AddStyleName(rtl::OUString* pString, sal_Int32& rIndex, const sal_Bool bIsAutoStyle = sal_True);
sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix, sal_Bool& bIsAutoStyle);
// does not delete ranges
sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow,
sal_Bool& bIsAutoStyle) const;
// deletes not necessary ranges if wanted
sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow,
sal_Bool& bIsAutoStyle, sal_Int32& nValidationIndex, sal_Int32& nNumberFormat, const sal_Int32 nRemoveBeforeRow);
void GetFormatRanges(const sal_Int32 nStartColumn, const sal_Int32 nEndColumn, const sal_Int32 nRow,
const sal_Int32 nTable, ScRowFormatRanges* pFormatRanges);
void AddRangeStyleName(const com::sun::star::table::CellRangeAddress aCellRangeAddress, const sal_Int32 nStringIndex,
const sal_Bool bIsAutoStyle, const sal_Int32 nValidationIndex, const sal_Int32 nNumberFormat);
rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex, const sal_Bool bIsAutoStyle);
void Sort();
};
class ScColumnRowStylesBase
{
ScMyOUStringVec aStyleNames;
public:
ScColumnRowStylesBase();
virtual ~ScColumnRowStylesBase();
virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields) = 0;
sal_Int32 AddStyleName(rtl::OUString* pString);
sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix);
virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField) = 0;
rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex);
};
struct ScColumnStyle
{
sal_Int32 nIndex;
sal_Bool bIsVisible;
ScColumnStyle() : nIndex(-1), bIsVisible(sal_True) {}
};
typedef std::vector<ScColumnStyle> ScMyColumnStyleVec;
typedef std::vector<ScMyColumnStyleVec> ScMyColumnVectorVec;
class ScColumnStyles : public ScColumnRowStylesBase
{
ScMyColumnVectorVec aTables;
public:
ScColumnStyles();
~ScColumnStyles();
virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields);
sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField,
sal_Bool& bIsVisible);
void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex, const sal_Bool bIsVisible);
virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField);
};
typedef std::vector<sal_Int32> ScMysalInt32Vec;
typedef std::vector<ScMysalInt32Vec> ScMyRowVectorVec;
class ScRowStyles : public ScColumnRowStylesBase
{
ScMyRowVectorVec aTables;
public:
ScRowStyles();
~ScRowStyles();
virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields);
sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField);
void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex);
void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nStartField, const sal_Int32 nStringIndex, const sal_Int32 nEndField);
virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField);
};
#endif