diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-07-11 11:37:25 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-07-11 11:49:16 +0200 |
commit | bd5262540a97e0115a070a7b34479b0661e94248 (patch) | |
tree | d4f47994430ce4a35a2af911e55ef932fe2e6b64 | |
parent | Resolves: rhbz#836937 insanely slow with Zemberek installed (diff) | |
download | core-bd5262540a97e0115a070a7b34479b0661e94248.tar.gz core-bd5262540a97e0115a070a7b34479b0661e94248.zip |
fpicker: Add place dialog, added CMIS repositories list
Users don't have to open the XML file to know what repository they want
to use... we are now doing it for them and showing the repositories in
a dropdown listbox
Change-Id: I7c20c5a2880061d1ede35a17001e2a75c49a6e88
-rw-r--r-- | fpicker/source/office/PlaceEditDialog.cxx | 24 | ||||
-rw-r--r-- | fpicker/source/office/PlaceEditDialog.hrc | 3 | ||||
-rw-r--r-- | fpicker/source/office/PlaceEditDialog.hxx | 10 | ||||
-rw-r--r-- | fpicker/source/office/PlaceEditDialog.src | 20 | ||||
-rw-r--r-- | fpicker/source/office/ServerDetailsControls.cxx | 120 | ||||
-rw-r--r-- | fpicker/source/office/ServerDetailsControls.hxx | 19 | ||||
-rw-r--r-- | fpicker/source/office/iodlg.cxx | 3 | ||||
-rw-r--r-- | icon-themes/crystal/res/reload.png (renamed from icon-themes/crystal/svx/res/reload.png) | bin | 315 -> 315 bytes | |||
-rw-r--r-- | icon-themes/galaxy/res/reload.png (renamed from icon-themes/galaxy/svx/res/reload.png) | bin | 583 -> 583 bytes | |||
-rw-r--r-- | icon-themes/human/res/reload.png (renamed from icon-themes/human/svx/res/reload.png) | bin | 805 -> 805 bytes | |||
-rw-r--r-- | icon-themes/industrial/res/lc05508.png | bin | 1245 -> 0 bytes | |||
-rw-r--r-- | icon-themes/industrial/res/reload.png (renamed from icon-themes/industrial/svx/res/reload.png) | bin | 621 -> 621 bytes | |||
-rw-r--r-- | icon-themes/oxygen/res/reload.png (renamed from icon-themes/oxygen/svx/res/reload.png) | bin | 315 -> 315 bytes | |||
-rw-r--r-- | icon-themes/tango/res/lc05508.png | bin | 1367 -> 0 bytes | |||
-rw-r--r-- | icon-themes/tango/res/reload.png | bin | 0 -> 912 bytes |
15 files changed, 181 insertions, 18 deletions
diff --git a/fpicker/source/office/PlaceEditDialog.cxx b/fpicker/source/office/PlaceEditDialog.cxx index d305bc409c33..7480553465d1 100644 --- a/fpicker/source/office/PlaceEditDialog.cxx +++ b/fpicker/source/office/PlaceEditDialog.cxx @@ -60,7 +60,8 @@ PlaceEditDialog::PlaceEditDialog( Window* pParent ) : m_aFTCmisBinding( this, SvtResId( FT_ADDPLACE_CMIS_BINDING ) ), m_aEDCmisBinding( this, SvtResId( ED_ADDPLACE_CMIS_BINDING ) ), m_aFTCmisRepository( this, SvtResId( FT_ADDPLACE_CMIS_REPOSITORY ) ), - m_aEDCmisRepository( this, SvtResId( ED_ADDPLACE_CMIS_REPOSITORY ) ), + m_aLBCmisRepository( this, SvtResId( LB_ADDPLACE_CMIS_REPOSITORY ) ), + m_aBTCmisRepoRefresh( this, SvtResId( BT_ADDPLACE_CMIS_REPOREFRESH ) ), m_aFTUsername( this, SvtResId( FT_ADDPLACE_USERNAME ) ), m_aEDUsername( this, SvtResId( ED_ADDPLACE_USERNAME ) ), m_aBTOk( this, SvtResId( BT_ADDPLACE_OK ) ), @@ -77,6 +78,7 @@ PlaceEditDialog::PlaceEditDialog( Window* pParent ) : m_aBTDelete.Hide(); m_aLBServerType.SetSelectHdl( LINK( this, PlaceEditDialog, SelectTypeHdl ) ); + m_aEDUsername.SetModifyHdl( LINK( this, PlaceEditDialog, EditUsernameHdl ) ); InitDetails( ); } @@ -103,7 +105,8 @@ PlaceEditDialog::PlaceEditDialog( Window* pParent, const PlacePtr& pPlace ) : m_aFTCmisBinding( this, SvtResId( FT_ADDPLACE_CMIS_BINDING ) ), m_aEDCmisBinding( this, SvtResId( ED_ADDPLACE_CMIS_BINDING ) ), m_aFTCmisRepository( this, SvtResId( FT_ADDPLACE_CMIS_REPOSITORY ) ), - m_aEDCmisRepository( this, SvtResId( ED_ADDPLACE_CMIS_REPOSITORY ) ), + m_aLBCmisRepository( this, SvtResId( LB_ADDPLACE_CMIS_REPOSITORY ) ), + m_aBTCmisRepoRefresh( this, SvtResId( BT_ADDPLACE_CMIS_REPOREFRESH ) ), m_aFTUsername( this, SvtResId( FT_ADDPLACE_USERNAME ) ), m_aEDUsername( this, SvtResId( ED_ADDPLACE_USERNAME ) ), m_aBTOk( this, SvtResId( BT_ADDPLACE_OK ) ), @@ -148,7 +151,9 @@ rtl::OUString PlaceEditDialog::GetServerUrl() if ( m_pCurrentDetails.get( ) ) { INetURLObject aUrl = m_pCurrentDetails->getUrl(); - aUrl.SetUser( rtl::OUString( m_aEDUsername.GetText( ) ).trim( ) ); + rtl::OUString sUsername = rtl::OUString( m_aEDUsername.GetText( ) ).trim( ); + if ( !sUsername.isEmpty( ) ) + aUrl.SetUser( sUsername ); if ( !aUrl.HasError( ) ) sUrl = aUrl.GetMainURL( INetURLObject::NO_DECODE ); } @@ -212,7 +217,8 @@ void PlaceEditDialog::InitDetails( ) pCmisDetails->addControl( FT_ADDPLACE_CMIS_BINDING, &m_aFTCmisBinding ); pCmisDetails->addControl( ED_ADDPLACE_CMIS_BINDING, &m_aEDCmisBinding ); pCmisDetails->addControl( FT_ADDPLACE_CMIS_REPOSITORY, &m_aFTCmisRepository ); - pCmisDetails->addControl( ED_ADDPLACE_CMIS_REPOSITORY, &m_aEDCmisRepository ); + pCmisDetails->addControl( LB_ADDPLACE_CMIS_REPOSITORY, &m_aLBCmisRepository ); + pCmisDetails->addControl( BT_ADDPLACE_CMIS_REPOREFRESH, &m_aBTCmisRepoRefresh ); pCmisDetails->setChangeHdl( LINK( this, PlaceEditDialog, EditHdl ) ); if ( officecfg::Office::Common::Misc::ExperimentalMode::get() ) @@ -249,6 +255,16 @@ IMPL_LINK ( PlaceEditDialog, EditHdl, void *, EMPTYARG ) return 1; } +IMPL_LINK ( PlaceEditDialog, EditUsernameHdl, void *, EMPTYARG ) +{ + for ( std::vector< boost::shared_ptr< DetailsContainer > >::iterator it = m_aDetailsContainers.begin( ); + it != m_aDetailsContainers.end( ); ++it ) + { + ( *it )->setUsername( rtl::OUString( m_aEDUsername.GetText() ) ); + } + return 1; +} + IMPL_LINK( PlaceEditDialog, SelectTypeHdl, void*, EMPTYARG ) { // Compute the vertical space between two rows diff --git a/fpicker/source/office/PlaceEditDialog.hrc b/fpicker/source/office/PlaceEditDialog.hrc index 74900f72aec7..738d19d66b4a 100644 --- a/fpicker/source/office/PlaceEditDialog.hrc +++ b/fpicker/source/office/PlaceEditDialog.hrc @@ -56,7 +56,8 @@ #define FT_ADDPLACE_CMIS_BINDING 31 #define ED_ADDPLACE_CMIS_BINDING 32 #define FT_ADDPLACE_CMIS_REPOSITORY 33 -#define ED_ADDPLACE_CMIS_REPOSITORY 34 +#define LB_ADDPLACE_CMIS_REPOSITORY 34 +#define BT_ADDPLACE_CMIS_REPOREFRESH 35 #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/fpicker/source/office/PlaceEditDialog.hxx b/fpicker/source/office/PlaceEditDialog.hxx index fd38f13b0d8e..b74eb617300f 100644 --- a/fpicker/source/office/PlaceEditDialog.hxx +++ b/fpicker/source/office/PlaceEditDialog.hxx @@ -71,7 +71,8 @@ private : FixedText m_aFTCmisBinding; Edit m_aEDCmisBinding; FixedText m_aFTCmisRepository; - Edit m_aEDCmisRepository; + ListBox m_aLBCmisRepository; + ImageButton m_aBTCmisRepoRefresh; FixedText m_aFTUsername; Edit m_aEDUsername; @@ -106,10 +107,11 @@ private: void InitDetails( ); - DECL_LINK ( OKHdl, Button * ); - DECL_LINK ( DelHdl, Button * ); - DECL_LINK ( EditHdl, void * ); + DECL_LINK ( OKHdl, Button * ); + DECL_LINK ( DelHdl, Button * ); + DECL_LINK ( EditHdl, void * ); DECL_LINK ( SelectTypeHdl, void * ); + DECL_LINK ( EditUsernameHdl, void * ); }; diff --git a/fpicker/source/office/PlaceEditDialog.src b/fpicker/source/office/PlaceEditDialog.src index 313f25bc16fd..0c312d552456 100644 --- a/fpicker/source/office/PlaceEditDialog.src +++ b/fpicker/source/office/PlaceEditDialog.src @@ -152,11 +152,27 @@ ModalDialog DLG_FPICKER_PLACE_EDIT Size = MAP_APPFONT ( 40 , 10 ) ; Text [ en-US ] = "Repository" ; }; - Edit ED_ADDPLACE_CMIS_REPOSITORY + ListBox LB_ADDPLACE_CMIS_REPOSITORY { Pos = MAP_APPFONT ( 55, 60 ) ; - Size = MAP_APPFONT ( 137 , 12 ) ; + Size = MAP_APPFONT ( 122 , 75 ) ; Border = TRUE ; + DropDown = TRUE; + }; + ImageButton BT_ADDPLACE_CMIS_REPOREFRESH + { + Pos = MAP_APPFONT ( 180, 60 ) ; + Size = MAP_APPFONT ( 12, 12 ); + TabStop = FALSE ; + QuickHelpText [ en-US ] = "Refresh" ; + ButtonImage = Image + { + ImageBitmap = Bitmap + { + File = "reload.png" ; + }; + MaskColor = Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; } ; + }; }; ListBox LB_ADDPLACE_SERVERTYPE { diff --git a/fpicker/source/office/ServerDetailsControls.cxx b/fpicker/source/office/ServerDetailsControls.cxx index bcc9cd3451af..69dfa4f74611 100644 --- a/fpicker/source/office/ServerDetailsControls.cxx +++ b/fpicker/source/office/ServerDetailsControls.cxx @@ -26,7 +26,16 @@ * instead of those above. */ +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/task/XInteractionHandler.hpp> +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/ucb/XContentAccess.hpp> +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <com/sun/star/sdbc/XRow.hpp> + #include <rtl/uri.hxx> +#include <ucbhelper/content.hxx> +#include <ucbhelper/commandenvironment.hxx> #include "PlaceEditDialog.hrc" @@ -35,6 +44,11 @@ #include "ServerDetailsControls.hxx" using namespace std; +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; DetailsContainer::DetailsContainer( ) : m_aControls( ), @@ -273,21 +287,30 @@ bool SmbDetailsContainer::setUrl( const INetURLObject& rUrl ) return bSuccess; } +CmisDetailsContainer::CmisDetailsContainer( ) : + DetailsContainer( ), + m_sUsername( ), + m_xCmdEnv( ) +{ + Reference< XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + Reference< XInteractionHandler > xGlobalInteractionHandler = Reference< XInteractionHandler >( + xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), UNO_QUERY ); + m_xCmdEnv = new ucbhelper::CommandEnvironment( xGlobalInteractionHandler, Reference< XProgressHandler >() ); +} + INetURLObject CmisDetailsContainer::getUrl( ) { rtl::OUString sBindingUrl = rtl::OUString( static_cast< Edit* >( getControl( ED_ADDPLACE_CMIS_BINDING ) )->GetText() ).trim( ); - rtl::OUString sRepo = rtl::OUString( static_cast< Edit* >( getControl( ED_ADDPLACE_CMIS_REPOSITORY ) )->GetText() ).trim( ); rtl::OUString sUrl; - if ( !sBindingUrl.isEmpty( ) && !sRepo.isEmpty() ) + if ( !sBindingUrl.isEmpty( ) && !m_sRepoId.isEmpty() ) { rtl::OUString sEncodedBinding = rtl::Uri::encode( - sBindingUrl + "#" + sRepo, + sBindingUrl + "#" + m_sRepoId, rtl_UriCharClassRelSegment, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8 ); sUrl = "vnd.libreoffice.cmis+atom://" + sEncodedBinding; - INetURLObject test( sUrl ); } return INetURLObject( sUrl ); @@ -308,11 +331,98 @@ bool CmisDetailsContainer::setUrl( const INetURLObject& rUrl ) sRepositoryId = aHostUrl.GetMark( ); static_cast< Edit* >( getControl( ED_ADDPLACE_CMIS_BINDING ) )->SetText( sBindingUrl ); - static_cast< Edit* >( getControl( ED_ADDPLACE_CMIS_REPOSITORY ) )->SetText( sRepositoryId ); } return bSuccess; } +void CmisDetailsContainer::setUsername( const rtl::OUString& rUsername ) +{ + m_sUsername = rtl::OUString( rUsername ); +} + +void CmisDetailsContainer::addControl( sal_uInt16 nId, Control* pControl ) +{ + DetailsContainer::addControl( nId, pControl ); + + // Add listener on BT_ADDPLACE_CMIS_REPOREFRESH + if ( nId == BT_ADDPLACE_CMIS_REPOREFRESH ) + static_cast< ImageButton* >( pControl )->SetClickHdl( LINK( this, CmisDetailsContainer, RefreshReposHdl ) ); + if ( nId == LB_ADDPLACE_CMIS_REPOSITORY ) + static_cast< ListBox* >( pControl )->SetSelectHdl( LINK( this, CmisDetailsContainer, SelectRepoHdl ) ); +} + +void CmisDetailsContainer::selectRepository( ) +{ + // Get the repo ID and call the Change listener + ListBox* pReposList = static_cast< ListBox* >( getControl( LB_ADDPLACE_CMIS_REPOSITORY ) ); + sal_uInt16 nPos = pReposList->GetSelectEntryPos( ); + m_sRepoId = m_aRepoIds[nPos]; + + notifyChange( ); +} + +IMPL_LINK( CmisDetailsContainer, RefreshReposHdl, void *, EMPTYARG ) +{ + rtl::OUString sBindingUrl = rtl::OUString( static_cast< Edit* >( getControl( ED_ADDPLACE_CMIS_BINDING ) )->GetText() ).trim( ); + + // Clean the listbox + ListBox* pReposList = static_cast< ListBox* >( getControl( LB_ADDPLACE_CMIS_REPOSITORY ) ); + pReposList->Clear( ); + m_aRepoIds.clear( ); + + // Compute the URL + rtl::OUString sUrl; + if ( !sBindingUrl.isEmpty( ) ) + { + rtl::OUString sEncodedBinding = rtl::Uri::encode( + sBindingUrl, + rtl_UriCharClassRelSegment, + rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_UTF8 ); + sUrl = "vnd.libreoffice.cmis+atom://" + sEncodedBinding; + } + + // Get the Content + ::ucbhelper::Content aCnt( sUrl, m_xCmdEnv ); + Sequence< rtl::OUString > aProps( 1 ); + aProps[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ); + + try + { + Reference< XResultSet > xResultSet( aCnt.createCursor( aProps ), UNO_QUERY_THROW ); + Reference< XContentAccess > xAccess( xResultSet, UNO_QUERY_THROW ); + while ( xResultSet->next() ) + { + rtl::OUString sURL = xAccess->queryContentIdentifierString( ); + INetURLObject aURL( sURL ); + rtl::OUString sId = aURL.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ); + sId = sId.copy( 1 ); + m_aRepoIds.push_back( sId ); + + Reference< XRow > xRow( xResultSet, UNO_QUERY ); + rtl::OUString sName = xRow->getString( 1 ); + pReposList->InsertEntry( sName ); + } + } + catch ( const Exception& ) + { + } + + // Auto-select the first one + if ( pReposList->GetEntryCount( ) > 0 ) + { + pReposList->SelectEntryPos( 0 ); + selectRepository( ); + } + + return 0; +} + +IMPL_LINK( CmisDetailsContainer, SelectRepoHdl, void *, EMPTYARG ) +{ + selectRepository( ); + return 0; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/fpicker/source/office/ServerDetailsControls.hxx b/fpicker/source/office/ServerDetailsControls.hxx index 6543ded42154..206f1aaa5870 100644 --- a/fpicker/source/office/ServerDetailsControls.hxx +++ b/fpicker/source/office/ServerDetailsControls.hxx @@ -28,6 +28,8 @@ #ifndef _SERVERDETAILSCONTROLS_HXX #define _SERVERDETAILSCONTROLS_HXX +#include <com/sun/star/ucb/XCommandEnvironment.hpp> + #include <tools/urlobj.hxx> #include <vcl/ctrl.hxx> #include <vcl/edit.hxx> @@ -61,6 +63,8 @@ class DetailsContainer */ virtual bool setUrl( const INetURLObject& rUrl ); + virtual void setUsername( const rtl::OUString& /*rUsername*/ ) { }; + protected: void notifyChange( ); @@ -119,12 +123,25 @@ class SmbDetailsContainer : public DetailsContainer class CmisDetailsContainer : public DetailsContainer { + private: + rtl::OUString m_sUsername; + com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > m_xCmdEnv; + std::vector< rtl::OUString > m_aRepoIds; + rtl::OUString m_sRepoId; + public: - CmisDetailsContainer( ) : DetailsContainer( ) { }; + CmisDetailsContainer( ); ~CmisDetailsContainer( ) { }; virtual INetURLObject getUrl( ); virtual bool setUrl( const INetURLObject& rUrl ); + virtual void setUsername( const rtl::OUString& rUsername ); + virtual void addControl( sal_uInt16 nId, Control* pControl ); + + private: + void selectRepository( ); + DECL_LINK ( RefreshReposHdl, void * ); + DECL_LINK ( SelectRepoHdl, void * ); }; #endif diff --git a/fpicker/source/office/iodlg.cxx b/fpicker/source/office/iodlg.cxx index 13540848252b..c461addefd73 100644 --- a/fpicker/source/office/iodlg.cxx +++ b/fpicker/source/office/iodlg.cxx @@ -3349,7 +3349,8 @@ void SvtFileDialog::initDefaultPlaces( ) Sequence< ::rtl::OUString > placesUrlsList(officecfg::Office::Common::Misc::FilePickerPlacesUrls::get(m_context)); Sequence< ::rtl::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) + { PlacePtr pPlace(new Place(placesNamesList[nPlace], placesUrlsList[nPlace], true)); _pImp->_pPlaces->AppendPlace(pPlace); } diff --git a/icon-themes/crystal/svx/res/reload.png b/icon-themes/crystal/res/reload.png Binary files differindex db9d929161fb..db9d929161fb 100644 --- a/icon-themes/crystal/svx/res/reload.png +++ b/icon-themes/crystal/res/reload.png diff --git a/icon-themes/galaxy/svx/res/reload.png b/icon-themes/galaxy/res/reload.png Binary files differindex 4dd843736751..4dd843736751 100644 --- a/icon-themes/galaxy/svx/res/reload.png +++ b/icon-themes/galaxy/res/reload.png diff --git a/icon-themes/human/svx/res/reload.png b/icon-themes/human/res/reload.png Binary files differindex 0e6d155a6d90..0e6d155a6d90 100644 --- a/icon-themes/human/svx/res/reload.png +++ b/icon-themes/human/res/reload.png diff --git a/icon-themes/industrial/res/lc05508.png b/icon-themes/industrial/res/lc05508.png Binary files differdeleted file mode 100644 index fb9dff7cd242..000000000000 --- a/icon-themes/industrial/res/lc05508.png +++ /dev/null diff --git a/icon-themes/industrial/svx/res/reload.png b/icon-themes/industrial/res/reload.png Binary files differindex ed3e59248442..ed3e59248442 100644 --- a/icon-themes/industrial/svx/res/reload.png +++ b/icon-themes/industrial/res/reload.png diff --git a/icon-themes/oxygen/svx/res/reload.png b/icon-themes/oxygen/res/reload.png Binary files differindex db9d929161fb..db9d929161fb 100644 --- a/icon-themes/oxygen/svx/res/reload.png +++ b/icon-themes/oxygen/res/reload.png diff --git a/icon-themes/tango/res/lc05508.png b/icon-themes/tango/res/lc05508.png Binary files differdeleted file mode 100644 index 365bf4f0a963..000000000000 --- a/icon-themes/tango/res/lc05508.png +++ /dev/null diff --git a/icon-themes/tango/res/reload.png b/icon-themes/tango/res/reload.png Binary files differnew file mode 100644 index 000000000000..3fd71d6e5929 --- /dev/null +++ b/icon-themes/tango/res/reload.png |