Coverage Report

Created: 2026-08-14 10:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/sc/source/ui/undo/UndoGroupSparklines.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 */
10
11
#include <undo/UndoGroupSparklines.hxx>
12
13
#include <globstr.hrc>
14
#include <scresid.hxx>
15
16
#include <Sparkline.hxx>
17
#include <SparklineGroup.hxx>
18
#include <utility>
19
20
namespace sc
21
{
22
UndoGroupSparklines::UndoGroupSparklines(ScDocShell& rShell, ScRange const& rRange,
23
                                         std::shared_ptr<sc::SparklineGroup> pSparklineGroup)
24
0
    : ScSimpleUndo(rShell)
25
0
    , m_aRange(rRange)
26
0
    , m_pSparklineGroup(std::move(pSparklineGroup))
27
0
{
28
0
}
29
30
0
UndoGroupSparklines::~UndoGroupSparklines() = default;
31
32
void UndoGroupSparklines::Undo()
33
0
{
34
0
    BeginUndo();
35
36
0
    ScDocument& rDocument = rDocShell.GetDocument();
37
38
0
    for (auto& rUndoData : m_aUndoData)
39
0
    {
40
0
        rDocument.DeleteSparkline(rUndoData.m_aAddress);
41
0
        auto* pCreated
42
0
            = rDocument.CreateSparkline(rUndoData.m_aAddress, rUndoData.m_pSparklineGroup);
43
0
        pCreated->setInputRange(rUndoData.m_aDataRangeList);
44
0
    }
45
46
0
    m_aUndoData.clear();
47
48
0
    rDocShell.PostPaint(m_aRange, PaintPartFlags::All);
49
50
0
    EndUndo();
51
0
}
52
53
void UndoGroupSparklines::Redo()
54
0
{
55
0
    BeginRedo();
56
57
0
    ScDocument& rDocument = rDocShell.GetDocument();
58
59
0
    for (ScAddress aAddress = m_aRange.aStart; aAddress.Col() <= m_aRange.aEnd.Col();
60
0
         aAddress.IncCol())
61
0
    {
62
0
        aAddress.SetRow(m_aRange.aStart.Row());
63
0
        for (; aAddress.Row() <= m_aRange.aEnd.Row(); aAddress.IncRow())
64
0
        {
65
0
            if (auto pSparkline = rDocument.GetSparkline(aAddress))
66
0
            {
67
0
                m_aUndoData.emplace_back(aAddress, pSparkline->getInputRange(),
68
0
                                         pSparkline->getSparklineGroup());
69
70
0
                rDocument.DeleteSparkline(aAddress);
71
0
                auto* pCreated = rDocument.CreateSparkline(aAddress, m_pSparklineGroup);
72
0
                pCreated->setInputRange(pSparkline->getInputRange());
73
0
            }
74
0
        }
75
0
    }
76
77
0
    rDocShell.PostPaint(m_aRange, PaintPartFlags::All);
78
79
0
    EndRedo();
80
0
}
81
82
0
void UndoGroupSparklines::Repeat(SfxRepeatTarget& /*rTarget*/) {}
83
84
0
bool UndoGroupSparklines::CanRepeat(SfxRepeatTarget& /*rTarget*/) const { return false; }
85
86
0
OUString UndoGroupSparklines::GetComment() const { return ScResId(STR_UNDO_GROUP_SPARKLINES); }
87
88
} // end sc namespace
89
90
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */