diff options
Diffstat (limited to 'svtools/source/control/breadcrumb.cxx')
-rw-r--r-- | svtools/source/control/breadcrumb.cxx | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/svtools/source/control/breadcrumb.cxx b/svtools/source/control/breadcrumb.cxx index ba2ed5de7b92..c7cbc0064a36 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(); |