From 790811343ae90c501aabd1a40ec375659fd415f2 Mon Sep 17 00:00:00 2001 From: Jakob Leben Date: Wed, 10 Feb 2010 08:27:42 +0100 Subject: [PATCH] Qt: return playlist model and views to "now playing" root if current root is deleted --- .../qt4/components/playlist/playlist_model.cpp | 9 ++++++--- .../qt4/components/playlist/playlist_model.hpp | 1 + .../qt4/components/playlist/standardpanel.cpp | 6 ++++++ .../qt4/components/playlist/standardpanel.hpp | 16 +++++++++------- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index d2fba6f06c..6c6272f454 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -700,9 +700,6 @@ void PLModel::removeItem( PLItem *item ) if( item->i_id == i_cached_id ) i_cached_id = -1; i_cached_input_id = -1; - if(item == rootItem) - rootItem = NULL; - if( item->parentItem ) { int i = item->parentItem->children.indexOf( item ); beginRemoveRows( index( item->parentItem, 0), i, i ); @@ -712,6 +709,12 @@ void PLModel::removeItem( PLItem *item ) } else delete item; + if(item == rootItem) + { + rootItem = NULL; + rebuild( p_playlist->p_playing ); + emit rootChanged(); + } } /* This function must be entered WITH the playlist lock */ diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp index 9e368478bb..cb5e68c3e0 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.hpp +++ b/modules/gui/qt4/components/playlist/playlist_model.hpp @@ -150,6 +150,7 @@ private: signals: void currentChanged( const QModelIndex& ); + void rootChanged(); public slots: void activateItem( const QModelIndex &index ); diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp index d26cc6482b..4d073a439e 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.cpp +++ b/modules/gui/qt4/components/playlist/standardpanel.cpp @@ -79,6 +79,7 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent, locationBar = new LocationBar( model ); layout->addWidget( locationBar, 0, 0 ); + CONNECT( model, rootChanged(), locationBar, setRootIndex() ); /* A Spacer and the search possibilities */ layout->setColumnStretch( 1, 10 ); @@ -499,6 +500,11 @@ void LocationBar::setIndex( const QModelIndex &index ) } } +void LocationBar::setRootIndex() +{ + setIndex( QModelIndex() ); +} + void LocationBar::invoke( int i_id ) { QModelIndex index = model->index( i_id, 0 ); diff --git a/modules/gui/qt4/components/playlist/standardpanel.hpp b/modules/gui/qt4/components/playlist/standardpanel.hpp index dd868b2621..dd5aebfe8f 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.hpp +++ b/modules/gui/qt4/components/playlist/standardpanel.hpp @@ -118,6 +118,8 @@ public: void setIndex( const QModelIndex & ); signals: void invoked( const QModelIndex & ); +public slots: + void setRootIndex(); private slots: void invoke( int i_item_id ); private: @@ -129,13 +131,13 @@ private: class LocationButton : public QPushButton { - public: - LocationButton( const QString &, bool bold, bool arrow ); - private: - void paintEvent ( QPaintEvent * event ); - QSize sizeHint() const; - QFontMetrics *metrics; - bool b_arrow; +public: + LocationButton( const QString &, bool bold, bool arrow ); +private: + void paintEvent ( QPaintEvent * event ); + QSize sizeHint() const; + QFontMetrics *metrics; + bool b_arrow; }; #endif -- 2.39.2