/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" #include #include #include "fumark.hxx" #include "sc.hrc" #include "tabvwsh.hxx" #include "scmod.hxx" #include "reffact.hxx" #include "document.hxx" #include "scresid.hxx" #include "drawview.hxx" //------------------------------------------------------------------ /************************************************************************* |* |* Funktion zum Aufziehen eines Rechtecks |* \************************************************************************/ FuMarkRect::FuMarkRect(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP, SdrModel* pDoc, SfxRequest& rReq) : FuPoor(pViewSh, pWin, pViewP, pDoc, rReq), bVisible(sal_False), bStartDrag(sal_False) { } /************************************************************************* |* |* Destruktor |* \************************************************************************/ FuMarkRect::~FuMarkRect() { } /************************************************************************* |* |* MouseButtonDown-event |* \************************************************************************/ sal_Bool FuMarkRect::MouseButtonDown(const MouseEvent& rMEvt) { // #95491# remember button state for creation of own MouseEvents SetMouseButtonCode(rMEvt.GetButtons()); pWindow->CaptureMouse(); pView->UnmarkAll(); // der Einheitlichkeit halber und wegen #50558# bStartDrag = sal_True; aBeginPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() ); aZoomRect = Rectangle( aBeginPos, Size() ); return sal_True; } /************************************************************************* |* |* MouseMove-event |* \************************************************************************/ sal_Bool FuMarkRect::MouseMove(const MouseEvent& rMEvt) { if ( bStartDrag ) { if ( bVisible ) pViewShell->DrawMarkRect(aZoomRect); Point aPixPos= rMEvt.GetPosPixel(); ForceScroll(aPixPos); Point aEndPos = pWindow->PixelToLogic(aPixPos); Rectangle aRect(aBeginPos, aEndPos); aZoomRect = aRect; aZoomRect.Justify(); pViewShell->DrawMarkRect(aZoomRect); bVisible = sal_True; } ForcePointer(&rMEvt); return bStartDrag; } /************************************************************************* |* |* MouseButtonUp-event |* \************************************************************************/ sal_Bool FuMarkRect::MouseButtonUp(const MouseEvent& rMEvt) { // #95491# remember button state for creation of own MouseEvents SetMouseButtonCode(rMEvt.GetButtons()); if ( bVisible ) { // Hide ZoomRect pViewShell->DrawMarkRect(aZoomRect); bVisible = sal_False; } Size aZoomSizePixel = pWindow->LogicToPixel(aZoomRect).GetSize(); sal_uInt16 nMinMove = pView->GetMinMoveDistancePixel(); if ( aZoomSizePixel.Width() < nMinMove || aZoomSizePixel.Height() < nMinMove ) { // Klick auf der Stelle aZoomRect.SetSize(Size()); // dann ganz leer } bStartDrag = sal_False; pWindow->ReleaseMouse(); pViewShell->GetViewData()->GetDispatcher(). Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD); // Daten an der View merken pViewShell->SetChartArea( aSourceRange, aZoomRect ); // Chart-Dialog starten: // sal_uInt16 nId = ScChartDlgWrapper::GetChildWindowId(); // SfxChildWindow* pWnd = pViewShell->GetViewFrame()->GetChildWindow( nId ); // SC_MOD()->SetRefDialog( nId, pWnd ? sal_False : sal_True ); return sal_True; } /************************************************************************* |* |* Command-event |* \************************************************************************/ sal_uInt8 FuMarkRect::Command(const CommandEvent& rCEvt) { if ( COMMAND_STARTDRAG == rCEvt.GetCommand() ) { // #29877# nicht anfangen, auf der Tabelle rumzudraggen, // aber Maus-Status nicht zuruecksetzen return SC_CMD_IGNORE; } else return FuPoor::Command(rCEvt); } /************************************************************************* |* |* Tastaturereignisse bearbeiten |* |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls |* FALSE. |* \************************************************************************/ sal_Bool FuMarkRect::KeyInput(const KeyEvent& rKEvt) { sal_Bool bReturn = sal_False; switch ( rKEvt.GetKeyCode().GetCode() ) { case KEY_ESCAPE: // beenden pViewShell->GetViewData()->GetDispatcher(). Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); bReturn = sal_True; break; } if (!bReturn) { bReturn = FuPoor::KeyInput(rKEvt); } return (bReturn); } /************************************************************************* |* |* Vor dem Scrollen Selektionsdarstellung ausblenden |* \************************************************************************/ void FuMarkRect::ScrollStart() { } /************************************************************************* |* |* Nach dem Scrollen Selektionsdarstellung wieder anzeigen |* \************************************************************************/ void FuMarkRect::ScrollEnd() { } /************************************************************************* |* |* Function aktivieren |* \************************************************************************/ void FuMarkRect::Activate() { FuPoor::Activate(); // Markierung merken, bevor evtl. Tabelle umgeschaltet wird ScViewData* pViewData = pViewShell->GetViewData(); ScMarkData& rMark = pViewData->GetMarkData(); if ( !rMark.IsMultiMarked() && !rMark.IsMarked() ) pViewShell->MarkDataArea( sal_True ); pViewData->GetMultiArea( aSourceRange ); // Mehrfachselektion erlaubt // pViewShell->Unmark(); ForcePointer(NULL); } /************************************************************************* |* |* Function deaktivieren |* \************************************************************************/ void FuMarkRect::Deactivate() { FuPoor::Deactivate(); if (bVisible) { // Hide ZoomRect pViewShell->DrawMarkRect(aZoomRect); bVisible = sal_False; bStartDrag = sal_False; } } /************************************************************************* |* |* Maus-Pointer umschalten |* \************************************************************************/ void FuMarkRect::ForcePointer(const MouseEvent* /* pMEvt */) { pViewShell->SetActivePointer( Pointer( POINTER_CHART ) ); }