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