1
0
Fork 0
libreoffice/sw/source/uibase/inc/content.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

230 lines
8.2 KiB
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_SOURCE_UIBASE_INC_CONTENT_HXX
#define INCLUDED_SW_SOURCE_UIBASE_INC_CONTENT_HXX
#include <memory>
#include "swcont.hxx"
#include <ndarr.hxx>
#include <tools/long.hxx>
#include <utility>
class SwWrtShell;
class SwContentArr;
class SwContentType;
class SwFormatField;
class SwTextINetFormat;
class SwTOXBase;
class SwRangeRedline;
class SwTextFootnote;
// helper classes
class SwOutlineContent final : public SwContent
{
SwOutlineNodes::size_type m_nOutlinePos;
sal_uInt8 m_nOutlineLevel;
bool m_bIsMoveable;
public:
SwOutlineContent( const SwContentType* pCnt,
const OUString& rName,
SwOutlineNodes::size_type nArrPos,
sal_uInt8 nLevel,
bool bMove,
double nYPos) :
SwContent(pCnt, rName, nYPos),
m_nOutlinePos(nArrPos), m_nOutlineLevel(nLevel), m_bIsMoveable(bMove) {}
SwOutlineNodes::size_type GetOutlinePos() const {return m_nOutlinePos;}
sal_uInt8 GetOutlineLevel() const {return m_nOutlineLevel;}
bool IsMoveable() const {return m_bIsMoveable;};
};
class SwRegionContent final : public SwContent
{
sal_uInt8 m_nRegionLevel;
const SwSectionFormat* m_pSectionFormat;
public:
SwRegionContent( const SwContentType* pCnt,
const OUString& rName,
sal_uInt8 nLevel,
tools::Long nYPos,
const SwSectionFormat* pSectionFormat) :
SwContent(pCnt, rName, nYPos),
m_nRegionLevel(nLevel), m_pSectionFormat(pSectionFormat){}
sal_uInt8 GetRegionLevel() const {return m_nRegionLevel;}
const SwSectionFormat* GetSectionFormat() const {return m_pSectionFormat;}
bool IsProtect() const override;
};
class SwURLFieldContent final : public SwContent
{
OUString m_sURL;
const SwTextINetFormat* m_pINetAttr;
public:
SwURLFieldContent( const SwContentType* pCnt,
const OUString& rName,
OUString aURL,
const SwTextINetFormat* pAttr,
tools::Long nYPos )
: SwContent( pCnt, rName, nYPos ), m_sURL(std::move( aURL )), m_pINetAttr( pAttr )
{}
virtual bool IsProtect() const override;
const OUString& GetURL() const { return m_sURL; }
const SwTextINetFormat* GetINetAttr() const { return m_pINetAttr; }
};
class SwTextFieldContent final : public SwContent
{
const SwFormatField* m_pFormatField;
public:
SwTextFieldContent(const SwContentType* pCnt,
const OUString& rName,
const SwFormatField* pFormatField,
tools::Long nYPos)
: SwContent(pCnt, rName, nYPos),
m_pFormatField(pFormatField)
{}
const SwFormatField* GetFormatField() const {return m_pFormatField;}
virtual bool IsProtect() const override;
};
class SwTextFootnoteContent final : public SwContent
{
const SwTextFootnote* m_pTextFootnote;
public:
SwTextFootnoteContent(const SwContentType* pCnt,
const OUString& rName,
const SwTextFootnote* pTextFootnote,
tools::Long nYPos)
: SwContent(pCnt, rName, nYPos),
m_pTextFootnote(pTextFootnote)
{}
const SwTextFootnote* GetTextFootnote() const {return m_pTextFootnote;}
};
class SwPostItContent final : public SwContent
{
const SwFormatField* m_pField;
public:
SwPostItContent( const SwContentType* pCnt,
const OUString& rName,
const SwFormatField* pFormatField,
tools::Long nYPos )
: SwContent(pCnt, rName, nYPos)
, m_pField(pFormatField)
{}
const SwFormatField* GetPostIt() const { return m_pField; }
virtual bool IsProtect() const override;
};
class SwGraphicContent final : public SwContent
{
OUString m_sLink;
public:
SwGraphicContent(const SwContentType* pCnt, const OUString& rName, OUString aLink, tools::Long nYPos)
: SwContent( pCnt, rName, nYPos ), m_sLink(std::move( aLink ))
{}
virtual ~SwGraphicContent() override;
const OUString& GetLink() const {return m_sLink;}
};
class SwTOXBaseContent final : public SwContent
{
const SwTOXBase* m_pBase;
public:
SwTOXBaseContent(const SwContentType* pCnt, const OUString& rName, tools::Long nYPos, const SwTOXBase& rBase)
: SwContent( pCnt, rName, nYPos ), m_pBase(&rBase)
{}
virtual ~SwTOXBaseContent() override;
const SwTOXBase* GetTOXBase() const {return m_pBase;}
};
/**
* Content type, knows it's contents and the WrtShell.
*
* The class ContentType contains information to one type of content.
* MemberArray is only populated if the content is requested by
* GetMember. It is reloaded after Invalidate() only if the content
* should be read again.
*/
class SwContentType final : public SwTypeNumber
{
SwWrtShell* m_pWrtShell;
std::unique_ptr<SwContentArr>
m_pMember; // array for content
OUString m_sContentTypeName; // name of content type
OUString m_sSingleContentTypeName; // name of content type, singular
OUString m_sTypeToken; // attachment for URL
size_t m_nMemberCount; // content count
ContentTypeId m_nContentType; // content type's Id
sal_uInt8 m_nOutlineLevel;
bool m_bDataValid : 1;
bool m_bEdit: 1; // can this type be edited?
bool m_bDelete: 1; // can this type be deleted?
bool m_bRenamable = false;
bool m_bAlphabeticSort = false;
static OUString RemoveNewline(const OUString&);
public:
SwContentType(SwWrtShell* pParent, ContentTypeId nType, sal_uInt8 nLevel );
virtual ~SwContentType() override;
/** Fill the List of contents */
void FillMemberList(bool* pbContentChanged = nullptr);
size_t GetMemberCount() const
{return m_nMemberCount;};
ContentTypeId GetType() const {return m_nContentType;}
/** Deliver content, for that if necessary fill the list */
const SwContent* GetMember(size_t nIndex);
const OUString& GetName() const {return m_sContentTypeName;}
const OUString& GetSingleName() const {return m_sSingleContentTypeName;}
const OUString& GetTypeToken() const{return m_sTypeToken;}
void SetOutlineLevel(sal_uInt8 nNew)
{
m_nOutlineLevel = nNew;
Invalidate();
}
bool IsAlphabeticSort() const {return m_bAlphabeticSort;}
void SetAlphabeticSort(bool bAlphabetic) {m_bAlphabeticSort = bAlphabetic;}
void Invalidate(); // only nMemberCount is read again
bool IsEditable() const {return m_bEdit;}
bool IsDeletable() const {return m_bDelete;}
bool IsRenamable() const {return m_bRenamable;}
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */