/* -*- 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 #include #include class EditTextObject; enum class OutlinerMode; enum class TextRotation; /** * This is the guts of OutlinerParaObject, refcounted and shared among * multiple instances of OutlinerParaObject. */ struct EDITENG_DLLPUBLIC OutlinerParaObjData { // data members std::unique_ptr mpEditTextObject; ParagraphDataVector maParagraphDataVector; bool mbIsEditDoc; // constructor OutlinerParaObjData( std::unique_ptr pEditTextObject, ParagraphDataVector&& rParagraphDataVector, bool bIsEditDoc ); OutlinerParaObjData( const OutlinerParaObjData& r ); OutlinerParaObjData( OutlinerParaObjData&& r ) = default; // assignment operator OutlinerParaObjData& operator=(const OutlinerParaObjData& rCandidate) = delete; // destructor ~OutlinerParaObjData(); bool operator==(const OutlinerParaObjData& rCandidate) const; // #i102062# bool isWrongListEqual(const OutlinerParaObjData& rCompare) const; }; class EDITENG_DLLPUBLIC OutlinerParaObject { friend class std::optional; ::o3tl::cow_wrapper< OutlinerParaObjData > mpImpl; OutlinerParaObject(std::nullopt_t) noexcept : mpImpl(std::nullopt) {} OutlinerParaObject( const OutlinerParaObject& other, std::nullopt_t ) noexcept : mpImpl(other.mpImpl, std::nullopt) {} public: // constructors/destructor OutlinerParaObject(std::unique_ptr, ParagraphDataVector&&, bool bIsEditDoc); OutlinerParaObject( std::unique_ptr ); OutlinerParaObject( const OutlinerParaObject&); OutlinerParaObject(OutlinerParaObject&&) noexcept; ~OutlinerParaObject(); // assignment operator OutlinerParaObject& operator=(const OutlinerParaObject& rCandidate); OutlinerParaObject& operator=(OutlinerParaObject&&) noexcept; // compare operator bool operator==(const OutlinerParaObject& rCandidate) const; bool operator!=(const OutlinerParaObject& rCandidate) const { return !operator==(rCandidate); } // #i102062# bool isWrongListEqual(const OutlinerParaObject& rCompare) const; // outliner mode access OutlinerMode GetOutlinerMode() const; void SetOutlinerMode(OutlinerMode nNew); // vertical access bool IsEffectivelyVertical() const; bool GetVertical() const; bool IsTopToBottom() const; void SetVertical(bool bNew); void SetRotation(TextRotation nRotation); TextRotation GetRotation() const; // data read access sal_Int32 Count() const; sal_Int16 GetDepth(sal_Int32 nPara) const; const EditTextObject& GetTextObject() const; const ParagraphData& GetParagraphData(sal_Int32 nIndex) const; // portion info support void ClearPortionInfo(); // StyleSheet support bool ChangeStyleSheets(std::u16string_view rOldName, SfxStyleFamily eOldFamily, const OUString& rNewName, SfxStyleFamily eNewFamily); void ChangeStyleSheetName(SfxStyleFamily eFamily, std::u16string_view rOldName, const OUString& rNewName); void SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewName, const SfxStyleFamily& rNewFamily); void dumpAsXml(xmlTextWriterPtr pWriter) const; }; namespace std { /** Specialise std::optional template for the case where we are wrapping a o3tl::cow_wrapper type, and we can make the pointer inside the cow_wrapper act as an empty value, and save ourselves some storage */ template<> class optional { public: optional() noexcept : maParaObject(std::nullopt) {} optional(std::nullopt_t) noexcept : maParaObject(std::nullopt) {} optional(const optional& other) : maParaObject(other.maParaObject, std::nullopt) {} optional(optional&& other) noexcept : maParaObject(std::move(other.maParaObject)) {} optional(OutlinerParaObject&& para) noexcept : maParaObject(std::move(para)) {} optional(const OutlinerParaObject& para) noexcept : maParaObject(para) {} template< class... Args > explicit optional( std::in_place_t, Args&&... args ) : maParaObject(std::forward(args)...) {} optional& operator=(optional const & other) { maParaObject = other.maParaObject; return *this; } optional& operator=(optional&& other) noexcept { maParaObject = std::move(other.maParaObject); return *this; } template< class... Args > void emplace(Args&&... args ) { maParaObject = OutlinerParaObject(std::forward(args)...); } bool has_value() const noexcept { return !maParaObject.mpImpl.empty(); } explicit operator bool() const noexcept { return !maParaObject.mpImpl.empty(); } void reset() { maParaObject.mpImpl.set_empty(); } OutlinerParaObject& value() { throwIfEmpty(); return maParaObject; } OutlinerParaObject& operator*() { throwIfEmpty(); return maParaObject; } const OutlinerParaObject& operator*() const { throwIfEmpty(); return maParaObject; } OutlinerParaObject* operator->() { throwIfEmpty(); return &maParaObject; } const OutlinerParaObject* operator->() const { throwIfEmpty(); return &maParaObject; } private: void throwIfEmpty() const { if (maParaObject.mpImpl.empty()) throw std::logic_error("empty std::optional"); } OutlinerParaObject maParaObject; }; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ distro/lhm/libreoffice-7-6+backports LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
path: root/scp2
AgeCommit message (Expand)Author
2020-12-17package Korean(ko-KR) dictionaries into installsetDaeHyun Sung
2020-11-07ScriptForge - Update build filesJean-Pierre Ledure
2020-09-17cli_ure: Disable .NET for Windows Arm64 buildJan-Marek Glogowski
2020-09-12Try fix multiple assignments of gidsMike Kaganski
2020-08-19Remove BuildVersion from installation set version ini filesStephan Bergmann
2020-08-10tdf#135579: Don't uninstall vc_redist: make it permanentMike Kaganski
2020-07-02Add Turkish (tr) dictionaryMuhammet Kara
2020-06-24add Central Kurdish (ckb) language packChristian Lohmaier
2020-05-13macOS: don't hardcode LibreOffice in SDK directory, use $PRODUCTNAMEChristian Lohmaier
2020-04-23Drop Macromedia Flash export filterGabor Kelemen
2020-04-04tdf#131786 Remove Arrow Galleryandreas kainz
2020-04-04tdf#131787 Remove Diagramm Galleryandreas kainz
2020-04-04tdf#131796 Remove Symbols Galleryandreas kainz
2020-04-04tdf#131782 Remove Text Shape Galleryandreas kainz
2020-04-04tdf#131792 Remove People galleryandreas kainz
2020-04-04tdf#131780 Remove Transportation galleryandreas kainz
2020-04-04tdf#131790 Remove Finance galleryandreas kainz
2020-04-04tdf#131789 Remove Environment galleryandreas kainz
2020-04-03tdf#131789 Remove Environment gallery will be available as extensionandreas kainz
2020-04-03Revert "tdf#131224 update bullets and numbering images"Heiko Tietze
2020-04-02tdf#131308 Gallery: Remove Computer Galleryandreas kainz
2020-03-29tdf#131224 update bullets and numbering imagesandreas kainz
2020-03-14Revert "Resolves tdf#99675: Add BPMN images to the gallery"Heiko Tietze
2020-03-12Resolves tdf#99675: Add BPMN images to the galleryandreas kainz
2020-02-28add Friulian (fur) language packChristian Lohmaier
2020-02-04tdf#117331 Merge jurt and unoil into ridlSamuel Mehrbrodt
2020-01-13Merge both x64 and x86 CRT merge modules into x64 MSIMike Kaganski
2020-01-12Make RunQuickstartAtFirstStart branding-dependent keyMike Kaganski
2020-01-11Use registry key to track installed state of gm_SharePointSupport_SubstMSOMike Kaganski
2020-01-09Register spsupp*.dll during installationMike Kaganski
2019-12-06tdf#126192 tdf#126030 (related) Package translations of ooxKelemen Gábor