1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 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: */
|