/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: */ |