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