Commit 62c58470 authored by Francois Cartegnie's avatar Francois Cartegnie

Qt: StandardPanel: Add spinner on network SD nodes.

This is incomplete as the spinner can't be stopped when there's an
error or no item added.
Use spin count set to 20 as a workaround for now.
parent 3135084f
......@@ -141,6 +141,7 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_i, QWidget *_par )
DCONNECT( selector, categoryActivated( playlist_item_t *, bool ),
mainView, setRootItem( playlist_item_t *, bool ) );
mainView->setRootItem( p_root, false );
CONNECT( selector, SDCategorySelected(bool), mainView, setWaiting(bool) );
/* */
split = new PlaylistSplitter( this );
......
......@@ -334,6 +334,7 @@ void PLSelector::createItems()
selItem = addItem( SD_TYPE, *ppsz_longname );
}
selItem->treeItem()->setData( 0, SD_CATEGORY_ROLE, *p_category );
putSDData( selItem, *ppsz_name, *ppsz_longname );
if ( ! icon.isNull() )
selItem->treeItem()->setData( 0, Qt::DecorationRole, icon );
......@@ -419,7 +420,13 @@ void PLSelector::setSource( QTreeWidgetItem *item )
/* */
if( pl_item )
{
emit categoryActivated( pl_item, false );
emit SDCategorySelected(
item->data( 0, SD_CATEGORY_ROLE ).toInt()
& ( SD_CAT_INTERNET | SD_CAT_LAN )
);
}
}
PLSelItem * PLSelector::addItem (
......
......@@ -62,6 +62,7 @@ enum {
IN_ITEM_ROLE, //input_item_t->i_id
SPECIAL_ROLE, //SpecialData
CAP_SEARCH_ROLE,
SD_CATEGORY_ROLE,
};
enum ItemAction {
......@@ -154,6 +155,7 @@ private slots:
signals:
void categoryActivated( playlist_item_t *, bool );
void SDCategorySelected( bool );
};
#endif
......@@ -33,6 +33,7 @@
#include "components/playlist/ml_model.hpp" /* MLModel */
#include "components/playlist/views.hpp" /* 3 views */
#include "components/playlist/selector.hpp" /* PLSelector */
#include "util/customwidgets.hpp" /* PixmapAnimator */
#include "menus.hpp" /* Popup */
#include "input_manager.hpp" /* THEMIM */
#include "dialogs_provider.hpp" /* THEDP */
......@@ -87,6 +88,14 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent,
currentRootIndexId = -1;
lastActivatedId = -1;
QList<QString> frames;
frames << ":/util/wait1";
frames << ":/util/wait2";
frames << ":/util/wait3";
frames << ":/util/wait4";
spinnerAnimation = new PixmapAnimator( this, frames );
CONNECT( spinnerAnimation, pixmapReady( const QPixmap & ), this, updateViewport() );
/* Saved Settings */
int i_savedViewMode = getSettings()->value( "Playlist/view-mode", TREE_VIEW ).toInt();
i_zoom = getSettings()->value( "Playlist/zoom", 0 ).toInt();
......@@ -503,6 +512,20 @@ bool StandardPLPanel::eventFilter ( QObject *obj, QEvent * event )
"media source from the left."),
QPalette::Text );
}
else if ( spinnerAnimation->state() == PixmapAnimator::Running )
{
if ( currentView->model()->rowCount() )
spinnerAnimation->stop(); /* Trick until SD emits events */
else
{
QWidget *viewport = qobject_cast<QWidget *>( obj );
QStylePainter painter( viewport );
QPixmap *spinner = spinnerAnimation->getPixmap();
QPoint point = viewport->geometry().center();
point -= QPoint( spinner->size().width() / 2, spinner->size().height() / 2 );
painter.drawPixmap( point, *spinner );
}
}
}
return false;
}
......@@ -682,6 +705,23 @@ void StandardPLPanel::showView( int i_view )
gotoPlayingItem();
}
void StandardPLPanel::setWaiting( bool b )
{
if ( b )
{
spinnerAnimation->setLoopCount( 20 ); /* Trick until SD emits an event */
spinnerAnimation->start();
}
else
spinnerAnimation->stop();
}
void StandardPLPanel::updateViewport()
{
/* A single update on parent widget won't work */
currentView->viewport()->repaint();
}
int StandardPLPanel::currentViewIndex() const
{
if( currentView == treeView )
......
......@@ -53,6 +53,7 @@ class PicFlowView;
class LocationBar;
class PLSelector;
class PlaylistWidget;
class PixmapAnimator;
class StandardPLPanel: public QWidget
{
......@@ -110,10 +111,14 @@ private:
/* for popup */
QModelIndex popupIndex; /* FIXME: don't store here, pass as Action param */
/* Wait spinner */
PixmapAnimator *spinnerAnimation;
public slots:
void setRootItem( playlist_item_t *, bool );
void browseInto( const QModelIndex& );
void showView( int );
void setWaiting( bool ); /* spinner */
private slots:
void deleteSelection();
......@@ -140,6 +145,7 @@ private slots:
void toggleColumnShown( int );
void cycleViews();
void updateViewport(); /* spinner */
signals:
void viewChanged( const QModelIndex& );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment