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 :
21 : #include "sddll.hxx"
22 :
23 : #include <com/sun/star/frame/XFrame.hpp>
24 : #include <sfx2/imagemgr.hxx>
25 : #include <sfx2/viewfrm.hxx>
26 : #include <sfx2/bindings.hxx>
27 : #include <sfx2/app.hxx>
28 : #include <sfx2/request.hxx>
29 : #include <sfx2/dispatch.hxx>
30 :
31 : #include <tools/rcid.h>
32 :
33 : #include <vcl/help.hxx>
34 : #include <vcl/lazydelete.hxx>
35 :
36 : #include <svx/sdrpagewindow.hxx>
37 : #include <svx/sdrpaintwindow.hxx>
38 : #include <svx/sdr/overlay/overlayanimatedbitmapex.hxx>
39 : #include <svx/sdr/overlay/overlaybitmapex.hxx>
40 : #include <svx/sdr/overlay/overlaymanager.hxx>
41 : #include <svx/svxids.hrc>
42 :
43 : #include "view/viewoverlaymanager.hxx"
44 :
45 : #include "res_bmp.hrc"
46 : #include "DrawDocShell.hxx"
47 : #include "DrawViewShell.hxx"
48 : #include "DrawController.hxx"
49 : #include "glob.hrc"
50 : #include "strings.hrc"
51 : #include "sdresid.hxx"
52 : #include "EventMultiplexer.hxx"
53 : #include "ViewShellManager.hxx"
54 : #include "helpids.h"
55 : #include "sdpage.hxx"
56 : #include "drawdoc.hxx"
57 : #include "smarttag.hxx"
58 :
59 : using ::rtl::OUString;
60 : using namespace ::com::sun::star::uno;
61 : using namespace ::com::sun::star::frame;
62 :
63 : namespace sd {
64 :
65 : class ImageButtonHdl;
66 :
67 : // --------------------------------------------------------------------
68 :
69 : static sal_uInt16 gButtonSlots[] = { SID_INSERT_TABLE, SID_INSERT_DIAGRAM, SID_INSERT_GRAPHIC, SID_INSERT_AVMEDIA };
70 : static sal_uInt16 gButtonToolTips[] = { STR_INSERT_TABLE, STR_INSERT_CHART, STR_INSERT_PICTURE, STR_INSERT_MOVIE };
71 :
72 : // --------------------------------------------------------------------
73 :
74 0 : static BitmapEx loadImageResource( sal_uInt16 nId )
75 : {
76 0 : SdResId aResId( nId );
77 0 : aResId.SetRT( RSC_BITMAP );
78 :
79 0 : return BitmapEx( aResId );
80 : }
81 :
82 : // --------------------------------------------------------------------
83 :
84 0 : static BitmapEx* getButtonImage( int index, bool large )
85 : {
86 0 : static vcl::DeleteOnDeinit< BitmapEx > gSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START] = { 0, 0, 0, 0, 0, 0, 0, 0 };
87 0 : static vcl::DeleteOnDeinit< BitmapEx > gLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START] = { 0, 0, 0, 0, 0, 0, 0, 0 };
88 :
89 0 : if( !gSmallButtonImages[0].get() )
90 : {
91 0 : for( sal_uInt16 i = 0; i < (BMP_PLACEHOLDER_SMALL_END-BMP_PLACEHOLDER_SMALL_START); i++ )
92 : {
93 0 : gSmallButtonImages[i].set( new BitmapEx( loadImageResource( BMP_PLACEHOLDER_SMALL_START + i ) ) );
94 0 : gLargeButtonImages[i].set( new BitmapEx( loadImageResource( BMP_PLACEHOLDER_LARGE_START + i ) ) );
95 : }
96 : }
97 :
98 0 : if( large )
99 : {
100 0 : return gLargeButtonImages[index].get();
101 : }
102 : else
103 : {
104 0 : return gSmallButtonImages[index].get();
105 : }
106 : }
107 :
108 : // --------------------------------------------------------------------
109 :
110 : const sal_uInt32 SMART_TAG_HDL_NUM = SAL_MAX_UINT32;
111 :
112 : class ChangePlaceholderTag : public SmartTag
113 : {
114 : friend class ImageButtonHdl;
115 : public:
116 : ChangePlaceholderTag( ::sd::View& rView, SdrObject& rPlaceholderObj );
117 : virtual ~ChangePlaceholderTag();
118 :
119 : /** returns true if the SmartTag handled the event. */
120 : virtual bool MouseButtonDown( const MouseEvent&, SmartHdl& );
121 :
122 : /** returns true if the SmartTag consumes this event. */
123 : virtual bool KeyInput( const KeyEvent& rKEvt );
124 :
125 : BitmapEx createOverlayImage( int nHighlight = -1 );
126 :
127 : protected:
128 : virtual void addCustomHandles( SdrHdlList& rHandlerList );
129 : virtual void disposing();
130 : virtual void select();
131 : virtual void deselect();
132 :
133 : private:
134 : SdrObjectWeakRef mxPlaceholderObj;
135 : };
136 :
137 : class ImageButtonHdl : public SmartHdl
138 : {
139 : public:
140 : ImageButtonHdl( const SmartTagReference& xTag, /* sal_uInt16 nSID, const Image& rImage, const Image& rImageMO, */ const Point& rPnt );
141 : virtual ~ImageButtonHdl();
142 : virtual void CreateB2dIAObject();
143 : virtual sal_Bool IsFocusHdl() const;
144 : virtual Pointer GetPointer() const;
145 : virtual bool isMarkable() const;
146 :
147 : virtual void onMouseEnter(const MouseEvent& rMEvt);
148 : virtual void onMouseLeave();
149 :
150 0 : int getHighlightId() const { return mnHighlightId; }
151 :
152 : void HideTip();
153 :
154 : private:
155 : rtl::Reference< ChangePlaceholderTag > mxTag;
156 :
157 : int mnHighlightId;
158 : Size maImageSize;
159 : sal_uLong mnTip;
160 : };
161 :
162 : // --------------------------------------------------------------------
163 :
164 0 : ImageButtonHdl::ImageButtonHdl( const SmartTagReference& xTag /*, sal_uInt16 nSID, const Image& rImage, const Image& rImageMO*/, const Point& rPnt )
165 : : SmartHdl( xTag, rPnt )
166 0 : , mxTag( dynamic_cast< ChangePlaceholderTag* >( xTag.get() ) )
167 : , mnHighlightId( -1 )
168 : , maImageSize( 42, 42 )
169 0 : , mnTip( 0 )
170 : {
171 0 : }
172 :
173 : // --------------------------------------------------------------------
174 :
175 0 : ImageButtonHdl::~ImageButtonHdl()
176 : {
177 0 : HideTip();
178 0 : }
179 :
180 : // --------------------------------------------------------------------
181 :
182 0 : void ImageButtonHdl::HideTip()
183 : {
184 0 : if( mnTip )
185 : {
186 0 : Help::HideTip( mnTip );
187 0 : mnTip = 0;
188 : }
189 0 : }
190 :
191 : // --------------------------------------------------------------------
192 :
193 : extern ::rtl::OUString ImplRetrieveLabelFromCommand( const Reference< XFrame >& xFrame, const OUString& aCmdURL );
194 :
195 0 : void ImageButtonHdl::onMouseEnter(const MouseEvent& rMEvt)
196 : {
197 :
198 0 : if( pHdlList && pHdlList->GetView())
199 : {
200 0 : int nHighlightId = 0;
201 0 : OutputDevice* pDev = pHdlList->GetView()->GetFirstOutputDevice();
202 0 : if( pDev == 0 )
203 0 : pDev = Application::GetDefaultDevice();
204 :
205 0 : Point aMDPos( rMEvt.GetPosPixel() );
206 0 : aMDPos -= pDev->LogicToPixel( GetPos() );
207 :
208 0 : nHighlightId += aMDPos.X() > maImageSize.Width() ? 1 : 0;
209 0 : nHighlightId += aMDPos.Y() > maImageSize.Height() ? 2 : 0;
210 :
211 0 : if( mnHighlightId != nHighlightId )
212 : {
213 0 : HideTip();
214 :
215 0 : mnHighlightId = nHighlightId;
216 :
217 0 : if( pHdlList )
218 : {
219 0 : SdResId aResId( gButtonToolTips[mnHighlightId] );
220 0 : aResId.SetRT( RSC_STRING );
221 :
222 0 : String aHelpText( aResId );
223 0 : Rectangle aScreenRect( pDev->LogicToPixel( GetPos() ), maImageSize );
224 0 : mnTip = Help::ShowTip( static_cast< ::Window* >( pHdlList->GetView()->GetFirstOutputDevice() ), aScreenRect, aHelpText, 0 ) ;
225 : }
226 0 : Touch();
227 : }
228 : }
229 0 : }
230 :
231 : // --------------------------------------------------------------------
232 :
233 0 : void ImageButtonHdl::onMouseLeave()
234 : {
235 0 : mnHighlightId = -1;
236 0 : HideTip();
237 0 : Touch();
238 0 : }
239 :
240 : // --------------------------------------------------------------------
241 :
242 0 : void ImageButtonHdl::CreateB2dIAObject()
243 : {
244 : // first throw away old one
245 0 : GetRidOfIAObject();
246 :
247 0 : const Point aTagPos( GetPos() );
248 0 : basegfx::B2DPoint aPosition( aTagPos.X(), aTagPos.Y() );
249 :
250 0 : BitmapEx aBitmapEx( mxTag->createOverlayImage( mnHighlightId ) ); // maImageMO.GetBitmapEx() : maImage.GetBitmapEx() );
251 0 : maImageSize = aBitmapEx.GetSizePixel();
252 0 : maImageSize.Width() >>= 1;
253 0 : maImageSize.Height() >>= 1;
254 :
255 0 : if(pHdlList)
256 : {
257 0 : SdrMarkView* pView = pHdlList->GetView();
258 :
259 0 : if(pView && !pView->areMarkHandlesHidden())
260 : {
261 0 : SdrPageView* pPageView = pView->GetSdrPageView();
262 :
263 0 : if(pPageView)
264 : {
265 0 : for(sal_uInt32 b = 0; b < pPageView->PageWindowCount(); b++)
266 : {
267 0 : const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(b);
268 :
269 0 : SdrPaintWindow& rPaintWindow = rPageWindow.GetPaintWindow();
270 0 : rtl::Reference< ::sdr::overlay::OverlayManager > xManager = rPageWindow.GetOverlayManager();
271 0 : if(rPaintWindow.OutputToWindow() && xManager.is() )
272 : {
273 0 : ::sdr::overlay::OverlayObject* pOverlayObject = 0;
274 :
275 0 : pOverlayObject = new ::sdr::overlay::OverlayBitmapEx( aPosition, aBitmapEx, 0, 0 );
276 0 : xManager->add(*pOverlayObject);
277 0 : maOverlayGroup.append(*pOverlayObject);
278 : }
279 0 : }
280 : }
281 : }
282 0 : }
283 0 : }
284 :
285 : // --------------------------------------------------------------------
286 :
287 0 : sal_Bool ImageButtonHdl::IsFocusHdl() const
288 : {
289 0 : return false;
290 : }
291 :
292 : // --------------------------------------------------------------------
293 :
294 0 : bool ImageButtonHdl::isMarkable() const
295 : {
296 0 : return false;
297 : }
298 :
299 : // --------------------------------------------------------------------
300 :
301 0 : Pointer ImageButtonHdl::GetPointer() const
302 : {
303 0 : return Pointer( POINTER_ARROW );
304 : }
305 :
306 : // ====================================================================
307 :
308 0 : ChangePlaceholderTag::ChangePlaceholderTag( ::sd::View& rView, SdrObject& rPlaceholderObj )
309 : : SmartTag( rView )
310 0 : , mxPlaceholderObj( &rPlaceholderObj )
311 : {
312 0 : }
313 :
314 : // --------------------------------------------------------------------
315 :
316 0 : ChangePlaceholderTag::~ChangePlaceholderTag()
317 : {
318 0 : }
319 :
320 : // --------------------------------------------------------------------
321 :
322 : /** returns true if the ChangePlaceholderTag handled the event. */
323 0 : bool ChangePlaceholderTag::MouseButtonDown( const MouseEvent& /*rMEvt*/, SmartHdl& rHdl )
324 : {
325 0 : int nHighlightId = static_cast< ImageButtonHdl& >(rHdl).getHighlightId();
326 0 : if( nHighlightId >= 0 )
327 : {
328 0 : sal_uInt16 nSID = gButtonSlots[nHighlightId];
329 :
330 0 : if( mxPlaceholderObj.get() )
331 : {
332 : // mark placeholder if it is not currently marked (or if also others are marked)
333 0 : if( !mrView.IsObjMarked( mxPlaceholderObj.get() ) || (mrView.GetMarkedObjectList().GetMarkCount() != 1) )
334 : {
335 0 : SdrPageView* pPV = mrView.GetSdrPageView();
336 0 : mrView.UnmarkAllObj(pPV );
337 0 : mrView.MarkObj(mxPlaceholderObj.get(), pPV, sal_False);
338 : }
339 : }
340 :
341 0 : mrView.GetViewShell()->GetViewFrame()->GetDispatcher()->Execute( nSID, SFX_CALLMODE_ASYNCHRON);
342 : }
343 0 : return false;
344 : }
345 :
346 : // --------------------------------------------------------------------
347 :
348 : /** returns true if the SmartTag consumes this event. */
349 0 : bool ChangePlaceholderTag::KeyInput( const KeyEvent& rKEvt )
350 : {
351 0 : sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
352 0 : switch( nCode )
353 : {
354 : case KEY_DOWN:
355 : case KEY_UP:
356 : case KEY_LEFT:
357 : case KEY_RIGHT:
358 : case KEY_ESCAPE:
359 : case KEY_TAB:
360 : case KEY_RETURN:
361 : case KEY_SPACE:
362 : default:
363 0 : return false;
364 : }
365 : }
366 :
367 : // --------------------------------------------------------------------
368 :
369 0 : BitmapEx ChangePlaceholderTag::createOverlayImage( int nHighlight )
370 : {
371 0 : BitmapEx aRet;
372 0 : if( mxPlaceholderObj.is() )
373 : {
374 0 : SdrObject* pPlaceholder = mxPlaceholderObj.get();
375 0 : SmartTagReference xThis( this );
376 0 : const Rectangle& rSnapRect = pPlaceholder->GetSnapRect();
377 0 : const Point aPoint;
378 :
379 0 : OutputDevice* pDev = mrView.GetFirstOutputDevice();
380 0 : if( pDev == 0 )
381 0 : pDev = Application::GetDefaultDevice();
382 :
383 0 : Size aShapeSizePix = pDev->LogicToPixel(rSnapRect.GetSize());
384 0 : long nShapeSizePix = std::min(aShapeSizePix.Width(),aShapeSizePix.Height());
385 :
386 0 : bool bLarge = nShapeSizePix > 250;
387 :
388 0 : Size aSize( getButtonImage( 0, bLarge )->GetSizePixel() );
389 :
390 0 : aRet.SetSizePixel( Size( aSize.Width() << 1, aSize.Height() << 1 ) );
391 :
392 0 : const Rectangle aRectSrc( Point( 0, 0 ), aSize );
393 :
394 0 : aRet = *(getButtonImage((nHighlight == 0) ? 4 : 0, bLarge));
395 0 : aRet.Expand( aSize.Width(), aSize.Height(), NULL, sal_True );
396 :
397 0 : aRet.CopyPixel( Rectangle( Point( aSize.Width(), 0 ), aSize ), aRectSrc, getButtonImage((nHighlight == 1) ? 5 : 1, bLarge) );
398 0 : aRet.CopyPixel( Rectangle( Point( 0, aSize.Height() ), aSize ), aRectSrc, getButtonImage((nHighlight == 2) ? 6 : 2, bLarge) );
399 0 : aRet.CopyPixel( Rectangle( Point( aSize.Width(), aSize.Height() ), aSize ), aRectSrc, getButtonImage((nHighlight == 3) ? 7 : 3, bLarge) );
400 : }
401 :
402 0 : return aRet;
403 : }
404 :
405 0 : void ChangePlaceholderTag::addCustomHandles( SdrHdlList& rHandlerList )
406 : {
407 0 : if( mxPlaceholderObj.is() )
408 : {
409 0 : SdrObject* pPlaceholder = mxPlaceholderObj.get();
410 0 : SmartTagReference xThis( this );
411 0 : const Rectangle& rSnapRect = pPlaceholder->GetSnapRect();
412 0 : const Point aPoint;
413 :
414 0 : OutputDevice* pDev = mrView.GetFirstOutputDevice();
415 0 : if( pDev == 0 )
416 0 : pDev = Application::GetDefaultDevice();
417 :
418 0 : Size aShapeSizePix = pDev->LogicToPixel(rSnapRect.GetSize());
419 0 : long nShapeSizePix = std::min(aShapeSizePix.Width(),aShapeSizePix.Height());
420 0 : if( 50 > nShapeSizePix )
421 0 : return;
422 :
423 0 : bool bLarge = nShapeSizePix > 250;
424 :
425 0 : Size aButtonSize( pDev->PixelToLogic( getButtonImage(0, bLarge )->GetSizePixel()) );
426 :
427 0 : const int nColumns = 2;
428 0 : const int nRows = 2;
429 :
430 0 : long all_width = nColumns * aButtonSize.Width();
431 0 : long all_height = nRows * aButtonSize.Height();
432 :
433 0 : Point aPos( rSnapRect.Center() );
434 0 : aPos.X() -= all_width >> 1;
435 0 : aPos.Y() -= all_height >> 1;
436 :
437 0 : ImageButtonHdl* pHdl = new ImageButtonHdl( xThis, aPoint );
438 0 : pHdl->SetObjHdlNum( SMART_TAG_HDL_NUM );
439 0 : pHdl->SetPageView( mrView.GetSdrPageView() );
440 :
441 0 : pHdl->SetPos( aPos );
442 :
443 0 : rHandlerList.AddHdl( pHdl );
444 : }
445 : }
446 :
447 : // --------------------------------------------------------------------
448 :
449 0 : void ChangePlaceholderTag::disposing()
450 : {
451 0 : SmartTag::disposing();
452 0 : }
453 :
454 : // --------------------------------------------------------------------
455 :
456 0 : void ChangePlaceholderTag::select()
457 : {
458 0 : SmartTag::select();
459 0 : }
460 :
461 : // --------------------------------------------------------------------
462 :
463 0 : void ChangePlaceholderTag::deselect()
464 : {
465 0 : SmartTag::deselect();
466 0 : }
467 :
468 : // --------------------------------------------------------------------
469 :
470 0 : ViewOverlayManager::ViewOverlayManager( ViewShellBase& rViewShellBase )
471 : : mrBase( rViewShellBase )
472 0 : , mnUpdateTagsEvent( 0 )
473 : {
474 0 : Link aLink( LINK(this,ViewOverlayManager,EventMultiplexerListener) );
475 : mrBase.GetEventMultiplexer()->AddEventListener(aLink, tools::EventMultiplexerEvent::EID_CURRENT_PAGE
476 : | tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED
477 : | tools::EventMultiplexerEvent::EID_VIEW_ADDED
478 : | tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT
479 0 : | tools::EventMultiplexerEvent::EID_END_TEXT_EDIT );
480 :
481 0 : StartListening( *mrBase.GetDocShell() );
482 0 : }
483 :
484 : // --------------------------------------------------------------------
485 :
486 0 : ViewOverlayManager::~ViewOverlayManager()
487 : {
488 0 : Link aLink( LINK(this,ViewOverlayManager,EventMultiplexerListener) );
489 0 : mrBase.GetEventMultiplexer()->RemoveEventListener( aLink );
490 :
491 0 : if( mnUpdateTagsEvent )
492 : {
493 0 : Application::RemoveUserEvent( mnUpdateTagsEvent );
494 0 : mnUpdateTagsEvent = 0;
495 : }
496 :
497 0 : DisposeTags();
498 0 : }
499 :
500 : // --------------------------------------------------------------------
501 :
502 0 : void ViewOverlayManager::Notify(SfxBroadcaster&, const SfxHint& rHint)
503 : {
504 0 : const SfxSimpleHint* pSimpleHint = dynamic_cast<const SfxSimpleHint*>(&rHint);
505 0 : if (pSimpleHint != NULL)
506 : {
507 0 : if (pSimpleHint->GetId() == SFX_HINT_DOCCHANGED)
508 : {
509 0 : UpdateTags();
510 : }
511 : }
512 0 : }
513 :
514 0 : void ViewOverlayManager::onZoomChanged()
515 : {
516 0 : if( !maTagVector.empty() )
517 : {
518 0 : UpdateTags();
519 : }
520 0 : }
521 :
522 0 : void ViewOverlayManager::UpdateTags()
523 : {
524 0 : if( !mnUpdateTagsEvent )
525 0 : mnUpdateTagsEvent = Application::PostUserEvent( LINK( this, ViewOverlayManager, UpdateTagsHdl ) );
526 0 : }
527 :
528 0 : IMPL_LINK_NOARG(ViewOverlayManager, UpdateTagsHdl)
529 : {
530 : OSL_TRACE("ViewOverlayManager::UpdateTagsHdl");
531 :
532 0 : mnUpdateTagsEvent = 0;
533 0 : bool bChanges = DisposeTags();
534 0 : bChanges |= CreateTags();
535 :
536 0 : if( bChanges && mrBase.GetDrawView() )
537 0 : static_cast< ::sd::View* >( mrBase.GetDrawView() )->updateHandles();
538 0 : return 0;
539 : }
540 :
541 0 : bool ViewOverlayManager::CreateTags()
542 : {
543 0 : bool bChanges = false;
544 :
545 0 : ::boost::shared_ptr<ViewShell> aMainShell = mrBase.GetMainViewShell();
546 :
547 0 : SdPage* pPage = aMainShell.get() ? aMainShell->getCurrentPage() : NULL;
548 :
549 0 : if( pPage && !pPage->IsMasterPage() && (pPage->GetPageKind() == PK_STANDARD) )
550 : {
551 0 : const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
552 :
553 0 : for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); ++iter )
554 : {
555 0 : if( (*iter)->IsEmptyPresObj() && ((*iter)->GetObjIdentifier() == OBJ_OUTLINETEXT) && (mrBase.GetDrawView()->GetTextEditObject() != (*iter)) )
556 : {
557 0 : rtl::Reference< SmartTag > xTag( new ChangePlaceholderTag( *mrBase.GetMainViewShell()->GetView(), *(*iter) ) );
558 0 : maTagVector.push_back(xTag);
559 0 : bChanges = true;
560 : }
561 : }
562 : }
563 :
564 0 : return bChanges;
565 : }
566 :
567 : // --------------------------------------------------------------------
568 :
569 0 : bool ViewOverlayManager::DisposeTags()
570 : {
571 0 : if( !maTagVector.empty() )
572 : {
573 0 : ViewTagVector vec;
574 0 : vec.swap( maTagVector );
575 :
576 0 : ViewTagVector::iterator iter = vec.begin();
577 0 : do
578 : {
579 0 : (*iter++)->Dispose();
580 : }
581 0 : while( iter != vec.end() );
582 0 : return true;
583 : }
584 :
585 0 : return false;
586 : }
587 :
588 : // --------------------------------------------------------------------
589 :
590 0 : IMPL_LINK(ViewOverlayManager,EventMultiplexerListener,
591 : tools::EventMultiplexerEvent*,pEvent)
592 : {
593 0 : switch (pEvent->meEventId)
594 : {
595 : case tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED:
596 : case tools::EventMultiplexerEvent::EID_VIEW_ADDED:
597 : case tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT:
598 : case tools::EventMultiplexerEvent::EID_END_TEXT_EDIT:
599 : case tools::EventMultiplexerEvent::EID_CURRENT_PAGE:
600 0 : UpdateTags();
601 0 : break;
602 : }
603 0 : return 0;
604 : }
605 :
606 : }
607 :
608 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|