]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/playlist/standardpanel.cpp
Qt: rename a signal to be more self-documenting
[vlc] / modules / gui / qt4 / components / playlist / standardpanel.cpp
index 57902f7534f0c85bcf37dfa2e059e53e8300502c..95fa90e58714fd811324c9f3cf68ac794e822780 100644 (file)
@@ -28,7 +28,9 @@
 
 #include "components/playlist/standardpanel.hpp"
 
+#include "components/playlist/vlc_model.hpp"      /* VLCModel */
 #include "components/playlist/playlist_model.hpp" /* PLModel */
+#include "components/playlist/ml_model.hpp"       /* MLModel */
 #include "components/playlist/views.hpp"          /* 3 views */
 #include "components/playlist/selector.hpp"       /* PLSelector */
 #include "menus.hpp"                              /* Popup */
@@ -53,36 +55,38 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent,
                                   intf_thread_t *_p_intf,
                                   playlist_item_t *p_root,
                                   PLSelector *_p_selector,
-                                  PLModel *_p_model )
-                : QWidget( _parent ), p_intf( _p_intf ),
-                  p_selector( _p_selector ), model( _p_model )
+                                  PLModel *_p_model,
+                                  MLModel *_p_plmodel)
+                : QWidget( _parent ),
+                  model( _p_model ),
+                  mlmodel( _p_plmodel),
+                  p_intf( _p_intf ),
+                  p_selector( _p_selector )
 {
     viewStack = new QStackedLayout( this );
     viewStack->setSpacing( 0 ); viewStack->setMargin( 0 );
     setMinimumWidth( 300 );
 
-    iconView = NULL;
-    treeView = NULL;
-    listView = NULL;
+    iconView    = NULL;
+    treeView    = NULL;
+    listView    = NULL;
+    picFlowView = NULL;
 
     currentRootIndexId  = -1;
     lastActivatedId     = -1;
 
     /* Saved Settings */
-    getSettings()->beginGroup("Playlist");
-    int i_viewMode = getSettings()->value( "view-mode", TREE_VIEW ).toInt();
-    getSettings()->endGroup();
-
-    showView( i_viewMode );
+    int i_savedViewMode = getSettings()->value( "Playlist/view-mode", TREE_VIEW ).toInt();
+    showView( i_savedViewMode );
 
-    DCONNECT( THEMIM, leafBecameParent( input_item_t *),
-              this, browseInto( input_item_t * ) );
+    DCONNECT( THEMIM, leafBecameParent( in),
+              this, browseInto( int ) );
 
-    CONNECT( model, currentChanged( const QModelIndex& ),
+    CONNECT( model, currentIndexChanged( const QModelIndex& ),
              this, handleExpansion( const QModelIndex& ) );
-    CONNECT( model, rootChanged(), this, handleRootChange() );
+    CONNECT( model, rootChanged(), this, browseInto() );
 
-    setRoot( p_root );
+    setRoot( p_root, false );
 }
 
 StandardPLPanel::~StandardPLPanel()
@@ -90,12 +94,7 @@ StandardPLPanel::~StandardPLPanel()
     getSettings()->beginGroup("Playlist");
     if( treeView )
         getSettings()->setValue( "headerStateV2", treeView->header()->saveState() );
-    if( currentView == treeView )
-        getSettings()->setValue( "view-mode", TREE_VIEW );
-    else if( currentView == listView )
-        getSettings()->setValue( "view-mode", LIST_VIEW );
-    else if( currentView == iconView )
-        getSettings()->setValue( "view-mode", ICON_VIEW );
+    getSettings()->setValue( "view-mode", currentViewIndex() );
     getSettings()->endGroup();
 }
 
@@ -113,11 +112,6 @@ void StandardPLPanel::handleExpansion( const QModelIndex& index )
     currentView->scrollTo( index );
 }
 
-void StandardPLPanel::handleRootChange()
-{
-    browseInto();
-}
-
 void StandardPLPanel::popupPlView( const QPoint &point )
 {
     QModelIndex index = currentView->indexAt( point );
@@ -129,15 +123,14 @@ void StandardPLPanel::popupPlView( const QPoint &point )
         QVLCMenu::PopupMenu( p_intf, true );
 }
 
