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_HANDLEANCHORNODECHG_HXX 20 #define INCLUDED_SW_INC_HANDLEANCHORNODECHG_HXX 21 22 class SwFlyFrameFormat; 23 class SwFormatAnchor; 24 class SwFlyFrame; 25 26 // helper class to track change of anchor node of at-paragraph respectively 27 // at-character anchored fly frames 28 // if such a change happens, it has to be checked, if the count of the anchor 29 // frames also change. if yes, a re-creation of the fly frames is needed: 30 // - deletion of existing fly frames before the intrinsic anchor node changes 31 // - creation of new fly frames after the intrinsic anchor node change. 32 class SwHandleAnchorNodeChg 33 { 34 public: 35 /** checks, if re-creation of fly frames for an anchor node change at the 36 given fly frame format is necessary, and performs the first part. 37 38 @param _rFlyFrameFormat 39 reference to the fly frame format instance, which is handled. 40 41 @param _rNewAnchorFormat 42 new anchor attribute, which will be applied at the given fly frame format 43 44 @param _pKeepThisFlyFrame 45 optional parameter - pointer to a fly frame of the given fly frame format, 46 which isn't deleted, if re-creation of fly frames is necessary. 47 */ 48 SwHandleAnchorNodeChg( SwFlyFrameFormat& _rFlyFrameFormat, 49 const SwFormatAnchor& _rNewAnchorFormat, 50 SwFlyFrame const * _pKeepThisFlyFrame = nullptr ); 51 52 /** calls <SwFlyFrameFormat::MakeFrames>, if re-creation of fly frames is necessary. */ 53 ~SwHandleAnchorNodeChg() COVERITY_NOEXCEPT_FALSE; 54 55 private: 56 // fly frame format, which is tracked for an anchor node change. 57 SwFlyFrameFormat& mrFlyFrameFormat; 58 // internal flag, which indicates that the certain anchor node change occurs 59 // and that re-creation of fly frames is necessary. 60 bool mbAnchorNodeChanged; 61 62 /// If the fly frame has a comment, this points to the old comment anchor. 63 std::unique_ptr<SwPosition> mpCommentAnchor; 64 65 SwWrtShell* mpWrtShell; 66 67 SwHandleAnchorNodeChg( const SwHandleAnchorNodeChg& ) = delete; 68 void operator=( const SwHandleAnchorNodeChg ) = delete; 69 }; 70 #endif 71 72 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 73