LibreOffice Module sc (master)  1
prnsave.cxx
Go to the documentation of this file.
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  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <prnsave.hxx>
21 #include <address.hxx>
22 
23 #include <osl/diagnose.h>
24 #include <tools/json_writer.hxx>
25 
26 // Data per table
27 
29  mbEntireSheet(false)
30 {
31 }
32 
34 {
35 }
36 
37 void ScPrintSaverTab::SetAreas( ScRangeVec&& rRanges, bool bEntireSheet )
38 {
39  maPrintRanges = std::move(rRanges);
40  mbEntireSheet = bEntireSheet;
41 }
42 
43 void ScPrintSaverTab::SetRepeat( std::optional<ScRange> oCol, std::optional<ScRange> oRow )
44 {
45  moRepeatCol = std::move(oCol);
46  moRepeatRow = std::move(oRow);
47 }
48 
50 {
51  return
52  (moRepeatCol == rCmp.moRepeatCol) &&
53  (moRepeatRow == rCmp.moRepeatRow) &&
54  (mbEntireSheet == rCmp.mbEntireSheet) &&
55  (maPrintRanges == rCmp.maPrintRanges);
56 }
57 
58 // Data for the whole document
59 
61  nTabCount( nCount )
62 {
63  if (nCount > 0)
64  pData.reset( new ScPrintSaverTab[nCount] );
65 }
66 
68 {
69 }
70 
72 {
73  OSL_ENSURE(nTab<nTabCount,"ScPrintRangeSaver Tab too big");
74  return pData[nTab];
75 }
76 
78 {
79  OSL_ENSURE(nTab<nTabCount,"ScPrintRangeSaver Tab too big");
80  return pData[nTab];
81 }
82 
84 {
85  // Array for sheets in the document.
86  auto printRanges = rPrintRanges.startArray("printranges");
87  for (SCTAB nTab = 0; nTab < nTabCount; nTab++)
88  {
89  auto sheetNode = rPrintRanges.startStruct();
90  const ScPrintSaverTab& rPsTab = pData[nTab];
91  const std::vector<ScRange>& rRangeVec = rPsTab.GetPrintRanges();
92 
93  rPrintRanges.put("sheet", static_cast<sal_Int32>(nTab));
94 
95  // Array for ranges within each sheet.
96  auto sheetRanges = rPrintRanges.startArray("ranges");
97  OStringBuffer aRanges;
98  sal_Int32 nLast = rRangeVec.size() - 1;
99  for (sal_Int32 nIdx = 0; nIdx <= nLast; ++nIdx)
100  {
101  const ScRange& rRange = rRangeVec[nIdx];
102  aRanges.append("[ " +
103  OString::number(rRange.aStart.Col()) + ", " +
104  OString::number(rRange.aStart.Row()) + ", " +
105  OString::number(rRange.aEnd.Col()) + ", " +
106  OString::number(rRange.aEnd.Row()) +
107  (nLast == nIdx ? std::string_view("]") : std::string_view("], ")));
108  }
109 
110  rPrintRanges.putRaw(aRanges.getStr());
111  }
112 }
113 
115 {
116  bool bEqual = ( nTabCount == rCmp.nTabCount );
117  if (bEqual)
118  for (SCTAB i=0; i<nTabCount; i++)
119  if (!(pData[i]==rCmp.pData[i]))
120  {
121  bEqual = false;
122  break;
123  }
124  return bEqual;
125 }
126 
127 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool operator==(const ScPrintSaverTab &rCmp) const
Definition: prnsave.cxx:49
ScPrintRangeSaver(SCTAB nCount)
Definition: prnsave.cxx:60
void SetRepeat(std::optional< ScRange > oCol, std::optional< ScRange > oRow)
Definition: prnsave.cxx:43
ScAddress aStart
Definition: address.hxx:497
SCROW Row() const
Definition: address.hxx:274
ScopedJsonWriterStruct startStruct()
bool operator==(const ScPrintRangeSaver &rCmp) const
Definition: prnsave.cxx:114
ScopedJsonWriterArray startArray(const char *)
ScAddress aEnd
Definition: address.hxx:498
ScPrintSaverTab & GetTabData(SCTAB nTab)
Definition: prnsave.cxx:71
ScRangeVec maPrintRanges
Array.
Definition: prnsave.hxx:33
std::unique_ptr< ScPrintSaverTab[]> pData
Definition: prnsave.hxx:56
int i
const ScRangeVec & GetPrintRanges() const
Definition: prnsave.hxx:45
void put(const char *pPropName, const OUString &rPropValue)
SCCOL Col() const
Definition: address.hxx:279
std::optional< ScRange > moRepeatRow
single
Definition: prnsave.hxx:35
void SetAreas(ScRangeVec &&rRanges, bool bEntireSheet)
Definition: prnsave.cxx:37
void putRaw(std::string_view)
::std::vector< ScRange > ScRangeVec
Definition: prnsave.hxx:31
std::optional< ScRange > moRepeatCol
single
Definition: prnsave.hxx:34
void GetPrintRangesInfo(tools::JsonWriter &rPrintRanges) const
Definition: prnsave.cxx:83
sal_Int16 SCTAB
Definition: types.hxx:22
bool m_bDetectedRangeSegmentation false
bool mbEntireSheet
Definition: prnsave.hxx:36