-void StandardPLPanel::popupSelectColumn( QPoint pos )
+void StandardPLPanel::popupSelectColumn( QPoint )
 {
     QMenu menu;
     assert( treeView );
 
     /* We do not offer the option to hide index 0 column, or
-    * QTreeView will behave weird */
-    int i, j;
-    for( i = 1 << 1, j = 1; i < COLUMN_END; i <<= 1, j++ )
+     * QTreeView will behave weird */
+    for( int i = 1 << 1, j = 1; i < COLUMN_END; i <<= 1, j++ )
     {
         QAction* option = menu.addAction( qfu( psz_column_title( i ) ) );
         option->setCheckable( true );
@@ -161,7 +154,9 @@ void StandardPLPanel::search( const QString& searchText )
     p_selector->getCurrentSelectedItem( &type, &name );
     if( type != SD_TYPE )
     {
-        bool flat = currentView == iconView || currentView == listView;
+        bool flat = ( currentView == iconView ||
+                      currentView == listView ||
+                      currentView == picFlowView );
         model->search( searchText,
                        flat ? currentView->rootIndex() : QModelIndex(),
                        !flat );
@@ -177,20 +172,36 @@ void StandardPLPanel::searchDelayed( const QString& searchText )
     if( type == SD_TYPE )
     {
         if( !name.isEmpty() && !searchText.isEmpty() )
-            playlist_ServicesDiscoveryControl( THEPL, qtu( name ), SD_CMD_SEARCH, qtu( searchText ) );
+            playlist_ServicesDiscoveryControl( THEPL, qtu( name ), SD_CMD_SEARCH,
+                                              qtu( searchText ) );
     }
 }
 
 /* Set the root of the new Playlist */
 /* This activated by the selector selection */
-void StandardPLPanel::setRoot( playlist_item_t *p_item )
+void StandardPLPanel::setRoot( playlist_item_t *p_item, bool b )
 {
-    model->rebuild( p_item );
+#ifdef MEDIA_LIBRARY
+    if( b )
+    {
+        msg_Dbg( p_intf, "Setting the SQL ML" );
+        currentView->setModel( mlmodel );
+    }
+    else
+#else
+    Q_UNUSED( b );
+#endif
+    {
+        msg_Dbg( p_intf, "Normal PL/ML or SD" );
+        if( currentView->model() != model )
+            currentView->setModel( model );
+        model->rebuild( p_item );
+    }
 }
 
 void StandardPLPanel::browseInto( const QModelIndex &index )
 {
-    if( currentView == iconView || currentView == listView )
+    if( currentView == iconView || currentView == listView || currentView == picFlowView )
     {
         currentRootIndexId = model->itemId( index );
         currentView->setRootIndex( index );
@@ -199,11 +210,11 @@ void StandardPLPanel::browseInto( const QModelIndex &index )
     emit viewChanged( index );
 }
 
-void StandardPLPanel::browseInto( )
+void StandardPLPanel::browseInto()
 {
-    browseInto( currentRootIndexId != -1 && currentView != treeView ?
-                model->index( currentRootIndexId, 0 ) :
-                QModelIndex() );
+    browseInto( (currentRootIndexId != -1 && currentView != treeView) ?
+                 model->index( currentRootIndexId, 0 ) :
+                 QModelIndex() );
 }
 
 void StandardPLPanel::wheelEvent( QWheelEvent *e )
@@ -212,7 +223,7 @@ void StandardPLPanel::wheelEvent( QWheelEvent *e )
     e->accept();
 }
 
-bool StandardPLPanel::eventFilter ( QObject * watched, QEvent * event )
+bool StandardPLPanel::eventFilter ( QObject *, QEvent * event )
 {
     if (event->type() == QEvent::KeyPress)
     {
@@ -258,6 +269,18 @@ void StandardPLPanel::createListView()
     viewStack->addWidget( listView );
 }
 
+void StandardPLPanel::createCoverView()
+{
+    picFlowView = new PicFlowView( model, this );
+    picFlowView->setContextMenuPolicy( Qt::CustomContextMenu );
+    CONNECT( picFlowView, customContextMenuRequested( const QPoint & ),
+             this, popupPlView( const QPoint & ) );
+    CONNECT( picFlowView, activated( const QModelIndex & ),
+             this, activate( const QModelIndex & ) );
+    viewStack->addWidget( picFlowView );
+    picFlowView->installEventFilter( this );
+}
+
 void StandardPLPanel::createTreeView()
 {
     /* Create and configure the QTreeView */
@@ -268,6 +291,7 @@ void StandardPLPanel::createTreeView()
     treeView->setAnimated( true );
     treeView->setUniformRowHeights( true );
     treeView->setSortingEnabled( true );
+    treeView->setAttribute( Qt::WA_MacShowFocusRect, false );
     treeView->header()->setSortIndicator( -1 , Qt::AscendingOrder );
     treeView->header()->setSortIndicatorShown( true );
     treeView->header()->setClickable( true );
@@ -281,7 +305,6 @@ void StandardPLPanel::createTreeView()
     treeView->setContextMenuPolicy( Qt::CustomContextMenu );
 
     /* setModel after setSortingEnabled(true), or the model will sort immediately! */
-    treeView->setModel( model );
 
     getSettings()->beginGroup("Playlist");
 
@@ -319,17 +342,28 @@ void StandardPLPanel::createTreeView()
     viewStack->addWidget( treeView );
 }
 
+void StandardPLPanel::changeModel( bool b_ml )
+{
+#ifdef MEDIA_LIBRARY
+    VLCModel *mod;
+    if( b_ml )
+        mod = mlmodel;
+    else
+        mod = model;
+    if( currentView->model() != mod )
+        currentView->setModel( mod );
+#else
+    Q_UNUSED( b_ml );
+    if( currentView->model() != model )
+        currentView->setModel( model );
+#endif
+}
+
 void StandardPLPanel::showView( int i_view )
 {
+
     switch( i_view )
     {
-    case TREE_VIEW:
-    {
-        if( treeView == NULL )
-            createTreeView();
-        currentView = treeView;
-        break;
-    }
     case ICON_VIEW:
     {
         if( iconView == NULL )
@@ -344,15 +378,42 @@ void StandardPLPanel::showView( int i_view )
         currentView = listView;
         break;
     }
-    default: return;
+    case PICTUREFLOW_VIEW:
+    {
+        if( picFlowView == NULL )
+            createCoverView();
+        currentView = picFlowView;
+        break;
+    }
+    default:
+    case TREE_VIEW:
+    {
+        if( treeView == NULL )
+            createTreeView();
+        currentView = treeView;
+        break;
+    }
     }
 
+    changeModel( false );
+
     viewStack->setCurrentWidget( currentView );
-    //viewActions[i_view]->setChecked( true );
     browseInto();
     gotoPlayingItem();
 }
 
+int StandardPLPanel::currentViewIndex() const
+{
+    if( currentView == treeView )
+        return TREE_VIEW;
+    else if( currentView == iconView )
+        return ICON_VIEW;
+    else if( currentView == listView )
+        return LIST_VIEW;
+    else
+        return PICTUREFLOW_VIEW;
+}
+
 void StandardPLPanel::cycleViews()
 {
     if( currentView == iconView )
@@ -360,6 +421,10 @@ void StandardPLPanel::cycleViews()
     else if( currentView == treeView )
         showView( LIST_VIEW );
     else if( currentView == listView )
+#ifndef NDEBUG
+        showView( PICTUREFLOW_VIEW  );
+    else if( currentView == picFlowView )
+#endif
         showView( ICON_VIEW );
     else
         assert( 0 );
@@ -367,37 +432,31 @@ void StandardPLPanel::cycleViews()
 
 void StandardPLPanel::activate( const QModelIndex &index )
 {
-    if( !index.data( PLModel::IsLeafNodeRole ).toBool() )
+    if( currentView->model() == model )
     {
-        if( currentView != treeView )
-            browseInto( index );
-    }
-    else
-    {
-        playlist_Lock( THEPL );
-        playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index ) );
-        p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG;
-        lastActivatedId = p_item->p_input->i_id;
-        playlist_Unlock( THEPL );
-        model->activateItem( index );
+        /* If we are not a leaf node */
+        if( !index.data( PLModel::IsLeafNodeRole ).toBool() )
+        {
+            if( currentView != treeView )
+                browseInto( index );
+        }
+        else
+        {
+            playlist_Lock( THEPL );
+            playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index ) );
+            p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG;
+            lastActivatedId = p_item->p_input->i_id;
+            playlist_Unlock( THEPL );
+            model->activateItem( index );
+        }
     }
 }
 
-void StandardPLPanel::browseInto( input_item_t *p_input )
+void StandardPLPanel::browseInto( int i_id )
 {
-    if( p_input->i_id != lastActivatedId ) return;
-
-    playlist_Lock( THEPL );
-
-    playlist_item_t *p_item = playlist_ItemGetByInput( THEPL, p_input );
-    if( !p_item )
-    {
-        playlist_Unlock( THEPL );
-        return;
-    }
-
-    QModelIndex index = model->index( p_item->i_id, 0 );
+    if( i_id != lastActivatedId ) return;
 
+    QModelIndex index = model->index( i_id, 0 );
     playlist_Unlock( THEPL );
 
     if( currentView == treeView )