LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/dlg - navigatr.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 417 0.0 %
Date: 2012-12-27 Functions: 0 33 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10