summaryrefslogtreecommitdiffstats
path: root/sw/source/core/doc/poolfmt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/doc/poolfmt.cxx')
-rw-r--r--sw/source/core/doc/poolfmt.cxx308
1 files changed, 308 insertions, 0 deletions
diff --git a/sw/source/core/doc/poolfmt.cxx b/sw/source/core/doc/poolfmt.cxx
new file mode 100644
index 000000000..d061db873
--- /dev/null
+++ b/sw/source/core/doc/poolfmt.cxx
@@ -0,0 +1,308 @@
+/* -*- 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 .
+ */
+
+#include <hintids.hxx>
+#include <i18nlangtag/mslangid.hxx>
+#include <editeng/boxitem.hxx>
+#include <editeng/frmdiritem.hxx>
+#include <osl/diagnose.h>
+#include <doc.hxx>
+#include <IDocumentState.hxx>
+#include <IDocumentStylePoolAccess.hxx>
+#include <IDocumentListsAccess.hxx>
+#include <list.hxx>
+#include <poolfmt.hxx>
+#include <pagedesc.hxx>
+#include <fmtcol.hxx>
+#include <numrule.hxx>
+#include <swtable.hxx>
+#include <tblafmt.hxx>
+#include <hints.hxx>
+
+using namespace ::editeng;
+using namespace ::com::sun::star;
+
+void SetAllScriptItem( SfxItemSet& rSet, const SfxPoolItem& rItem )
+{
+ rSet.Put( rItem );
+ sal_uInt16 nWhCJK = 0, nWhCTL = 0;
+ switch( rItem.Which() )
+ {
+ case RES_CHRATR_FONTSIZE:
+ nWhCJK = RES_CHRATR_CJK_FONTSIZE;
+ nWhCTL = RES_CHRATR_CTL_FONTSIZE;
+ break;
+ case RES_CHRATR_FONT:
+ nWhCJK = RES_CHRATR_CJK_FONT;
+ nWhCTL = RES_CHRATR_CTL_FONT;
+ break;
+ case RES_CHRATR_LANGUAGE:
+ nWhCJK = RES_CHRATR_CJK_LANGUAGE;
+ nWhCTL = RES_CHRATR_CTL_LANGUAGE;
+ break;
+ case RES_CHRATR_POSTURE:
+ nWhCJK = RES_CHRATR_CJK_POSTURE;
+ nWhCTL = RES_CHRATR_CTL_POSTURE;
+ break;
+ case RES_CHRATR_WEIGHT:
+ nWhCJK = RES_CHRATR_CJK_WEIGHT;
+ nWhCTL = RES_CHRATR_CTL_WEIGHT;
+ break;
+ }
+
+ if( nWhCJK )
+ rSet.Put( rItem.CloneSetWhich(nWhCJK) );
+ if( nWhCTL )
+ rSet.Put( rItem.CloneSetWhich(nWhCTL) );
+}
+
+/// Return the AutoCollection by its Id. If it doesn't
+/// exist yet, create it.
+/// If the String pointer is defined, then only query for
+/// the Attribute descriptions. It doesn't create a style!
+SvxFrameDirection GetDefaultFrameDirection(LanguageType nLanguage)
+{
+ return MsLangId::isRightToLeft(nLanguage) ?
+ SvxFrameDirection::Horizontal_RL_TB : SvxFrameDirection::Horizontal_LR_TB;
+}
+
+// See if the Paragraph/Character/Frame/Page style is in use
+bool SwDoc::IsUsed( const sw::BroadcastingModify& rModify ) const
+{
+ // Check if we have dependent ContentNodes in the Nodes array
+ // (also indirect ones for derived Formats)
+ SwAutoFormatGetDocNode aGetHt( &GetNodes() );
+ return !rModify.GetInfo( aGetHt );
+}
+
+// See if Table style is in use
+bool SwDoc::IsUsed( const SwTableAutoFormat& rTableAutoFormat) const
+{
+ size_t nTableCount = GetTableFrameFormatCount(true);
+ for (size_t i=0; i < nTableCount; ++i)
+ {
+ SwFrameFormat* pFrameFormat = &GetTableFrameFormat(i, true);
+ SwTable* pTable = SwTable::FindTable(pFrameFormat);
+ if (pTable->GetTableStyleName() == rTableAutoFormat.GetName())
+ return true;
+ }
+ return false;
+}
+
+// See if the NumRule is used
+bool SwDoc::IsUsed( const SwNumRule& rRule )
+{
+ SwList const*const pList(getIDocumentListsAccess().getListByName(rRule.GetDefaultListId()));
+ bool bUsed = rRule.GetTextNodeListSize() > 0 ||
+ rRule.GetParagraphStyleListSize() > 0 ||
+ rRule.IsUsedByRedline()
+ // tdf#135014 default num rule is used if any associated num rule is used
+ || (pList
+ && pList->GetDefaultListStyleName() == rRule.GetName()
+ && pList->HasNodes());
+
+ return bUsed;
+}
+
+const OUString* SwDoc::GetDocPattern(size_t const nPos) const
+{
+ if (nPos >= m_PatternNames.size())
+ return nullptr;
+ return &m_PatternNames[nPos];
+}
+
+// Look for the style name's position. If it doesn't exist,
+// insert an anew
+size_t SwDoc::SetDocPattern(const OUString& rPatternName)
+{
+ OSL_ENSURE( !rPatternName.isEmpty(), "no Document style name" );
+
+ auto const iter(
+ std::find(m_PatternNames.begin(), m_PatternNames.end(), rPatternName));
+ if (iter != m_PatternNames.end())
+ {
+ return std::distance(m_PatternNames.begin(), iter);
+ }
+ else
+ {
+ m_PatternNames.push_back(rPatternName);
+ getIDocumentState().SetModified();
+ return m_PatternNames.size() - 1;
+ }
+}
+
+sal_uInt16 GetPoolParent( sal_uInt16 nId )
+{
+ sal_uInt16 nRet = USHRT_MAX;
+ if( POOLGRP_NOCOLLID & nId ) // 1 == Formats / 0 == Collections
+ {
+ switch( ( COLL_GET_RANGE_BITS | POOLGRP_NOCOLLID ) & nId )
+ {
+ case POOLGRP_CHARFMT:
+ case POOLGRP_FRAMEFMT:
+ nRet = 0; // derived from the default
+ break;
+ case POOLGRP_PAGEDESC:
+ case POOLGRP_NUMRULE:
+ break; // there are no derivations
+ }
+ }
+ else
+ {
+ switch( COLL_GET_RANGE_BITS & nId )
+ {
+ case COLL_TEXT_BITS:
+ switch( nId )
+ {
+ case RES_POOLCOLL_STANDARD:
+ nRet = 0; break;
+ case RES_POOLCOLL_TEXT_IDENT:
+ case RES_POOLCOLL_TEXT_NEGIDENT:
+ case RES_POOLCOLL_TEXT_MOVE:
+ case RES_POOLCOLL_CONFRONTATION:
+ case RES_POOLCOLL_MARGINAL:
+ nRet = RES_POOLCOLL_TEXT; break;
+
+ case RES_POOLCOLL_TEXT:
+ case RES_POOLCOLL_GREETING:
+ case RES_POOLCOLL_SIGNATURE:
+ case RES_POOLCOLL_HEADLINE_BASE:
+ nRet = RES_POOLCOLL_STANDARD; break;
+
+ case RES_POOLCOLL_HEADLINE1:
+ case RES_POOLCOLL_HEADLINE2:
+ case RES_POOLCOLL_HEADLINE3:
+ case RES_POOLCOLL_HEADLINE4:
+ case RES_POOLCOLL_HEADLINE5:
+ case RES_POOLCOLL_HEADLINE6:
+ case RES_POOLCOLL_HEADLINE7:
+ case RES_POOLCOLL_HEADLINE8:
+ case RES_POOLCOLL_HEADLINE9:
+ case RES_POOLCOLL_HEADLINE10:
+ nRet = RES_POOLCOLL_HEADLINE_BASE; break;
+ }
+ break;
+
+ case COLL_LISTS_BITS:
+ switch( nId )
+ {
+ case RES_POOLCOLL_NUMBER_BULLET_BASE:
+ nRet = RES_POOLCOLL_TEXT; break;
+
+ default:
+ nRet = RES_POOLCOLL_NUMBER_BULLET_BASE; break;
+ }
+ break;
+
+ case COLL_EXTRA_BITS:
+ switch( nId )
+ {
+ case RES_POOLCOLL_TABLE_HDLN:
+ nRet = RES_POOLCOLL_TABLE; break;
+
+ case RES_POOLCOLL_FRAME:
+ case RES_POOLCOLL_TABLE:
+ case RES_POOLCOLL_FOOTNOTE:
+ case RES_POOLCOLL_ENDNOTE:
+ case RES_POOLCOLL_ENVELOPE_ADDRESS:
+ case RES_POOLCOLL_SEND_ADDRESS:
+ case RES_POOLCOLL_HEADERFOOTER:
+ case RES_POOLCOLL_LABEL:
+ nRet = RES_POOLCOLL_STANDARD; break;
+ case RES_POOLCOLL_HEADER:
+ nRet = RES_POOLCOLL_HEADERFOOTER; break;
+ case RES_POOLCOLL_HEADERL:
+ case RES_POOLCOLL_HEADERR:
+ nRet = RES_POOLCOLL_HEADER; break;
+ case RES_POOLCOLL_FOOTER:
+ nRet = RES_POOLCOLL_HEADERFOOTER; break;
+ case RES_POOLCOLL_FOOTERL:
+ case RES_POOLCOLL_FOOTERR:
+ nRet = RES_POOLCOLL_FOOTER; break;
+
+ case RES_POOLCOLL_LABEL_ABB:
+ case RES_POOLCOLL_LABEL_TABLE:
+ case RES_POOLCOLL_LABEL_FRAME:
+ case RES_POOLCOLL_LABEL_DRAWING:
+ case RES_POOLCOLL_LABEL_FIGURE:
+ nRet = RES_POOLCOLL_LABEL; break;
+ }
+ break;
+
+ case COLL_REGISTER_BITS:
+ switch( nId )
+ {
+ case RES_POOLCOLL_REGISTER_BASE:
+ nRet = RES_POOLCOLL_STANDARD; break;
+
+ case RES_POOLCOLL_TOX_IDXH:
+ nRet = RES_POOLCOLL_HEADLINE_BASE; break;
+
+ case RES_POOLCOLL_TOX_USERH:
+ case RES_POOLCOLL_TOX_CNTNTH:
+ case RES_POOLCOLL_TOX_ILLUSH:
+ case RES_POOLCOLL_TOX_OBJECTH:
+ case RES_POOLCOLL_TOX_TABLESH:
+ case RES_POOLCOLL_TOX_AUTHORITIESH:
+ nRet = RES_POOLCOLL_TOX_IDXH; break;
+
+ default:
+ nRet = RES_POOLCOLL_REGISTER_BASE; break;
+ }
+ break;
+
+ case COLL_DOC_BITS:
+ nRet = RES_POOLCOLL_HEADLINE_BASE;
+ break;
+
+ case COLL_HTML_BITS:
+ nRet = RES_POOLCOLL_STANDARD;
+ break;
+ }
+ }
+
+ return nRet;
+}
+
+void SwDoc::RemoveAllFormatLanguageDependencies()
+{
+ /* Restore the language independent pool defaults and styles. */
+ GetAttrPool().ResetPoolDefaultItem( RES_PARATR_ADJUST );
+
+ SwTextFormatColl * pTextFormatColl = getIDocumentStylePoolAccess().GetTextCollFromPool( RES_POOLCOLL_STANDARD );
+
+ pTextFormatColl->ResetFormatAttr( RES_PARATR_ADJUST );
+ /* koreans do not like SvxScriptItem(TRUE) */
+ pTextFormatColl->ResetFormatAttr( RES_PARATR_SCRIPTSPACE );
+
+ SvxFrameDirectionItem aFrameDir( SvxFrameDirection::Horizontal_LR_TB, RES_FRAMEDIR );
+
+ size_t nCount = GetPageDescCnt();
+ for( size_t i=0; i<nCount; ++i )
+ {
+ SwPageDesc& rDesc = GetPageDesc( i );
+ rDesc.GetMaster().SetFormatAttr( aFrameDir );
+ rDesc.GetLeft().SetFormatAttr( aFrameDir );
+ }
+
+ //#i16874# AutoKerning as default for new documents
+ GetAttrPool().ResetPoolDefaultItem( RES_CHRATR_AUTOKERN );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */