summaryrefslogtreecommitdiff
path: root/sw/inc/fmtcol.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/inc/fmtcol.hxx')
-rw-r--r--sw/inc/fmtcol.hxx278
1 files changed, 278 insertions, 0 deletions
diff --git a/sw/inc/fmtcol.hxx b/sw/inc/fmtcol.hxx
new file mode 100644
index 000000000000..95b4af9faf41
--- /dev/null
+++ b/sw/inc/fmtcol.hxx
@@ -0,0 +1,278 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _FMTCOL_HXX
+#define _FMTCOL_HXX
+
+#include <svl/svarray.hxx>
+#include "swdllapi.h"
+#include <format.hxx>
+#include <swtypes.hxx> // For MAXLEVEL.
+
+class SwDoc; // For friend.
+
+class SwFmtColl : public SwFmt
+{
+protected:
+ SwFmtColl( SwAttrPool& rPool, const sal_Char* pFmtName,
+ const sal_uInt16* pWhichRanges, SwFmtColl* pDerFrom,
+ sal_uInt16 nFmtWhich )
+ : SwFmt( rPool, pFmtName, pWhichRanges, pDerFrom, nFmtWhich )
+ { SetAuto( sal_False ); }
+
+ SwFmtColl( SwAttrPool& rPool, const String &rFmtName,
+ const sal_uInt16* pWhichRanges, SwFmtColl* pDerFrom,
+ sal_uInt16 nFmtWhich )
+ : SwFmt( rPool, rFmtName, pWhichRanges, pDerFrom, nFmtWhich )
+ { SetAuto( sal_False ); }
+
+private:
+
+ // For now don't copy and don't assign.
+ SwFmtColl(const SwFmtColl & );
+ const SwFmtColl &operator=(const SwFmtColl &);
+};
+
+class SW_DLLPUBLIC SwTxtFmtColl: public SwFmtColl
+{
+ friend class SwDoc;
+
+ SwTxtFmtColl(const SwTxtFmtColl & rRef);
+
+ bool mbStayAssignedToListLevelOfOutlineStyle;
+
+protected:
+
+ bool mbAssignedToOutlineStyle;
+
+ SwTxtFmtColl *pNextTxtFmtColl;
+
+ SwTxtFmtColl( SwAttrPool& rPool, const sal_Char* pFmtCollName,
+ SwTxtFmtColl* pDerFrom = 0,
+ sal_uInt16 nFmtWh = RES_TXTFMTCOLL )
+ : SwFmtColl( rPool, pFmtCollName, aTxtFmtCollSetRange,
+ pDerFrom, nFmtWh ),
+ mbStayAssignedToListLevelOfOutlineStyle( false ),
+
+ mbAssignedToOutlineStyle(false)
+ { pNextTxtFmtColl = this; }
+
+ SwTxtFmtColl( SwAttrPool& rPool, const String &rFmtCollName,
+ SwTxtFmtColl* pDerFrom = 0,
+ sal_uInt16 nFmtWh = RES_TXTFMTCOLL )
+ : SwFmtColl( rPool, rFmtCollName, aTxtFmtCollSetRange,
+ pDerFrom, nFmtWh ),
+
+ mbStayAssignedToListLevelOfOutlineStyle( false ),
+
+ mbAssignedToOutlineStyle(false)
+ { pNextTxtFmtColl = this; }
+
+ // To get UL- / LR- / FontHeight-changes.
+ virtual void Modify( const SfxPoolItem*, const SfxPoolItem* );
+
+public:
+
+ TYPEINFO(); // Already in base class Client.
+
+ inline void SetNextTxtFmtColl(SwTxtFmtColl& rNext);
+ SwTxtFmtColl& GetNextTxtFmtColl() const { return *pNextTxtFmtColl; }
+
+ sal_Bool IsAtDocNodeSet() const;
+
+ void SetAttrOutlineLevel( int );
+ int GetAttrOutlineLevel() const;
+ int GetAssignedOutlineStyleLevel() const;
+ inline bool IsAssignedToListLevelOfOutlineStyle() const
+ {
+ return mbAssignedToOutlineStyle;
+ }
+ void AssignToListLevelOfOutlineStyle(const int nAssignedListLevel);
+ void DeleteAssignmentToListLevelOfOutlineStyle();
+
+ // Override to recognize changes on the <SwNumRuleItem> and register/unregister
+ // the paragragh style at the corresponding <SwNumRule> instance.
+ virtual sal_Bool SetFmtAttr( const SfxPoolItem& rAttr );
+ virtual sal_Bool SetFmtAttr( const SfxItemSet& rSet );
+ virtual sal_Bool ResetFmtAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 );
+
+ // Override <ResetAllFmtAttr()> to stay assigned to list level of outline style.
+ virtual sal_uInt16 ResetAllFmtAttr();
+
+ inline bool StayAssignedToListLevelOfOutlineStyle() const
+ {
+ return mbStayAssignedToListLevelOfOutlineStyle;
+ }
+
+ bool AreListLevelIndentsApplicable() const;
+
+/*
+ Is the functionality of character styles at paragraph styles needed?
+ If so, a second Attset for char-attributes has to be created
+ in TextNode and here in TxtCollection in order to make both
+ the inheritance of and the access to set attributes function correctly!
+
+ virtual sal_Bool SetDerivedFrom( SwFmtColl* pDerFrom = 0 );
+
+ inline SwCharFmt* GetCharFmt() const;
+ inline sal_Bool IsCharFmtSet() const;
+ void SetCharFmt(SwCharFmt *);
+ void ResetCharFmt();
+ inline sal_Bool SwTxtFmtColl::IsCharFmtSet() const
+ {
+ return aCharDepend.GetRegisteredIn() ? sal_True : sal_False;
+ }
+ inline SwCharFmt* SwTxtFmtColl::GetCharFmt() const
+ {
+ return (SwCharFmt*)aCharDepend.GetRegisteredIn();
+ }
+*/
+};
+
+typedef SwTxtFmtColl* SwTxtFmtCollPtr;
+SV_DECL_PTRARR(SwTxtFmtColls,SwTxtFmtCollPtr,2,4)
+
+class SwGrfFmtColl: public SwFmtColl
+{
+ friend class SwDoc;
+protected:
+ SwGrfFmtColl( SwAttrPool& rPool, const sal_Char* pFmtCollName,
+ SwGrfFmtColl* pDerFrom = 0 )
+ : SwFmtColl( rPool, pFmtCollName, aGrfFmtCollSetRange,
+ pDerFrom, RES_GRFFMTCOLL )
+ {}
+
+ SwGrfFmtColl( SwAttrPool& rPool, const String &rFmtCollName,
+ SwGrfFmtColl* pDerFrom = 0 )
+ : SwFmtColl( rPool, rFmtCollName, aGrfFmtCollSetRange,
+ pDerFrom, RES_GRFFMTCOLL )
+ {}
+
+public:
+ TYPEINFO(); // Already in base class Client.
+};
+
+typedef SwGrfFmtColl* SwGrfFmtCollPtr;
+SV_DECL_PTRARR(SwGrfFmtColls,SwGrfFmtCollPtr,2,4)
+
+// FEATURE::CONDCOLL
+// Conditional styles.
+enum Master_CollConditions
+{
+ PARA_IN_LIST = 0x0001,
+ PARA_IN_OUTLINE = 0x0002,
+ PARA_IN_FRAME = 0x0004,
+ PARA_IN_TABLEHEAD = 0x0008,
+ PARA_IN_TABLEBODY = 0x0010,
+ PARA_IN_SECTION = 0x0020,
+ PARA_IN_FOOTENOTE = 0x0040,
+ PARA_IN_FOOTER = 0x0080,
+ PARA_IN_HEADER = 0x0100,
+ PARA_IN_ENDNOTE = 0x0200,
+ // ...
+ USRFLD_EXPRESSION = (int)0x8000
+};
+
+class SW_DLLPUBLIC SwCollCondition : public SwClient
+{
+ sal_uLong nCondition;
+ union
+ {
+ sal_uLong nSubCondition;
+ String* pFldExpression;
+ } aSubCondition;
+
+public:
+ TYPEINFO(); // Already in base class Client.
+
+ SwCollCondition( SwTxtFmtColl* pColl, sal_uLong nMasterCond,
+ sal_uLong nSubCond = 0 );
+ SwCollCondition( SwTxtFmtColl* pColl, sal_uLong nMasterCond,
+ const String& rSubExp );
+ virtual ~SwCollCondition();
+
+ // @@@ public copy ctor, but no copy assignment?
+ SwCollCondition( const SwCollCondition& rCpy );
+private:
+ // @@@ public copy ctor, but no copy assignment?
+ SwCollCondition & operator= (const SwCollCondition &);
+public:
+
+ int operator==( const SwCollCondition& rCmp ) const;
+ int operator!=( const SwCollCondition& rCmp ) const
+ { return ! (*this == rCmp); }
+
+ sal_uLong GetCondition() const { return nCondition; }
+ sal_uLong GetSubCondition() const { return aSubCondition.nSubCondition; }
+ const String* GetFldExpression() const
+ { return aSubCondition.pFldExpression; }
+
+ void SetCondition( sal_uLong nCond, sal_uLong nSubCond );
+ SwTxtFmtColl* GetTxtFmtColl() const { return (SwTxtFmtColl*)GetRegisteredIn(); }
+ void RegisterToFormat( SwFmt& );
+};
+
+typedef SwCollCondition* SwCollConditionPtr;
+SV_DECL_PTRARR_DEL( SwFmtCollConditions, SwCollConditionPtr, 0, 5 )
+
+class SW_DLLPUBLIC SwConditionTxtFmtColl : public SwTxtFmtColl
+{
+ friend class SwDoc;
+protected:
+ SwFmtCollConditions aCondColls;
+
+ SwConditionTxtFmtColl( SwAttrPool& rPool, const sal_Char* pFmtCollName,
+ SwTxtFmtColl* pDerFrom = 0 )
+ : SwTxtFmtColl( rPool, pFmtCollName, pDerFrom, RES_CONDTXTFMTCOLL )
+ {}
+ SwConditionTxtFmtColl( SwAttrPool& rPool, const String &rFmtCollName,
+ SwTxtFmtColl* pDerFrom = 0 )
+ : SwTxtFmtColl( rPool, rFmtCollName, pDerFrom, RES_CONDTXTFMTCOLL )
+ {}
+
+public:
+ TYPEINFO(); // Already in base class Client.
+
+ virtual ~SwConditionTxtFmtColl();
+
+ const SwCollCondition* HasCondition( const SwCollCondition& rCond ) const;
+ const SwFmtCollConditions& GetCondColls() const { return aCondColls; }
+ void InsertCondition( const SwCollCondition& rCond );
+ sal_Bool RemoveCondition( const SwCollCondition& rCond );
+
+ void SetConditions( const SwFmtCollConditions& );
+};
+
+// FEATURE::CONDCOLL
+// Inline implementations.
+inline void SwTxtFmtColl::SetNextTxtFmtColl( SwTxtFmtColl& rNext )
+{
+ pNextTxtFmtColl = &rNext;
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */