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

Generated by: LCOV version 1.10