xref: /trunk/main/sc/source/ui/drawfunc/fumark.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sc.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
32*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir #include "fumark.hxx"
35*cdf0e10cSrcweir #include "sc.hrc"
36*cdf0e10cSrcweir #include "tabvwsh.hxx"
37*cdf0e10cSrcweir #include "scmod.hxx"
38*cdf0e10cSrcweir #include "reffact.hxx"
39*cdf0e10cSrcweir #include "document.hxx"
40*cdf0e10cSrcweir #include "scresid.hxx"
41*cdf0e10cSrcweir #include "drawview.hxx"
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir //------------------------------------------------------------------
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir /*************************************************************************
46*cdf0e10cSrcweir |*
47*cdf0e10cSrcweir |* Funktion zum Aufziehen eines Rechtecks
48*cdf0e10cSrcweir |*
49*cdf0e10cSrcweir \************************************************************************/
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir FuMarkRect::FuMarkRect(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP,
52*cdf0e10cSrcweir                SdrModel* pDoc, SfxRequest& rReq) :
53*cdf0e10cSrcweir     FuPoor(pViewSh, pWin, pViewP, pDoc, rReq),
54*cdf0e10cSrcweir     bVisible(sal_False),
55*cdf0e10cSrcweir     bStartDrag(sal_False)
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir }
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir /*************************************************************************
60*cdf0e10cSrcweir |*
61*cdf0e10cSrcweir |* Destruktor
62*cdf0e10cSrcweir |*
63*cdf0e10cSrcweir \************************************************************************/
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir FuMarkRect::~FuMarkRect()
66*cdf0e10cSrcweir {
67*cdf0e10cSrcweir }
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir /*************************************************************************
70*cdf0e10cSrcweir |*
71*cdf0e10cSrcweir |* MouseButtonDown-event
72*cdf0e10cSrcweir |*
73*cdf0e10cSrcweir \************************************************************************/
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir sal_Bool FuMarkRect::MouseButtonDown(const MouseEvent& rMEvt)
76*cdf0e10cSrcweir {
77*cdf0e10cSrcweir     // #95491# remember button state for creation of own MouseEvents
78*cdf0e10cSrcweir     SetMouseButtonCode(rMEvt.GetButtons());
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir     pWindow->CaptureMouse();
81*cdf0e10cSrcweir     pView->UnmarkAll();         // der Einheitlichkeit halber und wegen #50558#
82*cdf0e10cSrcweir     bStartDrag = sal_True;
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir     aBeginPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() );
85*cdf0e10cSrcweir     aZoomRect = Rectangle( aBeginPos, Size() );
86*cdf0e10cSrcweir     return sal_True;
87*cdf0e10cSrcweir }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir /*************************************************************************
90*cdf0e10cSrcweir |*
91*cdf0e10cSrcweir |* MouseMove-event
92*cdf0e10cSrcweir |*
93*cdf0e10cSrcweir \************************************************************************/
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir sal_Bool FuMarkRect::MouseMove(const MouseEvent& rMEvt)
96*cdf0e10cSrcweir {
97*cdf0e10cSrcweir     if ( bStartDrag )
98*cdf0e10cSrcweir     {
99*cdf0e10cSrcweir         if ( bVisible )
100*cdf0e10cSrcweir             pViewShell->DrawMarkRect(aZoomRect);
101*cdf0e10cSrcweir         Point aPixPos= rMEvt.GetPosPixel();
102*cdf0e10cSrcweir         ForceScroll(aPixPos);
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir         Point aEndPos = pWindow->PixelToLogic(aPixPos);
105*cdf0e10cSrcweir         Rectangle aRect(aBeginPos, aEndPos);
106*cdf0e10cSrcweir         aZoomRect = aRect;
107*cdf0e10cSrcweir         aZoomRect.Justify();
108*cdf0e10cSrcweir         pViewShell->DrawMarkRect(aZoomRect);
109*cdf0e10cSrcweir         bVisible = sal_True;
110*cdf0e10cSrcweir     }
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir     ForcePointer(&rMEvt);
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir     return bStartDrag;
115*cdf0e10cSrcweir }
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir /*************************************************************************
118*cdf0e10cSrcweir |*
119*cdf0e10cSrcweir |* MouseButtonUp-event
120*cdf0e10cSrcweir |*
121*cdf0e10cSrcweir \************************************************************************/
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir sal_Bool FuMarkRect::MouseButtonUp(const MouseEvent& rMEvt)
124*cdf0e10cSrcweir {
125*cdf0e10cSrcweir     // #95491# remember button state for creation of own MouseEvents
126*cdf0e10cSrcweir     SetMouseButtonCode(rMEvt.GetButtons());
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir     if ( bVisible )
129*cdf0e10cSrcweir     {
130*cdf0e10cSrcweir         // Hide ZoomRect
131*cdf0e10cSrcweir         pViewShell->DrawMarkRect(aZoomRect);
132*cdf0e10cSrcweir         bVisible = sal_False;
133*cdf0e10cSrcweir     }
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir     Size aZoomSizePixel = pWindow->LogicToPixel(aZoomRect).GetSize();
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir     sal_uInt16 nMinMove = pView->GetMinMoveDistancePixel();
138*cdf0e10cSrcweir     if ( aZoomSizePixel.Width() < nMinMove || aZoomSizePixel.Height() < nMinMove )
139*cdf0e10cSrcweir     {
140*cdf0e10cSrcweir         // Klick auf der Stelle
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir         aZoomRect.SetSize(Size());      // dann ganz leer
143*cdf0e10cSrcweir     }
144*cdf0e10cSrcweir 
145*cdf0e10cSrcweir     bStartDrag = sal_False;
146*cdf0e10cSrcweir     pWindow->ReleaseMouse();
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir     pViewShell->GetViewData()->GetDispatcher().
149*cdf0e10cSrcweir         Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD);
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir         //  Daten an der View merken
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir     pViewShell->SetChartArea( aSourceRange, aZoomRect );
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir         //  Chart-Dialog starten:
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir //  sal_uInt16 nId  = ScChartDlgWrapper::GetChildWindowId();
158*cdf0e10cSrcweir //  SfxChildWindow* pWnd = pViewShell->GetViewFrame()->GetChildWindow( nId );
159*cdf0e10cSrcweir //  SC_MOD()->SetRefDialog( nId, pWnd ? sal_False : sal_True );
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir     return sal_True;
162*cdf0e10cSrcweir }
163*cdf0e10cSrcweir 
164*cdf0e10cSrcweir /*************************************************************************
165*cdf0e10cSrcweir |*
166*cdf0e10cSrcweir |* Command-event
167*cdf0e10cSrcweir |*
168*cdf0e10cSrcweir \************************************************************************/
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir sal_uInt8 FuMarkRect::Command(const CommandEvent& rCEvt)
171*cdf0e10cSrcweir {
172*cdf0e10cSrcweir     if ( COMMAND_STARTDRAG == rCEvt.GetCommand() )
173*cdf0e10cSrcweir     {
174*cdf0e10cSrcweir         //  #29877# nicht anfangen, auf der Tabelle rumzudraggen,
175*cdf0e10cSrcweir         //  aber Maus-Status nicht zuruecksetzen
176*cdf0e10cSrcweir         return SC_CMD_IGNORE;
177*cdf0e10cSrcweir     }
178*cdf0e10cSrcweir     else
179*cdf0e10cSrcweir         return FuPoor::Command(rCEvt);
180*cdf0e10cSrcweir }
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir /*************************************************************************
183*cdf0e10cSrcweir |*
184*cdf0e10cSrcweir |* Tastaturereignisse bearbeiten
185*cdf0e10cSrcweir |*
186*cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
187*cdf0e10cSrcweir |* FALSE.
188*cdf0e10cSrcweir |*
189*cdf0e10cSrcweir \************************************************************************/
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir sal_Bool FuMarkRect::KeyInput(const KeyEvent& rKEvt)
192*cdf0e10cSrcweir {
193*cdf0e10cSrcweir     sal_Bool bReturn = sal_False;
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir     switch ( rKEvt.GetKeyCode().GetCode() )
196*cdf0e10cSrcweir     {
197*cdf0e10cSrcweir         case KEY_ESCAPE:
198*cdf0e10cSrcweir             //  beenden
199*cdf0e10cSrcweir             pViewShell->GetViewData()->GetDispatcher().
200*cdf0e10cSrcweir                 Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD);
201*cdf0e10cSrcweir             bReturn = sal_True;
202*cdf0e10cSrcweir             break;
203*cdf0e10cSrcweir     }
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir     if (!bReturn)
206*cdf0e10cSrcweir     {
207*cdf0e10cSrcweir         bReturn = FuPoor::KeyInput(rKEvt);
208*cdf0e10cSrcweir     }
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir     return (bReturn);
211*cdf0e10cSrcweir }
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir /*************************************************************************
214*cdf0e10cSrcweir |*
215*cdf0e10cSrcweir |* Vor dem Scrollen Selektionsdarstellung ausblenden
216*cdf0e10cSrcweir |*
217*cdf0e10cSrcweir \************************************************************************/
218*cdf0e10cSrcweir 
219*cdf0e10cSrcweir void FuMarkRect::ScrollStart()
220*cdf0e10cSrcweir {
221*cdf0e10cSrcweir }
222*cdf0e10cSrcweir 
223*cdf0e10cSrcweir /*************************************************************************
224*cdf0e10cSrcweir |*
225*cdf0e10cSrcweir |* Nach dem Scrollen Selektionsdarstellung wieder anzeigen
226*cdf0e10cSrcweir |*
227*cdf0e10cSrcweir \************************************************************************/
228*cdf0e10cSrcweir 
229*cdf0e10cSrcweir void FuMarkRect::ScrollEnd()
230*cdf0e10cSrcweir {
231*cdf0e10cSrcweir }
232*cdf0e10cSrcweir 
233*cdf0e10cSrcweir /*************************************************************************
234*cdf0e10cSrcweir |*
235*cdf0e10cSrcweir |* Function aktivieren
236*cdf0e10cSrcweir |*
237*cdf0e10cSrcweir \************************************************************************/
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir void FuMarkRect::Activate()
240*cdf0e10cSrcweir {
241*cdf0e10cSrcweir     FuPoor::Activate();
242*cdf0e10cSrcweir 
243*cdf0e10cSrcweir         //  Markierung merken, bevor evtl. Tabelle umgeschaltet wird
244*cdf0e10cSrcweir 
245*cdf0e10cSrcweir     ScViewData* pViewData = pViewShell->GetViewData();
246*cdf0e10cSrcweir     ScMarkData& rMark = pViewData->GetMarkData();
247*cdf0e10cSrcweir 
248*cdf0e10cSrcweir     if ( !rMark.IsMultiMarked() && !rMark.IsMarked() )
249*cdf0e10cSrcweir         pViewShell->MarkDataArea( sal_True );
250*cdf0e10cSrcweir 
251*cdf0e10cSrcweir     pViewData->GetMultiArea( aSourceRange );        // Mehrfachselektion erlaubt
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir //  pViewShell->Unmark();
254*cdf0e10cSrcweir 
255*cdf0e10cSrcweir     ForcePointer(NULL);
256*cdf0e10cSrcweir }
257*cdf0e10cSrcweir 
258*cdf0e10cSrcweir /*************************************************************************
259*cdf0e10cSrcweir |*
260*cdf0e10cSrcweir |* Function deaktivieren
261*cdf0e10cSrcweir |*
262*cdf0e10cSrcweir \************************************************************************/
263*cdf0e10cSrcweir 
264*cdf0e10cSrcweir void FuMarkRect::Deactivate()
265*cdf0e10cSrcweir {
266*cdf0e10cSrcweir     FuPoor::Deactivate();
267*cdf0e10cSrcweir 
268*cdf0e10cSrcweir     if (bVisible)
269*cdf0e10cSrcweir     {
270*cdf0e10cSrcweir         // Hide ZoomRect
271*cdf0e10cSrcweir         pViewShell->DrawMarkRect(aZoomRect);
272*cdf0e10cSrcweir         bVisible = sal_False;
273*cdf0e10cSrcweir         bStartDrag = sal_False;
274*cdf0e10cSrcweir     }
275*cdf0e10cSrcweir }
276*cdf0e10cSrcweir 
277*cdf0e10cSrcweir /*************************************************************************
278*cdf0e10cSrcweir |*
279*cdf0e10cSrcweir |* Maus-Pointer umschalten
280*cdf0e10cSrcweir |*
281*cdf0e10cSrcweir \************************************************************************/
282*cdf0e10cSrcweir 
283*cdf0e10cSrcweir void FuMarkRect::ForcePointer(const MouseEvent* /* pMEvt */)
284*cdf0e10cSrcweir {
285*cdf0e10cSrcweir     pViewShell->SetActivePointer( Pointer( POINTER_CHART ) );
286*cdf0e10cSrcweir }
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir 
290*cdf0e10cSrcweir 
291