<commit_before>/*************************************************************************
 *
 *  $RCSfile: flyfrms.hxx,v $
 *
 *  $Revision: 1.5 $
 *
 *  last change: $Author: hr $ $Date: 2004-02-02 18:18:49 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library 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 for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (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.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/
#ifndef _FLYFRMS_HXX
#define _FLYFRMS_HXX

#include "flyfrm.hxx"

// OD 01.08.2003 #110978#
namespace objectpositioning
{
    class SwAnchoredObjectPosition;
}

//Basisklasse fuer diejenigen Flys, die sich relativ frei Bewegen koennen -
//also die nicht _im_ Inhalt gebundenen Flys.
class SwFlyFreeFrm : public SwFlyFrm
{
    SwPageFrm *pPage;   //Bei dieser Seite ist der Fly angemeldet.

    void CheckClip( const SwFmtFrmSize &rSz );  //'Emergency' Clipping.

    /** determines, if direct environment of fly frame has 'auto' size

        OD 07.08.2003 #i17297#, #111066#, #111070#
        start with anchor frame and search for a header, footer, row or fly frame
        stopping at page frame.
        return <true>, if such a frame is found and it has 'auto' size.
        otherwise <false> is returned.

        @author OD

        @return boolean indicating, that direct environment has 'auto' size
    */
    bool HasEnvironmentAutoSize() const;

protected:
    virtual void NotifyBackground( SwPageFrm *pPage,
                                   const SwRect& rRect, PrepareHint eHint);


    SwFlyFreeFrm( SwFlyFrmFmt*, SwFrm *pAnchor );
public:

    virtual ~SwFlyFreeFrm();

    virtual void MakeAll();

          SwPageFrm *GetPage()       { return pPage; }
    const SwPageFrm *GetPage() const { return pPage; }
    void  SetPage( SwPageFrm *pNew ) { pPage = pNew; }

};


//Die Fly's, die an einem Layoutfrm haengen und nicht inhaltsgebunden sind
class SwFlyLayFrm : public SwFlyFreeFrm
{
public:
    SwFlyLayFrm( SwFlyFrmFmt*, SwFrm *pAnchor );
    SwFlyLayFrm( SwFlyLayFrm& );

    virtual void Modify( SfxPoolItem*, SfxPoolItem* );

};

//Die Flys, die an einem Cntnt haengen nicht aber im Inhalt
class SwFlyAtCntFrm : public SwFlyFreeFrm
{
    // OD 01.08.2003 #110978# - access for calculation of position
    friend class objectpositioning::SwAnchoredObjectPosition;
    // OD 06.10.2003 #110978# - data of position calculation
    // frame vertical position is orient at - typically its the anchor frame,
    // but it could also by a follow or a following layout frame in the text flow.
    const SwFrm* mpVertPosOrientFrm;

    SwRect aLastCharRect; // Fuer autopositionierte Frames ( LAYER_IMPL )
protected:
    //Stellt sicher, das der Fly an der richtigen Seite haengt.
    void AssertPage();

    virtual void MakeAll();
    virtual void MakeFlyPos();
public:
    SwFlyAtCntFrm( SwFlyFrmFmt*, SwFrm *pAnchor );

    virtual void Modify( SfxPoolItem*, SfxPoolItem* );

    void SetAbsPos( const Point &rNew );

    // Fuer autopositionierte Frames ( LAYER_IMPL ), ueberprueft, ob sich
    // die Ankerposition geaendert hat und invalidiert ggf.
    void CheckCharRect();

    SwTwips GetLastCharX() const { return aLastCharRect.Left() - Frm().Left(); }

    SwTwips GetRelCharX( const SwFrm* pFrm ) const
        { return aLastCharRect.Left() - pFrm->Frm().Left(); }
    SwTwips GetRelCharY( const SwFrm* pFrm ) const
        { return aLastCharRect.Bottom() - pFrm->Frm().Top(); }

