LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/dlg - tpaction.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 403 0.0 %
Date: 2012-12-27 Functions: 0 28 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             : 
      21             : #ifdef SD_DLLIMPLEMENTATION
      22             : #undef SD_DLLIMPLEMENTATION
      23             : #endif
      24             : 
      25             : #include <svx/svxids.hrc>
      26             : #include <com/sun/star/presentation/AnimationEffect.hpp>
      27             : #include <com/sun/star/presentation/ClickAction.hpp>
      28             : #include <com/sun/star/presentation/AnimationSpeed.hpp>
      29             : #include <com/sun/star/embed/VerbDescriptor.hpp>
      30             : #include <com/sun/star/embed/EmbedStates.hpp>
      31             : #include <com/sun/star/uri/XUriReferenceFactory.hpp>
      32             : #include <com/sun/star/uri/XVndSunStarScriptUrl.hpp>
      33             : #include <comphelper/processfactory.hxx>
      34             : #include <comphelper/string.hxx>
      35             : #include <com/sun/star/embed/VerbAttributes.hpp>
      36             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      37             : 
      38             : #include "sdattr.hxx"
      39             : #include <sfx2/sfxresid.hxx>
      40             : 
      41             : #include <vcl/waitobj.hxx>
      42             : #include <osl/file.hxx>
      43             : #include <sfx2/app.hxx>
      44             : #include <unotools/pathoptions.hxx>
      45             : #include <svx/svdpagv.hxx>
      46             : #include <unotools/localfilehelper.hxx>
      47             : #include <svl/aeitem.hxx>
      48             : #include <editeng/colritem.hxx>
      49             : #include <svx/svdoole2.hxx>
      50             : #include <sfx2/docfile.hxx>
      51             : #include <sot/storage.hxx>
      52             : #include <basic/sbmeth.hxx>
      53             : #include <basic/sbmod.hxx>
      54             : #include <basic/sbstar.hxx>
      55             : #include <svx/xtable.hxx>
      56             : #include <vcl/svapp.hxx>
      57             : #include <vcl/mnemonic.hxx>
      58             : #include <svl/urihelper.hxx>
      59             : #include <sfx2/filedlghelper.hxx>
      60             : #include <svx/drawitem.hxx>
      61             : #include "View.hxx"
      62             : #include "sdresid.hxx"
      63             : #include "tpaction.hxx"
      64             : #include "tpaction.hrc"
      65             : #include "strmname.h"
      66             : #include "ViewShell.hxx"
      67             : #include "drawdoc.hxx"
      68             : #include "DrawDocShell.hxx"
      69             : #include "strings.hrc"
      70             : #include "res_bmp.hrc"
      71             : #include "filedlg.hxx"
      72             : 
      73             : #include <algorithm>
      74             : 
      75             : using namespace ::com::sun::star;
      76             : using namespace com::sun::star::uno;
      77             : using namespace com::sun::star::lang;
      78             : 
      79             : #define DOCUMENT_TOKEN (sal_Unicode('#'))
      80             : 
      81             : /*************************************************************************
      82             : |*
      83             : |* Konstruktor des Tab-Dialogs: Fuegt die Seiten zum Dialog hinzu
      84             : |*
      85             : \************************************************************************/
      86             : 
      87           0 : SdActionDlg::SdActionDlg (
      88             :     ::Window* pParent, const SfxItemSet* pAttr, ::sd::View* pView ) :
      89             :         SfxSingleTabDialog  ( pParent, *pAttr, TP_ANIMATION_ACTION ),
      90           0 :         rOutAttrs           ( *pAttr )
      91             : {
      92             :     // FreeResource();
      93           0 :     SfxTabPage* pNewPage = SdTPAction::Create( this, rOutAttrs );
      94             :     DBG_ASSERT( pNewPage, "Seite konnte nicht erzeugt werden");
      95             : 
      96             :     // Ehemals in PageCreated
      97           0 :     ( (SdTPAction*) pNewPage )->SetView( pView );
      98           0 :     ( (SdTPAction*) pNewPage )->Construct();
      99             : 
     100           0 :     SetTabPage( pNewPage );
     101             : 
     102           0 :     String aStr( pNewPage->GetText() );
     103           0 :     if( aStr.Len() )
     104           0 :         SetText( aStr );
     105           0 : }
     106             : 
     107             : 
     108             : /*************************************************************************
     109             : |*
     110             : |*  Action-TabPage
     111             : |*
     112             : \************************************************************************/
     113             : 
     114           0 : SdTPAction::SdTPAction( Window* pWindow, const SfxItemSet& rInAttrs ) :
     115             :         SfxTabPage      ( pWindow, SdResId( TP_ANIMATION ), rInAttrs ),
     116             : 
     117             :         aFtAction       ( this, SdResId( FT_ACTION ) ),
     118             :         aLbAction       ( this, SdResId( LB_ACTION ) ),
     119             :         aFtTree         ( this, SdResId( FT_TREE ) ),
     120             :         aLbTree         ( this, SdResId( LB_TREE ) ),
     121             :         aLbTreeDocument ( this, SdResId( LB_TREE_DOCUMENT ) ),
     122             :         aLbOLEAction    ( this, SdResId( LB_OLE_ACTION ) ),
     123             :         aFlSeparator    ( this, SdResId( FL_SEPARATOR ) ),
     124             :         aEdtSound       ( this, SdResId( EDT_SOUND ) ),
     125             :         aEdtBookmark    ( this, SdResId( EDT_BOOKMARK ) ),
     126             :         aEdtDocument    ( this, SdResId( EDT_DOCUMENT ) ),
     127             :         aEdtProgram     ( this, SdResId( EDT_PROGRAM ) ),
     128             :         aEdtMacro       ( this, SdResId( EDT_MACRO ) ),
     129             :         aBtnSearch      ( this, SdResId( BTN_SEARCH ) ),
     130             :         aBtnSeek        ( this, SdResId( BTN_SEEK ) ),
     131             : 
     132             :         rOutAttrs       ( rInAttrs ),
     133             :         mpView          ( NULL ),
     134             :         mpDoc           ( NULL ),
     135           0 :         bTreeUpdated    ( sal_False )
     136             : {
     137           0 :     aEdtSound.SetAccessibleName(String(SdResId(STR_PATHNAME)));
     138           0 :     aBtnSeek.SetAccessibleRelationMemberOf( &aFlSeparator );
     139             : 
     140           0 :     FreeResource();
     141             : 
     142           0 :     aBtnSearch.SetClickHdl( LINK( this, SdTPAction, ClickSearchHdl ) );
     143           0 :     aBtnSeek.SetClickHdl( LINK( this, SdTPAction, ClickSearchHdl ) );
     144             : 
     145             :     // diese Page braucht ExchangeSupport
     146           0 :     SetExchangeSupport();
     147             : 
     148           0 :     aLbAction.SetSelectHdl( LINK( this, SdTPAction, ClickActionHdl ) );
     149           0 :     aLbTree.SetSelectHdl( LINK( this, SdTPAction, SelectTreeHdl ) );
     150           0 :     aEdtDocument.SetLoseFocusHdl( LINK( this, SdTPAction, CheckFileHdl ) );
     151           0 :     aEdtMacro.SetLoseFocusHdl( LINK( this, SdTPAction, CheckFileHdl ) );
     152             : 
     153             :     // Controls enablen
     154           0 :     aFtAction.Show();
     155           0 :     aLbAction.Show();
     156             : 
     157           0 :     ClickActionHdl( this );
     158           0 : }
     159             : 
     160             : // -----------------------------------------------------------------------
     161             : 
     162           0 : SdTPAction::~SdTPAction()
     163             : {
     164           0 : }
     165             : 
     166             : // -----------------------------------------------------------------------
     167             : 
     168           0 : void SdTPAction::SetView( const ::sd::View* pSdView )
     169             : {
     170           0 :     mpView = pSdView;
     171             : 
     172             :     // Holen der ColorTable und Fuellen der ListBox
     173           0 :     ::sd::DrawDocShell* pDocSh = static_cast<const ::sd::View*>(mpView)->GetDocSh();
     174           0 :     if( pDocSh && pDocSh->GetViewShell() )
     175             :     {
     176           0 :         mpDoc = pDocSh->GetDoc();
     177           0 :         SfxViewFrame* pFrame = pDocSh->GetViewShell()->GetViewFrame();
     178           0 :         aLbTree.SetViewFrame( pFrame );
     179           0 :         aLbTreeDocument.SetViewFrame( pFrame );
     180             : 
     181           0 :         SvxColorListItem aItem( *(const SvxColorListItem*)( pDocSh->GetItem( SID_COLOR_TABLE ) ) );
     182           0 :         pColList = aItem.GetColorList();
     183           0 :         DBG_ASSERT( pColList.is(), "Keine Farbtabelle vorhanden!" );
     184             :     }
     185             :     else
     186             :     {
     187             :         OSL_FAIL("sd::SdTPAction::SetView(), no docshell or viewshell?");
     188             :     }
     189           0 : }
     190             : 
     191             : // -----------------------------------------------------------------------
     192             : 
     193           0 : void SdTPAction::Construct()
     194             : {
     195             :     // OLE-Actionlistbox auffuellen
     196           0 :     SdrOle2Obj* pOleObj = NULL;
     197           0 :     SdrGrafObj* pGrafObj = NULL;
     198           0 :     sal_Bool        bOLEAction = sal_False;
     199             : 
     200           0 :     if ( mpView->AreObjectsMarked() )
     201             :     {
     202           0 :         const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
     203             :         SdrObject* pObj;
     204             : 
     205           0 :         if (rMarkList.GetMarkCount() == 1)
     206             :         {
     207           0 :             SdrMark* pMark = rMarkList.GetMark(0);
     208           0 :             pObj = pMark->GetMarkedSdrObj();
     209             : 
     210           0 :             sal_uInt32 nInv = pObj->GetObjInventor();
     211           0 :             sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
     212             : 
     213           0 :             if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2)
     214             :             {
     215           0 :                 pOleObj = (SdrOle2Obj*) pObj;
     216             :             }
     217           0 :             else if (nInv == SdrInventor && nSdrObjKind == OBJ_GRAF)
     218             :             {
     219           0 :                 pGrafObj = (SdrGrafObj*) pObj;
     220             :             }
     221             :         }
     222             :     }
     223           0 :     if( pGrafObj )
     224             :     {
     225           0 :         bOLEAction = sal_True;
     226             : 
     227           0 :         aVerbVector.push_back( 0 );
     228           0 :         aLbOLEAction.InsertEntry( MnemonicGenerator::EraseAllMnemonicChars( String( SdResId( STR_EDIT_OBJ ) ) ) );
     229             :     }
     230           0 :     else if( pOleObj )
     231             :     {
     232           0 :         uno::Reference < embed::XEmbeddedObject > xObj = pOleObj->GetObjRef();
     233           0 :         if ( xObj.is() )
     234             :         {
     235           0 :             bOLEAction = sal_True;
     236           0 :             uno::Sequence < embed::VerbDescriptor > aVerbs;
     237             :             try
     238             :             {
     239           0 :                 aVerbs = xObj->getSupportedVerbs();
     240             :             }
     241           0 :             catch ( embed::NeedsRunningStateException& )
     242             :             {
     243           0 :                 xObj->changeState( embed::EmbedStates::RUNNING );
     244           0 :                 aVerbs = xObj->getSupportedVerbs();
     245             :             }
     246             : 
     247           0 :             for( sal_Int32 i=0; i<aVerbs.getLength(); i++ )
     248             :             {
     249           0 :                 embed::VerbDescriptor aVerb = aVerbs[i];
     250           0 :                 if( aVerb.VerbAttributes & embed::VerbAttributes::MS_VERBATTR_ONCONTAINERMENU )
     251             :                 {
     252           0 :                     String aTmp( aVerb.VerbName );
     253           0 :                     aVerbVector.push_back( aVerb.VerbID );
     254           0 :                     aLbOLEAction.InsertEntry( MnemonicGenerator::EraseAllMnemonicChars( aTmp ) );
     255             :                 }
     256           0 :             }
     257           0 :         }
     258             :     }
     259             : 
     260           0 :     maCurrentActions.push_back( presentation::ClickAction_NONE );
     261           0 :     maCurrentActions.push_back( presentation::ClickAction_PREVPAGE );
     262           0 :     maCurrentActions.push_back( presentation::ClickAction_NEXTPAGE );
     263           0 :     maCurrentActions.push_back( presentation::ClickAction_FIRSTPAGE );
     264           0 :     maCurrentActions.push_back( presentation::ClickAction_LASTPAGE );
     265           0 :     maCurrentActions.push_back( presentation::ClickAction_BOOKMARK );
     266           0 :     maCurrentActions.push_back( presentation::ClickAction_DOCUMENT );
     267           0 :     maCurrentActions.push_back( presentation::ClickAction_SOUND );
     268           0 :     if( bOLEAction && aLbOLEAction.GetEntryCount() )
     269           0 :         maCurrentActions.push_back( presentation::ClickAction_VERB );
     270           0 :     maCurrentActions.push_back( presentation::ClickAction_PROGRAM );
     271           0 :     maCurrentActions.push_back( presentation::ClickAction_MACRO );
     272           0 :     maCurrentActions.push_back( presentation::ClickAction_STOPPRESENTATION );
     273             : 
     274             :     // Action-Listbox fuellen
     275           0 :     for (size_t nAction = 0, n = maCurrentActions.size(); nAction < n; nAction++)
     276             :     {
     277           0 :         sal_uInt16 nRId = GetClickActionSdResId( maCurrentActions[ nAction ] );
     278           0 :         aLbAction.InsertEntry( String( SdResId( nRId ) ) );
     279             :     }
     280             : 
     281           0 : }
     282             : 
     283             : // -----------------------------------------------------------------------
     284             : 
     285           0 : sal_Bool SdTPAction::FillItemSet( SfxItemSet& rAttrs )
     286             : {
     287           0 :     sal_Bool bModified = sal_False;
     288           0 :     presentation::ClickAction eCA = presentation::ClickAction_NONE;
     289             : 
     290           0 :     if( aLbAction.GetSelectEntryCount() )
     291           0 :         eCA = GetActualClickAction();
     292             : 
     293           0 :     if( aLbAction.GetSavedValue() != aLbAction.GetSelectEntryPos() )
     294             :     {
     295           0 :         rAttrs.Put( SfxAllEnumItem( ATTR_ACTION, (sal_uInt16)eCA ) );
     296           0 :         bModified = sal_True;
     297             :     }
     298             :     else
     299           0 :         rAttrs.InvalidateItem( ATTR_ACTION );
     300             : 
     301           0 :     String aFileName = GetEditText( sal_True );
     302           0 :     if( aFileName.Len() == 0 )
     303           0 :         rAttrs.InvalidateItem( ATTR_ACTION_FILENAME );
     304             :     else
     305             :     {
     306           0 :         if( mpDoc && mpDoc->GetDocSh() && mpDoc->GetDocSh()->GetMedium() )
     307             :         {
     308           0 :             String aBaseURL = mpDoc->GetDocSh()->GetMedium()->GetBaseURL();
     309           0 :             if( eCA == presentation::ClickAction_SOUND ||
     310             :                 eCA == presentation::ClickAction_DOCUMENT ||
     311             :                 eCA == presentation::ClickAction_PROGRAM )
     312             :                 aFileName = ::URIHelper::SmartRel2Abs( INetURLObject(aBaseURL), aFileName, URIHelper::GetMaybeFileHdl(), true, false,
     313             :                                                         INetURLObject::WAS_ENCODED,
     314           0 :                                                         INetURLObject::DECODE_UNAMBIGUOUS );
     315             : 
     316           0 :             rAttrs.Put( SfxStringItem( ATTR_ACTION_FILENAME, aFileName ) );
     317           0 :             bModified = sal_True;
     318             :         }
     319             :         else
     320             :         {
     321             :             OSL_FAIL("sd::SdTPAction::FillItemSet(), I need a medium!");
     322             :         }
     323             :     }
     324             : 
     325           0 :     return( bModified );
     326             : }
     327             : 
     328             : //------------------------------------------------------------------------
     329             : 
     330           0 : void SdTPAction::Reset( const SfxItemSet& rAttrs )
     331             : {
     332           0 :     presentation::ClickAction eCA = presentation::ClickAction_NONE;
     333           0 :     String      aFileName;
     334             : 
     335             :     // aLbAction
     336           0 :     if( rAttrs.GetItemState( ATTR_ACTION ) != SFX_ITEM_DONTCARE )
     337             :     {
     338             :         eCA = (presentation::ClickAction) ( ( const SfxAllEnumItem& ) rAttrs.
     339           0 :                     Get( ATTR_ACTION ) ).GetValue();
     340           0 :         SetActualClickAction( eCA );
     341             :     }
     342             :     else
     343           0 :         aLbAction.SetNoSelection();
     344             : 
     345             :     // aEdtSound
     346           0 :     if( rAttrs.GetItemState( ATTR_ACTION_FILENAME ) != SFX_ITEM_DONTCARE )
     347             :     {
     348           0 :             aFileName = ( ( const SfxStringItem& ) rAttrs.Get( ATTR_ACTION_FILENAME ) ).GetValue();
     349           0 :             SetEditText( aFileName );
     350             :     }
     351             : 
     352           0 :     switch( eCA )
     353             :     {
     354             :         case presentation::ClickAction_BOOKMARK:
     355             :         {
     356           0 :             if( !aLbTree.SelectEntry( aFileName ) )
     357           0 :                 aLbTree.SelectAll( sal_False );
     358             :         }
     359           0 :         break;
     360             : 
     361             :         case presentation::ClickAction_DOCUMENT:
     362             :         {
     363           0 :             if( comphelper::string::getTokenCount(aFileName, DOCUMENT_TOKEN) == 2 )
     364           0 :                 aLbTreeDocument.SelectEntry( aFileName.GetToken( 1, DOCUMENT_TOKEN ) );
     365             :         }
     366           0 :         break;
     367             : 
     368             :         default:
     369           0 :         break;
     370             :     }
     371           0 :     ClickActionHdl( this );
     372             : 
     373           0 :     aLbAction.SaveValue();
     374           0 :     aEdtSound.SaveValue();
     375           0 : }
     376             : 
     377             : // -----------------------------------------------------------------------
     378             : 
     379           0 : void SdTPAction::ActivatePage( const SfxItemSet& )
     380             : {
     381           0 : }
     382             : 
     383             : // -----------------------------------------------------------------------
     384             : 
     385           0 : int SdTPAction::DeactivatePage( SfxItemSet* pPageSet )
     386             : {
     387           0 :     if( pPageSet )
     388           0 :         FillItemSet( *pPageSet );
     389             : 
     390           0 :     return( LEAVE_PAGE );
     391             : }
     392             : 
     393             : // -----------------------------------------------------------------------
     394             : 
     395           0 : SfxTabPage* SdTPAction::Create( Window* pWindow,
     396             :                 const SfxItemSet& rAttrs )
     397             : {
     398           0 :     return( new SdTPAction( pWindow, rAttrs ) );
     399             : }
     400             : 
     401             : //------------------------------------------------------------------------
     402             : 
     403           0 : void SdTPAction::UpdateTree()
     404             : {
     405           0 :     if( !bTreeUpdated && mpDoc && mpDoc->GetDocSh() && mpDoc->GetDocSh()->GetMedium() )
     406             :     {
     407             :         //aLbTree.Clear();
     408           0 :         aLbTree.Fill( mpDoc, sal_True, mpDoc->GetDocSh()->GetMedium()->GetName() );
     409           0 :         bTreeUpdated = sal_True;
     410             :     }
     411           0 : }
     412             : 
     413             : //------------------------------------------------------------------------
     414             : 
     415           0 : void SdTPAction::OpenFileDialog()
     416             : {
     417             :     // Soundpreview nur fuer Interaktionen mit Sound
     418           0 :     presentation::ClickAction eCA = GetActualClickAction();
     419           0 :     sal_Bool bSound = ( eCA == presentation::ClickAction_SOUND );
     420           0 :     sal_Bool bPage = ( eCA == presentation::ClickAction_BOOKMARK );
     421             :     sal_Bool bDocument = ( eCA == presentation::ClickAction_DOCUMENT ||
     422           0 :                        eCA == presentation::ClickAction_PROGRAM );
     423           0 :     sal_Bool bMacro = ( eCA == presentation::ClickAction_MACRO );
     424             : 
     425           0 :     if( bPage )
     426             :     {
     427             :         // Es wird in der TreeLB nach dem eingegebenen Objekt gesucht
     428           0 :         aLbTree.SelectEntry( GetEditText() );
     429             :     }
     430             :     else
     431             :     {
     432           0 :         String aFile( GetEditText() );
     433             : 
     434           0 :         if (bSound)
     435             :         {
     436           0 :             SdOpenSoundFileDialog   aFileDialog;
     437             : 
     438           0 :             if( !aFile.Len() )
     439           0 :                 aFile = SvtPathOptions().GetGraphicPath();
     440             : 
     441           0 :             aFileDialog.SetPath( aFile );
     442             : 
     443           0 :             if( aFileDialog.Execute() == ERRCODE_NONE )
     444             :             {
     445           0 :                 aFile = aFileDialog.GetPath();
     446           0 :                 SetEditText( aFile );
     447           0 :             }
     448             :         }
     449           0 :         else if (bMacro)
     450             :         {
     451           0 :             Window* pOldWin = Application::GetDefDialogParent();
     452           0 :             Application::SetDefDialogParent( this );
     453             : 
     454             :             // choose macro dialog
     455           0 :             ::rtl::OUString aScriptURL = SfxApplication::ChooseScript();
     456             : 
     457           0 :             if ( !aScriptURL.isEmpty() )
     458             :             {
     459           0 :                 SetEditText( aScriptURL );
     460             :             }
     461             : 
     462           0 :             Application::SetDefDialogParent( pOldWin );
     463             :         }
     464             :         else
     465             :         {
     466             :             sfx2::FileDialogHelper aFileDialog(
     467           0 :                 ui::dialogs::TemplateDescription::FILEOPEN_READONLY_VERSION, 0);
     468             : 
     469           0 :             if (bDocument && !aFile.Len())
     470           0 :                 aFile = SvtPathOptions().GetWorkPath();
     471             : 
     472           0 :             aFileDialog.SetDisplayDirectory( aFile );
     473             : 
     474             :             // The following is a workarround for #i4306#:
     475             :             // The addition of the implicitely existing "all files"
     476             :             // filter makes the (Windows system) open file dialog follow
     477             :             // links on the desktop to directories.
     478             :             aFileDialog.AddFilter (
     479             :                 String (SfxResId (STR_SFX_FILTERNAME_ALL)),
     480           0 :                 rtl::OUString("*.*"));
     481             : 
     482             : 
     483           0 :             if( aFileDialog.Execute() == ERRCODE_NONE )
     484             :             {
     485           0 :                 aFile = aFileDialog.GetPath();
     486           0 :                 SetEditText( aFile );
     487             :             }
     488           0 :             if( bDocument )
     489           0 :                 CheckFileHdl( NULL );
     490           0 :         }
     491             :     }
     492           0 : }
     493             : 
     494             : //------------------------------------------------------------------------
     495             : 
     496           0 : IMPL_LINK_NOARG(SdTPAction, ClickSearchHdl)
     497             : {
     498           0 :     OpenFileDialog();
     499             : 
     500           0 :     return( 0L );
     501             : }
     502             : 
     503             : //------------------------------------------------------------------------
     504             : 
     505           0 : IMPL_LINK_NOARG(SdTPAction, ClickActionHdl)
     506             : {
     507           0 :     presentation::ClickAction eCA = GetActualClickAction();
     508             : 
     509             :     // hide controls we don't need
     510           0 :     switch( eCA )
     511             :     {
     512             :         case presentation::ClickAction_NONE:
     513             :         case presentation::ClickAction_INVISIBLE:
     514             :         case presentation::ClickAction_PREVPAGE:
     515             :         case presentation::ClickAction_NEXTPAGE:
     516             :         case presentation::ClickAction_FIRSTPAGE:
     517             :         case presentation::ClickAction_LASTPAGE:
     518             :         case presentation::ClickAction_STOPPRESENTATION:
     519             :         default:
     520           0 :             aFtTree.Hide();
     521           0 :             aLbTree.Hide();
     522           0 :             aLbTreeDocument.Hide();
     523           0 :             aLbOLEAction.Hide();
     524             : 
     525           0 :             aFlSeparator.Hide();
     526           0 :             aEdtSound.Hide();
     527           0 :             aEdtBookmark.Hide();
     528           0 :             aEdtDocument.Hide();
     529           0 :             aEdtProgram.Hide();
     530           0 :             aEdtMacro.Hide();
     531           0 :             aBtnSearch.Hide();
     532           0 :             aBtnSeek.Hide();
     533           0 :             break;
     534             : 
     535             :         case presentation::ClickAction_SOUND:
     536             :         case presentation::ClickAction_PROGRAM:
     537             :         case presentation::ClickAction_MACRO:
     538           0 :             aFtTree.Hide();
     539           0 :             aLbTree.Hide();
     540           0 :             aLbTreeDocument.Hide();
     541           0 :             aLbOLEAction.Hide();
     542             : 
     543           0 :             aEdtDocument.Hide();
     544             : 
     545           0 :             if( eCA == presentation::ClickAction_MACRO )
     546             :             {
     547           0 :                 aEdtSound.Hide();
     548           0 :                 aEdtProgram.Hide();
     549             :             }
     550           0 :             else if( eCA == presentation::ClickAction_PROGRAM )
     551             :             {
     552           0 :                 aEdtSound.Hide();
     553           0 :                 aEdtMacro.Hide();
     554             :             }
     555           0 :             else if( eCA == presentation::ClickAction_SOUND )
     556             :             {
     557           0 :                 aEdtProgram.Hide();
     558           0 :                 aEdtMacro.Hide();
     559             :             }
     560             : 
     561           0 :             aBtnSeek.Hide();
     562           0 :             break;
     563             : 
     564             : 
     565             :         case presentation::ClickAction_DOCUMENT:
     566           0 :             aLbTree.Hide();
     567           0 :             aLbOLEAction.Hide();
     568             : 
     569           0 :             aEdtSound.Hide();
     570           0 :             aEdtProgram.Hide();
     571           0 :             aEdtMacro.Hide();
     572           0 :             aEdtBookmark.Hide();
     573           0 :             aBtnSeek.Hide();
     574           0 :             break;
     575             : 
     576             :         case presentation::ClickAction_BOOKMARK:
     577           0 :             aLbTreeDocument.Hide();
     578           0 :             aLbOLEAction.Hide();
     579           0 :             aEdtSound.Hide();
     580           0 :             aEdtDocument.Hide();
     581           0 :             aEdtProgram.Hide();
     582           0 :             aEdtMacro.Hide();
     583           0 :             aBtnSearch.Hide();
     584           0 :             break;
     585             : 
     586             :         case presentation::ClickAction_VERB:
     587           0 :             aLbTree.Hide();
     588           0 :             aEdtDocument.Hide();
     589           0 :             aEdtProgram.Hide();
     590           0 :             aEdtBookmark.Hide();
     591           0 :             aEdtMacro.Hide();
     592           0 :             aBtnSearch.Hide();
     593           0 :             aFlSeparator.Hide();
     594           0 :             aEdtSound.Hide();
     595           0 :             aBtnSeek.Hide();
     596           0 :             break;
     597             :     }
     598             : 
     599             :     // show controls we do need
     600           0 :     switch( eCA )
     601             :     {
     602             :         case presentation::ClickAction_NONE:
     603             :         case presentation::ClickAction_INVISIBLE:
     604             :         case presentation::ClickAction_PREVPAGE:
     605             :         case presentation::ClickAction_NEXTPAGE:
     606             :         case presentation::ClickAction_FIRSTPAGE:
     607             :         case presentation::ClickAction_LASTPAGE:
     608             :         case presentation::ClickAction_STOPPRESENTATION:
     609             :             // none
     610           0 :             break;
     611             : 
     612             :         case presentation::ClickAction_SOUND:
     613           0 :             aFlSeparator.Show();
     614           0 :             aEdtSound.Show();
     615           0 :             aEdtSound.Enable();
     616           0 :             aBtnSearch.Show();
     617           0 :             aBtnSearch.Enable();
     618           0 :             aFlSeparator.SetText( String( SdResId( STR_EFFECTDLG_SOUND ) ) );
     619           0 :             break;
     620             : 
     621             :         case presentation::ClickAction_PROGRAM:
     622             :         case presentation::ClickAction_MACRO:
     623           0 :             aFlSeparator.Show();
     624           0 :             aBtnSearch.Show();
     625           0 :             aBtnSearch.Enable();
     626           0 :             if( eCA == presentation::ClickAction_MACRO )
     627             :             {
     628           0 :                 aEdtMacro.Show();
     629           0 :                 aFlSeparator.SetText( String( SdResId( STR_EFFECTDLG_MACRO ) ) );
     630             :             }
     631             :             else
     632             :             {
     633           0 :                 aEdtProgram.Show();
     634           0 :                 aFlSeparator.SetText( String( SdResId( STR_EFFECTDLG_PROGRAM ) ) );
     635             :             }
     636           0 :             break;
     637             : 
     638             :         case presentation::ClickAction_DOCUMENT:
     639           0 :             aFtTree.Show();
     640           0 :             aLbTreeDocument.Show();
     641             : 
     642           0 :             aFlSeparator.Show();
     643           0 :             aEdtDocument.Show();
     644           0 :             aBtnSearch.Show();
     645           0 :             aBtnSearch.Enable();
     646             : 
     647           0 :             aFtTree.SetText( String( SdResId( STR_EFFECTDLG_JUMP ) ) );
     648           0 :             aFlSeparator.SetText( String( SdResId( STR_EFFECTDLG_DOCUMENT ) ) );
     649             : 
     650           0 :             CheckFileHdl( NULL );
     651           0 :             break;
     652             : 
     653             :         case presentation::ClickAction_VERB:
     654           0 :             aFtTree.Show();
     655           0 :             aLbOLEAction.Show();
     656             : 
     657           0 :             aFtTree.SetText( String( SdResId( STR_EFFECTDLG_ACTION ) ) );
     658           0 :             break;
     659             : 
     660             :         case presentation::ClickAction_BOOKMARK:
     661           0 :             UpdateTree();
     662             : 
     663           0 :             aFtTree.Show();
     664           0 :             aLbTree.Show();
     665             : 
     666           0 :             aFlSeparator.Show();
     667           0 :             aEdtBookmark.Show();
     668           0 :             aBtnSeek.Show();
     669             : 
     670           0 :             aFtTree.SetText( String( SdResId( STR_EFFECTDLG_JUMP ) ) );
     671           0 :             aFlSeparator.SetText( String( SdResId( STR_EFFECTDLG_PAGE_OBJECT ) ) );
     672           0 :             break;
     673             :         default:
     674           0 :             break;
     675             :     }
     676             : 
     677           0 :     return( 0L );
     678             : }
     679             : 
     680             : //------------------------------------------------------------------------
     681             : 
     682           0 : IMPL_LINK_NOARG(SdTPAction, SelectTreeHdl)
     683             : {
     684           0 :     aEdtBookmark.SetText( aLbTree.GetSelectEntry() );
     685           0 :     return( 0L );
     686             : }
     687             : 
     688             : //------------------------------------------------------------------------
     689             : 
     690           0 : IMPL_LINK_NOARG(SdTPAction, CheckFileHdl)
     691             : {
     692           0 :     String aFile( GetEditText() );
     693             : 
     694           0 :     if( aFile != aLastFile )
     695             :     {
     696             :         // Ueberpruefen, ob es eine gueltige Draw-Datei ist
     697             :         SfxMedium aMedium( aFile,
     698           0 :                     STREAM_READ | STREAM_NOCREATE );
     699             : 
     700           0 :         if( aMedium.IsStorage() )
     701             :         {
     702           0 :             WaitObject aWait( GetParentDialog() );
     703             : 
     704             :             // ist es eine Draw-Datei?
     705             :             // mit READ oeffnen, sonst schreiben die Storages evtl. in die Datei!
     706           0 :             uno::Reference < embed::XStorage > xStorage = aMedium.GetStorage();
     707             :             DBG_ASSERT( xStorage.is(), "Kein Storage!" );
     708             : 
     709           0 :             uno::Reference < container::XNameAccess > xAccess( xStorage, uno::UNO_QUERY );
     710           0 :             if( xAccess.is() &&
     711           0 :                 ( xAccess->hasByName( pStarDrawXMLContent ) ||
     712           0 :                 xAccess->hasByName( pStarDrawOldXMLContent ) ) )
     713             :             {
     714           0 :                 SdDrawDocument* pBookmarkDoc = mpDoc->OpenBookmarkDoc( aFile );
     715           0 :                 if( pBookmarkDoc )
     716             :                 {
     717           0 :                     aLastFile = aFile;
     718             : 
     719           0 :                     aLbTreeDocument.Clear();
     720           0 :                     aLbTreeDocument.Fill( pBookmarkDoc, sal_True, aFile );
     721           0 :                     mpDoc->CloseBookmarkDoc();
     722           0 :                     aLbTreeDocument.Show();
     723             :                 }
     724             :                 else
     725           0 :                     aLbTreeDocument.Hide();
     726             :             }
     727             :             else
     728           0 :                 aLbTreeDocument.Hide();
     729             : 
     730             :         }
     731             :         else
     732           0 :             aLbTreeDocument.Hide();
     733             :     }
     734             : 
     735           0 :     return( 0L );
     736             : }
     737             : 
     738             : //------------------------------------------------------------------------
     739             : 
     740           0 : presentation::ClickAction SdTPAction::GetActualClickAction()
     741             : {
     742           0 :     presentation::ClickAction eCA = presentation::ClickAction_NONE;
     743           0 :     sal_uInt16 nPos = aLbAction.GetSelectEntryPos();
     744             : 
     745           0 :     if (nPos != LISTBOX_ENTRY_NOTFOUND && nPos < maCurrentActions.size())
     746           0 :         eCA = maCurrentActions[ nPos ];
     747           0 :     return( eCA );
     748             : }
     749             : 
     750             : //------------------------------------------------------------------------
     751             : 
     752           0 : void SdTPAction::SetActualClickAction( presentation::ClickAction eCA )
     753             : {
     754             :     std::vector<com::sun::star::presentation::ClickAction>::const_iterator pIter =
     755           0 :             std::find(maCurrentActions.begin(),maCurrentActions.end(),eCA);
     756             : 
     757           0 :     if ( pIter != maCurrentActions.end() )
     758           0 :         aLbAction.SelectEntryPos( pIter-maCurrentActions.begin() );
     759           0 : }
     760             : 
     761             : //------------------------------------------------------------------------
     762             : 
     763           0 : void SdTPAction::SetEditText( String const & rStr )
     764             : {
     765           0 :     presentation::ClickAction   eCA = GetActualClickAction();
     766           0 :     String                      aText(rStr);
     767             : 
     768             :     // possibly convert URI back to system path
     769           0 :     switch( eCA )
     770             :     {
     771             :         case presentation::ClickAction_DOCUMENT:
     772           0 :             if( comphelper::string::getTokenCount(rStr, DOCUMENT_TOKEN) == 2 )
     773           0 :                 aText = rStr.GetToken( 0, DOCUMENT_TOKEN );
     774             : 
     775             :             // fallthrough inteded
     776             :         case presentation::ClickAction_SOUND:
     777             :         case presentation::ClickAction_PROGRAM:
     778             :             {
     779           0 :                 INetURLObject aURL( aText );
     780             : 
     781             :                 // try to convert to system path
     782           0 :                 String aTmpStr(aURL.getFSysPath(INetURLObject::FSYS_DETECT));
     783             : 
     784           0 :                 if( aTmpStr.Len() )
     785           0 :                     aText = aTmpStr;    // was a system path
     786             :             }
     787           0 :             break;
     788             :         default:
     789           0 :             break;
     790             :     }
     791             : 
     792             :     // set the string to the corresponding control
     793           0 :     switch( eCA )
     794             :     {
     795             :         case presentation::ClickAction_SOUND:
     796           0 :             aEdtSound.SetText(aText );
     797           0 :             break;
     798             :         case presentation::ClickAction_VERB:
     799             :             {
     800           0 :                 ::std::vector< long >::iterator aFound( ::std::find( aVerbVector.begin(), aVerbVector.end(), rStr.ToInt32() ) );
     801           0 :                 if( aFound != aVerbVector.end() )
     802           0 :                     aLbOLEAction.SelectEntryPos( static_cast< short >( aFound - aVerbVector.begin() ) );
     803             :             }
     804           0 :             break;
     805             :         case presentation::ClickAction_PROGRAM:
     806           0 :             aEdtProgram.SetText( aText );
     807           0 :             break;
     808             :         case presentation::ClickAction_MACRO:
     809             :         {
     810           0 :             aEdtMacro.SetText( aText );
     811             :         }
     812           0 :             break;
     813             :         case presentation::ClickAction_DOCUMENT:
     814           0 :             aEdtDocument.SetText( aText );
     815           0 :             break;
     816             :         case presentation::ClickAction_BOOKMARK:
     817           0 :             aEdtBookmark.SetText( aText );
     818           0 :             break;
     819             :         default:
     820           0 :             break;
     821           0 :     }
     822           0 : }
     823             : 
     824             : //------------------------------------------------------------------------
     825             : 
     826           0 : String SdTPAction::GetEditText( sal_Bool bFullDocDestination )
     827             : {
     828           0 :     String aStr;
     829           0 :     presentation::ClickAction eCA = GetActualClickAction();
     830             : 
     831           0 :     switch( eCA )
     832             :     {
     833             :         case presentation::ClickAction_SOUND:
     834           0 :             aStr = aEdtSound.GetText();
     835           0 :             break;
     836             :         case presentation::ClickAction_VERB:
     837             :             {
     838           0 :                 const sal_uInt16 nPos = aLbOLEAction.GetSelectEntryPos();
     839           0 :                 if( nPos < aVerbVector.size() )
     840           0 :                     aStr = UniString::CreateFromInt32( aVerbVector[ nPos ] );
     841           0 :                 return aStr;
     842             :             }
     843             :         case presentation::ClickAction_DOCUMENT:
     844           0 :             aStr = aEdtDocument.GetText();
     845           0 :             break;
     846             : 
     847             :         case presentation::ClickAction_PROGRAM:
     848           0 :             aStr = aEdtProgram.GetText();
     849           0 :             break;
     850             : 
     851             :         case presentation::ClickAction_MACRO:
     852             :         {
     853           0 :             return aEdtMacro.GetText();
     854             :         }
     855             : 
     856             :         case presentation::ClickAction_BOOKMARK:
     857           0 :             return( aEdtBookmark.GetText() );
     858             : 
     859             :         default:
     860           0 :             break;
     861             :     }
     862             : 
     863             :     // validate file URI
     864           0 :     INetURLObject aURL( aStr );
     865           0 :     String aBaseURL;
     866           0 :     if( mpDoc && mpDoc->GetDocSh() && mpDoc->GetDocSh()->GetMedium() )
     867           0 :         aBaseURL = mpDoc->GetDocSh()->GetMedium()->GetBaseURL();
     868             : 
     869           0 :     if( aStr.Len() && aURL.GetProtocol() == INET_PROT_NOT_VALID )
     870           0 :         aURL = INetURLObject( ::URIHelper::SmartRel2Abs( INetURLObject(aBaseURL), aStr, URIHelper::GetMaybeFileHdl(), true, false ) );
     871             : 
     872             :     // get adjusted file name
     873           0 :     aStr = aURL.GetMainURL( INetURLObject::NO_DECODE );
     874             : 
     875           0 :     if( bFullDocDestination &&
     876             :         eCA == presentation::ClickAction_DOCUMENT &&
     877           0 :         aLbTreeDocument.Control::IsVisible() &&
     878           0 :         aLbTreeDocument.GetSelectionCount() > 0 )
     879             :     {
     880           0 :         String aTmpStr( aLbTreeDocument.GetSelectEntry() );
     881           0 :         if( aTmpStr.Len() )
     882             :         {
     883           0 :             aStr.Append( DOCUMENT_TOKEN );
     884           0 :             aStr.Append( aTmpStr );
     885           0 :         }
     886             :     }
     887             : 
     888           0 :     return( aStr );
     889             : }
     890             : 
     891             : //------------------------------------------------------------------------
     892             : 
     893           0 : sal_uInt16 SdTPAction::GetClickActionSdResId( presentation::ClickAction eCA )
     894             : {
     895           0 :     switch( eCA )
     896             :     {
     897           0 :         case presentation::ClickAction_NONE:             return STR_CLICK_ACTION_NONE;
     898           0 :         case presentation::ClickAction_PREVPAGE:         return STR_CLICK_ACTION_PREVPAGE;
     899           0 :         case presentation::ClickAction_NEXTPAGE:         return STR_CLICK_ACTION_NEXTPAGE;
     900           0 :         case presentation::ClickAction_FIRSTPAGE:        return STR_CLICK_ACTION_FIRSTPAGE;
     901           0 :         case presentation::ClickAction_LASTPAGE:         return STR_CLICK_ACTION_LASTPAGE;
     902           0 :         case presentation::ClickAction_BOOKMARK:         return STR_CLICK_ACTION_BOOKMARK;
     903           0 :         case presentation::ClickAction_DOCUMENT:         return STR_CLICK_ACTION_DOCUMENT;
     904           0 :         case presentation::ClickAction_PROGRAM:          return STR_CLICK_ACTION_PROGRAM;
     905           0 :         case presentation::ClickAction_MACRO:            return STR_CLICK_ACTION_MACRO;
     906           0 :         case presentation::ClickAction_SOUND:            return STR_CLICK_ACTION_SOUND;
     907           0 :         case presentation::ClickAction_VERB:             return STR_CLICK_ACTION_VERB;
     908           0 :         case presentation::ClickAction_STOPPRESENTATION: return STR_CLICK_ACTION_STOPPRESENTATION;
     909             :         default: OSL_FAIL( "Keine StringResource fuer ClickAction vorhanden!" );
     910             :     }
     911           0 :     return( 0 );
     912           0 : }
     913             : 
     914             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10