summaryrefslogtreecommitdiffstats
path: root/sw/inc/fesh.hxx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /sw/inc/fesh.hxx
parentInitial commit. (diff)
downloadlibreoffice-upstream/4%7.4.7.tar.xz
libreoffice-upstream/4%7.4.7.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sw/inc/fesh.hxx')
-rw-r--r--sw/inc/fesh.hxx825
1 files changed, 825 insertions, 0 deletions
diff --git a/sw/inc/fesh.hxx b/sw/inc/fesh.hxx
new file mode 100644
index 000000000..8a94960d3
--- /dev/null
+++ b/sw/inc/fesh.hxx
@@ -0,0 +1,825 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SW_INC_FESH_HXX
+#define INCLUDED_SW_INC_FESH_HXX
+
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/XPasteListener.hpp>
+
+#include <svx/svdobj.hxx>
+#include "swdllapi.h"
+#include "editsh.hxx"
+#include "flyenum.hxx"
+
+#include <svx/svdtypes.hxx>
+#include <sot/formats.hxx>
+#include <rtl/ustring.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <comphelper/interfacecontainer3.hxx>
+
+#include <vector>
+#include <memory>
+
+namespace editeng { class SvxBorderLine; }
+
+class SwFlyFrame;
+class SwTabCols;
+class SvxBrushItem;
+class SvxFrameDirectionItem;
+class SwTableAutoFormat;
+class SwFrame;
+class SwFormatFrameSize;
+class SwFormatRowSplit;
+class Outliner;
+class SwFrameFormat;
+struct SwSortOptions;
+class SdrMarkList;
+enum class RndStdIds;
+
+namespace svx
+{
+ class ISdrObjectFilter;
+}
+namespace com::sun::star::embed { class XEmbeddedObject; }
+
+// return values for GetFrameType() and GetSelFrameType().
+//! values can be combined via logical or
+enum class FrameTypeFlags {
+ NONE = 0,
+ PAGE = 1,
+ HEADER = 2,
+ FOOTER = 4,
+ BODY = 8,
+ COLUMN = 16,
+ TABLE = 32,
+ FLY_FREE = 64,
+ FLY_ATCNT = 128,
+ FLY_INCNT = 256,
+ FOOTNOTE = 512,
+ FTNPAGE = 1024,
+ FLY_ANY = 2048,
+ DRAWOBJ = 4096,
+ COLSECT = 8192,
+ COLSECTOUTTAB = 16384
+};
+namespace o3tl
+{
+ template<> struct typed_flags<FrameTypeFlags> : is_typed_flags<FrameTypeFlags, 0x7fff> {};
+}
+
+//! values can be combined via logical or
+enum class GotoObjFlags
+{
+ NONE = 0,
+ DrawControl = 1,
+ DrawSimple = 2,
+ DrawAny = DrawControl | DrawSimple,
+ FlyFrame = 4,
+ FlyGrf = 8,
+ FlyOLE = 16,
+ FlyAny = FlyOLE | FlyGrf | FlyFrame,
+ Any = FlyAny | DrawAny,
+};
+namespace o3tl
+{
+ template<> struct typed_flags<GotoObjFlags> : is_typed_flags<GotoObjFlags, 31> {};
+}
+
+//! values can be combined via logical or
+enum class FlyProtectFlags
+{
+ NONE = 0,
+ Content = 1,
+ Size = 2,
+ Pos = 4,
+ Parent = 8, ///< Check only parents.
+ Fixed = 16, /**< Only protection that cannot be withdrawn
+ e.g. by OLE-server; also relevant for dialog. */
+};
+namespace o3tl
+{
+ template<> struct typed_flags<FlyProtectFlags> : is_typed_flags<FlyProtectFlags, 31> {};
+}
+
+// For figuring out contents by position (D&D)
+enum ObjCntType
+{
+ OBJCNT_NONE,
+ OBJCNT_FLY,
+ OBJCNT_GRF,
+ OBJCNT_OLE,
+ OBJCNT_SIMPLE,
+ OBJCNT_CONTROL,
+ OBJCNT_URLBUTTON,
+
+ OBJCNT_GROUPOBJ,
+ OBJCNT_DONTCARE ///< Not determinable - different objects are selected.
+};
+
+//For GetAnyCurRect
+enum class CurRectType
+{
+ Page, ///< Rect of current page.
+ PageCalc, ///< ... page will be formatted if required.
+ PagePrt, ///< Rect of current PrtArea of page.
+ Frame, ///< Rect of current frame.
+ FlyEmbedded, ///< Rect of current FlyFrame.
+ FlyEmbeddedPrt, ///< Rect of PrtArea of FlyFrame
+ Section, ///< Rect of current section.
+ SectionOutsideTable, ///< Rect of current section but outside of table.
+ SectionPrt, ///< Rect of current PrtArea of section.
+ HeaderFooter, ///< Rect of current header/footer
+ PagesArea ///< Rect covering the pages area
+};
+
+struct SwGetCurColNumPara
+{
+ const SwFrameFormat* pFrameFormat;
+ const SwRect* pPrtRect;
+ SwGetCurColNumPara() : pFrameFormat( nullptr ), pPrtRect( nullptr ) {}
+};
+
+enum class SwPasteSdr
+{
+ NONE = 0,
+ Insert = 1,
+ Replace = 2,
+ SetAttr = 3
+};
+
+#define SW_ADD_SELECT 1
+#define SW_ENTER_GROUP 2
+#define SW_LEAVE_FRAME 4
+/// Allow SwFEShell::SelectObj() to select the TextBox of a shape.
+#define SW_ALLOW_TEXTBOX 8
+
+enum class SwMove
+{
+ UP = 0,
+ DOWN = 1,
+ LEFT = 2,
+ RIGHT = 3
+};
+
+// return values for WhichMouseTabCol
+enum class SwTab
+{
+ COL_NONE = 0,
+ COL_HORI = 1,
+ COL_VERT = 2,
+ ROW_HORI = 3,
+ ROW_VERT = 4,
+ SEL_HORI = 5,
+ SEL_HORI_RTL = 6,
+ ROWSEL_HORI = 7,
+ ROWSEL_HORI_RTL = 8,
+ COLSEL_HORI = 9,
+ SEL_VERT = 10,
+ ROWSEL_VERT = 11,
+ COLSEL_VERT = 12
+};
+
+class SdrDropMarkerOverlay;
+struct SwColCache;
+
+class SW_DLLPUBLIC SwFEShell : public SwEditShell
+{
+private:
+ mutable std::unique_ptr<SwColCache> m_pColumnCache;
+ mutable std::unique_ptr<SwColCache> m_pRowCache;
+ std::unique_ptr<SdrDropMarkerOverlay> m_pChainTo;
+ std::unique_ptr<SdrDropMarkerOverlay> m_pChainFrom;
+ bool m_bCheckForOLEInCaption;
+ comphelper::OInterfaceContainerHelper3<css::text::XPasteListener> m_aPasteListeners;
+ /// insert table rows or columns instead of overwriting the existing table cells
+ SwTable::SearchType m_eTableInsertMode;
+ /// table copied to the clipboard by the last private copy
+ bool m_bTableCopied;
+
+ SAL_DLLPRIVATE SwFlyFrame *FindFlyFrame( const css::uno::Reference < css::embed::XEmbeddedObject >& ) const;
+
+ /// Terminate actions for all shells and call ChangeLink.
+ SAL_DLLPRIVATE void EndAllActionAndCall();
+
+ SAL_DLLPRIVATE void ScrollTo( const Point &rPt );
+
+ SAL_DLLPRIVATE void ChangeOpaque( SdrLayerID nLayerId );
+
+ /** Used for mouse operations on a table:
+ @return a cell frame that is 'close' to rPt. */
+ SAL_DLLPRIVATE const SwFrame *GetBox( const Point &rPt, bool* pbRow = nullptr, bool* pbCol = nullptr ) const;
+
+ // 0 == not in any column.
+ SAL_DLLPRIVATE static sal_uInt16 GetCurColNum_( const SwFrame *pFrame,
+ SwGetCurColNumPara* pPara );
+
+ SAL_DLLPRIVATE void GetTabCols_(SwTabCols &rToFill, const SwFrame *pBox) const;
+ SAL_DLLPRIVATE void GetTabRows_(SwTabCols &rToFill, const SwFrame *pBox) const;
+
+ SAL_DLLPRIVATE bool ImpEndCreate();
+
+ /// Methods for copying of draw objects.
+ SAL_DLLPRIVATE bool CopyDrawSel( SwFEShell& rDestShell, const Point& rSttPt,
+ const Point& rInsPt, bool bIsMove,
+ bool bSelectInsert );
+
+ /// Get list of marked SdrObjects;
+ /// helper method for GetSelFrameType, IsSelContainsControl.
+ SAL_DLLPRIVATE const SdrMarkList* GetMarkList_() const;
+
+ SAL_DLLPRIVATE bool CheckHeadline( bool bRepeat ) const;
+
+ using SwEditShell::Copy;
+
+public:
+
+ using SwEditShell::Insert;
+
+ SwFEShell( SwDoc& rDoc, vcl::Window *pWin, const SwViewOption *pOpt );
+ SwFEShell( SwEditShell& rShell, vcl::Window *pWin );
+ virtual ~SwFEShell() override;
+
+ /// Copy and Paste methods for internal clipboard.
+ void Copy( SwDoc& rClpDoc, const OUString* pNewClpText = nullptr );
+ bool Paste( SwDoc& rClpDoc, bool bNestedTable = false );
+
+ /// Paste some pages into another doc - used in mailmerge.
+ void PastePages( SwFEShell& rToFill, sal_uInt16 nStartPage, sal_uInt16 nEndPage);
+
+ /// Copy-Method for Drag&Drop
+ bool Copy( SwFEShell&, const Point& rSttPt, const Point& rInsPt,
+ bool bIsMove = false, bool bSelectInsert = true );
+
+ void SelectFlyFrame( SwFlyFrame& rFrame );
+
+ /// Is selected frame within another frame?
+ const SwFrameFormat* IsFlyInFly();
+
+ /** If an object has been given, exactly this object is selected
+ (instead of searching over position). */
+ bool SelectObj( const Point& rSelPt, sal_uInt8 nFlag = 0, SdrObject *pObj = nullptr );
+ void DelSelectedObj();
+
+ /** Move selection upwards or downwards (Z-Order).
+ TRUE = to top or bottom.
+ FALSE = run past one other. */
+ void SelectionToTop ( bool bTop = true );
+ void SelectionToBottom( bool bBottom = true );
+
+ SdrLayerID GetLayerId() const; ///< 1 Heaven, 0 Hell, SDRLAYER_NOTFOUND Ambiguous.
+ void SelectionToHeaven(); ///< Above document.
+ void SelectionToHell(); ///< Below document.
+
+ /** The following two methods return enum SdrHdlKind.
+ Declared as int in order to spare including SVDRAW.HXX. */
+ bool IsObjSelectable( const Point& rPt );
+ /// Same as IsObjSelectable(), but return the object as well.
+ SdrObject* GetObjAt(const Point& rPt);
+ bool IsInsideSelectedObj( const Point& rPt ); ///< returns enum values
+ /** Test if there is a draw object at that position and if it should be selected.
+ The 'should' is aimed at Writer text fly frames which may be in front of
+ the draw object. */
+ bool ShouldObjectBeSelected(const Point& rPt);
+
+ bool MoveAnchor( SwMove nDir );
+
+ /** @return if Upper of frame at current position is section frame
+ Currently only used by the rules. To be replaced by something more
+ sophisticated one day. */
+ bool IsDirectlyInSection() const;
+
+ /** For return values see above FrameType.
+ pPt: Cursr or DocPos respectively; bStopAtFly: Stop at flys or continue over anchor.
+ Although (0,TRUE) is kind of a standard, the parameters are not defaulted here
+ in order to force more conscious use especially of bStopAtFly. */
+ FrameTypeFlags GetFrameType( const Point *pPt, bool bStopAtFly ) const;
+ FrameTypeFlags GetSelFrameType() const; //Selection (Drawing)
+
+ /** check whether selected frame contains a control;
+ * companion method to GetSelFrameType, used for preventing
+ * drag&drop of controls into header */
+ bool IsSelContainsControl() const;
+
+ static ObjCntType GetObjCntType( const SdrObject& rObj );
+ ObjCntType GetObjCntType( const Point &rPt, SdrObject *&rpObj ) const;
+ ObjCntType GetObjCntTypeOfSelection() const;
+
+ /// For adjustment of PosAttr when anchor changes.
+ SwRect GetObjRect() const;
+
+ /// For moving flys with keyboard.
+ SwRect GetFlyRect() const;
+ /** i#17567 - adjustments to allow negative vertical positions for fly frames anchored
+ to paragraph or to character.
+ i#18732 - adjustments for new option 'FollowTextFlow'
+ i#22341 - adjustments for new vertical alignment at top of line */
+ void CalcBoundRect( SwRect& _orRect,
+ const RndStdIds _nAnchorId,
+ const sal_Int16 _eHoriRelOrient = css::text::RelOrientation::FRAME,
+ const sal_Int16 _eVertRelOrient = css::text::RelOrientation::FRAME,
+ const SwPosition* _pToCharContentPos = nullptr,
+ const bool _bFollowTextFlow = false,
+ bool _bMirror = false,
+ Point* _opRef = nullptr,
+ Size* _opPercent = nullptr,
+ const SwFormatFrameSize* pFormatFrameSize = nullptr ) const;
+
+ /// Set size of draw objects.
+ void SetObjRect( const SwRect& rRect );
+
+ void BeginDrag( const Point *pPt, bool bProp );
+ void Drag ( const Point *pPt, bool bProp );
+ void EndDrag ();
+ void BreakDrag();
+
+ /// Methods for status line.
+ Point GetAnchorObjDiff() const;
+ Point GetObjAbsPos() const;
+ Size GetObjSize() const;
+
+ /// SS for envelopes: get all page-bound objects and set them to new page.
+ void GetPageObjs( std::vector<SwFrameFormat*>& rFillArr );
+ void SetPageObjsNewPage( std::vector<SwFrameFormat*>& rFillArr );
+
+ /// Show current selection (frame / draw object as required).
+ virtual void MakeSelVisible() override;
+
+ /** @return FrameFormat of object that may be under Point.
+ Object does not become selected! */
+ const SwFrameFormat* GetFormatFromObj( const Point& rPt, SwRect** pRectToFill = nullptr ) const;
+
+ /// @return a format too, if the point is over the text of any fly.
+ const SwFrameFormat* GetFormatFromAnyObj( const Point& rPt ) const;
+
+ /** Which Protection is set at selected object? */
+ FlyProtectFlags IsSelObjProtected( FlyProtectFlags eType ) const;
+
+ /** Deliver graphic in rName besides graphic name. If graphic is
+ linked give name with path. rbLink is TRUE if graphic is linked. */
+ const Graphic *GetGrfAtPos( const Point &rDocPos,
+ OUString &rName, bool &rbLink ) const;
+
+ OUString GetObjTitle() const;
+ void SetObjTitle( const OUString& rTitle );
+ OUString GetObjDescription() const;
+ void SetObjDescription( const OUString& rDescription );
+
+ bool IsFrameSelected() const;
+ bool GetFlyFrameAttr( SfxItemSet &rSet ) const;
+ bool SetFlyFrameAttr( SfxItemSet &rSet );
+ static SfxItemSetFixed<RES_VERT_ORIENT, RES_ANCHOR> makeItemSetFromFormatAnchor(SfxItemPool& rPool, const SwFormatAnchor &rAnchor);
+ void ResetFlyFrameAttr( const SfxItemSet* pSet );
+ const SwFrameFormat *NewFlyFrame( const SfxItemSet &rSet, bool bAnchValid = false,
+ SwFrameFormat *pParent = nullptr );
+ void SetFlyPos( const Point &rAbsPos);
+ Point FindAnchorPos( const Point &rAbsPos, bool bMoveIt = false );
+
+ /** Determines whether a frame or its environment is vertically formatted and right-to-left.
+ also determines, if frame or its environment is in Mongolian layout (vertical left-to-right)
+ - add output parameter <bVertL2R> */
+ bool IsFrameVertical(const bool bEnvironment, bool& bRightToLeft, bool& bVertL2R) const;
+
+ SwFrameFormat* GetSelectedFrameFormat() const; ///< If frame then frame style, else 0.
+ void SetFrameFormat( SwFrameFormat *pFormat, bool bKeepOrient = false, Point const * pDocPos = nullptr ); ///< If frame then set frame style.
+
+ // Get selected fly
+ SwFlyFrame* GetSelectedFlyFrame() const;
+
+ // Get current fly in which the cursor is positioned
+ SwFlyFrame* GetCurrFlyFrame(const bool bCalcFrame = true) const;
+
+ // Get selected fly, but if none Get current fly in which the cursor is positioned
+ SwFlyFrame* GetSelectedOrCurrFlyFrame() const;
+
+ /// Find/delete fly containing the cursor.
+ SwFrameFormat* WizardGetFly();
+
+ /// Independent selecting of flys.
+ bool GotoNextFly( GotoObjFlags eType = GotoObjFlags::FlyAny )
+ { return GotoObj( true, eType ); }
+ bool GotoPrevFly( GotoObjFlags eType = GotoObjFlags::FlyAny)
+ { return GotoObj( false, eType); }
+
+ /// Iterate over flys - for Basic-collections.
+ size_t GetFlyCount( FlyCntType eType, bool bIgnoreTextBoxes = false ) const;
+ const SwFrameFormat* GetFlyNum(size_t nIdx, FlyCntType eType, bool bIgnoreTextBoxes = false) const;
+
+ std::vector<SwFrameFormat const*> GetFlyFrameFormats(
+ FlyCntType eType, bool bIgnoreTextBoxes);
+
+ /// If a fly is selected, it draws cursor into the first ContentFrame.
+ const SwFrameFormat* SelFlyGrabCursor();
+
+ /// Get FlyFrameFormat; for UI macro linkage at Flys
+ const SwFrameFormat* GetFlyFrameFormat() const;
+ SwFrameFormat* GetFlyFrameFormat();
+
+ /** OLE. Server requires new size. Desired values are adjusted as frame attributes.
+ If the values are not allowed, the formatting clips and determines scaling.
+ See CalcAndSetScale().
+ The @return value is the applied size. */
+ Size RequestObjectResize( const SwRect &rRect, const css::uno::Reference < css::embed::XEmbeddedObject >& );
+
+ /// The layout has been changed, so the active object has to be moved after that
+ virtual void MoveObjectIfActive( svt::EmbeddedObjectRef& xObj, const Point& rOffset );
+
+ /** Client for OleObject has to be up-to-date regarding scaling.
+ Implemented in WrtShell.
+ If a pointer is passed on a size, this is the object's current core-size.
+ Else the size is provided via GetCurFlyRect(). */
+ virtual void CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
+ const SwRect *pFlyPrtRect = nullptr,
+ const SwRect *pFlyFrameRect = nullptr,
+ const bool bNoTextFramePrtAreaChanged = false ) = 0;
+
+ /** Connect objects with ActivateWhenVisible at Paint.
+ Called by notxtfrm::Paint, implemented in wrtsh. */
+ virtual void ConnectObj( svt::EmbeddedObjectRef&,
+ const SwRect &rPrt,
+ const SwRect &rFrame ) = 0;
+
+ /// Check resize of OLE-Object.
+ bool IsCheckForOLEInCaption() const { return m_bCheckForOLEInCaption; }
+ void SetCheckForOLEInCaption( bool bFlag ) { m_bCheckForOLEInCaption = bFlag; }
+
+ /// Set name at selected FlyFrame.
+ void SetFlyName( const OUString& rName );
+ OUString GetFlyName() const;
+
+ /// get reference to OLE object (if there is one) for selected FlyFrame
+ css::uno::Reference < css::embed::XEmbeddedObject > GetOleRef() const;
+
+ /// Created unique name for frame.
+ OUString GetUniqueGrfName() const;
+ OUString GetUniqueOLEName() const;
+ OUString GetUniqueFrameName() const;
+
+ /// Jump to named Fly (graphic/OLE).
+ bool GotoFly( const OUString& rName, FlyCntType eType,
+ bool bSelFrame );
+
+ /// Position is a graphic with URL?
+ const SwFrameFormat* IsURLGrfAtPos( const Point& rPt, OUString* pURL = nullptr,
+ OUString *pTargetFrameName = nullptr,
+ OUString *pURLDescription = nullptr ) const;
+
+ /** For Chain always connect Fly specified by format with that hit by point.
+ rRect contains rect of Fly (for its highlight). */
+ SwChainRet Chainable( SwRect &rRect, const SwFrameFormat &rSource, const Point &rPt ) const;
+ SwChainRet Chain( SwFrameFormat &rSource, const Point &rPt );
+ void Chain( SwFrameFormat &rSource, const SwFrameFormat &rDest );
+ void Unchain( SwFrameFormat &rFormat );
+ void HideChainMarker();
+ void SetChainMarker();
+
+ Size GetGraphicDefaultSize() const;
+
+ /// Temporary work around for bug.
+ void CheckUnboundObjects();
+
+ /// Attention: Ambiguities if multiple selections.
+ bool GetObjAttr( SfxItemSet &rSet ) const;
+ void SetObjAttr( const SfxItemSet &rSet );
+
+ const SdrObject* GetBestObject(bool bNext, GotoObjFlags eType, bool bFlat = true,
+ const svx::ISdrObjectFilter* pFilter = nullptr,
+ bool* pbWrapped = nullptr);
+ bool GotoObj( bool bNext, GotoObjFlags eType = GotoObjFlags::DrawAny);
+
+ /// Set DragMode (e.g. Rotate), but do nothing when frame is selected.
+ void SetDragMode( SdrDragMode eSdrDragMode );
+
+ // Get the current drag mode
+ SdrDragMode GetDragMode() const;
+
+ // Start cropping the selected image
+ void StartCropImage();
+
+ // RotGrfFlyFrame: check if RotationMode is possible
+ bool IsRotationOfSwGrfNodePossible() const;
+
+ size_t IsObjSelected() const; ///< @return object count, but doesn't count the objects in groups.
+ bool IsObjSelected( const SdrObject& rObj ) const;
+ bool IsObjSameLevelWithMarked(const SdrObject* pObj) const;
+ const SdrMarkList* GetMarkList() const{ return GetMarkList_(); };
+
+ void EndTextEdit(); ///< Deletes object if required.
+
+ /** Anchor type of selected object, RndStdIds::UNKNOWN if ambiguous or in case of frame selection.
+ Else RndStdIds::FLY_AT_PAGE or RndStdIds::FLY_AT_PARA. */
+ RndStdIds GetAnchorId() const;
+
+ /** Process of creating draw objects. At the beginning object type is passed.
+ At the end a Cmd can be passed. Here, SDRCREATE_RESTRAINTEND for end
+ or SdrCreateCmd::NextPoint for a polygon may be relevant.
+ After RESTRAINTEND the object is created and selected.
+ BreakCreate interrupts the process. In this case no object is selected. */
+ bool BeginCreate( SdrObjKind eSdrObjectKind, const Point &rPos );
+ bool BeginCreate( SdrObjKind eSdrObjectKind, SdrInventor eObjInventor, const Point &);
+ void MoveCreate ( const Point &rPos );
+ bool EndCreate ( SdrCreateCmd eSdrCreateCmd );
+ void BreakCreate();
+ bool IsDrawCreate() const;
+ void CreateDefaultShape(SdrObjKind eSdrObjectKind, const tools::Rectangle& rRect, sal_uInt16 nSlotId);
+
+ /// Functions for Rubberbox, it selects Draw-Objects
+ bool BeginMark( const Point &rPos );
+ void MoveMark ( const Point &rPos );
+ bool EndMark ();
+
+ /// Create and destroy group, don't when frame is selected.
+ bool IsGroupSelected(bool bAllowDiagams); ///< Can be a mixed selection!
+ void GroupSelection(); ///< Afterwards the group is selected.
+ void UnGroupSelection(); /**< The individual objects are selected, but
+ it is possible that there are groups included. */
+
+ bool IsGroupAllowed() const;
+ bool IsUnGroupAllowed() const;
+
+ void MirrorSelection( bool bHorizontal ); ///< Vertical if FALSE.
+
+ /** frmatr.hxx. Here no enum because of dependencies.
+ bool value only for internal use! Anchor is newly set according
+ to current document position. Anchor is not re-set. */
+ void ChgAnchor( RndStdIds eAnchorId, bool bSameOnly = false,
+ bool bPosCorr = true );
+
+ bool SetDrawingAttr( SfxItemSet &rSet );
+
+ /** Get selected DrawObj as graphics (MetaFile/Bitmap).
+ Return value indicates if it was converted. */
+ bool GetDrawObjGraphic( SotClipboardFormatId nFormat, Graphic& rGrf ) const;
+
+ void Paste( SvStream& rStm, SwPasteSdr nAction, const Point* pPt );
+ bool Paste( const Graphic &rGrf, const OUString& rURL );
+
+ comphelper::OInterfaceContainerHelper3<css::text::XPasteListener>& GetPasteListeners();
+
+ bool IsAlignPossible() const;
+ void SetCalcFieldValueHdl(Outliner* pOutliner);
+
+ void Insert(const OUString& rGrfName,
+ const OUString& rFltName,
+ const Graphic* pGraphic,
+ const SfxItemSet* pFlyAttrSet );
+
+ /// Insertion of a drawing object which have to be already inserted in the DrawModel.
+ void InsertDrawObj( SdrObject& rDrawObj,
+ const Point& rInsertPosition );
+
+ void ReplaceSdrObj( const OUString& rGrfName, const Graphic* pGrf );
+
+ // --> #i972#
+ /** for starmath formulas anchored 'as char' it aligns it baseline to baseline
+ changing the previous vertical orientation */
+ void AlignFormulaToBaseline( const css::uno::Reference < css::embed::XEmbeddedObject >& xObj );
+
+ /// aligns all formulas with anchor 'as char' to baseline
+ void AlignAllFormulasToBaseline();
+
+ /// Provide information about content situated closes to given Point.
+ Point GetContentPos( const Point& rPoint, bool bNext ) const;
+
+ /// Convert document position into position relative to the current page.
+ Point GetRelativePagePosition(const Point& rDocPos);
+
+ /// Hide or show layout-selection and pass call to CursorSh.
+ void ShellLoseFocus();
+ void ShellGetFocus();
+
+ /// PageDescriptor-interface
+ void ChgCurPageDesc( const SwPageDesc& );
+ size_t GetCurPageDesc( const bool bCalcFrame = true ) const;
+ size_t GetMousePageDesc( const Point &rPt ) const;
+ size_t GetPageDescCnt() const;
+ SwPageDesc* FindPageDescByName( const OUString& rName,
+ bool bGetFromPool = false,
+ size_t* pPos = nullptr );
+
+ const SwPageDesc& GetPageDesc( size_t i ) const;
+ void ChgPageDesc( size_t i, const SwPageDesc& );
+ /** if inside all selection only one PageDesc, @return this.
+ Otherwise @return 0 pointer */
+ const SwPageDesc* GetSelectedPageDescs() const;
+
+ const SwRect& GetAnyCurRect( CurRectType eType,
+ const Point* pPt = nullptr,
+ const css::uno::Reference < css::embed::XEmbeddedObject >& =
+ css::uno::Reference < css::embed::XEmbeddedObject >() ) const;
+
+ /// Page number of the page containing Point, O if no page.
+ sal_uInt16 GetPageNumber( const Point &rPoint ) const;
+ bool GetPageNumber( tools::Long nYPos, bool bAtCursorPos, sal_uInt16& rPhyNum, sal_uInt16& rVirtNum, OUString &rDisplay ) const;
+
+ SwFlyFrameFormat* InsertObject( const svt::EmbeddedObjectRef&,
+ SfxItemSet* pFlyAttrSet );
+ bool FinishOLEObj(); ///< Shutdown server.
+
+ void GetTableAttr( SfxItemSet & ) const;
+ void SetTableAttr( const SfxItemSet & );
+
+ bool HasWholeTabSelection() const;
+
+ /// Is content of a table cell or at least a table cell completely selected?
+ bool HasBoxSelection() const;
+
+ void InsertRow( sal_uInt16 nCnt, bool bBehind );
+ void InsertCol( sal_uInt16 nCnt, bool bBehind ); // 0 == at the end.
+ bool DeleteCol();
+ void DeleteTable();
+ bool DeleteRow(bool bCompleteTable = false);
+
+ SwTable::SearchType GetTableInsertMode() const { return m_eTableInsertMode; }
+ void SetTableInsertMode( SwTable::SearchType eFlag ) { m_eTableInsertMode = eFlag; }
+
+ bool GetTableCopied() const { return m_bTableCopied; }
+ void SetTableCopied( bool bCopied ) { m_bTableCopied = bCopied; }
+
+ bool DeleteTableSel(); ///< Current selection, may be whole table.
+
+ TableMergeErr MergeTab(); /**< Merge selected parts of table */
+
+ /// Split cell vertically or horizontally.
+ void SplitTab( bool bVert, sal_uInt16 nCnt, bool bSameHeight );
+ bool Sort(const SwSortOptions&); // sorting
+
+ void SetRowHeight( const SwFormatFrameSize &rSz );
+
+ /// Pointer must be destroyed by caller != 0.
+ std::unique_ptr<SwFormatFrameSize> GetRowHeight() const;
+
+ void SetRowSplit( const SwFormatRowSplit &rSz );
+ std::unique_ptr<SwFormatRowSplit> GetRowSplit() const;
+
+ void SetBoxAlign( sal_uInt16 nOrient );
+ sal_uInt16 GetBoxAlign() const; ///< USHRT_MAX if ambiguous.
+
+ bool BalanceRowHeight( bool bTstOnly, const bool bOptimize = false );
+
+ void SetTabBorders( const SfxItemSet& rSet );
+ void GetTabBorders( SfxItemSet& rSet) const;
+ void SetTabLineStyle(const Color* pColor, bool bSetLine = false, const editeng::SvxBorderLine* pBorderLine = nullptr);
+
+ void SetTabBackground( const SvxBrushItem &rNew );
+ void GetTabBackground( std::unique_ptr<SvxBrushItem>& rToFill ) const;
+
+ void SetBoxBackground( const SvxBrushItem &rNew );
+ bool GetBoxBackground( std::unique_ptr<SvxBrushItem>& rToFill ) const; ///< FALSE ambiguous.
+
+ void SetBoxDirection( const SvxFrameDirectionItem& rNew );
+ bool GetBoxDirection( std::unique_ptr<SvxFrameDirectionItem>& rToFill ) const; ///< FALSE ambiguous.
+
+ void SetRowBackground( const SvxBrushItem &rNew );
+ bool GetRowBackground( std::unique_ptr<SvxBrushItem>& rToFill ) const; ///< FALSE ambiguous.
+
+ SwTab WhichMouseTabCol( const Point &rPt ) const;
+ void GetTabCols( SwTabCols &rToFill ) const; ///< Info about columns and margins.
+ void SetTabCols( const SwTabCols &rNew, bool bCurRowOnly );
+ void GetMouseTabCols( SwTabCols &rToFill, const Point &rPt ) const;
+ void SetMouseTabCols( const SwTabCols &rNew, bool bCurRowOnly,
+ const Point &rPt );
+
+ /// pEnd will be used during MouseMove
+ bool SelTableRowCol( const Point& rPt, const Point* pEnd, bool bRowDrag );
+
+ void GetTabRows( SwTabCols &rToFill ) const;
+ void SetTabRows( const SwTabCols &rNew, bool bCurColOnly );
+ void GetMouseTabRows( SwTabCols &rToFill, const Point &rPt ) const;
+ void SetMouseTabRows( const SwTabCols &rNew, bool bCurColOnly, const Point &rPt );
+
+ void ProtectCells(); /**< If a table selection exists it is destroyed in case
+ cursor is not allowed in readonly. */
+ void UnProtectCells(); ///< Refers to table selection.
+ void UnProtectTables(); ///< Unprotect all tables in selection.
+ bool HasTableAnyProtection( const OUString* pTableName,
+ bool* pFullTableProtection );
+ bool CanUnProtectCells() const;
+
+ sal_uInt16 GetRowsToRepeat() const;
+ void SetRowsToRepeat( sal_uInt16 nNumOfRows );
+ sal_uInt16 GetVirtPageNum() const;
+
+ /** @return the number of table rows currently selected
+ if the selection start at the top of the table. */
+ sal_uInt16 GetRowSelectionFromTop() const;
+
+ bool IsInRepeatedHeadline() const { return CheckHeadline( true ); }
+ bool IsInHeadline() const { return CheckHeadline( false ); }
+
+ void AdjustCellWidth( const bool bBalance, const bool bNoShrink );
+
+ /// Not allowed if only empty cells are selected.
+ bool IsAdjustCellWidthAllowed( bool bBalance = false ) const;
+
+ /// Set table style of the current table.
+ void SetTableStyle(const OUString& rStyleName);
+ bool SetTableStyle(const SwTableAutoFormat& rNew);
+
+ /// Update the direct formatting according to the current table style.
+ /// @param pTableNode Table node to update. When nullptr, current cursor position is used.
+ /// @param bResetDirect Reset direct formatting that might be applied to the cells.
+ /// @param pStyleName new style to apply
+ bool UpdateTableStyleFormatting(SwTableNode *pTableNode = nullptr, bool bResetDirect = false, OUString const* pStyleName = nullptr);
+
+ bool GetTableAutoFormat( SwTableAutoFormat& rGet );
+
+ void SetColRowWidthHeight( TableChgWidthHeightType eType, sal_uInt16 nDiff );
+
+ void GetAutoSum( OUString& rFormula ) const;
+
+ /** Phy: real page count.
+ Virt: consider offset that may have been set by user. */
+ sal_uInt16 GetPhyPageNum() const;
+
+ void SetNewPageOffset( sal_uInt16 nOffset );
+ void SetPageOffset( sal_uInt16 nOffset ); ///< Changes last page offset.
+ sal_uInt16 GetPageOffset() const; ///< @return last page offset.
+
+ void InsertLabel( const SwLabelType eType, const OUString &rText, const OUString& rSeparator,
+ const OUString& rNumberSeparator,
+ const bool bBefore, const sal_uInt16 nId,
+ const OUString& rCharacterStyle,
+ const bool bCpyBrd );
+
+ /// The ruler needs some information too.
+ sal_uInt16 GetCurColNum( SwGetCurColNumPara* pPara = nullptr ) const; //0 == not in any column.
+ sal_uInt16 GetCurMouseColNum( const Point &rPt ) const;
+ size_t GetCurTabColNum() const; //0 == not in any table.
+ size_t GetCurMouseTabColNum( const Point &rPt ) const;
+ sal_uInt16 GetCurOutColNum() const; ///< Current outer column.
+
+ bool IsColRightToLeft() const;
+ bool IsTableRightToLeft() const;
+ bool IsMouseTableRightToLeft( const Point &rPt ) const;
+ bool IsTableVertical() const;
+
+ bool IsLastCellInRow() const;
+
+ /// Width of current range for column-dialog.
+ tools::Long GetSectionWidth( SwFormat const & rFormat ) const;
+
+ void GetConnectableFrameFormats
+ (SwFrameFormat & rFormat, const OUString & rReference, bool bSuccessors,
+ std::vector< OUString > & aPrevPageVec,
+ std::vector< OUString > & aThisPageVec,
+ std::vector< OUString > & aNextPageVec,
+ std::vector< OUString > & aRestVec);
+
+ /** SwFEShell::GetShapeBackground
+
+ method determines background color of the page the selected drawing
+ object is on and returns this color.
+ If no color is found, because no drawing object is selected or ...,
+ color COL_BLACK (default color on constructing object of class Color)
+ is returned.
+
+ @returns an object of class Color
+ */
+ Color GetShapeBackground() const;
+
+ /** Is default horizontal text direction for selected drawing object right-to-left
+
+ Because drawing objects only painted for each page only, the default
+ horizontal text direction of a drawing object is given by the corresponding
+ page property.
+
+ @returns boolean, indicating, if the horizontal text direction of the
+ page, the selected drawing object is on, is right-to-left.
+ */
+ bool IsShapeDefaultHoriTextDirR2L() const;
+
+ void ParkCursorInTab();
+
+ SwTextNode * GetNumRuleNodeAtPos(const Point &rPot);
+ bool IsNumLabel( const Point &rPt, int nMaxOffset = -1 );
+
+ static bool IsVerticalModeAtNdAndPos( const SwTextNode& _rTextNode,
+ const Point& _rDocPos );
+
+ void ToggleHeaderFooterEdit( );
+ static void SetLineEnds(SfxItemSet& rAttr, SdrObject const & rObj, sal_uInt16 nSlotId);
+
+ SAL_DLLPRIVATE void ClearColumnRowCache(SwTabFrame const*);
+};
+
+void ClearFEShellTabCols(SwDoc & rDoc, SwTabFrame const*const pFrame);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */