1
0
Fork 0
libreoffice/sc/source/ui/inc/datatransformation.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

229 lines
7.1 KiB
C++

/* -*- 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/.
*/
#pragma once
#include <types.hxx>
#include <scdllapi.h>
#include <sortparam.hxx>
#include <set>
class ScDocument;
namespace sc {
enum class TransformationType
{
MERGE_TRANSFORMATION,
SPLIT_TRANSFORMATION,
DELETE_TRANSFORMATION,
SORT_TRANSFORMATION,
TEXT_TRANSFORMATION,
AGGREGATE_FUNCTION,
NUMBER_TRANSFORMATION,
REMOVE_NULL_TRANSFORMATION,
DATETIME_TRANSFORMATION,
FINDREPLACE_TRANSFORMATION,
DELETEROW_TRANSFORMATION,
SWAPROWS_TRANSFORMATION
};
enum class TEXT_TRANSFORM_TYPE { TO_LOWER, TO_UPPER, CAPITALIZE, TRIM };
enum class AGGREGATE_FUNCTION { SUM, AVERAGE, MIN, MAX };
enum class NUMBER_TRANSFORM_TYPE { ROUND, ROUND_UP, ROUND_DOWN, ABSOLUTE, LOG_E, LOG_10, CUBE,
SQUARE, SQUARE_ROOT, EXPONENT, IS_EVEN, IS_ODD, SIGN };
enum class DATETIME_TRANSFORMATION_TYPE { DATE_STRING, YEAR, START_OF_YEAR, END_OF_YEAR, MONTH,
MONTH_NAME, START_OF_MONTH, END_OF_MONTH, DAY, DAY_OF_WEEK, DAY_OF_YEAR, QUARTER, START_OF_QUARTER,
END_OF_QUARTER, TIME, HOUR, MINUTE, SECOND };
class SC_DLLPUBLIC DataTransformation
{
protected:
static SCROW getLastRow(const ScDocument& rDoc, SCCOL nCol);
public:
virtual ~DataTransformation();
virtual void Transform(ScDocument& rDoc) const = 0;
virtual TransformationType getTransformationType() const = 0;
};
class SC_DLLPUBLIC ColumnRemoveTransformation : public DataTransformation
{
std::set<SCCOL> maColumns;
public:
ColumnRemoveTransformation(std::set<SCCOL>&& rColumns);
virtual ~ColumnRemoveTransformation() override;
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
const std::set<SCCOL> & getColumns() const;
};
class SC_DLLPUBLIC SplitColumnTransformation : public DataTransformation
{
SCCOL mnCol;
sal_Unicode mcSeparator;
public:
SplitColumnTransformation(SCCOL nCol, sal_Unicode cSeparator);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
SCCOL getColumn() const;
sal_Unicode getSeparator() const;
};
class SC_DLLPUBLIC MergeColumnTransformation : public DataTransformation
{
std::set<SCCOL> maColumns;
OUString maMergeString;
public:
MergeColumnTransformation(std::set<SCCOL>&& rColumns, OUString aMergeString);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
const OUString & getMergeString() const;
const std::set<SCCOL> & getColumns() const;
};
class SortTransformation : public DataTransformation
{
ScSortParam maSortParam;
public:
SortTransformation(const ScSortParam& rParam);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
const ScSortParam & getSortParam() const;
};
class SC_DLLPUBLIC TextTransformation : public DataTransformation
{
std::set<SCCOL> mnCol;
TEXT_TRANSFORM_TYPE maType;
public:
TextTransformation(std::set<SCCOL>&& nCol, const TEXT_TRANSFORM_TYPE rType);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
TEXT_TRANSFORM_TYPE getTextTransformationType() const;
const std::set<SCCOL>& getColumns() const;
};
class SC_DLLPUBLIC AggregateFunction : public DataTransformation
{
std::set<SCCOL> maColumns;
AGGREGATE_FUNCTION maType;
public:
AggregateFunction(std::set<SCCOL>&& rColumns, const AGGREGATE_FUNCTION rType);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
AGGREGATE_FUNCTION getAggregateType() const;
const std::set<SCCOL>& getColumns() const;
};
class SC_DLLPUBLIC NumberTransformation : public DataTransformation
{
std::set<SCCOL> mnCol;
NUMBER_TRANSFORM_TYPE maType;
int maPrecision;
public:
NumberTransformation(std::set<SCCOL>&& nCol, const NUMBER_TRANSFORM_TYPE rType);
NumberTransformation(std::set<SCCOL>&& nCol, const NUMBER_TRANSFORM_TYPE rType,
int nPrecision);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
NUMBER_TRANSFORM_TYPE getNumberTransformationType() const;
int getPrecision() const;
const std::set<SCCOL>& getColumn() const;
};
class SC_DLLPUBLIC ReplaceNullTransformation : public DataTransformation
{
std::set<SCCOL> mnCol;
OUString msReplaceWith;
public:
ReplaceNullTransformation(std::set<SCCOL>&& nCol, OUString sReplaceWith);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
const std::set<SCCOL>& getColumn() const;
const OUString& getReplaceString() const;
};
class SC_DLLPUBLIC DateTimeTransformation : public DataTransformation
{
std::set<SCCOL> mnCol;
DATETIME_TRANSFORMATION_TYPE maType;
public:
DateTimeTransformation(std::set<SCCOL>&& nCol,
const DATETIME_TRANSFORMATION_TYPE rType);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
DATETIME_TRANSFORMATION_TYPE getDateTimeTransformationType() const;
const std::set<SCCOL>& getColumn() const;
};
class FindReplaceTransformation : public DataTransformation
{
SCCOL mnCol;
OUString maFindString;
OUString maReplaceString;
public:
FindReplaceTransformation(SCCOL nCol, OUString aFindString, OUString aReplaceString);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
SCCOL getColumn() const;
const OUString & getFindString() const;
const OUString & getReplaceString() const;
};
class DeleteRowTransformation : public DataTransformation
{
SCCOL mnCol;
OUString maFindString;
public:
DeleteRowTransformation(SCCOL nCol, OUString aFindString);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
SCCOL getColumn() const;
const OUString & getFindString() const;
};
class SwapRowsTransformation : public DataTransformation
{
SCROW mxRow, nxRow;
public:
SwapRowsTransformation(SCROW mRow, SCROW nRow);
virtual void Transform(ScDocument& rDoc) const override;
virtual TransformationType getTransformationType() const override;
SCROW getFirstRow() const;
SCROW getSecondRow() const;
};
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */