diff options
Diffstat (limited to 'sc/source/ui/view/gridwin3.cxx')
-rw-r--r-- | sc/source/ui/view/gridwin3.cxx | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/sc/source/ui/view/gridwin3.cxx b/sc/source/ui/view/gridwin3.cxx index c0aa97ded4c6..3b257fabc226 100644 --- a/sc/source/ui/view/gridwin3.cxx +++ b/sc/source/ui/view/gridwin3.cxx @@ -31,15 +31,40 @@ #include <output.hxx> #include <drawview.hxx> #include <fupoor.hxx> +#include <fusel.hxx> +#include <scmod.hxx> +#include <appoptio.hxx> #include <drawutil.hxx> #include <document.hxx> #include <comphelper/lok.hxx> +static bool lcl_HasSelectionChanged(const SdrMarkList & rBeforeList, const SdrMarkList & rAfterList) +{ + if (rBeforeList.GetMarkCount() != rAfterList.GetMarkCount()) + return true; + for (size_t nObject = 0; nObject < rBeforeList.GetMarkCount(); ++nObject) + { + if (rBeforeList.GetMark(nObject)->GetMarkedSdrObj() != + rAfterList.GetMark(nObject)->GetMarkedSdrObj()) + return true; + } + return false; +} + +static bool lcl_PosUnchanged(const tools::Rectangle& rSelectionRect, const Point& rDrawSelectionPos) +{ + return rDrawSelectionPos.X() == rSelectionRect.Left() && + rDrawSelectionPos.Y() == rSelectionRect.Top(); +} + bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) { bool bRet = false; FuPoor* pDraw = mrViewData.GetView()->GetDrawFuncPtr(); + if (pDraw) + pDraw->ResetSelectionHasChanged(); + ScDrawView* pDrView = mrViewData.GetScDrawView(); if (pDraw && !mrViewData.IsRefMode()) { MapMode aDrawMode = GetDrawMapMode(); @@ -49,6 +74,15 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) pDraw->SetWindow( this ); Point aLogicPos = PixelToLogic(rMEvt.GetPosPixel()); + SdrMarkList aPreMarkList = pDrView->GetMarkedObjectList(); + if(!aPreMarkList.GetMarkCount()) + aDrawSelectionPos = Point(0,0); + else + { + tools::Rectangle aRect = pDrView->GetAllMarkedRect(); + aDrawSelectionPos = Point(aRect.Left(), aRect.Top()); + } + if ( pDraw->IsDetectiveHit( aLogicPos ) ) { // nothing on detective arrows (double click is evaluated on ButtonUp) @@ -57,8 +91,12 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) else { bRet = pDraw->MouseButtonDown( rMEvt ); - if ( bRet ) + if (bRet) + { + if (lcl_HasSelectionChanged(aPreMarkList, pDrView->GetMarkedObjectList())) + pDraw->SetSelectionHasChanged(); UpdateStatusPosSize(); + } } if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) @@ -66,7 +104,6 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) } // cancel draw with right key - ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrView && !rMEvt.IsLeft() && !bRet ) { pDrView->BrkAction(); @@ -79,12 +116,13 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) { ScViewFunc* pView = mrViewData.GetView(); bool bRet = false; + bool bLOKitActive = comphelper::LibreOfficeKit::isActive(); FuPoor* pDraw = pView->GetDrawFuncPtr(); if (pDraw && !mrViewData.IsRefMode()) { MapMode aDrawMode = GetDrawMapMode(); MapMode aOldMode = GetMapMode(); - if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) + if ( bLOKitActive && aOldMode != aDrawMode ) SetMapMode( aDrawMode ); pDraw->SetWindow( this ); @@ -92,9 +130,9 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) // execute "format paint brush" for drawing objects SfxItemSet* pDrawBrush = pView->GetDrawBrushSet(); + ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrawBrush ) { - ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrView ) { pDrView->SetAttrToMarked(*pDrawBrush, true/*bReplaceAll*/); @@ -103,8 +141,18 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) if ( !pView->IsPaintBrushLocked() ) pView->ResetBrushDocument(); // end paint brush mode if not locked } + else if (!bLOKitActive && pDrView->GetMarkedObjectList().GetMarkCount() > 0 + && rMEvt.IsLeft() + && rMEvt.GetClicks() == 1 + && ScModule::get()->GetAppOptions().IsClickChangeRotation() + && !pDraw->HasSelectionChanged() + && dynamic_cast<FuSelection*>(pDraw) + && lcl_PosUnchanged(pDrView->GetAllMarkedRect(), aDrawSelectionPos)) + { + mrViewData.GetView()->SwitchRotateMode(); + } - if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) + if ( bLOKitActive && aOldMode != aDrawMode ) SetMapMode( aOldMode ); } |