    void AddLastCharY( long nDiff ){ aLastCharRect.Pos().Y() += nDiff; }

    // accessors to data of position calculation
    // frame vertical position is orient at
    inline const SwFrm* GetVertPosOrientFrm() const
    {
        return mpVertPosOrientFrm;
    }
};

//Die Flys, die an einem Zeichen in einem Cntnt haengen.
class SwFlyInCntFrm : public SwFlyFrm
{
    Point aRef;  //Relativ zu diesem Point wird die AbsPos berechnet.
    long  nLine; //Zeilenhoehe, Ref.Y() - nLine == Zeilenanfang.
<commit_msg>INTEGRATION: CWS swobjpos03 (1.4.58); FILE MERGED 2004/02/05 13:12:07 od 1.4.58.4: #113049# - correct of member <SwFlyAtCntFrm::mpVertPosOrientFrm> 2003/11/21 09:28:54 od 1.4.58.3: #i22341# - adjustments for vertical alignment at top of line 2003/11/10 13:10:07 od 1.4.58.2: #113049# - further improvements to the isolated object positioning algorithms 2003/10/27 13:03:33 od 1.4.58.1: merging changes from swobjpos02<commit_after>/*************************************************************************
 *
 *  $RCSfile: flyfrms.hxx,v $
 *
 *  $Revision: 1.6 $
 *
 *  last change: $Author: hr $ $Date: 2004-03-08 13:58:18 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library 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 for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (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.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/
#ifndef _FLYFRMS_HXX
#define _FLYFRMS_HXX

#include "flyfrm.hxx"

// OD 29.10.2003 #110978#
namespace objectpositioning
{
    class SwToCntntAnchoredObjectPosition;
}
// OD 11.11.2003 #i22341#
class SwFmtAnchor;

//Basisklasse fuer diejenigen Flys, die sich relativ frei Bewegen koennen -
//also die nicht _im_ Inhalt gebundenen Flys.
class SwFlyFreeFrm : public SwFlyFrm
{
    SwPageFrm *pPage;   //Bei dieser Seite ist der Fly angemeldet.

    void CheckClip( const SwFmtFrmSize &rSz );  //'Emergency' Clipping.

    /** determines, if direct environment of fly frame has 'auto' size

        OD 07.08.2003 #i17297#, #111066#, #111070#
        start with anchor frame and search for a header, footer, row or fly frame
        stopping at page frame.
        return <true>, if such a frame is found and it has 'auto' size.
        otherwise <false> is returned.

        @author OD

        @return boolean indicating, that direct environment has 'auto' size
    */
    bool HasEnvironmentAutoSize() const;

protected:
    virtual void NotifyBackground( SwPageFrm *pPage,
                                   const SwRect& rRect, PrepareHint eHint);


    SwFlyFreeFrm( SwFlyFrmFmt*, SwFrm *pAnchor );
public:

    virtual ~SwFlyFreeFrm();

    virtual void MakeAll();

          SwPageFrm *GetPage()       { return pPage; }
    const SwPageFrm *GetPage() const { return pPage; }
    void  SetPage( SwPageFrm *pNew ) { pPage = pNew; }

};


//Die Fly's, die an einem Layoutfrm haengen und nicht inhaltsgebunden sind
class SwFlyLayFrm : public SwFlyFreeFrm
{
public:
    SwFlyLayFrm( SwFlyFrmFmt*, SwFrm *pAnchor );
    SwFlyLayFrm( SwFlyLayFrm& );

    virtual void Modify( SfxPoolItem*, SfxPoolItem* );

};

//Die Flys, die an einem Cntnt haengen nicht aber im Inhalt
class SwFlyAtCntFrm : public SwFlyFreeFrm
{
    // OD 29.10.2003 #110978# - access for calculation of position
    friend class objectpositioning::SwToCntntAnchoredObjectPosition;
    // OD 06.10.2003 #110978# - data of position calculation
    // layout frame vertical position is orient at - typically its the upper of
    // the anchor frame, but it could also by the upper of a follow or
    // a following layout frame in the text flow.
    const SwLayoutFrm* mpVertPosOrientFrm;

    // Last known anchor character retangle of to-character anchored Writer
    // fly frames.
    // Used to decide, if invalidation has to been performed, if anchor position
    // has changed, and used to position Writer fly frame.
    SwRect maLastCharRect;

    // OD 11.11.2003 #i22341# - for to-character anchored Writer fly frames:
    // Last known top of line, in which the anchor character is in.
    // Used to decide, if invalidation has to been performed, if anchor position
    // has changed, and used to position Writer fly frame.
    SwTwips mnLastTopOfLine;

    /** check anchor character rectangle

        OD 11.11.2003 #i22341#
        helper method for method <CheckCharRectAndTopOfLine()>
        For to-character anchored Writer fly frames the member <maLastCharRect>
        is updated. This is checked for change and depending on the applied
        positioning, it's decided, if the Writer fly frame has to be invalidated.

        @author OD

        @param _rAnch
        input parameter - reference to anchor position
    */
    void _CheckCharRect( const SwFmtAnchor& _rAnch );

    /** check top of line

        OD 11.11.2003 #i22341#
        helper method for method <CheckCharRectAndTopOfLine()>
        For to-character anchored Writer fly frames the member <mnLastTopOfLine>
        is updated. This is checked for change and depending on the applied
        positioning, it's decided, if the Writer fly frame has to be invalidated.

        @author OD

        @param _rAnch
        input parameter - reference to anchor position
    */
    void _CheckTopOfLine( const SwFmtAnchor& _rAnch );

protected:
    //Stellt sicher, das der Fly an der richtigen Seite haengt.
    void AssertPage();

    virtual void MakeAll();
    virtual void MakeFlyPos();
public:
    SwFlyAtCntFrm( SwFlyFrmFmt*, SwFrm *pAnchor );

    virtual void Modify( SfxPoolItem*, SfxPoolItem* );

    void SetAbsPos( const Point &rNew );

    /** check anchor character rectangle and top of line

        OD 11.11.2003 #i22341#
        For to-character anchored Writer fly frames the members <maLastCharRect>
        and <maLastTopOfLine> are updated. These are checked for change and
        depending on the applied positioning, it's decided, if the Writer fly
        frame has to be invalidated.

        @author OD
    */
    void CheckCharRectAndTopOfLine();

    SwTwips GetLastCharX() const { return maLastCharRect.Left() - Frm().Left(); }

    SwTwips GetRelCharX( const SwFrm* pFrm ) const
        { return maLastCharRect.Left() - pFrm->Frm().Left(); }
    SwTwips GetRelCharY( const SwFrm* pFrm ) const
        { return maLastCharRect.Bottom() - pFrm->Frm().Top(); }

    void AddLastCharY( long nDiff ){ maLastCharRect.Pos().Y() += nDiff; }

    // accessors to data of position calculation
    // frame vertical position is orient at
    inline const SwLayoutFrm* GetVertPosOrientFrm() const
    {
        return mpVertPosOrientFrm;
    }
};

//Die Flys, die an einem Zeichen in einem Cntnt haengen.
class SwFlyInCntFrm : public SwFlyFrm
{
    Point aRef;  //Relativ zu diesem Point wird die AbsPos berechnet.
    long  nLine; //Zeilenhoehe, Ref.Y() - nLine == Zeilenanfang.

{'fraction_non_alphanumeric': 0.11001813869122366, 'fraction_numerical': 0.029580019533975165, 'mean_word_length': 3.2261202830188678, 'pattern_counts': {'":': 0, '<': 14, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4644983', 'n_tokens_mistral': 4626, 'n_tokens_neox': 4169, 'n_words': 1636}