summaryrefslogtreecommitdiff
path: root/sc/source/ui/view/gridwin3.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/view/gridwin3.cxx')
-rw-r--r--sc/source/ui/view/gridwin3.cxx58
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 );
}