update ooo310-m15
[ooovba.git] / applied_patches / 0519-calc-dp-hide-list-menu-crash-fix.diff
blob804e12897fdd16ab028efc6c659af1ac295c63e9
1 diff --git sc/inc/dpoutputgeometry.hxx sc/inc/dpoutputgeometry.hxx
2 index aae3271..4dd6b41 100644
3 --- sc/inc/dpoutputgeometry.hxx
4 +++ sc/inc/dpoutputgeometry.hxx
5 @@ -57,6 +57,8 @@ public:
6 void getRowFieldPositions(::std::vector<ScAddress>& rAddrs) const;
7 void getPageFieldPositions(::std::vector<ScAddress>& rAddrs) const;
9 + SCROW getRowFieldHeaderRow() const;
11 FieldType getFieldButtonType(const ScAddress& rPos) const;
13 private:
14 @@ -64,7 +66,7 @@ private:
16 private:
17 ScRange maOutRange;
18 - sal_uInt32 mnRowFields;
19 + sal_uInt32 mnRowFields; /// number of row fields (data layout field NOT included!)
20 sal_uInt32 mnColumnFields;
21 sal_uInt32 mnPageFields;
22 sal_uInt32 mnDataFields;
23 diff --git sc/source/core/data/dpoutputgeometry.cxx sc/source/core/data/dpoutputgeometry.cxx
24 index d570dfc..0976569 100644
25 --- sc/source/core/data/dpoutputgeometry.cxx
26 +++ sc/source/core/data/dpoutputgeometry.cxx
27 @@ -117,23 +117,7 @@ void ScDPOutputGeometry::getRowFieldPositions(vector<ScAddress>& rAddrs) const
28 return;
31 - SCROW nCurRow = maOutRange.aStart.Row();
33 - if (mnPageFields)
34 - {
35 - SCROW nRowStart = maOutRange.aStart.Row() + mbShowFilter;
36 - SCROW nRowEnd = nRowStart + static_cast<SCCOL>(mnPageFields-1);
37 - nCurRow = nRowEnd + 2;
38 - }
39 - else if (mbShowFilter)
40 - nCurRow += 2;
42 - if (mnColumnFields)
43 - nCurRow += static_cast<SCROW>(mnColumnFields);
44 - else
45 - ++nCurRow;
47 - SCROW nRow = nCurRow;
48 + SCROW nRow = getRowFieldHeaderRow();
49 SCTAB nTab = maOutRange.aStart.Tab();
50 SCCOL nColStart = maOutRange.aStart.Col();
51 SCCOL nColEnd = nColStart + static_cast<SCCOL>(mnRowFields-1);
52 @@ -163,6 +147,27 @@ void ScDPOutputGeometry::getPageFieldPositions(vector<ScAddress>& rAddrs) const
53 rAddrs.swap(aAddrs);
56 +SCROW ScDPOutputGeometry::getRowFieldHeaderRow() const
58 + SCROW nCurRow = maOutRange.aStart.Row();
60 + if (mnPageFields)
61 + {
62 + SCROW nRowStart = maOutRange.aStart.Row() + mbShowFilter;
63 + SCROW nRowEnd = nRowStart + static_cast<SCCOL>(mnPageFields-1);
64 + nCurRow = nRowEnd + 2;
65 + }
66 + else if (mbShowFilter)
67 + nCurRow += 2;
69 + if (mnColumnFields)
70 + nCurRow += static_cast<SCROW>(mnColumnFields);
71 + else if (mnRowFields)
72 + ++nCurRow;
74 + return nCurRow;
77 ScDPOutputGeometry::FieldType ScDPOutputGeometry::getFieldButtonType(const ScAddress& rPos) const
79 // We will ignore the table position for now.
80 diff --git sc/source/filter/excel/xipivot.cxx sc/source/filter/excel/xipivot.cxx
81 index a48a0b4..d950093 100644
82 --- sc/source/filter/excel/xipivot.cxx
83 +++ sc/source/filter/excel/xipivot.cxx
84 @@ -1485,21 +1485,35 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
86 vector<ScAddress> aRowBtns;
87 aGeometry.getRowFieldPositions(aRowBtns);
88 - itr = aRowBtns.begin();
89 - itrEnd = aRowBtns.end();
90 - for (; itr != itrEnd; ++itr)
91 + if (aRowBtns.empty())
93 - sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP;
94 - String aName;
95 - rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
96 - if (rSaveData.HasInvisibleMember(aName))
97 - nMFlag |= SC_MF_HIDDEN_MEMBER;
98 - rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), nMFlag);
99 + if (bDataLayout)
101 + // No row fields, but the data layout button exists.
102 + SCROW nRow = aGeometry.getRowFieldHeaderRow();
103 + SCCOL nCol = rOutRange.aStart.Col();
104 + SCTAB nTab = rOutRange.aStart.Tab();
105 + rDoc.ApplyFlagsTab(nCol, nRow, nCol, nRow, nTab, SC_MF_BUTTON);
108 - if (bDataLayout)
109 + else
111 - --itr; // move back to the last row field position.
112 - rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), SC_MF_BUTTON);
113 + itr = aRowBtns.begin();
114 + itrEnd = aRowBtns.end();
115 + for (; itr != itrEnd; ++itr)
117 + sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP;
118 + String aName;
119 + rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
120 + if (rSaveData.HasInvisibleMember(aName))
121 + nMFlag |= SC_MF_HIDDEN_MEMBER;
122 + rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), nMFlag);
124 + if (bDataLayout)
126 + --itr; // move back to the last row field position.
127 + rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), SC_MF_BUTTON);