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