office-gobmx/sc/inc/SparklineList.hxx
Tomaž Vajngerl 93d7fbf73f sc: improve keeping track of sparklines in SparklineList
Issues can happen when saving a document with sparklines where a
sparkline is deleted and then undo-ed. The reason for this is
because the SparlineList wasn't correctly updated when deleting,
copying or adding sparklines. This change adds hooks when new
sparklines are created or when sparklines are deleted to report
this into SparlineList.

SparklineList garbage-collects itself but this is not enough when
we rely that the non-deleted weak pointers to the sparkline groups
contain the correct non-deleted weak pointers to the correct
sparklines.

Change-Id: I976cbe7e6168813d3dd5089c036cc7fe4e357fb2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132554
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-04-07 10:35:59 +02:00

49 lines
1.3 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 "scdllapi.h"
#include <memory>
#include <map>
#include "Sparkline.hxx"
#include "SparklineGroup.hxx"
namespace sc
{
/** Tracks and gathers all created sparklines and sparkline groups.
*
* All the collections of sparkline groups and sparklines don't take
* the ownership of the pointers.
*/
class SC_DLLPUBLIC SparklineList
{
private:
std::vector<std::weak_ptr<SparklineGroup>> m_aSparklineGroups;
std::map<std::weak_ptr<SparklineGroup>, std::vector<std::weak_ptr<Sparkline>>,
std::owner_less<>>
m_aSparklineGroupMap;
public:
SparklineList();
void addSparkline(std::shared_ptr<Sparkline> const& pSparkline);
void removeSparkline(std::shared_ptr<Sparkline> const& pSparkline);
std::vector<std::shared_ptr<SparklineGroup>> getSparklineGroups();
std::vector<std::shared_ptr<Sparkline>>
getSparklinesFor(std::shared_ptr<SparklineGroup> const& pSparklineGroup);
};
} // end sc
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */