LCOV - code coverage report
Current view: top level - cui/source/dialogs - insdlg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 405 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 38 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 <com/sun/star/beans/XPropertySet.hpp>
      21             : #include <com/sun/star/beans/PropertyValue.hpp>
      22             : #include <com/sun/star/embed/EmbedStates.hpp>
      23             : #include <com/sun/star/embed/XInsertObjectDialog.hpp>
      24             : #include <com/sun/star/embed/MSOLEObjectSystemCreator.hpp>
      25             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      26             : #include <com/sun/star/lang/XInitialization.hpp>
      27             : #include <com/sun/star/task/InteractionHandler.hpp>
      28             : #include <com/sun/star/ucb/CommandAbortedException.hpp>
      29             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      30             : #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
      31             : #include <com/sun/star/ui/dialogs/FilePicker.hpp>
      32             : #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
      33             : #include <comphelper/processfactory.hxx>
      34             : 
      35             : #include "insdlg.hxx"
      36             : #include <plfilter.hxx>
      37             : #include <dialmgr.hxx>
      38             : #include <svtools/sores.hxx>
      39             : 
      40             : #include <tools/urlobj.hxx>
      41             : #include <tools/debug.hxx>
      42             : #include <svl/urihelper.hxx>
      43             : #include <vcl/button.hxx>
      44             : #include <vcl/fixed.hxx>
      45             : #include <vcl/group.hxx>
      46             : #include <vcl/layout.hxx>
      47             : #include <vcl/lstbox.hxx>
      48             : #include <vcl/svapp.hxx>
      49             : #include <comphelper/classids.hxx>
      50             : #include <sfx2/frmdescr.hxx>
      51             : #include <sfx2/viewsh.hxx>
      52             : #include <sfx2/filedlghelper.hxx>
      53             : #include <svl/ownlist.hxx>
      54             : #include <comphelper/seqstream.hxx>
      55             : 
      56             : #include "cuires.hrc"
      57             : 
      58             : #include <osl/file.hxx>
      59             : 
      60             : #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
      61             : #include <com/sun/star/container/XNameAccess.hpp>
      62             : #include <vcl/settings.hxx>
      63             : 
      64             : using namespace ::com::sun::star;
      65             : using namespace ::com::sun::star::lang;
      66             : using namespace ::com::sun::star::uno;
      67             : using namespace ::com::sun::star::container;
      68             : using namespace ::com::sun::star::ui::dialogs;
      69             : 
      70             : 
      71           0 : static OUString impl_getSvtResString( sal_uInt32 nId )
      72             : {
      73           0 :     OUString aRet;
      74           0 :     ResMgr* pMgr = ResMgr::CreateResMgr( "svt", Application::GetSettings().GetUILanguageTag() );
      75           0 :     if( pMgr )
      76             :     {
      77           0 :         aRet = ResId( nId, *pMgr );
      78           0 :         delete pMgr;
      79             :     }
      80           0 :     return aRet;
      81             : }
      82             : 
      83           0 : bool InsertObjectDialog_Impl::IsCreateNew() const
      84             : {
      85           0 :     return false;
      86             : }
      87             : 
      88           0 : uno::Reference< io::XInputStream > InsertObjectDialog_Impl::GetIconIfIconified( OUString* /*pGraphicMediaType*/ )
      89             : {
      90           0 :     return uno::Reference< io::XInputStream >();
      91             : }
      92             : 
      93           0 : InsertObjectDialog_Impl::InsertObjectDialog_Impl(vcl::Window * pParent, const OUString& rID,
      94             :     const OUString& rUIXMLDescription,
      95             :     const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage)
      96             :     : ModalDialog(pParent, rID, rUIXMLDescription)
      97             :     , m_xStorage( xStorage )
      98           0 :     , aCnt( m_xStorage )
      99             : {
     100           0 : }
     101             : 
     102             : 
     103             : 
     104           0 : IMPL_LINK_NOARG(SvInsertOleDlg, DoubleClickHdl)
     105             : {
     106           0 :     EndDialog( RET_OK );
     107           0 :     return 0;
     108             : }
     109             : 
     110           0 : IMPL_LINK_NOARG(SvInsertOleDlg, BrowseHdl)
     111             : {
     112           0 :     Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
     113             : 
     114           0 :     Reference< XFilePicker3 > xFilePicker = FilePicker::createWithMode(xContext, TemplateDescription::FILEOPEN_SIMPLE);
     115             : 
     116             :     // add filter
     117             :     try
     118             :     {
     119           0 :         xFilePicker->appendFilter(
     120             :              OUString(),
     121             :              OUString( "*.*" )
     122           0 :              );
     123             :     }
     124           0 :     catch( const IllegalArgumentException& )
     125             :     {
     126             :         DBG_ASSERT( false, "caught IllegalArgumentException when registering filter\n" );
     127             :     }
     128             : 
     129           0 :     if( xFilePicker->execute() == ExecutableDialogResults::OK )
     130             :     {
     131           0 :         Sequence< OUString > aPathSeq( xFilePicker->getFiles() );
     132           0 :         INetURLObject aObj( aPathSeq[0] );
     133           0 :         m_pEdFilepath->SetText( aObj.PathToFileName() );
     134             :     }
     135             : 
     136           0 :     return 0;
     137             : }
     138             : 
     139             : 
     140             : 
     141           0 : IMPL_LINK_NOARG(SvInsertOleDlg, RadioHdl)
     142             : {
     143           0 :     if ( m_pRbNewObject->IsChecked() )
     144             :     {
     145           0 :         m_pObjectTypeFrame->Show();
     146           0 :         m_pFileFrame->Hide();
     147             :     }
     148             :     else
     149             :     {
     150           0 :         m_pFileFrame->Show();
     151           0 :         m_pObjectTypeFrame->Hide();
     152             :     }
     153           0 :     return 0;
     154             : }
     155             : 
     156             : 
     157             : 
     158           0 : void SvInsertOleDlg::SelectDefault()
     159             : {
     160           0 :     m_pLbObjecttype->SelectEntryPos(0);
     161           0 : }
     162             : 
     163             : 
     164           0 : SvInsertOleDlg::SvInsertOleDlg
     165             : (
     166             :     vcl::Window* pParent,
     167             :     const Reference < embed::XStorage >& xStorage,
     168             :     const SvObjectServerList* pServers
     169             : )
     170             :     : InsertObjectDialog_Impl( pParent, "InsertOLEObjectDialog", "cui/ui/insertoleobject.ui", xStorage ),
     171           0 :     m_pServers( pServers )
     172             : {
     173           0 :     get(m_pRbNewObject, "createnew");
     174           0 :     get(m_pRbObjectFromfile, "createfromfile");
     175           0 :     get(m_pObjectTypeFrame, "objecttypeframe");
     176           0 :     get(m_pLbObjecttype, "types");
     177           0 :     get(m_pFileFrame, "fileframe");
     178           0 :     get(m_pEdFilepath, "urled");
     179           0 :     get(m_pBtnFilepath, "urlbtn");
     180           0 :     get(m_pCbFilelink, "linktofile");
     181           0 :     m_pLbObjecttype->SetDoubleClickHdl( LINK( this, SvInsertOleDlg, DoubleClickHdl ) );
     182           0 :     m_pBtnFilepath->SetClickHdl( LINK( this, SvInsertOleDlg, BrowseHdl ) );
     183           0 :     Link<> aLink( LINK( this, SvInsertOleDlg, RadioHdl ) );
     184           0 :     m_pRbNewObject->SetClickHdl( aLink );
     185           0 :     m_pRbObjectFromfile->SetClickHdl( aLink );
     186           0 :     m_pRbNewObject->Check( true );
     187           0 :     RadioHdl( NULL );
     188           0 : }
     189             : 
     190           0 : SvInsertOleDlg::~SvInsertOleDlg()
     191             : {
     192           0 :     disposeOnce();
     193           0 : }
     194             : 
     195           0 : void SvInsertOleDlg::dispose()
     196             : {
     197           0 :     m_pRbNewObject.clear();
     198           0 :     m_pRbObjectFromfile.clear();
     199           0 :     m_pObjectTypeFrame.clear();
     200           0 :     m_pLbObjecttype.clear();
     201           0 :     m_pFileFrame.clear();
     202           0 :     m_pEdFilepath.clear();
     203           0 :     m_pBtnFilepath.clear();
     204           0 :     m_pCbFilelink.clear();
     205           0 :     InsertObjectDialog_Impl::dispose();
     206           0 : }
     207             : 
     208           0 : short SvInsertOleDlg::Execute()
     209             : {
     210           0 :     short nRet = RET_OK;
     211           0 :     SvObjectServerList  aObjS;
     212           0 :     if ( !m_pServers )
     213             :     {
     214             :         // if no list was provided, take the complete one
     215           0 :         aObjS.FillInsertObjects();
     216           0 :         m_pServers = &aObjS;
     217             :     }
     218             : 
     219             :     // fill listbox and select default
     220           0 :     ListBox& rBox = GetObjectTypes();
     221           0 :     rBox.SetUpdateMode( false );
     222           0 :     for ( sal_uLong i = 0; i < m_pServers->Count(); i++ )
     223           0 :         rBox.InsertEntry( (*m_pServers)[i].GetHumanName() );
     224           0 :     rBox.SetUpdateMode( true );
     225           0 :     SelectDefault();
     226           0 :     OUString aName;
     227             : 
     228             :     DBG_ASSERT( m_xStorage.is(), "No storage!");
     229           0 :     if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK )
     230             :     {
     231           0 :         OUString aFileName;
     232           0 :         bool bCreateNew = IsCreateNew();
     233           0 :         if ( bCreateNew )
     234             :         {
     235             :             // create and insert new embedded object
     236           0 :             OUString aServerName = rBox.GetSelectEntry();
     237           0 :             const SvObjectServer* pS = m_pServers->Get( aServerName );
     238           0 :             if ( pS )
     239             :             {
     240           0 :                 if( pS->GetClassName() == SvGlobalName( SO3_OUT_CLASSID ) )
     241             :                 {
     242             :                     try
     243             :                     {
     244             :                         uno::Reference < embed::XInsertObjectDialog > xDialogCreator(
     245             :                             embed::MSOLEObjectSystemCreator::create( ::comphelper::getProcessComponentContext() ),
     246           0 :                             uno::UNO_QUERY );
     247             : 
     248           0 :                         if ( xDialogCreator.is() )
     249             :                         {
     250           0 :                             aName = aCnt.CreateUniqueObjectName();
     251           0 :                             embed::InsertedObjectInfo aNewInf = xDialogCreator->createInstanceByDialog(
     252             :                                                                     m_xStorage,
     253             :                                                                     aName,
     254           0 :                                                                     uno::Sequence < beans::PropertyValue >() );
     255             : 
     256             :                             OSL_ENSURE( aNewInf.Object.is(), "The object must be created or an exception must be thrown!" );
     257           0 :                             m_xObj = aNewInf.Object;
     258           0 :                             for ( sal_Int32 nInd = 0; nInd < aNewInf.Options.getLength(); nInd++ )
     259           0 :                                 if ( aNewInf.Options[nInd].Name == "Icon" )
     260             :                                 {
     261           0 :                                     aNewInf.Options[nInd].Value >>= m_aIconMetaFile;
     262             :                                 }
     263           0 :                                 else if ( aNewInf.Options[nInd].Name == "IconFormat" )
     264             :                                 {
     265           0 :                                     datatransfer::DataFlavor aFlavor;
     266           0 :                                     if ( aNewInf.Options[nInd].Value >>= aFlavor )
     267           0 :                                         m_aIconMediaType = aFlavor.MimeType;
     268           0 :                                 }
     269             : 
     270           0 :                         }
     271             :                     }
     272           0 :                     catch( ucb::CommandAbortedException& )
     273             :                     {
     274             :                         // the user has pressed cancel
     275             :                     }
     276           0 :                     catch( uno::Exception& )
     277             :                     {
     278             :                         // TODO: Error handling
     279             :                     }
     280             :                 }
     281             :                 else
     282             :                 {
     283             :                     // create object with desired ClassId
     284           0 :                     m_xObj = aCnt.CreateEmbeddedObject( pS->GetClassName().GetByteSequence(), aName );
     285             :                 }
     286             : 
     287           0 :                 if ( !m_xObj.is() )
     288             :                 {
     289           0 :                     if( !aFileName.isEmpty() )  // from OLE Dialog
     290             :                     {
     291             :                         // object couldn't be created from file
     292             :                         // global Resource from svtools (former so3 resource)
     293           0 :                         OUString aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) );
     294           0 :                         aErr = aErr.replaceFirst( "%", aFileName );
     295           0 :                         ScopedVclPtrInstance<MessageDialog>::Create(this, aErr)->Execute();
     296             :                     }
     297             :                     else
     298             :                     {
     299             :                         // object couldn't be created
     300             :                         // global Resource from svtools (former so3 resource)
     301           0 :                         OUString aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE ) );
     302           0 :                         aErr = aErr.replaceFirst( "%", aServerName );
     303           0 :                         ScopedVclPtrInstance<MessageDialog>::Create(this, aErr)->Execute();
     304             :                     }
     305             :                 }
     306           0 :             }
     307             :         }
     308             :         else
     309             :         {
     310           0 :             aFileName = GetFilePath();
     311           0 :             INetURLObject aURL;
     312           0 :             aURL.SetSmartProtocol( INetProtocol::File );
     313           0 :             aURL.SetSmartURL( aFileName );
     314           0 :             aFileName = aURL.GetMainURL( INetURLObject::NO_DECODE );
     315           0 :             bool bLink = IsLinked();
     316             : 
     317           0 :             if ( !aFileName.isEmpty() )
     318             :             {
     319             :                 // create MediaDescriptor for file to create object from
     320           0 :                 uno::Sequence < beans::PropertyValue > aMedium( 2 );
     321           0 :                 aMedium[0].Name = "URL";
     322           0 :                 aMedium[0].Value <<= OUString( aFileName );
     323             : 
     324           0 :                 uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
     325             :                 uno::Reference< task::XInteractionHandler2 > xInteraction(
     326           0 :                     task::InteractionHandler::createWithParent(xContext, 0) );
     327             : 
     328           0 :                aMedium[1].Name = "InteractionHandler";
     329           0 :                aMedium[1].Value <<= xInteraction;
     330             : 
     331             :                 // create object from media descriptor
     332           0 :                 if ( bLink )
     333           0 :                     m_xObj = aCnt.InsertEmbeddedLink( aMedium, aName );
     334             :                 else
     335           0 :                     m_xObj = aCnt.InsertEmbeddedObject( aMedium, aName );
     336             :             }
     337             : 
     338           0 :             if ( !m_xObj.is() )
     339             :             {
     340             :                 // object couldn't be created from file
     341             :                 // global Resource from svtools (former so3 resource)
     342           0 :                 OUString aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) );
     343           0 :                 aErr = aErr.replaceFirst( "%", aFileName );
     344           0 :                 ScopedVclPtrInstance<MessageDialog>::Create(this, aErr)->Execute();
     345           0 :             }
     346           0 :         }
     347             :     }
     348             : 
     349           0 :     m_pServers = 0;
     350           0 :     return nRet;
     351             : }
     352             : 
     353           0 : uno::Reference< io::XInputStream > SvInsertOleDlg::GetIconIfIconified( OUString* pGraphicMediaType )
     354             : {
     355           0 :     if ( m_aIconMetaFile.getLength() )
     356             :     {
     357           0 :         if ( pGraphicMediaType )
     358           0 :             *pGraphicMediaType = m_aIconMediaType;
     359             : 
     360           0 :         return uno::Reference< io::XInputStream >( new ::comphelper::SequenceInputStream( m_aIconMetaFile ) );
     361             :     }
     362             : 
     363           0 :     return uno::Reference< io::XInputStream >();
     364             : }
     365             : 
     366           0 : IMPL_LINK_NOARG(SvInsertPlugInDialog, BrowseHdl)
     367             : {
     368           0 :     Sequence< OUString > aFilterNames, aFilterTypes;
     369           0 :     fillNetscapePluginFilters( aFilterNames, aFilterTypes );
     370             : 
     371           0 :     Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
     372           0 :     Reference< XFilePicker3 > xFilePicker = ui::dialogs::FilePicker::createWithMode( xContext, ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE );
     373             : 
     374             :     // add the filters
     375             :     try
     376             :     {
     377           0 :         const OUString* pNames = aFilterNames.getConstArray();
     378           0 :         const OUString* pTypes = aFilterTypes.getConstArray();
     379           0 :         for( int i = 0; i < aFilterNames.getLength(); i++ )
     380           0 :             xFilePicker->appendFilter( pNames[i], pTypes[i] );
     381             :     }
     382           0 :     catch( IllegalArgumentException& )
     383             :     {
     384             :         DBG_ASSERT( false, "caught IllegalArgumentException when registering filter\n" );
     385             :     }
     386             : 
     387           0 :     if( xFilePicker->execute() == ExecutableDialogResults::OK )
     388             :     {
     389           0 :         Sequence< OUString > aPathSeq( xFilePicker->getFiles() );
     390           0 :         INetURLObject aObj( aPathSeq[0] );
     391           0 :         m_pEdFileurl->SetText(aObj.PathToFileName());
     392             :     }
     393             : 
     394           0 :     return 0;
     395             : }
     396             : 
     397             : 
     398             : 
     399           0 : SvInsertPlugInDialog::SvInsertPlugInDialog(vcl::Window* pParent,
     400             :     const uno::Reference < embed::XStorage >& xStorage)
     401             :     : InsertObjectDialog_Impl(pParent, "InsertPluginDialog", "cui/ui/insertplugin.ui", xStorage)
     402           0 :     , m_pURL(0)
     403             : {
     404           0 :     get(m_pEdFileurl, "urled");
     405           0 :     get(m_pBtnFileurl, "urlbtn");
     406           0 :     get(m_pEdPluginsOptions, "pluginoptions");
     407           0 :     m_pBtnFileurl->SetClickHdl(LINK(this, SvInsertPlugInDialog, BrowseHdl));
     408           0 : }
     409             : 
     410           0 : SvInsertPlugInDialog::~SvInsertPlugInDialog()
     411             : {
     412           0 :     disposeOnce();
     413           0 : }
     414             : 
     415           0 : void SvInsertPlugInDialog::dispose()
     416             : {
     417           0 :     delete m_pURL;
     418           0 :     m_pURL = NULL;
     419           0 :     m_pEdFileurl.clear();
     420           0 :     m_pBtnFileurl.clear();
     421           0 :     m_pEdPluginsOptions.clear();
     422           0 :     InsertObjectDialog_Impl::dispose();
     423           0 : }
     424             : 
     425           0 : static void Plugin_ImplFillCommandSequence( const OUString& aCommands, uno::Sequence< beans::PropertyValue >& aCommandSequence )
     426             : {
     427             :     sal_Int32 nEaten;
     428           0 :     SvCommandList aLst;
     429           0 :     aLst.AppendCommands( aCommands, &nEaten );
     430             : 
     431           0 :     const size_t nCount = aLst.size();
     432           0 :     aCommandSequence.realloc( nCount );
     433           0 :     for( size_t nIndex = 0; nIndex < nCount; nIndex++ )
     434             :     {
     435           0 :         aCommandSequence[nIndex].Name = aLst[ nIndex ].GetCommand();
     436           0 :         aCommandSequence[nIndex].Handle = -1;
     437           0 :         aCommandSequence[nIndex].Value = makeAny( aLst[ nIndex ].GetArgument() );
     438           0 :         aCommandSequence[nIndex].State = beans::PropertyState_DIRECT_VALUE;
     439           0 :     }
     440           0 : }
     441             : 
     442           0 : short SvInsertPlugInDialog::Execute()
     443             : {
     444           0 :     short nRet = RET_OK;
     445           0 :     m_aCommands.clear();
     446             :     DBG_ASSERT( m_xStorage.is(), "No storage!");
     447           0 :     if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK )
     448             :     {
     449           0 :         if ( !m_pURL )
     450           0 :             m_pURL = new INetURLObject();
     451             :         else
     452           0 :             *m_pURL = INetURLObject();
     453             : 
     454           0 :         m_aCommands = GetPlugInOptions();
     455           0 :         OUString aURL = GetPlugInFile();
     456             : 
     457             :         // URL can be a valid and absolute URL or a system file name
     458           0 :         m_pURL->SetSmartProtocol( INetProtocol::File );
     459           0 :         if ( aURL.isEmpty() || m_pURL->SetSmartURL( aURL ) )
     460             :         {
     461             :             // create a plugin object
     462           0 :             OUString aName;
     463           0 :             SvGlobalName aClassId( SO3_PLUGIN_CLASSID );
     464           0 :             m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName );
     465             :         }
     466             : 
     467           0 :         if ( m_xObj.is() )
     468             :         {
     469             :             // set properties from dialog
     470           0 :             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
     471           0 :                 m_xObj->changeState( embed::EmbedStates::RUNNING );
     472             : 
     473           0 :             uno::Reference < beans::XPropertySet > xSet( m_xObj->getComponent(), uno::UNO_QUERY );
     474           0 :             if ( xSet.is() )
     475             :             {
     476           0 :                 xSet->setPropertyValue( "PluginURL",
     477           0 :                         makeAny( OUString( m_pURL->GetMainURL( INetURLObject::NO_DECODE ) ) ) );
     478           0 :                 uno::Sequence< beans::PropertyValue > aCommandSequence;
     479           0 :                 Plugin_ImplFillCommandSequence( m_aCommands, aCommandSequence );
     480           0 :                 xSet->setPropertyValue( "PluginCommands", makeAny( aCommandSequence ) );
     481           0 :             }
     482             :         }
     483             :         else
     484             :         {
     485             :             // PlugIn couldn't be created
     486             :             // global Resource from svtools (former so3 resource)
     487           0 :             OUString aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_PLUGIN ) );
     488           0 :             aErr = aErr.replaceFirst( "%", aURL );
     489           0 :             ScopedVclPtrInstance<MessageDialog>::Create(this, aErr)->Execute();
     490           0 :         }
     491             :     }
     492             : 
     493           0 :     return nRet;
     494             : }
     495             : 
     496           0 : SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( vcl::Window *pParent,
     497             :                             const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage )
     498             :     : InsertObjectDialog_Impl( pParent, "InsertFloatingFrameDialog", "cui/ui/insertfloatingframe.ui",
     499           0 :                               xStorage )
     500             : {
     501           0 :     Init();
     502           0 : }
     503             : 
     504           0 : SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( vcl::Window *pParent,
     505             :                             const uno::Reference < embed::XEmbeddedObject >& xObj )
     506             :     : InsertObjectDialog_Impl( pParent, "InsertFloatingFrameDialog", "cui/ui/insertfloatingframe.ui",
     507           0 :                               uno::Reference < embed::XStorage >() )
     508             : {
     509           0 :     m_xObj = xObj;
     510             : 
     511           0 :     Init();
     512           0 : }
     513             : 
     514           0 : SfxInsertFloatingFrameDialog::~SfxInsertFloatingFrameDialog()
     515             : {
     516           0 :     disposeOnce();
     517           0 : }
     518             : 
     519           0 : void SfxInsertFloatingFrameDialog::dispose()
     520             : {
     521           0 :     m_pEDName.clear();
     522           0 :     m_pEDURL.clear();
     523           0 :     m_pBTOpen.clear();
     524           0 :     m_pRBScrollingOn.clear();
     525           0 :     m_pRBScrollingOff.clear();
     526           0 :     m_pRBScrollingAuto.clear();
     527           0 :     m_pRBFrameBorderOn.clear();
     528           0 :     m_pRBFrameBorderOff.clear();
     529           0 :     m_pFTMarginWidth.clear();
     530           0 :     m_pNMMarginWidth.clear();
     531           0 :     m_pCBMarginWidthDefault.clear();
     532           0 :     m_pFTMarginHeight.clear();
     533           0 :     m_pNMMarginHeight.clear();
     534           0 :     m_pCBMarginHeightDefault.clear();
     535           0 :     InsertObjectDialog_Impl::dispose();
     536           0 : }
     537             : 
     538           0 : void SfxInsertFloatingFrameDialog::Init()
     539             : {
     540           0 :     get(m_pEDName, "edname");
     541           0 :     get(m_pEDURL, "edurl");
     542           0 :     get(m_pBTOpen, "buttonbrowse");
     543           0 :     get(m_pRBScrollingOn, "scrollbaron");
     544           0 :     get(m_pRBScrollingOff, "scrollbaroff");
     545           0 :     get(m_pRBScrollingAuto, "scrollbarauto");
     546           0 :     get(m_pRBFrameBorderOn, "borderon");
     547           0 :     get(m_pRBFrameBorderOff, "borderoff");
     548           0 :     get(m_pFTMarginWidth, "widthlabel");
     549           0 :     get(m_pNMMarginWidth, "width");
     550           0 :     get(m_pCBMarginWidthDefault, "defaultwidth");
     551           0 :     get(m_pFTMarginHeight, "heightlabel");
     552           0 :     get(m_pNMMarginHeight, "height");
     553           0 :     get(m_pCBMarginHeightDefault, "defaultheight");
     554             : 
     555           0 :     Link<> aLink( LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) );
     556           0 :     m_pCBMarginWidthDefault->SetClickHdl( aLink );
     557           0 :     m_pCBMarginHeightDefault->SetClickHdl( aLink );
     558             : 
     559           0 :     m_pCBMarginWidthDefault->Check();
     560           0 :     m_pCBMarginHeightDefault->Check();
     561           0 :     m_pRBScrollingAuto->Check();
     562           0 :     m_pRBFrameBorderOn->Check();
     563             : 
     564           0 :     m_pBTOpen->SetClickHdl( LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) );
     565           0 : }
     566             : 
     567           0 : short SfxInsertFloatingFrameDialog::Execute()
     568             : {
     569           0 :     short nRet = RET_OK;
     570           0 :     bool bOK = false;
     571           0 :     uno::Reference < beans::XPropertySet > xSet;
     572           0 :     if ( m_xObj.is() )
     573             :     {
     574             :         try
     575             :         {
     576           0 :             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
     577           0 :                 m_xObj->changeState( embed::EmbedStates::RUNNING );
     578           0 :             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
     579           0 :             OUString aStr;
     580           0 :             uno::Any aAny = xSet->getPropertyValue( "FrameURL" );
     581           0 :             if ( aAny >>= aStr )
     582           0 :                 m_pEDURL->SetText( aStr );
     583           0 :             aAny = xSet->getPropertyValue( "FrameName" );
     584           0 :             if ( aAny >>= aStr )
     585           0 :                 m_pEDName->SetText( aStr );
     586             : 
     587           0 :             sal_Int32 nSize = SIZE_NOT_SET;
     588           0 :             aAny = xSet->getPropertyValue( "FrameMarginWidth" );
     589           0 :             aAny >>= nSize;
     590             : 
     591           0 :             if ( nSize == SIZE_NOT_SET )
     592             :             {
     593           0 :                 m_pCBMarginWidthDefault->Check( true );
     594           0 :                 m_pNMMarginWidth->SetText( OUString::number(DEFAULT_MARGIN_WIDTH) );
     595           0 :                 m_pFTMarginWidth->Enable( false );
     596           0 :                 m_pNMMarginWidth->Enable( false );
     597             :             }
     598             :             else
     599           0 :                 m_pNMMarginWidth->SetText( OUString::number( nSize ) );
     600             : 
     601           0 :             aAny = xSet->getPropertyValue( "FrameMarginHeight" );
     602           0 :             aAny >>= nSize;
     603             : 
     604           0 :             if ( nSize == SIZE_NOT_SET )
     605             :             {
     606           0 :                 m_pCBMarginHeightDefault->Check( true );
     607           0 :                 m_pNMMarginHeight->SetText( OUString::number(DEFAULT_MARGIN_HEIGHT) );
     608           0 :                 m_pFTMarginHeight->Enable( false );
     609           0 :                 m_pNMMarginHeight->Enable( false );
     610             :             }
     611             :             else
     612           0 :                 m_pNMMarginHeight->SetText( OUString::number( nSize ) );
     613             : 
     614           0 :             bool bScrollOn = false;
     615           0 :             bool bScrollOff = false;
     616           0 :             bool bScrollAuto = false;
     617             : 
     618           0 :             bool bSet = false;
     619           0 :             aAny = xSet->getPropertyValue( "FrameIsAutoScroll" );
     620           0 :             aAny >>= bSet;
     621           0 :             if ( !bSet )
     622             :             {
     623           0 :                 aAny = xSet->getPropertyValue( "FrameIsScrollingMode" );
     624           0 :                 aAny >>= bSet;
     625           0 :                 bScrollOn = bSet;
     626           0 :                 bScrollOff = !bSet;
     627             :             }
     628             :             else
     629           0 :                 bScrollAuto = true;
     630             : 
     631           0 :             m_pRBScrollingOn->Check( bScrollOn );
     632           0 :             m_pRBScrollingOff->Check( bScrollOff );
     633           0 :             m_pRBScrollingAuto->Check( bScrollAuto );
     634             : 
     635           0 :             bSet = false;
     636           0 :             aAny = xSet->getPropertyValue( "FrameIsAutoBorder" );
     637           0 :             aAny >>= bSet;
     638           0 :             if ( !bSet )
     639             :             {
     640           0 :                 aAny = xSet->getPropertyValue( "FrameIsBorder" );
     641           0 :                 aAny >>= bSet;
     642           0 :                 m_pRBFrameBorderOn->Check( bSet );
     643           0 :                 m_pRBFrameBorderOff->Check( !bSet );
     644             :             }
     645             : 
     646           0 :             SetUpdateMode( true );
     647           0 :             bOK = true;
     648             :         }
     649           0 :         catch ( uno::Exception& )
     650             :         {
     651             :             OSL_FAIL( "No IFrame!" );
     652             :         }
     653             :     }
     654             :     else
     655             :     {
     656             :         DBG_ASSERT( m_xStorage.is(), "No storage!");
     657           0 :         bOK = m_xStorage.is();
     658             :     }
     659             : 
     660           0 :     if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK )
     661             :     {
     662           0 :         OUString aURL;
     663           0 :         if ( !m_pEDURL->GetText().isEmpty() )
     664             :         {
     665             :             // URL can be a valid and absolute URL or a system file name
     666           0 :             INetURLObject aObj;
     667           0 :             aObj.SetSmartProtocol( INetProtocol::File );
     668           0 :             if ( aObj.SetSmartURL( m_pEDURL->GetText() ) )
     669           0 :                 aURL = aObj.GetMainURL( INetURLObject::NO_DECODE );
     670             :         }
     671             : 
     672           0 :         if ( !m_xObj.is() && !aURL.isEmpty() )
     673             :         {
     674             :             // create the object
     675           0 :             OUString aName;
     676           0 :             SvGlobalName aClassId( SO3_IFRAME_CLASSID );
     677           0 :             m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName );
     678           0 :             if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED )
     679           0 :                 m_xObj->changeState( embed::EmbedStates::RUNNING );
     680           0 :             xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY );
     681             :         }
     682             : 
     683           0 :         if ( m_xObj.is() )
     684             :         {
     685             :             try
     686             :             {
     687           0 :                 bool bIPActive = m_xObj->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE;
     688           0 :                 if ( bIPActive )
     689           0 :                     m_xObj->changeState( embed::EmbedStates::RUNNING );
     690             : 
     691           0 :                 OUString aName = m_pEDName->GetText();
     692           0 :                 ScrollingMode eScroll = ScrollingNo;
     693           0 :                 if ( m_pRBScrollingOn->IsChecked() )
     694           0 :                     eScroll = ScrollingYes;
     695           0 :                 if ( m_pRBScrollingOff->IsChecked() )
     696           0 :                     eScroll = ScrollingNo;
     697           0 :                 if ( m_pRBScrollingAuto->IsChecked() )
     698           0 :                     eScroll = ScrollingAuto;
     699             : 
     700           0 :                 bool bHasBorder = m_pRBFrameBorderOn->IsChecked();
     701             : 
     702             :                 long lMarginWidth;
     703           0 :                 if ( !m_pCBMarginWidthDefault->IsChecked() )
     704           0 :                     lMarginWidth = (long) m_pNMMarginWidth->GetText().toInt32();
     705             :                 else
     706           0 :                     lMarginWidth = SIZE_NOT_SET;
     707             : 
     708             :                 long lMarginHeight;
     709           0 :                 if ( !m_pCBMarginHeightDefault->IsChecked() )
     710           0 :                     lMarginHeight = (long) m_pNMMarginHeight->GetText().toInt32();
     711             :                 else
     712           0 :                     lMarginHeight = SIZE_NOT_SET;
     713             : 
     714           0 :                 xSet->setPropertyValue( "FrameURL", makeAny( aURL ) );
     715           0 :                 xSet->setPropertyValue( "FrameName", makeAny( aName ) );
     716             : 
     717           0 :                 if ( eScroll == ScrollingAuto )
     718           0 :                     xSet->setPropertyValue( "FrameIsAutoScroll", makeAny( true ) );
     719             :                 else
     720           0 :                     xSet->setPropertyValue( "FrameIsScrollingMode", makeAny( eScroll == ScrollingYes ) );
     721             : 
     722           0 :                 xSet->setPropertyValue( "FrameIsBorder", makeAny( bHasBorder ) );
     723           0 :                 xSet->setPropertyValue( "FrameMarginWidth", makeAny( sal_Int32( lMarginWidth ) ) );
     724           0 :                 xSet->setPropertyValue( "FrameMarginHeight", makeAny( sal_Int32( lMarginHeight ) ) );
     725             : 
     726           0 :                 if ( bIPActive )
     727           0 :                     m_xObj->changeState( embed::EmbedStates::INPLACE_ACTIVE );
     728             :             }
     729           0 :             catch ( uno::Exception& )
     730             :             {
     731             :                 OSL_FAIL( "No IFrame!" );
     732             :             }
     733           0 :         }
     734             :     }
     735             : 
     736           0 :     return nRet;
     737             : }
     738             : 
     739             : 
     740             : 
     741           0 : IMPL_LINK( SfxInsertFloatingFrameDialog, CheckHdl, CheckBox*, pCB )
     742             : {
     743           0 :     if ( pCB == m_pCBMarginWidthDefault )
     744             :     {
     745           0 :         if ( pCB->IsChecked() )
     746           0 :             m_pNMMarginWidth->SetText( OUString::number(DEFAULT_MARGIN_WIDTH) );
     747           0 :         m_pFTMarginWidth->Enable( !pCB->IsChecked() );
     748           0 :         m_pNMMarginWidth->Enable( !pCB->IsChecked() );
     749             :     }
     750             : 
     751           0 :     if ( pCB == m_pCBMarginHeightDefault )
     752             :     {
     753           0 :         if ( pCB->IsChecked() )
     754           0 :             m_pNMMarginHeight->SetText( OUString::number(DEFAULT_MARGIN_HEIGHT) );
     755           0 :         m_pFTMarginHeight->Enable( !pCB->IsChecked() );
     756           0 :         m_pNMMarginHeight->Enable( !pCB->IsChecked() );
     757             :     }
     758             : 
     759           0 :     return 0L;
     760             : }
     761             : 
     762             : 
     763             : 
     764           0 : IMPL_LINK( SfxInsertFloatingFrameDialog, OpenHdl, PushButton*, )
     765             : {
     766           0 :     vcl::Window* pOldParent = Application::GetDefDialogParent();
     767           0 :     Application::SetDefDialogParent( this );
     768             : 
     769             :     // create the file dialog
     770             :     sfx2::FileDialogHelper aFileDlg(
     771           0 :             ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0, OUString() );
     772             : 
     773             :     // set the title
     774           0 :     aFileDlg.SetTitle(CUI_RESSTR(RID_SVXSTR_SELECT_FILE_IFRAME));
     775             : 
     776             :     // show the dialog
     777           0 :     if ( aFileDlg.Execute() == ERRCODE_NONE )
     778           0 :         m_pEDURL->SetText(
     779           0 :             INetURLObject( aFileDlg.GetPath() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ) );
     780             : 
     781           0 :     Application::SetDefDialogParent( pOldParent );
     782           0 :     return 0L;
     783           0 : }
     784             : 
     785             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11