include/svtools/RemoteFilesDialog.hxx | 7 - include/svtools/breadcrumb.hxx | 62 +++++++++++ svtools/Library_svt.mk | 1 svtools/source/control/breadcrumb.cxx | 142 +++++++++++++++++++++++++++ svtools/source/dialogs/RemoteFilesDialog.cxx | 118 ---------------------- 5 files changed, 209 insertions(+), 121 deletions(-)
New commits: commit c5813bf98886e7de2d92cb9d43bcd3cff58d01c9 Author: Szymon KÅos <eszka...@gmail.com> Date: Wed Jun 10 17:24:12 2015 +0200 added a new mode of showing path in the breadcrumb Change-Id: I0819f2346ee3412d044c2d6c7d3bbc2dd9231ed5 diff --git a/include/svtools/breadcrumb.hxx b/include/svtools/breadcrumb.hxx index 86be5d2..29858d6 100644 --- a/include/svtools/breadcrumb.hxx +++ b/include/svtools/breadcrumb.hxx @@ -19,6 +19,12 @@ #include <vector> +enum SvtBreadcrumbMode +{ + ONLY_CURRENT_PATH = 0, + ALL_VISITED = 1 +}; + class SVT_DLLPUBLIC Breadcrumb : public VclHBox { private: @@ -28,9 +34,12 @@ class SVT_DLLPUBLIC Breadcrumb : public VclHBox OUString m_sRootName; OUString m_sClickedURL; + SvtBreadcrumbMode m_eMode; + Link<> m_aClickHdl; void appendField(); + void clearFields( unsigned int nStartIndex ); DECL_LINK ( ClickLinkHdl, FixedHyperlink* ); @@ -45,6 +54,7 @@ class SVT_DLLPUBLIC Breadcrumb : public VclHBox void SetRootName( const OUString& rURL ); void SetURL( const OUString& rURL ); + void SetMode( SvtBreadcrumbMode eMode ); }; #endif diff --git a/svtools/source/control/breadcrumb.cxx b/svtools/source/control/breadcrumb.cxx index ba2ed5d..c7cbc00 100644 --- a/svtools/source/control/breadcrumb.cxx +++ b/svtools/source/control/breadcrumb.cxx @@ -11,6 +11,7 @@ Breadcrumb::Breadcrumb( vcl::Window* pParent, WinBits nWinStyle ) : VclHBox( pParent, nWinStyle ) { + m_eMode = SvtBreadcrumbMode::ONLY_CURRENT_PATH; set_spacing( 6 ); appendField(); // root } @@ -56,6 +57,8 @@ void Breadcrumb::SetURL( const OUString& rURL ) unsigned int nPos = 0; unsigned int i; + bool bClear = ( m_eMode == SvtBreadcrumbMode::ONLY_CURRENT_PATH ); + m_aLinks[0]->SetText( m_sRootName ); m_aLinks[0]->Show(); m_aLinks[0]->Enable( true ); @@ -71,6 +74,13 @@ void Breadcrumb::SetURL( const OUString& rURL ) unsigned int nEnd = sPath.indexOf( '/', nPos + 1 ); OUString sLabel = OUString( sPath.getStr() + nPos + 1, nEnd - nPos - 1 ); + if( m_eMode == SvtBreadcrumbMode::ALL_VISITED ) + { + if( m_aLinks[i]->GetText() != sLabel ) + bClear = true; + } + + m_aLinks[i]->SetText( sLabel ); m_aLinks[i]->SetURL( INetURLObject::GetScheme( aURL.GetProtocol() ) + aURL.GetHost() @@ -85,13 +95,21 @@ void Breadcrumb::SetURL( const OUString& rURL ) m_aLinks[i - 1]->Enable( false ); m_aSeparators[i - 1]->Hide(); - for( ; i < m_aLinks.size(); i++ ) + if( bClear ) { - m_aLinks[i]->Hide(); - m_aSeparators[i]->Hide(); + clearFields( i ); + } + else + { + for( ; i < m_aLinks.size(); i++ ) + m_aLinks[i]->Enable( true ); } } +void Breadcrumb::SetMode( SvtBreadcrumbMode eMode ) +{ + m_eMode = eMode; +} void Breadcrumb::appendField() { @@ -104,6 +122,15 @@ void Breadcrumb::appendField() m_aSeparators[m_aLinks.size() - 1]->Hide(); } +void Breadcrumb::clearFields( unsigned int nStartIndex ) +{ + for( unsigned int i = nStartIndex; i < m_aLinks.size(); i++ ) + { + m_aLinks[i]->Hide(); + m_aSeparators[i]->Hide(); + } +} + IMPL_LINK ( Breadcrumb, ClickLinkHdl, FixedHyperlink*, pLink ) { m_sClickedURL = pLink->GetURL(); diff --git a/svtools/source/dialogs/RemoteFilesDialog.cxx b/svtools/source/dialogs/RemoteFilesDialog.cxx index b85f1e8..663d719 100644 --- a/svtools/source/dialogs/RemoteFilesDialog.cxx +++ b/svtools/source/dialogs/RemoteFilesDialog.cxx @@ -120,6 +120,7 @@ RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) 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") ); commit e097ae0f42a6e2f57a51ba22844941c2cf7b0efc Author: Szymon KÅos <eszka...@gmail.com> Date: Wed Jun 10 15:55:01 2015 +0200 the breadcrumb class moved to the new file Change-Id: I283080522090766682b1d6c7911466898b11758a diff --git a/include/svtools/RemoteFilesDialog.hxx b/include/svtools/RemoteFilesDialog.hxx index 2e30efc..c6bf8d8 100644 --- a/include/svtools/RemoteFilesDialog.hxx +++ b/include/svtools/RemoteFilesDialog.hxx @@ -15,6 +15,9 @@ #include <svtools/PlaceEditDialog.hxx> #include <svtools/svtools.hrc> #include <svtools/svtresid.hxx> +#include <svtools/breadcrumb.hxx> +#include <svtools/fileview.hxx> +#include <svtools/treelistentry.hxx> #include <vcl/button.hxx> #include <vcl/menubtn.hxx> @@ -23,10 +26,6 @@ #include <vcl/vclptr.hxx> #include <vcl/split.hxx> #include <vcl/svapp.hxx> -#include <vcl/fixedhyper.hxx> - -#include <svtools/fileview.hxx> -#include <svtools/treelistentry.hxx> #include <officecfg/Office/Common.hxx> #include <com/sun/star/uno/Sequence.hxx> diff --git a/include/svtools/breadcrumb.hxx b/include/svtools/breadcrumb.hxx new file mode 100644 index 0000000..86be5d2 --- /dev/null +++ b/include/svtools/breadcrumb.hxx @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SVTOOLS_BREADCRUMB_HXX +#define INCLUDED_SVTOOLS_BREADCRUMB_HXX + +#include <svtools/svtdllapi.h> + +#include <tools/urlobj.hxx> + +#include <vcl/fixedhyper.hxx> +#include <vcl/layout.hxx> + +#include <vector> + +class SVT_DLLPUBLIC Breadcrumb : public VclHBox +{ + private: + std::vector< VclPtr< FixedHyperlink > > m_aLinks; + std::vector< VclPtr< FixedText > > m_aSeparators; + + OUString m_sRootName; + OUString m_sClickedURL; + + Link<> m_aClickHdl; + + void appendField(); + + DECL_LINK ( ClickLinkHdl, FixedHyperlink* ); + + public: + Breadcrumb( vcl::Window* pParent, WinBits nWinStyle = 0 ); + ~Breadcrumb(); + + void dispose(); + + void SetClickHdl( const Link<>& rLink ); + OUString GetHdlURL(); + + void SetRootName( const OUString& rURL ); + void SetURL( const OUString& rURL ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk index 30c0dfd..e3ce0a0 100644 --- a/svtools/Library_svt.mk +++ b/svtools/Library_svt.mk @@ -106,6 +106,7 @@ $(eval $(call gb_Library_add_exception_objects,svt,\ svtools/source/contnr/viewdataentry \ svtools/source/control/accessibleruler \ svtools/source/control/asynclink \ + svtools/source/control/breadcrumb \ svtools/source/control/calendar \ svtools/source/control/collatorres \ svtools/source/control/ctrlbox \ diff --git a/svtools/source/control/breadcrumb.cxx b/svtools/source/control/breadcrumb.cxx new file mode 100644 index 0000000..ba2ed5d --- /dev/null +++ b/svtools/source/control/breadcrumb.cxx @@ -0,0 +1,115 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <svtools/breadcrumb.hxx> + +Breadcrumb::Breadcrumb( vcl::Window* pParent, WinBits nWinStyle ) : VclHBox( pParent, nWinStyle ) +{ + set_spacing( 6 ); + appendField(); // root +} + +Breadcrumb::~Breadcrumb() +{ + disposeOnce(); +} + +void Breadcrumb::dispose() +{ + for( unsigned int i = 0; i < m_aLinks.size(); i++ ) + { + m_aSeparators[i].disposeAndClear(); + m_aLinks[i].disposeAndClear(); + } + + VclHBox::dispose(); +} + +void Breadcrumb::SetClickHdl( const Link<>& rLink ) +{ + m_aClickHdl = rLink; +} + +OUString Breadcrumb::GetHdlURL() +{ + return m_sClickedURL; +} + +void Breadcrumb::SetRootName( const OUString& rURL ) +{ + m_sRootName = rURL; +} + +void Breadcrumb::SetURL( const OUString& rURL ) +{ + INetURLObject aURL( rURL ); + aURL.setFinalSlash(); + OUString sPath = aURL.GetURLPath(INetURLObject::DECODE_WITH_CHARSET); + + unsigned int nSegments = aURL.getSegmentCount(); + unsigned int nPos = 0; + unsigned int i; + + m_aLinks[0]->SetText( m_sRootName ); + m_aLinks[0]->Show(); + m_aLinks[0]->Enable( true ); + m_aLinks[0]->SetURL( INetURLObject::GetScheme( aURL.GetProtocol() ) + + aURL.GetHost() ); + m_aSeparators[0]->Show(); + + for( i = 1; i < nSegments + 1; i++ ) + { + if( i >= m_aLinks.size() ) + appendField(); + + unsigned int nEnd = sPath.indexOf( '/', nPos + 1 ); + OUString sLabel = OUString( sPath.getStr() + nPos + 1, nEnd - nPos - 1 ); + + m_aLinks[i]->SetText( sLabel ); + m_aLinks[i]->SetURL( INetURLObject::GetScheme( aURL.GetProtocol() ) + + aURL.GetHost() + + OUString( sPath.getStr(), nEnd ) ); + m_aLinks[i]->Show(); + m_aLinks[i]->Enable( true ); + m_aSeparators[i]->Show(); + + nPos = nEnd; + } + + m_aLinks[i - 1]->Enable( false ); + m_aSeparators[i - 1]->Hide(); + + for( ; i < m_aLinks.size(); i++ ) + { + m_aLinks[i]->Hide(); + m_aSeparators[i]->Hide(); + } +} + + +void Breadcrumb::appendField() +{ + m_aLinks.push_back( VclPtr< FixedHyperlink >::Create( this ) ); + m_aLinks[m_aLinks.size() - 1]->Hide(); + m_aLinks[m_aLinks.size() - 1]->SetClickHdl( LINK( this, Breadcrumb, ClickLinkHdl ) ); + + m_aSeparators.push_back( VclPtr< FixedText >::Create( this ) ); + m_aSeparators[m_aLinks.size() - 1]->SetText( ">" ); + m_aSeparators[m_aLinks.size() - 1]->Hide(); +} + +IMPL_LINK ( Breadcrumb, ClickLinkHdl, FixedHyperlink*, pLink ) +{ + m_sClickedURL = pLink->GetURL(); + m_aClickHdl.Call( this ); + + return 1; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svtools/source/dialogs/RemoteFilesDialog.cxx b/svtools/source/dialogs/RemoteFilesDialog.cxx index 6aad7ea..b85f1e8 100644 --- a/svtools/source/dialogs/RemoteFilesDialog.cxx +++ b/svtools/source/dialogs/RemoteFilesDialog.cxx @@ -75,123 +75,6 @@ class FileViewContainer : public vcl::Window } }; -class Breadcrumb : public VclHBox -{ - private: - std::vector< VclPtr< FixedHyperlink > > m_aLinks; - std::vector< VclPtr< FixedText > > m_aSeparators; - - OUString m_sRootName; - OUString m_sClickedURL; - - Link<> m_aClickHdl; - - DECL_LINK ( ClickLinkHdl, FixedHyperlink* ); - - public: - Breadcrumb( vcl::Window* pParent ) : VclHBox( pParent ) - { - set_spacing( 6 ); - appendField(); // root - } - - ~Breadcrumb() - { - disposeOnce(); - } - - void dispose() - { - for( unsigned int i = 0; i < m_aLinks.size(); i++ ) - { - m_aSeparators[i].disposeAndClear(); - m_aLinks[i].disposeAndClear(); - } - - VclHBox::dispose(); - } - - void SetClickHdl( const Link<>& rLink ) - { - m_aClickHdl = rLink; - } - - OUString GetHdlURL() - { - return m_sClickedURL; - } - - void SetRootName( const OUString& rURL ) - { - m_sRootName = rURL; - } - - void SetURL( const OUString& rURL ) - { - INetURLObject aURL( rURL ); - aURL.setFinalSlash(); - OUString sPath = aURL.GetURLPath(INetURLObject::DECODE_WITH_CHARSET); - - unsigned int nSegments = aURL.getSegmentCount(); - unsigned int nPos = 0; - unsigned int i; - - m_aLinks[0]->SetText( m_sRootName ); - m_aLinks[0]->Show(); - m_aLinks[0]->Enable( true ); - m_aLinks[0]->SetURL( INetURLObject::GetScheme( aURL.GetProtocol() ) - + aURL.GetHost() ); - m_aSeparators[0]->Show(); - - for( i = 1; i < nSegments + 1; i++ ) - { - if( i >= m_aLinks.size() ) - appendField(); - - unsigned int nEnd = sPath.indexOf( '/', nPos + 1 ); - OUString sLabel = OUString( sPath.getStr() + nPos + 1, nEnd - nPos - 1 ); - - m_aLinks[i]->SetText( sLabel ); - m_aLinks[i]->SetURL( INetURLObject::GetScheme( aURL.GetProtocol() ) - + aURL.GetHost() - + OUString( sPath.getStr(), nEnd ) ); - m_aLinks[i]->Show(); - m_aLinks[i]->Enable( true ); - m_aSeparators[i]->Show(); - - nPos = nEnd; - } - - m_aLinks[i - 1]->Enable( false ); - m_aSeparators[i - 1]->Hide(); - - for( ; i < m_aLinks.size(); i++ ) - { - m_aLinks[i]->Hide(); - m_aSeparators[i]->Hide(); - } - } - - private: - void appendField() - { - m_aLinks.push_back( VclPtr< FixedHyperlink >::Create( this ) ); - m_aLinks[m_aLinks.size() - 1]->Hide(); - m_aLinks[m_aLinks.size() - 1]->SetClickHdl( LINK( this, Breadcrumb, ClickLinkHdl ) ); - m_aSeparators.push_back( VclPtr< FixedText >::Create( this ) ); - m_aSeparators[m_aLinks.size() - 1]->SetText( ">" ); - m_aSeparators[m_aLinks.size() - 1]->Hide(); - } -}; - -IMPL_LINK ( Breadcrumb, ClickLinkHdl, FixedHyperlink*, pLink ) -{ - m_sClickedURL = pLink->GetURL(); - m_aClickHdl.Call( this ); - - return 1; -} - RemoteFilesDialog::RemoteFilesDialog(vcl::Window* pParent, WinBits nBits) : ModalDialog(pParent, "RemoteFilesDialog", "svt/ui/remotefilesdialog.ui") , m_context(comphelper::getProcessComponentContext())
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits