summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/svdmodel.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/svdraw/svdmodel.cxx')
-rw-r--r--svx/source/svdraw/svdmodel.cxx669
1 files changed, 321 insertions, 348 deletions
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index 1e95644654aa..f429953dc28a 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -19,7 +19,6 @@
#include <svx/svdmodel.hxx>
#include <cassert>
-#include <math.h>
#include <sal/log.hxx>
#include <rtl/ustrbuf.hxx>
#include <com/sun/star/lang/XComponent.hpp>
@@ -29,6 +28,7 @@
#include <unotools/pathoptions.hxx>
#include <svl/whiter.hxx>
#include <svl/asiancfg.hxx>
+#include <svx/compatflags.hxx>
#include <svx/xbtmpit.hxx>
#include <svx/xlndsit.hxx>
#include <svx/xlnedit.hxx>
@@ -38,7 +38,6 @@
#include <svx/xlnstit.hxx>
#include <editeng/editeng.hxx>
#include <svx/xtable.hxx>
-#include <svx/svdtrans.hxx>
#include <svx/svdpage.hxx>
#include <svx/svdlayer.hxx>
#include <svx/svdundo.hxx>
@@ -50,6 +49,7 @@
#include <svx/svdoutl.hxx>
#include <svx/dialmgr.hxx>
#include <svx/strings.hrc>
+#include <svx/theme/IThemeColorChanger.hxx>
#include <svdoutlinercache.hxx>
#include <svx/sdasitm.hxx>
#include <officecfg/Office/Common.hxx>
@@ -70,101 +70,114 @@
#include <libxml/xmlwriter.h>
#include <sfx2/viewsh.hxx>
#include <o3tl/enumrange.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
+#include <tools/UnitConversion.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <svx/ColorSets.hxx>
+#include <svx/svditer.hxx>
+#include <svx/svdoashp.hxx>
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star;
struct SdrModelImpl
{
SfxUndoManager* mpUndoManager;
SdrUndoFactory* mpUndoFactory;
-
bool mbAnchoredTextOverflowLegacy; // tdf#99729 compatibility flag
+ bool mbLegacyFontwork; // tdf#148000 compatibility flag
+ bool mbConnectorUseSnapRect; // tdf#149756 compatibility flag
+ bool mbIgnoreBreakAfterMultilineField; ///< tdf#148966 compatibility flag
+ std::shared_ptr<model::Theme> mpTheme;
+ std::shared_ptr<svx::IThemeColorChanger> mpThemeColorChanger;
+
+ SdrModelImpl()
+ : mpUndoManager(nullptr)
+ , mpUndoFactory(nullptr)
+ , mbAnchoredTextOverflowLegacy(false)
+ , mbLegacyFontwork(false)
+ , mbConnectorUseSnapRect(false)
+ , mbIgnoreBreakAfterMultilineField(false)
+ , mpTheme(new model::Theme("Office"))
+ {}
+
+ void initTheme()
+ {
+ auto const* pColorSet = svx::ColorSets::get().getColorSet(u"LibreOffice");
+ if (pColorSet)
+ {
+ std::shared_ptr<model::ColorSet> pDefaultColorSet(new model::ColorSet(*pColorSet));
+ mpTheme->setColorSet(pDefaultColorSet);
+ }
+ }
};
-void SdrModel::ImpCtor(
- SfxItemPool* pPool,
- ::comphelper::IEmbeddedHelper* _pEmbeddedHelper,
- bool bDisablePropertyFiles)
-{
- mpImpl.reset(new SdrModelImpl);
- mpImpl->mpUndoManager=nullptr;
- mpImpl->mpUndoFactory=nullptr;
- mpImpl->mbAnchoredTextOverflowLegacy = false;
- mbInDestruction = false;
- m_aObjUnit=SdrEngineDefaults::GetMapFraction();
- m_eObjUnit=SdrEngineDefaults::GetMapUnit();
- m_eUIUnit=FieldUnit::MM;
- m_aUIScale=Fraction(1,1);
- m_nUIUnitDecimalMark=0;
- m_pLayerAdmin=nullptr;
- m_pItemPool=pPool;
- m_bMyPool=false;
- m_pEmbeddedHelper=_pEmbeddedHelper;
- m_pDrawOutliner=nullptr;
- m_pHitTestOutliner=nullptr;
- m_pRefOutDev=nullptr;
- m_pDefaultStyleSheet=nullptr;
- mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = nullptr;
- m_pLinkManager=nullptr;
- m_pUndoStack=nullptr;
- m_pRedoStack=nullptr;
- m_nMaxUndoCount=16;
- m_pCurrentUndoGroup=nullptr;
- m_nUndoLevel=0;
- mbUndoEnabled=true;
- mbChanged = false;
- m_bPagNumsDirty=false;
- m_bMPgNumsDirty=false;
- m_bTransportContainer = false;
- m_bSwapGraphics=false;
- m_bPasteResize=false;
- m_bReadOnly=false;
- m_nDefaultTabulator=0;
- m_bTransparentTextFrames=false;
- m_bStarDrawPreviewMode = false;
- mpForbiddenCharactersTable = nullptr;
- mbModelLocked = false;
- mpOutlinerCache = nullptr;
- mbKernAsianPunctuation = false;
- mbAddExtLeading = false;
- mnHandoutPageCount = 0;
-
- mbDisableTextEditUsesCommonUndoManager = false;
-
- if (!utl::ConfigManager::IsFuzzing())
- mnCharCompressType = static_cast<CharCompressType>(officecfg::Office::Common::AsianLayout::CompressCharacterDistance::
- get());
- else
- mnCharCompressType = CharCompressType::NONE;
-
- if ( pPool == nullptr )
- {
- m_pItemPool=new SdrItemPool(nullptr);
+SdrModel::SdrModel(SfxItemPool* pPool, comphelper::IEmbeddedHelper* pEmbeddedHelper, bool bDisablePropertyFiles)
+ : m_eObjUnit(SdrEngineDefaults::GetMapUnit())
+ , m_eUIUnit(FieldUnit::MM)
+ , m_aUIScale(Fraction(1,1))
+ , m_nUIUnitDecimalMark(0)
+ , m_pLayerAdmin(new SdrLayerAdmin)
+ , m_pItemPool(pPool)
+ , m_pEmbeddedHelper(pEmbeddedHelper)
+ , mnDefTextHgt(SdrEngineDefaults::GetFontHeight())
+ , m_pRefOutDev(nullptr)
+ , m_pDefaultStyleSheet(nullptr)
+ , mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(nullptr)
+ , m_pLinkManager(nullptr)
+ , m_nUndoLevel(0)
+ , m_bIsWriter(true)
+ , m_bThemedControls(true)
+ , mbUndoEnabled(true)
+ , mbChanged(false)
+ , m_bPagNumsDirty(false)
+ , m_bMPgNumsDirty(false)
+ , m_bTransportContainer(false)
+ , m_bReadOnly(false)
+ , m_bTransparentTextFrames(false)
+ , m_bSwapGraphics(false)
+ , m_bPasteResize(false)
+ , m_bStarDrawPreviewMode(false)
+ , mbDisableTextEditUsesCommonUndoManager(false)
+ , mbVOCInvalidationIsReliable(false)
+ , m_nDefaultTabulator(0)
+ , m_nMaxUndoCount(16)
+ , m_pTextChain(new TextChain)
+ , mpImpl(new SdrModelImpl)
+ , mnCharCompressType(CharCompressType::NONE)
+ , mnHandoutPageCount(0)
+ , mbModelLocked(false)
+ , mbKernAsianPunctuation(false)
+ , mbAddExtLeading(false)
+ , mbInDestruction(false)
+{
+ if (!comphelper::IsFuzzing())
+ {
+ mnCharCompressType = static_cast<CharCompressType>(
+ officecfg::Office::Common::AsianLayout::CompressCharacterDistance::get());
+ }
+
+ if (m_pItemPool == nullptr)
+ {
+ m_pItemPool = new SdrItemPool(nullptr);
// Outliner doesn't have its own Pool, so use the EditEngine's
- SfxItemPool* pOutlPool=EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pOutlPool=EditEngine::CreatePool();
// OutlinerPool as SecondaryPool of SdrPool
- m_pItemPool->SetSecondaryPool(pOutlPool);
+ m_pItemPool->SetSecondaryPool(pOutlPool.get());
// remember that I created both pools myself
- m_bMyPool=true;
+ m_bIsWriter = false;
}
m_pItemPool->SetDefaultMetric(m_eObjUnit);
// using static SdrEngineDefaults only if default SvxFontHeight item is not available
- const SfxPoolItem* pPoolItem = m_pItemPool->GetPoolDefaultItem( EE_CHAR_FONTHEIGHT );
- if ( pPoolItem )
+ const SfxPoolItem* pPoolItem = m_pItemPool->GetUserDefaultItem( EE_CHAR_FONTHEIGHT );
+ if (pPoolItem)
mnDefTextHgt = static_cast<const SvxFontHeightItem*>(pPoolItem)->GetHeight();
- else
- mnDefTextHgt = SdrEngineDefaults::GetFontHeight();
- m_pItemPool->SetPoolDefaultItem( makeSdrTextWordWrapItem( false ) );
+ m_pItemPool->SetUserDefaultItem( makeSdrTextWordWrapItem( false ) );
SetTextDefaults();
- m_pLayerAdmin.reset(new SdrLayerAdmin);
m_pLayerAdmin->SetModel(this);
ImpSetUIUnit();
@@ -181,31 +194,13 @@ void SdrModel::ImpCtor(
m_pChainingOutliner = SdrMakeOutliner( OutlinerMode::TextObject, *this );
ImpSetOutlinerDefaults(m_pChainingOutliner.get(), true);
- // Make a TextChain
- m_pTextChain.reset(new TextChain);
- /* End Text Chaining related code */
-
- ImpCreateTables(bDisablePropertyFiles || utl::ConfigManager::IsFuzzing());
-}
+ ImpCreateTables(bDisablePropertyFiles || comphelper::IsFuzzing());
-SdrModel::SdrModel(
- SfxItemPool* pPool,
- ::comphelper::IEmbeddedHelper* pPers,
- bool bDisablePropertyFiles)
-:
-#ifdef DBG_UTIL
- // SdrObjectLifetimeWatchDog:
- maAllIncarnatedObjects(),
-#endif
- maMaPag(),
- maPages()
-{
- ImpCtor(pPool,pPers,bDisablePropertyFiles);
+ mpImpl->initTheme();
}
-SdrModel::~SdrModel()
+void SdrModel::implDtorClearModel()
{
-
mbInDestruction = true;
Broadcast(SdrHint(SdrHintKind::ModelCleared));
@@ -220,19 +215,20 @@ SdrModel::~SdrModel()
m_pCurrentUndoGroup.reset();
ClearModel(true);
+}
+
+SdrModel::~SdrModel()
+{
+ implDtorClearModel();
#ifdef DBG_UTIL
// SdrObjectLifetimeWatchDog:
if(!maAllIncarnatedObjects.empty())
{
- SAL_WARN("svx","SdrModel::~SdrModel: Not all incarnations of SdrObjects deleted, possible memory leak (!)");
- // copy to std::vector - calling SdrObject::Free will change maAllIncarnatedObjects
- const std::vector< const SdrObject* > maRemainingObjects(maAllIncarnatedObjects.begin(), maAllIncarnatedObjects.end());
- for(auto pSdrObject : maRemainingObjects)
- {
- SdrObject* pCandidate(const_cast<SdrObject*>(pSdrObject));
- SdrObject::Free(pCandidate);
- }
+ SAL_WARN("svx",
+ "SdrModel::~SdrModel: Not all incarnations of SdrObjects deleted, possible memory leak");
+ for (const auto & pObj : maAllIncarnatedObjects)
+ SAL_WARN("svx", "leaked instance of " << typeid(*pObj).name());
}
#endif
@@ -249,27 +245,17 @@ SdrModel::~SdrModel()
// the DrawingEngine may need it in its destructor
if( mxStyleSheetPool.is() )
{
- Reference< XComponent > xComponent( dynamic_cast< cppu::OWeakObject* >( mxStyleSheetPool.get() ), UNO_QUERY );
+ uno::Reference<lang::XComponent> xComponent( getXWeak( mxStyleSheetPool.get() ), uno::UNO_QUERY );
if( xComponent.is() ) try
{
xComponent->dispose();
}
- catch( RuntimeException& )
+ catch (uno::RuntimeException&)
{
}
mxStyleSheetPool.clear();
}
- if (m_bMyPool)
- {
- // delete Pools if they're mine
- SfxItemPool* pOutlPool=m_pItemPool->GetSecondaryPool();
- SfxItemPool::Free(m_pItemPool);
- // OutlinerPool has to be deleted after deleting ItemPool, because
- // ItemPool contains SetItems that themselves reference Items from OutlinerPool.
- SfxItemPool::Free(pOutlPool);
- }
-
mpForbiddenCharactersTable.reset();
delete mpImpl->mpUndoFactory;
@@ -295,27 +281,24 @@ void SdrModel::SetMaxUndoActionCount(sal_uInt32 nCount)
{
if (nCount<1) nCount=1;
m_nMaxUndoCount=nCount;
- if (m_pUndoStack) {
- while (m_pUndoStack->size()>m_nMaxUndoCount) {
- m_pUndoStack->pop_back();
- }
- }
+ while (m_aUndoStack.size()>m_nMaxUndoCount)
+ m_aUndoStack.pop_back();
}
void SdrModel::ClearUndoBuffer()
{
- m_pUndoStack.reset();
- m_pRedoStack.reset();
+ m_aUndoStack.clear();
+ m_aRedoStack.clear();
}
bool SdrModel::HasUndoActions() const
{
- return m_pUndoStack && !m_pUndoStack->empty();
+ return !m_aUndoStack.empty();
}
bool SdrModel::HasRedoActions() const
{
- return m_pRedoStack && !m_pRedoStack->empty();
+ return !m_aRedoStack.empty();
}
void SdrModel::Undo()
@@ -328,15 +311,13 @@ void SdrModel::Undo()
{
if(HasUndoActions())
{
- SfxUndoAction* pDo = m_pUndoStack->front().get();
+ SfxUndoAction* pDo = m_aUndoStack.front().get();
const bool bWasUndoEnabled = mbUndoEnabled;
mbUndoEnabled = false;
pDo->Undo();
- if(!m_pRedoStack)
- m_pRedoStack.reset(new std::deque<std::unique_ptr<SfxUndoAction>>);
- std::unique_ptr<SfxUndoAction> p = std::move(m_pUndoStack->front());
- m_pUndoStack->pop_front();
- m_pRedoStack->emplace_front(std::move(p));
+ std::unique_ptr<SfxUndoAction> p = std::move(m_aUndoStack.front());
+ m_aUndoStack.pop_front();
+ m_aRedoStack.emplace_front(std::move(p));
mbUndoEnabled = bWasUndoEnabled;
}
}
@@ -352,15 +333,13 @@ void SdrModel::Redo()
{
if(HasRedoActions())
{
- SfxUndoAction* pDo = m_pRedoStack->front().get();
+ SfxUndoAction* pDo = m_aRedoStack.front().get();
const bool bWasUndoEnabled = mbUndoEnabled;
mbUndoEnabled = false;
pDo->Redo();
- if(!m_pUndoStack)
- m_pUndoStack.reset(new std::deque<std::unique_ptr<SfxUndoAction>>);
- std::unique_ptr<SfxUndoAction> p = std::move(m_pRedoStack->front());
- m_pRedoStack->pop_front();
- m_pUndoStack->emplace_front(std::move(p));
+ std::unique_ptr<SfxUndoAction> p = std::move(m_aRedoStack.front());
+ m_aRedoStack.pop_front();
+ m_aUndoStack.emplace_front(std::move(p));
mbUndoEnabled = bWasUndoEnabled;
}
}
@@ -376,7 +355,7 @@ void SdrModel::Repeat(SfxRepeatTarget& rView)
{
if(HasUndoActions())
{
- SfxUndoAction* pDo = m_pUndoStack->front().get();
+ SfxUndoAction* pDo = m_aUndoStack.front().get();
if(pDo->CanRepeat(rView))
{
pDo->Repeat(rView);
@@ -397,15 +376,12 @@ void SdrModel::ImpPostUndoAction(std::unique_ptr<SdrUndoAction> pUndo)
}
else
{
- if (!m_pUndoStack)
- m_pUndoStack.reset(new std::deque<std::unique_ptr<SfxUndoAction>>);
- m_pUndoStack->emplace_front(std::move(pUndo));
- while (m_pUndoStack->size()>m_nMaxUndoCount)
+ m_aUndoStack.emplace_front(std::move(pUndo));
+ while (m_aUndoStack.size()>m_nMaxUndoCount)
{
- m_pUndoStack->pop_back();
+ m_aUndoStack.pop_back();
}
- if (m_pRedoStack!=nullptr)
- m_pRedoStack->clear();
+ m_aRedoStack.clear();
}
}
@@ -620,7 +596,7 @@ void SdrModel::ClearModel(bool bCalledFromDestructor)
{
DeleteMasterPage( static_cast<sal_uInt16>(i) );
}
- maMaPag.clear();
+ maMasterPages.clear();
MasterPageListChanged();
m_pLayerAdmin->ClearLayers();
@@ -629,18 +605,18 @@ void SdrModel::ClearModel(bool bCalledFromDestructor)
SdrModel* SdrModel::AllocModel() const
{
SdrModel* pModel=new SdrModel();
- pModel->SetScaleUnit(m_eObjUnit,m_aObjUnit);
+ pModel->SetScaleUnit(m_eObjUnit);
return pModel;
}
-SdrPage* SdrModel::AllocPage(bool bMasterPage)
+rtl::Reference<SdrPage> SdrModel::AllocPage(bool bMasterPage)
{
return new SdrPage(*this,bMasterPage);
}
void SdrModel::SetTextDefaults() const
{
- SetTextDefaults( m_pItemPool, mnDefTextHgt );
+ SetTextDefaults( m_pItemPool.get(), mnDefTextHgt );
}
void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
@@ -650,7 +626,7 @@ void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
SvxFontItem aSvxFontItemCJK(EE_CHAR_FONTINFO_CJK);
SvxFontItem aSvxFontItemCTL(EE_CHAR_FONTINFO_CTL);
LanguageType nLanguage;
- if (!utl::ConfigManager::IsFuzzing())
+ if (!comphelper::IsFuzzing())
nLanguage = Application::GetSettings().GetLanguageTag().getLanguageType();
else
nLanguage = LANGUAGE_ENGLISH_US;
@@ -662,7 +638,7 @@ void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
aSvxFontItem.SetStyleName(OUString());
aSvxFontItem.SetPitch( aFont.GetPitch());
aSvxFontItem.SetCharSet( aFont.GetCharSet() );
- pItemPool->SetPoolDefaultItem(aSvxFontItem);
+ pItemPool->SetUserDefaultItem(aSvxFontItem);
// get DEFAULTFONT_CJK_TEXT and set at pool as dynamic default
vcl::Font aFontCJK(OutputDevice::GetDefaultFont(DefaultFontType::CJK_TEXT, nLanguage, GetDefaultFontFlags::OnlyOne));
@@ -671,7 +647,7 @@ void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
aSvxFontItemCJK.SetStyleName(OUString());
aSvxFontItemCJK.SetPitch( aFontCJK.GetPitch());
aSvxFontItemCJK.SetCharSet( aFontCJK.GetCharSet());
- pItemPool->SetPoolDefaultItem(aSvxFontItemCJK);
+ pItemPool->SetUserDefaultItem(aSvxFontItemCJK);
// get DEFAULTFONT_CTL_TEXT and set at pool as dynamic default
vcl::Font aFontCTL(OutputDevice::GetDefaultFont(DefaultFontType::CTL_TEXT, nLanguage, GetDefaultFontFlags::OnlyOne));
@@ -680,15 +656,15 @@ void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
aSvxFontItemCTL.SetStyleName(OUString());
aSvxFontItemCTL.SetPitch( aFontCTL.GetPitch() );
aSvxFontItemCTL.SetCharSet( aFontCTL.GetCharSet());
- pItemPool->SetPoolDefaultItem(aSvxFontItemCTL);
+ pItemPool->SetUserDefaultItem(aSvxFontItemCTL);
// set dynamic FontHeight defaults
- pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT ) );
- pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CJK ) );
- pItemPool->SetPoolDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CTL ) );
+ pItemPool->SetUserDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT ) );
+ pItemPool->SetUserDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CJK ) );
+ pItemPool->SetUserDefaultItem( SvxFontHeightItem(nDefTextHgt, 100, EE_CHAR_FONTHEIGHT_CTL ) );
// set FontColor defaults
- pItemPool->SetPoolDefaultItem( SvxColorItem(SdrEngineDefaults::GetFontColor(), EE_CHAR_COLOR) );
+ pItemPool->SetUserDefaultItem( SvxColorItem(SdrEngineDefaults::GetFontColor(), EE_CHAR_COLOR) );
}
SdrOutliner& SdrModel::GetDrawOutliner(const SdrTextObj* pObj) const
@@ -717,8 +693,8 @@ void SdrModel::ImpSetOutlinerDefaults( SdrOutliner* pOutliner, bool bInit )
if( bInit )
{
pOutliner->EraseVirtualDevice();
- pOutliner->SetUpdateMode(false);
- pOutliner->SetEditTextObjectPool(m_pItemPool);
+ pOutliner->SetUpdateLayout(false);
+ pOutliner->SetEditTextObjectPool(m_pItemPool.get());
pOutliner->SetDefTab(m_nDefaultTabulator);
}
@@ -730,7 +706,7 @@ void SdrModel::ImpSetOutlinerDefaults( SdrOutliner* pOutliner, bool bInit )
if ( !GetRefDevice() )
{
- MapMode aMapMode(m_eObjUnit, Point(0,0), m_aObjUnit, m_aObjUnit);
+ MapMode aMapMode(m_eObjUnit);
pOutliner->SetRefMapMode(aMapMode);
}
}
@@ -866,94 +842,31 @@ void SdrModel::ImpSetUIUnit()
m_aUIScale = Fraction(1,1);
}
- // set start values
m_nUIUnitDecimalMark = 0;
- sal_Int64 nMul(1);
- sal_Int64 nDiv(1);
-
- // normalize on meters resp. inch
- switch (m_eObjUnit)
- {
- case MapUnit::Map100thMM : m_nUIUnitDecimalMark+=5; break;
- case MapUnit::Map10thMM : m_nUIUnitDecimalMark+=4; break;
- case MapUnit::MapMM : m_nUIUnitDecimalMark+=3; break;
- case MapUnit::MapCM : m_nUIUnitDecimalMark+=2; break;
- case MapUnit::Map1000thInch: m_nUIUnitDecimalMark+=3; break;
- case MapUnit::Map100thInch : m_nUIUnitDecimalMark+=2; break;
- case MapUnit::Map10thInch : m_nUIUnitDecimalMark+=1; break;
- case MapUnit::MapInch : m_nUIUnitDecimalMark+=0; break;
- case MapUnit::MapPoint : nDiv=72; break; // 1Pt = 1/72"
- case MapUnit::MapTwip : nDiv=144; m_nUIUnitDecimalMark++; break; // 1Twip = 1/1440"
- case MapUnit::MapPixel : break;
- case MapUnit::MapSysFont : break;
- case MapUnit::MapAppFont : break;
- case MapUnit::MapRelative : break;
- default: break;
- } // switch
- // 1 mile = 8 furlong = 63.360" = 1.609.344,0mm
- // 1 furlong = 10 chains = 7.920" = 201.168,0mm
- // 1 chain = 4 poles = 792" = 20.116,8mm
- // 1 pole = 5 1/2 yd = 198" = 5.029,2mm
- // 1 yd = 3 ft = 36" = 914,4mm
- // 1 ft = 12 " = 1" = 304,8mm
+ o3tl::Length eFrom = MapToO3tlLength(m_eObjUnit, o3tl::Length::invalid);
+ o3tl::Length eTo;
+
switch (m_eUIUnit)
{
- case FieldUnit::NONE : break;
- // metric
- case FieldUnit::MM_100TH: m_nUIUnitDecimalMark-=5; break;
- case FieldUnit::MM : m_nUIUnitDecimalMark-=3; break;
- case FieldUnit::CM : m_nUIUnitDecimalMark-=2; break;
- case FieldUnit::M : m_nUIUnitDecimalMark+=0; break;
- case FieldUnit::KM : m_nUIUnitDecimalMark+=3; break;
- // Inch
- case FieldUnit::TWIP : nMul=144; m_nUIUnitDecimalMark--; break; // 1Twip = 1/1440"
- case FieldUnit::POINT : nMul=72; break; // 1Pt = 1/72"
- case FieldUnit::PICA : nMul=6; break; // 1Pica = 1/6"
- case FieldUnit::INCH : break; // 1" = 1"
- case FieldUnit::FOOT : nDiv*=12; break; // 1Ft = 12"
- case FieldUnit::MILE : nDiv*=6336; m_nUIUnitDecimalMark++; break; // 1mile = 63360"
- // other
- case FieldUnit::CUSTOM : break;
- case FieldUnit::PERCENT: m_nUIUnitDecimalMark+=2; break;
- // TODO: Add code to handle the following if needed (added to remove warning)
- case FieldUnit::CHAR : break;
- case FieldUnit::LINE : break;
- case FieldUnit::PIXEL : break;
- case FieldUnit::DEGREE : break;
- case FieldUnit::SECOND : break;
- case FieldUnit::MILLISECOND : break;
+ case FieldUnit::CHAR:
+ case FieldUnit::LINE:
+ eTo = o3tl::Length::invalid;
+ break;
+ case FieldUnit::PERCENT:
+ m_nUIUnitDecimalMark += 2;
+ [[fallthrough]];
+ default:
+ eTo = FieldToO3tlLength(m_eUIUnit, o3tl::Length::invalid);
} // switch
- // check if mapping is from metric to inch and adapt
- const bool bMapInch(IsInch(m_eObjUnit));
- const bool bUIMetr(IsMetric(m_eUIUnit));
-
- if (bMapInch && bUIMetr)
- {
- m_nUIUnitDecimalMark += 4;
- nMul *= 254;
- }
-
- // check if mapping is from inch to metric and adapt
- const bool bMapMetr(IsMetric(m_eObjUnit));
- const bool bUIInch(IsInch(m_eUIUnit));
-
- if (bMapMetr && bUIInch)
+ sal_Int32 nMul = 1, nDiv = 1;
+ if (eFrom != o3tl::Length::invalid && eTo != o3tl::Length::invalid)
{
- m_nUIUnitDecimalMark -= 4;
- nDiv *= 254;
+ const auto& [mul, div] = o3tl::getConversionMulDiv(eFrom, eTo);
+ nMul = mul;
+ nDiv = div;
}
-
- // use temporary fraction for reduction (fallback to 32bit here),
- // may need to be changed in the future, too
- if(1 != nMul || 1 != nDiv)
- {
- const Fraction aTemp(static_cast< tools::Long >(nMul), static_cast< tools::Long >(nDiv));
- nMul = aTemp.GetNumerator();
- nDiv = aTemp.GetDenominator();
- }
-
// #i89872# take Unit of Measurement into account
if(1 != m_aUIScale.GetDenominator() || 1 != m_aUIScale.GetNumerator())
{
@@ -981,19 +894,6 @@ void SdrModel::ImpSetUIUnit()
m_aUIUnitStr = GetUnitString(m_eUIUnit);
}
-void SdrModel::SetScaleUnit(MapUnit eMap, const Fraction& rFrac)
-{
- if (m_eObjUnit!=eMap || m_aObjUnit!=rFrac) {
- m_eObjUnit=eMap;
- m_aObjUnit=rFrac;
- m_pItemPool->SetDefaultMetric(m_eObjUnit);
- ImpSetUIUnit();
- ImpSetOutlinerDefaults( m_pDrawOutliner.get() );
- ImpSetOutlinerDefaults( m_pHitTestOutliner.get() );
- ImpReformatAllTextObjects();
- }
-}
-
void SdrModel::SetScaleUnit(MapUnit eMap)
{
if (m_eObjUnit!=eMap) {
@@ -1006,17 +906,6 @@ void SdrModel::SetScaleUnit(MapUnit eMap)
}
}
-void SdrModel::SetScaleFraction(const Fraction& rFrac)
-{
- if (m_aObjUnit!=rFrac) {
- m_aObjUnit=rFrac;
- ImpSetUIUnit();
- ImpSetOutlinerDefaults( m_pDrawOutliner.get() );
- ImpSetOutlinerDefaults( m_pHitTestOutliner.get() );
- ImpReformatAllTextObjects();
- }
-}
-
void SdrModel::SetUIUnit(FieldUnit eUnit)
{
if (m_eUIUnit!=eUnit) {
@@ -1118,8 +1007,7 @@ OUString SdrModel::GetMetricString(tools::Long nVal, bool bNoUnitChars, sal_Int3
nDecimalMark = nNumDigits;
}
- OUStringBuffer aBuf;
- aBuf.append(static_cast<sal_Int32>(fLocalValue + 0.5));
+ OUStringBuffer aBuf = OUString::number(static_cast<sal_Int32>(fLocalValue + 0.5));
if(nDecimalMark < 0)
{
@@ -1267,10 +1155,10 @@ void SdrModel::RecalcPageNums(bool bMaster)
{
if(bMaster)
{
- sal_uInt16 nCount=sal_uInt16(maMaPag.size());
+ sal_uInt16 nCount=sal_uInt16(maMasterPages.size());
sal_uInt16 i;
for (i=0; i<nCount; i++) {
- SdrPage* pPg=maMaPag[i];
+ SdrPage* pPg = maMasterPages[i].get();
pPg->SetPageNum(i);
}
m_bMPgNumsDirty=false;
@@ -1280,7 +1168,7 @@ void SdrModel::RecalcPageNums(bool bMaster)
sal_uInt16 nCount=sal_uInt16(maPages.size());
sal_uInt16 i;
for (i=0; i<nCount; i++) {
- SdrPage* pPg=maPages[i];
+ SdrPage* pPg = maPages[i].get();
pPg->SetPageNum(i);
}
m_bPagNumsDirty=false;
@@ -1289,9 +1177,11 @@ void SdrModel::RecalcPageNums(bool bMaster)
void SdrModel::InsertPage(SdrPage* pPage, sal_uInt16 nPos)
{
- sal_uInt16 nCount=GetPageCount();
- if (nPos>nCount) nPos=nCount;
- maPages.insert(maPages.begin()+nPos,pPage);
+ sal_uInt16 nCount = GetPageCount();
+ if (nPos > nCount)
+ nPos = nCount;
+
+ maPages.insert(maPages.begin() + nPos, pPage);
PageListChanged();
pPage->SetInserted();
pPage->SetPageNum(nPos);
@@ -1307,33 +1197,32 @@ void SdrModel::InsertPage(SdrPage* pPage, sal_uInt16 nPos)
void SdrModel::DeletePage(sal_uInt16 nPgNum)
{
- SdrPage* pPg=RemovePage(nPgNum);
- delete pPg;
+ RemovePage(nPgNum);
}
-SdrPage* SdrModel::RemovePage(sal_uInt16 nPgNum)
+rtl::Reference<SdrPage> SdrModel::RemovePage(sal_uInt16 nPgNum)
{
- SdrPage* pPg=maPages[nPgNum];
+ rtl::Reference<SdrPage> pPg = maPages[nPgNum];
maPages.erase(maPages.begin()+nPgNum);
PageListChanged();
- if (pPg!=nullptr) {
+ if (pPg) {
pPg->SetInserted(false);
}
m_bPagNumsDirty=true;
SetChanged();
- SdrHint aHint(SdrHintKind::PageOrderChange, pPg);
+ SdrHint aHint(SdrHintKind::PageOrderChange, pPg.get());
Broadcast(aHint);
return pPg;
}
void SdrModel::MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos)
{
- SdrPage* pPg=maPages[nPgNum];
- if (pPg!=nullptr) {
+ rtl::Reference<SdrPage> pPg = std::move(maPages[nPgNum]);
+ if (pPg) {
maPages.erase(maPages.begin()+nPgNum); // shortcut to avoid two broadcasts
PageListChanged();
pPg->SetInserted(false);
- InsertPage(pPg,nNewPos);
+ InsertPage(pPg.get(), nNewPos);
}
else
RemovePage(nPgNum);
@@ -1343,7 +1232,7 @@ void SdrModel::InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos)
{
sal_uInt16 nCount=GetMasterPageCount();
if (nPos>nCount) nPos=nCount;
- maMaPag.insert(maMaPag.begin()+nPos,pPage);
+ maMasterPages.insert(maMasterPages.begin()+nPos,pPage);
MasterPageListChanged();
pPage->SetInserted();
pPage->SetPageNum(nPos);
@@ -1359,14 +1248,13 @@ void SdrModel::InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos)
void SdrModel::DeleteMasterPage(sal_uInt16 nPgNum)
{
- SdrPage* pPg=RemoveMasterPage(nPgNum);
- delete pPg;
+ RemoveMasterPage(nPgNum);
}
-SdrPage* SdrModel::RemoveMasterPage(sal_uInt16 nPgNum)
+rtl::Reference<SdrPage> SdrModel::RemoveMasterPage(sal_uInt16 nPgNum)
{
- SdrPage* pRetPg=maMaPag[nPgNum];
- maMaPag.erase(maMaPag.begin()+nPgNum);
+ rtl::Reference<SdrPage> pRetPg = std::move(maMasterPages[nPgNum]);
+ maMasterPages.erase(maMasterPages.begin()+nPgNum);
MasterPageListChanged();
if(pRetPg)
@@ -1384,24 +1272,24 @@ SdrPage* SdrModel::RemoveMasterPage(sal_uInt16 nPgNum)
m_bMPgNumsDirty=true;
SetChanged();
- SdrHint aHint(SdrHintKind::PageOrderChange, pRetPg);
+ SdrHint aHint(SdrHintKind::PageOrderChange, pRetPg.get());
Broadcast(aHint);
return pRetPg;
}
void SdrModel::MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos)
{
- SdrPage* pPg=maMaPag[nPgNum];
- maMaPag.erase(maMaPag.begin()+nPgNum);
+ rtl::Reference<SdrPage> pPg = std::move(maMasterPages[nPgNum]);
+ maMasterPages.erase(maMasterPages.begin()+nPgNum);
MasterPageListChanged();
- if (pPg!=nullptr) {
+ if (pPg) {
pPg->SetInserted(false);
- maMaPag.insert(maMaPag.begin()+nNewPos,pPg);
+ maMasterPages.insert(maMasterPages.begin()+nNewPos,pPg);
MasterPageListChanged();
}
m_bMPgNumsDirty=true;
SetChanged();
- SdrHint aHint(SdrHintKind::PageOrderChange, pPg);
+ SdrHint aHint(SdrHintKind::PageOrderChange, pPg.get());
Broadcast(aHint);
}
@@ -1447,7 +1335,7 @@ void SdrModel::CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
sal_uInt16 nDestNum=nDestPos;
for (nCopyNum=0; nCopyNum<nCopyCnt; nCopyNum++)
{
- SdrPage* pPg=pPagePtrs[nCopyNum];
+ rtl::Reference<SdrPage> pPg = pPagePtrs[nCopyNum];
sal_uInt16 nPageNum2=pPg->GetPageNum();
if (!bMoveNoCopy)
{
@@ -1456,7 +1344,7 @@ void SdrModel::CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
// Clone to local model
pPg = pPg1->CloneSdrPage(*this);
- InsertPage(pPg,nDestNum);
+ InsertPage(pPg.get(), nDestNum);
if (bUndo)
AddUndo(GetSdrUndoFactory().CreateUndoCopyPage(*pPg));
nDestNum++;
@@ -1471,7 +1359,7 @@ void SdrModel::CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*GetPage(nPageNum2),nPageNum2,nDestNum));
pPg=RemovePage(nPageNum2);
- InsertPage(pPg,nDestNum);
+ InsertPage(pPg.get(), nDestNum);
nDestNum++;
}
@@ -1560,19 +1448,19 @@ void SdrModel::Merge(SdrModel& rSourceModel,
{
// Always Clone to new model
const SdrPage* pPg1(rSourceModel.GetMasterPage(i));
- SdrPage* pPg(pPg1->CloneSdrPage(*this));
+ rtl::Reference<SdrPage> pPg = pPg1->CloneSdrPage(*this);
if(!bTreadSourceAsConst)
{
// if requested, delete original/modify original model
- delete rSourceModel.RemoveMasterPage(i);
+ rSourceModel.RemoveMasterPage(i);
}
if (pPg!=nullptr) {
// Now append all of them to the end of the DstModel.
// Don't use InsertMasterPage(), because everything is
// inconsistent until all are in.
- maMaPag.insert(maMaPag.begin()+nDstMasterPageCnt, pPg);
+ maMasterPages.insert(maMasterPages.begin()+nDstMasterPageCnt, pPg);
MasterPageListChanged();
pPg->SetInserted();
m_bMPgNumsDirty=true;
@@ -1593,16 +1481,16 @@ void SdrModel::Merge(SdrModel& rSourceModel,
{
// Always Clone to new model
const SdrPage* pPg1(rSourceModel.GetPage(nSourcePos));
- SdrPage* pPg(pPg1->CloneSdrPage(*this));
+ rtl::Reference<SdrPage> pPg = pPg1->CloneSdrPage(*this);
if(!bTreadSourceAsConst)
{
// if requested, delete original/modify original model
- delete rSourceModel.RemovePage(nSourcePos);
+ rSourceModel.RemovePage(nSourcePos);
}
if (pPg!=nullptr) {
- InsertPage(pPg,nDestPos);
+ InsertPage(pPg.get(),nDestPos);
if (bUndo) AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pPg));
if(pPg->TRG_HasMasterPage())
@@ -1680,7 +1568,17 @@ void SdrModel::SetStarDrawPreviewMode(bool bPreview)
}
}
-uno::Reference< uno::XInterface > const & SdrModel::getUnoModel()
+void SdrModel::setTheme(std::shared_ptr<model::Theme> const& pTheme)
+{
+ mpImpl->mpTheme = pTheme;
+}
+
+std::shared_ptr<model::Theme> const& SdrModel::getTheme() const
+{
+ return mpImpl->mpTheme;
+}
+
+uno::Reference< frame::XModel > const & SdrModel::getUnoModel()
{
if( !mxUnoModel.is() )
mxUnoModel = createUnoModel();
@@ -1688,7 +1586,7 @@ uno::Reference< uno::XInterface > const & SdrModel::getUnoModel()
return mxUnoModel;
}
-void SdrModel::setUnoModel( const css::uno::Reference< css::uno::XInterface >& xModel )
+void SdrModel::setUnoModel(const uno::Reference<frame::XModel>& xModel)
{
mxUnoModel = xModel;
}
@@ -1705,11 +1603,10 @@ void SdrModel::adaptSizeAndBorderForAllPages(
// to do this for higher-level (derived) Models (e.g. Draw/Impress)
}
-uno::Reference< uno::XInterface > SdrModel::createUnoModel()
+uno::Reference< frame::XModel > SdrModel::createUnoModel()
{
OSL_FAIL( "SdrModel::createUnoModel() - base implementation should not be called!" );
- css::uno::Reference< css::uno::XInterface > xInt;
- return xInt;
+ return nullptr;
}
void SdrModel::setLock( bool bLock )
@@ -1739,7 +1636,7 @@ void SdrModel::MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSe
while(nWhich)
{
- if(SfxItemState::SET == pSourceSet->GetItemState(nWhich, false, &pPoolItem))
+ if(SfxItemState::SET == aWhichIter.GetItemState(false, &pPoolItem))
{
std::unique_ptr<SfxPoolItem> pResultItem;
@@ -1771,10 +1668,7 @@ void SdrModel::MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSe
// set item
if( pResultItem )
- {
- pDestSet->Put(*pResultItem);
- pResultItem.reset();
- }
+ pDestSet->Put(std::move(pResultItem));
else
pDestSet->Put(*pPoolItem);
}
@@ -1822,14 +1716,40 @@ void SdrModel::SetAddExtLeading( bool bEnabled )
}
}
-void SdrModel::SetAnchoredTextOverflowLegacy(bool bEnabled)
+void SdrModel::SetCompatibilityFlag(SdrCompatibilityFlag eFlag, bool bEnabled)
{
- mpImpl->mbAnchoredTextOverflowLegacy = bEnabled;
+ switch (eFlag)
+ {
+ case SdrCompatibilityFlag::AnchoredTextOverflowLegacy:
+ mpImpl->mbAnchoredTextOverflowLegacy = bEnabled;
+ break;
+ case SdrCompatibilityFlag::LegacyFontwork:
+ mpImpl->mbLegacyFontwork = bEnabled;
+ break;
+ case SdrCompatibilityFlag::ConnectorUseSnapRect:
+ mpImpl->mbConnectorUseSnapRect = bEnabled;
+ break;
+ case SdrCompatibilityFlag::IgnoreBreakAfterMultilineField:
+ mpImpl->mbIgnoreBreakAfterMultilineField = bEnabled;
+ break;
+ }
}
-bool SdrModel::IsAnchoredTextOverflowLegacy() const
+bool SdrModel::GetCompatibilityFlag(SdrCompatibilityFlag eFlag) const
{
- return mpImpl->mbAnchoredTextOverflowLegacy;
+ switch (eFlag)
+ {
+ case SdrCompatibilityFlag::AnchoredTextOverflowLegacy:
+ return mpImpl->mbAnchoredTextOverflowLegacy;
+ case SdrCompatibilityFlag::LegacyFontwork:
+ return mpImpl->mbLegacyFontwork;
+ case SdrCompatibilityFlag::ConnectorUseSnapRect:
+ return mpImpl->mbConnectorUseSnapRect;
+ case SdrCompatibilityFlag::IgnoreBreakAfterMultilineField:
+ return mpImpl->mbIgnoreBreakAfterMultilineField;
+ default:
+ return false;
+ }
}
void SdrModel::ReformatAllTextObjects()
@@ -1865,7 +1785,7 @@ SvxNumType SdrModel::GetPageNumType() const
return SVX_NUM_ARABIC;
}
-void SdrModel::ReadUserDataSequenceValue(const css::beans::PropertyValue* pValue)
+void SdrModel::ReadUserDataSequenceValue(const beans::PropertyValue* pValue)
{
if (pValue->Name == "AnchoredTextOverflowLegacy")
{
@@ -1875,23 +1795,64 @@ void SdrModel::ReadUserDataSequenceValue(const css::beans::PropertyValue* pValue
mpImpl->mbAnchoredTextOverflowLegacy = bBool;
}
}
+ else if (pValue->Name == "ConnectorUseSnapRect")
+ {
+ bool bBool = false;
+ if (pValue->Value >>= bBool)
+ {
+ mpImpl->mbConnectorUseSnapRect = bBool;
+ }
+ }
+ else if (pValue->Name == "LegacySingleLineFontwork")
+ {
+ bool bBool = false;
+ if ((pValue->Value >>= bBool) && mpImpl->mbLegacyFontwork != bBool)
+ {
+ mpImpl->mbLegacyFontwork = bBool;
+ // tdf#148000 hack: reset all CustomShape geometry as they may depend on this property
+ // Ideally this ReadUserDataSequenceValue should be called before geometry creation
+ // Once the calling order will be fixed, this hack will not be needed.
+ for (size_t i = 0; i < maPages.size(); ++i)
+ {
+ if (const SdrPage* pPage = maPages[i].get())
+ {
+ SdrObjListIter aIter(pPage, SdrIterMode::DeepWithGroups);
+ while (aIter.IsMore())
+ {
+ SdrObject* pTempObj = aIter.Next();
+ if (SdrObjCustomShape* pShape = dynamic_cast<SdrObjCustomShape*>(pTempObj))
+ {
+ pShape->InvalidateRenderGeometry();
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (pValue->Name == "IgnoreBreakAfterMultilineField")
+ {
+ bool bBool = false;
+ if (pValue->Value >>= bBool)
+ {
+ mpImpl->mbIgnoreBreakAfterMultilineField = bBool;
+ }
+ }
}
-template <typename T>
-static void addPair(std::vector< std::pair< OUString, Any > >& aUserData, const OUString& name, const T val)
-{
- aUserData.push_back(std::pair< OUString, Any >(name, css::uno::makeAny(val)));
-}
-
-void SdrModel::WriteUserDataSequence(css::uno::Sequence < css::beans::PropertyValue >& rValues)
+void SdrModel::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rValues)
{
- std::vector< std::pair< OUString, Any > > aUserData;
- addPair(aUserData, "AnchoredTextOverflowLegacy", IsAnchoredTextOverflowLegacy());
+ std::vector< std::pair< OUString, uno::Any > > aUserData
+ {
+ { "AnchoredTextOverflowLegacy", uno::Any(GetCompatibilityFlag(SdrCompatibilityFlag::AnchoredTextOverflowLegacy)) },
+ { "LegacySingleLineFontwork", uno::Any(GetCompatibilityFlag(SdrCompatibilityFlag::LegacyFontwork)) },
+ { "ConnectorUseSnapRect", uno::Any(GetCompatibilityFlag(SdrCompatibilityFlag::ConnectorUseSnapRect)) },
+ { "IgnoreBreakAfterMultilineField", uno::Any(GetCompatibilityFlag(SdrCompatibilityFlag::IgnoreBreakAfterMultilineField)) }
+ };
const sal_Int32 nOldLength = rValues.getLength();
rValues.realloc(nOldLength + aUserData.size());
- css::beans::PropertyValue* pValue = &(rValues.getArray()[nOldLength]);
+ beans::PropertyValue* pValue = &(rValues.getArray()[nOldLength]);
for (const auto &aIter : aUserData)
{
@@ -1903,14 +1864,12 @@ void SdrModel::WriteUserDataSequence(css::uno::Sequence < css::beans::PropertyVa
const SdrPage* SdrModel::GetPage(sal_uInt16 nPgNum) const
{
- DBG_ASSERT(nPgNum < maPages.size(), "SdrModel::GetPage: Access out of range (!)");
- return nPgNum < maPages.size() ? maPages[nPgNum] : nullptr;
+ return nPgNum < maPages.size() ? maPages[nPgNum].get() : nullptr;
}
SdrPage* SdrModel::GetPage(sal_uInt16 nPgNum)
{
- DBG_ASSERT(nPgNum < maPages.size(), "SdrModel::GetPage: Access out of range (!)");
- return nPgNum < maPages.size() ? maPages[nPgNum] : nullptr;
+ return nPgNum < maPages.size() ? maPages[nPgNum].get() : nullptr;
}
sal_uInt16 SdrModel::GetPageCount() const
@@ -1929,19 +1888,19 @@ TextChain *SdrModel::GetTextChain() const
const SdrPage* SdrModel::GetMasterPage(sal_uInt16 nPgNum) const
{
- DBG_ASSERT(nPgNum < maMaPag.size(), "SdrModel::GetMasterPage: Access out of range (!)");
- return maMaPag[nPgNum];
+ DBG_ASSERT(nPgNum < maMasterPages.size(), "SdrModel::GetMasterPage: Access out of range (!)");
+ return maMasterPages[nPgNum].get();
}
SdrPage* SdrModel::GetMasterPage(sal_uInt16 nPgNum)
{
- DBG_ASSERT(nPgNum < maMaPag.size(), "SdrModel::GetMasterPage: Access out of range (!)");
- return maMaPag[nPgNum];
+ DBG_ASSERT(nPgNum < maMasterPages.size(), "SdrModel::GetMasterPage: Access out of range (!)");
+ return maMasterPages[nPgNum].get();
}
sal_uInt16 SdrModel::GetMasterPageCount() const
{
- return sal_uInt16(maMaPag.size());
+ return sal_uInt16(maMasterPages.size());
}
void SdrModel::MasterPageListChanged()
@@ -1976,27 +1935,41 @@ void SdrModel::SetSdrUndoFactory( SdrUndoFactory* pUndoFactory )
void SdrModel::dumpAsXml(xmlTextWriterPtr pWriter) const
{
- xmlTextWriterStartElement(pWriter, BAD_CAST("SdrModel"));
- xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
+ (void)xmlTextWriterStartElement(pWriter, BAD_CAST("SdrModel"));
+ (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
- sal_uInt16 nPageCount = GetPageCount();
- for (sal_uInt16 i = 0; i < nPageCount; ++i)
+ (void)xmlTextWriterStartElement(pWriter, BAD_CAST("maMasterPages"));
+ for (size_t i = 0; i < maMasterPages.size(); ++i)
{
- if (const SdrPage* pPage = GetPage(i))
+ if (const SdrPage* pPage = maMasterPages[i].get())
+ {
pPage->dumpAsXml(pWriter);
+ }
}
+ (void)xmlTextWriterEndElement(pWriter);
- xmlTextWriterEndElement(pWriter);
-}
+ (void)xmlTextWriterStartElement(pWriter, BAD_CAST("maPages"));
+ for (size_t i = 0; i < maPages.size(); ++i)
+ {
+ if (const SdrPage* pPage = maPages[i].get())
+ {
+ pPage->dumpAsXml(pWriter);
+ }
+ }
+ (void)xmlTextWriterEndElement(pWriter);
-namespace
-{
- class theSdrModelUnoTunnelImplementationId : public rtl::Static< UnoTunnelIdInit, theSdrModelUnoTunnelImplementationId > {};
+ if (mpImpl->mpTheme)
+ {
+ mpImpl->mpTheme->dumpAsXml(pWriter);
+ }
+
+ (void)xmlTextWriterEndElement(pWriter);
}
-const css::uno::Sequence< sal_Int8 >& SdrModel::getUnoTunnelId()
+const uno::Sequence<sal_Int8>& SdrModel::getUnoTunnelId()
{
- return theSdrModelUnoTunnelImplementationId::get().getSeq();
+ static const comphelper::UnoIdInit theSdrModelUnoTunnelImplementationId;
+ return theSdrModelUnoTunnelImplementationId.getSeq();
}