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