/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucbhelper.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "rtl/ref.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef _UCBEXPLORER_HRC #include "ucbexplorer.hrc" #endif using namespace com::sun::star; using namespace com::sun::star::beans; using namespace com::sun::star::io; using namespace com::sun::star::lang; using namespace com::sun::star::sdbc; using namespace com::sun::star::task; using namespace com::sun::star::ucb; using namespace com::sun::star::uno; using namespace rtl; //========================================================================= // // class TestDataSink. // //========================================================================= class TestDataSink : public cppu::OWeakObject, public XActiveDataSink { uno::Reference< XInputStream > m_xStream; public: // TestDataSink() {} // virtual ~TestDataSink(); // XInterface methods virtual Any SAL_CALL queryInterface( const Type & rType ) throw( RuntimeException ); virtual void SAL_CALL acquire() throw (); virtual void SAL_CALL release() throw (); // XActiveDataSink methods. virtual void SAL_CALL setInputStream( const uno::Reference< XInputStream >& aStream ) throw( RuntimeException ); virtual uno::Reference< XInputStream > SAL_CALL getInputStream() throw( RuntimeException ); }; //========================================================================= // // class StringInputDialog. // //========================================================================= class StringInputDialog : public ModalDialog { private: FixedText m_aNameText; Edit m_aNameEdit; GroupBox m_aNameGroup; OKButton m_aOKBtn; CancelButton m_aCancelBtn; HelpButton m_aHelpBtn; DECL_LINK( OKHdl, Button * ); DECL_LINK( NameHdl, Edit * ); public: StringInputDialog( ResMgr& rResMgr, const String& rTitle, const String& rDefaultText, String* pGroupName = 0 ); String GetValue() const { return m_aNameEdit.GetText(); } void SetValue( const String& rNewName ) { m_aNameEdit.SetText( rNewName ); } }; //========================================================================= // // class UcbExplorerListBoxEntry. // //========================================================================= class UcbExplorerListBoxEntry : public SvLBoxEntry { friend class UcbExplorerTreeListBox; enum EntryType { FOLDER, DOCUMENT, LINK }; ::ucbhelper::Content m_aContent; EntryType m_eType; public: UcbExplorerListBoxEntry(); virtual ~UcbExplorerListBoxEntry(); BOOL createNewContent( const ContentInfo& rInfo, ::ucbhelper::Content& rNewContent ); }; //========================================================================= // // class UcbExplorerTreeListBox. // //========================================================================= class UcbExplorerTreeListBox : public SvTreeListBox { Bitmap m_aFolderClosed; Bitmap m_aFolderOpened; Bitmap m_aDocument; Bitmap m_aLink; private: virtual SvLBoxEntry* CreateEntry() const; virtual void RequestingChilds( SvLBoxEntry* pParent ); public: UcbExplorerTreeListBox( ResMgr & rResMgr, Window* pParent, WinBits nWinStyle = 0 ); virtual ~UcbExplorerTreeListBox(); virtual void Command( const CommandEvent& rCEvt ); UcbExplorerListBoxEntry* InsertEntry( ::ucbhelper::Content& rContent, SvLBoxEntry* pParent ); UcbExplorerListBoxEntry* InsertEntry( const String& rURL, SvLBoxEntry* pParent = 0 ); }; //========================================================================= // // class UcbExplorerWindow. // //========================================================================= class UcbExplorerWindow : public WorkWindow { friend class MyApp; UcbExplorerTreeListBox m_aTree; public: UcbExplorerWindow( ResMgr & rResMgr, Window *pParent, WinBits nWinStyle ); virtual ~UcbExplorerWindow(); virtual void Resize(); }; //========================================================================= // // class MyApp. // //========================================================================= class MyApp : public Application { public: virtual void Main(); }; //========================================================================= // // TestDataSink implementation. // //========================================================================= // virtual Any SAL_CALL TestDataSink::queryInterface( const Type & rType ) throw( RuntimeException ) { Any aRet = cppu::queryInterface( rType, static_cast< XActiveDataSink * >( this ) ); return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ); } //========================================================================= // virtual void SAL_CALL TestDataSink::acquire() throw() { OWeakObject::acquire(); } //========================================================================= // virtual void SAL_CALL TestDataSink::release() throw() { OWeakObject::release(); } //========================================================================= // virtual void SAL_CALL TestDataSink::setInputStream( const uno::Reference< XInputStream >& aStream ) throw( RuntimeException ) { m_xStream = aStream; } //========================================================================= // virtual uno::Reference< XInputStream > SAL_CALL TestDataSink::getInputStream() throw( RuntimeException ) { return m_xStream; } //========================================================================= // // StringInputDialog implementation. // //========================================================================= StringInputDialog::StringInputDialog( ResMgr& rResMgr, const String& rTitle, const String& rDefaultText, String* pGroupName ) : ModalDialog( 0, ResId( DLG_STRINGINPUT, rResMgr ) ), m_aNameText ( this, ResId( FT_STRINGINPUT_DLG_NAME, rResMgr ) ), m_aNameEdit ( this, ResId( ED_STRINGINPUT_DLG_NAME, rResMgr ) ), m_aNameGroup( this, ResId( GB_STRINGINPUT_DLG_NAME, rResMgr ) ), m_aOKBtn ( this, ResId( BT_STRINGINPUT_DLG_OK, rResMgr ) ), m_aCancelBtn( this, ResId( BT_STRINGINPUT_DLG_CANCEL, rResMgr ) ), m_aHelpBtn ( this, ResId( BT_STRINGINPUT_DLG_HELP, rResMgr ) ) { FreeResource(); SetText( rTitle ); m_aNameEdit.SetText( rDefaultText ); m_aOKBtn.SetClickHdl( LINK( this, StringInputDialog, OKHdl ) ); m_aNameEdit.SetModifyHdl( LINK( this, StringInputDialog, NameHdl ) ); if ( pGroupName ) m_aNameGroup.SetText( *pGroupName ); }; //========================================================================= IMPL_LINK( StringInputDialog, OKHdl, Button *, EMPTYARG ) { // trim the strings m_aNameEdit.SetText( m_aNameEdit.GetText().EraseLeadingChars().EraseTrailingChars() ); EndDialog( RET_OK ); return 1; } //========================================================================= IMPL_LINK( StringInputDialog, NameHdl, Edit *, EMPTYARG ) { /* // trim the strings String aName = m_aNameEdit.GetText(); aName.EraseLeadingChars().EraseTrailingChars(); if ( aName.Len() ) { if ( !m_aOKBtn.IsEnabled() ) m_aOKBtn.Enable( TRUE ); } else { if ( m_aOKBtn.IsEnabled() ) m_aOKBtn.Enable( FALSE ); } */ return 0; } //========================================================================= // // UcbExplorerListBoxEntry implementation. // //========================================================================= UcbExplorerListBoxEntry::UcbExplorerListBoxEntry() { } //========================================================================= // virtual UcbExplorerListBoxEntry::~UcbExplorerListBoxEntry() { } //========================================================================= BOOL UcbExplorerListBoxEntry::createNewContent( const ContentInfo& rInfo, ::ucbhelper::Content& rNewContent ) { sal_Int32 nCount = rInfo.Properties.getLength(); Sequence< Any > aPropValues( nCount ); Sequence< OUString > aPropNames( nCount ); if ( nCount > 0 ) { // Collect property values. Any* pValues = aPropValues.getArray(); const Property* pProps = rInfo.Properties.getConstArray(); for ( sal_Int32 n = 0; n < nCount; ++n ) { const OUString& rName = pProps[ n ].Name; std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( ucbexplorer ) ) ); StringInputDialog* pDlg = new StringInputDialog( *xManager.get(), rName, rName ); USHORT nRet = pDlg->Execute(); if ( nRet == RET_OK ) { OUString aValue( pDlg->GetValue() ); // Convert value according to supplied type info... const Type& rType = pProps[ n ].Type; if ( rType == getCppuType( static_cast< const OUString * >( 0 ) ) ) { // string pValues[ n ] <<= aValue; } else if ( rType == getCppuType( static_cast< const sal_Int32 * >( 0 ) ) ) { // long pValues[ n ] <<= aValue.toInt32(); } else if ( rType == getCppuType( static_cast< const sal_Int16 * >( 0 ) ) ) { // short pValues[ n ] <<= sal_Int16( aValue.toInt32() ) ; } else if ( rType == getCppuBooleanType() ) { // boolean pValues[ n ] <<= sal_Bool( aValue.toChar() ) ; } else if ( rType == getCppuCharType() ) { // char pValues[ n ] <<= aValue.toChar(); } else if ( rType == getCppuType( static_cast< const sal_Int8 * >( 0 ) ) ) { // byte pValues[ n ] <<= sal_Int8( aValue.toChar() ) ; } else if ( rType == getCppuType( static_cast< const sal_Int64 * >( 0 ) ) ) { // hyper pValues[ n ] <<= aValue.toInt64(); } else if ( rType == getCppuType( static_cast< const float * >( 0 ) ) ) { // float pValues[ n ] <<= aValue.toFloat(); } else if ( rType == getCppuType( static_cast< const double * >( 0 ) ) ) { // double pValues[ n ] <<= aValue.toDouble(); } else { // See com/sun/star/ucb/ContentInfo.idl DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " "Invlid type for bootstrap property!" ); } } delete pDlg; if ( nRet != RET_OK ) return FALSE; aPropNames[ n ] = rName; } } uno::Reference< XInputStream > xData; if ( rInfo.Attributes & ContentInfoAttribute::INSERT_WITH_INPUTSTREAM ) { // Let the user specify the URL of a content containing the // data to supply to the new content. std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( ucbexplorer ) ) ); StringInputDialog* pDlg = new StringInputDialog( *xManager.get(), OUString::createFromAscii( "Document Data Source URL" ), OUString() ); USHORT nRet = pDlg->Execute(); if ( nRet == RET_OK ) { // Create a content object for the given URL. OUString aSourceURL( pDlg->GetValue() ); if ( aSourceURL.getLength() == 0 ) { DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " "No document data URL!" ); return FALSE; } try { uno::Reference< XCommandEnvironment > xEnv; ::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get(); if ( pBroker ) { uno::Reference< XInteractionHandler > xInteractionHandler( pBroker->getServiceManager()->createInstance( OUString::createFromAscii( "com.sun.star.task.InteractionHandler" ) ), UNO_QUERY ); uno::Reference< XProgressHandler > xProgressHandler /* = new ProgressHandler( *pBroker ) */ ; xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, xProgressHandler ); } ::ucbhelper::Content aSourceContent( aSourceURL, xEnv ); // Get source data. rtl::Reference< TestDataSink > xSourceData = new TestDataSink; aSourceContent.openStream( xSourceData.get() ); xData = xSourceData->getInputStream(); } catch ( ContentCreationException const & ) { DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " "No content for document data!" ); return FALSE; } catch ( CommandAbortedException const & ) { return FALSE; } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { return FALSE; } } delete pDlg; if ( nRet != RET_OK ) return FALSE; } // Create new content. ULONG n = Application::ReleaseSolarMutex(); BOOL bRet = sal_False; try { bRet = m_aContent.insertNewContent( rInfo.Type, aPropNames, aPropValues, xData, rNewContent ); } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } Application::AcquireSolarMutex( n ); return bRet; } //========================================================================= // // UcbExplorerTreeListBox implementation. // //========================================================================= UcbExplorerTreeListBox::UcbExplorerTreeListBox( ResMgr & rResMgr, Window* pParent, WinBits nWinStyle ) : SvTreeListBox( pParent, nWinStyle ), m_aFolderClosed( ResId( BMP_FOLDER_CLOSED, rResMgr ) ), m_aFolderOpened( ResId( BMP_FOLDER_OPENED, rResMgr ) ), m_aDocument( ResId( BMP_DOCUMENT, rResMgr ) ), m_aLink( ResId( BMP_LINK, rResMgr ) ) { } //========================================================================= // virtual UcbExplorerTreeListBox::~UcbExplorerTreeListBox() { } //========================================================================= // virtual SvLBoxEntry* UcbExplorerTreeListBox::CreateEntry() const { return new UcbExplorerListBoxEntry(); } //========================================================================= // virtual void UcbExplorerTreeListBox::RequestingChilds( SvLBoxEntry* pParent ) { UcbExplorerListBoxEntry* pEntry = static_cast< UcbExplorerListBoxEntry * >( pParent ); if ( !pEntry->HasChilds() ) { switch ( pEntry->m_eType ) { case UcbExplorerListBoxEntry::FOLDER: { ULONG n = Application::ReleaseSolarMutex(); try { Sequence< OUString > aPropertyNames( 0 ); // OUString* pNames = aPropertyNames.getArray(); // pNames[ 0 ] = OUString::createFromAscii( "Title" ); uno::Reference< XResultSet > xResultSet = pEntry->m_aContent.createCursor( aPropertyNames, ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS ); uno::Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY ); if ( xResultSet.is() && xContentAccess.is() ) { while ( xResultSet->next() ) { Application::AcquireSolarMutex( n ); InsertEntry( xContentAccess->queryContentIdentifierString(), pParent ); n = Application::ReleaseSolarMutex(); } } } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } Application::AcquireSolarMutex( n ); break; } case UcbExplorerListBoxEntry::DOCUMENT: break; case UcbExplorerListBoxEntry::LINK: break; default: break; } } } //========================================================================= // virtual void UcbExplorerTreeListBox::Command( const CommandEvent& rCEvt ) { if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) { const Point& rPos = rCEvt.GetMousePosPixel(); UcbExplorerListBoxEntry* pEntry = static_cast< UcbExplorerListBoxEntry * >( GetEntry( rPos, TRUE ) ); if ( pEntry ) { std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( ucbexplorer ) ) ); PopupMenu* pMenu = new PopupMenu( ResId( MENU_POPUP, *xManager.get() ) ); PopupMenu* pNewMenu = 0; // pMenu->SetSelectHdl( LINK( this, // SfxCommonTemplateDialog_Impl, // MenuSelectHdl ) ); ////////////////////////////////////////////////////////////// // Configure "New" ////////////////////////////////////////////////////////////// Sequence< ContentInfo > aInfo = pEntry->m_aContent.queryCreatableContentsInfo(); const ContentInfo* pInfo = aInfo.getConstArray(); sal_Int32 nCount = aInfo.getLength(); BOOL bCanCreate = ( nCount > 0 ); pNewMenu = new PopupMenu; pMenu->SetPopupMenu( MENU_NEW, pNewMenu ); for ( sal_Int32 n = 0; n < nCount; ++n ) { const ContentInfo& rInfo = pInfo[ n ]; pNewMenu->InsertItem( 20000 + n + 1, rInfo.Type ); } pMenu->EnableItem( MENU_NEW, bCanCreate ); ////////////////////////////////////////////////////////////// // Configure "Rename" ////////////////////////////////////////////////////////////// sal_Bool bEnable = sal_False; try { Property aProp = pEntry->m_aContent.getProperties()->getPropertyByName( OUString::createFromAscii( "Title" ) ); bEnable = !( aProp.Attributes & PropertyAttribute::READONLY ); } catch( UnknownPropertyException const & ) { // getPropertyByName bEnable = sal_False; } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } pMenu->EnableItem( MENU_RENAME, bEnable ); ////////////////////////////////////////////////////////////// // Configure "Delete" ////////////////////////////////////////////////////////////// try { pMenu->EnableItem( MENU_DELETE, pEntry->m_aContent .getCommands()->hasCommandByName( OUString::createFromAscii( "delete" ) ) ); } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } ////////////////////////////////////////////////////////////// // Execute menu. ////////////////////////////////////////////////////////////// USHORT nSelected = pMenu->Execute( this, rPos ); switch ( nSelected ) { // case MENU_NEW: // break; case MENU_RENAME: { OUString aNewTitle; try { pEntry->m_aContent.getPropertyValue( OUString::createFromAscii( "Title" ) ) >>= aNewTitle; } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( ucbexplorer ) ) ); StringInputDialog* pDlg = new StringInputDialog( *xManager.get(), OUString::createFromAscii( "Title" ), aNewTitle ); USHORT nRet = pDlg->Execute(); Any aValue; if ( nRet == RET_OK ) { aNewTitle = pDlg->GetValue(); aValue <<= aNewTitle; } delete pDlg; if ( nRet != RET_OK ) break; sal_Bool bOK = sal_False; ULONG n = Application::ReleaseSolarMutex(); try { pEntry->m_aContent.setPropertyValue( OUString::createFromAscii( "Title" ), aValue ); bOK = sal_True; } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { } Application::AcquireSolarMutex( n ); if ( bOK ) { OUString aText( aNewTitle ); OUString aTargetURL; try { pEntry->m_aContent.getPropertyValue( OUString::createFromAscii( "TargetURL" ) ) >>= aTargetURL; } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { // The property is optional! } if ( aTargetURL.getLength() > 0 ) { // Insert link. aText += OUString::createFromAscii( " --> " ); aText += aTargetURL; } SetEntryText( pEntry, aText ); } break; } case MENU_DELETE: { ULONG n = Application::ReleaseSolarMutex(); sal_Bool bOK = sal_True; try { pEntry->m_aContent.executeCommand( OUString::createFromAscii( "delete" ), makeAny( sal_True ) ); } catch ( CommandAbortedException const & ) { bOK = sal_False; } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { bOK = sal_False; } Application::AcquireSolarMutex( n ); if ( bOK ) RemoveSelection(); break; } default: { if ( ( nSelected > 20000 ) && ( ( nSelected - 20000 ) <= aInfo.getLength() ) ) { // New-menu entry selected. ::ucbhelper::Content aNewContent; if ( pEntry->createNewContent( aInfo.getConstArray()[ nSelected - 20001 ], aNewContent ) ) { if ( !IsExpanded( pEntry ) ) Expand( pEntry ); else InsertEntry( aNewContent, pEntry ); } } break; } } delete pNewMenu; delete pMenu; return; } } SvTreeListBox::Command( rCEvt ); } //========================================================================= UcbExplorerListBoxEntry* UcbExplorerTreeListBox::InsertEntry( ::ucbhelper::Content& rContent, SvLBoxEntry* pParent ) { try { OUString aTitle; rContent.getPropertyValue( OUString::createFromAscii( "Title" ) ) >>= aTitle; if ( !aTitle.getLength() ) aTitle = OUString::createFromAscii( "/" ); UcbExplorerListBoxEntry* pEntry = 0; if ( rContent.isFolder() ) { // Insert folder. pEntry = static_cast< UcbExplorerListBoxEntry * >( SvTreeListBox::InsertEntry( aTitle, m_aFolderOpened, m_aFolderClosed, pParent, TRUE ) ); pEntry->m_eType = UcbExplorerListBoxEntry::FOLDER; } else { OUString aTargetURL; try { rContent.getPropertyValue( OUString::createFromAscii( "TargetURL" ) ) >>= aTargetURL; } catch ( CommandAbortedException const & ) { } catch ( RuntimeException const & ) { throw; } catch ( Exception const & ) { // The property is optional! } if ( aTargetURL.getLength() > 0 ) { // Insert link. aTitle += OUString::createFromAscii( " --> " ); aTitle += aTargetURL; pEntry = static_cast< UcbExplorerListBoxEntry * >( SvTreeListBox::InsertEntry( aTitle, m_aLink, m_aLink, pParent, TRUE ) ); pEntry->m_eType = UcbExplorerListBoxEntry::LINK; } else { // Insert Document pEntry = static_cast< UcbExplorerListBoxEntry * >( SvTreeListBox::InsertEntry( aTitle, m_aDocument, m_aDocument, pParent, TRUE ) ); pEntry->m_eType = UcbExplorerListBoxEntry::DOCUMENT; } } pEntry->m_aContent = rContent; return pEntry; } catch ( CommandAbortedException const & ) { } catch ( Exception const & ) { } return 0; } //========================================================================= UcbExplorerListBoxEntry* UcbExplorerTreeListBox::InsertEntry( const String& rURL, SvLBoxEntry* pParent ) { try { uno::Reference< XCommandEnvironment > xEnv; ::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get(); if ( pBroker ) { uno::Reference< XInteractionHandler > xInteractionHandler( pBroker->getServiceManager()->createInstance( OUString::createFromAscii( "com.sun.star.task.InteractionHandler" ) ), UNO_QUERY ); uno::Reference< XProgressHandler > xProgressHandler /* = new ProgressHandler( *pBroker ) */ ; xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, xProgressHandler ); } ::ucbhelper::Content aContent( rURL, xEnv ); return InsertEntry( aContent, pParent ); } catch ( ContentCreationException const & ) { } return 0; } //========================================================================= // // UcbExplorerWindow implementation. // //========================================================================= UcbExplorerWindow::UcbExplorerWindow( ResMgr & rResMgr, Window *pParent, WinBits nWinStyle ) : WorkWindow( pParent, nWinStyle ), m_aTree( rResMgr, this, WB_HSCROLL ) { Font aTreeFont( m_aTree.GetFont() ); aTreeFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM("Courier") ) ); aTreeFont.SetFamily( FAMILY_MODERN ); aTreeFont.SetPitch( PITCH_FIXED ); aTreeFont.SetSize( Size( 0, 12 ) ); m_aTree.SetFont( aTreeFont ); m_aTree.SetIndent( 20 ); m_aTree.SetPosPixel( Point( 0, 0 ) ); m_aTree.Show(); } //------------------------------------------------------------------------- // virtual UcbExplorerWindow::~UcbExplorerWindow() { } //------------------------------------------------------------------------- // virtual void UcbExplorerWindow::Resize() { m_aTree.SetSizePixel( GetOutputSizePixel() ); } //========================================================================= // // MyApp implementation. // //========================================================================= // virtual void MyApp::Main() { ////////////////////////////////////////////////////////////////////// // Initialize local Service Manager and basic services. ////////////////////////////////////////////////////////////////////// uno::Reference< XMultiServiceFactory > xFac; try { uno::Reference< XComponentContext > xCtx( cppu::defaultBootstrap_InitialComponentContext() ); if ( !xCtx.is() ) { DBG_ERROR( "Error creating initial component context!" ); return; } xFac = uno::Reference< XMultiServiceFactory >( xCtx->getServiceManager(), UNO_QUERY ); if ( !xFac.is() ) { DBG_ERROR( "No service manager!" ); return; } } catch ( com::sun::star::uno::Exception const & ) { DBG_ERROR( "Exception during creation of initial component context!" ); return; } comphelper::setProcessServiceFactory( xFac ); uno::Reference< XComponent > xComponent( xFac, UNO_QUERY ); ////////////////////////////////////////////////////////////////////// // Create UCB. ////////////////////////////////////////////////////////////////////// #if 1 // Init UCB (Read configuration from registry) Sequence< Any > aArgs( 2 ); aArgs[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL ); aArgs[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE ); sal_Bool bSuccess = ::ucbhelper::ContentBroker::initialize( xFac, aArgs ); #else // Init UCB (Use provided configuration data) ::ucbhelper::ContentProviderDataList aProviders; aProviders.push_back( ::ucbhelper::ContentProviderData( OUString::createFromAscii( "com.sun.star.ucb.FileContentProvider" ), OUString::createFromAscii( "file" ), OUString() ) ); sal_Bool bSuccess = ::ucbhelper::ContentBroker::initialize( xFac, aProviders ); #endif if ( !bSuccess ) { DBG_ERROR( "Error creating UCB!" ); return; } ////////////////////////////////////////////////////////////////////// // Create/init/show app window. ////////////////////////////////////////////////////////////////////// std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( ucbexplorer ) ) ); UcbExplorerWindow aAppWin( *xManager.get(), 0, WB_APP | WB_STDWORK ); MenuBar aMBMain( ResId( MENU_MAIN, *xManager.get() ) ); // Check for command line params #if 0 for ( int i = 0; i < GetCommandLineParamCount(); ++i ) { String aPara = GetCommandLineParam( i ); } #endif String aRootURL = GetCommandLineParam( 0 ); if ( aRootURL.Len() == 0 ) aRootURL = UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "vnd.sun.star.hier:/" ) ); String aTitle( ResId( TEXT_TITLEBAR, *xManager.get() ) ); aTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " - " ) ); aTitle += aRootURL; aAppWin.SetText( aTitle ); aAppWin.SetPosSizePixel( 0, 0, 500, 750 ); aAppWin.Show(); aAppWin.m_aTree.InsertEntry( aRootURL ); ////////////////////////////////////////////////////////////////////// // Execute app. ////////////////////////////////////////////////////////////////////// Execute(); ////////////////////////////////////////////////////////////////////// // Cleanup. ////////////////////////////////////////////////////////////////////// // m_aTree holds UCB contents! aAppWin.m_aTree.Clear(); ::ucbhelper::ContentBroker::deinitialize(); if ( xComponent.is() ) xComponent->dispose(); } //========================================================================= // // The Application. // //========================================================================= MyApp aMyApp;