Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <tools/urlobj.hxx>
30 : : #include <unotools/localfilehelper.hxx>
31 : : #include <sfx2/imgmgr.hxx>
32 : : #include <sfx2/fcontnr.hxx>
33 : : #include <svl/eitem.hxx>
34 : : #include <svl/stritem.hxx>
35 : : #include <sfx2/docfilt.hxx>
36 : : #include <sfx2/docfile.hxx>
37 : : #include <svl/intitem.hxx>
38 : : #include <sfx2/dispatch.hxx>
39 : : #include <svx/svxids.hrc>
40 : : #include <vcl/menu.hxx>
41 : :
42 : : #include <sfx2/viewfrm.hxx>
43 : : #include <sfx2/dockwin.hxx>
44 : : #include <sfx2/sfxresid.hxx>
45 : :
46 : : #include "pres.hxx"
47 : : #include "navigatr.hxx"
48 : : #include "navigatr.hrc"
49 : : #include "pgjump.hxx"
50 : : #include "app.hrc"
51 : : #include "strings.hrc"
52 : : #include "res_bmp.hrc"
53 : : #include "drawdoc.hxx"
54 : : #include "DrawDocShell.hxx"
55 : : #include "sdresid.hxx"
56 : : #include "ViewShell.hxx"
57 : : #include "ViewShellBase.hxx"
58 : : #include "DrawViewShell.hxx"
59 : : #include "slideshow.hxx"
60 : : #include "FrameView.hxx"
61 : : #include "helpids.h"
62 : :
63 : : namespace {
64 : : static const sal_uInt16 nShowNamedShapesFilter=1;
65 : : static const sal_uInt16 nShowAllShapesFilter=2;
66 : : }
67 : :
68 : : /*************************************************************************
69 : : |* SdNavigatorWin - FloatingWindow
70 : : \************************************************************************/
71 : :
72 : 0 : SdNavigatorWin::SdNavigatorWin(
73 : : ::Window* pParent,
74 : : ::sd::NavigatorChildWindow* pChWinCtxt,
75 : : const SdResId& rSdResId,
76 : : SfxBindings* pInBindings )
77 : : : ::Window( pParent, rSdResId )
78 : : , maToolbox ( this, SdResId( 1 ) )
79 : : , maTlbObjects( this, SdResId( TLB_OBJECTS ) )
80 : : , maLbDocs ( this, SdResId( LB_DOCS ) )
81 : : , mpChildWinContext( pChWinCtxt )
82 : : , mbDocImported ( sal_False )
83 : : // Bei Aenderung des DragTypes: SelectionMode der TLB anpassen!
84 : : , meDragType ( NAVIGATOR_DRAGTYPE_EMBEDDED )
85 : : , mpBindings ( pInBindings )
86 [ # # ][ # # ]: 0 : , maImageList ( SdResId( IL_NAVIGATR ) )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
87 : : {
88 [ # # ]: 0 : maTlbObjects.SetViewFrame( mpBindings->GetDispatcher()->GetFrame() );
89 : :
90 [ # # ]: 0 : FreeResource();
91 : :
92 [ # # ][ # # ]: 0 : maTlbObjects.SetAccessibleName(String(SdResId(STR_OBJECTS_TREE)));
[ # # ][ # # ]
93 : :
94 [ # # ][ # # ]: 0 : mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings );
95 [ # # ][ # # ]: 0 : mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings );
96 : :
97 [ # # ]: 0 : ApplyImageList(); // load images *before* calculating sizes to get something useful !!!
98 : :
99 [ # # ]: 0 : Size aTbxSize( maToolbox.CalcWindowSizePixel() );
100 [ # # ]: 0 : maToolbox.SetOutputSizePixel( aTbxSize );
101 [ # # ]: 0 : maToolbox.SetSelectHdl( LINK( this, SdNavigatorWin, SelectToolboxHdl ) );
102 [ # # ]: 0 : maToolbox.SetClickHdl( LINK( this, SdNavigatorWin, ClickToolboxHdl ) );
103 [ # # ][ # # ]: 0 : maToolbox.SetDropdownClickHdl( LINK(this, SdNavigatorWin, DropdownClickToolBoxHdl) );
104 [ # # ][ # # ]: 0 : maToolbox.SetItemBits( TBI_DRAGTYPE, maToolbox.GetItemBits( TBI_DRAGTYPE ) | TIB_DROPDOWNONLY );
105 : :
106 : : // Shape filter drop down menu.
107 : : maToolbox.SetItemBits(TBI_SHAPE_FILTER,
108 [ # # ][ # # ]: 0 : maToolbox.GetItemBits(TBI_SHAPE_FILTER) | TIB_DROPDOWNONLY);
109 : :
110 : : // TreeListBox
111 : : // set position below toolbox
112 [ # # ][ # # ]: 0 : long nListboxYPos = maToolbox.GetPosPixel().Y() + maToolbox.GetSizePixel().Height() + 4;
113 [ # # ]: 0 : maTlbObjects.SetPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y );
114 [ # # ]: 0 : maTlbObjects.SetDoubleClickHdl( LINK( this, SdNavigatorWin, ClickObjectHdl ) );
115 [ # # ]: 0 : maTlbObjects.SetSelectionMode( SINGLE_SELECTION );
116 : : // set focus to listbox, otherwise it is in the toolbox which is only useful
117 : : // for keyboard navigation
118 [ # # ]: 0 : maTlbObjects.GrabFocus();
119 : :
120 : : // DragTypeListBox
121 [ # # ]: 0 : maLbDocs.SetSelectHdl( LINK( this, SdNavigatorWin, SelectDocumentHdl ) );
122 : : // set position below treelistbox
123 [ # # ][ # # ]: 0 : nListboxYPos = maTlbObjects.GetPosPixel().Y() + maTlbObjects.GetSizePixel().Height() + 4;
124 [ # # ]: 0 : maLbDocs.SetPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y );
125 : :
126 : : // set min outputsize after all sizes are known
127 [ # # ]: 0 : long nFullHeight = nListboxYPos + maLbDocs.GetSizePixel().Height() + 4;
128 : 0 : maSize = GetOutputSizePixel();
129 [ # # ]: 0 : if( maSize.Height() < nFullHeight )
130 : : {
131 : 0 : maSize.Height() = nFullHeight;
132 [ # # ]: 0 : SetOutputSizePixel( maSize );
133 : : }
134 : 0 : maMinSize = maSize;
135 [ # # ]: 0 : long nMinWidth = 2*maToolbox.GetPosPixel().X() + aTbxSize.Width(); // never clip the toolbox
136 [ # # ]: 0 : if( nMinWidth > maMinSize.Width() )
137 : 0 : maMinSize.Width() = nMinWidth;
138 : 0 : maMinSize.Height() -= 40;
139 [ # # ][ # # ]: 0 : ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel( maMinSize );
140 : :
141 : : // InitTlb; Wird ueber Slot initiiert
142 [ # # ]: 0 : SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True );
143 : : mpBindings->GetDispatcher()->Execute(
144 [ # # ][ # # ]: 0 : SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
145 : :
146 : 0 : }
147 : :
148 : : // -----------------------------------------------------------------------
149 : :
150 [ # # ][ # # ]: 0 : SdNavigatorWin::~SdNavigatorWin()
[ # # ][ # # ]
[ # # ]
151 : : {
152 [ # # ][ # # ]: 0 : delete mpNavigatorCtrlItem;
153 [ # # ][ # # ]: 0 : delete mpPageNameCtrlItem;
154 [ # # ]: 0 : }
155 : :
156 : : // -----------------------------------------------------------------------
157 : :
158 : 0 : void SdNavigatorWin::InitTreeLB( const SdDrawDocument* pDoc )
159 : : {
160 : 0 : SdDrawDocument* pNonConstDoc = (SdDrawDocument*) pDoc; // const as const can...
161 : 0 : ::sd::DrawDocShell* pDocShell = pNonConstDoc->GetDocSh();
162 [ # # ][ # # ]: 0 : String aDocShName( pDocShell->GetName() );
163 : 0 : ::sd::ViewShell* pViewShell = pDocShell->GetViewShell();
164 : :
165 : : // Restore the 'ShowAllShapes' flag from the last time (in this session)
166 : : // that the navigator was shown.
167 [ # # ]: 0 : if (pViewShell != NULL)
168 : : {
169 [ # # ]: 0 : ::sd::FrameView* pFrameView = pViewShell->GetFrameView();
170 [ # # ]: 0 : if (pFrameView != NULL)
171 [ # # ][ # # ]: 0 : maTlbObjects.SetShowAllShapes(pFrameView->IsNavigatorShowingAllShapes(), false);
172 : : }
173 : :
174 : : // Disable the shape filter drop down menu when there is a running slide
175 : : // show.
176 [ # # ][ # # ]: 0 : if (pViewShell!=NULL && sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() ))
[ # # ][ # # ]
[ # # ]
177 [ # # ]: 0 : maToolbox.EnableItem(TBI_SHAPE_FILTER, sal_False);
178 : : else
179 [ # # ]: 0 : maToolbox.EnableItem(TBI_SHAPE_FILTER);
180 : :
181 [ # # ][ # # ]: 0 : if( !maTlbObjects.IsEqualToDoc( pDoc ) )
182 : : {
183 [ # # ][ # # ]: 0 : String aDocName = pDocShell->GetMedium()->GetName();
184 [ # # ]: 0 : maTlbObjects.Clear();
185 [ # # ]: 0 : maTlbObjects.Fill( pDoc, (sal_Bool) sal_False, aDocName ); // Nur normale Seiten
186 : :
187 [ # # ]: 0 : RefreshDocumentLB();
188 [ # # ][ # # ]: 0 : maLbDocs.SelectEntry( aDocShName );
189 : : }
190 : : else
191 : : {
192 [ # # ]: 0 : maLbDocs.SetNoSelection();
193 [ # # ]: 0 : maLbDocs.SelectEntry( aDocShName );
194 : :
195 : : // auskommentiert um 30246 zu fixen
196 : : // if( maLbDocs.GetSelectEntryCount() == 0 )
197 : : {
198 [ # # ]: 0 : RefreshDocumentLB();
199 [ # # ]: 0 : maLbDocs.SelectEntry( aDocShName );
200 : : }
201 : : }
202 : :
203 [ # # ][ # # ]: 0 : SfxViewFrame* pViewFrame = ( ( pViewShell && pViewShell->GetViewFrame() ) ? pViewShell->GetViewFrame() : SfxViewFrame::Current() );
[ # # ][ # # ]
[ # # ]
204 [ # # ]: 0 : if( pViewFrame )
205 [ # # ][ # # ]: 0 : pViewFrame->GetBindings().Invalidate(SID_NAVIGATOR_PAGENAME, sal_True, sal_True);
206 : 0 : }
207 : :
208 : : /*************************************************************************
209 : : |*
210 : : |* DragType wird in Abhaengigkeit davon gesetzt, ob ein Drag ueberhaupt
211 : : |* moeglich ist. Graphiken duerfen beispielsweise unter gewissen Umstaenden
212 : : |* nicht gedragt werden (#31038#).
213 : : |*
214 : : \************************************************************************/
215 : :
216 : 0 : NavigatorDragType SdNavigatorWin::GetNavigatorDragType()
217 : : {
218 : 0 : NavigatorDragType eDT = meDragType;
219 : 0 : NavDocInfo* pInfo = GetDocInfo();
220 : :
221 [ # # ][ # # ]: 0 : if( ( eDT == NAVIGATOR_DRAGTYPE_LINK ) && ( ( pInfo && !pInfo->HasName() ) || !maTlbObjects.IsLinkableSelected() ) )
[ # # ][ # # ]
[ # # ]
222 : 0 : eDT = NAVIGATOR_DRAGTYPE_NONE;
223 : :
224 : 0 : return( eDT );
225 : : }
226 : :
227 : : // -----------------------------------------------------------------------
228 : :
229 : :
230 : 0 : IMPL_LINK_NOARG(SdNavigatorWin, SelectToolboxHdl)
231 : : {
232 : 0 : sal_uInt16 nId = maToolbox.GetCurItemId();
233 : 0 : sal_uInt16 nSId = 0;
234 : 0 : PageJump ePage = PAGE_NONE;
235 : :
236 [ # # # ]: 0 : switch( nId )
237 : : {
238 : : case TBI_PEN:
239 : : {
240 [ # # ]: 0 : if( nId == TBI_PEN )
241 : : {
242 : 0 : nSId = SID_NAVIGATOR_PEN;
243 : : }
244 : :
245 [ # # ]: 0 : if( nSId > 0 )
246 : : {
247 [ # # ]: 0 : SfxBoolItem aItem( nSId, sal_True );
248 : : mpBindings->GetDispatcher()->Execute(
249 [ # # ][ # # ]: 0 : nSId, SFX_CALLMODE_SLOT |SFX_CALLMODE_RECORD, &aItem, 0L );
250 : : }
251 : : }
252 : 0 : break;
253 : :
254 : : case TBI_FIRST:
255 : : case TBI_PREVIOUS:
256 : : case TBI_NEXT:
257 : : case TBI_LAST:
258 : : {
259 [ # # ]: 0 : if( nId == TBI_FIRST )
260 : 0 : ePage = PAGE_FIRST;
261 [ # # ]: 0 : else if( nId == TBI_PREVIOUS )
262 : 0 : ePage = PAGE_PREVIOUS;
263 [ # # ]: 0 : else if( nId == TBI_NEXT )
264 : 0 : ePage = PAGE_NEXT;
265 [ # # ]: 0 : else if( nId == TBI_LAST )
266 : 0 : ePage = PAGE_LAST;
267 : :
268 [ # # ]: 0 : if( ePage != PAGE_NONE )
269 : : {
270 [ # # ]: 0 : SfxUInt16Item aItem( SID_NAVIGATOR_PAGE, (sal_uInt16)ePage );
271 : : mpBindings->GetDispatcher()->Execute(
272 [ # # ][ # # ]: 0 : SID_NAVIGATOR_PAGE, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD, &aItem, 0L );
273 : : }
274 : : }
275 : 0 : break;
276 : : }
277 : 0 : return 0;
278 : : }
279 : :
280 : : // -----------------------------------------------------------------------
281 : :
282 : :
283 : 0 : IMPL_LINK_NOARG(SdNavigatorWin, ClickToolboxHdl)
284 : : {
285 : 0 : return 0;
286 : : }
287 : :
288 : : // -----------------------------------------------------------------------
289 : :
290 : 0 : IMPL_LINK( SdNavigatorWin, DropdownClickToolBoxHdl, ToolBox*, pBox )
291 : : {
292 : 0 : sal_uInt16 nId = maToolbox.GetCurItemId();
293 : :
294 [ # # # ]: 0 : switch( nId )
295 : : {
296 : : case TBI_DRAGTYPE:
297 : : {
298 : : // Popup-Menu wird in Abhaengigkeit davon erzeugt, ob Dokument
299 : : // gespeichert ist oder nicht
300 [ # # ]: 0 : PopupMenu *pMenu = new PopupMenu;
301 : :
302 : : static const char* aHIDs[] =
303 : : {
304 : : HID_SD_NAVIGATOR_MENU1,
305 : : HID_SD_NAVIGATOR_MENU2,
306 : : HID_SD_NAVIGATOR_MENU3,
307 : : 0
308 : : };
309 : :
310 [ # # ]: 0 : for( sal_uInt16 nID = NAVIGATOR_DRAGTYPE_URL;
311 : : nID < NAVIGATOR_DRAGTYPE_COUNT;
312 : : nID++ )
313 : : {
314 : 0 : sal_uInt16 nRId = GetDragTypeSdResId( (NavigatorDragType)nID );
315 [ # # ]: 0 : if( nRId > 0 )
316 : : {
317 : : DBG_ASSERT(aHIDs[nID-NAVIGATOR_DRAGTYPE_URL],"HelpId not added!");
318 [ # # ][ # # ]: 0 : pMenu->InsertItem( nID, String( SdResId( nRId ) ) );
[ # # ]
319 [ # # ]: 0 : pMenu->SetHelpId( nID, aHIDs[nID - NAVIGATOR_DRAGTYPE_URL] );
320 : : }
321 : :
322 : : }
323 : 0 : NavDocInfo* pInfo = GetDocInfo();
324 : :
325 [ # # ][ # # ]: 0 : if( ( pInfo && !pInfo->HasName() ) || !maTlbObjects.IsLinkableSelected() )
[ # # ][ # # ]
326 : : {
327 : 0 : pMenu->EnableItem( NAVIGATOR_DRAGTYPE_LINK, sal_False );
328 : 0 : pMenu->EnableItem( NAVIGATOR_DRAGTYPE_URL, sal_False );
329 : 0 : meDragType = NAVIGATOR_DRAGTYPE_EMBEDDED;
330 : : }
331 : :
332 : 0 : pMenu->CheckItem( (sal_uInt16)meDragType );
333 : 0 : pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, MenuSelectHdl ) );
334 : :
335 [ # # ]: 0 : pMenu->Execute( this, maToolbox.GetItemRect( nId ), POPUPMENU_EXECUTE_DOWN );
336 : 0 : pBox->EndSelection();
337 [ # # ]: 0 : delete pMenu;
338 : : }
339 : 0 : break;
340 : :
341 : : case TBI_SHAPE_FILTER:
342 : : {
343 [ # # ]: 0 : PopupMenu *pMenu = new PopupMenu;
344 : :
345 : : pMenu->InsertItem(
346 : : nShowNamedShapesFilter,
347 [ # # ][ # # ]: 0 : String(SdResId(STR_NAVIGATOR_SHOW_NAMED_SHAPES)));
[ # # ]
348 : : pMenu->InsertItem(
349 : : nShowAllShapesFilter,
350 [ # # ][ # # ]: 0 : String(SdResId(STR_NAVIGATOR_SHOW_ALL_SHAPES)));
[ # # ]
351 : :
352 [ # # ]: 0 : if (maTlbObjects.GetShowAllShapes())
353 : 0 : pMenu->CheckItem(nShowAllShapesFilter);
354 : : else
355 : 0 : pMenu->CheckItem(nShowNamedShapesFilter);
356 : 0 : pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, ShapeFilterCallback ) );
357 : :
358 [ # # ]: 0 : pMenu->Execute( this, maToolbox.GetItemRect( nId ), POPUPMENU_EXECUTE_DOWN );
359 : 0 : pBox->EndSelection();
360 [ # # ]: 0 : delete pMenu;
361 : : }
362 : 0 : break;
363 : : }
364 : 0 : return 0;
365 : : }
366 : :
367 : : // -----------------------------------------------------------------------
368 : :
369 : 0 : IMPL_LINK_NOARG(SdNavigatorWin, ClickObjectHdl)
370 : : {
371 [ # # ][ # # ]: 0 : if( !mbDocImported || maLbDocs.GetSelectEntryPos() != 0 )
[ # # ]
372 : : {
373 : 0 : NavDocInfo* pInfo = GetDocInfo();
374 : :
375 : : // Nur wenn es sich um das aktive Fenster handelt, wird
376 : : // auf die Seite gesprungen
377 [ # # ][ # # ]: 0 : if( pInfo && pInfo->IsActive() )
[ # # ]
378 : : {
379 [ # # ]: 0 : String aStr( maTlbObjects.GetSelectEntry() );
380 : :
381 [ # # ]: 0 : if( aStr.Len() > 0 )
382 : : {
383 [ # # ]: 0 : SfxStringItem aItem( SID_NAVIGATOR_OBJECT, aStr );
384 : : mpBindings->GetDispatcher()->Execute(
385 [ # # ]: 0 : SID_NAVIGATOR_OBJECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD, &aItem, 0L );
386 : :
387 : : // moved here from SetGetFocusHdl. Reset the
388 : : // focus only if something has been selected in the
389 : : // document.
390 [ # # ]: 0 : SfxViewShell* pCurSh = SfxViewShell::Current();
391 : :
392 [ # # ]: 0 : if ( pCurSh )
393 : : {
394 : 0 : Window* pShellWnd = pCurSh->GetWindow();
395 [ # # ]: 0 : if ( pShellWnd )
396 [ # # ]: 0 : pShellWnd->GrabFocus();
397 [ # # ]: 0 : }
398 [ # # ]: 0 : }
399 : : }
400 : : }
401 : 0 : return( 0L );
402 : : }
403 : :
404 : : // -----------------------------------------------------------------------
405 : :
406 : 0 : IMPL_LINK_NOARG(SdNavigatorWin, SelectDocumentHdl)
407 : : {
408 [ # # ]: 0 : String aStrLb = maLbDocs.GetSelectEntry();
409 [ # # ]: 0 : long nPos = maLbDocs.GetSelectEntryPos();
410 : 0 : sal_Bool bFound = sal_False;
411 : 0 : ::sd::DrawDocShell* pDocShell = NULL;
412 [ # # ]: 0 : NavDocInfo* pInfo = GetDocInfo();
413 : :
414 : : // Handelt es sich um ein gedragtes Objekt?
415 [ # # ][ # # ]: 0 : if( mbDocImported && nPos == 0 )
416 : : {
417 : : // Dokument in TLB aufbauen
418 [ # # ]: 0 : InsertFile( aStrLb );
419 : : }
420 [ # # ]: 0 : else if (pInfo)
421 : : {
422 : 0 : pDocShell = pInfo->mpDocShell;
423 : :
424 : 0 : bFound = sal_True;
425 : : }
426 : :
427 [ # # ]: 0 : if( bFound )
428 : : {
429 [ # # ]: 0 : SdDrawDocument* pDoc = pDocShell->GetDoc();
430 [ # # ][ # # ]: 0 : if( !maTlbObjects.IsEqualToDoc( pDoc ) )
431 : : {
432 : 0 : SdDrawDocument* pNonConstDoc = (SdDrawDocument*) pDoc; // const as const can...
433 : 0 : ::sd::DrawDocShell* pNCDocShell = pNonConstDoc->GetDocSh();
434 [ # # ][ # # ]: 0 : String aDocName = pNCDocShell->GetMedium()->GetName();
435 [ # # ]: 0 : maTlbObjects.Clear();
436 [ # # ][ # # ]: 0 : maTlbObjects.Fill( pDoc, (sal_Bool) sal_False, aDocName ); // Nur normale Seiten
437 : : }
438 : : }
439 : :
440 : : // Pruefen, ob Link oder URL moeglich ist
441 [ # # ][ # # ]: 0 : if( ( pInfo && !pInfo->HasName() ) || !maTlbObjects.IsLinkableSelected() || ( meDragType != NAVIGATOR_DRAGTYPE_EMBEDDED ) )
[ # # ][ # # ]
[ # # ]
442 : : {
443 : 0 : meDragType = NAVIGATOR_DRAGTYPE_EMBEDDED;
444 [ # # ]: 0 : SetDragImage();
445 : : }
446 : :
447 [ # # ]: 0 : return( 0L );
448 : : }
449 : :
450 : : /*************************************************************************
451 : : |*
452 : : |* DrageType wird gesetzt und Image wird entspr. gesetzt.
453 : : |* Sollte Handler mit NULL gerufen werden, so wird der Default (URL) gesetzt.
454 : : |*
455 : : \************************************************************************/
456 : :
457 : 0 : IMPL_LINK( SdNavigatorWin, MenuSelectHdl, Menu *, pMenu )
458 : : {
459 : : sal_uInt16 nMenuId;
460 [ # # ]: 0 : if( pMenu )
461 : 0 : nMenuId = pMenu->GetCurItemId();
462 : : else
463 : 0 : nMenuId = NAVIGATOR_DRAGTYPE_URL;
464 : :
465 [ # # ]: 0 : if( nMenuId != USHRT_MAX ) // Notwendig ?
466 : : {
467 : 0 : NavigatorDragType eDT = (NavigatorDragType) nMenuId;
468 [ # # ]: 0 : if( meDragType != eDT )
469 : : {
470 : 0 : meDragType = eDT;
471 : 0 : SetDragImage();
472 : :
473 [ # # ]: 0 : if( meDragType == NAVIGATOR_DRAGTYPE_URL )
474 : : {
475 : : // Fix, um Endlosschleife zu unterbinden
476 [ # # ]: 0 : if( maTlbObjects.GetSelectionCount() > 1 )
477 : 0 : maTlbObjects.SelectAll( sal_False );
478 : :
479 : 0 : maTlbObjects.SetSelectionMode( SINGLE_SELECTION );
480 : : }
481 : : else
482 : 0 : maTlbObjects.SetSelectionMode( MULTIPLE_SELECTION );
483 : : }
484 : : }
485 : 0 : return( 0 );
486 : : }
487 : :
488 : :
489 : :
490 : :
491 : 0 : IMPL_LINK( SdNavigatorWin, ShapeFilterCallback, Menu *, pMenu )
492 : : {
493 [ # # ]: 0 : if (pMenu != NULL)
494 : : {
495 : 0 : bool bShowAllShapes (maTlbObjects.GetShowAllShapes());
496 : 0 : sal_uInt16 nMenuId (pMenu->GetCurItemId());
497 [ # # # ]: 0 : switch (nMenuId)
498 : : {
499 : : case nShowNamedShapesFilter:
500 : 0 : bShowAllShapes = false;
501 : 0 : break;
502 : :
503 : : case nShowAllShapesFilter:
504 : 0 : bShowAllShapes = true;
505 : 0 : break;
506 : :
507 : : default:
508 : : OSL_FAIL(
509 : : "SdNavigatorWin::ShapeFilterCallback called for unknown menu entry");
510 : 0 : break;
511 : : }
512 : :
513 : 0 : maTlbObjects.SetShowAllShapes(bShowAllShapes, true);
514 : :
515 : : // Remember the selection in the FrameView.
516 : 0 : NavDocInfo* pInfo = GetDocInfo();
517 [ # # ]: 0 : if (pInfo != NULL)
518 : : {
519 : 0 : ::sd::DrawDocShell* pDocShell = pInfo->mpDocShell;
520 [ # # ]: 0 : if (pDocShell != NULL)
521 : : {
522 : 0 : ::sd::ViewShell* pViewShell = pDocShell->GetViewShell();
523 [ # # ]: 0 : if (pViewShell != NULL)
524 : : {
525 : 0 : ::sd::FrameView* pFrameView = pViewShell->GetFrameView();
526 [ # # ]: 0 : if (pFrameView != NULL)
527 : : {
528 : 0 : pFrameView->SetIsNavigatorShowingAllShapes(bShowAllShapes);
529 : : }
530 : : }
531 : : }
532 : : }
533 : : }
534 : :
535 : 0 : return 0;
536 : : }
537 : :
538 : : // -----------------------------------------------------------------------
539 : :
540 : 0 : void SdNavigatorWin::Resize()
541 : : {
542 : 0 : Size aWinSize( GetOutputSizePixel() );
543 [ # # ]: 0 : if( aWinSize.Height() >= maMinSize.Height() )
544 : : //aWinSize.Width() >= maMinSize.Width() )
545 : : {
546 : 0 : Size aDiffSize;
547 : 0 : aDiffSize.Width() = aWinSize.Width() - maSize.Width();
548 : 0 : aDiffSize.Height() = aWinSize.Height() - maSize.Height();
549 : :
550 : : // Umgroessern der Toolbox
551 [ # # ]: 0 : Size aObjSize( maToolbox.GetOutputSizePixel() );
552 : 0 : aObjSize.Width() += aDiffSize.Width();
553 [ # # ]: 0 : maToolbox.SetOutputSizePixel( aObjSize );
554 : :
555 : : // Umgroessern der TreeLB
556 [ # # ]: 0 : aObjSize = maTlbObjects.GetSizePixel();
557 : 0 : aObjSize.Width() += aDiffSize.Width();
558 [ # # ]: 0 : aObjSize.Height() = maLbDocs.GetPosPixel().Y() + aDiffSize.Height() -
559 [ # # ]: 0 : maTlbObjects.GetPosPixel().Y() - 4;
560 [ # # ]: 0 : maTlbObjects.SetSizePixel( aObjSize );
561 : :
562 : 0 : Point aPt( 0, aDiffSize.Height() );
563 : :
564 : : // Verschieben der anderen Controls (DocumentLB)
565 [ # # ]: 0 : maLbDocs.Hide();
566 : 0 : aObjSize = maLbDocs.GetOutputSizePixel();
567 : 0 : aObjSize.Width() += aDiffSize.Width();
568 [ # # ][ # # ]: 0 : maLbDocs.SetPosPixel( maLbDocs.GetPosPixel() + aPt );
569 [ # # ]: 0 : maLbDocs.SetOutputSizePixel( aObjSize );
570 [ # # ]: 0 : maLbDocs.Show();
571 : :
572 : 0 : maSize = aWinSize;
573 : : }
574 [ # # ]: 0 : Window::Resize();
575 : 0 : }
576 : :
577 : : // -----------------------------------------------------------------------
578 : :
579 : 0 : sal_Bool SdNavigatorWin::InsertFile(const String& rFileName)
580 : : {
581 [ # # ][ # # ]: 0 : INetURLObject aURL( rFileName );
582 : 0 : sal_Bool bReturn = sal_True;
583 : :
584 [ # # ]: 0 : if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
585 : : {
586 : 0 : rtl::OUString aURLStr;
587 [ # # ][ # # ]: 0 : ::utl::LocalFileHelper::ConvertPhysicalNameToURL( rFileName, aURLStr );
588 [ # # ][ # # ]: 0 : aURL = INetURLObject( aURLStr );
[ # # ]
589 : : }
590 : :
591 : : // get adjusted FileName
592 [ # # ][ # # ]: 0 : String aFileName( aURL.GetMainURL( INetURLObject::NO_DECODE ) );
593 : :
594 [ # # ]: 0 : if (!aFileName.Len())
595 : : {
596 : : /**********************************************************************
597 : : * Wieder aktuelles Dokument anzeigen
598 : : **********************************************************************/
599 [ # # ]: 0 : maDropFileName = aFileName;
600 : : }
601 : : else
602 : : {
603 : : /**********************************************************************
604 : : * Hineingedraggtes Dokument anzeigen
605 : : **********************************************************************/
606 : 0 : const SfxFilter* pFilter = NULL;
607 : 0 : ErrCode nErr = 0;
608 : :
609 [ # # ][ # # ]: 0 : if (aFileName != maDropFileName)
610 : : {
611 [ # # ]: 0 : SfxMedium aMed(aFileName, (STREAM_READ | STREAM_SHARE_DENYNONE));
612 [ # # ][ # # ]: 0 : SfxFilterMatcher aMatch( rtl::OUString("simpress") );
[ # # ]
613 [ # # ]: 0 : aMed.UseInteractionHandler( sal_True );
614 [ # # ][ # # ]: 0 : nErr = aMatch.GuessFilter(aMed, &pFilter);
[ # # ]
615 : : }
616 : :
617 [ # # ][ # # ]: 0 : if ((pFilter && !nErr) || aFileName == maDropFileName)
[ # # ][ # # ]
[ # # ]
618 : : {
619 : : // Das Medium muss ggf. mit READ/WRITE geoeffnet werden, daher wird
620 : : // ersteinmal nachgeschaut, ob es einen Storage enthaelt
621 : : SfxMedium* pMedium = new SfxMedium( aFileName,
622 [ # # ][ # # ]: 0 : STREAM_READ | STREAM_NOCREATE);
623 : :
624 [ # # ][ # # ]: 0 : if (pMedium->IsStorage())
625 : : {
626 : : // Jetzt modusabhaengig:
627 : : // maTlbObjects.SetSelectionMode(MULTIPLE_SELECTION);
628 : : // Eigentuemeruebergabe von pMedium;
629 [ # # ]: 0 : SdDrawDocument* pDropDoc = maTlbObjects.GetBookmarkDoc(pMedium);
630 : :
631 [ # # ]: 0 : if (pDropDoc)
632 : : {
633 [ # # ]: 0 : maTlbObjects.Clear();
634 [ # # ]: 0 : maDropFileName = aFileName;
635 : :
636 [ # # ][ # # ]: 0 : if( !maTlbObjects.IsEqualToDoc( pDropDoc ) )
637 : : {
638 : : // Nur normale Seiten
639 [ # # ]: 0 : maTlbObjects.Fill(pDropDoc, (sal_Bool) sal_False, maDropFileName);
640 [ # # ]: 0 : RefreshDocumentLB( &maDropFileName );
641 : : }
642 : : }
643 : : }
644 : : else
645 : : {
646 : 0 : bReturn = sal_False;
647 [ # # ][ # # ]: 0 : delete pMedium;
648 : : }
649 : : }
650 : : else
651 : : {
652 : 0 : bReturn = sal_False;
653 : : }
654 : : }
655 : :
656 [ # # ][ # # ]: 0 : return (bReturn);
657 : : }
658 : :
659 : : // -----------------------------------------------------------------------
660 : :
661 : 0 : void SdNavigatorWin::RefreshDocumentLB( const String* pDocName )
662 : : {
663 : 0 : sal_uInt16 nPos = 0;
664 : :
665 [ # # ]: 0 : if( pDocName )
666 : : {
667 [ # # ]: 0 : if( mbDocImported )
668 : 0 : maLbDocs.RemoveEntry( 0 );
669 : :
670 : 0 : maLbDocs.InsertEntry( *pDocName, 0 );
671 : 0 : mbDocImported = sal_True;
672 : : }
673 : : else
674 : : {
675 [ # # ]: 0 : nPos = maLbDocs.GetSelectEntryPos();
676 [ # # ]: 0 : if( nPos == LISTBOX_ENTRY_NOTFOUND )
677 : 0 : nPos = 0;
678 : :
679 [ # # ]: 0 : String aStr;
680 [ # # ]: 0 : if( mbDocImported )
681 [ # # ][ # # ]: 0 : aStr = maLbDocs.GetEntry( 0 );
[ # # ]
682 : :
683 [ # # ]: 0 : maLbDocs.Clear();
684 : :
685 : : // Liste der DocInfos loeschen
686 : 0 : maDocList.clear();
687 : :
688 [ # # ]: 0 : if( mbDocImported )
689 [ # # ]: 0 : maLbDocs.InsertEntry( aStr, 0 );
690 : :
691 : : ::sd::DrawDocShell* pCurrentDocShell =
692 [ # # ][ # # ]: 0 : PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current() );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
693 [ # # ]: 0 : SfxObjectShell* pSfxDocShell = SfxObjectShell::GetFirst(0, sal_False);
694 [ # # ]: 0 : while( pSfxDocShell )
695 : : {
696 [ # # ][ # # ]: 0 : ::sd::DrawDocShell* pDocShell = PTR_CAST(::sd::DrawDocShell, pSfxDocShell );
[ # # ][ # # ]
697 [ # # ][ # # ]: 0 : if( pDocShell && !pDocShell->IsInDestruction() && ( pDocShell->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) )
[ # # ][ # # ]
698 : : {
699 : 0 : NavDocInfo aInfo ;
700 : 0 : aInfo.mpDocShell = pDocShell;
701 : :
702 : 0 : SfxMedium *pMedium = pDocShell->GetMedium();
703 [ # # ][ # # ]: 0 : aStr = pMedium ? pMedium->GetName() : OUString();
[ # # ]
704 [ # # ]: 0 : if( aStr.Len() )
705 : 0 : aInfo.SetName();
706 : : else
707 : 0 : aInfo.SetName( sal_False );
708 : : // z.Z. wird wieder der Name der Shell genommen (also ohne Pfad)
709 : : // da Koose es als Fehler ansieht, wenn er Pfad in URL-Notation
710 : : // angezeigt wird!
711 [ # # ][ # # ]: 0 : aStr = pDocShell->GetName();
712 : :
713 [ # # ]: 0 : maLbDocs.InsertEntry( aStr, LISTBOX_APPEND );
714 : :
715 [ # # ]: 0 : if( pDocShell == pCurrentDocShell )
716 : 0 : aInfo.SetActive();
717 : : else
718 : 0 : aInfo.SetActive( sal_False );
719 : :
720 [ # # ]: 0 : maDocList.push_back( aInfo );
721 : : }
722 [ # # ]: 0 : pSfxDocShell = SfxObjectShell::GetNext( *pSfxDocShell, 0 , sal_False );
723 [ # # ]: 0 : }
724 : : }
725 : 0 : maLbDocs.SelectEntryPos( nPos );
726 : 0 : }
727 : :
728 : : //------------------------------------------------------------------------
729 : :
730 : 0 : sal_uInt16 SdNavigatorWin::GetDragTypeSdResId( NavigatorDragType eDT, sal_Bool bImage )
731 : : {
732 [ # # # # : 0 : switch( eDT )
# ]
733 : : {
734 : : case NAVIGATOR_DRAGTYPE_NONE:
735 [ # # ]: 0 : return( bImage ? 0 : STR_NONE );
736 : : case NAVIGATOR_DRAGTYPE_URL:
737 [ # # ]: 0 : return( bImage ? TBI_HYPERLINK : STR_DRAGTYPE_URL );
738 : : case NAVIGATOR_DRAGTYPE_EMBEDDED:
739 [ # # ]: 0 : return( bImage ? TBI_EMBEDDED : STR_DRAGTYPE_EMBEDDED );
740 : : case NAVIGATOR_DRAGTYPE_LINK:
741 [ # # ]: 0 : return( bImage ? TBI_LINK : STR_DRAGTYPE_LINK );
742 : : default: OSL_FAIL( "Keine Resource fuer DragType vorhanden!" );
743 : : }
744 : 0 : return( 0 );
745 : : }
746 : :
747 : : //------------------------------------------------------------------------
748 : :
749 : 0 : NavDocInfo* SdNavigatorWin::GetDocInfo()
750 : : {
751 : 0 : sal_uInt32 nPos = maLbDocs.GetSelectEntryPos();
752 : :
753 [ # # ]: 0 : if( mbDocImported )
754 : : {
755 [ # # ]: 0 : if( nPos == 0 )
756 : : {
757 : 0 : return( NULL );
758 : : }
759 : 0 : nPos--;
760 : : }
761 : :
762 [ # # ]: 0 : return nPos < maDocList.size() ? &(maDocList[ nPos ]) : NULL;
763 : : }
764 : :
765 : : /*************************************************************************
766 : : |*
767 : : |* PreNotify
768 : : |*
769 : : \************************************************************************/
770 : :
771 : 0 : long SdNavigatorWin::Notify(NotifyEvent& rNEvt)
772 : : {
773 : 0 : const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
774 : 0 : long nOK = sal_False;
775 : :
776 [ # # ]: 0 : if( pKEvt )
777 : : {
778 [ # # ]: 0 : if( KEY_ESCAPE == pKEvt->GetKeyCode().GetCode() )
779 : : {
780 [ # # ]: 0 : if( SdPageObjsTLB::IsInDrag() )
781 : : {
782 : : // during drag'n'drop we just stop the drag but do not close the navigator
783 : 0 : nOK = sal_True;
784 : : }
785 : : else
786 : : {
787 : 0 : ::sd::ViewShellBase* pBase = ::sd::ViewShellBase::GetViewShellBase( mpBindings->GetDispatcher()->GetFrame());
788 [ # # ]: 0 : if( pBase )
789 : : {
790 : 0 : sd::SlideShow::Stop( *pBase );
791 : : // Stopping the slide show may result in a synchronous
792 : : // deletion of the navigator window. Calling the
793 : : // parents Notify after this is unsafe. Therefore we
794 : : // return now.
795 : 0 : return sal_True;
796 : : }
797 : : }
798 : : }
799 : : }
800 : :
801 [ # # ]: 0 : if( !nOK )
802 : 0 : nOK = Window::Notify( rNEvt );
803 : :
804 : 0 : return( nOK );
805 : : }
806 : :
807 : :
808 : : /*************************************************************************
809 : : |*
810 : : |* KeyInput: ESCAPE abfangen, um Show zu beenden
811 : : |*
812 : : \************************************************************************/
813 : :
814 : 0 : void SdNavigatorWin::KeyInput( const KeyEvent& rKEvt )
815 : : {
816 : 0 : long nOK = sal_False;
817 : :
818 [ # # ]: 0 : if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
819 : : {
820 [ # # ]: 0 : if( SdPageObjsTLB::IsInDrag() )
821 : : {
822 : : // during drag'n'drop we just stop the drag but do not close the navigator
823 : 0 : nOK = sal_True;
824 : : }
825 : : else
826 : : {
827 : 0 : ::sd::ViewShellBase* pBase = ::sd::ViewShellBase::GetViewShellBase( mpBindings->GetDispatcher()->GetFrame());
828 [ # # ]: 0 : if(pBase)
829 : : {
830 : 0 : ::sd::SlideShow::Stop( *pBase );
831 : : }
832 : : }
833 : : }
834 : :
835 [ # # ]: 0 : if (!nOK)
836 : : {
837 : 0 : Window::KeyInput(rKEvt);
838 : : }
839 : 0 : }
840 : :
841 : 0 : void SdNavigatorWin::DataChanged( const DataChangedEvent& rDCEvt )
842 : : {
843 [ # # ][ # # ]: 0 : if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
[ # # ]
844 : 0 : ApplyImageList();
845 : :
846 : 0 : Window::DataChanged( rDCEvt );
847 : 0 : }
848 : :
849 : 0 : void SdNavigatorWin::SetDragImage()
850 : : {
851 [ # # ]: 0 : maToolbox.SetItemImage( TBI_DRAGTYPE, maToolbox.GetImageList().GetImage( GetDragTypeSdResId( meDragType, sal_True ) ) );
852 : 0 : }
853 : :
854 : 0 : void SdNavigatorWin::ApplyImageList()
855 : : {
856 : :
857 : 0 : maToolbox.SetImageList( maImageList );
858 [ # # ][ # # ]: 0 : maToolbox.SetItemImage( TBI_SHAPE_FILTER, BitmapEx( SdResId( BMP_GRAPHIC ) ) );
[ # # ][ # # ]
[ # # ]
859 : :
860 : 0 : SetDragImage();
861 : 0 : }
862 : :
863 : :
864 : :
865 : : /*************************************************************************
866 : : |*
867 : : |* ControllerItem fuer Navigator
868 : : |*
869 : : \************************************************************************/
870 : :
871 : 0 : SdNavigatorControllerItem::SdNavigatorControllerItem( sal_uInt16 _nId,
872 : : SdNavigatorWin* pNavWin,
873 : : SfxBindings* _pBindings) :
874 : : SfxControllerItem( _nId, *_pBindings ),
875 : 0 : pNavigatorWin( pNavWin )
876 : : {
877 : 0 : }
878 : :
879 : : // -----------------------------------------------------------------------
880 : :
881 : 0 : void SdNavigatorControllerItem::StateChanged( sal_uInt16 nSId,
882 : : SfxItemState eState, const SfxPoolItem* pItem )
883 : : {
884 [ # # ][ # # ]: 0 : if( eState >= SFX_ITEM_AVAILABLE && nSId == SID_NAVIGATOR_STATE )
885 : : {
886 [ # # ][ # # ]: 0 : const SfxUInt32Item* pStateItem = PTR_CAST( SfxUInt32Item, pItem );
887 : : DBG_ASSERT( pStateItem, "SfxUInt16Item erwartet");
888 : 0 : sal_uInt32 nState = pStateItem->GetValue();
889 : :
890 : : // Stift
891 [ # # ]: 0 : if( nState & NAVBTN_PEN_ENABLED &&
[ # # # # ]
892 : 0 : !pNavigatorWin->maToolbox.IsItemEnabled( TBI_PEN ) )
893 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_PEN );
894 [ # # # # ]: 0 : if( nState & NAVBTN_PEN_DISABLED &&
[ # # ]
895 : 0 : pNavigatorWin->maToolbox.IsItemEnabled( TBI_PEN ) )
896 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_PEN, sal_False );
897 [ # # # # ]: 0 : if( nState & NAVBTN_PEN_CHECKED &&
[ # # ]
898 : 0 : !pNavigatorWin->maToolbox.IsItemChecked( TBI_PEN ) )
899 : 0 : pNavigatorWin->maToolbox.CheckItem( TBI_PEN );
900 [ # # # # ]: 0 : if( nState & NAVBTN_PEN_UNCHECKED &&
[ # # ]
901 : 0 : pNavigatorWin->maToolbox.IsItemChecked( TBI_PEN ) )
902 : 0 : pNavigatorWin->maToolbox.CheckItem( TBI_PEN, sal_False );
903 : :
904 : : // Nur wenn Doc in LB das Aktive ist
905 : 0 : NavDocInfo* pInfo = pNavigatorWin->GetDocInfo();
906 [ # # ][ # # ]: 0 : if( pInfo && pInfo->IsActive() )
[ # # ]
907 : : {
908 : : // First
909 [ # # # # ]: 0 : if( nState & NAVBTN_FIRST_ENABLED &&
[ # # ]
910 : 0 : !pNavigatorWin->maToolbox.IsItemEnabled( TBI_FIRST ) )
911 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_FIRST );
912 [ # # # # ]: 0 : if( nState & NAVBTN_FIRST_DISABLED &&
[ # # ]
913 : 0 : pNavigatorWin->maToolbox.IsItemEnabled( TBI_FIRST ) )
914 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_FIRST, sal_False );
915 : :
916 : : // Prev
917 [ # # # # ]: 0 : if( nState & NAVBTN_PREV_ENABLED &&
[ # # ]
918 : 0 : !pNavigatorWin->maToolbox.IsItemEnabled( TBI_PREVIOUS ) )
919 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_PREVIOUS );
920 [ # # # # ]: 0 : if( nState & NAVBTN_PREV_DISABLED &&
[ # # ]
921 : 0 : pNavigatorWin->maToolbox.IsItemEnabled( TBI_PREVIOUS ) )
922 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_PREVIOUS, sal_False );
923 : :
924 : : // Last
925 [ # # # # ]: 0 : if( nState & NAVBTN_LAST_ENABLED &&
[ # # ]
926 : 0 : !pNavigatorWin->maToolbox.IsItemEnabled( TBI_LAST ) )
927 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_LAST );
928 [ # # # # ]: 0 : if( nState & NAVBTN_LAST_DISABLED &&
[ # # ]
929 : 0 : pNavigatorWin->maToolbox.IsItemEnabled( TBI_LAST ) )
930 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_LAST, sal_False );
931 : :
932 : : // Next
933 [ # # # # ]: 0 : if( nState & NAVBTN_NEXT_ENABLED &&
[ # # ]
934 : 0 : !pNavigatorWin->maToolbox.IsItemEnabled( TBI_NEXT ) )
935 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_NEXT );
936 [ # # # # ]: 0 : if( nState & NAVBTN_NEXT_DISABLED &&
[ # # ]
937 : 0 : pNavigatorWin->maToolbox.IsItemEnabled( TBI_NEXT ) )
938 : 0 : pNavigatorWin->maToolbox.EnableItem( TBI_NEXT, sal_False );
939 : :
940 [ # # ]: 0 : if( nState & NAVTLB_UPDATE )
941 : : {
942 : : // InitTlb; Wird ueber Slot initiiert
943 [ # # ]: 0 : SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True );
944 : 0 : GetBindings().GetDispatcher()->Execute(
945 [ # # ][ # # ]: 0 : SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
946 : : }
947 : : }
948 : : }
949 : 0 : }
950 : :
951 : : /*************************************************************************
952 : : |*
953 : : |* ControllerItem fuer Navigator, um die Seite in der TreeLB anzuzeigen
954 : : |*
955 : : \************************************************************************/
956 : :
957 : 0 : SdPageNameControllerItem::SdPageNameControllerItem( sal_uInt16 _nId,
958 : : SdNavigatorWin* pNavWin,
959 : : SfxBindings* _pBindings) :
960 : : SfxControllerItem( _nId, *_pBindings ),
961 : 0 : pNavigatorWin( pNavWin )
962 : : {
963 : 0 : }
964 : :
965 : : // -----------------------------------------------------------------------
966 : :
967 : 0 : void SdPageNameControllerItem::StateChanged( sal_uInt16 nSId,
968 : : SfxItemState eState, const SfxPoolItem* pItem )
969 : : {
970 [ # # ][ # # ]: 0 : if( eState >= SFX_ITEM_AVAILABLE && nSId == SID_NAVIGATOR_PAGENAME )
971 : : {
972 : : // Nur wenn Doc in LB das Aktive ist
973 : 0 : NavDocInfo* pInfo = pNavigatorWin->GetDocInfo();
974 [ # # ][ # # ]: 0 : if( pInfo && pInfo->IsActive() )
[ # # ]
975 : : {
976 [ # # ][ # # ]: 0 : const SfxStringItem* pStateItem = PTR_CAST( SfxStringItem, pItem );
[ # # ][ # # ]
977 : : DBG_ASSERT( pStateItem, "SfxStringItem erwartet");
978 [ # # ]: 0 : String aPageName = pStateItem->GetValue();
979 : :
980 [ # # ][ # # ]: 0 : if( !pNavigatorWin->maTlbObjects.HasSelectedChildren( aPageName ) )
981 : : {
982 [ # # ]: 0 : if( pNavigatorWin->maTlbObjects.GetSelectionMode() == MULTIPLE_SELECTION )
983 : : {
984 : : // Weil sonst immer dazuselektiert wird
985 [ # # ]: 0 : pNavigatorWin->maTlbObjects.SelectAll( sal_False );
986 : : }
987 [ # # ]: 0 : pNavigatorWin->maTlbObjects.SelectEntry( aPageName );
988 [ # # ]: 0 : }
989 : : }
990 : : }
991 : 0 : }
992 : :
993 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|