Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/sw/inc/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 8 kB image not shown  

Quelle  fmtcol.hxx   Sprache: C

 
/* -*- 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 .
 */

#ifndef INCLUDED_SW_INC_FMTCOL_HXX
#define INCLUDED_SW_INC_FMTCOL_HXX

#include "swdllapi.h"
#include "format.hxx"
#include "hintids.hxx"
#include "paratr.hxx"
#include "deletelistener.hxx"
#include <rtl/ustring.hxx>
#include <tools/solar.h>

#include <vector>
#include <memory>

class SwAttrPool;
namespace sw{ class DocumentStylePoolManager; }

/// SwFormatColl is just an SwFormat subclass that defaults to m_bAutoFormat=false, expressing that
/// this set of formatting is a style, not direct formatting.
class SAL_DLLPUBLIC_RTTI SwFormatColl: public SwFormat
{
protected:
    SwFormatColl( SwAttrPool& rPool, const UIName &rFormatName,
                const WhichRangesContainer& pWhichRanges, SwFormatColl* pDerFrom,
                sal_uInt16 nFormatWhich )
          : SwFormat( rPool, rFormatName, pWhichRanges, pDerFrom, nFormatWhich )
    { SetAuto(false); }

private:
    SwFormatColl(const SwFormatColl & ) = delete;
    const SwFormatColl &operator=(const SwFormatColl &) = delete;
};

/// Represents the style of a paragraph.
class SW_DLLPUBLIC SwTextFormatColl
    : public SwFormatColl
    , public sw::FormatDropDefiner
{
    friend class SwDoc;
    friend class ::sw::DocumentStylePoolManager;

    SwTextFormatColl(const SwTextFormatColl & rRef) = delete;

    bool mbStayAssignedToListLevelOfOutlineStyle;

    bool mbAssignedToOutlineStyle;

    bool m_bInSwFntCache;

    SwTextFormatColl *mpNextTextFormatColl;

    SwCharFormat* mpLinkedCharFormat = nullptr;

protected:
    SwTextFormatColl( SwAttrPool& rPool, const UIName &rFormatCollName,
                    SwTextFormatColl* pDerFrom = nullptr,
                    sal_uInt16 nFormatWh = RES_TXTFMTCOLL )
        : SwFormatColl(rPool, rFormatCollName, aTextFormatCollSetRange, pDerFrom, nFormatWh)
        , mbStayAssignedToListLevelOfOutlineStyle(false)
        , mbAssignedToOutlineStyle(false)
        , m_bInSwFntCache(false)
    {
        mpNextTextFormatColl = this;
    }

    /// To get UL- / LR- / FontHeight-changes.
    virtual void SwClientNotify(const SwModify&, const SfxHint&) override;

public:
    virtual ~SwTextFormatColl();
    inline void SetNextTextFormatColl(SwTextFormatColl& rNext);
    SwTextFormatColl& GetNextTextFormatColl() const { return *mpNextTextFormatColl; }

    void SetLinkedCharFormat(SwCharFormat* pLink);

    const SwCharFormat* GetLinkedCharFormat() const;

    bool IsAtDocNodeSet() const;

    void SetAttrOutlineLevel( int );
    int  GetAttrOutlineLevel() const;

    // Return the list level of the Outline Style - the List Style for the
    // outline numbering -
    // to which the Paragraph Style is assigned.
    int  GetAssignedOutlineStyleLevel() const;

    bool IsAssignedToListLevelOfOutlineStyle() const
    {
        return mbAssignedToOutlineStyle;
    }

    // If a Paragraph Style is assigned to list level N of the Outline Style,
    // then its outline level - AttrOutlineLevel - is set to N+1
    void AssignToListLevelOfOutlineStyle(const int nAssignedListLevel);
    void DeleteAssignmentToListLevelOfOutlineStyle();

    /** Override to recognize changes on the <SwNumRuleItem> and register/unregister
     the paragragh style at the corresponding <SwNumRule> instance. */

    virtual bool SetFormatAttr( const SfxPoolItem& rAttr ) override;
    virtual bool SetFormatAttr( const SfxItemSet& rSet ) override;
    virtual bool ResetFormatAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 ) override;

    /// Override <ResetAllFormatAttr()> to stay assigned to list level of outline style.
    virtual sal_uInt16 ResetAllFormatAttr() override;

    bool StayAssignedToListLevelOfOutlineStyle() const
    {
        return mbStayAssignedToListLevelOfOutlineStyle;
    }

    ::sw::ListLevelIndents AreListLevelIndentsApplicable() const;
    bool AreListLevelIndentsApplicableImpl(sal_uInt16 nWhich) const;

    void dumpAsXml(xmlTextWriterPtr pWriter) const override;
    virtual void FormatDropNotify(const SwFormatDrop& rDrop) override
    {
        if(HasWriterListeners() && !IsModifyLocked())
            CallSwClientNotify(sw::LegacyModifyHint(&rDrop, &rDrop));
    };
    bool IsInSwFntCache() const { return m_bInSwFntCache; };
    void SetInSwFntCache() { m_bInSwFntCache = true; };
    virtual void InvalidateInSwFntCache(sal_uInt16 nWhich) override
    {
        if(isCHRATR(nWhich))
        {
            m_bInSwFntCache = false;
        }
    };
    virtual void InvalidateInSwFntCache() override
    {
        m_bInSwFntCache = false;
    }
};

