1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 #ifndef INCLUDED_SW_INC_HINTS_HXX 20 #define INCLUDED_SW_INC_HINTS_HXX 21 22 #include "swatrset.hxx" 23 #include "swtypes.hxx" 24 #include <vcl/vclptr.hxx> 25 26 class SwFormat; 27 class OutputDevice; 28 class SwTable; 29 class SwNode; 30 class SwNodes; 31 class SwPageFrame; 32 class SwFrame; 33 class SwHistory; 34 class SwTextNode; 35 class SwTextFormatColl; 36 class SwFrameFormat; 37 class SwTableLine; 38 class SwTableBox; 39 40 // Base class for all Message-Hints: 41 // "Overhead" of SfxPoolItem is handled here 42 class SwMsgPoolItem : public SfxPoolItem 43 { 44 public: 45 SwMsgPoolItem( sal_uInt16 nWhich ); 46 47 // "Overhead" of SfxPoolItem 48 virtual bool operator==( const SfxPoolItem& ) const override; 49 virtual SwMsgPoolItem* Clone( SfxItemPool* pPool = nullptr ) const override; 50 }; 51 52 // SwPtrMsgPoolItem (old SwObjectDying!) 53 54 class SwPtrMsgPoolItem final : public SwMsgPoolItem 55 { 56 public: 57 void * pObject; 58 SwPtrMsgPoolItem(sal_uInt16 nId,void * pObj)59 SwPtrMsgPoolItem( sal_uInt16 nId, void * pObj ) 60 : SwMsgPoolItem( nId ), pObject( pObj ) 61 {} 62 }; 63 64 /* 65 * SwFormatChg is sent when a format has changed to another format. 2 Hints are always sent 66 * the old and the new format 67 */ 68 class SwFormatChg final : public SwMsgPoolItem 69 { 70 public: 71 SwFormat *pChangedFormat; 72 SwFormatChg( SwFormat *pFormat ); 73 }; 74 75 class SwInsText final : public SwMsgPoolItem 76 { 77 public: 78 sal_Int32 nPos; 79 sal_Int32 nLen; 80 81 SwInsText( sal_Int32 nP, sal_Int32 nL ); 82 }; 83 84 class SwDelChr final : public SwMsgPoolItem 85 { 86 public: 87 sal_Int32 nPos; 88 89 SwDelChr( sal_Int32 nP ); 90 }; 91 92 class SwDelText final : public SwMsgPoolItem 93 { 94 public: 95 sal_Int32 nStart; 96 sal_Int32 nLen; 97 98 SwDelText( sal_Int32 nS, sal_Int32 nL ); 99 }; 100 101 namespace sw { 102 103 /// text is moved into pDestNode 104 class MoveText final : public SfxHint 105 { 106 public: 107 SwTextNode * pDestNode; 108 sal_Int32 nDestStart; 109 sal_Int32 nSourceStart; 110 sal_Int32 nLen; 111 112 MoveText(SwTextNode *pD, sal_Int32 nD, sal_Int32 nS, sal_Int32 nL); 113 }; 114 115 /// new delete redline is created 116 class RedlineDelText final : public SfxHint 117 { 118 public: 119 sal_Int32 nStart; 120 sal_Int32 nLen; 121 122 RedlineDelText(sal_Int32 nS, sal_Int32 nL); 123 }; 124 125 /// delete redline is removed 126 class RedlineUnDelText final : public SfxHint 127 { 128 public: 129 sal_Int32 nStart; 130 sal_Int32 nLen; 131 132 RedlineUnDelText(sal_Int32 nS, sal_Int32 nL); 133 }; 134 135 class CondCollCondChg final : public SfxHint 136 { 137 public: 138 const SwTextFormatColl& m_rColl; CondCollCondChg(const SwTextFormatColl & rColl)139 CondCollCondChg(const SwTextFormatColl& rColl) : m_rColl(rColl) {}; 140 }; 141 142 class GrfRereadAndInCacheHint final : public SfxHint 143 { 144 }; 145 146 class PreGraphicArrivedHint final : public SfxHint 147 { 148 }; 149 150 class PostGraphicArrivedHint final : public SfxHint 151 { 152 }; 153 154 class MoveTableLineHint final : public SfxHint 155 { 156 public: 157 const SwFrameFormat& m_rNewFormat; 158 const SwTableLine& m_rTableLine; MoveTableLineHint(const SwFrameFormat & rNewFormat,const SwTableLine & rTableLine)159 MoveTableLineHint(const SwFrameFormat& rNewFormat, const SwTableLine& rTableLine): m_rNewFormat(rNewFormat), m_rTableLine(rTableLine) {}; 160 }; 161 162 class MoveTableBoxHint final : public SfxHint 163 { 164 public: 165 const SwFrameFormat& m_rNewFormat; 166 const SwTableBox& m_rTableBox; MoveTableBoxHint(const SwFrameFormat & rNewFormat,const SwTableBox & rTableBox)167 MoveTableBoxHint(const SwFrameFormat& rNewFormat, const SwTableBox& rTableBox): m_rNewFormat(rNewFormat), m_rTableBox(rTableBox) {}; 168 }; 169 170 class DocumentDyingHint final : public SfxHint 171 { 172 }; 173 } 174 175 class SwUpdateAttr final : public SwMsgPoolItem 176 { 177 private: 178 sal_Int32 m_nStart; 179 sal_Int32 m_nEnd; 180 sal_uInt16 m_nWhichAttr; 181 std::vector<sal_uInt16> m_aWhichFmtAttrs; // attributes changed inside RES_TXTATR_AUTOFMT 182 183 public: 184 SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW ); 185 SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW, std::vector<sal_uInt16> aW ); 186 getStart() const187 sal_Int32 getStart() const 188 { 189 return m_nStart; 190 } 191 getEnd() const192 sal_Int32 getEnd() const 193 { 194 return m_nEnd; 195 } 196 getWhichAttr() const197 sal_uInt16 getWhichAttr() const 198 { 199 return m_nWhichAttr; 200 } 201 getFmtAttrs() const202 const std::vector<sal_uInt16>& getFmtAttrs() const 203 { 204 return m_aWhichFmtAttrs; 205 } 206 }; 207 208 /** SwRefMarkFieldUpdate is sent when the referencemarks should be updated. 209 To determine Page- / chapternumbers the current frame has to be asked. 210 For this we need the current outputdevice */ 211 class SwRefMarkFieldUpdate final : public SwMsgPoolItem 212 { 213 VclPtr<OutputDevice> pOut; ///< pointer to the current output device 214 public: 215 /** Is sent if reference marks should be updated. 216 217 To get the page/chapter number, the frame has to be asked. For that we need 218 the current OutputDevice. 219 */ 220 SwRefMarkFieldUpdate( OutputDevice* ); 221 }; 222 223 /** SwDocPosUpdate is sent to signal that only the frames from or to a specified document-global position 224 have to be updated. At the moment this is only needed when updating pagenumber fields. */ 225 class SwDocPosUpdate final : public SwMsgPoolItem 226 { 227 public: 228 const SwTwips nDocPos; 229 SwDocPosUpdate( const SwTwips nDocPos ); 230 }; 231 232 /// SwTableFormulaUpdate is sent when the table has to be newly calculated or when a table itself is merged or split 233 enum TableFormulaUpdateFlags { TBL_CALC = 0, 234 TBL_BOXNAME, 235 TBL_BOXPTR, 236 TBL_RELBOXNAME, 237 TBL_MERGETBL, 238 TBL_SPLITTBL 239 }; 240 class SwTableFormulaUpdate final : public SwMsgPoolItem 241 { 242 public: 243 const SwTable* m_pTable; ///< Pointer to the current table 244 union { 245 const SwTable* pDelTable; ///< Merge: Pointer to the table to be removed 246 const OUString* pNewTableNm; ///< Split: the name of the new table 247 } m_aData; 248 SwHistory* m_pHistory; 249 sal_uInt16 m_nSplitLine; ///< Split: from this BaseLine on will be split 250 TableFormulaUpdateFlags m_eFlags; 251 bool m_bModified : 1; 252 bool m_bBehindSplitLine : 1; 253 254 /** Is sent if a table should be recalculated */ 255 SwTableFormulaUpdate( const SwTable* ); 256 }; 257 258 class SwAutoFormatGetDocNode final : public SwMsgPoolItem 259 { 260 public: 261 const SwNodes* pNodes; 262 263 SwAutoFormatGetDocNode( const SwNodes* pNds ); 264 }; 265 266 /* 267 * SwAttrSetChg is sent when something has changed in the SwAttrSet rTheChgdSet. 268 * 2 Hints are always sent, the old and the new items in the rTheChgdSet. 269 */ 270 class SwAttrSetChg final : public SwMsgPoolItem 271 { 272 bool m_bDelSet; 273 SwAttrSet* m_pChgSet; ///< what has changed 274 const SwAttrSet* m_pTheChgdSet; ///< is only used to compare 275 public: 276 SwAttrSetChg( const SwAttrSet& rTheSet, SwAttrSet& rSet ); 277 SwAttrSetChg( const SwAttrSetChg& ); 278 virtual ~SwAttrSetChg() override; 279 280 /// What has changed GetChgSet() const281 const SwAttrSet* GetChgSet() const { return m_pChgSet; } GetChgSet()282 SwAttrSet* GetChgSet() { return m_pChgSet; } 283 284 /// Where it has changed GetTheChgdSet() const285 const SwAttrSet* GetTheChgdSet() const { return m_pTheChgdSet; } 286 Count() const287 sal_uInt16 Count() const { return m_pChgSet->Count(); } 288 void ClearItem( sal_uInt16 nWhichL ) 289 #ifdef DBG_UTIL 290 ; 291 #else 292 { m_pChgSet->ClearItem( nWhichL ); } 293 #endif 294 }; 295 296 class SwVirtPageNumInfo final : public SwMsgPoolItem 297 { 298 const SwPageFrame *m_pPage; 299 const SwPageFrame *m_pOrigPage; 300 const SwFrame *m_pFrame; 301 /** Multiple attributes can be attached to a single paragraph / table 302 The frame, in the end, has to decide which attribute takes effect and which physical page it involves */ 303 public: 304 SwVirtPageNumInfo( const SwPageFrame *pPg ); 305 GetPage() const306 const SwPageFrame *GetPage() const { return m_pPage; } GetOrigPage() const307 const SwPageFrame *GetOrigPage() const { return m_pOrigPage;} GetFrame() const308 const SwFrame *GetFrame() const { return m_pFrame; } SetInfo(const SwPageFrame * pPg,const SwFrame * pF)309 void SetInfo( const SwPageFrame *pPg, 310 const SwFrame *pF ) { m_pFrame = pF; m_pPage = pPg; } 311 }; 312 313 class SwFindNearestNode final : public SwMsgPoolItem 314 { 315 const SwNode *m_pNode, *m_pFound; 316 public: 317 SwFindNearestNode( const SwNode& rNd ); 318 void CheckNode( const SwNode& rNd ); 319 GetFoundNode() const320 const SwNode* GetFoundNode() const { return m_pFound; } 321 }; 322 323 class SwStringMsgPoolItem final : public SwMsgPoolItem 324 { 325 OUString m_sStr; 326 public: 327 GetString() const328 const OUString& GetString() const { return m_sStr; } 329 SwStringMsgPoolItem(sal_uInt16 nId,const OUString & rStr)330 SwStringMsgPoolItem( sal_uInt16 nId, const OUString& rStr ) 331 : SwMsgPoolItem( nId ), m_sStr( rStr ) 332 {} 333 }; 334 #endif 335 336 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 337