summaryrefslogtreecommitdiffstats
path: root/sc/source/filter/xml/XMLStylesImportHelper.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/filter/xml/XMLStylesImportHelper.hxx')
-rw-r--r--sc/source/filter/xml/XMLStylesImportHelper.hxx147
1 files changed, 147 insertions, 0 deletions
diff --git a/sc/source/filter/xml/XMLStylesImportHelper.hxx b/sc/source/filter/xml/XMLStylesImportHelper.hxx
new file mode 100644
index 000000000..6f51b4584
--- /dev/null
+++ b/sc/source/filter/xml/XMLStylesImportHelper.hxx
@@ -0,0 +1,147 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include <rangelst.hxx>
+#include <rtl/ustring.hxx>
+
+#include <memory>
+#include <set>
+#include <map>
+#include <vector>
+#include <optional>
+
+class ScXMLImport;
+
+struct ScMyStyleNumberFormat
+{
+ OUString sStyleName;
+ sal_Int32 nNumberFormat;
+
+ explicit ScMyStyleNumberFormat(const OUString& rStyleName) :
+ sStyleName(rStyleName), nNumberFormat(-1) {}
+ ScMyStyleNumberFormat(const OUString& rStyleName, const sal_Int32 nFormat) :
+ sStyleName(rStyleName), nNumberFormat(nFormat) {}
+};
+
+struct LessStyleNumberFormat
+{
+ bool operator() (const ScMyStyleNumberFormat& rValue1, const ScMyStyleNumberFormat& rValue2) const
+ {
+ return rValue1.sStyleName < rValue2.sStyleName;
+ }
+};
+
+typedef std::set< ScMyStyleNumberFormat, LessStyleNumberFormat > ScMyStyleNumberFormatSet;
+
+class ScMyStyleNumberFormats
+{
+ ScMyStyleNumberFormatSet aSet;
+
+public:
+ void AddStyleNumberFormat(const OUString& rStyleName, const sal_Int32 nNumberFormat);
+ sal_Int32 GetStyleNumberFormat(const OUString& rStyleName);
+};
+
+struct ScMyCurrencyStyle
+{
+ OUString sCurrency;
+ std::shared_ptr<ScRangeList> mpRanges;
+
+ ScMyCurrencyStyle() :
+ mpRanges(std::make_shared<ScRangeList>())
+ {}
+};
+
+struct LessCurrencyStyle
+{
+ bool operator() (const ScMyCurrencyStyle& rValue1, const ScMyCurrencyStyle& rValue2) const
+ {
+ return rValue1.sCurrency < rValue2.sCurrency;
+ }
+};
+
+typedef std::set<ScMyCurrencyStyle, LessCurrencyStyle> ScMyCurrencyStylesSet;
+
+class ScMyStyleRanges
+{
+ std::shared_ptr<ScRangeList> mpTextList;
+ std::shared_ptr<ScRangeList> mpNumberList;
+ std::shared_ptr<ScRangeList> mpTimeList;
+ std::shared_ptr<ScRangeList> mpDateTimeList;
+ std::shared_ptr<ScRangeList> mpPercentList;
+ std::shared_ptr<ScRangeList> mpLogicalList;
+ std::shared_ptr<ScRangeList> mpUndefinedList;
+ std::unique_ptr<ScMyCurrencyStylesSet> pCurrencyList;
+
+ static void SetStylesToRanges(const ScRangeList& rList,
+ const OUString* pStyleName, const sal_Int16 nCellType,
+ const OUString* pCurrency, ScXMLImport& rImport);
+public:
+ ScMyStyleRanges();
+ ~ScMyStyleRanges();
+ void AddRange(const ScRange& rRange, const sal_Int16 nType);
+ void AddCurrencyRange(const ScRange& rRange, const std::optional<OUString> & pCurrency);
+ void InsertCol(const sal_Int32 nCol, const sal_Int32 nTab);
+ void SetStylesToRanges(const OUString* pStyleName, ScXMLImport& rImport);
+};
+
+/** map from style name to ScMyStyleRanges */
+typedef std::map<OUString, std::unique_ptr<ScMyStyleRanges>> ScMyStylesMap;
+
+class ScMyStylesImportHelper
+{
+ ScMyStylesMap aCellStyles;
+ std::vector<ScMyStylesMap::iterator> aColDefaultStyles;
+ ScMyStylesMap::iterator aRowDefaultStyle;
+ ScXMLImport& rImport;
+ std::optional<OUString>
+ pStyleName;
+ std::optional<OUString>
+ pPrevStyleName;
+ std::optional<OUString>
+ pCurrency;
+ std::optional<OUString>
+ pPrevCurrency;
+ ScRange aPrevRange;
+ sal_Int16 nCellType;
+ sal_Int16 nPrevCellType;
+ bool bPrevRangeAdded;
+
+ void ResetAttributes();
+ ScMyStylesMap::iterator GetIterator(const OUString & rStyleName);
+ void AddDefaultRange(const ScRange& rRange);
+ void AddSingleRange(const ScRange& rRange);
+ void AddRange();
+public:
+ explicit ScMyStylesImportHelper(ScXMLImport& rImport);
+ ~ScMyStylesImportHelper();
+ void AddColumnStyle(const OUString& rStyleName, const sal_Int32 nColumn, const sal_Int32 nRepeat);
+ void SetRowStyle(const OUString& rStyleName);
+ void SetAttributes(std::optional<OUString> pStyleName,
+ std::optional<OUString> pCurrency, const sal_Int16 nCellType);
+ void AddRange(const ScRange& rRange);
+ void AddCell(const ScAddress& rAddress);
+ void InsertCol(const sal_Int32 nCol, const sal_Int32 nTab); // a col is inserted before nCol
+ void EndTable();
+ void SetStylesToRanges();
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */