From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- sc/source/ui/inc/pvfundlg.hxx | 216 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 sc/source/ui/inc/pvfundlg.hxx (limited to 'sc/source/ui/inc/pvfundlg.hxx') diff --git a/sc/source/ui/inc/pvfundlg.hxx b/sc/source/ui/inc/pvfundlg.hxx new file mode 100644 index 000000000..17a20526b --- /dev/null +++ b/sc/source/ui/inc/pvfundlg.hxx @@ -0,0 +1,216 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include +#include + +#include +#include + +#include +#include + +class ScDPObject; + +class ScDPFunctionListBox +{ +public: + ScDPFunctionListBox(std::unique_ptr xControl); + + void SetSelection( PivotFunc nFuncMask ); + PivotFunc GetSelection() const; + + void set_sensitive(bool sensitive) { m_xControl->set_sensitive(sensitive); } + void set_selection_mode(SelectionMode eMode) { m_xControl->set_selection_mode(eMode); } + void connect_row_activated(const Link& rLink) { m_xControl->connect_row_activated(rLink); } + int get_height_rows(int nRows) const { return m_xControl->get_height_rows(nRows); } + void set_size_request(int nWidth, int nHeight) { m_xControl->set_size_request(nWidth, nHeight); } + +private: + std::unique_ptr m_xControl; + void FillFunctionNames(); +}; + +class ScDPFunctionDlg : public weld::GenericDialogController +{ + typedef std::unordered_map< OUString, OUString > NameMapType; +public: + explicit ScDPFunctionDlg(weld::Widget* pParent, const ScDPLabelDataVector& rLabelVec, + const ScDPLabelData& rLabelData, const ScPivotFuncData& rFuncData ); + virtual ~ScDPFunctionDlg() override; + PivotFunc GetFuncMask() const; + css::sheet::DataPilotFieldReference GetFieldRef() const; + +private: + void Init( const ScDPLabelData& rLabelData, const ScPivotFuncData& rFuncData ); + + const OUString& GetBaseFieldName(const OUString& rLayoutName) const; + const OUString& GetBaseItemName(const OUString& rLayoutName) const; + + /** Searches for a listbox entry, starts search at specified position. */ + sal_Int32 FindBaseItemPos( std::u16string_view rEntry, sal_Int32 nStartPos ) const; + + DECL_LINK(SelectHdl, weld::ComboBox&, void); + DECL_LINK(DblClickHdl, weld::TreeView&, bool); + DECL_LINK(ButtonClicked, weld::Button&, void); + +private: + std::unique_ptr mxLbFunc; + std::unique_ptr mxFtName; + std::unique_ptr mxLbType; + std::unique_ptr mxFtBaseField; + std::unique_ptr mxLbBaseField; + std::unique_ptr mxFtBaseItem; + std::unique_ptr mxLbBaseItem; + std::unique_ptr mxBtnOk; + std::unique_ptr mxBtnCancel; + std::unique_ptr mxExpander; + + NameMapType maBaseFieldNameMap; // cache for base field display -> original name. + NameMapType maBaseItemNameMap; // cache for base item display -> original name. + + const ScDPLabelDataVector& mrLabelVec; /// Data of all labels. + bool mbEmptyItem; /// true = Empty base item in listbox. +}; + +class ScDPSubtotalOptDlg; + +class ScDPSubtotalDlg : public weld::GenericDialogController +{ +public: + explicit ScDPSubtotalDlg(weld::Widget* pParent, ScDPObject& rDPObj, + const ScDPLabelData& rLabelData, const ScPivotFuncData& rFuncData, + const ScDPNameVec& rDataFields, bool bEnableLayout); + virtual ~ScDPSubtotalDlg() override; + PivotFunc GetFuncMask() const; + + void FillLabelData( ScDPLabelData& rLabelData ) const; + +private: + void Init( const ScDPLabelData& rLabelData, const ScPivotFuncData& rFuncData ); + void CloseSubdialog(); + + DECL_LINK( DblClickHdl, weld::TreeView&, bool ); + DECL_LINK( RadioClickHdl, weld::Toggleable&, void ); + DECL_LINK( ClickHdl, weld::Button&, void ); + DECL_LINK( ButtonClicked, weld::Button&, void ); + +private: + ScDPObject& mrDPObj; /// The DataPilot object (for member names). + const ScDPNameVec& mrDataFields; /// The list of all data field names. + + ScDPLabelData maLabelData; /// Cache for sub dialog. + bool mbEnableLayout; /// true = Enable Layout mode controls. + + std::unique_ptr mxRbNone; + std::unique_ptr mxRbAuto; + std::unique_ptr mxRbUser; + std::unique_ptr mxLbFunc; + std::unique_ptr mxFtName; + std::unique_ptr mxCbShowAll; + std::unique_ptr mxBtnOk; + std::unique_ptr mxBtnCancel; + std::unique_ptr mxBtnOptions; + + std::shared_ptr mxOptionsDlg; +}; + +class ScDPSubtotalOptDlg : public weld::GenericDialogController +{ +public: + explicit ScDPSubtotalOptDlg(weld::Window* pParent, ScDPObject& rDPObj, + const ScDPLabelData& rLabelData, const ScDPNameVec& rDataFields, + bool bEnableLayout ); + virtual ~ScDPSubtotalOptDlg() override; + void FillLabelData( ScDPLabelData& rLabelData ) const; + +private: + void Init( const ScDPNameVec& rDataFields, bool bEnableLayout ); + void InitHideListBox(); + + ScDPName GetFieldName(const OUString& rLayoutName) const; + + /** Searches for a listbox entry, starts search at specified position. */ + sal_Int32 FindListBoxEntry( const weld::ComboBox& rLBox, std::u16string_view rEntry, sal_Int32 nStartPos ) const; + + DECL_LINK( RadioClickHdl, weld::Toggleable&, void ); + DECL_LINK( CheckHdl, weld::Toggleable&, void ); + DECL_LINK( SelectHdl, weld::ComboBox&, void ); + DECL_LINK( ButtonClicked, weld::Button&, void ); + +private: + std::unique_ptr m_xLbSortBy; + std::unique_ptr m_xRbSortAsc; + std::unique_ptr m_xRbSortDesc; + std::unique_ptr m_xRbSortMan; + std::unique_ptr m_xLayoutFrame; + std::unique_ptr m_xLbLayout; + std::unique_ptr m_xCbLayoutEmpty; + std::unique_ptr m_xCbRepeatItemLabels; + std::unique_ptr m_xCbShow; + std::unique_ptr m_xNfShow; + std::unique_ptr m_xFtShow; + std::unique_ptr m_xFtShowFrom; + std::unique_ptr m_xLbShowFrom; + std::unique_ptr m_xFtShowUsing; + std::unique_ptr m_xLbShowUsing; + std::unique_ptr m_xHideFrame; + std::unique_ptr m_xLbHide; + std::unique_ptr m_xFtHierarchy; + std::unique_ptr m_xLbHierarchy; + std::unique_ptr m_xBtnOk; + std::unique_ptr m_xBtnCancel; + + ScDPObject& mrDPObj; /// The DataPilot object (for member names). + ScDPLabelData maLabelData; /// Cache for members data. + + typedef std::unordered_map NameMapType; + NameMapType maDataFieldNameMap; /// Cache for displayed name to field name mapping. +}; + +class ScDPShowDetailDlg : public weld::GenericDialogController +{ +public: + explicit ScDPShowDetailDlg(weld::Window* pParent, ScDPObject& rDPObj, + css::sheet::DataPilotFieldOrientation nOrient); + virtual ~ScDPShowDetailDlg() override; + + virtual short run() override; + + /** + * @return String internal name of the selected field. Note that this may + * be different from the name displayed in the dialog if the field + * has a layout name. + */ + OUString GetDimensionName() const; + +private: + DECL_LINK(DblClickHdl, weld::TreeView&, bool); + +private: + typedef std::unordered_map DimNameIndexMap; + DimNameIndexMap maNameIndexMap; + ScDPObject& mrDPObj; + + std::unique_ptr mxLbDims; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3