include/svtools/RemoteFilesDialog.hxx | 48 +- svtools/source/dialogs/RemoteFilesDialog.cxx | 489 +++++++++++++-------------- 2 files changed, 266 insertions(+), 271 deletions(-)
New commits: commit c7eed91235876b75be2043bf78e50c07d201e41f Author: Szymon KÅos <eszka...@gmail.com> Date: Thu Jun 25 12:10:54 2015 +0200 RemoteFilesDialog: consistent code in the whole file Change-Id: I994d07e631b7c8c1efdeca351754c5b3e3997bb4 diff --git a/include/svtools/RemoteFilesDialog.hxx b/include/svtools/RemoteFilesDialog.hxx index 0b8822c..b2686f1 100644 --- a/include/svtools/RemoteFilesDialog.hxx +++ b/include/svtools/RemoteFilesDialog.hxx @@ -59,8 +59,8 @@ enum SvtRemoteDlgType REMOTEDLG_TYPE_PATHDLG = 1 }; -typedef std::shared_ptr<Place> ServicePtr; -typedef ::com::sun::star::uno::Sequence<OUString> OUStringList; +typedef std::shared_ptr< Place > ServicePtr; +typedef ::com::sun::star::uno::Sequence< OUString > OUStringList; class FileViewContainer; class Breadcrumb; @@ -69,7 +69,7 @@ class FolderTree; class SVT_DLLPUBLIC RemoteFilesDialog : public ModalDialog { public: - RemoteFilesDialog(vcl::Window* pParent, WinBits nBits); + RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ); virtual ~RemoteFilesDialog(); virtual void dispose() SAL_OVERRIDE; @@ -90,28 +90,28 @@ private: OUString m_sPath; - VclPtr<PushButton> m_pOpen_btn; - VclPtr<PushButton> m_pSave_btn; - VclPtr<CancelButton> m_pCancel_btn; - VclPtr<MenuButton> m_pAddService_btn; - VclPtr<ListBox> m_pServices_lb; - VclPtr<Breadcrumb> m_pPath; - VclPtr<Splitter> m_pSplitter; - VclPtr<FolderTree> m_pTreeView; - VclPtr<SvtFileView> m_pFileView; - VclPtr<FileViewContainer> m_pContainer; - VclPtr<ListBox> m_pFilter_lb; - VclPtr<Edit> m_pName_ed; - - std::vector<ServicePtr> m_aServices; - std::vector<OUString> m_aFilters; + VclPtr< PushButton > m_pOpen_btn; + VclPtr< PushButton > m_pSave_btn; + VclPtr< CancelButton > m_pCancel_btn; + VclPtr< MenuButton > m_pAddService_btn; + VclPtr< ListBox > m_pServices_lb; + VclPtr< Breadcrumb > m_pPath; + VclPtr< Splitter > m_pSplitter; + VclPtr< FolderTree > m_pTreeView; + VclPtr< SvtFileView > m_pFileView; + VclPtr< FileViewContainer > m_pContainer; + VclPtr< ListBox > m_pFilter_lb; + VclPtr< Edit > m_pName_ed; + + std::vector< ServicePtr > m_aServices; + std::vector< OUString > m_aFilters; void FillServicesListbox(); /* If failure returns < 0 */ int GetSelectedServicePos(); - OUString getCurrentFilter(); + OUString GetCurrentFilter(); FileViewResult OpenURL( OUString sURL ); diff --git a/svtools/source/dialogs/RemoteFilesDialog.cxx b/svtools/source/dialogs/RemoteFilesDialog.cxx index cee1b7b..405548e 100644 --- a/svtools/source/dialogs/RemoteFilesDialog.cxx +++ b/svtools/source/dialogs/RemoteFilesDialog.cxx @@ -227,25 +227,25 @@ class FileViewContainer : public vcl::Window } }; -RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) - : ModalDialog(pParent, "RemoteFilesDialog", "svt/ui/remotefilesdialog.ui") - , m_context(comphelper::getProcessComponentContext()) - , m_aFolderImage(SvtResId(IMG_SVT_FOLDER)) - , m_pSplitter(NULL) - , m_pFileView(NULL) - , m_pContainer(NULL) +RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ) + : ModalDialog( pParent, "RemoteFilesDialog", "svt/ui/remotefilesdialog.ui" ) + , m_context( comphelper::getProcessComponentContext() ) + , m_aFolderImage( SvtResId( IMG_SVT_FOLDER ) ) + , m_pSplitter( NULL ) + , m_pFileView( NULL ) + , m_pContainer( NULL ) { - get(m_pOpen_btn, "open"); - get(m_pSave_btn, "save"); - get(m_pCancel_btn, "cancel"); - get(m_pAddService_btn, "add_service_btn"); - get(m_pServices_lb, "services_lb"); - get(m_pFilter_lb, "filter_lb"); - get(m_pName_ed, "name_ed"); - - m_eMode = (nBits & WB_SAVEAS) ? REMOTEDLG_MODE_SAVE : REMOTEDLG_MODE_OPEN; - m_eType = (nBits & WB_PATH) ? REMOTEDLG_TYPE_PATHDLG : REMOTEDLG_TYPE_FILEDLG; - m_bMultiselection = (nBits & WB_MULTISELECTION) ? true : false; + get( m_pOpen_btn, "open" ); + get( m_pSave_btn, "save" ); + get( m_pCancel_btn, "cancel" ); + get( m_pAddService_btn, "add_service_btn" ); + get( m_pServices_lb, "services_lb" ); + get( m_pFilter_lb, "filter_lb" ); + get( m_pName_ed, "name_ed" ); + + m_eMode = ( nBits & WB_SAVEAS ) ? REMOTEDLG_MODE_SAVE : REMOTEDLG_MODE_OPEN; + m_eType = ( nBits & WB_PATH ) ? REMOTEDLG_TYPE_PATHDLG : REMOTEDLG_TYPE_FILEDLG; + m_bMultiselection = ( nBits & WB_MULTISELECTION ) ? true : false; m_bIsUpdated = false; m_pOpen_btn->Enable( false ); @@ -253,7 +253,7 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) m_pFilter_lb->Enable( false ); m_pName_ed->Enable( false ); - if(m_eMode == REMOTEDLG_MODE_OPEN) + if( m_eMode == REMOTEDLG_MODE_OPEN ) { m_pSave_btn->Hide(); m_pOpen_btn->Show(); @@ -266,18 +266,18 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) m_pOpen_btn->SetClickHdl( LINK( this, RemoteFilesDialog, OkHdl ) ); - m_pPath = VclPtr<Breadcrumb>::Create( get<vcl::Window>("breadcrumb_container") ); - m_pPath->set_hexpand(true); + m_pPath = VclPtr<Breadcrumb>::Create( get< vcl::Window >( "breadcrumb_container" ) ); + m_pPath->set_hexpand( true ); m_pPath->SetClickHdl( LINK( this, RemoteFilesDialog, SelectBreadcrumbHdl ) ); m_pPath->SetMode( SvtBreadcrumbMode::ALL_VISITED ); m_pPath->Show(); - m_pContainer = VclPtr<FileViewContainer>::Create( get<vcl::Window>("container") ); + m_pContainer = VclPtr< FileViewContainer >::Create( get< vcl::Window >("container") ); - m_pContainer->set_hexpand(true); - m_pContainer->set_vexpand(true); + m_pContainer->set_hexpand( true ); + m_pContainer->set_vexpand( true ); - m_pFileView = VclPtr<SvtFileView>::Create( m_pContainer, WB_BORDER | WB_TABSTOP, + m_pFileView = VclPtr< SvtFileView >::Create( m_pContainer, WB_BORDER | WB_TABSTOP, REMOTEDLG_TYPE_PATHDLG == m_eType, m_bMultiselection ); @@ -286,26 +286,26 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) m_pFileView->SetDoubleClickHdl( LINK( this, RemoteFilesDialog, DoubleClickHdl ) ); m_pFileView->SetSelectHdl( LINK( this, RemoteFilesDialog, SelectHdl ) ); - m_pSplitter = VclPtr<Splitter>::Create( m_pContainer, WB_HSCROLL ); - m_pSplitter->SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() )); + m_pSplitter = VclPtr< Splitter >::Create( m_pContainer, WB_HSCROLL ); + m_pSplitter->SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() ) ); m_pSplitter->SetSplitHdl( LINK( this, RemoteFilesDialog, SplitHdl ) ); m_pSplitter->Show(); - m_pTreeView = VclPtr<FolderTree>::Create( m_pContainer, WB_BORDER | WB_SORT | WB_TABSTOP ); - Size aSize(100, 200); - m_pTreeView->set_height_request(aSize.Height()); - m_pTreeView->set_width_request(aSize.Width()); - m_pTreeView->SetSizePixel(aSize); + m_pTreeView = VclPtr< FolderTree >::Create( m_pContainer, WB_BORDER | WB_SORT | WB_TABSTOP ); + Size aSize( 100, 200 ); + m_pTreeView->set_height_request( aSize.Height() ); + m_pTreeView->set_width_request( aSize.Width() ); + m_pTreeView->SetSizePixel( aSize ); m_pTreeView->Show(); - m_pTreeView->SetDefaultCollapsedEntryBmp(m_aFolderImage); - m_pTreeView->SetDefaultExpandedEntryBmp(m_aFolderImage); + m_pTreeView->SetDefaultCollapsedEntryBmp( m_aFolderImage ); + m_pTreeView->SetDefaultExpandedEntryBmp( m_aFolderImage ); m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) ); sal_Int32 nPosX = m_pTreeView->GetSizePixel().Width(); - m_pSplitter->SetPosPixel(Point(nPosX, 0)); + m_pSplitter->SetPosPixel( Point( nPosX, 0 ) ); nPosX += m_pSplitter->GetSizePixel().Width(); - m_pFileView->SetPosPixel(Point(nPosX, 0)); + m_pFileView->SetPosPixel( Point( nPosX, 0 ) ); m_pContainer->init( m_pFileView, m_pSplitter, m_pTreeView, m_pAddService_btn, m_pFilter_lb ); m_pContainer->Show(); @@ -331,22 +331,22 @@ void RemoteFilesDialog::dispose() { m_pFileView->SetSelectHdl( Link<>() ); - if(m_bIsUpdated) + if( m_bIsUpdated ) { - Sequence< OUString > placesUrlsList(m_aServices.size()); - Sequence< OUString > placesNamesList(m_aServices.size()); + Sequence< OUString > placesUrlsList( m_aServices.size() ); + Sequence< OUString > placesNamesList( m_aServices.size() ); int i = 0; - for(std::vector<ServicePtr>::const_iterator it = m_aServices.begin(); it != m_aServices.end(); ++it) + for( std::vector< ServicePtr >::const_iterator it = m_aServices.begin(); it != m_aServices.end(); ++it ) { - placesUrlsList[i] = (*it)->GetUrl(); - placesNamesList[i] = (*it)->GetName(); + placesUrlsList[i] = ( *it )->GetUrl(); + placesNamesList[i] = ( *it )->GetName(); ++i; } - std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(m_context)); - officecfg::Office::Common::Misc::FilePickerPlacesUrls::set(placesUrlsList, batch); - officecfg::Office::Common::Misc::FilePickerPlacesNames::set(placesNamesList, batch); + std::shared_ptr< comphelper::ConfigurationChanges > batch( comphelper::ConfigurationChanges::create( m_context ) ); + officecfg::Office::Common::Misc::FilePickerPlacesUrls::set( placesUrlsList, batch ); + officecfg::Office::Common::Misc::FilePickerPlacesNames::set( placesNamesList, batch ); batch->commit(); } @@ -371,45 +371,45 @@ void RemoteFilesDialog::Resize() { ModalDialog::Resize(); - if(m_pFileView && m_pContainer) + if( m_pFileView && m_pContainer ) { Size aSize = m_pContainer->GetSizePixel(); - m_pFileView->SetSizePixel(aSize); + m_pFileView->SetSizePixel( aSize ); } } -OUString lcl_GetServiceType(ServicePtr pService) +OUString lcl_GetServiceType( ServicePtr pService ) { INetProtocol aProtocol = pService->GetUrlObject().GetProtocol(); - switch(aProtocol) + switch( aProtocol ) { case INetProtocol::Ftp: - return OUString("FTP"); + return OUString( "FTP" ); case INetProtocol::Cmis: { OUString sHost = pService->GetUrlObject().GetHost( INetURLObject::DECODE_WITH_CHARSET ); - if(sHost.startsWith(GDRIVE_BASE_URL)) - return OUString("Google Drive"); - else if(sHost.startsWith(ALFRESCO_CLOUD_BASE_URL)) - return OUString("Alfresco Cloud"); - else if(sHost.startsWith(ONEDRIVE_BASE_URL)) - return OUString("OneDrive"); + if( sHost.startsWith( GDRIVE_BASE_URL ) ) + return OUString( "Google Drive" ); + else if( sHost.startsWith( ALFRESCO_CLOUD_BASE_URL ) ) + return OUString( "Alfresco Cloud" ); + else if( sHost.startsWith( ONEDRIVE_BASE_URL ) ) + return OUString( "OneDrive" ); - return OUString("CMIS"); + return OUString( "CMIS" ); } case INetProtocol::Smb: - return OUString("Windows Share"); + return OUString( "Windows Share" ); case INetProtocol::File: - return OUString("SSH"); + return OUString( "SSH" ); case INetProtocol::Http: - return OUString("WebDAV"); + return OUString( "WebDAV" ); case INetProtocol::Https: - return OUString("WebDAV"); + return OUString( "WebDAV" ); case INetProtocol::Generic: - return OUString("SSH"); + return OUString( "SSH" ); default: - return OUString(""); + return OUString( "" ); } } @@ -419,30 +419,30 @@ void RemoteFilesDialog::FillServicesListbox() m_aServices.clear(); // Load from user settings - Sequence< OUString > placesUrlsList(officecfg::Office::Common::Misc::FilePickerPlacesUrls::get(m_context)); - Sequence< OUString > placesNamesList(officecfg::Office::Common::Misc::FilePickerPlacesNames::get(m_context)); + Sequence< OUString > placesUrlsList( officecfg::Office::Common::Misc::FilePickerPlacesUrls::get( m_context ) ); + Sequence< OUString > placesNamesList( officecfg::Office::Common::Misc::FilePickerPlacesNames::get( m_context ) ); - for(sal_Int32 nPlace = 0; nPlace < placesUrlsList.getLength() && nPlace < placesNamesList.getLength(); ++nPlace) + for( sal_Int32 nPlace = 0; nPlace < placesUrlsList.getLength() && nPlace < placesNamesList.getLength(); ++nPlace ) { - ServicePtr pService(new Place(placesNamesList[nPlace], placesUrlsList[nPlace], true)); - m_aServices.push_back(pService); + ServicePtr pService( new Place( placesNamesList[nPlace], placesUrlsList[nPlace], true ) ); + m_aServices.push_back( pService ); // Add to the listbox only remote services, not local bookmarks - if(!pService->IsLocal()) + if( !pService->IsLocal() ) { - OUString sPrefix = lcl_GetServiceType(pService); + OUString sPrefix = lcl_GetServiceType( pService ); - if(!sPrefix.isEmpty()) + if( !sPrefix.isEmpty() ) sPrefix += ": "; - m_pServices_lb->InsertEntry(sPrefix + placesNamesList[nPlace]); + m_pServices_lb->InsertEntry( sPrefix + placesNamesList[nPlace] ); } } - if(m_pServices_lb->GetEntryCount() > 0) - m_pServices_lb->SelectEntryPos(0); + if( m_pServices_lb->GetEntryCount() > 0 ) + m_pServices_lb->SelectEntryPos( 0 ); else - m_pServices_lb->Enable(false); + m_pServices_lb->Enable( false ); } int RemoteFilesDialog::GetSelectedServicePos() @@ -451,15 +451,15 @@ int RemoteFilesDialog::GetSelectedServicePos() int nPos = 0; int i = -1; - if(m_aServices.size() == 0) + if( m_aServices.size() == 0 ) return -1; - while(nPos < (int)m_aServices.size()) + while( nPos < ( int )m_aServices.size() ) { - while(m_aServices[nPos]->IsLocal()) + while( m_aServices[nPos]->IsLocal() ) nPos++; i++; - if(i == nSelected) + if( i == nSelected ) break; nPos++; } @@ -472,7 +472,7 @@ void RemoteFilesDialog::AddFilter( OUString sName, OUString sType ) m_aFilters.push_back( sType ); m_pFilter_lb->InsertEntry( sName ); - if(m_pFilter_lb->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND) + if( m_pFilter_lb->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND ) m_pFilter_lb->SelectEntryPos( 0 ); } @@ -481,13 +481,13 @@ OUString RemoteFilesDialog::GetPath() const return m_sPath; } -OUString RemoteFilesDialog::getCurrentFilter() +OUString RemoteFilesDialog::GetCurrentFilter() { OUString sFilter; int nPos = m_pFilter_lb->GetSelectEntryPos(); - if(nPos != LISTBOX_ENTRY_NOTFOUND) + if( nPos != LISTBOX_ENTRY_NOTFOUND ) sFilter = m_aFilters[nPos]; else sFilter = FILTER_ALL; @@ -499,10 +499,10 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString sURL ) { FileViewResult eResult = eFailure; - if(m_pFileView) + if( m_pFileView ) { OUStringList BlackList; - OUString sFilter = getCurrentFilter(); + OUString sFilter = GetCurrentFilter(); m_pFileView->EndInplaceEditing( false ); eResult = m_pFileView->Initialize( sURL, sFilter, NULL, BlackList ); @@ -522,24 +522,24 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString sURL ) IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl ) { - ScopedVclPtrInstance< PlaceEditDialog > aDlg(this); + ScopedVclPtrInstance< PlaceEditDialog > aDlg( this ); short aRetCode = aDlg->Execute(); - switch(aRetCode) + switch( aRetCode ) { case RET_OK : { ServicePtr newService = aDlg->GetPlace(); - m_aServices.push_back(newService); - m_pServices_lb->Enable(true); + m_aServices.push_back( newService ); + m_pServices_lb->Enable( true ); - OUString sPrefix = lcl_GetServiceType(newService); + OUString sPrefix = lcl_GetServiceType( newService ); if(!sPrefix.isEmpty()) sPrefix += ": "; - m_pServices_lb->InsertEntry(sPrefix + newService->GetName()); - m_pServices_lb->SelectEntryPos(m_pServices_lb->GetEntryCount() - 1); + m_pServices_lb->InsertEntry( sPrefix + newService->GetName() ); + m_pServices_lb->SelectEntryPos( m_pServices_lb->GetEntryCount() - 1 ); m_bIsUpdated = true; break; @@ -580,27 +580,27 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectServiceHdl ) IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void ) { - OString sIdent(pButton->GetCurItemIdent()); - if(sIdent == "edit_service" && m_pServices_lb->GetEntryCount() > 0) + OString sIdent( pButton->GetCurItemIdent() ); + if( sIdent == "edit_service" && m_pServices_lb->GetEntryCount() > 0 ) { unsigned int nSelected = m_pServices_lb->GetSelectEntryPos(); int nPos = GetSelectedServicePos(); - if(nPos > 0) + if( nPos > 0 ) { - ScopedVclPtrInstance< PlaceEditDialog > aDlg(this, m_aServices[nPos]); + ScopedVclPtrInstance< PlaceEditDialog > aDlg( this, m_aServices[nPos] ); short aRetCode = aDlg->Execute(); - switch(aRetCode) + switch( aRetCode ) { case RET_OK : { ServicePtr pEditedService = aDlg->GetPlace(); m_aServices[nPos] = pEditedService; - m_pServices_lb->RemoveEntry(nSelected); - m_pServices_lb->InsertEntry(pEditedService->GetName(), nSelected); - m_pServices_lb->SelectEntryPos(nSelected); + m_pServices_lb->RemoveEntry( nSelected ); + m_pServices_lb->InsertEntry( pEditedService->GetName(), nSelected ); + m_pServices_lb->SelectEntryPos( nSelected ); m_bIsUpdated = true; break; @@ -612,26 +612,26 @@ IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, }; } } - else if(sIdent == "delete_service" && m_pServices_lb->GetEntryCount() > 0) + else if( sIdent == "delete_service" && m_pServices_lb->GetEntryCount() > 0 ) { unsigned int nSelected = m_pServices_lb->GetSelectEntryPos(); int nPos = GetSelectedServicePos(); - if(nPos > 0) + if( nPos > 0 ) { // TODO: Confirm dialog - m_aServices.erase(m_aServices.begin() + nPos); - m_pServices_lb->RemoveEntry(nSelected); + m_aServices.erase( m_aServices.begin() + nPos ); + m_pServices_lb->RemoveEntry( nSelected ); - if(m_pServices_lb->GetEntryCount() > 0) + if( m_pServices_lb->GetEntryCount() > 0 ) { - m_pServices_lb->SelectEntryPos(0); + m_pServices_lb->SelectEntryPos( 0 ); } else { m_pServices_lb->SetNoSelection(); - m_pServices_lb->Enable(false); + m_pServices_lb->Enable( false ); } m_bIsUpdated = true; @@ -678,8 +678,8 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SplitHdl ) sal_Int32 nSplitPos = m_pSplitter->GetSplitPosPixel(); // Resize the tree list box - sal_Int32 nPlaceX = m_pTreeView->GetPosPixel( ).X(); - Size placeSize = m_pTreeView->GetSizePixel( ); + sal_Int32 nPlaceX = m_pTreeView->GetPosPixel().X(); + Size placeSize = m_pTreeView->GetSizePixel(); placeSize.Width() = nSplitPos - nPlaceX; m_pTreeView->SetSizePixel( placeSize ); commit bc085941395cc8863074aa57e9f4865e4bad9ab4 Author: Szymon KÅos <eszka...@gmail.com> Date: Thu Jun 25 11:55:48 2015 +0200 Added a subclass of SvTreeView, tree's code moved to it Change-Id: Ide6ea470ac198e02e42f8cd07aff72005e2f78e9 diff --git a/include/svtools/RemoteFilesDialog.hxx b/include/svtools/RemoteFilesDialog.hxx index 033e8c0..0b8822c 100644 --- a/include/svtools/RemoteFilesDialog.hxx +++ b/include/svtools/RemoteFilesDialog.hxx @@ -64,6 +64,7 @@ typedef ::com::sun::star::uno::Sequence<OUString> OUStringList; class FileViewContainer; class Breadcrumb; +class FolderTree; class SVT_DLLPUBLIC RemoteFilesDialog : public ModalDialog { @@ -89,9 +90,6 @@ private: OUString m_sPath; - Reference< XCommandEnvironment > m_xEnv; - ::osl::Mutex m_aMutex; - VclPtr<PushButton> m_pOpen_btn; VclPtr<PushButton> m_pSave_btn; VclPtr<CancelButton> m_pCancel_btn; @@ -99,7 +97,7 @@ private: VclPtr<ListBox> m_pServices_lb; VclPtr<Breadcrumb> m_pPath; VclPtr<Splitter> m_pSplitter; - VclPtr<SvTreeListBox> m_pTreeView; + VclPtr<FolderTree> m_pTreeView; VclPtr<SvtFileView> m_pFileView; VclPtr<FileViewContainer> m_pContainer; VclPtr<ListBox> m_pFilter_lb; @@ -117,9 +115,6 @@ private: FileViewResult OpenURL( OUString sURL ); - void fillTreeEntry( SvTreeListEntry* pParent ); - void setTreePath( OUString sPath ); - DECL_LINK ( AddServiceHdl, void * ); DECL_LINK ( SelectServiceHdl, void * ); DECL_LINK_TYPED ( EditServiceMenuHdl, MenuButton *, void ); @@ -131,8 +126,7 @@ private: DECL_LINK( SelectFilterHdl, void * ); - DECL_LINK( TreeSelectHdl, SvTreeListBox * ); - DECL_LINK( TreeExpandHdl, SvTreeListBox * ); + DECL_LINK( TreeSelectHdl, FolderTree * ); DECL_LINK( SelectBreadcrumbHdl, Breadcrumb * ); diff --git a/svtools/source/dialogs/RemoteFilesDialog.cxx b/svtools/source/dialogs/RemoteFilesDialog.cxx index c5aef0f..cee1b7b 100644 --- a/svtools/source/dialogs/RemoteFilesDialog.cxx +++ b/svtools/source/dialogs/RemoteFilesDialog.cxx @@ -10,22 +10,128 @@ #include <svtools/RemoteFilesDialog.hxx> #include "../contnr/contentenumeration.hxx" +class FolderTree : public SvTreeListBox +{ +private: + Reference< XCommandEnvironment > m_xEnv; + ::osl::Mutex m_aMutex; + +public: + FolderTree( vcl::Window* pParent, WinBits nBits ) + : SvTreeListBox( pParent, nBits ) + { + Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext(); + Reference< XInteractionHandler > xInteractionHandler( + InteractionHandler::createWithParent( xContext, 0 ), UNO_QUERY_THROW ); + m_xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() ); + } + + virtual void RequestingChildren( SvTreeListEntry* pEntry ) + { + FillTreeEntry( pEntry ); + } + + void FillTreeEntry( SvTreeListEntry* pEntry ) + { + // fill only empty entries + if( pEntry && GetChildCount( pEntry ) == 0 ) + { + ::std::vector< SortingData_Impl* > aContent; + + FileViewContentEnumerator* pContentEnumerator = new FileViewContentEnumerator( + m_xEnv, aContent, m_aMutex, NULL ); + + OUString* pURL = static_cast< OUString* >( pEntry->GetUserData() ); + + if( pURL ) + { + FolderDescriptor aFolder( *pURL ); + Sequence< OUString > aBlackList; + + EnumerationResult eResult = + pContentEnumerator->enumerateFolderContentSync( aFolder, aBlackList ); + + if ( SUCCESS == eResult ) + { + for( unsigned int i = 0; i < aContent.size(); i++ ) + { + if( aContent[i]->mbIsFolder ) + { + SvTreeListEntry* pNewEntry = InsertEntry( aContent[i]->GetTitle(), pEntry, true ); + + OUString* sData = new OUString( aContent[i]->maTargetURL ); + pNewEntry->SetUserData( static_cast< void* >( sData ) ); + } + } + } + } + } + } + + void SetTreePath( OUString sUrl ) + { + INetURLObject aUrl( sUrl ); + aUrl.setFinalSlash(); + + OUString sPath = aUrl.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); + + SvTreeListEntry* pEntry = First(); + bool end = false; + + while( pEntry && !end ) + { + if( pEntry->GetUserData() ) + { + OUString sNodeUrl = *static_cast< OUString* >( pEntry->GetUserData() ); + + INetURLObject aUrlObj( sNodeUrl ); + aUrlObj.setFinalSlash(); + + sNodeUrl = aUrlObj.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); + + if( sPath == sNodeUrl ) + { + Select( pEntry ); + + if( !IsExpanded( pEntry ) ) + Expand( pEntry ); + + end = true; + } + else if( sPath.startsWith( sNodeUrl ) ) + { + if( !IsExpanded( pEntry ) ) + Expand( pEntry ); + + pEntry = FirstChild( pEntry ); + } + else + { + pEntry = NextSibling( pEntry ); + } + } + else + break; + } + } +}; + class FileViewContainer : public vcl::Window { private: - VclPtr<SvtFileView> m_pFileView; - VclPtr<SvTreeListBox> m_pTreeView; - VclPtr<Splitter> m_pSplitter; + VclPtr< SvtFileView > m_pFileView; + VclPtr< FolderTree > m_pTreeView; + VclPtr< Splitter > m_pSplitter; int m_nCurrentFocus; vcl::Window* m_pFocusWidgets[4]; public: - FileViewContainer(vcl::Window *pParent) - : Window(pParent, WB_TABSTOP) - , m_pFileView(NULL) - , m_pTreeView(NULL) - , m_pSplitter(NULL) + FileViewContainer( vcl::Window *pParent ) + : Window( pParent, WB_TABSTOP ) + , m_pFileView( NULL ) + , m_pTreeView( NULL ) + , m_pSplitter( NULL ) { } @@ -41,11 +147,11 @@ class FileViewContainer : public vcl::Window vcl::Window::dispose(); } - void init(SvtFileView* pFileView, + void init( SvtFileView* pFileView, Splitter* pSplitter, - SvTreeListBox* pTreeView, + FolderTree* pTreeView, vcl::Window* pPrevSibling, - vcl::Window* pNextSibling) + vcl::Window* pNextSibling ) { m_pFileView = pFileView; m_pTreeView = pTreeView; @@ -60,39 +166,39 @@ class FileViewContainer : public vcl::Window { Window::Resize(); - if(!m_pFileView || !m_pTreeView) + if( !m_pFileView || !m_pTreeView ) return; Size aSize = GetSizePixel(); Point aPos( m_pFileView->GetPosPixel() ); - Size aNewSize(aSize.Width() - aPos.X(), aSize.Height()); + Size aNewSize( aSize.Width() - aPos.X(), aSize.Height() ); m_pFileView->SetSizePixel( aNewSize ); // Resize the Splitter to fit the height - Size splitterNewSize = m_pSplitter->GetSizePixel( ); + Size splitterNewSize = m_pSplitter->GetSizePixel(); splitterNewSize.Height() = aSize.Height(); m_pSplitter->SetSizePixel( splitterNewSize ); - sal_Int32 nMinX = m_pTreeView->GetPosPixel( ).X( ); - sal_Int32 nMaxX = m_pFileView->GetPosPixel( ).X( ) + m_pFileView->GetSizePixel( ).Width() - nMinX; + sal_Int32 nMinX = m_pTreeView->GetPosPixel().X(); + sal_Int32 nMaxX = m_pFileView->GetPosPixel().X() + m_pFileView->GetSizePixel().Width() - nMinX; m_pSplitter->SetDragRectPixel( Rectangle( Point( nMinX, 0 ), Size( nMaxX, aSize.Width() ) ) ); // Resize the tree list box to fit the height of the FileView - Size placesNewSize(m_pTreeView->GetSizePixel()); + Size placesNewSize( m_pTreeView->GetSizePixel() ); placesNewSize.Height() = aSize.Height(); m_pTreeView->SetSizePixel( placesNewSize ); } - void changeFocus(bool bReverse) + void changeFocus( bool bReverse ) { - if(!bReverse && m_nCurrentFocus < 4) + if( !bReverse && m_nCurrentFocus < 4 ) { - m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus(true); + m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true ); m_pFocusWidgets[m_nCurrentFocus]->GrabFocus(); } - else if(m_nCurrentFocus > 0) + else if( m_nCurrentFocus > 0 ) { - m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus(true); + m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus( true ); m_pFocusWidgets[m_nCurrentFocus]->GrabFocus(); } } @@ -100,24 +206,24 @@ class FileViewContainer : public vcl::Window virtual void GetFocus() SAL_OVERRIDE { m_nCurrentFocus = 1; - m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(true); + m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus( true ); m_pFocusWidgets[m_nCurrentFocus]->GrabFocus(); } - virtual bool Notify(NotifyEvent& rNEvt) + virtual bool Notify( NotifyEvent& rNEvt ) { - if(rNEvt.GetType() == MouseNotifyEvent::KEYINPUT) + if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT ) { const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent(); const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode(); bool bShift = rCode.IsShift(); - if(rCode.GetCode() == KEY_TAB) + if( rCode.GetCode() == KEY_TAB ) { - changeFocus(bShift); + changeFocus( bShift ); return true; } } - return Window::Notify(rNEvt); + return Window::Notify( rNEvt ); } }; @@ -137,11 +243,6 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) get(m_pFilter_lb, "filter_lb"); get(m_pName_ed, "name_ed"); - Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext(); - Reference< XInteractionHandler > xInteractionHandler( - InteractionHandler::createWithParent(xContext, 0), UNO_QUERY_THROW ); - m_xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() ); - m_eMode = (nBits & WB_SAVEAS) ? REMOTEDLG_MODE_SAVE : REMOTEDLG_MODE_OPEN; m_eType = (nBits & WB_PATH) ? REMOTEDLG_TYPE_PATHDLG : REMOTEDLG_TYPE_FILEDLG; m_bMultiselection = (nBits & WB_MULTISELECTION) ? true : false; @@ -190,7 +291,7 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) m_pSplitter->SetSplitHdl( LINK( this, RemoteFilesDialog, SplitHdl ) ); m_pSplitter->Show(); - m_pTreeView = VclPtr<SvTreeListBox>::Create( m_pContainer, WB_BORDER | WB_SORT | WB_TABSTOP ); + m_pTreeView = VclPtr<FolderTree>::Create( m_pContainer, WB_BORDER | WB_SORT | WB_TABSTOP ); Size aSize(100, 200); m_pTreeView->set_height_request(aSize.Height()); m_pTreeView->set_width_request(aSize.Width()); @@ -200,7 +301,6 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) m_pTreeView->SetDefaultExpandedEntryBmp(m_aFolderImage); m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) ); - m_pTreeView->SetExpandingHdl( LINK( this, RemoteFilesDialog, TreeExpandHdl ) ); sal_Int32 nPosX = m_pTreeView->GetSizePixel().Width(); m_pSplitter->SetPosPixel(Point(nPosX, 0)); @@ -410,7 +510,7 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString sURL ) if( eResult == eSuccess ) { m_pPath->SetURL( sURL ); - setTreePath( sURL ); + m_pTreeView->SetTreePath( sURL ); m_pFilter_lb->Enable( true ); m_pName_ed->Enable( true ); m_pContainer->Enable( true ); @@ -420,98 +520,6 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString sURL ) return eResult; } -void RemoteFilesDialog::fillTreeEntry( SvTreeListEntry* pParent ) -{ - if( pParent && !m_pTreeView->IsExpanded( pParent ) ) - { - // fill only empty entries - containing only dummy entry - if( m_pTreeView->GetChildCount( pParent ) == 1 && pParent->GetUserData() ) - { - ::std::vector< SortingData_Impl* > aContent; - - FileViewContentEnumerator* pContentEnumerator = new FileViewContentEnumerator( - m_xEnv, aContent, m_aMutex, NULL ); - - OUString* pURL = static_cast< OUString* >( pParent->GetUserData() ); - - if( pURL ) - { - FolderDescriptor aFolder( *pURL ); - Sequence< OUString > aBlackList; - - EnumerationResult eResult = - pContentEnumerator->enumerateFolderContentSync( aFolder, aBlackList ); - - if ( SUCCESS == eResult ) - { - unsigned int nChilds = 0; - - for( unsigned int i = 0; i < aContent.size(); i++ ) - { - if( aContent[i]->mbIsFolder ) - { - SvTreeListEntry* pEntry = m_pTreeView->InsertEntry( aContent[i]->GetTitle(), pParent, true ); - - OUString* sData = new OUString( aContent[i]->maTargetURL ); - pEntry->SetUserData( static_cast< void* >( sData ) ); - - nChilds++; - } - } - } - } - } - } -} - -void RemoteFilesDialog::setTreePath( OUString sUrl ) -{ - INetURLObject aURL( sUrl ); - aURL.setFinalSlash(); - - OUString sPath = aURL.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); - - SvTreeListEntry* pEntry = m_pTreeView->First(); - bool end = false; - - while( pEntry && !end ) - { - if( pEntry->GetUserData() ) - { - OUString sNodeUrl = *static_cast< OUString* >( pEntry->GetUserData() ); - - INetURLObject aUrlObj( sNodeUrl ); - aUrlObj.setFinalSlash(); - - sNodeUrl = aUrlObj.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); - - if( sPath == sNodeUrl) - { - m_pTreeView->Select( pEntry ); - - if( !m_pTreeView->IsExpanded( pEntry ) ) - m_pTreeView->Expand( pEntry ); - - end = true; - } - else if( sPath.startsWith( sNodeUrl ) ) - { - if( !m_pTreeView->IsExpanded( pEntry ) ) - m_pTreeView->Expand( pEntry ); - - pEntry = m_pTreeView->FirstChild( pEntry ); - pEntry = m_pTreeView->NextSibling( pEntry ); - } - else - { - pEntry = m_pTreeView->NextSibling( pEntry ); - } - } - else - break; - } -} - IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl ) { ScopedVclPtrInstance< PlaceEditDialog > aDlg(this); @@ -549,7 +557,7 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectServiceHdl ) { int nPos = GetSelectedServicePos(); - if(nPos > 0) + if( nPos > 0 ) { OUString sURL = m_aServices[nPos]->GetUrl(); OUString sName = m_aServices[nPos]->GetName(); @@ -699,7 +707,7 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectFilterHdl ) return 1; } -IMPL_LINK ( RemoteFilesDialog, TreeSelectHdl, SvTreeListBox *, pBox ) +IMPL_LINK ( RemoteFilesDialog, TreeSelectHdl, FolderTree *, pBox ) { OUString* sURL = static_cast< OUString* >( pBox->GetHdlEntry()->GetUserData() ); @@ -709,13 +717,6 @@ IMPL_LINK ( RemoteFilesDialog, TreeSelectHdl, SvTreeListBox *, pBox ) return 1; } -IMPL_LINK ( RemoteFilesDialog, TreeExpandHdl, SvTreeListBox *, pBox ) -{ - fillTreeEntry( pBox->GetHdlEntry() ); - - return 1; -} - IMPL_LINK ( RemoteFilesDialog, SelectBreadcrumbHdl, Breadcrumb*, pPtr ) { if( pPtr )
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits