diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-08-19 15:16:40 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-08-27 08:33:43 +0200 |
commit | 7da92c6fff9549ebbea5e527b72ffd89faa46f71 (patch) | |
tree | 67974d9e08e3633eeca4741cca0f223d8d7bf449 /svx/source | |
parent | 3877328fcea01f24a94fd3debc243cf9f187dee9 (diff) |
clang-format svx/source/svdraw/svdedxv.cxx
This file had lots of inline ifs making it hard to read and debug.
Format the file using clang-format.
Change-Id: I591f2724f4b10002de34c62ca178caa2a1dde4c0
Reviewed-on: https://gerrit.libreoffice.org/77726
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'svx/source')
-rw-r--r-- | svx/source/svdraw/svdedxv.cxx | 2006 |
1 files changed, 1069 insertions, 937 deletions
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 69d9905c9477..bc4839d1ec15 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -18,93 +18,91 @@ */ #include <com/sun/star/i18n/WordType.hpp> -#include <svtools/accessibilityoptions.hxx> -#include <svx/svdedxv.hxx> -#include <svl/solar.hrc> -#include <svl/itemiter.hxx> -#include <vcl/commandevent.hxx> -#include <vcl/weld.hxx> -#include <vcl/hatch.hxx> -#include <svl/whiter.hxx> -#include <svl/style.hxx> -#include <editeng/editstat.hxx> -#include <vcl/canvastools.hxx> -#include <vcl/cursor.hxx> -#include <editeng/unotext.hxx> #include <editeng/editdata.hxx> #include <editeng/editeng.hxx> #include <editeng/editobj.hxx> +#include <editeng/editstat.hxx> #include <editeng/outlobj.hxx> -#include <svx/svdoutl.hxx> +#include <editeng/unotext.hxx> +#include <svl/itemiter.hxx> +#include <svl/solar.hrc> +#include <svl/style.hxx> +#include <svl/whiter.hxx> +#include <svtools/accessibilityoptions.hxx> #include <svx/sdtfchim.hxx> -#include <svx/svdotext.hxx> -#include <svx/svdundo.hxx> -#include <svx/svditer.hxx> -#include <svx/svdpagv.hxx> -#include <svx/svdpage.hxx> +#include <svx/selectioncontroller.hxx> +#include <svx/svdedxv.hxx> #include <svx/svdetc.hxx> +#include <svx/svditer.hxx> #include <svx/svdotable.hxx> -#include <svx/selectioncontroller.hxx> +#include <svx/svdotext.hxx> +#include <svx/svdoutl.hxx> +#include <svx/svdpage.hxx> +#include <svx/svdpagv.hxx> +#include <svx/svdundo.hxx> +#include <vcl/canvastools.hxx> +#include <vcl/commandevent.hxx> +#include <vcl/cursor.hxx> +#include <vcl/hatch.hxx> +#include <vcl/weld.hxx> #ifdef DBG_UTIL #include <svdibrow.hxx> #endif -#include <svx/svddrgv.hxx> -#include <svx/strings.hrc> -#include <svx/dialmgr.hxx> -#include <svx/globl3d.hxx> -#include <svx/textchain.hxx> -#include <svx/textchaincursor.hxx> -#include <editeng/outliner.hxx> -#include <editeng/adjustitem.hxx> -#include <svtools/colorcfg.hxx> -#include <vcl/svapp.hxx> -#include <svx/sdrpaintwindow.hxx> -#include <svx/sdrundomanager.hxx> -#include <sdr/overlay/overlaytools.hxx> -#include <svx/sdr/table/tablecontroller.hxx> +#include <comphelper/lok.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <drawinglayer/processor2d/processor2dtools.hxx> -#include <comphelper/lok.hxx> +#include <editeng/adjustitem.hxx> +#include <editeng/outliner.hxx> +#include <sal/log.hxx> +#include <sdr/overlay/overlaytools.hxx> #include <sfx2/viewsh.hxx> -#include <svx/svdviter.hxx> -#include <svx/sdr/overlay/overlayselection.hxx> +#include <svtools/colorcfg.hxx> +#include <svx/dialmgr.hxx> +#include <svx/globl3d.hxx> #include <svx/sdr/overlay/overlaymanager.hxx> +#include <svx/sdr/overlay/overlayselection.hxx> +#include <svx/sdr/table/tablecontroller.hxx> #include <svx/sdrpagewindow.hxx> -#include <sal/log.hxx> +#include <svx/sdrpaintwindow.hxx> +#include <svx/sdrundomanager.hxx> +#include <svx/strings.hrc> +#include <svx/svddrgv.hxx> +#include <svx/svdviter.hxx> +#include <svx/textchain.hxx> +#include <svx/textchaincursor.hxx> #include <tools/debug.hxx> +#include <vcl/svapp.hxx> #include <memory> void SdrObjEditView::ImpClearVars() { - bQuickTextEditMode=true; + bQuickTextEditMode = true; pTextEditOutliner.reset(); - pTextEditOutlinerView=nullptr; - pTextEditPV=nullptr; - pTextEditWin=nullptr; - pTextEditCursorBuffer=nullptr; - bTextEditNewObj=false; - bMacroDown=false; - pMacroObj=nullptr; - pMacroPV=nullptr; - pMacroWin=nullptr; - nMacroTol=0; - bTextEditDontDelete=false; - bTextEditOnlyOneView=false; -} - -SdrObjEditView::SdrObjEditView( - SdrModel& rSdrModel, - OutputDevice* pOut) -: SdrGlueEditView(rSdrModel, pOut), - mpOldTextEditUndoManager(nullptr) + pTextEditOutlinerView = nullptr; + pTextEditPV = nullptr; + pTextEditWin = nullptr; + pTextEditCursorBuffer = nullptr; + bTextEditNewObj = false; + bMacroDown = false; + pMacroObj = nullptr; + pMacroPV = nullptr; + pMacroWin = nullptr; + nMacroTol = 0; + bTextEditDontDelete = false; + bTextEditOnlyOneView = false; +} + +SdrObjEditView::SdrObjEditView(SdrModel& rSdrModel, OutputDevice* pOut) + : SdrGlueEditView(rSdrModel, pOut) + , mpOldTextEditUndoManager(nullptr) { ImpClearVars(); } SdrObjEditView::~SdrObjEditView() { - pTextEditWin = nullptr; // so there's no ShowCursor in SdrEndTextEdit + pTextEditWin = nullptr; // so there's no ShowCursor in SdrEndTextEdit assert(!IsTextEdit()); if (IsTextEdit()) SdrEndTextEdit(); @@ -112,20 +110,19 @@ SdrObjEditView::~SdrObjEditView() assert(nullptr == mpOldTextEditUndoManager); // should have been reset } -bool SdrObjEditView::IsAction() const -{ - return IsMacroObj() || SdrGlueEditView::IsAction(); -} +bool SdrObjEditView::IsAction() const { return IsMacroObj() || SdrGlueEditView::IsAction(); } void SdrObjEditView::MovAction(const Point& rPnt) { - if (IsMacroObj()) MovMacroObj(rPnt); + if (IsMacroObj()) + MovMacroObj(rPnt); SdrGlueEditView::MovAction(rPnt); } void SdrObjEditView::EndAction() { - if (IsMacroObj()) EndMacroObj(); + if (IsMacroObj()) + EndMacroObj(); SdrGlueEditView::EndAction(); } @@ -164,7 +161,8 @@ SdrPageView* SdrObjEditView::ShowSdrPage(SdrPage* pPage) // Call GetSfxViewShell() to make sure ImpMakeOutlinerView() // registers the view shell of this draw view, and not the view // shell of pView. - OutlinerView* pOutlinerView = pView->ImpMakeOutlinerView(static_cast<vcl::Window*>(pOutDev), nullptr, GetSfxViewShell()); + OutlinerView* pOutlinerView = pView->ImpMakeOutlinerView( + static_cast<vcl::Window*>(pOutDev), nullptr, GetSfxViewShell()); pOutlinerView->HideCursor(); pView->GetTextEditOutliner()->InsertView(pOutlinerView); } @@ -173,10 +171,11 @@ SdrPageView* SdrObjEditView::ShowSdrPage(SdrPage* pPage) return pPageView; } -namespace { - +namespace +{ /// Removes outliner views registered in other draw views that use pOutputDevice. -void lcl_RemoveTextEditOutlinerViews(SdrObjEditView const * pThis, SdrPageView const * pPageView, OutputDevice const * pOutputDevice) +void lcl_RemoveTextEditOutlinerViews(SdrObjEditView const* pThis, SdrPageView const* pPageView, + OutputDevice const* pOutputDevice) { if (!comphelper::LibreOfficeKit::isActive()) return; @@ -205,7 +204,6 @@ void lcl_RemoveTextEditOutlinerViews(SdrObjEditView const * pThis, SdrPageView c } } } - } void SdrObjEditView::HideSdrPage() @@ -217,26 +215,32 @@ void SdrObjEditView::HideSdrPage() void SdrObjEditView::TakeActionRect(tools::Rectangle& rRect) const { - if (IsMacroObj()) { - rRect=pMacroObj->GetCurrentBoundRect(); - } else { + if (IsMacroObj()) + { + rRect = pMacroObj->GetCurrentBoundRect(); + } + else + { SdrGlueEditView::TakeActionRect(rRect); } } void SdrObjEditView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) { - SdrGlueEditView::Notify(rBC,rHint); - if (pTextEditOutliner!=nullptr) { + SdrGlueEditView::Notify(rBC, rHint); + if (pTextEditOutliner != nullptr) + { // change of printer while editing if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint) { const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint); - SdrHintKind eKind=pSdrHint->GetKind(); - if (eKind==SdrHintKind::RefDeviceChange) { + SdrHintKind eKind = pSdrHint->GetKind(); + if (eKind == SdrHintKind::RefDeviceChange) + { pTextEditOutliner->SetRefDevice(mpModel->GetRefDevice()); } - if (eKind==SdrHintKind::DefaultTabChange) { + if (eKind == SdrHintKind::DefaultTabChange) + { pTextEditOutliner->SetDefTab(mpModel->GetDefaultTabulator()); } } @@ -246,16 +250,19 @@ void SdrObjEditView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) void SdrObjEditView::ModelHasChanged() { SdrGlueEditView::ModelHasChanged(); - if (mxTextEditObj.is() && !mxTextEditObj->IsInserted()) SdrEndTextEdit(); // object deleted + if (mxTextEditObj.is() && !mxTextEditObj->IsInserted()) + SdrEndTextEdit(); // object deleted // TextEditObj changed? - if (IsTextEdit()) { - SdrTextObj* pTextObj= mxTextEditObj.get(); - if (pTextObj!=nullptr) { - sal_uIntPtr nOutlViewCnt=pTextEditOutliner->GetViewCount(); - bool bAreaChg=false; - bool bAnchorChg=false; - bool bColorChg=false; - bool bContourFrame=pTextObj->IsContourTextFrame(); + if (IsTextEdit()) + { + SdrTextObj* pTextObj = mxTextEditObj.get(); + if (pTextObj != nullptr) + { + sal_uIntPtr nOutlViewCnt = pTextEditOutliner->GetViewCount(); + bool bAreaChg = false; + bool bAnchorChg = false; + bool bColorChg = false; + bool bContourFrame = pTextObj->IsContourTextFrame(); EEAnchorMode eNewAnchor(EEAnchorMode::VCenterHCenter); tools::Rectangle aOldArea(aMinTextEditArea); aOldArea.Union(aTextEditArea); @@ -265,67 +272,77 @@ void SdrObjEditView::ModelHasChanged() Size aPaperMax1; tools::Rectangle aEditArea1; tools::Rectangle aMinArea1; - pTextObj->TakeTextEditArea(&aPaperMin1,&aPaperMax1,&aEditArea1,&aMinArea1); + pTextObj->TakeTextEditArea(&aPaperMin1, &aPaperMax1, &aEditArea1, &aMinArea1); Point aPvOfs(pTextObj->GetTextEditOffset()); // add possible GridOffset to up-to-now view-independent EditAreas basegfx::B2DVector aGridOffset(0.0, 0.0); - if(getPossibleGridOffsetForSdrObject(aGridOffset, pTextObj, GetSdrPageView())) + if (getPossibleGridOffsetForSdrObject(aGridOffset, pTextObj, GetSdrPageView())) { - const Point aOffset( - basegfx::fround(aGridOffset.getX()), - basegfx::fround(aGridOffset.getY())); + const Point aOffset(basegfx::fround(aGridOffset.getX()), + basegfx::fround(aGridOffset.getY())); aEditArea1 += aOffset; aMinArea1 += aOffset; } - aEditArea1.Move(aPvOfs.X(),aPvOfs.Y()); - aMinArea1.Move(aPvOfs.X(),aPvOfs.Y()); + aEditArea1.Move(aPvOfs.X(), aPvOfs.Y()); + aMinArea1.Move(aPvOfs.X(), aPvOfs.Y()); tools::Rectangle aNewArea(aMinArea1); aNewArea.Union(aEditArea1); - if (aNewArea!=aOldArea || aEditArea1!=aTextEditArea || aMinArea1!=aMinTextEditArea || - pTextEditOutliner->GetMinAutoPaperSize()!=aPaperMin1 || pTextEditOutliner->GetMaxAutoPaperSize()!=aPaperMax1) { - aTextEditArea=aEditArea1; - aMinTextEditArea=aMinArea1; + if (aNewArea != aOldArea || aEditArea1 != aTextEditArea + || aMinArea1 != aMinTextEditArea + || pTextEditOutliner->GetMinAutoPaperSize() != aPaperMin1 + || pTextEditOutliner->GetMaxAutoPaperSize() != aPaperMax1) + { + aTextEditArea = aEditArea1; + aMinTextEditArea = aMinArea1; pTextEditOutliner->SetUpdateMode(false); pTextEditOutliner->SetMinAutoPaperSize(aPaperMin1); pTextEditOutliner->SetMaxAutoPaperSize(aPaperMax1); - pTextEditOutliner->SetPaperSize(Size(0,0)); // re-format Outliner - if (!bContourFrame) { + pTextEditOutliner->SetPaperSize(Size(0, 0)); // re-format Outliner + if (!bContourFrame) + { pTextEditOutliner->ClearPolygon(); - EEControlBits nStat=pTextEditOutliner->GetControlWord(); - nStat|=EEControlBits::AUTOPAGESIZE; + EEControlBits nStat = pTextEditOutliner->GetControlWord(); + nStat |= EEControlBits::AUTOPAGESIZE; pTextEditOutliner->SetControlWord(nStat); - } else { - EEControlBits nStat=pTextEditOutliner->GetControlWord(); - nStat&=~EEControlBits::AUTOPAGESIZE; + } + else + { + EEControlBits nStat = pTextEditOutliner->GetControlWord(); + nStat &= ~EEControlBits::AUTOPAGESIZE; pTextEditOutliner->SetControlWord(nStat); tools::Rectangle aAnchorRect; pTextObj->TakeTextAnchorRect(aAnchorRect); - pTextObj->ImpSetContourPolygon(*pTextEditOutliner,aAnchorRect, true); + pTextObj->ImpSetContourPolygon(*pTextEditOutliner, aAnchorRect, true); } - for (sal_uIntPtr nOV=0; nOV<nOutlViewCnt; nOV++) { - OutlinerView* pOLV=pTextEditOutliner->GetView(nOV); - EVControlBits nStat0=pOLV->GetControlWord(); - EVControlBits nStat=nStat0; + for (sal_uIntPtr nOV = 0; nOV < nOutlViewCnt; nOV++) + { + OutlinerView* pOLV = pTextEditOutliner->GetView(nOV); + EVControlBits nStat0 = pOLV->GetControlWord(); + EVControlBits nStat = nStat0; // AutoViewSize only if not ContourFrame. - if (!bContourFrame) nStat|=EVControlBits::AUTOSIZE; - else nStat&=~EVControlBits::AUTOSIZE; - if (nStat!=nStat0) pOLV->SetControlWord(nStat); + if (!bContourFrame) + nStat |= EVControlBits::AUTOSIZE; + else + nStat &= ~EVControlBits::AUTOSIZE; + if (nStat != nStat0) + pOLV->SetControlWord(nStat); } pTextEditOutliner->SetUpdateMode(true); - bAreaChg=true; + bAreaChg = true; } } - if (pTextEditOutlinerView!=nullptr) { // check fill and anchor - EEAnchorMode eOldAnchor=pTextEditOutlinerView->GetAnchorMode(); - eNewAnchor=pTextObj->GetOutlinerViewAnchorMode(); - bAnchorChg=eOldAnchor!=eNewAnchor; + if (pTextEditOutlinerView != nullptr) + { // check fill and anchor + EEAnchorMode eOldAnchor = pTextEditOutlinerView->GetAnchorMode(); + eNewAnchor = pTextObj->GetOutlinerViewAnchorMode(); + bAnchorChg = eOldAnchor != eNewAnchor; Color aOldColor(pTextEditOutlinerView->GetBackgroundColor()); aNewColor = GetTextEditBackgroundColor(*this); - bColorChg=aOldColor!=aNewColor; + bColorChg = aOldColor != aNewColor; } // refresh always when it's a contour frame. That // refresh is necessary since it triggers the repaint @@ -344,26 +361,27 @@ void SdrObjEditView::ModelHasChanged() // again on ModelHasChanged(). if (bContourFrame || bAreaChg || bAnchorChg || bColorChg) { - for (sal_uIntPtr nOV=0; nOV<nOutlViewCnt; nOV++) + for (sal_uIntPtr nOV = 0; nOV < nOutlViewCnt; nOV++) { - OutlinerView* pOLV=pTextEditOutliner->GetView(nOV); + OutlinerView* pOLV = pTextEditOutliner->GetView(nOV); { // invalidate old OutlinerView area - vcl::Window* pWin=pOLV->GetWindow(); + vcl::Window* pWin = pOLV->GetWindow(); tools::Rectangle aTmpRect(aOldArea); - sal_uInt16 nPixSiz=pOLV->GetInvalidateMore()+1; - Size aMore(pWin->PixelToLogic(Size(nPixSiz,nPixSiz))); - aTmpRect.AdjustLeft( -(aMore.Width()) ); - aTmpRect.AdjustRight(aMore.Width() ); - aTmpRect.AdjustTop( -(aMore.Height()) ); - aTmpRect.AdjustBottom(aMore.Height() ); - InvalidateOneWin(*pWin,aTmpRect); + sal_uInt16 nPixSiz = pOLV->GetInvalidateMore() + 1; + Size aMore(pWin->PixelToLogic(Size(nPixSiz, nPixSiz))); + aTmpRect.AdjustLeft(-(aMore.Width())); + aTmpRect.AdjustRight(aMore.Width()); + aTmpRect.AdjustTop(-(aMore.Height())); + aTmpRect.AdjustBottom(aMore.Height()); + InvalidateOneWin(*pWin, aTmpRect); } if (bAnchorChg) pOLV->SetAnchorMode(eNewAnchor); if (bColorChg) - pOLV->SetBackgroundColor( aNewColor ); + pOLV->SetBackgroundColor(aNewColor); - pOLV->SetOutputArea(aTextEditArea); // because otherwise, we're not re-anchoring correctly + pOLV->SetOutputArea( + aTextEditArea); // because otherwise, we're not re-anchoring correctly ImpInvalidateOutlinerView(*pOLV); } pTextEditOutlinerView->ShowCursor(); @@ -375,7 +393,7 @@ void SdrObjEditView::ModelHasChanged() namespace { - /** +/** Helper class to visualize the content of an active EditView as an OverlayObject. These objects work with Primitives and are handled from the OverlayManager(s) in place as needed. @@ -388,238 +406,223 @@ namespace It buffers as much as possible locally and *only* triggers a real change (see call to objectChange()) when really needed. */ - class TextEditOverlayObject : public sdr::overlay::OverlayObject - { - protected: - /// local access to associated sdr::overlay::OverlaySelection - sdr::overlay::OverlaySelection* mpOverlaySelection; +class TextEditOverlayObject : public sdr::overlay::OverlayObject +{ +protected: + /// local access to associated sdr::overlay::OverlaySelection + sdr::overlay::OverlaySelection* mpOverlaySelection; - /// local definition depends on active OutlinerView - OutlinerView& mrOutlinerView; + /// local definition depends on active OutlinerView + OutlinerView& mrOutlinerView; - /// geometry definitions with buffering - basegfx::B2DRange maLastRange; - basegfx::B2DRange maRange; + /// geometry definitions with buffering + basegfx::B2DRange maLastRange; + basegfx::B2DRange maRange; - /// text content definitions with buffering - drawinglayer::primitive2d::Primitive2DContainer maTextPrimitives; - drawinglayer::primitive2d::Primitive2DContainer maLastTextPrimitives; + /// text content definitions with buffering + drawinglayer::primitive2d::Primitive2DContainer maTextPrimitives; + drawinglayer::primitive2d::Primitive2DContainer maLastTextPrimitives; - /// bitfield - bool const mbVisualizeSurroundingFrame : 1; + /// bitfield + bool const mbVisualizeSurroundingFrame : 1; - // geometry creation for OverlayObject, can use local *Last* values - virtual drawinglayer::primitive2d::Primitive2DContainer createOverlayObjectPrimitive2DSequence() override; + // geometry creation for OverlayObject, can use local *Last* values + virtual drawinglayer::primitive2d::Primitive2DContainer + createOverlayObjectPrimitive2DSequence() override; - public: - TextEditOverlayObject( - const Color& rColor, - OutlinerView& rOutlinerView, - bool bVisualizeSurroundingFrame); - virtual ~TextEditOverlayObject() override; +public: + TextEditOverlayObject(const Color& rColor, OutlinerView& rOutlinerView, + bool bVisualizeSurroundingFrame); + virtual ~TextEditOverlayObject() override; - // data read access - const sdr::overlay::OverlaySelection* getOverlaySelection() const { return mpOverlaySelection; } - const OutlinerView& getOutlinerView() const { return mrOutlinerView; } - bool getVisualizeSurroundingFrame() const { return mbVisualizeSurroundingFrame; } + // data read access + const sdr::overlay::OverlaySelection* getOverlaySelection() const { return mpOverlaySelection; } + const OutlinerView& getOutlinerView() const { return mrOutlinerView; } + bool getVisualizeSurroundingFrame() const { return mbVisualizeSurroundingFrame; } - /// override to check conditions for last createOverlayObjectPrimitive2DSequence - virtual drawinglayer::primitive2d::Primitive2DContainer getOverlayObjectPrimitive2DSequence() const override; + /// override to check conditions for last createOverlayObjectPrimitive2DSequence + virtual drawinglayer::primitive2d::Primitive2DContainer + getOverlayObjectPrimitive2DSequence() const override; - // data write access. In this OverlayObject we only have the - // callback that triggers detecting if something *has* changed - void checkDataChange(const basegfx::B2DRange& rMinTextEditArea); - void checkSelectionChange(); - }; + // data write access. In this OverlayObject we only have the + // callback that triggers detecting if something *has* changed + void checkDataChange(const basegfx::B2DRange& rMinTextEditArea); + void checkSelectionChange(); +}; - drawinglayer::primitive2d::Primitive2DContainer TextEditOverlayObject::createOverlayObjectPrimitive2DSequence() +drawinglayer::primitive2d::Primitive2DContainer +TextEditOverlayObject::createOverlayObjectPrimitive2DSequence() +{ + drawinglayer::primitive2d::Primitive2DContainer aRetval; + + /// outer frame visualization + if (getVisualizeSurroundingFrame()) { - drawinglayer::primitive2d::Primitive2DContainer aRetval; + const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer; + const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01); + const sal_uInt16 nPixSiz(getOutlinerView().GetInvalidateMore() - 1); - /// outer frame visualization - if (getVisualizeSurroundingFrame()) - { - const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer; - const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01); - const sal_uInt16 nPixSiz(getOutlinerView().GetInvalidateMore() - 1); + aRetval.push_back(new drawinglayer::primitive2d::OverlayRectanglePrimitive( + maRange, getBaseColor().getBColor(), fTransparence, std::max(6, nPixSiz - 2), // grow + 0.0, // shrink + 0.0)); + } - aRetval.push_back( - new drawinglayer::primitive2d::OverlayRectanglePrimitive( - maRange, - getBaseColor().getBColor(), - fTransparence, - std::max(6, nPixSiz - 2), // grow - 0.0, // shrink - 0.0)); - } + // add buffered TextPrimitives + aRetval.append(maTextPrimitives); - // add buffered TextPrimitives - aRetval.append(maTextPrimitives); + return aRetval; +} - return aRetval; - } +TextEditOverlayObject::TextEditOverlayObject(const Color& rColor, OutlinerView& rOutlinerView, + bool bVisualizeSurroundingFrame) + : OverlayObject(rColor) + , mpOverlaySelection(nullptr) + , mrOutlinerView(rOutlinerView) + , maLastRange() + , maRange() + , maTextPrimitives() + , maLastTextPrimitives() + , mbVisualizeSurroundingFrame(bVisualizeSurroundingFrame) +{ + // no AA for TextEdit overlay + allowAntiAliase(false); - TextEditOverlayObject::TextEditOverlayObject( - const Color& rColor, - OutlinerView& rOutlinerView, - bool bVisualizeSurroundingFrame) - : OverlayObject(rColor), - mpOverlaySelection(nullptr), - mrOutlinerView(rOutlinerView), - maLastRange(), - maRange(), - maTextPrimitives(), - maLastTextPrimitives(), - mbVisualizeSurroundingFrame(bVisualizeSurroundingFrame) - { - // no AA for TextEdit overlay - allowAntiAliase(false); + // create local OverlaySelection - this is an integral part of EditText + // visualization + const std::vector<basegfx::B2DRange> aEmptySelection{}; + mpOverlaySelection = new sdr::overlay::OverlaySelection(sdr::overlay::OverlayType::Transparent, + rColor, aEmptySelection, true); +} - // create local OverlaySelection - this is an integral part of EditText - // visualization - const std::vector< basegfx::B2DRange > aEmptySelection{}; - mpOverlaySelection = new sdr::overlay::OverlaySelection( - sdr::overlay::OverlayType::Transparent, - rColor, - aEmptySelection, - true); +TextEditOverlayObject::~TextEditOverlayObject() +{ + if (getOverlaySelection()) + { + delete mpOverlaySelection; + mpOverlaySelection = nullptr; } - TextEditOverlayObject::~TextEditOverlayObject() + if (getOverlayManager()) { - if (getOverlaySelection()) - { - delete mpOverlaySelection; - mpOverlaySelection = nullptr; - } + getOverlayManager()->remove(*this); + } +} - if (getOverlayManager()) +drawinglayer::primitive2d::Primitive2DContainer +TextEditOverlayObject::getOverlayObjectPrimitive2DSequence() const +{ + if (!getPrimitive2DSequence().empty()) + { + if (!maRange.equal(maLastRange) || maLastTextPrimitives != maTextPrimitives) { - getOverlayManager()->remove(*this); + // conditions of last local decomposition have changed, delete to force new evaluation + const_cast<TextEditOverlayObject*>(this)->resetPrimitive2DSequence(); } } - drawinglayer::primitive2d::Primitive2DContainer TextEditOverlayObject::getOverlayObjectPrimitive2DSequence() const + if (getPrimitive2DSequence().empty()) { - if (!getPrimitive2DSequence().empty()) - { - if (!maRange.equal(maLastRange) || maLastTextPrimitives != maTextPrimitives) - { - // conditions of last local decomposition have changed, delete to force new evaluation - const_cast<TextEditOverlayObject*>(this)->resetPrimitive2DSequence(); - } - } + // remember new buffered values + const_cast<TextEditOverlayObject*>(this)->maLastRange = maRange; + const_cast<TextEditOverlayObject*>(this)->maLastTextPrimitives = maTextPrimitives; + } - if (getPrimitive2DSequence().empty()) - { - // remember new buffered values - const_cast<TextEditOverlayObject*>(this)->maLastRange = maRange; - const_cast<TextEditOverlayObject*>(this)->maLastTextPrimitives = maTextPrimitives; - } + // call base implementation + return OverlayObject::getOverlayObjectPrimitive2DSequence(); +} + +void TextEditOverlayObject::checkDataChange(const basegfx::B2DRange& rMinTextEditArea) +{ + bool bObjectChange(false); - // call base implementation - return OverlayObject::getOverlayObjectPrimitive2DSequence(); + // check current range + const tools::Rectangle aOutArea(mrOutlinerView.GetOutputArea()); + basegfx::B2DRange aNewRange = vcl::unotools::b2DRectangleFromRectangle(aOutArea); + aNewRange.expand(rMinTextEditArea); + + if (aNewRange != maRange) + { + maRange = aNewRange; + bObjectChange = true; } - void TextEditOverlayObject::checkDataChange(const basegfx::B2DRange& rMinTextEditArea) + // check if text primitives did change + SdrOutliner* pSdrOutliner = dynamic_cast<SdrOutliner*>(getOutlinerView().GetOutliner()); + + if (pSdrOutliner) { - bool bObjectChange(false); + // get TextPrimitives directly from active Outliner + basegfx::B2DHomMatrix aNewTransformA; + basegfx::B2DHomMatrix aNewTransformB; + basegfx::B2DRange aClipRange; + drawinglayer::primitive2d::Primitive2DContainer aNewTextPrimitives; - // check current range - const tools::Rectangle aOutArea(mrOutlinerView.GetOutputArea()); - basegfx::B2DRange aNewRange = vcl::unotools::b2DRectangleFromRectangle(aOutArea); - aNewRange.expand(rMinTextEditArea); + // active Outliner is always in unified oriented coordinate system (currently) + // so just translate to TopLeft of visible Range. Keep in mind that top-left + // depends on vertical text and top-to-bottom text attributes + const tools::Rectangle aVisArea(mrOutlinerView.GetVisArea()); + const bool bVerticalWriting(pSdrOutliner->IsVertical()); + const bool bTopToBottom(pSdrOutliner->IsTopToBottom()); + const double fStartInX(bVerticalWriting && bTopToBottom + ? aOutArea.Right() - aVisArea.Left() + : aOutArea.Left() - aVisArea.Left()); + const double fStartInY(bVerticalWriting && !bTopToBottom + ? aOutArea.Bottom() - aVisArea.Top() + : aOutArea.Top() - aVisArea.Top()); - if (aNewRange != maRange) - { - maRange = aNewRange; - bObjectChange = true; - } + aNewTransformB.translate(fStartInX, fStartInY); - // check if text primitives did change - SdrOutliner* pSdrOutliner = dynamic_cast<SdrOutliner*>(getOutlinerView().GetOutliner()); - - if (pSdrOutliner) - { - // get TextPrimitives directly from active Outliner - basegfx::B2DHomMatrix aNewTransformA; - basegfx::B2DHomMatrix aNewTransformB; - basegfx::B2DRange aClipRange; - drawinglayer::primitive2d::Primitive2DContainer aNewTextPrimitives; - - // active Outliner is always in unified oriented coordinate system (currently) - // so just translate to TopLeft of visible Range. Keep in mind that top-left - // depends on vertical text and top-to-bottom text attributes - const tools::Rectangle aVisArea(mrOutlinerView.GetVisArea()); - const bool bVerticalWriting(pSdrOutliner->IsVertical()); - const bool bTopToBottom(pSdrOutliner->IsTopToBottom()); - const double fStartInX( - bVerticalWriting && bTopToBottom - ? aOutArea.Right() - aVisArea.Left() - : aOutArea.Left() - aVisArea.Left()); - const double fStartInY( - bVerticalWriting && !bTopToBottom - ? aOutArea.Bottom() - aVisArea.Top() - : aOutArea.Top() - aVisArea.Top()); - - aNewTransformB.translate( - fStartInX, - fStartInY); - - // get the current TextPrimitives. This is the most expensive part - // of this mechanism, it *may* be possible to buffer layouted - // primitives per ParaPortion with/in/dependent on the EditEngine - // content if needed. For now, get and compare - SdrTextObj::impDecomposeBlockTextPrimitiveDirect( - aNewTextPrimitives, - *pSdrOutliner, - aNewTransformA, - aNewTransformB, - aClipRange); - - if (aNewTextPrimitives != maTextPrimitives) - { - maTextPrimitives = aNewTextPrimitives; - bObjectChange = true; - } - } + // get the current TextPrimitives. This is the most expensive part + // of this mechanism, it *may* be possible to buffer layouted + // primitives per ParaPortion with/in/dependent on the EditEngine + // content if needed. For now, get and compare + SdrTextObj::impDecomposeBlockTextPrimitiveDirect( + aNewTextPrimitives, *pSdrOutliner, aNewTransformA, aNewTransformB, aClipRange); - if (bObjectChange) + if (aNewTextPrimitives != maTextPrimitives) { - // if there really *was* a change signal the OverlayManager to - // refresh this object's visualization - objectChange(); - - // on data change, always do a SelectionChange, too - // since the selection is an integral part of text visualization - checkSelectionChange(); + maTextPrimitives = aNewTextPrimitives; + bObjectChange = true; } } - void TextEditOverlayObject::checkSelectionChange() + if (bObjectChange) { - if (getOverlaySelection() && getOverlayManager()) - { - std::vector<tools::Rectangle> aLogicRects; - std::vector<basegfx::B2DRange> aLogicRanges; - const Size aLogicPixel(getOverlayManager()->getOutputDevice().PixelToLogic(Size(1, 1))); + // if there really *was* a change signal the OverlayManager to + // refresh this object's visualization + objectChange(); - // get logic selection - getOutlinerView().GetSelectionRectangles(aLogicRects); + // on data change, always do a SelectionChange, too + // since the selection is an integral part of text visualization + checkSelectionChange(); + } +} - aLogicRanges.reserve(aLogicRects.size()); - for (const auto& aRect : aLogicRects) - { - // convert from logic Rectangles to logic Ranges, do not forget to add - // one Unit (in this case logical units for one pixel, pre-calculated) - aLogicRanges.emplace_back( - aRect.Left() - aLogicPixel.Width(), aRect.Top() - aLogicPixel.Height(), - aRect.Right() + aLogicPixel.Width(), aRect.Bottom() + aLogicPixel.Height()); - } +void TextEditOverlayObject::checkSelectionChange() +{ + if (getOverlaySelection() && getOverlayManager()) + { + std::vector<tools::Rectangle> aLogicRects; + std::vector<basegfx::B2DRange> aLogicRanges; + const Size aLogicPixel(getOverlayManager()->getOutputDevice().PixelToLogic(Size(1, 1))); + + // get logic selection + getOutlinerView().GetSelectionRectangles(aLogicRects); - mpOverlaySelection->setRanges(aLogicRanges); + aLogicRanges.reserve(aLogicRects.size()); + for (const auto& aRect : aLogicRects) + { + // convert from logic Rectangles to logic Ranges, do not forget to add + // one Unit (in this case logical units for one pixel, pre-calculated) + aLogicRanges.emplace_back( + aRect.Left() - aLogicPixel.Width(), aRect.Top() - aLogicPixel.Height(), + aRect.Right() + aLogicPixel.Width(), aRect.Bottom() + aLogicPixel.Height()); } + + mpOverlaySelection->setRanges(aLogicRanges); } +} } // end of anonymous namespace // TextEdit @@ -632,11 +635,13 @@ void SdrObjEditView::EditViewInvalidate(const tools::Rectangle&) const if (IsTextEdit()) { // MinTextRange may have changed. Forward it, too - const basegfx::B2DRange aMinTextRange = vcl::unotools::b2DRectangleFromRectangle(aMinTextEditArea); + const basegfx::B2DRange aMinTextRange + = vcl::unotools::b2DRectangleFromRectangle(aMinTextEditArea); for (sal_uInt32 a(0); a < maTEOverlayGroup.count(); a++) { - TextEditOverlayObject* pCandidate = dynamic_cast< TextEditOverlayObject* >(&maTEOverlayGroup.getOverlayObject(a)); + TextEditOverlayObject* pCandidate + = dynamic_cast<TextEditOverlayObject*>(&maTEOverlayGroup.getOverlayObject(a)); if (pCandidate) { @@ -655,7 +660,8 @@ void SdrObjEditView::EditViewSelectionChange() const { for (sal_uInt32 a(0); a < maTEOverlayGroup.count(); a++) { - TextEditOverlayObject* pCandidate = dynamic_cast< TextEditOverlayObject* >(&maTEOverlayGroup.getOverlayObject(a)); + TextEditOverlayObject* pCandidate + = dynamic_cast<TextEditOverlayObject*>(&maTEOverlayGroup.getOverlayObject(a)); if (pCandidate) { @@ -665,10 +671,7 @@ void SdrObjEditView::EditViewSelectionChange() const } } -OutputDevice& SdrObjEditView::EditViewOutputDevice() const -{ - return *pTextEditWin; -} +OutputDevice& SdrObjEditView::EditViewOutputDevice() const { return *pTextEditWin; } void SdrObjEditView::TextEditDrawing(SdrPaintWindow& rPaintWindow) const { @@ -703,10 +706,14 @@ void SdrObjEditView::TextEditDrawing(SdrPaintWindow& rPaintWindow) const // context and is aware of the underlying vcl::Window, // compare against that; that's how double-buffering can // still find the matching OutlinerView. - OutputDevice* pOutputDevice = rPaintWindow.GetWindow() ? rPaintWindow.GetWindow() : &rPaintWindow.GetOutputDevice(); - if (pOLV->GetWindow() == pOutputDevice || comphelper::LibreOfficeKit::isActive()) + OutputDevice* pOutputDevice = rPaintWindow.GetWindow() + ? rPaintWindow.GetWindow() + : &rPaintWindow.GetOutputDevice(); + if (pOLV->GetWindow() == pOutputDevice + || comphelper::LibreOfficeKit::isActive()) { - ImpPaintOutlinerView(*pOLV, aCheckRect, rPaintWindow.GetTargetOutputDevice()); + ImpPaintOutlinerView(*pOLV, aCheckRect, + rPaintWindow.GetTargetOutputDevice()); return; } } @@ -716,7 +723,8 @@ void SdrObjEditView::TextEditDrawing(SdrPaintWindow& rPaintWindow) const } } -void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const tools::Rectangle& rRect, OutputDevice& rTargetDevice) const +void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const tools::Rectangle& rRect, + OutputDevice& rTargetDevice) const { const SdrTextObj* pText = GetTextEditObject(); bool bTextFrame(pText && pText->IsTextFrame()); @@ -737,18 +745,18 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const tools:: rOutlView.GetOutliner()->SetUpdateMode(true); // Bugfix #22596# rOutlView.Paint(aBlankRect, &rTargetDevice); - if(!bModified) + if (!bModified) { pTextEditOutliner->ClearModifyFlag(); } - if(bTextFrame && !bFitToSize) + if (bTextFrame && !bFitToSize) { // completely reworked to use primitives; this ensures same look and functionality const drawinglayer::geometry::ViewInformation2D aViewInformation2D; - std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> xProcessor(drawinglayer::processor2d::createProcessor2DFromOutputDevice( - rTargetDevice, - aViewInformation2D)); + std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> xProcessor( + drawinglayer::processor2d::createProcessor2DFromOutputDevice(rTargetDevice, + aViewInformation2D)); if (xProcessor) { @@ -756,17 +764,16 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const tools:: const basegfx::B2DRange aRange = vcl::unotools::b2DRectangleFromRectangle(aPixRect); const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer; const Color aHilightColor(aSvtOptionsDrawinglayer.getHilightColor()); - const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01); + const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() + * 0.01); const sal_uInt16 nPixSiz(rOutlView.GetInvalidateMore() - 1); const drawinglayer::primitive2d::Primitive2DReference xReference( new drawinglayer::primitive2d::OverlayRectanglePrimitive( - aRange, - aHilightColor.getBColor(), - fTransparence, + aRange, aHilightColor.getBColor(), fTransparence, std::max(6, nPixSiz - 2), // grow 0.0, // shrink 0.0)); - const drawinglayer::primitive2d::Primitive2DContainer aSequence { xReference }; + const drawinglayer::primitive2d::Primitive2DContainer aSequence{ xReference }; rTargetDevice.EnableMapMode(false); xProcessor->process(aSequence); @@ -777,27 +784,27 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const tools:: rOutlView.ShowCursor(/*bGotoCursor=*/true, /*bActivate=*/true); } -void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView const & rOutlView) const +void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView const& rOutlView) const { vcl::Window* pWin = rOutlView.GetWindow(); - if(pWin) + if (pWin) { const SdrTextObj* pText = GetTextEditObject(); bool bTextFrame(pText && pText->IsTextFrame()); bool bFitToSize(pText && pText->IsFitToSize()); - if(bTextFrame && !bFitToSize) + if (bTextFrame && !bFitToSize) { tools::Rectangle aBlankRect(rOutlView.GetOutputArea()); aBlankRect.Union(aMinTextEditArea); tools::Rectangle aPixRect(pWin->LogicToPixel(aBlankRect)); sal_uInt16 nPixSiz(rOutlView.GetInvalidateMore() - 1); - aPixRect.AdjustLeft( -1 ); - aPixRect.AdjustTop( -1 ); - aPixRect.AdjustRight( 1 ); - aPixRect.AdjustBottom( 1 ); + aPixRect.AdjustLeft(-1); + aPixRect.AdjustTop(-1); + aPixRect.AdjustRight(1); + aPixRect.AdjustBottom(1); { // limit xPixRect because of driver problems when pixel coordinates are too far out @@ -806,17 +813,21 @@ void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView const & rOutlView) c long nMaxX(aMaxXY.Width() + a); long nMaxY(aMaxXY.Height() + a); - if (aPixRect.Left ()<-a) aPixRect.SetLeft(-a ); - if (aPixRect.Top ()<-a) aPixRect.SetTop(-a ); - if (aPixRect.Right ()>nMaxX) aPixRect.SetRight(nMaxX ); - if (aPixRect.Bottom()>nMaxY) aPixRect.SetBottom(nMaxY ); + if (aPixRect.Left() < -a) + aPixRect.SetLeft(-a); + if (aPixRect.Top() < -a) + aPixRect.SetTop(-a); + if (aPixRect.Right() > nMaxX) + aPixRect.SetRight(nMaxX); + if (aPixRect.Bottom() > nMaxY) + aPixRect.SetBottom(nMaxY); } tools::Rectangle aOuterPix(aPixRect); - aOuterPix.AdjustLeft( -nPixSiz ); - aOuterPix.AdjustTop( -nPixSiz ); - aOuterPix.AdjustRight(nPixSiz ); - aOuterPix.AdjustBottom(nPixSiz ); + aOuterPix.AdjustLeft(-nPixSiz); + aOuterPix.AdjustTop(-nPixSiz); + aOuterPix.AdjustRight(nPixSiz); + aOuterPix.AdjustBottom(nPixSiz); bool bMapModeEnabled(pWin->IsMapModeEnabled()); pWin->EnableMapMode(false); @@ -826,15 +837,16 @@ void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView const & rOutlView) c } } -OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, OutlinerView* pGivenView, SfxViewShell* pViewShell) const +OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, OutlinerView* pGivenView, + SfxViewShell* pViewShell) const { // background Color aBackground(GetTextEditBackgroundColor(*this)); SdrTextObj* pText = mxTextEditObj.get(); - bool bTextFrame=pText!=nullptr && pText->IsTextFrame(); - bool bContourFrame=pText!=nullptr && pText->IsContourTextFrame(); + bool bTextFrame = pText != nullptr && pText->IsTextFrame(); + bool bContourFrame = pText != nullptr && pText->IsContourTextFrame(); // create OutlinerView - OutlinerView* pOutlView=pGivenView; + OutlinerView* pOutlView = pGivenView; pTextEditOutliner->SetUpdateMode(false); if (pOutlView == nullptr) @@ -847,17 +859,19 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, OutlinerVie } // disallow scrolling - EVControlBits nStat=pOutlView->GetControlWord(); - nStat&=~EVControlBits::AUTOSCROLL; + EVControlBits nStat = pOutlView->GetControlWord(); + nStat &= ~EVControlBits::AUTOSCROLL; // AutoViewSize only if not ContourFrame. - if (!bContourFrame) nStat|=EVControlBits::AUTOSIZE; - if (bTextFrame) { - sal_uInt16 nPixSiz=maHdlList.GetHdlSize()*2+1; - nStat|=EVControlBits::INVONEMORE; + if (!bContourFrame) + nStat |= EVControlBits::AUTOSIZE; + if (bTextFrame) + { + sal_uInt16 nPixSiz = maHdlList.GetHdlSize() * 2 + 1; + nStat |= EVControlBits::INVONEMORE; pOutlView->SetInvalidateMore(nPixSiz); } pOutlView->SetControlWord(nStat); - pOutlView->SetBackgroundColor( aBackground ); + pOutlView->SetBackgroundColor(aBackground); // In case we're in the process of constructing a new view shell, // SfxViewShell::Current() may still point to the old one. So if possible, @@ -866,10 +880,11 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, OutlinerVie SfxViewShell* pSfxViewShell = pViewShell ? pViewShell : GetSfxViewShell(); pOutlView->RegisterViewShell(pSfxViewShell ? pSfxViewShell : SfxViewShell::Current()); - if (pText!=nullptr) + if (pText != nullptr) { pOutlView->SetAnchorMode(pText->GetOutlinerViewAnchorMode()); - pTextEditOutliner->SetFixedCellHeight(pText->GetMergedItem(SDRATTR_TEXT_USEFIXEDCELLHEIGHT).GetValue()); + pTextEditOutliner->SetFixedCellHeight( + pText->GetMergedItem(SDRATTR_TEXT_USEFIXEDCELLHEIGHT).GetValue()); } // do update before setting output area so that aTextEditArea can be recalculated pTextEditOutliner->SetUpdateMode(true); @@ -878,34 +893,36 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, OutlinerVie return pOutlView; } -IMPL_LINK(SdrObjEditView,ImpOutlinerStatusEventHdl, EditStatus&, rEditStat, void) +IMPL_LINK(SdrObjEditView, ImpOutlinerStatusEventHdl, EditStatus&, rEditStat, void) { - if(pTextEditOutliner ) + if (pTextEditOutliner) { SdrTextObj* pTextObj = mxTextEditObj.get(); - if( pTextObj ) + if (pTextObj) { - pTextObj->onEditOutlinerStatusEvent( &rEditStat ); + pTextObj->onEditOutlinerStatusEvent(&rEditStat); } } } void SdrObjEditView::ImpChainingEventHdl() { - if(pTextEditOutliner ) + if (pTextEditOutliner) { SdrTextObj* pTextObj = mxTextEditObj.get(); OutlinerView* pOLV = GetTextEditOutlinerView(); - if( pTextObj && pOLV) + if (pTextObj && pOLV) { - TextChain *pTextChain = pTextObj->GetTextChain(); + TextChain* pTextChain = pTextObj->GetTextChain(); - // XXX: IsChainable and GetNilChainingEvent are a bit mixed up atm - if (!pTextObj->IsChainable()) { + // XXX: IsChainable and GetNilChainingEvent are a bit mixed up atm + if (!pTextObj->IsChainable()) + { return; } // This is true during an underflow-caused overflow (with pEdtOutl->SetText()) - if (pTextChain->GetNilChainingEvent(pTextObj)) { + if (pTextChain->GetNilChainingEvent(pTextObj)) + { return; } @@ -922,8 +939,11 @@ void SdrObjEditView::ImpChainingEventHdl() const bool bUndoEnabled = GetModel() && IsUndoEnabled(); std::unique_ptr<SdrUndoObjSetText> pTxtUndo; if (bUndoEnabled) - pTxtUndo.reset(dynamic_cast< SdrUndoObjSetText* > - ( GetModel()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTextObj, nText ).release() )); + pTxtUndo.reset( + dynamic_cast<SdrUndoObjSetText*>(GetModel() + ->GetSdrUndoFactory() + .CreateUndoObjectSetText(*pTextObj, nText) + .release())); // trigger actual chaining pTextObj->onChainingEvent(); @@ -945,15 +965,16 @@ void SdrObjEditView::ImpChainingEventHdl() // NOTE: Must be called. Don't let the function return if you set it to true and not reset it pTextChain->SetNilChainingEvent(pTextObj, false); - } else { + } + else + { // XXX SAL_INFO("svx.chaining", "[OnChaining] No Edit Outliner View"); } } - } -IMPL_LINK_NOARG(SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl, LinkParamNone*, void) +IMPL_LINK_NOARG(SdrObjEditView, ImpAfterCutOrPasteChainingEventHdl, LinkParamNone*, void) { SdrTextObj* pTextObj = GetTextEditObject(); if (!pTextObj) @@ -963,7 +984,7 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl, LinkParamNone ImpMoveCursorAfterChainingEvent(&aCursorManager); } -void SdrObjEditView::ImpMoveCursorAfterChainingEvent(TextChainCursorManager *pCursorManager) +void SdrObjEditView::ImpMoveCursorAfterChainingEvent(TextChainCursorManager* pCursorManager) { if (!mxTextEditObj.is() || !pCursorManager) return; @@ -974,172 +995,175 @@ void SdrObjEditView::ImpMoveCursorAfterChainingEvent(TextChainCursorManager *pCu if (!pTextObj || !pTextObj->IsChainable()) return; - TextChain *pTextChain = pTextObj->GetTextChain(); + TextChain* pTextChain = pTextObj->GetTextChain(); ESelection aNewSel = pTextChain->GetPostChainingSel(pTextObj); - pCursorManager->HandleCursorEventAfterChaining( - pTextChain->GetCursorEvent(pTextObj), - aNewSel); + pCursorManager->HandleCursorEventAfterChaining(pTextChain->GetCursorEvent(pTextObj), aNewSel); // Reset event pTextChain->SetCursorEvent(pTextObj, CursorChainingEvent::NULL_EVENT); } - -IMPL_LINK(SdrObjEditView,ImpOutlinerCalcFieldValueHdl,EditFieldInfo*,pFI,void) +IMPL_LINK(SdrObjEditView, ImpOutlinerCalcFieldValueHdl, EditFieldInfo*, pFI, void) { - bool bOk=false; - OUString& rStr=pFI->GetRepresentation(); + bool bOk = false; + OUString& rStr = pFI->GetRepresentation(); rStr.clear(); SdrTextObj* pTextObj = mxTextEditObj.get(); - if (pTextObj!=nullptr) { + if (pTextObj != nullptr) + { boost::optional<Color> pTxtCol; boost::optional<Color> pFldCol; - bOk=pTextObj->CalcFieldValue(pFI->GetField(),pFI->GetPara(),pFI->GetPos(),true,pTxtCol,pFldCol,rStr); - if (bOk) { - if (pTxtCol) { + bOk = pTextObj->CalcFieldValue(pFI->GetField(), pFI->GetPara(), pFI->GetPos(), true, + pTxtCol, pFldCol, rStr); + if (bOk) + { + if (pTxtCol) + { pFI->SetTextColor(*pTxtCol); } - if (pFldCol) { + if (pFldCol) + { pFI->SetFieldColor(*pFldCol); - } else { + } + else + { pFI->SetFieldColor(COL_LIGHTGRAY); // TODO: remove this later on (357) } } } - Outliner& rDrawOutl=mpModel->GetDrawOutliner(pTextObj); - Link<EditFieldInfo*,void> aDrawOutlLink=rDrawOutl.GetCalcFieldValueHdl(); - if (!bOk && aDrawOutlLink.IsSet()) { + Outliner& rDrawOutl = mpModel->GetDrawOutliner(pTextObj); + Link<EditFieldInfo*, void> aDrawOutlLink = rDrawOutl.GetCalcFieldValueHdl(); + if (!bOk && aDrawOutlLink.IsSet()) + { aDrawOutlLink.Call(pFI); bOk = !rStr.isEmpty(); } - if (!bOk) { + if (!bOk) + { aOldCalcFieldValueLink.Call(pFI); } } -IMPL_LINK_NOARG(SdrObjEditView, EndTextEditHdl, SdrUndoManager*, void) -{ - SdrEndTextEdit(); -} +IMPL_LINK_NOARG(SdrObjEditView, EndTextEditHdl, SdrUndoManager*, void) { SdrEndTextEdit(); } SdrUndoManager* SdrObjEditView::getSdrUndoManagerForEnhancedTextEdit() const { // default returns registered UndoManager - return GetModel() ? dynamic_cast< SdrUndoManager* >(GetModel()->GetSdrUndoManager()) : nullptr; + return GetModel() ? dynamic_cast<SdrUndoManager*>(GetModel()->GetSdrUndoManager()) : nullptr; } -bool SdrObjEditView::SdrBeginTextEdit( - SdrObject* pObj_, SdrPageView* pPV, vcl::Window* pWin, - bool bIsNewObj, SdrOutliner* pGivenOutliner, - OutlinerView* pGivenOutlinerView, - bool bDontDeleteOutliner, bool bOnlyOneView, - bool bGrabFocus) +bool SdrObjEditView::SdrBeginTextEdit(SdrObject* pObj_, SdrPageView* pPV, vcl::Window* pWin, + bool bIsNewObj, SdrOutliner* pGivenOutliner, + OutlinerView* pGivenOutlinerView, bool bDontDeleteOutliner, + bool bOnlyOneView, bool bGrabFocus) { assert(!IsTextEdit()); // FIXME this encourages all sorts of bad habits and should be removed SdrEndTextEdit(); - SdrTextObj* pObj = dynamic_cast< SdrTextObj* >( pObj_ ); - if( !pObj ) + SdrTextObj* pObj = dynamic_cast<SdrTextObj*>(pObj_); + if (!pObj) return false; // currently only possible with text objects - if(bGrabFocus && pWin) + if (bGrabFocus && pWin) { // attention, this call may cause an EndTextEdit() call to this view pWin->GrabFocus(); // to force the cursor into the edit view } - bTextEditDontDelete=bDontDeleteOutliner && pGivenOutliner!=nullptr; - bTextEditOnlyOneView=bOnlyOneView; - bTextEditNewObj=bIsNewObj; + bTextEditDontDelete = bDontDeleteOutliner && pGivenOutliner != nullptr; + bTextEditOnlyOneView = bOnlyOneView; + bTextEditNewObj = bIsNewObj; const sal_uInt32 nWinCount(PaintWindowCount()); sal_uInt32 i; bool bBrk(false); - if(!pWin) + if (!pWin) { - for(i = 0; i < nWinCount && !pWin; i++) + for (i = 0; i < nWinCount && !pWin; i++) { SdrPaintWindow* pPaintWindow = GetPaintWindow(i); - if(OUTDEV_WINDOW == pPaintWindow->GetOutputDevice().GetOutDevType()) + if (OUTDEV_WINDOW == pPaintWindow->GetOutputDevice().GetOutDevType()) { pWin = static_cast<vcl::Window*>(&pPaintWindow->GetOutputDevice()); } } // break, when no window exists - if(!pWin) + if (!pWin) { bBrk = true; } } - if(!bBrk && !pPV) + if (!bBrk && !pPV) { pPV = GetSdrPageView(); // break, when no PageView for the object exists - if(!pPV) + if (!pPV) { bBrk = true; } } // no TextEdit on objects in locked Layer - if(pPV && pPV->GetLockedLayers().IsSet(pObj->GetLayer())) + if (pPV && pPV->GetLockedLayers().IsSet(pObj->GetLayer())) { bBrk = true; } - if(pTextEditOutliner) + if (pTextEditOutliner) { OSL_FAIL("SdrObjEditView::SdrBeginTextEdit(): Old Outliner still exists."); pTextEditOutliner.reset(); } - if(!bBrk) + if (!bBrk) { - pTextEditWin=pWin; - pTextEditPV=pPV; - mxTextEditObj.reset( pObj ); + pTextEditWin = pWin; + pTextEditPV = pPV; + mxTextEditObj.reset(pObj); if (pGivenOutliner) { pTextEditOutliner.reset(pGivenOutliner); pGivenOutliner = nullptr; // so we don't delete it on the error path } else - pTextEditOutliner = SdrMakeOutliner( OutlinerMode::TextObject, mxTextEditObj->getSdrModelFromSdrObject() ); + pTextEditOutliner = SdrMakeOutliner(OutlinerMode::TextObject, + mxTextEditObj->getSdrModelFromSdrObject()); { SvtAccessibilityOptions aOptions; - pTextEditOutliner->ForceAutoColor( aOptions.GetIsAutomaticFontColor() ); + pTextEditOutliner->ForceAutoColor(aOptions.GetIsAutomaticFontColor()); } - aOldCalcFieldValueLink=pTextEditOutliner->GetCalcFieldValueHdl(); + aOldCalcFieldValueLink = pTextEditOutliner->GetCalcFieldValueHdl(); // FieldHdl has to be set by SdrBeginTextEdit, because this call an UpdateFields - pTextEditOutliner->SetCalcFieldValueHdl(LINK(this,SdrObjEditView,ImpOutlinerCalcFieldValueHdl)); - pTextEditOutliner->SetBeginPasteOrDropHdl(LINK(this,SdrObjEditView,BeginPasteOrDropHdl)); - pTextEditOutliner->SetEndPasteOrDropHdl(LINK(this,SdrObjEditView,EndPasteOrDropHdl)); + pTextEditOutliner->SetCalcFieldValueHdl( + LINK(this, SdrObjEditView, ImpOutlinerCalcFieldValueHdl)); + pTextEditOutliner->SetBeginPasteOrDropHdl(LINK(this, SdrObjEditView, BeginPasteOrDropHdl)); + pTextEditOutliner->SetEndPasteOrDropHdl(LINK(this, SdrObjEditView, EndPasteOrDropHdl)); // It is just necessary to make the visualized page known. Set it. pTextEditOutliner->setVisualizedPage(pPV->GetPage()); - pTextEditOutliner->SetTextObjNoInit( mxTextEditObj.get() ); + pTextEditOutliner->SetTextObjNoInit(mxTextEditObj.get()); - if(mxTextEditObj->BegTextEdit(*pTextEditOutliner)) + if (mxTextEditObj->BegTextEdit(*pTextEditOutliner)) { SdrTextObj* pTextObj = mxTextEditObj.get(); - DBG_ASSERT( pTextObj, "svx::SdrObjEditView::BegTextEdit(), no text object?" ); - if( !pTextObj ) + DBG_ASSERT(pTextObj, "svx::SdrObjEditView::BegTextEdit(), no text object?"); + if (!pTextObj) return false; // switch off any running TextAnimations pTextObj->SetTextAnimationAllowed(false); // remember old cursor - if (pTextEditOutliner->GetViewCount()!=0) + if (pTextEditOutliner->GetViewCount() != 0) { pTextEditOutliner->RemoveView(static_cast<size_t>(0)); } @@ -1147,14 +1171,14 @@ bool SdrObjEditView::SdrBeginTextEdit( // Determine EditArea via TakeTextEditArea. // TODO: This could theoretically be left out, because TakeTextRect() calculates the aTextEditArea, // but aMinTextEditArea has to happen, too (therefore leaving this in right now) - pTextObj->TakeTextEditArea(nullptr,nullptr,&aTextEditArea,&aMinTextEditArea); + pTextObj->TakeTextEditArea(nullptr, nullptr, &aTextEditArea, &aMinTextEditArea); tools::Rectangle aTextRect; tools::Rectangle aAnchorRect; pTextObj->TakeTextRect(*pTextEditOutliner, aTextRect, true, - &aAnchorRect /* Give true here, not false */); + &aAnchorRect /* Give true here, not false */); - if ( !pTextObj->IsContourTextFrame() ) + if (!pTextObj->IsContourTextFrame()) { // FitToSize not together with ContourFrame, for now if (pTextObj->IsFitToSize()) @@ -1165,20 +1189,19 @@ bool SdrObjEditView::SdrBeginTextEdit( // add possible GridOffset to up-to-now view-independent EditAreas basegfx::B2DVector aGridOffset(0.0, 0.0); - if(getPossibleGridOffsetForSdrObject(aGridOffset, pTextObj, pPV)) + if (getPossibleGridOffsetForSdrObject(aGridOffset, pTextObj, pPV)) { - const Point aOffset( - basegfx::fround(aGridOffset.getX()), - basegfx::fround(aGridOffset.getY())); + const Point aOffset(basegfx::fround(aGridOffset.getX()), + basegfx::fround(aGridOffset.getY())); aTextEditArea += aOffset; aMinTextEditArea += aOffset; } Point aPvOfs(pTextObj->GetTextEditOffset()); - aTextEditArea.Move(aPvOfs.X(),aPvOfs.Y()); - aMinTextEditArea.Move(aPvOfs.X(),aPvOfs.Y()); - pTextEditCursorBuffer=pWin->GetCursor(); + aTextEditArea.Move(aPvOfs.X(), aPvOfs.Y()); + aMinTextEditArea.Move(aPvOfs.X(), aPvOfs.Y()); + pTextEditCursorBuffer = pWin->GetCursor(); maHdlList.SetMoveOutside(true); @@ -1186,7 +1209,7 @@ bool SdrObjEditView::SdrBeginTextEdit( // to call AdjustMarkHdl() always. AdjustMarkHdl(); - pTextEditOutlinerView=ImpMakeOutlinerView(pWin,pGivenOutlinerView); + pTextEditOutlinerView = ImpMakeOutlinerView(pWin, pGivenOutlinerView); if (!comphelper::LibreOfficeKit::isActive() && pTextEditOutlinerView) { @@ -1198,7 +1221,8 @@ bool SdrObjEditView::SdrBeginTextEdit( const Color aHilightColor(aSvtOptionsDrawinglayer.getHilightColor()); const SdrTextObj* pText = GetTextEditObject(); const bool bTextFrame(pText && pText->IsTextFrame()); - const bool bFitToSize(pTextEditOutliner->GetControlWord() & EEControlBits::STRETCHING); + const bool bFitToSize(pTextEditOutliner->GetControlWord() + & EEControlBits::STRETCHING); const bool bVisualizeSurroundingFrame(bTextFrame && !bFitToSize); SdrPageView* pPageView = GetSdrPageView(); @@ -1210,16 +1234,17 @@ bool SdrObjEditView::SdrBeginTextEdit( if (rPageWindow.GetPaintWindow().OutputToWindow()) { - const rtl::Reference< sdr::overlay::OverlayManager >& xManager = rPageWindow.GetOverlayManager(); + const rtl::Reference<sdr::overlay::OverlayManager>& xManager + = rPageWindow.GetOverlayManager(); if (xManager.is()) { - std::unique_ptr<TextEditOverlayObject> pNewTextEditOverlayObject(new TextEditOverlayObject( - aHilightColor, - *pTextEditOutlinerView, - bVisualizeSurroundingFrame)); + std::unique_ptr<TextEditOverlayObject> pNewTextEditOverlayObject( + new TextEditOverlayObject(aHilightColor, *pTextEditOutlinerView, + bVisualizeSurroundingFrame)); xManager->add(*pNewTextEditOverlayObject); - xManager->add(const_cast<sdr::overlay::OverlaySelection&>(*pNewTextEditOverlayObject->getOverlaySelection())); + xManager->add(const_cast<sdr::overlay::OverlaySelection&>( + *pNewTextEditOverlayObject->getOverlaySelection())); maTEOverlayGroup.append(std::move(pNewTextEditOverlayObject)); } @@ -1229,30 +1254,31 @@ bool SdrObjEditView::SdrBeginTextEdit( } // check if this view is already inserted - sal_uIntPtr i2,nCount = pTextEditOutliner->GetViewCount(); - for( i2 = 0; i2 < nCount; i2++ ) + sal_uIntPtr i2, nCount = pTextEditOutliner->GetViewCount(); + for (i2 = 0; i2 < nCount; i2++) { - if( pTextEditOutliner->GetView(i2) == pTextEditOutlinerView ) + if (pTextEditOutliner->GetView(i2) == pTextEditOutlinerView) break; } - if( i2 == nCount ) - pTextEditOutliner->InsertView(pTextEditOutlinerView,0); + if (i2 == nCount) + pTextEditOutliner->InsertView(pTextEditOutlinerView, 0); maHdlList.SetMoveOutside(false); maHdlList.SetMoveOutside(true); // register all windows as OutlinerViews with the Outliner - if(!bOnlyOneView) + if (!bOnlyOneView) { - for(i = 0; i < nWinCount; i++) + for (i = 0; i < nWinCount; i++) { SdrPaintWindow* pPaintWindow = GetPaintWindow(i); OutputDevice& rOutDev = pPaintWindow->GetOutputDevice(); - if(&rOutDev != pWin && OUTDEV_WINDOW == rOutDev.GetOutDevType()) + if (&rOutDev != pWin && OUTDEV_WINDOW == rOutDev.GetOutDevType()) { - OutlinerView* pOutlView = ImpMakeOutlinerView(static_cast<vcl::Window*>(&rOutDev), nullptr); + OutlinerView* pOutlView + = ImpMakeOutlinerView(static_cast<vcl::Window*>(&rOutDev), nullptr); pTextEditOutliner->InsertView(pOutlView, static_cast<sal_uInt16>(i)); } } @@ -1268,14 +1294,16 @@ bool SdrObjEditView::SdrBeginTextEdit( if (pView == this) continue; - for(sal_uInt32 nViewPaintWindow = 0; nViewPaintWindow < pView->PaintWindowCount(); ++nViewPaintWindow) + for (sal_uInt32 nViewPaintWindow = 0; + nViewPaintWindow < pView->PaintWindowCount(); ++nViewPaintWindow) { SdrPaintWindow* pPaintWindow = pView->GetPaintWindow(nViewPaintWindow); OutputDevice& rOutDev = pPaintWindow->GetOutputDevice(); - if(&rOutDev != pWin && OUTDEV_WINDOW == rOutDev.GetOutDevType()) + if (&rOutDev != pWin && OUTDEV_WINDOW == rOutDev.GetOutDevType()) { - OutlinerView* pOutlView = ImpMakeOutlinerView(static_cast<vcl::Window*>(&rOutDev), nullptr); + OutlinerView* pOutlView = ImpMakeOutlinerView( + static_cast<vcl::Window*>(&rOutDev), nullptr); pOutlView->HideCursor(); static_cast<vcl::Window*>(&rOutDev)->SetCursor(nullptr); pTextEditOutliner->InsertView(pOutlView); @@ -1286,13 +1314,17 @@ bool SdrObjEditView::SdrBeginTextEdit( } pTextEditOutlinerView->ShowCursor(); - pTextEditOutliner->SetStatusEventHdl(LINK(this,SdrObjEditView,ImpOutlinerStatusEventHdl)); - if (pTextObj->IsChainable()) { - pTextEditOutlinerView->SetEndCutPasteLinkHdl(LINK(this,SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl) ); + pTextEditOutliner->SetStatusEventHdl( + LINK(this, SdrObjEditView, ImpOutlinerStatusEventHdl)); + if (pTextObj->IsChainable()) + { + pTextEditOutlinerView->SetEndCutPasteLinkHdl( + LINK(this, SdrObjEditView, ImpAfterCutOrPasteChainingEventHdl)); } #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif pTextEditOutliner->ClearModifyFlag(); @@ -1301,7 +1333,7 @@ bool SdrObjEditView::SdrBeginTextEdit( pWin->Invalidate(aTextEditArea); } - if( GetModel() ) + if (GetModel()) { SdrHint aHint(SdrHintKind::BeginEdit, *pTextObj); GetModel()->Broadcast(aHint); @@ -1309,14 +1341,15 @@ bool SdrObjEditView::SdrBeginTextEdit( pTextEditOutliner->setVisualizedPage(nullptr); - if( mxSelectionController.is() ) + if (mxSelectionController.is()) mxSelectionController->onSelectionHasChanged(); - if (GetModel() && IsUndoEnabled() && !GetModel()->GetDisableTextEditUsesCommonUndoManager()) + if (GetModel() && IsUndoEnabled() + && !GetModel()->GetDisableTextEditUsesCommonUndoManager()) { SdrUndoManager* pSdrUndoManager = getSdrUndoManagerForEnhancedTextEdit(); - if(pSdrUndoManager) + if (pSdrUndoManager) { // we have an outliner, undo manager and it's an EditUndoManager, exchange // the document undo manager and the default one from the outliner and tell @@ -1328,7 +1361,8 @@ bool SdrObjEditView::SdrBeginTextEdit( } else { - OSL_ENSURE(false, "The document undo manager is not derived from SdrUndoManager (!)"); + OSL_ENSURE(false, + "The document undo manager is not derived from SdrUndoManager (!)"); } } @@ -1337,8 +1371,8 @@ bool SdrObjEditView::SdrBeginTextEdit( else { pTextEditOutliner->SetCalcFieldValueHdl(aOldCalcFieldValueLink); - pTextEditOutliner->SetBeginPasteOrDropHdl(Link<PasteOrDropInfos*,void>()); - pTextEditOutliner->SetEndPasteOrDropHdl(Link<PasteOrDropInfos*,void>()); + pTextEditOutliner->SetBeginPasteOrDropHdl(Link<PasteOrDropInfos*, void>()); + pTextEditOutliner->SetEndPasteOrDropHdl(Link<PasteOrDropInfos*, void>()); } } if (pTextEditOutliner != nullptr) @@ -1347,10 +1381,10 @@ bool SdrObjEditView::SdrBeginTextEdit( } // something went wrong... - if(!bDontDeleteOutliner) + if (!bDontDeleteOutliner) { delete pGivenOutliner; - if(pGivenOutlinerView!=nullptr) + if (pGivenOutlinerView != nullptr) { delete pGivenOutlinerView; pGivenOutlinerView = nullptr; @@ -1358,10 +1392,10 @@ bool SdrObjEditView::SdrBeginTextEdit( } pTextEditOutliner.reset(); - pTextEditOutlinerView=nullptr; + pTextEditOutlinerView = nullptr; mxTextEditObj.reset(nullptr); - pTextEditPV=nullptr; - pTextEditWin=nullptr; + pTextEditPV = nullptr; + pTextEditWin = nullptr; maHdlList.SetMoveOutside(false); return false; @@ -1369,28 +1403,29 @@ bool SdrObjEditView::SdrBeginTextEdit( SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) { - SdrEndTextEditKind eRet=SdrEndTextEditKind::Unchanged; + SdrEndTextEditKind eRet = SdrEndTextEditKind::Unchanged; SdrTextObj* pTEObj = mxTextEditObj.get(); - vcl::Window* pTEWin =pTextEditWin; - OutlinerView* pTEOutlinerView=pTextEditOutlinerView; - vcl::Cursor* pTECursorBuffer=pTextEditCursorBuffer; + vcl::Window* pTEWin = pTextEditWin; + OutlinerView* pTEOutlinerView = pTextEditOutlinerView; + vcl::Cursor* pTECursorBuffer = pTextEditCursorBuffer; SdrUndoManager* pUndoEditUndoManager = nullptr; bool bNeedToUndoSavedRedoTextEdit(false); - if (GetModel() && IsUndoEnabled() && pTEObj && pTextEditOutliner && !GetModel()->GetDisableTextEditUsesCommonUndoManager()) + if (GetModel() && IsUndoEnabled() && pTEObj && pTextEditOutliner + && !GetModel()->GetDisableTextEditUsesCommonUndoManager()) { // change back the UndoManager to the remembered original one SfxUndoManager* pOriginal = pTextEditOutliner->SetUndoManager(mpOldTextEditUndoManager); mpOldTextEditUndoManager = nullptr; - if(pOriginal) + if (pOriginal) { // check if we got back our document undo manager SdrUndoManager* pSdrUndoManager = getSdrUndoManagerForEnhancedTextEdit(); - if(pSdrUndoManager && dynamic_cast< SdrUndoManager* >(pOriginal) == pSdrUndoManager) + if (pSdrUndoManager && dynamic_cast<SdrUndoManager*>(pOriginal) == pSdrUndoManager) { - if(pSdrUndoManager->isEndTextEditTriggeredFromUndo()) + if (pSdrUndoManager->isEndTextEditTriggeredFromUndo()) { // remember the UndoManager where missing Undos have to be triggered after end // text edit. When the undo had triggered the end text edit, the original action @@ -1401,7 +1436,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) // to create a complete text change undo action for the redo buffer. Also mark this // state when at least one redo was executed; the created extra TextChange needs to // be undone in addition to the first real undo outside the text edit changes - while(pSdrUndoManager->GetRedoActionCount()) + while (pSdrUndoManager->GetRedoActionCount()) { bNeedToUndoSavedRedoTextEdit = true; pSdrUndoManager->Redo(); @@ -1410,11 +1445,12 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) // reset the callback link and let the undo manager cleanup all text edit // undo actions to get the stack back to the form before the text edit - pSdrUndoManager->SetEndTextEditHdl(Link<SdrUndoManager*,void>()); + pSdrUndoManager->SetEndTextEditHdl(Link<SdrUndoManager*, void>()); } else { - OSL_ENSURE(false, "Got UndoManager back in SdrEndTextEdit which is NOT the expected document UndoManager (!)"); + OSL_ENSURE(false, "Got UndoManager back in SdrEndTextEdit which is NOT the " + "expected document UndoManager (!)"); delete pOriginal; } } @@ -1424,7 +1460,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) assert(nullptr == mpOldTextEditUndoManager); // cannot be restored! } - if( GetModel() && mxTextEditObj.is() ) + if (GetModel() && mxTextEditObj.is()) { SdrHint aHint(SdrHintKind::EndEdit, *mxTextEditObj.get()); GetModel()->Broadcast(aHint); @@ -1439,48 +1475,53 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) } mxTextEditObj.reset(nullptr); - pTextEditPV=nullptr; - pTextEditWin=nullptr; + pTextEditPV = nullptr; + pTextEditWin = nullptr; SdrOutliner* pTEOutliner = pTextEditOutliner.release(); - pTextEditOutlinerView=nullptr; - pTextEditCursorBuffer=nullptr; - aTextEditArea=tools::Rectangle(); + pTextEditOutlinerView = nullptr; + pTextEditCursorBuffer = nullptr; + aTextEditArea = tools::Rectangle(); - if (pTEOutliner!=nullptr) + if (pTEOutliner != nullptr) { - bool bModified=pTEOutliner->IsModified(); - if (pTEOutlinerView!=nullptr) + bool bModified = pTEOutliner->IsModified(); + if (pTEOutlinerView != nullptr) { pTEOutlinerView->HideCursor(); } - if (pTEObj!=nullptr) + if (pTEObj != nullptr) { pTEOutliner->CompleteOnlineSpelling(); std::unique_ptr<SdrUndoObjSetText> pTxtUndo; - if( bModified ) + if (bModified) { sal_Int32 nText; - for( nText = 0; nText < pTEObj->getTextCount(); ++nText ) - if( pTEObj->getText( nText ) == pTEObj->getActiveText() ) + for (nText = 0; nText < pTEObj->getTextCount(); ++nText) + if (pTEObj->getText(nText) == pTEObj->getActiveText()) break; - pTxtUndo.reset( dynamic_cast< SdrUndoObjSetText* >( GetModel()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTEObj, nText ).release() ) ); + pTxtUndo.reset( + dynamic_cast<SdrUndoObjSetText*>(GetModel() + ->GetSdrUndoFactory() + .CreateUndoObjectSetText(*pTEObj, nText) + .release())); } - DBG_ASSERT( !bModified || pTxtUndo, "svx::SdrObjEditView::EndTextEdit(), could not create undo action!" ); + DBG_ASSERT(!bModified || pTxtUndo, + "svx::SdrObjEditView::EndTextEdit(), could not create undo action!"); // Set old CalcFieldValue-Handler again, this // has to happen before Obj::EndTextEdit(), as this does UpdateFields(). pTEOutliner->SetCalcFieldValueHdl(aOldCalcFieldValueLink); - pTEOutliner->SetBeginPasteOrDropHdl(Link<PasteOrDropInfos*,void>()); - pTEOutliner->SetEndPasteOrDropHdl(Link<PasteOrDropInfos*,void>()); + pTEOutliner->SetBeginPasteOrDropHdl(Link<PasteOrDropInfos*, void>()); + pTEOutliner->SetEndPasteOrDropHdl(Link<PasteOrDropInfos*, void>()); const bool bUndo = IsUndoEnabled(); - if( bUndo ) + if (bUndo) { EndTextEditAllViews(); OUString aObjName(pTEObj->TakeObjNameSingul()); - BegUndo(SvxResId(STR_UndoObjSetText),aObjName); + BegUndo(SvxResId(STR_UndoObjSetText), aObjName); } pTEObj->EndTextEdit(*pTEOutliner); @@ -1491,7 +1532,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) pTEObj->ActionChanged(); } - if (pTxtUndo!=nullptr) + if (pTxtUndo != nullptr) { pTxtUndo->AfterSetText(); if (!pTxtUndo->IsDifferent()) @@ -1501,39 +1542,39 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) } // check deletion of entire TextObj std::unique_ptr<SdrUndoAction> pDelUndo; - bool bDelObj=false; + bool bDelObj = false; if (bTextEditNewObj) { - bDelObj=pTEObj->IsTextFrame() && - !pTEObj->HasText() && - !pTEObj->IsEmptyPresObj() && - !pTEObj->HasFill() && - !pTEObj->HasLine(); + bDelObj = pTEObj->IsTextFrame() && !pTEObj->HasText() && !pTEObj->IsEmptyPresObj() + && !pTEObj->HasFill() && !pTEObj->HasLine(); - if(pTEObj->IsInserted() && bDelObj && pTEObj->GetObjInventor()==SdrInventor::Default && !bDontDeleteReally) + if (pTEObj->IsInserted() && bDelObj + && pTEObj->GetObjInventor() == SdrInventor::Default && !bDontDeleteReally) { - SdrObjKind eIdent=static_cast<SdrObjKind>(pTEObj->GetObjIdentifier()); - if(eIdent==OBJ_TEXT) + SdrObjKind eIdent = static_cast<SdrObjKind>(pTEObj->GetObjIdentifier()); + if (eIdent == OBJ_TEXT) { - pDelUndo= GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pTEObj); + pDelUndo = GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pTEObj); } } } if (pTxtUndo) { - if( bUndo ) + if (bUndo) AddUndo(std::move(pTxtUndo)); - eRet=SdrEndTextEditKind::Changed; + eRet = SdrEndTextEditKind::Changed; } - if (pDelUndo!=nullptr) + if (pDelUndo != nullptr) { - if( bUndo ) + if (bUndo) { AddUndo(std::move(pDelUndo)); } - eRet=SdrEndTextEditKind::Deleted; - DBG_ASSERT(pTEObj->getParentSdrObjListFromSdrObject()!=nullptr,"SdrObjEditView::SdrEndTextEdit(): Fatal: Object edited doesn't have an ObjList!"); - if (pTEObj->getParentSdrObjListFromSdrObject()!=nullptr) + eRet = SdrEndTextEditKind::Deleted; + DBG_ASSERT(pTEObj->getParentSdrObjListFromSdrObject() != nullptr, + "SdrObjEditView::SdrEndTextEdit(): Fatal: Object edited doesn't have an " + "ObjList!"); + if (pTEObj->getParentSdrObjListFromSdrObject() != nullptr) { pTEObj->getParentSdrObjListFromSdrObject()->RemoveObject(pTEObj->GetOrdNum()); CheckMarked(); // remove selection immediately... @@ -1541,14 +1582,14 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) } else if (bDelObj) { // for Writer: the app has to do the deletion itself. - eRet=SdrEndTextEditKind::ShouldBeDeleted; + eRet = SdrEndTextEditKind::ShouldBeDeleted; } - if( bUndo ) + if (bUndo) EndUndo(); // EndUndo after Remove, in case UndoStack is deleted immediately // Switch on any TextAnimation again after TextEdit - if(dynamic_cast<const SdrTextObj*>( pTEObj) != nullptr) + if (dynamic_cast<const SdrTextObj*>(pTEObj) != nullptr) { pTEObj->SetTextAnimationAllowed(true); } @@ -1558,39 +1599,42 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) AdjustMarkHdl(); } // delete all OutlinerViews - for (sal_uIntPtr i=pTEOutliner->GetViewCount(); i>0;) + for (sal_uIntPtr i = pTEOutliner->GetViewCount(); i > 0;) { i--; - OutlinerView* pOLV=pTEOutliner->GetView(i); - sal_uInt16 nMorePix=pOLV->GetInvalidateMore() + 10; - vcl::Window* pWin=pOLV->GetWindow(); + OutlinerView* pOLV = pTEOutliner->GetView(i); + sal_uInt16 nMorePix = pOLV->GetInvalidateMore() + 10; + vcl::Window* pWin = pOLV->GetWindow(); tools::Rectangle aRect(pOLV->GetOutputArea()); pTEOutliner->RemoveView(i); - if (!bTextEditDontDelete || i!=0) + if (!bTextEditDontDelete || i != 0) { // may not own the zeroth one delete pOLV; } aRect.Union(aTextEditArea); aRect.Union(aMinTextEditArea); - aRect=pWin->LogicToPixel(aRect); - aRect.AdjustLeft( -nMorePix ); - aRect.AdjustTop( -nMorePix ); - aRect.AdjustRight(nMorePix ); - aRect.AdjustBottom(nMorePix ); - aRect=pWin->PixelToLogic(aRect); - InvalidateOneWin(*pWin,aRect); + aRect = pWin->LogicToPixel(aRect); + aRect.AdjustLeft(-nMorePix); + aRect.AdjustTop(-nMorePix); + aRect.AdjustRight(nMorePix); + aRect.AdjustBottom(nMorePix); + aRect = pWin->PixelToLogic(aRect); + InvalidateOneWin(*pWin, aRect); pWin->SetFillColor(); pWin->SetLineColor(COL_BLACK); } // and now the Outliner itself - if (!bTextEditDontDelete) delete pTEOutliner; - else pTEOutliner->Clear(); - if (pTEWin!=nullptr) { + if (!bTextEditDontDelete) + delete pTEOutliner; + else + pTEOutliner->Clear(); + if (pTEWin != nullptr) + { pTEWin->SetCursor(pTECursorBuffer); } maHdlList.SetMoveOutside(false); - if (eRet!=SdrEndTextEditKind::Unchanged) + if (eRet != SdrEndTextEditKind::Unchanged) { GetMarkedObjectListWriteAccess().SetNameDirty(); } @@ -1603,17 +1647,15 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) #endif } - if( pTEObj && - !pTEObj->getSdrModelFromSdrObject().isLocked() && - pTEObj->GetBroadcaster()) + if (pTEObj && !pTEObj->getSdrModelFromSdrObject().isLocked() && pTEObj->GetBroadcaster()) { SdrHint aHint(SdrHintKind::EndEdit, *pTEObj); const_cast<SfxBroadcaster*>(pTEObj->GetBroadcaster())->Broadcast(aHint); } - if(pUndoEditUndoManager) + if (pUndoEditUndoManager) { - if(bNeedToUndoSavedRedoTextEdit) + if (bNeedToUndoSavedRedoTextEdit) { // undo the text edit action since it was created as part of an EndTextEdit // callback from undo itself. This needs to be done after the call to @@ -1629,46 +1671,42 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) return eRet; } - // info about TextEdit. Default is false. -bool SdrObjEditView::IsTextEdit() const -{ - return mxTextEditObj.is(); -} +bool SdrObjEditView::IsTextEdit() const { return mxTextEditObj.is(); } // info about TextEditPageView. Default is 0L. -SdrPageView* SdrObjEditView::GetTextEditPageView() const -{ - return pTextEditPV; -} - +SdrPageView* SdrObjEditView::GetTextEditPageView() const { return pTextEditPV; } -OutlinerView* SdrObjEditView::ImpFindOutlinerView(vcl::Window const * pWin) const +OutlinerView* SdrObjEditView::ImpFindOutlinerView(vcl::Window const* pWin) const { - if (pWin==nullptr) return nullptr; - if (pTextEditOutliner==nullptr) return nullptr; - OutlinerView* pNewView=nullptr; - sal_uIntPtr nWinCount=pTextEditOutliner->GetViewCount(); - for (sal_uIntPtr i=0; i<nWinCount && pNewView==nullptr; i++) { - OutlinerView* pView=pTextEditOutliner->GetView(i); - if (pView->GetWindow()==pWin) pNewView=pView; + if (pWin == nullptr) + return nullptr; + if (pTextEditOutliner == nullptr) + return nullptr; + OutlinerView* pNewView = nullptr; + sal_uIntPtr nWinCount = pTextEditOutliner->GetViewCount(); + for (sal_uIntPtr i = 0; i < nWinCount && pNewView == nullptr; i++) + { + OutlinerView* pView = pTextEditOutliner->GetView(i); + if (pView->GetWindow() == pWin) + pNewView = pView; } return pNewView; } void SdrObjEditView::SetTextEditWin(vcl::Window* pWin) { - if(mxTextEditObj.is() && pWin!=nullptr && pWin!=pTextEditWin) + if (mxTextEditObj.is() && pWin != nullptr && pWin != pTextEditWin) { - OutlinerView* pNewView=ImpFindOutlinerView(pWin); - if (pNewView!=nullptr && pNewView!=pTextEditOutlinerView) + OutlinerView* pNewView = ImpFindOutlinerView(pWin); + if (pNewView != nullptr && pNewView != pTextEditOutlinerView) { - if (pTextEditOutlinerView!=nullptr) + if (pTextEditOutlinerView != nullptr) { pTextEditOutlinerView->HideCursor(); } - pTextEditOutlinerView=pNewView; - pTextEditWin=pWin; + pTextEditOutlinerView = pNewView; + pTextEditWin = pWin; pWin->GrabFocus(); // Make the cursor blink here as well pNewView->ShowCursor(); ImpMakeTextCursorAreaVisible(); @@ -1678,25 +1716,27 @@ void SdrObjEditView::SetTextEditWin(vcl::Window* pWin) bool SdrObjEditView::IsTextEditHit(const Point& rHit) const { - bool bOk=false; - if(mxTextEditObj.is()) + bool bOk = false; + if (mxTextEditObj.is()) { tools::Rectangle aEditArea; - OutlinerView* pOLV=pTextEditOutliner->GetView(0); - if (pOLV!=nullptr) + OutlinerView* pOLV = pTextEditOutliner->GetView(0); + if (pOLV != nullptr) { aEditArea.Union(pOLV->GetOutputArea()); } - bOk=aEditArea.IsInside(rHit); + bOk = aEditArea.IsInside(rHit); if (bOk) { // check if any characters were actually hit - Point aPnt(rHit); aPnt-=aEditArea.TopLeft(); + Point aPnt(rHit); + aPnt -= aEditArea.TopLeft(); long nHitTol = 2000; OutputDevice* pRef = pTextEditOutliner->GetRefDevice(); - if( pRef ) - nHitTol = OutputDevice::LogicToLogic( nHitTol, MapUnit::Map100thMM, pRef->GetMapMode().GetMapUnit() ); + if (pRef) + nHitTol = OutputDevice::LogicToLogic(nHitTol, MapUnit::Map100thMM, + pRef->GetMapMode().GetMapUnit()); - bOk = pTextEditOutliner->IsTextPos( aPnt, static_cast<sal_uInt16>(nHitTol) ); + bOk = pTextEditOutliner->IsTextPos(aPnt, static_cast<sal_uInt16>(nHitTol)); } } return bOk; @@ -1704,26 +1744,27 @@ bool SdrObjEditView::IsTextEditHit(const Point& rHit) const bool SdrObjEditView::IsTextEditFrameHit(const Point& rHit) const { - bool bOk=false; - if(mxTextEditObj.is()) + bool bOk = false; + if (mxTextEditObj.is()) { SdrTextObj* pText = mxTextEditObj.get(); - OutlinerView* pOLV=pTextEditOutliner->GetView(0); - if( pOLV ) + OutlinerView* pOLV = pTextEditOutliner->GetView(0); + if (pOLV) { - vcl::Window* pWin=pOLV->GetWindow(); + vcl::Window* pWin = pOLV->GetWindow(); if (pText != nullptr && pText->IsTextFrame() && pWin != nullptr) { - sal_uInt16 nPixSiz=pOLV->GetInvalidateMore(); + sal_uInt16 nPixSiz = pOLV->GetInvalidateMore(); tools::Rectangle aEditArea(aMinTextEditArea); aEditArea.Union(pOLV->GetOutputArea()); - if (!aEditArea.IsInside(rHit)) { - Size aSiz(pWin->PixelToLogic(Size(nPixSiz,nPixSiz))); - aEditArea.AdjustLeft( -(aSiz.Width()) ); - aEditArea.AdjustTop( -(aSiz.Height()) ); - aEditArea.AdjustRight(aSiz.Width() ); - aEditArea.AdjustBottom(aSiz.Height() ); - bOk=aEditArea.IsInside(rHit); + if (!aEditArea.IsInside(rHit)) + { + Size aSiz(pWin->PixelToLogic(Size(nPixSiz, nPixSiz))); + aEditArea.AdjustLeft(-(aSiz.Width())); + aEditArea.AdjustTop(-(aSiz.Height())); + aEditArea.AdjustRight(aSiz.Width()); + aEditArea.AdjustBottom(aSiz.Height()); + bOk = aEditArea.IsInside(rHit); } } } @@ -1731,9 +1772,8 @@ bool SdrObjEditView::IsTextEditFrameHit(const Point& rHit) const return bOk; } -TextChainCursorManager *SdrObjEditView::ImpHandleMotionThroughBoxesKeyInput( - const KeyEvent& rKEvt, - bool *bOutHandled) +TextChainCursorManager* SdrObjEditView::ImpHandleMotionThroughBoxesKeyInput(const KeyEvent& rKEvt, + bool* bOutHandled) { *bOutHandled = false; @@ -1744,8 +1784,9 @@ TextChainCursorManager *SdrObjEditView::ImpHandleMotionThroughBoxesKeyInput( if (!pTextObj->GetNextLinkInChain() && !pTextObj->GetPrevLinkInChain()) return nullptr; - TextChainCursorManager *pCursorManager = new TextChainCursorManager(this, pTextObj); - if( pCursorManager->HandleKeyEvent(rKEvt) ) { + TextChainCursorManager* pCursorManager = new TextChainCursorManager(this, pTextObj); + if (pCursorManager->HandleKeyEvent(rKEvt)) + { // Possibly do other stuff here if necessary... // XXX: Careful with the checks below (in KeyInput) for pWin and co. You should do them here I guess. *bOutHandled = true; @@ -1756,7 +1797,7 @@ TextChainCursorManager *SdrObjEditView::ImpHandleMotionThroughBoxesKeyInput( bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) { - if(pTextEditOutlinerView) + if (pTextEditOutlinerView) { /* Start special handling of keys within a chain */ // We possibly move to another box before any handling @@ -1769,9 +1810,9 @@ bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) if (pTextEditOutlinerView->PostKeyEvent(rKEvt, pWin)) { - if( mpModel ) + if (mpModel) { - if( pTextEditOutliner && pTextEditOutliner->IsModified() ) + if (pTextEditOutliner && pTextEditOutliner->IsModified()) mpModel->SetChanged(); } @@ -1780,150 +1821,196 @@ bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) ImpMoveCursorAfterChainingEvent(xCursorManager.get()); /* End chaining processing */ - if (pWin!=nullptr && pWin!=pTextEditWin) SetTextEditWin(pWin); + if (pWin != nullptr && pWin != pTextEditWin) + SetTextEditWin(pWin); #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); return true; } } - return SdrGlueEditView::KeyInput(rKEvt,pWin); + return SdrGlueEditView::KeyInput(rKEvt, pWin); } bool SdrObjEditView::MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin) { - if (pTextEditOutlinerView!=nullptr) { - bool bPostIt=pTextEditOutliner->IsInSelectionMode(); - if (!bPostIt) { + if (pTextEditOutlinerView != nullptr) + { + bool bPostIt = pTextEditOutliner->IsInSelectionMode(); + if (!bPostIt) + { Point aPt(rMEvt.GetPosPixel()); - if (pWin!=nullptr) aPt=pWin->PixelToLogic(aPt); - else if (pTextEditWin!=nullptr) aPt=pTextEditWin->PixelToLogic(aPt); - bPostIt=IsTextEditHit(aPt); + if (pWin != nullptr) + aPt = pWin->PixelToLogic(aPt); + else if (pTextEditWin != nullptr) + aPt = pTextEditWin->PixelToLogic(aPt); + bPostIt = IsTextEditHit(aPt); } - if (bPostIt) { + if (bPostIt) + { Point aPixPos(rMEvt.GetPosPixel()); if (pWin) { tools::Rectangle aR(pWin->LogicToPixel(pTextEditOutlinerView->GetOutputArea())); - if (aPixPos.X()<aR.Left ()) aPixPos.setX(aR.Left () ); - if (aPixPos.X()>aR.Right ()) aPixPos.setX(aR.Right () ); - if (aPixPos.Y()<aR.Top ()) aPixPos.setY(aR.Top () ); - if (aPixPos.Y()>aR.Bottom()) aPixPos.setY(aR.Bottom() ); - } - MouseEvent aMEvt(aPixPos,rMEvt.GetClicks(),rMEvt.GetMode(), - rMEvt.GetButtons(),rMEvt.GetModifier()); - if (pTextEditOutlinerView->MouseButtonDown(aMEvt)) { - if (pWin!=nullptr && pWin!=pTextEditWin && pWin->GetOutDevType() == OUTDEV_WINDOW) + if (aPixPos.X() < aR.Left()) + aPixPos.setX(aR.Left()); + if (aPixPos.X() > aR.Right()) + aPixPos.setX(aR.Right()); + if (aPixPos.Y() < aR.Top()) + aPixPos.setY(aR.Top()); + if (aPixPos.Y() > aR.Bottom()) + aPixPos.setY(aR.Bottom()); + } + MouseEvent aMEvt(aPixPos, rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), + rMEvt.GetModifier()); + if (pTextEditOutlinerView->MouseButtonDown(aMEvt)) + { + if (pWin != nullptr && pWin != pTextEditWin + && pWin->GetOutDevType() == OUTDEV_WINDOW) SetTextEditWin(static_cast<vcl::Window*>(pWin)); #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); return true; } } } - return SdrGlueEditView::MouseButtonDown(rMEvt,pWin); + return SdrGlueEditView::MouseButtonDown(rMEvt, pWin); } bool SdrObjEditView::MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin) { - if (pTextEditOutlinerView!=nullptr) { - bool bPostIt=pTextEditOutliner->IsInSelectionMode(); - if (!bPostIt) { + if (pTextEditOutlinerView != nullptr) + { + bool bPostIt = pTextEditOutliner->IsInSelectionMode(); + if (!bPostIt) + { Point aPt(rMEvt.GetPosPixel()); - if (pWin!=nullptr) aPt=pWin->PixelToLogic(aPt); - else if (pTextEditWin!=nullptr) aPt=pTextEditWin->PixelToLogic(aPt); - bPostIt=IsTextEditHit(aPt); + if (pWin != nullptr) + aPt = pWin->PixelToLogic(aPt); + else if (pTextEditWin != nullptr) + aPt = pTextEditWin->PixelToLogic(aPt); + bPostIt = IsTextEditHit(aPt); } - if (bPostIt && pWin) { + if (bPostIt && pWin) + { Point aPixPos(rMEvt.GetPosPixel()); tools::Rectangle aR(pWin->LogicToPixel(pTextEditOutlinerView->GetOutputArea())); - if (aPixPos.X()<aR.Left ()) aPixPos.setX(aR.Left () ); - if (aPixPos.X()>aR.Right ()) aPixPos.setX(aR.Right () ); - if (aPixPos.Y()<aR.Top ()) aPixPos.setY(aR.Top () ); - if (aPixPos.Y()>aR.Bottom()) aPixPos.setY(aR.Bottom() ); - MouseEvent aMEvt(aPixPos,rMEvt.GetClicks(),rMEvt.GetMode(), - rMEvt.GetButtons(),rMEvt.GetModifier()); - if (pTextEditOutlinerView->MouseButtonUp(aMEvt)) { + if (aPixPos.X() < aR.Left()) + aPixPos.setX(aR.Left()); + if (aPixPos.X() > aR.Right()) + aPixPos.setX(aR.Right()); + if (aPixPos.Y() < aR.Top()) + aPixPos.setY(aR.Top()); + if (aPixPos.Y() > aR.Bottom()) + aPixPos.setY(aR.Bottom()); + MouseEvent aMEvt(aPixPos, rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), + rMEvt.GetModifier()); + if (pTextEditOutlinerView->MouseButtonUp(aMEvt)) + { #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); return true; } } } - return SdrGlueEditView::MouseButtonUp(rMEvt,pWin); + return SdrGlueEditView::MouseButtonUp(rMEvt, pWin); } bool SdrObjEditView::MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) { - if (pTextEditOutlinerView!=nullptr) { - bool bSelMode=pTextEditOutliner->IsInSelectionMode(); - bool bPostIt=bSelMode; - if (!bPostIt) { + if (pTextEditOutlinerView != nullptr) + { + bool bSelMode = pTextEditOutliner->IsInSelectionMode(); + bool bPostIt = bSelMode; + if (!bPostIt) + { Point aPt(rMEvt.GetPosPixel()); if (pWin) - aPt=pWin->PixelToLogic(aPt); + aPt = pWin->PixelToLogic(aPt); else if (pTextEditWin) - aPt=pTextEditWin->PixelToLogic(aPt); - bPostIt=IsTextEditHit(aPt); + aPt = pTextEditWin->PixelToLogic(aPt); + bPostIt = IsTextEditHit(aPt); } - if (bPostIt) { + if (bPostIt) + { Point aPixPos(rMEvt.GetPosPixel()); tools::Rectangle aR(pTextEditOutlinerView->GetOutputArea()); if (pWin) aR = pWin->LogicToPixel(aR); else if (pTextEditWin) aR = pTextEditWin->LogicToPixel(aR); - if (aPixPos.X()<aR.Left ()) aPixPos.setX(aR.Left () ); - if (aPixPos.X()>aR.Right ()) aPixPos.setX(aR.Right () ); - if (aPixPos.Y()<aR.Top ()) aPixPos.setY(aR.Top () ); - if (aPixPos.Y()>aR.Bottom()) aPixPos.setY(aR.Bottom() ); - MouseEvent aMEvt(aPixPos,rMEvt.GetClicks(),rMEvt.GetMode(), - rMEvt.GetButtons(),rMEvt.GetModifier()); - if (pTextEditOutlinerView->MouseMove(aMEvt) && bSelMode) { + if (aPixPos.X() < aR.Left()) + aPixPos.setX(aR.Left()); + if (aPixPos.X() > aR.Right()) + aPixPos.setX(aR.Right()); + if (aPixPos.Y() < aR.Top()) + aPixPos.setY(aR.Top()); + if (aPixPos.Y() > aR.Bottom()) + aPixPos.setY(aR.Bottom()); + MouseEvent aMEvt(aPixPos, rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), + rMEvt.GetModifier()); + if (pTextEditOutlinerView->MouseMove(aMEvt) && bSelMode) + { #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); return true; } } } - return SdrGlueEditView::MouseMove(rMEvt,pWin); + return SdrGlueEditView::MouseMove(rMEvt, pWin); } bool SdrObjEditView::Command(const CommandEvent& rCEvt, vcl::Window* pWin) { // as long as OutlinerView returns a sal_Bool, it only gets CommandEventId::StartDrag - if (pTextEditOutlinerView!=nullptr) + if (pTextEditOutlinerView != nullptr) { - if (rCEvt.GetCommand()==CommandEventId::StartDrag) { - bool bPostIt=pTextEditOutliner->IsInSelectionMode() || !rCEvt.IsMouseEvent(); - if (!bPostIt && rCEvt.IsMouseEvent()) { + if (rCEvt.GetCommand() == CommandEventId::StartDrag) + { + bool bPostIt = pTextEditOutliner->IsInSelectionMode() || !rCEvt.IsMouseEvent(); + if (!bPostIt && rCEvt.IsMouseEvent()) + { Point aPt(rCEvt.GetMousePosPixel()); - if (pWin!=nullptr) aPt=pWin->PixelToLogic(aPt); - else if (pTextEditWin!=nullptr) aPt=pTextEditWin->PixelToLogic(aPt); - bPostIt=IsTextEditHit(aPt); + if (pWin != nullptr) + aPt = pWin->PixelToLogic(aPt); + else if (pTextEditWin != nullptr) + aPt = pTextEditWin->PixelToLogic(aPt); + bPostIt = IsTextEditHit(aPt); } - if (bPostIt) { + if (bPostIt) + { Point aPixPos(rCEvt.GetMousePosPixel()); - if (rCEvt.IsMouseEvent() && pWin) { + if (rCEvt.IsMouseEvent() && pWin) + { tools::Rectangle aR(pWin->LogicToPixel(pTextEditOutlinerView->GetOutputArea())); - if (aPixPos.X()<aR.Left ()) aPixPos.setX(aR.Left () ); - if (aPixPos.X()>aR.Right ()) aPixPos.setX(aR.Right () ); - if (aPixPos.Y()<aR.Top ()) aPixPos.setY(aR.Top () ); - if (aPixPos.Y()>aR.Bottom()) aPixPos.setY(aR.Bottom() ); + if (aPixPos.X() < aR.Left()) + aPixPos.setX(aR.Left()); + if (aPixPos.X() > aR.Right()) + aPixPos.setX(aR.Right()); + if (aPixPos.Y() < aR.Top()) + aPixPos.setY(aR.Top()); + if (aPixPos.Y() > aR.Bottom()) + aPixPos.setY(aR.Bottom()); } - CommandEvent aCEvt(aPixPos,rCEvt.GetCommand(),rCEvt.IsMouseEvent()); + CommandEvent aCEvt(aPixPos, rCEvt.GetCommand(), rCEvt.IsMouseEvent()); // Command is void at the OutlinerView, sadly pTextEditOutlinerView->Command(aCEvt); - if (pWin!=nullptr && pWin!=pTextEditWin) SetTextEditWin(pWin); + if (pWin != nullptr && pWin != pTextEditWin) + SetTextEditWin(pWin); #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty(); + if (mpItemBrowser != nullptr) + mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); return true; @@ -1935,36 +2022,36 @@ bool SdrObjEditView::Command(const CommandEvent& rCEvt, vcl::Window* pWin) return true; } } - return SdrGlueEditView::Command(rCEvt,pWin); + return SdrGlueEditView::Command(rCEvt, pWin); } - bool SdrObjEditView::ImpIsTextEditAllSelected() const { - bool bRet=false; - if (pTextEditOutliner!=nullptr && pTextEditOutlinerView!=nullptr) + bool bRet = false; + if (pTextEditOutliner != nullptr && pTextEditOutlinerView != nullptr) { - if(SdrTextObj::HasTextImpl( pTextEditOutliner.get() ) ) + if (SdrTextObj::HasTextImpl(pTextEditOutliner.get())) { - const sal_Int32 nParaCnt=pTextEditOutliner->GetParagraphCount(); - Paragraph* pLastPara=pTextEditOutliner->GetParagraph( nParaCnt > 1 ? nParaCnt - 1 : 0 ); + const sal_Int32 nParaCnt = pTextEditOutliner->GetParagraphCount(); + Paragraph* pLastPara = pTextEditOutliner->GetParagraph(nParaCnt > 1 ? nParaCnt - 1 : 0); ESelection aESel(pTextEditOutlinerView->GetSelection()); - if (aESel.nStartPara==0 && aESel.nStartPos==0 && aESel.nEndPara==(nParaCnt-1)) + if (aESel.nStartPara == 0 && aESel.nStartPos == 0 && aESel.nEndPara == (nParaCnt - 1)) { - if( pTextEditOutliner->GetText(pLastPara).getLength() == aESel.nEndPos ) + if (pTextEditOutliner->GetText(pLastPara).getLength() == aESel.nEndPos) bRet = true; } // in case the selection was done backwards - if (!bRet && aESel.nEndPara==0 && aESel.nEndPos==0 && aESel.nStartPara==(nParaCnt-1)) + if (!bRet && aESel.nEndPara == 0 && aESel.nEndPos == 0 + && aESel.nStartPara == (nParaCnt - 1)) { - if(pTextEditOutliner->GetText(pLastPara).getLength() == aESel.nStartPos) + if (pTextEditOutliner->GetText(pLastPara).getLength() == aESel.nStartPos) bRet = true; } } else { - bRet=true; + bRet = true; } } return bRet; @@ -1972,12 +2059,15 @@ bool SdrObjEditView::ImpIsTextEditAllSelected() const void SdrObjEditView::ImpMakeTextCursorAreaVisible() { - if (pTextEditOutlinerView!=nullptr && pTextEditWin!=nullptr) { - vcl::Cursor* pCsr=pTextEditWin->GetCursor(); - if (pCsr!=nullptr) { + if (pTextEditOutlinerView != nullptr && pTextEditWin != nullptr) + { + vcl::Cursor* pCsr = pTextEditWin->GetCursor(); + if (pCsr != nullptr) + { Size aSiz(pCsr->GetSize()); - if (aSiz.Width()!=0 && aSiz.Height()!=0) { - MakeVisible(tools::Rectangle(pCsr->GetPos(),aSiz),*pTextEditWin); + if (aSiz.Width() != 0 && aSiz.Height() != 0) + { + MakeVisible(tools::Rectangle(pCsr->GetPos(), aSiz), *pTextEditWin); } } } @@ -1987,30 +2077,30 @@ SvtScriptType SdrObjEditView::GetScriptType() const { SvtScriptType nScriptType = SvtScriptType::NONE; - if( IsTextEdit() ) + if (IsTextEdit()) { - if( mxTextEditObj->GetOutlinerParaObject() ) + if (mxTextEditObj->GetOutlinerParaObject()) nScriptType = mxTextEditObj->GetOutlinerParaObject()->GetTextObject().GetScriptType(); - if( pTextEditOutlinerView ) + if (pTextEditOutlinerView) nScriptType = pTextEditOutlinerView->GetSelectedScriptType(); } else { - const size_t nMarkCount( GetMarkedObjectCount() ); + const size_t nMarkCount(GetMarkedObjectCount()); - for( size_t i = 0; i < nMarkCount; ++i ) + for (size_t i = 0; i < nMarkCount; ++i) { - OutlinerParaObject* pParaObj = GetMarkedObjectByIndex( i )->GetOutlinerParaObject(); + OutlinerParaObject* pParaObj = GetMarkedObjectByIndex(i)->GetOutlinerParaObject(); - if( pParaObj ) + if (pParaObj) { nScriptType |= pParaObj->GetTextObject().GetScriptType(); } } } - if( nScriptType == SvtScriptType::NONE ) + if (nScriptType == SvtScriptType::NONE) nScriptType = SvtScriptType::LATIN; return nScriptType; @@ -2018,29 +2108,31 @@ SvtScriptType SdrObjEditView::GetScriptType() const void SdrObjEditView::GetAttributes(SfxItemSet& rTargetSet, bool bOnlyHardAttr) const { - if( mxSelectionController.is() ) - if( mxSelectionController->GetAttributes( rTargetSet, bOnlyHardAttr ) ) + if (mxSelectionController.is()) + if (mxSelectionController->GetAttributes(rTargetSet, bOnlyHardAttr)) return; - if(IsTextEdit()) + if (IsTextEdit()) { - DBG_ASSERT(pTextEditOutlinerView!=nullptr,"SdrObjEditView::GetAttributes(): pTextEditOutlinerView=NULL"); - DBG_ASSERT(pTextEditOutliner!=nullptr,"SdrObjEditView::GetAttributes(): pTextEditOutliner=NULL"); + DBG_ASSERT(pTextEditOutlinerView != nullptr, + "SdrObjEditView::GetAttributes(): pTextEditOutlinerView=NULL"); + DBG_ASSERT(pTextEditOutliner != nullptr, + "SdrObjEditView::GetAttributes(): pTextEditOutliner=NULL"); // take care of bOnlyHardAttr(!) - if(!bOnlyHardAttr && mxTextEditObj->GetStyleSheet()) + if (!bOnlyHardAttr && mxTextEditObj->GetStyleSheet()) rTargetSet.Put(mxTextEditObj->GetStyleSheet()->GetItemSet()); // add object attributes - rTargetSet.Put( mxTextEditObj->GetMergedItemSet() ); + rTargetSet.Put(mxTextEditObj->GetMergedItemSet()); - if(pTextEditOutlinerView) + if (pTextEditOutlinerView) { // FALSE= regard InvalidItems as "holes," not as Default rTargetSet.Put(pTextEditOutlinerView->GetAttribs(), false); } - if(GetMarkedObjectCount()==1 && GetMarkedObjectByIndex(0)==mxTextEditObj.get()) + if (GetMarkedObjectCount() == 1 && GetMarkedObjectByIndex(0) == mxTextEditObj.get()) { MergeNotPersistAttrFromMarked(rTargetSet); } @@ -2053,70 +2145,72 @@ void SdrObjEditView::GetAttributes(SfxItemSet& rTargetSet, bool bOnlyHardAttr) c bool SdrObjEditView::SetAttributes(const SfxItemSet& rSet, bool bReplaceAll) { - bool bRet=false; - bool bTextEdit=pTextEditOutlinerView!=nullptr && mxTextEditObj.is(); - bool bAllTextSelected=ImpIsTextEditAllSelected(); - const SfxItemSet* pSet=&rSet; + bool bRet = false; + bool bTextEdit = pTextEditOutlinerView != nullptr && mxTextEditObj.is(); + bool bAllTextSelected = ImpIsTextEditAllSelected(); + const SfxItemSet* pSet = &rSet; if (!bTextEdit) { // no TextEdit active -> all Items to drawing object - if( mxSelectionController.is() ) - bRet=mxSelectionController->SetAttributes(*pSet,bReplaceAll ); + if (mxSelectionController.is()) + bRet = mxSelectionController->SetAttributes(*pSet, bReplaceAll); - if( !bRet ) + if (!bRet) { - SdrGlueEditView::SetAttributes(*pSet,bReplaceAll); - bRet=true; + SdrGlueEditView::SetAttributes(*pSet, bReplaceAll); + bRet = true; } } else { #ifdef DBG_UTIL { - bool bHasEEFeatureItems=false; + bool bHasEEFeatureItems = false; SfxItemIter aIter(rSet); - const SfxPoolItem* pItem=aIter.FirstItem(); - while (!bHasEEFeatureItems && pItem!=nullptr) + const SfxPoolItem* pItem = aIter.FirstItem(); + while (!bHasEEFeatureItems && pItem != nullptr) { if (!IsInvalidItem(pItem)) { - sal_uInt16 nW=pItem->Which(); - if (nW>=EE_FEATURE_START && nW<=EE_FEATURE_END) - bHasEEFeatureItems=true; + sal_uInt16 nW = pItem->Which(); + if (nW >= EE_FEATURE_START && nW <= EE_FEATURE_END) + bHasEEFeatureItems = true; } - pItem=aIter.NextItem(); + pItem = aIter.NextItem(); } - if(bHasEEFeatureItems) + if (bHasEEFeatureItems) { - const OUString aMessage("SdrObjEditView::SetAttributes(): Setting EE_FEATURE items at the SdrView does not make sense! It only leads to overhead and unreadable documents."); - std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(nullptr, - VclMessageType::Info, VclButtonsType::Ok, - aMessage)); + const OUString aMessage("SdrObjEditView::SetAttributes(): Setting EE_FEATURE items " + "at the SdrView does not make sense! It only leads to " + "overhead and unreadable documents."); + std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog( + nullptr, VclMessageType::Info, VclButtonsType::Ok, aMessage)); xInfoBox->run(); } } #endif bool bOnlyEEItems; - bool bNoEEItems=!SearchOutlinerItems(*pSet,bReplaceAll,&bOnlyEEItems); + bool bNoEEItems = !SearchOutlinerItems(*pSet, bReplaceAll, &bOnlyEEItems); // everything selected? -> attributes to the border, too // if no EEItems, attributes to the border only if (bAllTextSelected || bNoEEItems) { - if( mxSelectionController.is() ) - bRet=mxSelectionController->SetAttributes(*pSet,bReplaceAll ); + if (mxSelectionController.is()) + bRet = mxSelectionController->SetAttributes(*pSet, bReplaceAll); - if( !bRet ) + if (!bRet) { const bool bUndo = IsUndoEnabled(); - if( bUndo ) + if (bUndo) { BegUndo(ImpGetDescriptionString(STR_EditSetAttributes)); - AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*mxTextEditObj.get())); + AddUndo( + GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*mxTextEditObj.get())); // If this is a text object also rescue the OutlinerParaObject since // applying attributes to the object may change text layout when @@ -2125,7 +2219,8 @@ bool SdrObjEditView::SetAttributes(const SfxItemSet& rSet, bool bReplaceAll) // implementation itself. bool bRescueText = mxTextEditObj.get(); - AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*mxTextEditObj.get(),false,!bNoEEItems || bRescueText)); + AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoAttrObject( + *mxTextEditObj.get(), false, !bNoEEItems || bRescueText)); EndUndo(); } @@ -2139,47 +2234,51 @@ bool SdrObjEditView::SetAttributes(const SfxItemSet& rSet, bool bReplaceAll) // Otherwise split Set, if necessary. // Now we build an ItemSet aSet that doesn't contain EE_Items from // *pSet (otherwise it would be a copy). - std::unique_ptr<sal_uInt16[]> pNewWhichTable=RemoveWhichRange(pSet->GetRanges(),EE_ITEMS_START,EE_ITEMS_END); - SfxItemSet aSet(mpModel->GetItemPool(),pNewWhichTable.get()); + std::unique_ptr<sal_uInt16[]> pNewWhichTable + = RemoveWhichRange(pSet->GetRanges(), EE_ITEMS_START, EE_ITEMS_END); + SfxItemSet aSet(mpModel->GetItemPool(), pNewWhichTable.get()); pNewWhichTable.reset(); SfxWhichIter aIter(aSet); - sal_uInt16 nWhich=aIter.FirstWhich(); - while (nWhich!=0) + sal_uInt16 nWhich = aIter.FirstWhich(); + while (nWhich != 0) { const SfxPoolItem* pItem; - SfxItemState eState=pSet->GetItemState(nWhich,false,&pItem); - if (eState==SfxItemState::SET) aSet.Put(*pItem); - nWhich=aIter.NextWhich(); + SfxItemState eState = pSet->GetItemState(nWhich, false, &pItem); + if (eState == SfxItemState::SET) + aSet.Put(*pItem); + nWhich = aIter.NextWhich(); } + if (mxSelectionController.is()) + bRet = mxSelectionController->SetAttributes(aSet, bReplaceAll); - if( mxSelectionController.is() ) - bRet=mxSelectionController->SetAttributes(aSet,bReplaceAll ); - - if( !bRet ) + if (!bRet) { - if( IsUndoEnabled() ) + if (IsUndoEnabled()) { BegUndo(ImpGetDescriptionString(STR_EditSetAttributes)); - AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*mxTextEditObj.get())); - AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*mxTextEditObj.get())); + AddUndo( + GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*mxTextEditObj.get())); + AddUndo( + GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*mxTextEditObj.get())); EndUndo(); } mxTextEditObj->SetMergedItemSetAndBroadcast(aSet, bReplaceAll); - if (GetMarkedObjectCount()==1 && GetMarkedObjectByIndex(0)==mxTextEditObj.get()) + if (GetMarkedObjectCount() == 1 && GetMarkedObjectByIndex(0) == mxTextEditObj.get()) { SetNotPersistAttrToMarked(aSet); } } FlushComeBackTimer(); } - if(!bNoEEItems) + if (!bNoEEItems) { // and now the attributes to the EditEngine - if (bReplaceAll) { - pTextEditOutlinerView->RemoveAttribs( true ); + if (bReplaceAll) + { + pTextEditOutlinerView->RemoveAttribs(true); } pTextEditOutlinerView->SetAttribs(rSet); @@ -2188,13 +2287,13 @@ bool SdrObjEditView::SetAttributes(const SfxItemSet& rSet, bool bReplaceAll) mpModel->SetChanged(); #ifdef DBG_UTIL - if (mpItemBrowser!=nullptr) + if (mpItemBrowser != nullptr) mpItemBrowser->SetDirty(); #endif ImpMakeTextCursorAreaVisible(); } - bRet=true; + bRet = true; } return bRet; } @@ -2203,13 +2302,13 @@ SfxStyleSheet* SdrObjEditView::GetStyleSheet() const { SfxStyleSheet* pSheet = nullptr; - if( mxSelectionController.is() ) + if (mxSelectionController.is()) { - if( mxSelectionController->GetStyleSheet( pSheet ) ) + if (mxSelectionController->GetStyleSheet(pSheet)) return pSheet; } - if ( pTextEditOutlinerView ) + if (pTextEditOutlinerView) { pSheet = pTextEditOutlinerView->GetStyleSheet(); } @@ -2222,36 +2321,35 @@ SfxStyleSheet* SdrObjEditView::GetStyleSheet() const void SdrObjEditView::SetStyleSheet(SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr) { - if( mxSelectionController.is() ) + if (mxSelectionController.is()) { - if( mxSelectionController->SetStyleSheet( pStyleSheet, bDontRemoveHardAttr ) ) + if (mxSelectionController->SetStyleSheet(pStyleSheet, bDontRemoveHardAttr)) return; } // if we are currently in edit mode we must also set the stylesheet // on all paragraphs in the Outliner for the edit view - if( nullptr != pTextEditOutlinerView ) + if (nullptr != pTextEditOutlinerView) { Outliner* pOutliner = pTextEditOutlinerView->GetOutliner(); const sal_Int32 nParaCount = pOutliner->GetParagraphCount(); - for( sal_Int32 nPara = 0; nPara < nParaCount; nPara++ ) + for (sal_Int32 nPara = 0; nPara < nParaCount; nPara++) { - pOutliner->SetStyleSheet( nPara, pStyleSheet ); + pOutliner->SetStyleSheet(nPara, pStyleSheet); } } - SdrGlueEditView::SetStyleSheet(pStyleSheet,bDontRemoveHardAttr); + SdrGlueEditView::SetStyleSheet(pStyleSheet, bDontRemoveHardAttr); } - -void SdrObjEditView::AddWindowToPaintView(OutputDevice* pNewWin, vcl::Window *pWindow) +void SdrObjEditView::AddWindowToPaintView(OutputDevice* pNewWin, vcl::Window* pWindow) { SdrGlueEditView::AddWindowToPaintView(pNewWin, pWindow); - if(mxTextEditObj.is() && !bTextEditOnlyOneView && pNewWin->GetOutDevType()==OUTDEV_WINDOW) + if (mxTextEditObj.is() && !bTextEditOnlyOneView && pNewWin->GetOutDevType() == OUTDEV_WINDOW) { - OutlinerView* pOutlView=ImpMakeOutlinerView(static_cast<vcl::Window*>(pNewWin),nullptr); + OutlinerView* pOutlView = ImpMakeOutlinerView(static_cast<vcl::Window*>(pNewWin), nullptr); pTextEditOutliner->InsertView(pOutlView); } } @@ -2260,12 +2358,14 @@ void SdrObjEditView::DeleteWindowFromPaintView(OutputDevice* pOldWin) { SdrGlueEditView::DeleteWindowFromPaintView(pOldWin); - if(mxTextEditObj.is() && !bTextEditOnlyOneView && pOldWin->GetOutDevType()==OUTDEV_WINDOW) + if (mxTextEditObj.is() && !bTextEditOnlyOneView && pOldWin->GetOutDevType() == OUTDEV_WINDOW) { - for (sal_uIntPtr i=pTextEditOutliner->GetViewCount(); i>0;) { + for (sal_uIntPtr i = pTextEditOutliner->GetViewCount(); i > 0;) + { i--; - OutlinerView* pOLV=pTextEditOutliner->GetView(i); - if (pOLV && pOLV->GetWindow()==static_cast<vcl::Window*>(pOldWin)) { + OutlinerView* pOLV = pTextEditOutliner->GetView(i); + if (pOLV && pOLV->GetWindow() == static_cast<vcl::Window*>(pOldWin)) + { pTextEditOutliner->RemoveView(i); } } @@ -2276,95 +2376,102 @@ void SdrObjEditView::DeleteWindowFromPaintView(OutputDevice* pOldWin) bool SdrObjEditView::IsTextEditInSelectionMode() const { - return pTextEditOutliner!=nullptr && pTextEditOutliner->IsInSelectionMode(); + return pTextEditOutliner != nullptr && pTextEditOutliner->IsInSelectionMode(); } - // MacroMode - -void SdrObjEditView::BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, vcl::Window* pWin) +void SdrObjEditView::BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, + vcl::Window* pWin) { BrkMacroObj(); - if (pObj!=nullptr && pPV!=nullptr && pWin!=nullptr && pObj->HasMacro()) { - nTol=ImpGetHitTolLogic(nTol,nullptr); - pMacroObj=pObj; - pMacroPV=pPV; - pMacroWin=pWin; - bMacroDown=false; - nMacroTol=sal_uInt16(nTol); - aMacroDownPos=rPnt; + if (pObj != nullptr && pPV != nullptr && pWin != nullptr && pObj->HasMacro()) + { + nTol = ImpGetHitTolLogic(nTol, nullptr); + pMacroObj = pObj; + pMacroPV = pPV; + pMacroWin = pWin; + bMacroDown = false; + nMacroTol = sal_uInt16(nTol); + aMacroDownPos = rPnt; MovMacroObj(rPnt); } } void SdrObjEditView::ImpMacroUp(const Point& rUpPos) { - if (pMacroObj!=nullptr && bMacroDown) + if (pMacroObj != nullptr && bMacroDown) { SdrObjMacroHitRec aHitRec; - aHitRec.aPos=rUpPos; - aHitRec.nTol=nMacroTol; - aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers(); - aHitRec.pPageView=pMacroPV; - pMacroObj->PaintMacro(*pMacroWin,tools::Rectangle(),aHitRec); - bMacroDown=false; + aHitRec.aPos = rUpPos; + aHitRec.nTol = nMacroTol; + aHitRec.pVisiLayer = &pMacroPV->GetVisibleLayers(); + aHitRec.pPageView = pMacroPV; + pMacroObj->PaintMacro(*pMacroWin, tools::Rectangle(), aHitRec); + bMacroDown = false; } } void SdrObjEditView::ImpMacroDown(const Point& rDownPos) { - if (pMacroObj!=nullptr && !bMacroDown) + if (pMacroObj != nullptr && !bMacroDown) { SdrObjMacroHitRec aHitRec; - aHitRec.aPos=rDownPos; - aHitRec.nTol=nMacroTol; - aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers(); - aHitRec.pPageView=pMacroPV; - pMacroObj->PaintMacro(*pMacroWin,tools::Rectangle(),aHitRec); - bMacroDown=true; + aHitRec.aPos = rDownPos; + aHitRec.nTol = nMacroTol; + aHitRec.pVisiLayer = &pMacroPV->GetVisibleLayers(); + aHitRec.pPageView = pMacroPV; + pMacroObj->PaintMacro(*pMacroWin, tools::Rectangle(), aHitRec); + bMacroDown = true; } } void SdrObjEditView::MovMacroObj(const Point& rPnt) { - if (pMacroObj!=nullptr) { + if (pMacroObj != nullptr) + { SdrObjMacroHitRec aHitRec; - aHitRec.aPos=rPnt; - aHitRec.nTol=nMacroTol; - aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers(); - aHitRec.pPageView=pMacroPV; - bool bDown=pMacroObj->IsMacroHit(aHitRec); - if (bDown) ImpMacroDown(rPnt); - else ImpMacroUp(rPnt); + aHitRec.aPos = rPnt; + aHitRec.nTol = nMacroTol; + aHitRec.pVisiLayer = &pMacroPV->GetVisibleLayers(); + aHitRec.pPageView = pMacroPV; + bool bDown = pMacroObj->IsMacroHit(aHitRec); + if (bDown) + ImpMacroDown(rPnt); + else + ImpMacroUp(rPnt); } } void SdrObjEditView::BrkMacroObj() { - if (pMacroObj!=nullptr) { + if (pMacroObj != nullptr) + { ImpMacroUp(aMacroDownPos); - pMacroObj=nullptr; - pMacroPV=nullptr; - pMacroWin=nullptr; + pMacroObj = nullptr; + pMacroPV = nullptr; + pMacroWin = nullptr; } } bool SdrObjEditView::EndMacroObj() { - if (pMacroObj!=nullptr && bMacroDown) { + if (pMacroObj != nullptr && bMacroDown) + { ImpMacroUp(aMacroDownPos); SdrObjMacroHitRec aHitRec; - aHitRec.aPos=aMacroDownPos; - aHitRec.nTol=nMacroTol; - aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers(); - aHitRec.pPageView=pMacroPV; - bool bRet=pMacroObj->DoMacro(aHitRec); - pMacroObj=nullptr; - pMacroPV=nullptr; - pMacroWin=nullptr; + aHitRec.aPos = aMacroDownPos; + aHitRec.nTol = nMacroTol; + aHitRec.pVisiLayer = &pMacroPV->GetVisibleLayers(); + aHitRec.pPageView = pMacroPV; + bool bRet = pMacroObj->DoMacro(aHitRec); + pMacroObj = nullptr; + pMacroPV = nullptr; + pMacroWin = nullptr; return bRet; - } else { + } + else + { BrkMacroObj(); return false; } @@ -2372,24 +2479,27 @@ bool SdrObjEditView::EndMacroObj() /** fills the given any with a XTextCursor for the current text selection. Leaves the any untouched if there currently is no text selected */ -void SdrObjEditView::getTextSelection( css::uno::Any& rSelection ) +void SdrObjEditView::getTextSelection(css::uno::Any& rSelection) { - if( IsTextEdit() ) + if (IsTextEdit()) { OutlinerView* pOutlinerView = GetTextEditOutlinerView(); - if( pOutlinerView && pOutlinerView->HasSelection() ) + if (pOutlinerView && pOutlinerView->HasSelection()) { SdrObject* pObj = GetTextEditObject(); - if( pObj ) + if (pObj) { - css::uno::Reference< css::text::XText > xText( pObj->getUnoShape(), css::uno::UNO_QUERY ); - if( xText.is() ) + css::uno::Reference<css::text::XText> xText(pObj->getUnoShape(), + css::uno::UNO_QUERY); + if (xText.is()) { - SvxUnoTextBase* pRange = comphelper::getUnoTunnelImplementation<SvxUnoTextBase>( xText ); - if( pRange ) + SvxUnoTextBase* pRange + = comphelper::getUnoTunnelImplementation<SvxUnoTextBase>(xText); + if (pRange) { - rSelection <<= pRange->createTextCursorBySelection( pOutlinerView->GetSelection() ); + rSelection + <<= pRange->createTextCursorBySelection(pOutlinerView->GetSelection()); } } } @@ -2408,7 +2518,7 @@ void SdrObjEditView::MarkListHasChanged() { SdrGlueEditView::MarkListHasChanged(); - if( mxSelectionController.is() ) + if (mxSelectionController.is()) { mxLastSelectionController = mxSelectionController; mxSelectionController->onSelectionHasChanged(); @@ -2416,21 +2526,21 @@ void SdrObjEditView::MarkListHasChanged() mxSelectionController.clear(); - const SdrMarkList& rMarkList=GetMarkedObjectList(); - if( rMarkList.GetMarkCount() == 1 ) + const SdrMarkList& rMarkList = GetMarkedObjectList(); + if (rMarkList.GetMarkCount() == 1) { const SdrObject* pObj(rMarkList.GetMark(0)->GetMarkedSdrObj()); - SdrView* pView(dynamic_cast< SdrView* >(this)); + SdrView* pView(dynamic_cast<SdrView*>(this)); // check for table - if(pObj && pView && (pObj->GetObjInventor() == SdrInventor::Default ) && (pObj->GetObjIdentifier() == OBJ_TABLE)) + if (pObj && pView && (pObj->GetObjInventor() == SdrInventor::Default) + && (pObj->GetObjIdentifier() == OBJ_TABLE)) { mxSelectionController = sdr::table::CreateTableController( - *pView, - static_cast<const sdr::table::SdrTableObj&>(*pObj), + *pView, static_cast<const sdr::table::SdrTableObj&>(*pObj), mxLastSelectionController); - if( mxSelectionController.is() ) + if (mxSelectionController.is()) { mxLastSelectionController.clear(); mxSelectionController->onSelectionHasChanged(); @@ -2439,22 +2549,22 @@ void SdrObjEditView::MarkListHasChanged() } } -IMPL_LINK( SdrObjEditView, EndPasteOrDropHdl, PasteOrDropInfos*, pInfo, void ) +IMPL_LINK(SdrObjEditView, EndPasteOrDropHdl, PasteOrDropInfos*, pInfo, void) { - OnEndPasteOrDrop( pInfo ); + OnEndPasteOrDrop(pInfo); } -IMPL_LINK( SdrObjEditView, BeginPasteOrDropHdl, PasteOrDropInfos*, pInfo, void ) +IMPL_LINK(SdrObjEditView, BeginPasteOrDropHdl, PasteOrDropInfos*, pInfo, void) { - OnBeginPasteOrDrop( pInfo ); + OnBeginPasteOrDrop(pInfo); } -void SdrObjEditView::OnBeginPasteOrDrop( PasteOrDropInfos* ) +void SdrObjEditView::OnBeginPasteOrDrop(PasteOrDropInfos*) { // applications can derive from these virtual methods to do something before a drop or paste operation } -void SdrObjEditView::OnEndPasteOrDrop( PasteOrDropInfos* ) +void SdrObjEditView::OnEndPasteOrDrop(PasteOrDropInfos*) { // applications can derive from these virtual methods to do something before a drop or paste operation } @@ -2462,40 +2572,44 @@ void SdrObjEditView::OnEndPasteOrDrop( PasteOrDropInfos* ) sal_uInt16 SdrObjEditView::GetSelectionLevel() const { sal_uInt16 nLevel = 0xFFFF; - if( IsTextEdit() ) + if (IsTextEdit()) { - DBG_ASSERT(pTextEditOutlinerView!=nullptr,"SdrObjEditView::GetAttributes(): pTextEditOutlinerView=NULL"); - DBG_ASSERT(pTextEditOutliner!=nullptr,"SdrObjEditView::GetAttributes(): pTextEditOutliner=NULL"); - if( pTextEditOutlinerView ) + DBG_ASSERT(pTextEditOutlinerView != nullptr, + "SdrObjEditView::GetAttributes(): pTextEditOutlinerView=NULL"); + DBG_ASSERT(pTextEditOutliner != nullptr, + "SdrObjEditView::GetAttributes(): pTextEditOutliner=NULL"); + if (pTextEditOutlinerView) { //start and end position ESelection aSelect = pTextEditOutlinerView->GetSelection(); - sal_uInt16 nStartPara = ::std::min( aSelect.nStartPara, aSelect.nEndPara ); - sal_uInt16 nEndPara = ::std::max( aSelect.nStartPara, aSelect.nEndPara ); + sal_uInt16 nStartPara = ::std::min(aSelect.nStartPara, aSelect.nEndPara); + sal_uInt16 nEndPara = ::std::max(aSelect.nStartPara, aSelect.nEndPara); //get level from each paragraph nLevel = 0; - for( sal_uInt16 nPara = nStartPara; nPara <= nEndPara; nPara++ ) + for (sal_uInt16 nPara = nStartPara; nPara <= nEndPara; nPara++) { - sal_uInt16 nParaDepth = 1 << static_cast<sal_uInt16>(pTextEditOutliner->GetDepth(nPara)); - if( !(nLevel & nParaDepth) ) + sal_uInt16 nParaDepth + = 1 << static_cast<sal_uInt16>(pTextEditOutliner->GetDepth(nPara)); + if (!(nLevel & nParaDepth)) nLevel += nParaDepth; } //reduce one level for Outliner Object //if( nLevel > 0 && GetTextEditObject()->GetObjIdentifier() == OBJ_OUTLINETEXT ) // nLevel = nLevel >> 1; //no bullet paragraph selected - if( nLevel == 0) + if (nLevel == 0) nLevel = 0xFFFF; } } return nLevel; } -bool SdrObjEditView::SupportsFormatPaintbrush( SdrInventor nObjectInventor, sal_uInt16 nObjectIdentifier ) +bool SdrObjEditView::SupportsFormatPaintbrush(SdrInventor nObjectInventor, + sal_uInt16 nObjectIdentifier) { - if( nObjectInventor != SdrInventor::Default && nObjectInventor != SdrInventor::E3d ) + if (nObjectInventor != SdrInventor::Default && nObjectInventor != SdrInventor::E3d) return false; - switch(nObjectIdentifier) + switch (nObjectIdentifier) { case OBJ_NONE: case OBJ_GRUP: @@ -2539,125 +2653,143 @@ bool SdrObjEditView::SupportsFormatPaintbrush( SdrInventor nObjectInventor, sal_ } } -static const sal_uInt16* GetFormatRangeImpl( bool bTextOnly ) +static const sal_uInt16* GetFormatRangeImpl(bool bTextOnly) { - static const sal_uInt16 gRanges[] = { - SDRATTR_SHADOW_FIRST, SDRATTR_SHADOW_LAST, - SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, - SDRATTR_TABLE_FIRST, SDRATTR_TABLE_LAST, - XATTR_LINE_FIRST, XATTR_LINE_LAST, - XATTR_FILL_FIRST, XATTRSET_FILL, - EE_PARA_START, EE_PARA_END, // text-only from here on - EE_CHAR_START, EE_CHAR_END, - SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, // table cell formats - 0,0 - }; - return &gRanges[ bTextOnly ? 10 : 0]; + static const sal_uInt16 gRanges[] = { SDRATTR_SHADOW_FIRST, + SDRATTR_SHADOW_LAST, + SDRATTR_GRAF_FIRST, + SDRATTR_GRAF_LAST, + SDRATTR_TABLE_FIRST, + SDRATTR_TABLE_LAST, + XATTR_LINE_FIRST, + XATTR_LINE_LAST, + XATTR_FILL_FIRST, + XATTRSET_FILL, + EE_PARA_START, + EE_PARA_END, // text-only from here on + EE_CHAR_START, + EE_CHAR_END, + SDRATTR_MISC_FIRST, + SDRATTR_MISC_LAST, // table cell formats + 0, + 0 }; + return &gRanges[bTextOnly ? 10 : 0]; } -void SdrObjEditView::TakeFormatPaintBrush( std::shared_ptr< SfxItemSet >& rFormatSet ) +void SdrObjEditView::TakeFormatPaintBrush(std::shared_ptr<SfxItemSet>& rFormatSet) { - if( mxSelectionController.is() && mxSelectionController->TakeFormatPaintBrush(rFormatSet) ) + if (mxSelectionController.is() && mxSelectionController->TakeFormatPaintBrush(rFormatSet)) return; const SdrMarkList& rMarkList = GetMarkedObjectList(); - if( rMarkList.GetMarkCount() > 0 ) + if (rMarkList.GetMarkCount() > 0) { OutlinerView* pOLV = GetTextEditOutlinerView(); - rFormatSet.reset( new SfxItemSet( GetModel()->GetItemPool(), GetFormatRangeImpl( pOLV != nullptr ) ) ); - if( pOLV ) + rFormatSet.reset( + new SfxItemSet(GetModel()->GetItemPool(), GetFormatRangeImpl(pOLV != nullptr))); + if (pOLV) { - rFormatSet->Put( pOLV->GetAttribs() ); + rFormatSet->Put(pOLV->GetAttribs()); } else { const bool bOnlyHardAttr = false; - rFormatSet->Put( GetAttrFromMarked(bOnlyHardAttr) ); + rFormatSet->Put(GetAttrFromMarked(bOnlyHardAttr)); } // check for cloning from table cell, in which case we need to copy cell-specific formatting attributes const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - if( pObj && (pObj->GetObjInventor() == SdrInventor::Default ) && (pObj->GetObjIdentifier() == OBJ_TABLE) ) + if (pObj && (pObj->GetObjInventor() == SdrInventor::Default) + && (pObj->GetObjIdentifier() == OBJ_TABLE)) { auto pTable = static_cast<const sdr::table::SdrTableObj*>(pObj); - if (mxSelectionController.is() && pTable->getActiveCell().is()) { + if (mxSelectionController.is() && pTable->getActiveCell().is()) + { mxSelectionController->GetAttributes(*rFormatSet, false); } } } } -static SfxItemSet CreatePaintSet( const sal_uInt16 *pRanges, SfxItemPool& rPool, const SfxItemSet& rSourceSet, const SfxItemSet& rTargetSet, bool bNoCharacterFormats, bool bNoParagraphFormats ) +static SfxItemSet CreatePaintSet(const sal_uInt16* pRanges, SfxItemPool& rPool, + const SfxItemSet& rSourceSet, const SfxItemSet& rTargetSet, + bool bNoCharacterFormats, bool bNoParagraphFormats) { - SfxItemSet aPaintSet( rPool, pRanges ); + SfxItemSet aPaintSet(rPool, pRanges); - while( *pRanges ) + while (*pRanges) { sal_uInt16 nWhich = *pRanges++; const sal_uInt16 nLastWhich = *pRanges++; - if( bNoCharacterFormats && (nWhich == EE_CHAR_START) ) + if (bNoCharacterFormats && (nWhich == EE_CHAR_START)) continue; - if( bNoParagraphFormats && (nWhich == EE_PARA_START ) ) + if (bNoParagraphFormats && (nWhich == EE_PARA_START)) continue; - for( ; nWhich < nLastWhich; nWhich++ ) + for (; nWhich < nLastWhich; nWhich++) { - const SfxPoolItem* pSourceItem = rSourceSet.GetItem( nWhich ); - const SfxPoolItem* pTargetItem = rTargetSet.GetItem( nWhich ); + const SfxPoolItem* pSourceItem = rSourceSet.GetItem(nWhich); + const SfxPoolItem* pTargetItem = rTargetSet.GetItem(nWhich); - if( (pSourceItem && !pTargetItem) || (pSourceItem && pTargetItem && *pSourceItem != *pTargetItem ) ) + if ((pSourceItem && !pTargetItem) + || (pSourceItem && pTargetItem && *pSourceItem != *pTargetItem)) { - aPaintSet.Put( *pSourceItem ); + aPaintSet.Put(*pSourceItem); } } } return aPaintSet; } -void SdrObjEditView::ApplyFormatPaintBrushToText( SfxItemSet const & rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats ) +void SdrObjEditView::ApplyFormatPaintBrushToText(SfxItemSet const& rFormatSet, SdrTextObj& rTextObj, + SdrText* pText, bool bNoCharacterFormats, + bool bNoParagraphFormats) { OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : nullptr; - if(pParaObj) + if (pParaObj) { SdrOutliner& rOutliner = rTextObj.ImpGetDrawOutliner(); rOutliner.SetText(*pParaObj); sal_Int32 nParaCount(rOutliner.GetParagraphCount()); - if(nParaCount) + if (nParaCount) { - for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++) + for (sal_Int32 nPara = 0; nPara < nParaCount; nPara++) { - if( !bNoCharacterFormats ) - rOutliner.RemoveCharAttribs( nPara ); + if (!bNoCharacterFormats) + rOutliner.RemoveCharAttribs(nPara); SfxItemSet aSet(rOutliner.GetParaAttribs(nPara)); - aSet.Put(CreatePaintSet( GetFormatRangeImpl(true), *aSet.GetPool(), rFormatSet, aSet, bNoCharacterFormats, bNoParagraphFormats ) ); + aSet.Put(CreatePaintSet(GetFormatRangeImpl(true), *aSet.GetPool(), rFormatSet, aSet, + bNoCharacterFormats, bNoParagraphFormats)); rOutliner.SetParaAttribs(nPara, aSet); } std::unique_ptr<OutlinerParaObject> pTemp = rOutliner.CreateParaObject(0, nParaCount); rOutliner.Clear(); - rTextObj.NbcSetOutlinerParaObjectForText(std::move(pTemp),pText); + rTextObj.NbcSetOutlinerParaObjectForText(std::move(pTemp), pText); } } } -void SdrObjEditView::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ) +void SdrObjEditView::ApplyFormatPaintBrush(SfxItemSet& rFormatSet, bool bNoCharacterFormats, + bool bNoParagraphFormats) { - if( mxSelectionController.is() && - mxSelectionController->ApplyFormatPaintBrush( rFormatSet, bNoCharacterFormats, bNoParagraphFormats ) ) + if (mxSelectionController.is() + && mxSelectionController->ApplyFormatPaintBrush(rFormatSet, bNoCharacterFormats, + bNoParagraphFormats)) { return; } OutlinerView* pOLV = GetTextEditOutlinerView(); const SdrMarkList& rMarkList = GetMarkedObjectList(); - if( !pOLV ) + if (!pOLV) { SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); const SfxItemSet& rShapeSet = pObj->GetMergedItemSet(); @@ -2670,9 +2802,9 @@ void SdrObjEditView::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoChar const sal_uInt16* pRanges = rFormatSet.GetRanges(); bool bTextOnly = true; - while( *pRanges ) + while (*pRanges) { - if( (*pRanges != EE_PARA_START) && (*pRanges != EE_CHAR_START) ) + if ((*pRanges != EE_PARA_START) && (*pRanges != EE_CHAR_START)) { bTextOnly = false; break; @@ -2680,57 +2812,57 @@ void SdrObjEditView::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoChar pRanges += 2; } - if( !bTextOnly ) + if (!bTextOnly) { - SfxItemSet aPaintSet( CreatePaintSet( - GetFormatRangeImpl(false), *rShapeSet.GetPool(), - rFormatSet, rShapeSet, - bNoCharacterFormats, bNoParagraphFormats ) ); - SetAttrToMarked(aPaintSet, false/*bReplaceAll*/); + SfxItemSet aPaintSet(CreatePaintSet(GetFormatRangeImpl(false), *rShapeSet.GetPool(), + rFormatSet, rShapeSet, bNoCharacterFormats, + bNoParagraphFormats)); + SetAttrToMarked(aPaintSet, false /*bReplaceAll*/); } // now apply character and paragraph formatting to text, if the shape has any SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>(pObj); - if( pTextObj ) + if (pTextObj) { sal_Int32 nText = pTextObj->getTextCount(); - while( --nText >= 0 ) + while (--nText >= 0) { - SdrText* pText = pTextObj->getText( nText ); - ApplyFormatPaintBrushToText( rFormatSet, *pTextObj, pText, bNoCharacterFormats, bNoParagraphFormats ); + SdrText* pText = pTextObj->getText(nText); + ApplyFormatPaintBrushToText(rFormatSet, *pTextObj, pText, bNoCharacterFormats, + bNoParagraphFormats); } } } else { ::Outliner* pOutliner = pOLV->GetOutliner(); - if( pOutliner ) + if (pOutliner) { const EditEngine& rEditEngine = pOutliner->GetEditEngine(); - ESelection aSel( pOLV->GetSelection() ); - if( !aSel.HasRange() ) - pOLV->SetSelection( rEditEngine.GetWord( aSel, css::i18n::WordType::DICTIONARY_WORD ) ); + ESelection aSel(pOLV->GetSelection()); + if (!aSel.HasRange()) + pOLV->SetSelection(rEditEngine.GetWord(aSel, css::i18n::WordType::DICTIONARY_WORD)); const bool bRemoveParaAttribs = !bNoParagraphFormats; - pOLV->RemoveAttribsKeepLanguages( bRemoveParaAttribs ); - SfxItemSet aSet( pOLV->GetAttribs() ); - SfxItemSet aPaintSet( CreatePaintSet( - GetFormatRangeImpl(true), *aSet.GetPool(), - rFormatSet, aSet, - bNoCharacterFormats, bNoParagraphFormats ) ); - pOLV->SetAttribs( aPaintSet ); + pOLV->RemoveAttribsKeepLanguages(bRemoveParaAttribs); + SfxItemSet aSet(pOLV->GetAttribs()); + SfxItemSet aPaintSet(CreatePaintSet(GetFormatRangeImpl(true), *aSet.GetPool(), + rFormatSet, aSet, bNoCharacterFormats, + bNoParagraphFormats)); + pOLV->SetAttribs(aPaintSet); } } - // check for cloning to table cell, in which case we need to copy cell-specific formatting attributes SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - if( pObj && (pObj->GetObjInventor() == SdrInventor::Default) && (pObj->GetObjIdentifier() == OBJ_TABLE) ) + if (pObj && (pObj->GetObjInventor() == SdrInventor::Default) + && (pObj->GetObjIdentifier() == OBJ_TABLE)) { auto pTable = static_cast<sdr::table::SdrTableObj*>(pObj); - if (pTable->getActiveCell().is() && mxSelectionController.is()) { + if (pTable->getActiveCell().is() && mxSelectionController.is()) + { mxSelectionController->SetAttributes(rFormatSet, false); } } |