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/dialogs/SelectSheetViewDialog.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
#include <dialogs/SelectSheetViewDialog.hxx>
11
#include <sal/config.h>
12
#include <o3tl/safeint.hxx>
13
#include <vcl/weld/Builder.hxx>
14
15
#include <viewdata.hxx>
16
#include <SheetViewManager.hxx>
17
18
namespace sc
19
{
20
class SheetViewListEntry
21
{
22
    OUString maName;
23
    sc::SheetViewID mnSheetViewID = sc::InvalidSheetViewID;
24
25
public:
26
    SheetViewListEntry(OUString const& rName, sc::SheetViewID nSheetViewID)
27
0
        : maName(rName)
28
0
        , mnSheetViewID(nSheetViewID)
29
0
    {
30
0
    }
31
32
0
    const OUString& getName() const { return maName; }
33
0
    sc::SheetViewID getSheetViewID() const { return mnSheetViewID; }
34
};
35
36
SelectSheetViewDialog::SelectSheetViewDialog(weld::Window* pParent, ScViewData& rViewData)
37
0
    : GenericDialogController(pParent, u"modules/scalc/ui/selectsheetviewdialog.ui"_ustr,
38
0
                              u"SelectSheetViewDialog"_ustr)
39
0
    , mrViewData(rViewData)
40
0
    , m_xEntryTree(m_xBuilder->weld_tree_view(u"entry-list"_ustr))
41
0
{
42
0
    m_xEntryTree->connect_selection_changed(LINK(this, SelectSheetViewDialog, NameModifyHdl));
43
44
0
    m_xEntryTree->clear();
45
46
0
    m_xEntryTree->freeze();
47
48
0
    OUString sActiveID = u"-1"_ustr;
49
0
    m_xEntryTree->append(u"-1"_ustr, SheetViewManager::defaultViewName());
50
51
0
    if (auto pSheetManager = mrViewData.GetCurrentSheetViewManager())
52
0
    {
53
0
        for (auto const& rSheetView : pSheetManager->iterateValidSheetViews())
54
0
        {
55
0
            auto& aEntry = m_aEntries.emplace_back(rSheetView.GetName(), rSheetView.getID());
56
0
            OUString sID = OUString::number(m_aEntries.size() - 1);
57
0
            if (rSheetView.getID() == mrViewData.GetSheetViewID())
58
0
                sActiveID = sID;
59
0
            m_xEntryTree->append(sID, aEntry.getName());
60
0
        }
61
0
    }
62
63
0
    m_xEntryTree->thaw();
64
65
0
    m_xEntryTree->select_id(sActiveID);
66
0
}
67
68
0
SelectSheetViewDialog::~SelectSheetViewDialog() {}
69
70
IMPL_LINK_NOARG(SelectSheetViewDialog, NameModifyHdl, weld::ItemView&, void)
71
0
{
72
0
    m_nCurrentIndex = m_xEntryTree->get_selected_id().toInt32();
73
0
}
74
75
sc::SheetViewID SelectSheetViewDialog::getSelectedSheetViewID() const
76
0
{
77
0
    if (m_nCurrentIndex == sc::DefaultSheetViewID)
78
0
        return sc::DefaultSheetViewID;
79
80
0
    if (m_nCurrentIndex < 0 || o3tl::make_unsigned(m_nCurrentIndex) >= m_aEntries.size())
81
0
        return sc::InvalidSheetViewID;
82
83
0
    return m_aEntries[m_nCurrentIndex].getSheetViewID();
84
0
}
85
}
86
87
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */