include/svtools/RemoteFilesDialog.hxx | 24 +++++ svtools/source/dialogs/RemoteFilesDialog.cxx | 109 +++++++++++++++++++++++++-- 2 files changed, 127 insertions(+), 6 deletions(-)
New commits: commit f5db2d8805b16b2f2ef3c5adb882f6c18cddcc1e Author: Szymon KÅos <[email protected]> Date: Sat Jun 6 17:15:59 2015 +0200 TreeView filling Change-Id: I24963a23d1821fafecff5025dcacde255c5244f6 diff --git a/include/svtools/RemoteFilesDialog.hxx b/include/svtools/RemoteFilesDialog.hxx index e831a32..3725be3 100644 --- a/include/svtools/RemoteFilesDialog.hxx +++ b/include/svtools/RemoteFilesDialog.hxx @@ -13,6 +13,8 @@ #include <svtools/svtdllapi.h> #include <svtools/place.hxx> #include <svtools/PlaceEditDialog.hxx> +#include <svtools/svtools.hrc> +#include <svtools/svtresid.hxx> #include <vcl/button.hxx> #include <vcl/menubtn.hxx> @@ -27,9 +29,20 @@ #include <officecfg/Office/Common.hxx> #include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/ucb/XProgressHandler.hpp> +#include <com/sun/star/task/XInteractionHandler.hpp> +#include <com/sun/star/task/InteractionHandler.hpp> +#include <ucbhelper/commandenvironment.hxx> #include <vector> +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::ucb; +using namespace ::com::sun::star::task; +using namespace ::comphelper; +using namespace ::svt; + #define WB_MULTISELECTION 0x20000000L #define FILTER_ALL "*.*" @@ -69,6 +82,10 @@ private: SvtRemoteDlgType m_eType; bool m_bMultiselection; bool m_bIsUpdated; + Image m_aFolderImage; + + Reference< XCommandEnvironment > m_xEnv; + ::osl::Mutex m_aMutex; VclPtr<PushButton> m_pOpen_btn; VclPtr<PushButton> m_pSave_btn; @@ -93,7 +110,9 @@ private: OUString getCurrentFilter(); - void OpenURL( OUString sURL ); + FileViewResult OpenURL( OUString sURL ); + + void fillTreeEntry( SvTreeListEntry* pParent ); DECL_LINK ( AddServiceHdl, void * ); DECL_LINK ( SelectServiceHdl, void * ); @@ -105,6 +124,9 @@ private: DECL_LINK( SplitHdl, void * ); DECL_LINK( SelectFilterHdl, void * ); + + DECL_LINK( TreeSelectHdl, SvTreeListBox * ); + DECL_LINK( TreeExpandHdl, SvTreeListBox * ); }; #endif // INCLUDED_SVTOOLS_REMOTEFILESDIALOG_HXX diff --git a/svtools/source/dialogs/RemoteFilesDialog.cxx b/svtools/source/dialogs/RemoteFilesDialog.cxx index 1c32612..00b20db 100644 --- a/svtools/source/dialogs/RemoteFilesDialog.cxx +++ b/svtools/source/dialogs/RemoteFilesDialog.cxx @@ -8,8 +8,7 @@ */ #include <svtools/RemoteFilesDialog.hxx> - -using namespace ::com::sun::star::uno; +#include "../contnr/contentenumeration.hxx" class FileViewContainer : public vcl::Window { @@ -79,6 +78,7 @@ 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) @@ -92,6 +92,11 @@ 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; @@ -138,6 +143,11 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) 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->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) ); + m_pTreeView->SetExpandedHdl( LINK( this, RemoteFilesDialog, TreeExpandHdl ) ); sal_Int32 nPosX = m_pTreeView->GetSizePixel().Width(); m_pSplitter->SetPosPixel(Point(nPosX, 0)); @@ -287,12 +297,13 @@ OUString RemoteFilesDialog::getCurrentFilter() return sFilter; } -void RemoteFilesDialog::OpenURL( OUString sURL ) +FileViewResult RemoteFilesDialog::OpenURL( OUString sURL ) { + FileViewResult eResult = eFailure; + if(m_pFileView) { OUStringList BlackList; - FileViewResult eResult = eFailure; OUString sFilter = getCurrentFilter(); m_pFileView->EndInplaceEditing( false ); @@ -306,6 +317,68 @@ void RemoteFilesDialog::OpenURL( OUString sURL ) m_pContainer->Enable( true ); } } + + return eResult; +} + +void RemoteFilesDialog::fillTreeEntry( SvTreeListEntry* pParent ) +{ + if( pParent && m_pTreeView->IsExpanded( pParent ) ) + { + // remove childs + + if ( pParent ) + { + SvTreeList* pModel = m_pTreeView->GetModel(); + + if( pModel->HasChildren( pParent ) ) + { + SvTreeListEntries& rEntries = pModel->GetChildList( pParent ); + rEntries.clear(); + } + } + + // fill with new ones + + ::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++; + } + } + + if( nChilds == 0 ) + { + m_pTreeView->Collapse( pParent ); + } + } + } + } } IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl ) @@ -343,7 +416,16 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectServiceHdl ) { OUString sURL = m_aServices[nPos]->GetUrl(); - OpenURL( sURL ); + if( OpenURL( sURL ) == eSuccess ) + { + m_pTreeView->Clear(); + + SvTreeListEntry* pRoot = m_pTreeView->InsertEntry( m_pServices_lb->GetSelectEntry(), NULL, true ); + OUString* sData = new OUString( sURL ); + pRoot->SetUserData( static_cast< void* >( sData ) ); + + m_pTreeView->Expand( pRoot ); + } } return 1; @@ -464,4 +546,21 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectFilterHdl ) return 1; } +IMPL_LINK ( RemoteFilesDialog, TreeSelectHdl, SvTreeListBox *, pBox ) +{ + OUString* sURL = static_cast< OUString* >( pBox->GetHdlEntry()->GetUserData() ); + + if( sURL ) + OpenURL( *sURL ); + + return 1; +} + +IMPL_LINK ( RemoteFilesDialog, TreeExpandHdl, SvTreeListBox *, pBox ) +{ + fillTreeEntry( pBox->GetHdlEntry() ); + + return 1; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
