diff options
author | Ocke.Janssen <Ocke.Janssen@oracle.com> | 2011-02-02 11:15:51 +0100 |
---|---|---|
committer | Ocke.Janssen <Ocke.Janssen@oracle.com> | 2011-02-02 11:15:51 +0100 |
commit | d6421660dd2ef25c0aaebe078d24919462f67d31 (patch) | |
tree | a4b59fce8015f69ee3df2dba8b4b1b9fe3431aa9 /reportdesign | |
parent | d691fb3065d5ed29ac438a32d6cdfe4215f9e201 (diff) |
dba34d: #i116022# allow to jump between empty space for controls
Diffstat (limited to 'reportdesign')
-rw-r--r-- | reportdesign/source/ui/misc/UITools.cxx | 11 | ||||
-rw-r--r-- | reportdesign/source/ui/report/ViewsWindow.cxx | 50 |
2 files changed, 53 insertions, 8 deletions
diff --git a/reportdesign/source/ui/misc/UITools.cxx b/reportdesign/source/ui/misc/UITools.cxx index 209017ed062e..288692a7d7de 100644 --- a/reportdesign/source/ui/misc/UITools.cxx +++ b/reportdesign/source/ui/misc/UITools.cxx @@ -885,14 +885,13 @@ SdrObject* isOver(const Rectangle& _rRect, SdrPage& _rPage, SdrView& _rView, boo OUnoObject* pObj = dynamic_cast<OUnoObject*>(pObjIter); if (pObj != NULL) - { - - Rectangle aRect = _rRect.GetIntersection(pObjIter->GetLastBoundRect()); - if ( !aRect.IsEmpty() && (aRect.Left() != aRect.Right() && aRect.Top() != aRect.Bottom() ) ) - pOverlappedObj = pObjIter; + { + Rectangle aRect = _rRect.GetIntersection(pObjIter->GetLastBoundRect()); + if ( !aRect.IsEmpty() && (aRect.Left() != aRect.Right() && aRect.Top() != aRect.Bottom() ) ) + pOverlappedObj = pObjIter; + } } } - } return pOverlappedObj; } // ----------------------------------------------------------------------------- diff --git a/reportdesign/source/ui/report/ViewsWindow.cxx b/reportdesign/source/ui/report/ViewsWindow.cxx index 130acfc88592..164fb95f4d34 100644 --- a/reportdesign/source/ui/report/ViewsWindow.cxx +++ b/reportdesign/source/ui/report/ViewsWindow.cxx @@ -1652,6 +1652,7 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) { // restrict movement to work area Rectangle rWorkArea = rView.GetWorkArea(); + rWorkArea.Right()++; if ( !rWorkArea.IsEmpty() ) { @@ -1682,8 +1683,53 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) bCheck = dynamic_cast<OUnoObject*>(pMark->GetMarkedSdrObj()) != NULL; } - if ( bCheck && isOver(aMarkRect,*rReportSection.getPage(),rView) ) - break; + + if ( bCheck ) + { + SdrObject* pOverlapped = isOver(aMarkRect,*rReportSection.getPage(),rView); + if ( pOverlapped ) + { + do + { + Rectangle aOver = pOverlapped->GetLastBoundRect(); + Point aPos; + if ( nCode == KEY_UP ) + { + aPos.X() = aMarkRect.Left(); + aPos.Y() = aOver.Top() - aMarkRect.getHeight(); + nY += (aPos.Y() - aMarkRect.Top()); + } + else if ( nCode == KEY_DOWN ) + { + aPos.X() = aMarkRect.Left(); + aPos.Y() = aOver.Bottom(); + nY += (aPos.Y() - aMarkRect.Top()); + } + else if ( nCode == KEY_LEFT ) + { + aPos.X() = aOver.Left() - aMarkRect.getWidth(); + aPos.Y() = aMarkRect.Top(); + nX += (aPos.X() - aMarkRect.Left()); + } + else if ( nCode == KEY_RIGHT ) + { + aPos.X() = aOver.Right(); + aPos.Y() = aMarkRect.Top(); + nX += (aPos.X() - aMarkRect.Left()); + } + + aMarkRect.SetPos(aPos); + if ( !rWorkArea.IsInside( aMarkRect ) ) + { + break; + } + pOverlapped = isOver(aMarkRect,*rReportSection.getPage(),rView); + } + while(pOverlapped != NULL); + if (pOverlapped != NULL) + break; + } + } } if ( nX != 0 || nY != 0 ) |