office-gobmx/sc/inc/pivot/PivotTableFormats.hxx
Tomaž Vajngerl ded4d570fd pivot: suppprt multiple cell format reference indices
This adds support for multiple cell format reference indices, so
the same cell format is applied to multiple cells (defined by
indices) so that each doesn't need to be defined by its own
reference (as they are all the same anyway and only differ by
single index).

The solution is to create multiple format outputs for one format
entry - each for a selection index, but have other data still the
same. This is a bit tricky as previously it was one format output
for one format entry, which is not the case anymore.

Change-Id: I074ac03e7d81e26562a6a6cc395b11cfed16766d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166131
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2024-04-16 08:31:38 +02:00

68 lines
1.7 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 <memory>
#include <vector>
#include <rtl/ustring.hxx>
#include <patattr.hxx>
namespace sc
{
/** Type of a pivot table cell format to which a selection can be made. */
enum class FormatType
{
None,
Data,
Label
};
/** Information to make a selection in the pivot table. */
struct Selection
{
bool bSelected = false;
sal_Int32 nField = 0;
std::vector<sal_uInt32> nIndices;
};
/** Holds cell pattern attributes and a selection information to which cells in the pivot table
* the pattern should be applied.
*/
struct PivotTableFormat
{
FormatType eType = FormatType::None;
bool bDataOnly = true;
bool bLabelOnly = false;
bool bSelected = false;
bool bOutline = false;
std::optional<sal_uInt32> oFieldPosition = std::nullopt;
std::vector<Selection> aSelections;
std::shared_ptr<ScPatternAttr> pPattern;
std::vector<Selection> const& getSelections() const { return aSelections; }
};
/** A holder for a collection of PivotTableFormat */
class PivotTableFormats
{
std::vector<PivotTableFormat> maFormats;
public:
void add(PivotTableFormat const& rPivotTableFormat) { maFormats.push_back(rPivotTableFormat); }
size_t size() const { return maFormats.size(); }
std::vector<PivotTableFormat> const& getVector() const { return maFormats; }
};
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */