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_STATISTICSINPUTOUTPUTDIALOG_HXX 12 #define INCLUDED_SC_SOURCE_UI_INC_STATISTICSINPUTOUTPUTDIALOG_HXX 13 14 #include <address.hxx> 15 #include "anyrefdg.hxx" 16 #include "viewdata.hxx" 17 18 class ScStatisticsInputOutputDialog : public ScAnyRefDlgController 19 { 20 public: 21 enum GroupedBy { 22 BY_COLUMN, 23 BY_ROW 24 }; 25 26 ScStatisticsInputOutputDialog( 27 SfxBindings* pB, SfxChildWindow* pCW, 28 weld::Window* pParent, ScViewData* pViewData, 29 const OUString& rUIXMLDescription, 30 const OString& rID); 31 32 virtual ~ScStatisticsInputOutputDialog() override; 33 34 virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ) override; 35 virtual void SetActive() override; 36 37 protected: 38 void CalculateInputAndWriteToOutput(); 39 40 virtual ScRange ApplyOutput(ScDocShell* pDocShell) = 0; 41 virtual const char* GetUndoNameId() = 0; 42 virtual bool InputRangesValid(); 43 void ValidateDialogInput(); 44 45 // Widgets 46 std::unique_ptr<weld::Label> mxInputRangeLabel; 47 std::unique_ptr<formula::RefEdit> mxInputRangeEdit; 48 std::unique_ptr<formula::RefButton> mxInputRangeButton; 49 50 std::unique_ptr<weld::Label> mxOutputRangeLabel; 51 std::unique_ptr<formula::RefEdit> mxOutputRangeEdit; 52 std::unique_ptr<formula::RefButton> mxOutputRangeButton; 53 54 std::unique_ptr<weld::RadioButton> mxGroupByColumnsRadio; 55 std::unique_ptr<weld::RadioButton> mxGroupByRowsRadio; 56 57 // Data 58 ScViewData* const mViewData; 59 ScDocument* const mDocument; 60 61 ScRange mInputRange; 62 ScAddress::Details const mAddressDetails; 63 ScAddress mOutputAddress; 64 GroupedBy mGroupedBy; 65 66 static ScRangeList MakeColumnRangeList(SCTAB aTab, ScAddress const & aStart, ScAddress const & aEnd); 67 static ScRangeList MakeRowRangeList(SCTAB aTab, ScAddress const & aStart, ScAddress const & aEnd); 68 69 private: 70 // Widgets 71 std::unique_ptr<weld::Button> mxButtonOk; 72 73 formula::RefEdit* mpActiveEdit; 74 ScAddress const mCurrentAddress; 75 bool mDialogLostFocus; 76 77 void Init(); 78 void GetRangeFromSelection(); 79 80 DECL_LINK( GroupByChanged, weld::ToggleButton&, void ); 81 DECL_LINK( OkClicked, weld::Button&, void ); 82 DECL_LINK( GetEditFocusHandler, formula::RefEdit&, void ); 83 DECL_LINK( GetButtonFocusHandler, formula::RefButton&, void ); 84 DECL_LINK( LoseEditFocusHandler, formula::RefEdit&, void ); 85 DECL_LINK( LoseButtonFocusHandler, formula::RefButton&, void ); 86 DECL_LINK( RefInputModifyHandler, formula::RefEdit&, void ); 87 }; 88 89 90 #endif 91 92 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 93