Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/embed/EmbedStates.hpp>
21 :
22 : #include <editeng/eeitem.hxx>
23 : #include <editeng/flditem.hxx>
24 : #include <svx/svdoole2.hxx>
25 : #include <svx/svdotext.hxx>
26 : #include <sfx2/dispatch.hxx>
27 : #include <svtools/imapobj.hxx>
28 : #include <svx/svdouno.hxx>
29 : #include <svx/svdomedia.hxx>
30 : #include <svx/svdpagv.hxx>
31 : #include <editeng/outlobj.hxx>
32 : #include <svx/svdocapt.hxx>
33 : #include <sfx2/app.hxx>
34 :
35 : #include "fusel.hxx"
36 : #include "sc.hrc"
37 : #include "fudraw.hxx"
38 : #include "futext.hxx"
39 : #include "drawview.hxx"
40 : #include "tabvwsh.hxx"
41 : #include "drawpage.hxx"
42 : #include "globstr.hrc"
43 : #include "drwlayer.hxx"
44 : #include "userdat.hxx"
45 : #include "scmod.hxx"
46 : #include "client.hxx"
47 : #include "charthelper.hxx"
48 : #include "docuno.hxx"
49 : #include "docsh.hxx"
50 :
51 : // -----------------------------------------------------------------------
52 :
53 : // Maximal erlaubte Mausbewegung um noch Drag&Drop zu starten
54 : //! fusel,fuconstr,futext - zusammenfassen!
55 : #define SC_MAXDRAGMOVE 3
56 :
57 : // -----------------------------------------------------------------------
58 :
59 : #ifdef _MSC_VER
60 : #pragma optimize ( "", off )
61 : #endif
62 :
63 : using namespace com::sun::star;
64 :
65 : /*************************************************************************
66 : |*
67 : |* Konstruktor
68 : |*
69 : \************************************************************************/
70 :
71 0 : FuSelection::FuSelection(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP,
72 : SdrModel* pDoc, SfxRequest& rReq ) :
73 : FuDraw(pViewSh, pWin, pViewP, pDoc, rReq),
74 0 : bVCAction(false)
75 : {
76 0 : }
77 :
78 : /*************************************************************************
79 : |*
80 : |* Destruktor
81 : |*
82 : \************************************************************************/
83 :
84 0 : FuSelection::~FuSelection()
85 : {
86 0 : }
87 :
88 0 : sal_uInt8 FuSelection::Command(const CommandEvent& rCEvt)
89 : {
90 : // special code for non-VCL OS2/UNX removed
91 :
92 0 : return FuDraw::Command( rCEvt );
93 : }
94 :
95 : /*************************************************************************
96 : |*
97 : |* MouseButtonDown-event
98 : |*
99 : \************************************************************************/
100 :
101 0 : sal_Bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt)
102 : {
103 : // remember button state for creation of own MouseEvents
104 0 : SetMouseButtonCode(rMEvt.GetButtons());
105 0 : const bool bSelectionOnly = rMEvt.IsRight();
106 0 : if ( pView->IsAction() )
107 : {
108 0 : if ( bSelectionOnly )
109 0 : pView->BckAction();
110 0 : return sal_True;
111 : }
112 :
113 0 : bVCAction = false;
114 0 : bIsInDragMode = false; // irgendwo muss es ja zurueckgesetzt werden (#50033#)
115 :
116 0 : sal_Bool bReturn = FuDraw::MouseButtonDown(rMEvt);
117 :
118 0 : aMDPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() );
119 :
120 0 : if ( rMEvt.IsLeft() )
121 : {
122 0 : SdrHdl* pHdl = pView->PickHandle(aMDPos);
123 : SdrObject* pObj;
124 : SdrPageView* pPV;
125 :
126 0 : if ( pHdl!=NULL || pView->IsMarkedHit(aMDPos) )
127 : {
128 : // Determine if this is the tail of a SdrCaptionObj i.e.
129 : // we need to disable the drag option on the tail of a note
130 : // object. Also, disable the ability to use the circular
131 : // drag of a note object.
132 0 : bool bDrag = false;
133 0 : const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
134 0 : if( rMarkList.GetMarkCount() == 1 )
135 : {
136 0 : SdrObject* pMarkedObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
137 0 : if( ScDrawLayer::IsNoteCaption( pMarkedObj ) )
138 : {
139 : // move using the valid caption handles for note text box.
140 0 : if(pHdl && (pHdl->GetKind() != HDL_POLY && pHdl->GetKind() != HDL_CIRC))
141 0 : bDrag = true;
142 : // move the complete note box.
143 0 : else if(!pHdl)
144 0 : bDrag = true;
145 : }
146 : else
147 0 : bDrag = true; // different object
148 : }
149 : else
150 0 : bDrag = true; // several objects
151 :
152 0 : if ( bDrag )
153 : {
154 0 : aDragTimer.Start();
155 0 : pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl);
156 0 : bReturn = sal_True;
157 : }
158 : }
159 : else
160 : {
161 0 : sal_Bool bAlt = rMEvt.IsMod2();
162 0 : if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) )
163 : {
164 0 : pView->BegMacroObj(aMDPos, pObj, pPV, pWindow);
165 0 : bReturn = sal_True;
166 : }
167 : else
168 : {
169 0 : String sURL, sTarget;
170 0 : if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER))
171 : {
172 : // Support for imported Excel docs
173 : // Excel is of course not consistent and allows
174 : // a hyperlink to be assigned for an object group
175 : // and even though the hyperlink is exported in the Escher layer
176 : // its never used, when dealing with a group object the link
177 : // associated with the clicked object is used only
178 :
179 : // additionally you can also select a macro in Excel for a grouped
180 : // objects and this *usually* results in the macro being set
181 : // for the elements in the group and no macro is exported
182 : // for the group itself ( this however is not always true )
183 : // if a macro and hlink are defined favour the hlink
184 : // If a group object has no hyperlink use the hyperlink of the
185 : // object clicked
186 :
187 0 : if ( pObj->IsGroupObject() )
188 : {
189 0 : ScMacroInfo* pTmpInfo = ScDrawLayer::GetMacroInfo( pObj );
190 0 : if ( !pTmpInfo || pTmpInfo->GetMacro().isEmpty() )
191 : {
192 0 : SdrObject* pHit = NULL;
193 0 : if ( pView->PickObj(aMDPos, pView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) )
194 0 : pObj = pHit;
195 : }
196 : }
197 :
198 0 : ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj, true );
199 : // For interoperability favour links over macros if both are defined
200 0 : if ( !pInfo->GetHlink().isEmpty() )
201 : {
202 : OSL_TRACE("** Got URL");
203 0 : sURL = pInfo->GetHlink();
204 : }
205 0 : else if ( !pInfo->GetMacro().isEmpty() )
206 : {
207 0 : SfxObjectShell* pObjSh = SfxObjectShell::Current();
208 0 : if ( pObjSh && SfxApplication::IsXScriptURL( pInfo->GetMacro() ) )
209 : {
210 0 : uno::Reference< beans::XPropertySet > xProps( pObj->getUnoShape(), uno::UNO_QUERY );
211 0 : uno::Any aCaller;
212 0 : if ( xProps.is() )
213 : {
214 : try
215 : {
216 0 : aCaller = xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")) );
217 : }
218 0 : catch( uno::Exception& ) {}
219 : }
220 0 : uno::Any aRet;
221 0 : uno::Sequence< sal_Int16 > aOutArgsIndex;
222 0 : uno::Sequence< uno::Any > aOutArgs;
223 : uno::Sequence< uno::Any >* pInArgs =
224 0 : new uno::Sequence< uno::Any >(0);
225 0 : pObjSh->CallXScript( pInfo->GetMacro(),
226 0 : *pInArgs, aRet, aOutArgsIndex, aOutArgs, true, &aCaller );
227 0 : pViewShell->FakeButtonUp( pViewShell->GetViewData()->GetActivePart() );
228 0 : return sal_True; // kein CaptureMouse etc.
229 : }
230 : }
231 : }
232 :
233 : // URL / ImageMap
234 :
235 0 : SdrViewEvent aVEvt;
236 0 : if ( !bAlt &&
237 0 : pView->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt ) != SDRHIT_NONE &&
238 : aVEvt.pObj != NULL )
239 : {
240 0 : if ( ScDrawLayer::GetIMapInfo( aVEvt.pObj ) ) // ImageMap
241 : {
242 : const IMapObject* pIMapObj =
243 0 : ScDrawLayer::GetHitIMapObject( aVEvt.pObj, aMDPos, *pWindow );
244 0 : if ( pIMapObj && pIMapObj->GetURL().Len() )
245 : {
246 0 : sURL = pIMapObj->GetURL();
247 0 : sTarget = pIMapObj->GetTarget();
248 : }
249 : }
250 0 : if ( aVEvt.eEvent == SDREVENT_EXECUTEURL && aVEvt.pURLField ) // URL
251 : {
252 0 : sURL = aVEvt.pURLField->GetURL();
253 0 : sTarget = aVEvt.pURLField->GetTargetFrame();
254 : }
255 : }
256 :
257 : // open hyperlink, if found at object or in object's text
258 0 : if ( sURL.Len() > 0 )
259 : {
260 0 : ScGlobal::OpenURL( sURL, sTarget );
261 0 : pViewShell->FakeButtonUp( pViewShell->GetViewData()->GetActivePart() );
262 0 : return sal_True; // kein CaptureMouse etc.
263 : }
264 :
265 : // Is another object being edited in this view?
266 : // (Editing is ended in MarkListHasChanged - test before UnmarkAll)
267 0 : SfxInPlaceClient* pClient = pViewShell->GetIPClient();
268 0 : sal_Bool bWasOleActive = ( pClient && pClient->IsObjectInPlaceActive() );
269 :
270 : // Markieren
271 :
272 : // do not allow multiselection with note caption
273 0 : bool bCaptionClicked = IsNoteCaptionClicked( aMDPos );
274 0 : if ( !rMEvt.IsShift() || bCaptionClicked || IsNoteCaptionMarked() )
275 0 : pView->UnmarkAll();
276 :
277 : /* Unlock internal layer, if a note caption is clicked. The
278 : layer will be relocked in ScDrawView::MarkListHasChanged(). */
279 0 : if( bCaptionClicked )
280 0 : pView->UnlockInternalLayer();
281 :
282 : // try to select the clicked object
283 0 : if ( pView->MarkObj( aMDPos, -2, false, rMEvt.IsMod1() ) )
284 : {
285 : //*********************************************************
286 : //Objekt verschieben
287 : //********************************************************
288 0 : if (pView->IsMarkedHit(aMDPos))
289 : {
290 : // Don't start drag timer if inplace editing of an OLE object
291 : // was just ended with this mouse click - the view will be moved
292 : // (different tool bars) and the object that was clicked on would
293 : // be moved unintentionally.
294 0 : if ( !bWasOleActive )
295 0 : aDragTimer.Start();
296 :
297 0 : pHdl=pView->PickHandle(aMDPos);
298 0 : pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl);
299 0 : bReturn = sal_True;
300 : }
301 : else // Objekt am Rand getroffen
302 0 : if (pViewShell->IsDrawSelMode())
303 0 : bReturn = sal_True;
304 : }
305 : else
306 : {
307 : // nichts getroffen
308 :
309 0 : if (pViewShell->IsDrawSelMode())
310 : {
311 : //*********************************************************
312 : //Objekt selektieren
313 : //********************************************************
314 0 : pView->BegMarkObj(aMDPos);
315 0 : bReturn = sal_True;
316 : }
317 0 : }
318 : }
319 : }
320 :
321 : }
322 :
323 0 : if (!bIsInDragMode)
324 : {
325 0 : if (!bVCAction) // VC rufen selber CaptureMouse
326 0 : pWindow->CaptureMouse();
327 0 : ForcePointer(&rMEvt);
328 : }
329 :
330 0 : return bReturn;
331 : }
332 :
333 : /*************************************************************************
334 : |*
335 : |* MouseMove-event
336 : |*
337 : \************************************************************************/
338 :
339 0 : sal_Bool FuSelection::MouseMove(const MouseEvent& rMEvt)
340 : {
341 0 : sal_Bool bReturn = FuDraw::MouseMove(rMEvt);
342 :
343 0 : if (aDragTimer.IsActive() )
344 : {
345 0 : Point aOldPixel = pWindow->LogicToPixel( aMDPos );
346 0 : Point aNewPixel = rMEvt.GetPosPixel();
347 0 : if ( Abs( aOldPixel.X() - aNewPixel.X() ) > SC_MAXDRAGMOVE ||
348 0 : Abs( aOldPixel.Y() - aNewPixel.Y() ) > SC_MAXDRAGMOVE )
349 0 : aDragTimer.Stop();
350 : }
351 :
352 0 : if ( pView->IsAction() )
353 : {
354 0 : Point aPix(rMEvt.GetPosPixel());
355 0 : Point aPnt(pWindow->PixelToLogic(aPix));
356 :
357 0 : ForceScroll(aPix);
358 0 : pView->MovAction(aPnt);
359 0 : bReturn = sal_True;
360 : }
361 :
362 : // Ein VCControl ist aktiv
363 : // Event an den Manager weiterleiten
364 0 : if( bVCAction )
365 : {
366 0 : bReturn = true;
367 : }
368 :
369 0 : ForcePointer(&rMEvt);
370 :
371 0 : return (bReturn);
372 : }
373 :
374 : /*************************************************************************
375 : |*
376 : |* MouseButtonUp-event
377 : |*
378 : \************************************************************************/
379 :
380 0 : sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt)
381 : {
382 : // remember button state for creation of own MouseEvents
383 0 : SetMouseButtonCode(rMEvt.GetButtons());
384 :
385 0 : sal_Bool bReturn = FuDraw::MouseButtonUp(rMEvt);
386 0 : sal_Bool bOle = pViewShell->GetViewFrame()->GetFrame().IsInPlace();
387 :
388 0 : if (aDragTimer.IsActive() )
389 : {
390 0 : aDragTimer.Stop();
391 : }
392 :
393 0 : Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
394 :
395 0 : bool bCopy = false;
396 0 : ScViewData* pViewData = ( pViewShell ? pViewShell->GetViewData() : NULL );
397 0 : ScDocument* pDocument = ( pViewData ? pViewData->GetDocument() : NULL );
398 0 : SdrPageView* pPageView = ( pView ? pView->GetSdrPageView() : NULL );
399 0 : SdrPage* pPage = ( pPageView ? pPageView->GetPage() : NULL );
400 0 : ::std::vector< ::rtl::OUString > aExcludedChartNames;
401 0 : ScRangeListVector aProtectedChartRangesVector;
402 :
403 0 : if ( rMEvt.IsLeft() )
404 : {
405 0 : if ( pView->IsDragObj() )
406 : {
407 : /******************************************************************
408 : * Objekt wurde verschoben
409 : ******************************************************************/
410 0 : if ( rMEvt.IsMod1() )
411 : {
412 0 : if ( pPage )
413 : {
414 0 : ScChartHelper::GetChartNames( aExcludedChartNames, pPage );
415 : }
416 0 : if ( pView && pDocument )
417 : {
418 0 : const SdrMarkList& rSdrMarkList = pView->GetMarkedObjectList();
419 0 : sal_uLong nMarkCount = rSdrMarkList.GetMarkCount();
420 0 : for ( sal_uLong i = 0; i < nMarkCount; ++i )
421 : {
422 0 : SdrMark* pMark = rSdrMarkList.GetMark( i );
423 0 : SdrObject* pObj = ( pMark ? pMark->GetMarkedSdrObj() : NULL );
424 0 : if ( pObj )
425 : {
426 0 : ScChartHelper::AddRangesIfProtectedChart( aProtectedChartRangesVector, pDocument, pObj );
427 : }
428 : }
429 : }
430 0 : bCopy = true;
431 : }
432 :
433 0 : pView->EndDragObj( rMEvt.IsMod1() );
434 0 : pView->ForceMarkedToAnotherPage();
435 :
436 0 : const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
437 0 : if (rMarkList.GetMarkCount() == 1)
438 : {
439 0 : SdrMark* pMark = rMarkList.GetMark(0);
440 0 : SdrObject* pObj = pMark->GetMarkedSdrObj();
441 0 : FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr();
442 0 : FuText* pText = static_cast<FuText*>(pPoor);
443 0 : pText->StopDragMode(pObj );
444 : }
445 0 : bReturn = sal_True;
446 : }
447 0 : else if (pView->IsAction() )
448 : {
449 : // unlock internal layer to include note captions
450 0 : pView->UnlockInternalLayer();
451 0 : pView->EndAction();
452 0 : if ( pView->AreObjectsMarked() )
453 : {
454 0 : bReturn = sal_True;
455 :
456 : /* if multi-selection contains a note caption object, remove
457 : all other objects from selection. */
458 0 : const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
459 0 : sal_uLong nCount = rMarkList.GetMarkCount();
460 0 : if( nCount > 1 )
461 : {
462 0 : bool bFound = false;
463 0 : for( sal_uLong nIdx = 0; !bFound && (nIdx < nCount); ++nIdx )
464 : {
465 0 : SdrObject* pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj();
466 0 : bFound = ScDrawLayer::IsNoteCaption( pObj );
467 0 : if( bFound )
468 : {
469 0 : pView->UnMarkAll();
470 0 : pView->MarkObj( pObj, pView->GetSdrPageView() );
471 : }
472 : }
473 : }
474 : }
475 : }
476 : }
477 :
478 : /**************************************************************************
479 : * Ggf. OLE-Objekt beruecksichtigen
480 : **************************************************************************/
481 0 : SfxInPlaceClient* pIPClient = pViewShell->GetIPClient();
482 :
483 0 : if (pIPClient)
484 : {
485 0 : ScModule* pScMod = SC_MOD();
486 0 : bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF;
487 :
488 0 : if ( pIPClient->IsObjectInPlaceActive() && !bUnoRefDialog )
489 0 : pIPClient->DeactivateObject();
490 : }
491 :
492 0 : sal_uInt16 nClicks = rMEvt.GetClicks();
493 0 : if ( nClicks == 2 && rMEvt.IsLeft() )
494 : {
495 0 : if ( pView->AreObjectsMarked() )
496 : {
497 0 : const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
498 0 : if (rMarkList.GetMarkCount() == 1)
499 : {
500 0 : SdrMark* pMark = rMarkList.GetMark(0);
501 0 : SdrObject* pObj = pMark->GetMarkedSdrObj();
502 :
503 : // aktivieren nur, wenn die Maus auch (noch) ueber dem
504 : // selektierten Objekt steht
505 :
506 0 : SdrViewEvent aVEvt;
507 0 : SdrHitKind eHit = pView->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt );
508 0 : if ( eHit != SDRHIT_NONE && aVEvt.pObj == pObj )
509 : {
510 0 : sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
511 :
512 : //
513 : // OLE: aktivieren
514 : //
515 :
516 0 : if (nSdrObjKind == OBJ_OLE2)
517 : {
518 0 : if (!bOle)
519 : {
520 0 : if (((SdrOle2Obj*) pObj)->GetObjRef().is())
521 : {
522 0 : pViewShell->ActivateObject( (SdrOle2Obj*) pObj, 0 );
523 : }
524 : }
525 : }
526 :
527 : //
528 : // Edit text
529 : // not in UNO controls
530 : // #i32352# not in media objects
531 : //
532 0 : else if ( pObj->ISA(SdrTextObj) && !pObj->ISA(SdrUnoObj) && !pObj->ISA(SdrMediaObj) )
533 : {
534 0 : OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
535 0 : sal_Bool bVertical = ( pOPO && pOPO->IsVertical() );
536 0 : sal_uInt16 nTextSlotId = bVertical ? SID_DRAW_TEXT_VERTICAL : SID_DRAW_TEXT;
537 :
538 0 : pViewShell->GetViewData()->GetDispatcher().
539 0 : Execute(nTextSlotId, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD);
540 :
541 : // jetzt den erzeugten FuText holen und in den EditModus setzen
542 0 : FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr();
543 0 : if ( pPoor && pPoor->GetSlotID() == nTextSlotId ) // hat keine RTTI
544 : {
545 0 : FuText* pText = (FuText*)pPoor;
546 0 : Point aMousePixel = rMEvt.GetPosPixel();
547 0 : pText->SetInEditMode( pObj, &aMousePixel );
548 : }
549 0 : bReturn = sal_True;
550 : }
551 0 : }
552 : }
553 : }
554 0 : else if ( TestDetective( pView->GetSdrPageView(), aPnt ) )
555 0 : bReturn = sal_True;
556 : }
557 :
558 : // Ein VCControl ist aktiv
559 : // Event an den Manager weiterleiten
560 0 : if( bVCAction )
561 : {
562 0 : bVCAction = false;
563 0 : bReturn = true;
564 : }
565 :
566 0 : ForcePointer(&rMEvt);
567 :
568 0 : pWindow->ReleaseMouse();
569 :
570 : // Command-Handler fuer Kontext-Menue kommt erst nach MouseButtonUp,
571 : // darum hier die harte IsLeft-Abfrage
572 0 : if ( !bReturn && rMEvt.IsLeft() )
573 0 : if (pViewShell->IsDrawSelMode())
574 0 : pViewShell->GetViewData()->GetDispatcher().
575 0 : Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD);
576 :
577 0 : if ( bCopy && pViewData && pDocument && pPage )
578 : {
579 0 : ScDocShell* pDocShell = pViewData->GetDocShell();
580 0 : ScModelObj* pModelObj = ( pDocShell ? ScModelObj::getImplementation( pDocShell->GetModel() ) : NULL );
581 0 : if ( pModelObj )
582 : {
583 0 : SCTAB nTab = pViewData->GetTabNo();
584 : ScChartHelper::CreateProtectedChartListenersAndNotify( pDocument, pPage, pModelObj, nTab,
585 0 : aProtectedChartRangesVector, aExcludedChartNames );
586 : }
587 : }
588 :
589 0 : return (bReturn);
590 : }
591 :
592 : /*************************************************************************
593 : |*
594 : |* Tastaturereignisse bearbeiten
595 : |*
596 : |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
597 : |* FALSE.
598 : |*
599 : \************************************************************************/
600 :
601 0 : sal_Bool FuSelection::KeyInput(const KeyEvent& rKEvt)
602 : {
603 0 : sal_Bool bReturn = false;
604 :
605 0 : if (!bReturn)
606 : {
607 0 : bReturn = FuDraw::KeyInput(rKEvt);
608 : }
609 :
610 0 : return(bReturn);
611 : }
612 :
613 :
614 : /*************************************************************************
615 : |*
616 : |* Function aktivieren
617 : |*
618 : \************************************************************************/
619 :
620 0 : void FuSelection::Activate()
621 : {
622 0 : FuDraw::Activate();
623 0 : }
624 :
625 : /*************************************************************************
626 : |*
627 : |* Function deaktivieren
628 : |*
629 : \************************************************************************/
630 :
631 0 : void FuSelection::Deactivate()
632 : {
633 : /**************************************************************************
634 : * Hide Cursor
635 : **************************************************************************/
636 0 : FuDraw::Deactivate();
637 15 : }
638 :
639 :
640 : #ifdef _MSC_VER
641 : #pragma optimize ( "", on )
642 : #endif
643 :
644 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|