diff --git a/src/libtomahawk/widgets/breadcrumbbar.cpp b/src/libtomahawk/widgets/breadcrumbbar.cpp index 38b0ab368..5a44408b9 100644 --- a/src/libtomahawk/widgets/breadcrumbbar.cpp +++ b/src/libtomahawk/widgets/breadcrumbbar.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include "utils/logger.h" @@ -198,12 +200,30 @@ void BreadcrumbBar::updateButtons() } m_navButtons.erase(itBegin, m_navButtons.end()); - foreach (BreadcrumbButtonBase *button, m_navButtons) - button->show(); + collapseButtons(); adjustSize(); } +void BreadcrumbBar::collapseButtons() +{ + foreach (BreadcrumbButtonBase *button, m_navButtons) { + button->show(); + } + + const int desired_width = size().width(); + int current_width = sizeHint().width(); + + QLinkedList::iterator it = m_navButtons.begin(); + QLinkedList::const_iterator const itEnd = m_navButtons.end(); + it = m_navButtons.begin(); + while( current_width > desired_width && it != itEnd ) { + (*it)->hide(); + ++it; + current_width = sizeHint().width(); + } +} + void BreadcrumbBar::clearButtons() { foreach (BreadcrumbButtonBase *button, m_navButtons) @@ -287,3 +307,7 @@ void BreadcrumbBar::currentChangedTriggered(QModelIndex const& index) m_selectionModel->setCurrentIndex( index, QItemSelectionModel::SelectCurrent); } +void BreadcrumbBar::resizeEvent ( QResizeEvent * event ) +{ + collapseButtons(); +} diff --git a/src/libtomahawk/widgets/breadcrumbbar.h b/src/libtomahawk/widgets/breadcrumbbar.h index 0a6f8b5ef..999fc1ab0 100644 --- a/src/libtomahawk/widgets/breadcrumbbar.h +++ b/src/libtomahawk/widgets/breadcrumbbar.h @@ -34,6 +34,7 @@ class QAbstractItemModel; class QAbstractProxyModel; class QHBoxLayout; class QItemSelectionModel; +class QResizeEvent; /** * \brief A breadcrumb view for a QAbstractItemModel @@ -144,6 +145,17 @@ protected: */ void deleteButton(BreadcrumbButtonBase *button); + /** + * \brief collapses crumbs when there isnt enough room for all of them + * Starts hiding from the left until we can fit all the buttons. + */ + void collapseButtons(); + /** + * \brief reimpl from QWidget + */ + void resizeEvent ( QResizeEvent * event ); + + protected slots: /**