1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
13 #include "anyrefdg.hxx"
14 #include <dpobject.hxx>
15 #include "viewdata.hxx"
17 #include "PivotLayoutTreeList.hxx"
18 #include "PivotLayoutTreeListData.hxx"
19 #include "PivotLayoutTreeListLabel.hxx"
21 class ScItemValue final
25 ScPivotFuncData maFunctionData
;
26 ScItemValue
* mpOriginalItemValue
;
28 ScItemValue(OUString aName
, SCCOL nColumn
, PivotFunc nFunctionMask
);
29 ScItemValue(const ScItemValue
* pInputItemValue
);
34 class ScPivotLayoutDialog
: public ScAnyRefDlgController
37 ScDPObject maPivotTableObject
;
39 ScPivotLayoutTreeListBase
* mpPreviouslyFocusedListBox
;
42 ScViewData
* mpViewData
;
43 ScDocument
& mrDocument
;
47 ScAddress::Details maAddressDetails
;
48 bool mbDialogLostFocus
;
50 formula::RefEdit
* mpActiveEdit
;
51 std::unique_ptr
<ScPivotLayoutTreeListLabel
> mxListBoxField
;
52 std::unique_ptr
<ScPivotLayoutTreeList
> mxListBoxPage
;
53 std::unique_ptr
<ScPivotLayoutTreeList
> mxListBoxColumn
;
54 std::unique_ptr
<ScPivotLayoutTreeList
> mxListBoxRow
;
55 std::unique_ptr
<ScPivotLayoutTreeListData
> mxListBoxData
;
57 std::unique_ptr
<weld::CheckButton
> mxCheckIgnoreEmptyRows
;
58 std::unique_ptr
<weld::CheckButton
> mxCheckTotalColumns
;
59 std::unique_ptr
<weld::CheckButton
> mxCheckAddFilter
;
60 std::unique_ptr
<weld::CheckButton
> mxCheckIdentifyCategories
;
61 std::unique_ptr
<weld::CheckButton
> mxCheckTotalRows
;
62 std::unique_ptr
<weld::CheckButton
> mxCheckDrillToDetail
;
63 std::unique_ptr
<weld::CheckButton
> mxCheckExpandCollapse
;
65 std::unique_ptr
<weld::RadioButton
> mxSourceRadioNamedRange
;
66 std::unique_ptr
<weld::RadioButton
> mxSourceRadioSelection
;
68 std::unique_ptr
<weld::ComboBox
> mxSourceListBox
;
69 std::unique_ptr
<formula::RefEdit
> mxSourceEdit
;
70 std::unique_ptr
<formula::RefButton
> mxSourceButton
;
72 std::unique_ptr
<weld::RadioButton
> mxDestinationRadioNewSheet
;
73 std::unique_ptr
<weld::RadioButton
> mxDestinationRadioNamedRange
;
74 std::unique_ptr
<weld::RadioButton
> mxDestinationRadioSelection
;
76 std::unique_ptr
<weld::ComboBox
> mxDestinationListBox
;
77 std::unique_ptr
<formula::RefEdit
> mxDestinationEdit
;
78 std::unique_ptr
<formula::RefButton
> mxDestinationButton
;
80 std::unique_ptr
<weld::Button
> mxBtnOK
;
81 std::unique_ptr
<weld::Button
> mxBtnCancel
;
83 std::unique_ptr
<weld::Frame
> mxSourceFrame
;
84 std::unique_ptr
<weld::Label
> mxSourceLabel
;
85 std::unique_ptr
<weld::Frame
> mxDestFrame
;
86 std::unique_ptr
<weld::Label
> mxDestLabel
;
88 std::unique_ptr
<weld::Expander
> mxOptions
;
89 std::unique_ptr
<weld::Expander
> mxMore
;
91 DECL_LINK(CancelClicked
, weld::Button
&, void);
92 DECL_LINK(OKClicked
, weld::Button
&, void);
93 DECL_LINK(GetEditFocusHandler
, formula::RefEdit
&, void);
94 DECL_LINK(GetButtonFocusHandler
, formula::RefButton
&, void);
95 DECL_LINK(LoseEditFocusHandler
, formula::RefEdit
&, void);
96 DECL_LINK(LoseButtonFocusHandler
, formula::RefButton
&, void);
97 DECL_LINK(ToggleSource
, weld::Toggleable
&, void);
98 DECL_LINK(ToggleDestination
, weld::Toggleable
&, void);
99 DECL_LINK(SourceListSelected
, weld::ComboBox
&, void);
100 DECL_LINK(SourceEditModified
, formula::RefEdit
&, void);
102 void ToggleDestination();
103 virtual void Close() override
;
105 ScPivotParam maPivotParameters
;
109 void SetupDestination();
110 void FillValuesToListBoxes();
113 bool GetDestination(ScRange
& aDestinationRange
, bool& bToNewSheet
);
116 ScPivotLayoutDialog(SfxBindings
* pSfxBindings
, SfxChildWindow
* pChildWindow
, weld::Window
* pParent
,
117 ScViewData
* pViewData
, const ScDPObject
* pPivotTableObject
, bool bCreateNewPivotTable
);
118 virtual ~ScPivotLayoutDialog() override
;
120 virtual void SetReference(const ScRange
& rReferenceRange
, ScDocument
& rDocument
) override
;
121 virtual void SetActive() override
;
122 virtual bool IsRefInputMode() const override
;
124 void ItemInserted(const ScItemValue
* pItemValue
, ScPivotLayoutTreeList::SvPivotTreeListType eType
);
126 void UpdateSourceRange();
129 void ApplySaveData(ScDPSaveData
& rSaveData
);
130 void ApplyLabelData(const ScDPSaveData
& rSaveData
);
132 ScItemValue
* GetItem(SCCOL nColumn
);
133 bool IsDataElement(SCCOL nColumn
);
135 ScDPLabelData
& GetLabelData(SCCOL nColumn
);
136 ScDPLabelDataVector
& GetLabelDataVector() { return maPivotParameters
.maLabelArray
;}
137 void PushDataFieldNames(std::vector
<ScDPName
>& rDataFieldNames
);
140 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */