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 11 #ifndef INCLUDED_SC_SOURCE_UI_INC_PIVOTLAYOUTDIALOG_HXX 12 #define INCLUDED_SC_SOURCE_UI_INC_PIVOTLAYOUTDIALOG_HXX 13 14 #include "anyrefdg.hxx" 15 #include <dpobject.hxx> 16 #include "viewdata.hxx" 17 18 #include "PivotLayoutTreeList.hxx" 19 #include "PivotLayoutTreeListData.hxx" 20 #include "PivotLayoutTreeListLabel.hxx" 21 22 class ScItemValue final 23 { 24 public: 25 OUString const maName; 26 ScPivotFuncData maFunctionData; 27 ScItemValue* mpOriginalItemValue; 28 29 ScItemValue(OUString const & aName, SCCOL nColumn, PivotFunc nFunctionMask); 30 ScItemValue(const ScItemValue* pInputItemValue); 31 32 ~ScItemValue(); 33 }; 34 35 class ScPivotLayoutDialog : public ScAnyRefDlgController 36 { 37 public: 38 ScDPObject maPivotTableObject; 39 40 ScPivotLayoutTreeListBase* mpPreviouslyFocusedListBox; 41 42 private: 43 ScViewData* mpViewData; 44 ScDocument* const mpDocument; 45 46 bool const mbNewPivotTable; 47 48 ScAddress::Details const maAddressDetails; 49 bool mbDialogLostFocus; 50 51 formula::RefEdit* mpActiveEdit; 52 std::unique_ptr<ScPivotLayoutTreeListLabel> mxListBoxField; 53 std::unique_ptr<ScPivotLayoutTreeList> mxListBoxPage; 54 std::unique_ptr<ScPivotLayoutTreeList> mxListBoxColumn; 55 std::unique_ptr<ScPivotLayoutTreeList> mxListBoxRow; 56 std::unique_ptr<ScPivotLayoutTreeListData> mxListBoxData; 57 58 std::unique_ptr<weld::CheckButton> mxCheckIgnoreEmptyRows; 59 std::unique_ptr<weld::CheckButton> mxCheckTotalColumns; 60 std::unique_ptr<weld::CheckButton> mxCheckAddFilter; 61 std::unique_ptr<weld::CheckButton> mxCheckIdentifyCategories; 62 std::unique_ptr<weld::CheckButton> mxCheckTotalRows; 63 std::unique_ptr<weld::CheckButton> mxCheckDrillToDetail; 64 65 std::unique_ptr<weld::RadioButton> mxSourceRadioNamedRange; 66 std::unique_ptr<weld::RadioButton> mxSourceRadioSelection; 67 68 std::unique_ptr<weld::ComboBox> mxSourceListBox; 69 std::unique_ptr<formula::RefEdit> mxSourceEdit; 70 std::unique_ptr<formula::RefButton> mxSourceButton; 71 72 std::unique_ptr<weld::RadioButton> mxDestinationRadioNewSheet; 73 std::unique_ptr<weld::RadioButton> mxDestinationRadioNamedRange; 74 std::unique_ptr<weld::RadioButton> mxDestinationRadioSelection; 75 76 std::unique_ptr<weld::ComboBox> mxDestinationListBox; 77 std::unique_ptr<formula::RefEdit> mxDestinationEdit; 78 std::unique_ptr<formula::RefButton> mxDestinationButton; 79 80 std::unique_ptr<weld::Button> mxBtnOK; 81 std::unique_ptr<weld::Button> mxBtnCancel; 82 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; 87 88 std::unique_ptr<weld::Expander> mxOptions; 89 std::unique_ptr<weld::Expander> mxMore; 90 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::ToggleButton&, void); 98 DECL_LINK(ToggleDestination, weld::ToggleButton&, void); 99 DECL_LINK(SourceListSelected, weld::ComboBox&, void); 100 DECL_LINK(SourceEditModified, formula::RefEdit&, void); 101 void ToggleSource(); 102 void ToggleDestination(); 103 virtual void Close() override; 104 105 ScPivotParam maPivotParameters; 106 107 // UI 108 void SetupSource(); 109 void SetupDestination(); 110 void FillValuesToListBoxes(); 111 112 // Other 113 bool GetDestination(ScRange& aDestinationRange, bool& bToNewSheet); 114 115 public: 116 ScPivotLayoutDialog(SfxBindings* pSfxBindings, SfxChildWindow* pChildWindow, weld::Window* pParent, 117 ScViewData* pViewData, const ScDPObject* pPivotTableObject, bool bCreateNewPivotTable); 118 virtual ~ScPivotLayoutDialog() override; 119 120 virtual void SetReference(const ScRange& rReferenceRange, ScDocument* pDocument) override; 121 virtual void SetActive() override; 122 virtual bool IsRefInputMode() const override; 123 124 void ItemInserted(const ScItemValue* pItemValue, ScPivotLayoutTreeList::SvPivotTreeListType eType); 125 126 void UpdateSourceRange(); 127 128 void ApplyChanges(); 129 void ApplySaveData(ScDPSaveData& rSaveData); 130 void ApplyLabelData(const ScDPSaveData& rSaveData); 131 132 ScItemValue* GetItem(SCCOL nColumn); 133 bool IsDataElement(SCCOL nColumn); 134 135 ScDPLabelData& GetLabelData(SCCOL nColumn); GetLabelDataVector()136 ScDPLabelDataVector& GetLabelDataVector() { return maPivotParameters.maLabelArray;} 137 void PushDataFieldNames(std::vector<ScDPName>& rDataFieldNames); 138 }; 139 140 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 141 142 #endif 143