class SwGrfFormatColl final : public SwFormatColl
{
    friend class SwDoc;

    SwGrfFormatColl( SwAttrPool& rPool, const UIName &rFormatCollName,
                    SwGrfFormatColl* pDerFrom = nullptr )
        : SwFormatColl( rPool, rFormatCollName, aGrfFormatCollSetRange,
                    pDerFrom, RES_GRFFMTCOLL )
    {}
};

// FEATURE::CONDCOLL
/// Conditional styles.
enum class Master_CollCondition
{
    NONE,
    PARA_IN_LIST,
    PARA_IN_OUTLINE,
    PARA_IN_FRAME,
    PARA_IN_TABLEHEAD,
    PARA_IN_TABLEBODY,
    PARA_IN_SECTION,
    PARA_IN_FOOTNOTE,
    PARA_IN_FOOTER,
    PARA_IN_HEADER,
    PARA_IN_ENDNOTE
};

class SW_DLLPUBLIC SwCollCondition final
{
    Master_CollCondition m_nCondition;
    sal_uInt32 m_nSubCondition;
    sw::WeakBroadcastingPtr<SwTextFormatColl> m_pCollection;

public:

    SwCollCondition( SwTextFormatColl* pColl, Master_CollCondition nMasterCond,
                    sal_uInt32 nSubCond );
    ~SwCollCondition();

    /// @@@ public copy ctor, but no copy assignment?
    SwCollCondition( const SwCollCondition& rCpy );
private:
    /// @@@ public copy ctor, but no copy assignment?
    SwCollCondition & operator= (const SwCollCondition &) = delete;
public:

    bool operator==( const SwCollCondition& rCmp ) const;

    Master_CollCondition GetCondition() const      { return m_nCondition; }
    sal_uInt32 GetSubCondition() const   { return m_nSubCondition; }

    void SetCondition( Master_CollCondition nCond, sal_uInt32 nSubCond );
    SwTextFormatColl* GetTextFormatColl() const { return const_cast<SwTextFormatColl*>(m_pCollection.operator->()); }
    void RegisterToFormat( SwTextFormatColl& );
};

using SwFormatCollConditions = std::vector<std::unique_ptr<SwCollCondition>>;

class SW_DLLPUBLIC SwConditionTextFormatColl final : public SwTextFormatColl
{
    friend class SwDoc;
    friend class ::sw::DocumentStylePoolManager;

    SwFormatCollConditions m_CondColls;

    SwConditionTextFormatColl( SwAttrPool& rPool, const UIName &rFormatCollName,
                            SwTextFormatColl* pDerFrom )
        : SwTextFormatColl( rPool, rFormatCollName, pDerFrom, RES_CONDTXTFMTCOLL )
    {}

public:

    virtual ~SwConditionTextFormatColl() override;

    const SwCollCondition* HasCondition( const SwCollCondition& rCond ) const;
    const SwFormatCollConditions& GetCondColls() const { return m_CondColls; }
    void InsertCondition( const SwCollCondition& rCond );
    void RemoveCondition( const SwCollCondition& rCond );

    void SetConditions( const SwFormatCollConditions& );
};

// FEATURE::CONDCOLL
/// Inline implementations.
inline void SwTextFormatColl::SetNextTextFormatColl( SwTextFormatColl& rNext )
{
    mpNextTextFormatColl = &rNext;
}
#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=80 H=96 G=88

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.