2010-10-27 13:11:31 +01:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
re-base on ALv2 code. Includes (at least) relevant parts of:
linecap: Reintegrating finished LineCap feature
Patch contributed by Regina Henschel
http://svn.apache.org/viewvc?view=revision&revision=1232507
Patches contributed by Sven Jacobi
impress212: #i81610# fixed animation export
http://svn.apache.org/viewvc?view=revision&revision=1167620
impress212: drawinglayer gbuild environment changes
http://svn.apache.org/viewvc?view=revision&revision=1167627
http://svn.apache.org/viewvc?view=revision&revision=1167628
impress212: DffPropSet -> minor code improvements, removing table
http://svn.apache.org/viewvc?view=revision&revision=1167634
impress212: #158494# fixed excel import (text rotation)
http://svn.apache.org/viewvc?view=revision&revision=1167638
Patches contributed by Armin Le Grand
Svg: Reintegrated Svg replacement from /branches/alg/svgreplavement
http://svn.apache.org/viewvc?view=revision&revision=1220836
#118728# changed indentifying definitions for Svg file detection
http://svn.apache.org/viewvc?view=revision&revision=1229961
#118838# LineGeometry creation for complicated cases optimized to
create single Polygons
http://svn.apache.org/viewvc?view=revision&revision=1236232
#119176# corrected file type detection for SVG for svg files
without xml header
http://svn.apache.org/viewvc?view=revision&revision=1309445
#118728# Extended Svg file detection
http://svn.apache.org/viewvc?view=revision&revision=1230531
#118529# solve break converters and convert commands for OLEs and images
http://svn.apache.org/viewvc?view=revision&revision=1186168
svg: added WaE changes from branch svgreplacement to trunc
http://svn.apache.org/viewvc?view=revision&revision=1222974
svg: corrected missing member initialization
http://svn.apache.org/viewvc?view=revision&revision=1226134
fix for #118525#: Using primitives for chart sub-geometry visualisation
http://svn.apache.org/viewvc?view=revision&revision=1226879
#118898# Adapted ImpGraphic::ImplGetBitmap to correctly convert
metafiles to bitmapEx ...
http://svn.apache.org/viewvc?view=revision&revision=1293316
fix for #118525#: removed no longer used variable maOriginalMapMode, one
more exception eliminated
http://svn.apache.org/viewvc?view=revision&revision=1227097
#16758# Added buffering to the VDev usages of the VclProcessor2D derivates...
http://svn.apache.org/viewvc?view=revision&revision=1229521
#116758# Secured VDev buffer device to Vcl deinit
http://svn.apache.org/viewvc?view=revision&revision=1230574
#116758# added remembering allocated VDevs for VDevBuffer to be able to also
delete these when vcl goes down; it should never happen, but You never know
http://svn.apache.org/viewvc?view=revision&revision=1230927
#118730# Changed SvgClipPathNode to use MaskPrimitive2D for primitive
representation instead of TransparencePrimitive2D
http://svn.apache.org/viewvc?view=revision&revision=1231198
#118822# secured 3D geometry creation (slices) by subdividing the 2D
source polyPolygon early
http://svn.apache.org/viewvc?view=revision&revision=1234749
#118829# enhanced Svg gradient quality, obstacles avoided
http://svn.apache.org/viewvc?view=revision&revision=1235361
#118834# Unified usage of TextBreakupHelper as single tooling class
for i18n text primitive breakup
http://svn.apache.org/viewvc?view=revision&revision=1236110
#118853# added square pixel size limit to conversion of
TransparencePrimitive2D to Metafile action
http://svn.apache.org/viewvc?view=revision&revision=1237656
#118824# coreccted mirroring and boundrect when the graphicmanager
is used for bitmap output
http://svn.apache.org/viewvc?view=revision&revision=1240097
#115092# Corrected VclProcessor2D::RenderPolygonStrokePrimitive2D for
various optimization scenarios
http://svn.apache.org/viewvc?view=revision&revision=1241434
#118783# Corrected errors in ID strings, corrected Svg line/fill export,
corrected polygon close state
http://svn.apache.org/viewvc?view=revision&revision=1232006
#118796# corrected null-pointer usage in SVG text exporter
http://svn.apache.org/viewvc?view=revision&revision=1240262
#118729# Use GraphicStreamUrl and GraphicUrl to allow multi image
import with linked graphics, too
http://svn.apache.org/viewvc?view=revision&revision=1229962
#118898# corrected error in GDIMetaFile::GetBoundRect in handling
MetaFloatTransparentAction
http://svn.apache.org/viewvc?view=revision&revision=1293349
#118855# Corrected handling of possibly created empty clipRegions
after PolyPolygon clipping
http://svn.apache.org/viewvc?view=revision&revision=1237725
#115962# Better (but not yet optimal, see comments in task) handling
of MetaFloatTransparentAction in PDF export
http://svn.apache.org/viewvc?view=revision&revision=1241078
IP clearance: #118466# This patch removes librsvg, libcroco, libgsf, ...
http://svn.apache.org/viewvc?view=revision&revision=1200879
118779# Added svg content streaming in/out to ImpGraphic stream operators
http://svn.apache.org/viewvc?view=revision&revision=1231908
linecap: correctons for WaE and mac drawing
http://svn.apache.org/viewvc?view=revision&revision=1232793
svg: uses current system Dpi for Svg replacement image creation
http://svn.apache.org/viewvc?view=revision&revision=1233948
Patches contributed by Mathias Bauer (and others)
gnumake4 work variously
http://svn.apache.org/viewvc?view=revision&revision=1394326
http://svn.apache.org/viewvc?view=revision&revision=1396797
http://svn.apache.org/viewvc?view=revision&revision=1397315
http://svn.apache.org/viewvc?view=revision&revision=1394326
Remove duplicate header includes.
cws mba34issues01: #i117720#: convert assertion into warning
http://svn.apache.org/viewvc?view=revision&revision=1172352
118485 - Styles for OLEs are not saved. Submitted by Armin Le Grand.
http://svn.apache.org/viewvc?view=revision&revision=1182166
cws mba34issues01: #i117714#: remove assertion
http://svn.apache.org/viewvc?view=revision&revision=1172357
Patch contributed by Jurgen Schmidt
add some additional checks to ensure proper reading operations
http://svn.apache.org/viewvc?view=revision&revision=1209022
mostly prefer our stream / bounds checking work.
Patches contributed by Herbert Duerr
#i118816# add clarifying comment regarding Font::*Color*() methods
http://svn.apache.org/viewvc?view=revision&revision=1233833
extend macro->string handling for empty strings
http://svn.apache.org/viewvc?view=revision&revision=1175801
avoid magic constants for SALCOLOR_NONE
http://svn.apache.org/viewvc?view=revision&revision=1177543
initialize slant properly in ImplFontMetricData constructor (author=iorsh)
http://svn.apache.org/viewvc?view=revision&revision=1177551
#i118675# make check for extension updates more stable
http://svn.apache.org/viewvc?view=revision&revision=1214797
#a118617# remove VBasicEventListener.dll binary
There are no known users depending on its CLSID
http://svn.apache.org/viewvc?view=revision&revision=1203697
Patches contributed by Ariel Constenla-Haile
Fix build breaker on Linux/gcc
http://svn.apache.org/viewvc?view=revision&revision=1221104
Fix crash when trying to instantiate css.graphic.GraphicRasterizer_RSVG
http://svn.apache.org/viewvc?view=revision&revision=1215559
Patches contributed by Oliver-Rainer Wittmann
sw34bf06: #i117962# - method <SwFlyFrm::IsPaint(..)> - consider
instances of <SwFlyDrawObj>
http://svn.apache.org/viewvc?view=revision&revision=1172120
sw34bf06: #i117783# - Writer's implementation of XPagePrintable -
apply print settings to new printing routines
http://svn.apache.org/viewvc?view=revision&revision=1172115
gnumake4 work variously from Hans-Joachim Lankenau
http://svn.apache.org/viewvc?view=revision&revision=1397315
http://svn.apache.org/viewvc?view=revision&revision=1396797
http://svn.apache.org/viewvc?view=revision&revision=1396782
http://svn.apache.org/viewvc?view=revision&revision=1394707
plus some amount of re-splitting of legacy headers.
Patch contributed by Pavel Janik
WaE: Remove unused variables.
http://svn.apache.org/viewvc?view=revision&revision=1230697
Patches contributed by Takashi Ono
mingwport35: i#117795: MinGW port fix for vcl2gnumake
http://svn.apache.org/viewvc?view=revision&revision=1172091
mingwport35: i#117795: MinGW port fix for vcl2gnumake
http://svn.apache.org/viewvc?view=revision&revision=1172091
Patch contributed by Christian Lippka
impress212: #i98044# re enable Text menu for outline and title shapes
http://svn.apache.org/viewvc?view=revision&revision=1167639
Patch contributed by Andre Fischer
118674: Made category B code optional and disabled by default.
http://svn.apache.org/viewvc?view=revision&revision=1215131
118881: Ignore empty paragraphs after bullets.
http://svn.apache.org/viewvc?view=revision&revision=1296205
Patches contributed by Philipp Lohmann
ooo340fixes: #i117780# use rtl allocator
http://svn.apache.org/viewvc?view=revision&revision=1172087
ooo34gsl02: #i117807# fix an off by one error (index actually
inside the pfb section header)
http://svn.apache.org/viewvc?view=revision&revision=1167576
various cleanups, related compilation fixes, warning cleanups, re-working
of obsolete stl template pieces to use boost instead, changed string
classes, re-adapt KDE about data, about dialog, fixing warnings,
and other fixes & improvements.
Disable svg import / render for about/ branding code-paths for now.
Restore full icon theme set.
Remove OS/2 conditionals and sources.
Remove conflicting gtk/full-screen monitors support.
Retain existing svg rasterizer files - temporarily disabled.
Standardize stringificaiton and fixup dllpostfix issues.
Rename SvgGradientHelper::== to equalTo to avoid overloading issues.
Use the flat GdiPlus API for LineCaps calls.
2012-10-09 12:22:23 +01:00
|
|
|
/*
|
|
|
|
* 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 .
|
|
|
|
*/
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-10-16 17:22:21 +02:00
|
|
|
#ifndef INCLUDED_EDITENG_INC_EDITDOC_HXX
|
|
|
|
#define INCLUDED_EDITENG_INC_EDITDOC_HXX
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-04-11 21:27:34 -04:00
|
|
|
#include "editattr.hxx"
|
|
|
|
#include "edtspell.hxx"
|
2017-06-16 14:13:33 +01:00
|
|
|
#include "eerdll2.hxx"
|
2010-01-06 19:26:54 +01:00
|
|
|
#include <editeng/svxfont.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/itemset.hxx>
|
|
|
|
#include <svl/style.hxx>
|
|
|
|
#include <svl/itempool.hxx>
|
2015-04-15 09:36:39 +02:00
|
|
|
#include <svl/languageoptions.hxx>
|
2013-10-22 09:20:52 +01:00
|
|
|
#include <tools/lineend.hxx>
|
2016-11-23 10:41:39 +02:00
|
|
|
#include <o3tl/typed_flags_set.hxx>
|
2010-09-23 07:11:42 +02:00
|
|
|
|
2015-09-17 17:10:47 +01:00
|
|
|
#include <memory>
|
|
|
|
#include <vector>
|
2012-03-29 01:43:30 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class ImpEditEngine;
|
|
|
|
class SvxTabStop;
|
2019-11-26 18:37:38 +01:00
|
|
|
enum class TextRotation;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
#define CHARPOSGROW 16
|
|
|
|
#define DEFTAB 720
|
|
|
|
|
2015-04-15 09:36:39 +02:00
|
|
|
void CreateFont( SvxFont& rFont, const SfxItemSet& rSet, bool bSearchInParent = true, SvtScriptType nScriptType = SvtScriptType::NONE );
|
|
|
|
sal_uInt16 GetScriptItemId( sal_uInt16 nItemId, SvtScriptType nScriptType );
|
2014-04-09 11:03:42 +02:00
|
|
|
bool IsScriptItemValid( sal_uInt16 nItemId, short nScriptType );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
EditCharAttrib* MakeCharAttrib( SfxItemPool& rPool, const SfxPoolItem& rAttr, sal_Int32 nS, sal_Int32 nE );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
class ContentNode;
|
|
|
|
class EditDoc;
|
|
|
|
|
|
|
|
struct EPaM
|
|
|
|
{
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 nPara;
|
2013-12-28 13:37:26 +01:00
|
|
|
sal_Int32 nIndex;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-12-28 22:18:21 +01:00
|
|
|
EPaM() : nPara(0), nIndex(0) {}
|
|
|
|
EPaM( sal_Int32 nP, sal_Int32 nI ) : nPara(nP), nIndex(nI) {}
|
|
|
|
EPaM( const EPaM& r) : nPara(r.nPara), nIndex(r.nIndex) {}
|
2000-09-18 16:07:07 +00:00
|
|
|
EPaM& operator = ( const EPaM& r ) { nPara = r.nPara; nIndex = r.nIndex; return *this; }
|
2014-04-09 11:03:42 +02:00
|
|
|
inline bool operator == ( const EPaM& r ) const;
|
|
|
|
inline bool operator < ( const EPaM& r ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
inline bool EPaM::operator < ( const EPaM& r ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2015-04-24 12:25:45 +02:00
|
|
|
return ( nPara < r.nPara ) || ( ( nPara == r.nPara ) && nIndex < r.nIndex );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
inline bool EPaM::operator == ( const EPaM& r ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2015-04-24 12:25:45 +02:00
|
|
|
return ( nPara == r.nPara ) && ( nIndex == r.nIndex );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2000-11-02 14:25:36 +00:00
|
|
|
struct ScriptTypePosInfo
|
|
|
|
{
|
|
|
|
short nScriptType;
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 nStartPos;
|
|
|
|
sal_Int32 nEndPos;
|
2000-11-02 14:25:36 +00:00
|
|
|
|
2016-04-06 12:13:25 +02:00
|
|
|
ScriptTypePosInfo( short Type, sal_Int32 Start, sal_Int32 End )
|
|
|
|
: nScriptType(Type)
|
|
|
|
, nStartPos(Start)
|
|
|
|
, nEndPos(End)
|
2000-11-02 14:25:36 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-07-30 13:16:00 +01:00
|
|
|
typedef std::vector<ScriptTypePosInfo> ScriptTypePosInfos;
|
2000-11-02 14:25:36 +00:00
|
|
|
|
2002-07-12 09:31:21 +00:00
|
|
|
struct WritingDirectionInfo
|
|
|
|
{
|
2011-01-10 16:17:07 +01:00
|
|
|
sal_uInt8 nType;
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 nStartPos;
|
|
|
|
sal_Int32 nEndPos;
|
2002-07-12 09:31:21 +00:00
|
|
|
|
2016-04-06 12:13:25 +02:00
|
|
|
WritingDirectionInfo( sal_uInt8 Type, sal_Int32 Start, sal_Int32 End )
|
|
|
|
: nType(Type)
|
|
|
|
, nStartPos(Start)
|
|
|
|
, nEndPos(End)
|
2002-07-12 09:31:21 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2010-09-23 07:28:37 +02:00
|
|
|
|
2018-07-25 10:44:28 +01:00
|
|
|
typedef std::vector<WritingDirectionInfo> WritingDirectionInfos;
|
2002-07-12 09:31:21 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class ContentAttribsInfo
|
|
|
|
{
|
|
|
|
private:
|
2015-11-10 14:19:47 +02:00
|
|
|
typedef std::vector<std::unique_ptr<EditCharAttrib> > CharAttribsType;
|
2012-03-28 13:31:27 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
SfxItemSet aPrevParaAttribs;
|
2012-03-28 13:31:27 -04:00
|
|
|
CharAttribsType aPrevCharAttribs;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
ContentAttribsInfo( const SfxItemSet& rParaAttribs );
|
|
|
|
|
|
|
|
const SfxItemSet& GetPrevParaAttribs() const { return aPrevParaAttribs; }
|
2012-03-28 13:31:27 -04:00
|
|
|
const CharAttribsType& GetPrevCharAttribs() const { return aPrevCharAttribs; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-03-28 13:31:27 -04:00
|
|
|
void RemoveAllCharAttribsFromPool(SfxItemPool& rPool) const;
|
|
|
|
void AppendCharAttrib(EditCharAttrib* pNew);
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2014-05-31 00:03:44 +02:00
|
|
|
typedef std::vector<Color> SvxColorList;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2010-12-27 20:12:23 -08:00
|
|
|
|
|
|
|
class ItemList
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-12-27 20:12:23 -08:00
|
|
|
private:
|
2012-04-02 13:39:53 -04:00
|
|
|
typedef std::vector<const SfxPoolItem*> DummyItemList;
|
2010-12-27 20:12:23 -08:00
|
|
|
DummyItemList aItemPool;
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 CurrentItem;
|
2010-12-27 20:12:23 -08:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
2010-12-27 20:12:23 -08:00
|
|
|
ItemList();
|
|
|
|
const SfxPoolItem* First();
|
|
|
|
const SfxPoolItem* Next();
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 Count() { return aItemPool.size(); };
|
2010-12-27 20:12:23 -08:00
|
|
|
void Insert( const SfxPoolItem* pItem );
|
|
|
|
void Clear() { aItemPool.clear(); };
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class ContentAttribs
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
SfxStyleSheet* pStyle;
|
|
|
|
SfxItemSet aAttribSet;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ContentAttribs( SfxItemPool& rItemPool );
|
|
|
|
|
2019-02-28 10:17:00 +02:00
|
|
|
void dumpAsXml(xmlTextWriterPtr pWriter) const;
|
2016-09-27 13:51:40 +02:00
|
|
|
|
2013-12-30 15:03:16 +01:00
|
|
|
SvxTabStop FindTabStop( sal_Int32 nCurPos, sal_uInt16 nDefTab );
|
2000-09-18 16:07:07 +00:00
|
|
|
SfxItemSet& GetItems() { return aAttribSet; }
|
2012-03-29 01:43:30 -04:00
|
|
|
const SfxItemSet& GetItems() const { return aAttribSet; }
|
|
|
|
const SfxStyleSheet* GetStyleSheet() const { return pStyle; }
|
|
|
|
SfxStyleSheet* GetStyleSheet() { return pStyle; }
|
2000-09-18 16:07:07 +00:00
|
|
|
void SetStyleSheet( SfxStyleSheet* pS );
|
|
|
|
|
2012-03-29 01:43:30 -04:00
|
|
|
const SfxPoolItem& GetItem( sal_uInt16 nWhich ) const;
|
2017-11-10 12:48:21 +02:00
|
|
|
template<class T>
|
|
|
|
const T& GetItem( TypedWhichId<T> nWhich ) const
|
|
|
|
{
|
2017-11-15 14:19:37 +02:00
|
|
|
return static_cast<const T&>(GetItem(sal_uInt16(nWhich)));
|
2017-11-10 12:48:21 +02:00
|
|
|
}
|
2012-03-29 01:43:30 -04:00
|
|
|
bool HasItem( sal_uInt16 nWhich ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class CharAttribList
|
|
|
|
{
|
2012-03-28 12:33:21 -04:00
|
|
|
public:
|
2015-11-10 14:19:47 +02:00
|
|
|
typedef std::vector<std::unique_ptr<EditCharAttrib> > AttribsType;
|
2012-03-28 12:33:21 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
private:
|
2012-03-28 12:33:21 -04:00
|
|
|
AttribsType aAttribs;
|
2011-02-16 16:34:02 -05:00
|
|
|
SvxFont aDefFont; // faster than ever from the pool!
|
2012-03-28 12:33:21 -04:00
|
|
|
bool bHasEmptyAttribs;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
CharAttribList();
|
|
|
|
~CharAttribList();
|
|
|
|
|
2019-02-28 10:17:00 +02:00
|
|
|
void dumpAsXml(xmlTextWriterPtr pWriter) const;
|
2016-09-27 13:51:40 +02:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void DeleteEmptyAttribs( SfxItemPool& rItemPool );
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
const EditCharAttrib* FindAttrib( sal_uInt16 nWhich, sal_Int32 nPos ) const;
|
|
|
|
EditCharAttrib* FindAttrib( sal_uInt16 nWhich, sal_Int32 nPos );
|
|
|
|
const EditCharAttrib* FindNextAttrib( sal_uInt16 nWhich, sal_Int32 nFromPos ) const;
|
|
|
|
EditCharAttrib* FindEmptyAttrib( sal_uInt16 nWhich, sal_Int32 nPos );
|
|
|
|
const EditCharAttrib* FindFeature( sal_Int32 nPos ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-02-23 12:05:45 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void ResortAttribs();
|
2001-11-12 12:06:40 +00:00
|
|
|
void OptimizeRanges( SfxItemPool& rItemPool );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 Count() const;
|
2012-03-28 12:33:21 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void InsertAttrib( EditCharAttrib* pAttrib );
|
|
|
|
|
|
|
|
SvxFont& GetDefFont() { return aDefFont; }
|
|
|
|
|
2012-03-28 12:33:21 -04:00
|
|
|
bool HasEmptyAttribs() const { return bHasEmptyAttribs; }
|
|
|
|
void SetHasEmptyAttribs(bool b);
|
2014-02-02 22:16:48 -06:00
|
|
|
bool HasBoundingAttrib( sal_Int32 nBound ) const;
|
|
|
|
bool HasAttrib( sal_Int32 nStartPos, sal_Int32 nEndPos ) const;
|
2012-03-28 12:33:21 -04:00
|
|
|
|
2014-06-12 14:06:28 +02:00
|
|
|
AttribsType& GetAttribs() { return aAttribs;}
|
|
|
|
const AttribsType& GetAttribs() const { return aAttribs;}
|
2012-03-28 12:33:21 -04:00
|
|
|
|
|
|
|
void Remove(const EditCharAttrib* p);
|
2014-02-02 22:16:48 -06:00
|
|
|
void Remove(sal_Int32 nPos);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2018-11-08 09:28:59 +01:00
|
|
|
#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
|
2014-12-02 22:48:01 +01:00
|
|
|
static void DbgCheckAttribs(CharAttribList const& rAttribs);
|
2011-08-26 21:43:07 +01:00
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2016-04-09 17:07:54 +02:00
|
|
|
class ContentNode
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
private:
|
2013-09-10 11:02:32 +02:00
|
|
|
OUString maString;
|
2000-09-18 16:07:07 +00:00
|
|
|
ContentAttribs aContentAttribs;
|
|
|
|
CharAttribList aCharAttribList;
|
2015-09-17 17:10:47 +01:00
|
|
|
std::unique_ptr<WrongList> mpWrongList;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-07-27 00:21:50 -04:00
|
|
|
void UnExpandPosition( sal_Int32 &rStartPos, bool bBiasStart );
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
|
|
|
ContentNode( SfxItemPool& rItemPool );
|
2013-09-12 10:38:48 +01:00
|
|
|
ContentNode( const OUString& rStr, const ContentAttribs& rContentAttribs );
|
2000-09-18 16:07:07 +00:00
|
|
|
~ContentNode();
|
2016-04-09 17:07:54 +02:00
|
|
|
ContentNode(const ContentNode&) = delete;
|
|
|
|
ContentNode& operator=(const ContentNode&) = delete;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2019-02-28 10:17:00 +02:00
|
|
|
void dumpAsXml(xmlTextWriterPtr pWriter) const;
|
2016-09-27 13:51:40 +02:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
ContentAttribs& GetContentAttribs() { return aContentAttribs; }
|
2012-03-29 01:43:30 -04:00
|
|
|
const ContentAttribs& GetContentAttribs() const { return aContentAttribs; }
|
2000-09-18 16:07:07 +00:00
|
|
|
CharAttribList& GetCharAttribs() { return aCharAttribList; }
|
2012-03-29 01:43:30 -04:00
|
|
|
const CharAttribList& GetCharAttribs() const { return aCharAttribList; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void ExpandAttribs( sal_Int32 nIndex, sal_Int32 nNewChars, SfxItemPool& rItemPool );
|
2016-09-07 09:09:14 +02:00
|
|
|
void CollapseAttribs( sal_Int32 nIndex, sal_Int32 nDelChars, SfxItemPool& rItemPool );
|
2000-09-18 16:07:07 +00:00
|
|
|
void AppendAttribs( ContentNode* pNextNode );
|
2014-04-09 11:03:42 +02:00
|
|
|
void CopyAndCutAttribs( ContentNode* pPrevNode, SfxItemPool& rPool, bool bKeepEndingAttribs );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
void SetStyleSheet( SfxStyleSheet* pS, bool bRecalcFont = true );
|
2000-09-18 16:07:07 +00:00
|
|
|
void SetStyleSheet( SfxStyleSheet* pS, const SvxFont& rFontFromStyle );
|
|
|
|
SfxStyleSheet* GetStyleSheet() { return aContentAttribs.GetStyleSheet(); }
|
|
|
|
|
|
|
|
void CreateDefFont();
|
|
|
|
|
2013-09-01 14:06:07 -04:00
|
|
|
void EnsureWrongList();
|
2013-08-28 15:05:08 -04:00
|
|
|
WrongList* GetWrongList();
|
|
|
|
const WrongList* GetWrongList() const;
|
|
|
|
void SetWrongList( WrongList* p );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
void CreateWrongList();
|
|
|
|
void DestroyWrongList();
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
bool IsFeature( sal_Int32 nPos ) const;
|
2012-04-03 17:10:10 -04:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 Len() const;
|
2014-06-12 14:06:28 +02:00
|
|
|
const OUString& GetString() const { return maString;}
|
2012-04-03 17:10:10 -04:00
|
|
|
|
2014-07-27 00:21:50 -04:00
|
|
|
/// return length including expanded fields
|
|
|
|
sal_uLong GetExpandedLen() const;
|
|
|
|
/// return content including expanded fields
|
2018-03-08 10:47:12 +02:00
|
|
|
OUString GetExpandedText(sal_Int32 nStartPos = 0, sal_Int32 nEndPos = -1) const;
|
2014-07-27 00:21:50 -04:00
|
|
|
/// re-write offsets in the expanded text to string offsets
|
|
|
|
void UnExpandPositions( sal_Int32 &rStartPos, sal_Int32 &rEndPos );
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void SetChar(sal_Int32 nPos, sal_Unicode c);
|
|
|
|
void Insert(const OUString& rStr, sal_Int32 nPos);
|
2013-09-12 10:38:48 +01:00
|
|
|
void Append(const OUString& rStr);
|
2014-02-02 22:16:48 -06:00
|
|
|
void Erase(sal_Int32 nPos);
|
|
|
|
void Erase(sal_Int32 nPos, sal_Int32 nCount);
|
|
|
|
OUString Copy(sal_Int32 nPos) const;
|
|
|
|
OUString Copy(sal_Int32 nPos, sal_Int32 nCount) const;
|
|
|
|
sal_Unicode GetChar(sal_Int32 nPos) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class EditPaM
|
|
|
|
{
|
|
|
|
private:
|
2012-03-29 01:43:30 -04:00
|
|
|
ContentNode* pNode;
|
2013-12-28 13:37:26 +01:00
|
|
|
sal_Int32 nIndex;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
2012-03-29 01:43:30 -04:00
|
|
|
EditPaM();
|
2013-12-28 13:37:26 +01:00
|
|
|
EditPaM(ContentNode* p, sal_Int32 n);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-06-12 14:06:28 +02:00
|
|
|
const ContentNode* GetNode() const { return pNode;}
|
2014-06-09 10:09:42 +02:00
|
|
|
ContentNode* GetNode() { return pNode;}
|
2012-03-29 01:43:30 -04:00
|
|
|
void SetNode(ContentNode* p);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-12-28 13:37:26 +01:00
|
|
|
sal_Int32 GetIndex() const { return nIndex; }
|
|
|
|
void SetIndex( sal_Int32 n ) { nIndex = n; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2018-11-16 10:41:03 +02:00
|
|
|
bool DbgIsBuggy( EditDoc const & rDoc ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-03-01 23:27:23 +01:00
|
|
|
friend bool operator == ( const EditPaM& r1, const EditPaM& r2 );
|
|
|
|
friend bool operator != ( const EditPaM& r1, const EditPaM& r2 );
|
2014-03-02 01:09:04 +01:00
|
|
|
bool operator !() const { return !pNode && !nIndex; }
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-10-13 11:00:19 +02:00
|
|
|
enum class PortionKind
|
|
|
|
{
|
|
|
|
TEXT = 0,
|
|
|
|
TAB = 1,
|
|
|
|
LINEBREAK = 2,
|
|
|
|
FIELD = 3,
|
|
|
|
HYPHENATOR = 4
|
|
|
|
};
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-11-23 10:28:46 +02:00
|
|
|
enum class DeleteMode {
|
|
|
|
Simple, RestOfWord, RestOfContent
|
|
|
|
};
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-11-23 10:41:39 +02:00
|
|
|
enum class AsianCompressionFlags {
|
|
|
|
Normal = 0x00,
|
|
|
|
Kana = 0x01,
|
|
|
|
PunctuationLeft = 0x02,
|
|
|
|
PunctuationRight = 0x04,
|
|
|
|
};
|
|
|
|
namespace o3tl {
|
|
|
|
template<> struct typed_flags<AsianCompressionFlags> : is_typed_flags<AsianCompressionFlags, 0x07> {};
|
|
|
|
}
|
|
|
|
|
2001-06-21 11:47:31 +00:00
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
2001-06-21 11:47:31 +00:00
|
|
|
// struct ExtraPortionInfos
|
2014-02-25 18:24:10 +01:00
|
|
|
|
2001-06-21 11:47:31 +00:00
|
|
|
struct ExtraPortionInfo
|
|
|
|
{
|
|
|
|
long nOrgWidth;
|
|
|
|
long nWidthFullCompression;
|
|
|
|
|
|
|
|
long nPortionOffsetX;
|
|
|
|
|
2011-01-10 16:17:07 +01:00
|
|
|
sal_uInt16 nMaxCompression100thPercent;
|
2001-06-21 11:47:31 +00:00
|
|
|
|
2016-11-23 10:41:39 +02:00
|
|
|
AsianCompressionFlags nAsianCompressionTypes;
|
2014-04-09 11:03:42 +02:00
|
|
|
bool bFirstCharIsRightPunktuation;
|
|
|
|
bool bCompressed;
|
2001-06-21 11:47:31 +00:00
|
|
|
|
2017-01-11 12:53:32 +02:00
|
|
|
std::unique_ptr<long[]> pOrgDXArray;
|
2017-02-17 19:06:24 +02:00
|
|
|
std::vector< sal_Int32 > lineBreaksList;
|
2001-06-21 11:47:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
ExtraPortionInfo();
|
|
|
|
~ExtraPortionInfo();
|
|
|
|
|
2014-07-18 18:21:12 +02:00
|
|
|
void SaveOrgDXArray( const long* pDXArray, sal_Int32 nLen );
|
2001-06-21 11:47:31 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class TextPortion
|
|
|
|
{
|
|
|
|
private:
|
2017-03-07 14:44:16 +00:00
|
|
|
std::unique_ptr<ExtraPortionInfo> xExtraInfos;
|
2014-10-13 11:00:19 +02:00
|
|
|
sal_Int32 nLen;
|
2001-06-21 11:47:31 +00:00
|
|
|
Size aOutSz;
|
2014-10-13 11:00:19 +02:00
|
|
|
PortionKind nKind;
|
2016-04-19 18:23:49 +02:00
|
|
|
sal_uInt8 nRightToLeftLevel;
|
2001-06-21 11:47:31 +00:00
|
|
|
sal_Unicode nExtraValue;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-06-21 11:47:31 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
2014-02-02 22:16:48 -06:00
|
|
|
TextPortion( sal_Int32 nL )
|
2017-03-07 14:44:16 +00:00
|
|
|
: nLen( nL )
|
2013-12-28 22:18:21 +01:00
|
|
|
, aOutSz( -1, -1 )
|
2014-10-13 11:00:19 +02:00
|
|
|
, nKind( PortionKind::TEXT )
|
2016-04-19 18:23:49 +02:00
|
|
|
, nRightToLeftLevel( 0 )
|
2013-12-28 22:18:21 +01:00
|
|
|
, nExtraValue( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
TextPortion( const TextPortion& r )
|
2017-03-07 14:44:16 +00:00
|
|
|
: nLen( r.nLen )
|
2013-12-28 22:18:21 +01:00
|
|
|
, aOutSz( r.aOutSz )
|
|
|
|
, nKind( r.nKind )
|
2016-04-19 18:23:49 +02:00
|
|
|
, nRightToLeftLevel( r.nRightToLeftLevel )
|
2013-12-28 22:18:21 +01:00
|
|
|
, nExtraValue( r.nExtraValue )
|
|
|
|
{
|
|
|
|
}
|
2001-06-21 11:47:31 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 GetLen() const { return nLen; }
|
2014-10-13 11:00:19 +02:00
|
|
|
void SetLen( sal_Int32 nL ) { nLen = nL; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-10-13 11:00:19 +02:00
|
|
|
Size& GetSize() { return aOutSz; }
|
|
|
|
const Size& GetSize() const { return aOutSz; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-04-05 15:16:47 +02:00
|
|
|
void SetKind(PortionKind n) { nKind = n; }
|
2014-10-13 11:00:19 +02:00
|
|
|
PortionKind GetKind() const { return nKind; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-04-19 18:23:49 +02:00
|
|
|
void SetRightToLeftLevel( sal_uInt8 n ) { nRightToLeftLevel = n; }
|
|
|
|
sal_uInt8 GetRightToLeftLevel() const { return nRightToLeftLevel; }
|
|
|
|
bool IsRightToLeft() const { return (nRightToLeftLevel&1); }
|
2002-07-12 09:31:21 +00:00
|
|
|
|
2014-10-13 11:00:19 +02:00
|
|
|
sal_Unicode GetExtraValue() const { return nExtraValue; }
|
|
|
|
void SetExtraValue( sal_Unicode n ) { nExtraValue = n; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-03-07 14:44:16 +00:00
|
|
|
ExtraPortionInfo* GetExtraInfos() const { return xExtraInfos.get(); }
|
|
|
|
void SetExtraInfos( ExtraPortionInfo* p ) { xExtraInfos.reset(p); }
|
2001-06-21 11:47:31 +00:00
|
|
|
};
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2012-04-03 01:53:40 -04:00
|
|
|
class TextPortionList
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2015-11-10 14:23:47 +02:00
|
|
|
typedef std::vector<std::unique_ptr<TextPortion> > PortionsType;
|
2012-04-03 01:53:40 -04:00
|
|
|
PortionsType maPortions;
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
|
|
|
TextPortionList();
|
|
|
|
~TextPortionList();
|
|
|
|
|
|
|
|
void Reset();
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 FindPortion(
|
|
|
|
sal_Int32 nCharPos, sal_Int32& rPortionStart, bool bPreferStartingPortion = false) const;
|
|
|
|
sal_Int32 GetStartPos(sal_Int32 nPortion);
|
|
|
|
void DeleteFromPortion(sal_Int32 nDelFrom);
|
|
|
|
sal_Int32 Count() const;
|
2015-07-03 11:31:14 +02:00
|
|
|
const TextPortion& operator[](sal_Int32 nPos) const;
|
|
|
|
TextPortion& operator[](sal_Int32 nPos);
|
2012-04-03 01:53:40 -04:00
|
|
|
|
|
|
|
void Append(TextPortion* p);
|
2014-02-02 22:16:48 -06:00
|
|
|
void Insert(sal_Int32 nPos, TextPortion* p);
|
|
|
|
void Remove(sal_Int32 nPos);
|
|
|
|
sal_Int32 GetPos(const TextPortion* p) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class ParaPortion;
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class EditLine
|
|
|
|
{
|
2012-04-02 20:16:22 -04:00
|
|
|
public:
|
2014-07-18 18:21:12 +02:00
|
|
|
typedef std::vector<long> CharPosArrayType;
|
2012-04-02 20:16:22 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
private:
|
2012-04-02 20:16:22 -04:00
|
|
|
CharPosArrayType aPositions;
|
2002-07-12 09:31:21 +00:00
|
|
|
long nTxtWidth;
|
2017-02-23 21:26:34 +01:00
|
|
|
long nStartPosX;
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 nStart; // could be replaced by nStartPortion
|
|
|
|
sal_Int32 nEnd; // could be replaced by nEndPortion
|
|
|
|
sal_Int32 nStartPortion;
|
|
|
|
sal_Int32 nEndPortion;
|
2011-03-12 02:42:58 +01:00
|
|
|
sal_uInt16 nHeight; // Total height of the line
|
|
|
|
sal_uInt16 nTxtHeight; // Pure Text height
|
2011-01-10 16:17:07 +01:00
|
|
|
sal_uInt16 nMaxAscent;
|
2012-04-02 20:19:27 -04:00
|
|
|
bool bHangingPunctuation:1;
|
|
|
|
bool bInvalid:1; // for skillful formatting
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
EditLine();
|
|
|
|
EditLine( const EditLine& );
|
|
|
|
~EditLine();
|
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
bool IsIn( sal_Int32 nIndex ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{ return ( (nIndex >= nStart ) && ( nIndex < nEnd ) ); }
|
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
bool IsIn( sal_Int32 nIndex, bool bInclEnd ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{ return ( ( nIndex >= nStart ) && ( bInclEnd ? ( nIndex <= nEnd ) : ( nIndex < nEnd ) ) ); }
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void SetStart( sal_Int32 n ) { nStart = n; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_Int32 GetStart() const { return nStart; }
|
|
|
|
sal_Int32& GetStart() { return nStart; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void SetEnd( sal_Int32 n ) { nEnd = n; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_Int32 GetEnd() const { return nEnd; }
|
|
|
|
sal_Int32& GetEnd() { return nEnd; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void SetStartPortion( sal_Int32 n ) { nStartPortion = n; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_Int32 GetStartPortion() const { return nStartPortion; }
|
|
|
|
sal_Int32& GetStartPortion() { return nStartPortion; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void SetEndPortion( sal_Int32 n ) { nEndPortion = n; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_Int32 GetEndPortion() const { return nEndPortion; }
|
|
|
|
sal_Int32& GetEndPortion() { return nEndPortion; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-11-30 13:57:07 +02:00
|
|
|
void SetHeight( sal_uInt16 nH, sal_uInt16 nTxtH = 0 );
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_uInt16 GetHeight() const { return nHeight; }
|
|
|
|
sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
|
2002-07-12 09:31:21 +00:00
|
|
|
|
|
|
|
void SetTextWidth( long n ) { nTxtWidth = n; }
|
|
|
|
long GetTextWidth() const { return nTxtWidth; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-01-10 16:17:07 +01:00
|
|
|
void SetMaxAscent( sal_uInt16 n ) { nMaxAscent = n; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-04-02 20:19:27 -04:00
|
|
|
void SetHangingPunctuation( bool b ) { bHangingPunctuation = b; }
|
|
|
|
bool IsHangingPunctuation() const { return bHangingPunctuation; }
|
2001-05-11 07:06:32 +00:00
|
|
|
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_Int32 GetLen() const { return nEnd - nStart; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-02-23 21:26:34 +01:00
|
|
|
long GetStartPosX() const { return nStartPosX; }
|
2012-10-01 19:33:34 +02:00
|
|
|
void SetStartPosX( long start );
|
2000-09-18 16:07:07 +00:00
|
|
|
Size CalcTextSize( ParaPortion& rParaPortion );
|
|
|
|
|
2012-04-02 20:19:27 -04:00
|
|
|
bool IsInvalid() const { return bInvalid; }
|
|
|
|
bool IsValid() const { return !bInvalid; }
|
|
|
|
void SetInvalid() { bInvalid = true; }
|
|
|
|
void SetValid() { bInvalid = false; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-04-24 12:25:45 +02:00
|
|
|
bool IsEmpty() const { return nEnd <= nStart; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-06-12 14:06:28 +02:00
|
|
|
CharPosArrayType& GetCharPosArray() { return aPositions;}
|
|
|
|
const CharPosArrayType& GetCharPosArray() const { return aPositions;}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
EditLine* Clone() const;
|
|
|
|
|
|
|
|
EditLine& operator = ( const EditLine& rLine );
|
2014-04-09 11:03:42 +02:00
|
|
|
friend bool operator == ( const EditLine& r1, const EditLine& r2 );
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
2012-04-03 00:02:55 -04:00
|
|
|
class EditLineList
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2015-11-10 14:28:26 +02:00
|
|
|
typedef std::vector<std::unique_ptr<EditLine> > LinesType;
|
2012-04-03 00:02:55 -04:00
|
|
|
LinesType maLines;
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
|
|
|
EditLineList();
|
|
|
|
~EditLineList();
|
|
|
|
|
2012-04-03 00:02:55 -04:00
|
|
|
void Reset();
|
2014-02-02 22:16:48 -06:00
|
|
|
void DeleteFromLine(sal_Int32 nDelFrom);
|
|
|
|
sal_Int32 FindLine(sal_Int32 nChar, bool bInclEnd);
|
|
|
|
sal_Int32 Count() const;
|
2015-07-03 11:31:14 +02:00
|
|
|
const EditLine& operator[](sal_Int32 nPos) const;
|
|
|
|
EditLine& operator[](sal_Int32 nPos);
|
2012-04-03 00:02:55 -04:00
|
|
|
|
|
|
|
void Append(EditLine* p);
|
2014-02-02 22:16:48 -06:00
|
|
|
void Insert(sal_Int32 nPos, EditLine* p);
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class ParaPortion
|
|
|
|
{
|
2011-02-16 16:34:02 -05:00
|
|
|
friend class ImpEditEngine; // to adjust the height
|
2000-09-18 16:07:07 +00:00
|
|
|
private:
|
2000-11-02 14:25:36 +00:00
|
|
|
EditLineList aLineList;
|
|
|
|
TextPortionList aTextPortionList;
|
|
|
|
ContentNode* pNode;
|
|
|
|
long nHeight;
|
|
|
|
|
2002-07-12 09:31:21 +00:00
|
|
|
ScriptTypePosInfos aScriptInfos;
|
|
|
|
WritingDirectionInfos aWritingDirectionInfos;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 nInvalidPosStart;
|
|
|
|
sal_Int32 nFirstLineOffset; // For Writer-LineSpacing-Interpretation
|
2017-02-23 21:26:34 +01:00
|
|
|
sal_Int32 nBulletX;
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 nInvalidDiff;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
bool bInvalid : 1;
|
|
|
|
bool bSimple : 1; // only linear Tap
|
|
|
|
bool bVisible : 1; // Belongs to the node!
|
|
|
|
bool bForceRepaint : 1;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-10-12 15:25:41 +02:00
|
|
|
ParaPortion( const ParaPortion& ) = delete;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
ParaPortion( ContentNode* pNode );
|
|
|
|
~ParaPortion();
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 GetLineNumber( sal_Int32 nIndex ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
EditLineList& GetLines() { return aLineList; }
|
2012-03-28 22:34:57 -04:00
|
|
|
const EditLineList& GetLines() const { return aLineList; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
bool IsInvalid() const { return bInvalid; }
|
|
|
|
bool IsSimpleInvalid() const { return bSimple; }
|
|
|
|
void SetValid() { bInvalid = false; bSimple = true;}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
bool MustRepaint() const { return bForceRepaint; }
|
|
|
|
void SetMustRepaint( bool bRP ) { bForceRepaint = bRP; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2017-02-23 21:26:34 +01:00
|
|
|
sal_Int32 GetBulletX() const { return nBulletX; }
|
|
|
|
void SetBulletX( sal_Int32 n ) { nBulletX = n; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void MarkInvalid( sal_Int32 nStart, sal_Int32 nDiff);
|
2017-05-02 08:31:23 +02:00
|
|
|
void MarkSelectionInvalid( sal_Int32 nStart );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
void SetVisible( bool bVisible );
|
2012-03-28 22:34:57 -04:00
|
|
|
bool IsVisible() const { return bVisible; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-07-16 08:11:27 +02:00
|
|
|
bool IsEmpty() { return GetTextPortions().Count() == 1 && GetTextPortions()[0].GetLen() == 0; }
|
2011-03-30 17:42:19 +02:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
long GetHeight() const { return ( bVisible ? nHeight : 0 ); }
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 GetFirstLineOffset() const { return ( bVisible ? nFirstLineOffset : 0 ); }
|
2000-09-18 16:07:07 +00:00
|
|
|
void ResetHeight() { nHeight = 0; nFirstLineOffset = 0; }
|
|
|
|
|
|
|
|
ContentNode* GetNode() const { return pNode; }
|
|
|
|
TextPortionList& GetTextPortions() { return aTextPortionList; }
|
2012-03-28 22:34:57 -04:00
|
|
|
const TextPortionList& GetTextPortions() const { return aTextPortionList; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
sal_Int32 GetInvalidPosStart() const { return nInvalidPosStart; }
|
2000-09-18 16:07:07 +00:00
|
|
|
short GetInvalidDiff() const { return nInvalidDiff; }
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void CorrectValuesBehindLastFormattedLine( sal_Int32 nLastFormattedLine );
|
2014-12-03 00:18:00 +01:00
|
|
|
#if OSL_DEBUG_LEVEL > 0
|
|
|
|
static bool DbgCheckTextPortions(ParaPortion const&);
|
2011-10-30 07:56:10 +00:00
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2012-03-28 22:34:57 -04:00
|
|
|
class ParaPortionList
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2014-02-02 22:16:48 -06:00
|
|
|
mutable sal_Int32 nLastCache;
|
2015-11-10 14:42:13 +02:00
|
|
|
std::vector<std::unique_ptr<ParaPortion>> maPortions;
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
|
|
|
ParaPortionList();
|
|
|
|
~ParaPortionList();
|
|
|
|
|
|
|
|
void Reset();
|
2012-03-28 22:34:57 -04:00
|
|
|
long GetYOffset(const ParaPortion* pPPortion) const;
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 FindParagraph(long nYOffset) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-05-08 18:12:32 +02:00
|
|
|
const ParaPortion* SafeGetObject(sal_Int32 nPos) const;
|
|
|
|
ParaPortion* SafeGetObject(sal_Int32 nPos);
|
2012-03-28 22:34:57 -04:00
|
|
|
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 GetPos(const ParaPortion* p) const;
|
|
|
|
ParaPortion* operator[](sal_Int32 nPos);
|
|
|
|
const ParaPortion* operator[](sal_Int32 nPos) const;
|
2012-03-28 22:34:57 -04:00
|
|
|
|
2018-10-08 10:02:43 +02:00
|
|
|
std::unique_ptr<ParaPortion> Release(sal_Int32 nPos);
|
2013-05-08 18:12:32 +02:00
|
|
|
void Remove(sal_Int32 nPos);
|
2018-10-08 10:02:43 +02:00
|
|
|
void Insert(sal_Int32 nPos, std::unique_ptr<ParaPortion> p);
|
|
|
|
void Append(std::unique_ptr<ParaPortion> p);
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 Count() const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2018-11-08 09:28:59 +01:00
|
|
|
#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
|
2011-02-16 16:34:02 -05:00
|
|
|
// temporary:
|
2014-12-02 22:11:29 +01:00
|
|
|
static void DbgCheck(ParaPortionList const&, EditDoc const& rDoc);
|
2011-11-10 22:26:44 +00:00
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class EditSelection
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
EditPaM aStartPaM;
|
|
|
|
EditPaM aEndPaM;
|
|
|
|
|
|
|
|
public:
|
2011-02-16 16:34:02 -05:00
|
|
|
EditSelection(); // No constructor and destructor
|
2014-11-10 15:05:25 +01:00
|
|
|
// are automatically executed correctly!
|
2000-09-18 16:07:07 +00:00
|
|
|
EditSelection( const EditPaM& rStartAndAnd );
|
|
|
|
EditSelection( const EditPaM& rStart, const EditPaM& rEnd );
|
|
|
|
|
|
|
|
EditPaM& Min() { return aStartPaM; }
|
|
|
|
EditPaM& Max() { return aEndPaM; }
|
|
|
|
|
|
|
|
const EditPaM& Min() const { return aStartPaM; }
|
|
|
|
const EditPaM& Max() const { return aEndPaM; }
|
|
|
|
|
2014-03-02 00:25:49 +01:00
|
|
|
bool HasRange() const { return aStartPaM != aEndPaM; }
|
2014-03-02 01:09:04 +01:00
|
|
|
bool IsInvalid() const { return !aStartPaM || !aEndPaM; }
|
2018-11-16 10:41:03 +02:00
|
|
|
bool DbgIsBuggy( EditDoc const & rDoc ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-03-02 00:21:49 +01:00
|
|
|
void Adjust( const EditDoc& rNodes );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
EditSelection& operator = ( const EditPaM& r );
|
2014-03-01 23:27:23 +01:00
|
|
|
bool operator == ( const EditSelection& r ) const
|
|
|
|
{ return ( aStartPaM == r.aStartPaM ) && ( aEndPaM == r.aEndPaM ); }
|
|
|
|
bool operator != ( const EditSelection& r ) const { return !( r == *this ); }
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
class DeletedNodeInfo
|
|
|
|
{
|
|
|
|
private:
|
2015-01-11 16:40:21 +02:00
|
|
|
ContentNode* mpInvalidNode;
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 nInvalidParagraph;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
public:
|
2015-01-11 16:40:21 +02:00
|
|
|
DeletedNodeInfo( ContentNode* pNode, sal_Int32 nPos )
|
|
|
|
: mpInvalidNode(pNode)
|
2013-12-28 22:18:21 +01:00
|
|
|
, nInvalidParagraph(nPos)
|
|
|
|
{
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-01-11 16:40:21 +02:00
|
|
|
ContentNode* GetNode() const { return mpInvalidNode; }
|
|
|
|
sal_Int32 GetPosition() const { return nInvalidParagraph; }
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-25 18:24:10 +01:00
|
|
|
|
|
|
|
|
2012-04-02 14:15:15 -04:00
|
|
|
class EditDoc
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
private:
|
2014-02-02 22:16:48 -06:00
|
|
|
mutable sal_Int32 nLastCache;
|
2015-11-10 14:42:13 +02:00
|
|
|
std::vector<std::unique_ptr<ContentNode> > maContents;
|
2012-04-02 14:15:15 -04:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
SfxItemPool* pItemPool;
|
2015-09-15 15:33:36 +02:00
|
|
|
Link<LinkParamNone*,void> aModifyHdl;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-02-16 16:34:02 -05:00
|
|
|
SvxFont aDefFont; //faster than ever from the pool!!
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_uInt16 nDefTab;
|
2012-04-02 17:16:16 -04:00
|
|
|
bool bIsVertical:1;
|
2019-11-26 18:37:38 +01:00
|
|
|
TextRotation mnRotation;
|
2012-04-02 17:16:16 -04:00
|
|
|
bool bIsFixedCellHeight:1;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-04-02 17:16:16 -04:00
|
|
|
bool bOwnerOfPool:1;
|
|
|
|
bool bModified:1;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-04-02 18:50:07 -04:00
|
|
|
private:
|
2001-01-30 15:52:42 +00:00
|
|
|
void ImplDestroyContents();
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
|
|
|
EditDoc( SfxItemPool* pItemPool );
|
|
|
|
~EditDoc();
|
|
|
|
|
2019-02-28 10:17:00 +02:00
|
|
|
void dumpAsXml(xmlTextWriterPtr pWriter) const;
|
2016-09-27 13:51:40 +02:00
|
|
|
void ClearSpellErrors();
|
2013-09-01 13:57:52 -04:00
|
|
|
|
2012-04-02 17:16:16 -04:00
|
|
|
bool IsModified() const { return bModified; }
|
|
|
|
void SetModified( bool b );
|
2002-10-10 11:17:38 +00:00
|
|
|
|
2015-09-15 15:33:36 +02:00
|
|
|
void SetModifyHdl( const Link<LinkParamNone*,void>& rLink ) { aModifyHdl = rLink; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-04-09 11:03:42 +02:00
|
|
|
void CreateDefFont( bool bUseStyles );
|
2019-09-02 15:06:23 +02:00
|
|
|
const SvxFont& GetDefFont() const { return aDefFont; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-01-10 16:17:07 +01:00
|
|
|
void SetDefTab( sal_uInt16 nTab ) { nDefTab = nTab ? nTab : DEFTAB; }
|
2015-07-16 08:11:27 +02:00
|
|
|
sal_uInt16 GetDefTab() const { return nDefTab; }
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2019-11-26 18:37:38 +01:00
|
|
|
void SetVertical( bool bVertical ) { bIsVertical = bVertical; }
|
|
|
|
bool IsVertical() const;
|
|
|
|
bool IsTopToBottom() const;
|
|
|
|
bool GetDirectVertical() const;
|
|
|
|
void SetRotation( TextRotation nRotation ) { mnRotation = nRotation; }
|
|
|
|
TextRotation GetRotation() const { return mnRotation; }
|
2000-11-20 10:53:50 +00:00
|
|
|
|
2012-04-02 17:16:16 -04:00
|
|
|
void SetFixedCellHeight( bool bUseFixedCellHeight ) { bIsFixedCellHeight = bUseFixedCellHeight; }
|
|
|
|
bool IsFixedCellHeight() const { return bIsFixedCellHeight; }
|
2003-09-01 11:00:48 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
EditPaM Clear();
|
|
|
|
EditPaM RemoveText();
|
2016-01-18 10:39:48 +02:00
|
|
|
void RemoveChars( EditPaM aPaM, sal_Int32 nChars );
|
2013-09-12 10:38:48 +01:00
|
|
|
EditPaM InsertText( EditPaM aPaM, const OUString& rStr );
|
2014-04-09 11:03:42 +02:00
|
|
|
EditPaM InsertParaBreak( EditPaM aPaM, bool bKeepEndingAttribs );
|
2000-09-18 16:07:07 +00:00
|
|
|
EditPaM InsertFeature( EditPaM aPaM, const SfxPoolItem& rItem );
|
|
|
|
EditPaM ConnectParagraphs( ContentNode* pLeft, ContentNode* pRight );
|
|
|
|
|
2013-09-10 09:46:42 +02:00
|
|
|
OUString GetText( LineEnd eEnd ) const;
|
|
|
|
sal_uLong GetTextLen() const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-09-12 10:38:48 +01:00
|
|
|
OUString GetParaAsString( sal_Int32 nNode ) const;
|
2017-10-31 10:41:55 +02:00
|
|
|
static OUString GetParaAsString(const ContentNode* pNode, sal_Int32 nStartPos = 0, sal_Int32 nEndPos = -1);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-04-02 17:24:10 -04:00
|
|
|
EditPaM GetStartPaM() const;
|
|
|
|
EditPaM GetEndPaM() const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
SfxItemPool& GetItemPool() { return *pItemPool; }
|
|
|
|
const SfxItemPool& GetItemPool() const { return *pItemPool; }
|
|
|
|
|
2012-04-02 18:48:16 -04:00
|
|
|
void RemoveItemsFromPool(const ContentNode& rNode);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
void InsertAttrib( const SfxPoolItem& rItem, ContentNode* pNode, sal_Int32 nStart, sal_Int32 nEnd );
|
|
|
|
void InsertAttrib( ContentNode* pNode, sal_Int32 nStart, sal_Int32 nEnd, const SfxPoolItem& rPoolItem );
|
|
|
|
void InsertAttribInSelection( ContentNode* pNode, sal_Int32 nStart, sal_Int32 nEnd, const SfxPoolItem& rPoolItem );
|
2016-08-05 11:11:03 +02:00
|
|
|
bool RemoveAttribs( ContentNode* pNode, sal_Int32 nStart, sal_Int32 nEnd, sal_uInt16 nWhich );
|
|
|
|
bool RemoveAttribs( ContentNode* pNode, sal_Int32 nStart, sal_Int32 nEnd, EditCharAttrib*& rpStarting, EditCharAttrib*& rpEnding, sal_uInt16 nWhich );
|
2015-04-10 14:12:10 +02:00
|
|
|
static void FindAttribs( ContentNode* pNode, sal_Int32 nStartPos, sal_Int32 nEndPos, SfxItemSet& rCurSet );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-05-08 18:12:32 +02:00
|
|
|
sal_Int32 GetPos(const ContentNode* pNode) const;
|
|
|
|
const ContentNode* GetObject(sal_Int32 nPos) const;
|
|
|
|
ContentNode* GetObject(sal_Int32 nPos);
|
|
|
|
sal_Int32 Count() const;
|
|
|
|
const ContentNode* operator[](sal_Int32 nPos) const;
|
|
|
|
ContentNode* operator[](sal_Int32 nPos);
|
|
|
|
void Insert(sal_Int32 nPos, ContentNode* p);
|
2012-04-02 14:15:15 -04:00
|
|
|
/// deletes
|
2013-05-08 18:12:32 +02:00
|
|
|
void Remove(sal_Int32 nPos);
|
2012-04-02 14:15:15 -04:00
|
|
|
/// does not delete
|
2013-05-08 18:12:32 +02:00
|
|
|
void Release(sal_Int32 nPos);
|
2012-04-02 14:15:15 -04:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
static OUString GetSepStr( LineEnd eEnd );
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2014-02-02 22:16:48 -06:00
|
|
|
inline EditCharAttrib* GetAttrib(CharAttribList::AttribsType& rAttribs, sal_Int32 nAttr)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2018-01-12 20:25:09 +01:00
|
|
|
return (nAttr < static_cast<sal_Int32>(rAttribs.size())) ? rAttribs[nAttr].get() : nullptr;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2018-11-08 09:28:59 +01:00
|
|
|
#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
|
2017-10-31 10:41:55 +02:00
|
|
|
void CheckOrderedList(const CharAttribList::AttribsType& rAttribs);
|
2018-11-08 09:28:59 +01:00
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2020-01-14 10:22:10 +02:00
|
|
|
class EditEngineItemPool final : public SfxItemPool
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2017-06-16 14:13:33 +01:00
|
|
|
private:
|
|
|
|
std::shared_ptr<DefItems> m_xDefItems;
|
2000-09-18 16:07:07 +00:00
|
|
|
public:
|
2017-08-17 01:57:59 +05:30
|
|
|
EditEngineItemPool();
|
2020-01-14 10:22:10 +02:00
|
|
|
private:
|
2017-06-16 14:13:33 +01:00
|
|
|
virtual ~EditEngineItemPool() override;
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2017-10-16 17:22:21 +02:00
|
|
|
#endif
|
2010-10-27 13:11:31 +01:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|