1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SC_XMLSTYLESEXPORTHELPER_HXX 25 #define SC_XMLSTYLESEXPORTHELPER_HXX 26 27 #include <vector> 28 #include <list> 29 #include <com/sun/star/uno/Any.h> 30 #include <com/sun/star/table/CellRangeAddress.hpp> 31 #include <com/sun/star/table/CellAddress.hpp> 32 #include <com/sun/star/sheet/ConditionOperator.hpp> 33 #include <com/sun/star/sheet/ValidationAlertStyle.hpp> 34 #include <com/sun/star/sheet/ValidationType.hpp> 35 36 class ScDocument; 37 class ScXMLExport; 38 39 struct ScMyValidation 40 { 41 rtl::OUString sName; 42 rtl::OUString sErrorMessage; 43 rtl::OUString sErrorTitle; 44 rtl::OUString sImputMessage; 45 rtl::OUString sImputTitle; 46 rtl::OUString sFormula1; 47 rtl::OUString sFormula2; 48 com::sun::star::table::CellAddress aBaseCell; 49 com::sun::star::sheet::ValidationAlertStyle aAlertStyle; 50 com::sun::star::sheet::ValidationType aValidationType; 51 com::sun::star::sheet::ConditionOperator aOperator; 52 sal_Int16 nShowList; 53 sal_Bool bShowErrorMessage; 54 sal_Bool bShowImputMessage; 55 sal_Bool bIgnoreBlanks; 56 57 ScMyValidation(); 58 ~ScMyValidation(); 59 60 sal_Bool IsEqual(const ScMyValidation& aVal) const; 61 }; 62 63 typedef std::vector<ScMyValidation> ScMyValidationVec; 64 65 class ScMyValidationsContainer 66 { 67 private: 68 ScMyValidationVec aValidationVec; 69 const rtl::OUString sEmptyString; 70 const rtl::OUString sERRALSTY; 71 const rtl::OUString sIGNOREBL; 72 const rtl::OUString sSHOWLIST; 73 const rtl::OUString sTYPE; 74 const rtl::OUString sSHOWINP; 75 const rtl::OUString sSHOWERR; 76 const rtl::OUString sINPTITLE; 77 const rtl::OUString sINPMESS; 78 const rtl::OUString sERRTITLE; 79 const rtl::OUString sERRMESS; 80 const rtl::OUString sOnError; 81 const rtl::OUString sEventType; 82 const rtl::OUString sStarBasic; 83 const rtl::OUString sScript; 84 const rtl::OUString sLibrary; 85 const rtl::OUString sMacroName; 86 87 public: 88 ScMyValidationsContainer(); 89 ~ScMyValidationsContainer(); 90 sal_Bool AddValidation(const com::sun::star::uno::Any& aAny, 91 sal_Int32& nValidationIndex); 92 rtl::OUString GetCondition(ScXMLExport& rExport, const ScMyValidation& aValidation); 93 rtl::OUString GetBaseCellAddress(ScDocument* pDoc, const com::sun::star::table::CellAddress& aCell); 94 void WriteMessage(ScXMLExport& rExport, 95 const rtl::OUString& sTitle, const rtl::OUString& sMessage, 96 const sal_Bool bShowMessage, const sal_Bool bIsHelpMessage); 97 void WriteValidations(ScXMLExport& rExport); 98 const rtl::OUString& GetValidationName(const sal_Int32 nIndex); 99 }; 100 101 //============================================================================== 102 103 struct ScMyDefaultStyle 104 { 105 sal_Int32 nIndex; 106 sal_Int32 nRepeat; 107 sal_Bool bIsAutoStyle; 108 ScMyDefaultStyleScMyDefaultStyle109 ScMyDefaultStyle() : nIndex(-1), nRepeat(1), 110 bIsAutoStyle(sal_True) {} 111 }; 112 113 typedef std::vector<ScMyDefaultStyle> ScMyDefaultStyleList; 114 115 class ScFormatRangeStyles; 116 117 class ScMyDefaultStyles 118 { 119 ScMyDefaultStyleList* pRowDefaults; 120 ScMyDefaultStyleList* pColDefaults; 121 122 sal_Int32 GetStyleNameIndex(const ScFormatRangeStyles* pCellStyles, 123 const sal_Int32 nTable, const sal_Int32 nPos, 124 const sal_Int32 i, const sal_Bool bRow, sal_Bool& bIsAutoStyle); 125 void FillDefaultStyles(const sal_Int32 nTable, 126 const sal_Int32 nLastRow, const sal_Int32 nLastCol, 127 const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc, 128 const sal_Bool bRow); 129 public: ScMyDefaultStyles()130 ScMyDefaultStyles() : pRowDefaults(NULL), pColDefaults(NULL) {} 131 ~ScMyDefaultStyles(); 132 133 void FillDefaultStyles(const sal_Int32 nTable, 134 const sal_Int32 nLastRow, const sal_Int32 nLastCol, 135 const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc); 136 GetRowDefaults()137 const ScMyDefaultStyleList* GetRowDefaults() { return pRowDefaults; } GetColDefaults()138 const ScMyDefaultStyleList* GetColDefaults() { return pColDefaults; } 139 }; 140 141 struct ScMyRowFormatRange 142 { 143 sal_Int32 nStartColumn; 144 sal_Int32 nRepeatColumns; 145 sal_Int32 nRepeatRows; 146 sal_Int32 nIndex; 147 sal_Int32 nValidationIndex; 148 sal_Bool bIsAutoStyle; 149 150 ScMyRowFormatRange(); 151 sal_Bool operator<(const ScMyRowFormatRange& rRange) const; 152 }; 153 154 typedef std::list<ScMyRowFormatRange> ScMyRowFormatRangesList; 155 156 class ScRowFormatRanges 157 { 158 ScMyRowFormatRangesList aRowFormatRanges; 159 const ScMyDefaultStyleList* pRowDefaults; 160 const ScMyDefaultStyleList* pColDefaults; 161 sal_uInt32 nSize; 162 163 void AddRange(const sal_Int32 nPrevStartCol, const sal_Int32 nRepeat, const sal_Int32 nPrevIndex, 164 const sal_Bool bPrevAutoStyle, const ScMyRowFormatRange& rFormatRange); 165 166 public: 167 ScRowFormatRanges(); 168 ScRowFormatRanges(const ScRowFormatRanges* pRanges); 169 ~ScRowFormatRanges(); 170 SetRowDefaults(const ScMyDefaultStyleList * pDefaults)171 void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; } SetColDefaults(const ScMyDefaultStyleList * pDefaults)172 void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; } 173 void Clear(); 174 void AddRange(ScMyRowFormatRange& rFormatRange, const sal_Int32 nStartRow); 175 sal_Bool GetNext(ScMyRowFormatRange& rFormatRange); 176 sal_Int32 GetMaxRows(); 177 sal_Int32 GetSize(); 178 void Sort(); 179 }; 180 181 typedef std::vector<rtl::OUString*> ScMyOUStringVec; 182 183 struct ScMyFormatRange 184 { 185 com::sun::star::table::CellRangeAddress aRangeAddress; 186 sal_Int32 nStyleNameIndex; 187 sal_Int32 nValidationIndex; 188 sal_Int32 nNumberFormat; 189 sal_Bool bIsAutoStyle; 190 191 ScMyFormatRange(); 192 sal_Bool operator< (const ScMyFormatRange& rRange) const; 193 }; 194 195 typedef std::list<ScMyFormatRange> ScMyFormatRangeAddresses; 196 typedef std::vector<ScMyFormatRangeAddresses*> ScMyFormatRangeListVec; 197 198 class ScFormatRangeStyles 199 { 200 ScMyFormatRangeListVec aTables; 201 ScMyOUStringVec aStyleNames; 202 ScMyOUStringVec aAutoStyleNames; 203 const ScMyDefaultStyleList* pRowDefaults; 204 const ScMyDefaultStyleList* pColDefaults; 205 206 public: 207 ScFormatRangeStyles(); 208 ~ScFormatRangeStyles(); 209 SetRowDefaults(const ScMyDefaultStyleList * pDefaults)210 void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; } SetColDefaults(const ScMyDefaultStyleList * pDefaults)211 void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; } 212 void AddNewTable(const sal_Int32 nTable); 213 sal_Bool AddStyleName(rtl::OUString* pString, sal_Int32& rIndex, const sal_Bool bIsAutoStyle = sal_True); 214 sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix, sal_Bool& bIsAutoStyle); 215 // does not delete ranges 216 sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow, 217 sal_Bool& bIsAutoStyle) const; 218 // deletes not necessary ranges if wanted 219 sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow, 220 sal_Bool& bIsAutoStyle, sal_Int32& nValidationIndex, sal_Int32& nNumberFormat, const sal_Int32 nRemoveBeforeRow); 221 void GetFormatRanges(const sal_Int32 nStartColumn, const sal_Int32 nEndColumn, const sal_Int32 nRow, 222 const sal_Int32 nTable, ScRowFormatRanges* pFormatRanges); 223 void AddRangeStyleName(const com::sun::star::table::CellRangeAddress aCellRangeAddress, const sal_Int32 nStringIndex, 224 const sal_Bool bIsAutoStyle, const sal_Int32 nValidationIndex, const sal_Int32 nNumberFormat); 225 rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex, const sal_Bool bIsAutoStyle); 226 void Sort(); 227 }; 228 229 class ScColumnRowStylesBase 230 { 231 ScMyOUStringVec aStyleNames; 232 233 public: 234 ScColumnRowStylesBase(); 235 virtual ~ScColumnRowStylesBase(); 236 237 virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields) = 0; 238 sal_Int32 AddStyleName(rtl::OUString* pString); 239 sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix); 240 virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField) = 0; 241 rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex); 242 }; 243 244 struct ScColumnStyle 245 { 246 sal_Int32 nIndex; 247 sal_Bool bIsVisible; 248 ScColumnStyleScColumnStyle249 ScColumnStyle() : nIndex(-1), bIsVisible(sal_True) {} 250 }; 251 252 253 typedef std::vector<ScColumnStyle> ScMyColumnStyleVec; 254 typedef std::vector<ScMyColumnStyleVec> ScMyColumnVectorVec; 255 256 class ScColumnStyles : public ScColumnRowStylesBase 257 { 258 ScMyColumnVectorVec aTables; 259 260 public: 261 ScColumnStyles(); 262 ~ScColumnStyles(); 263 264 virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields); 265 sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField, 266 sal_Bool& bIsVisible); 267 void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex, const sal_Bool bIsVisible); 268 virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField); 269 }; 270 271 typedef std::vector<sal_Int32> ScMysalInt32Vec; 272 typedef std::vector<ScMysalInt32Vec> ScMyRowVectorVec; 273 274 class ScRowStyles : public ScColumnRowStylesBase 275 { 276 ScMyRowVectorVec aTables; 277 278 public: 279 ScRowStyles(); 280 ~ScRowStyles(); 281 282 virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields); 283 sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField); 284 void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex); 285 void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nStartField, const sal_Int32 nStringIndex, const sal_Int32 nEndField); 286 virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField); 287 }; 288 289 #endif 290 291