]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/playlist/playlist_model.cpp
Qt: playlist model cleanup
[vlc] / modules / gui / qt4 / components / playlist / playlist_model.cpp
index 5ef8b0f6ea190efa54f09f5e681ee10cb1875ce0..113f214ec5e493c3606162030d8928bfe924a3f1 100644 (file)
@@ -311,7 +311,8 @@ void PLModel::activateItem( const QModelIndex &index )
     PL_UNLOCK;
 }
 
-/* Must be entered with lock */
+/* Convenient overloaded private version of activateItem
+ * Must be entered with PL lock */
 void PLModel::activateItem( playlist_item_t *p_item )
 {
     if( !p_item ) return;
@@ -370,7 +371,7 @@ QVariant PLModel::data( const QModelIndex &index, const int role ) const
     else if( role == Qt::FontRole )
     {
         QFont f;
-        f.setPointSize( std::max( f.pointSize() - 1 + i_zoom, 1 ) );
+        f.setPointSize( __MAX( f.pointSize() - 1 + i_zoom, 4 ) );
         if( isCurrent( index ) )
             f.setBold( true );
         return QVariant( f );
@@ -892,23 +893,22 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
         return false;
     }
 
-    input_item_t *p_input = p_item->p_input;
-    vlc_gc_incref( p_input );
-
-    i_popup_item = index.isValid() ? p_item->i_id : -1;
+    i_popup_item   = index.isValid() ? p_item->i_id : -1;
     i_popup_parent = index.isValid() ?
         ( p_item->p_parent ? p_item->p_parent->i_id : -1 ) :
         ( rootItem->id() );
-    i_popup_column = index.column();
 
     bool tree = ( rootItem && rootItem->id() != p_playlist->p_playing->i_id ) ||
                 var_InheritBool( p_intf, "playlist-tree" );
 
+    input_item_t *p_input = p_item->p_input;
+    vlc_gc_incref( p_input );
     PL_UNLOCK;
 
-    current_selection = list;
-
+    /* */
     QMenu menu;
+
+    /* Play/Stream/Info static actions */
     if( i_popup_item > -1 )
     {
         menu.addAction( QIcon( ":/menu/play" ), qtr(I_POP_PLAY), this, SLOT( popupPlay() ) );
@@ -925,6 +925,7 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
     }
     vlc_gc_decref( p_input );
 
+    /* In PL or ML, allow to add a file/folder */
     if( canEdit() )
     {
         QIcon addIcon( ":/buttons/playlist/playlist_add" );
@@ -944,6 +945,8 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
             menu.addAction( addIcon, qtr(I_OP_ADVOP), THEDP, SLOT( MLAppendDialog() ) );
         }
     }
+
+    /* Item removal */
     if( i_popup_item > -1 )
     {
         if( rootItem->id() != THEPL->p_playing->i_id )
@@ -951,26 +954,31 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
         menu.addAction( QIcon( ":/buttons/playlist/playlist_remove" ),
                         qtr(I_POP_DEL), this, SLOT( popupDel() ) );
         menu.addSeparator();
-        if( !sortingMenu )
+    }
+
+    /* Playlist sorting */
+    if( !sortingMenu )
+    {
+        sortingMenu = new QMenu( qtr( "Sort by" ) );
+        sortingMapper = new QSignalMapper( this );
+        for( int i = 1, j = 1; i < COLUMN_ALBUM; i <<= 1, j++ )
         {
-            sortingMenu = new QMenu( qtr( "Sort by" ) );
-            sortingMapper = new QSignalMapper( this );
-            for( int i = 1, j = 1; i < COLUMN_END; i <<= 1, j++ )
-            {
-                if( i == COLUMN_NUMBER ) continue;
-                QMenu *m = sortingMenu->addMenu( qfu( psz_column_title( i ) ) );
-                QAction *asc = m->addAction( qtr("Ascending") );
-                QAction *desc = m->addAction( qtr("Descending") );
-                sortingMapper->setMapping( asc, j );
-                sortingMapper->setMapping( desc, -j );
-                CONNECT( asc, triggered(), sortingMapper, map() );
-                CONNECT( desc, triggered(), sortingMapper, map() );
-            }
-            CONNECT( sortingMapper, mapped( int ), this, popupSort( int ) );
+            if( i == COLUMN_NUMBER ) continue;
+            QAction *asc  = sortingMenu->addAction( qfu( psz_column_title( i ) ) + " " + qtr("Ascending") );
+            QAction *desc = sortingMenu->addAction( qfu( psz_column_title( i ) ) + " " + qtr("Descending") );
+            sortingMapper->setMapping( asc, j );
+            sortingMapper->setMapping( desc, -j );
+            CONNECT( asc, triggered(), sortingMapper, map() );
+            CONNECT( desc, triggered(), sortingMapper, map() );
         }
-        menu.addMenu( sortingMenu );
+        CONNECT( sortingMapper, mapped( int ), this, popupSort( int ) );
     }
+    menu.addMenu( sortingMenu );
+
+    /* Store the current selected item for popup*() methods */
+    current_selection = list;
 
+    /* Display and forward the result */
     if( !menu.isEmpty() )
     {
         menu.exec( point ); return true;
@@ -1000,7 +1008,7 @@ void PLModel::popupAddToPlaylist()
 
     foreach( QModelIndex currentIndex, current_selection )
     {
-        playlist_item_t *p_item = playlist_ItemGetById( THEPL, getId( currentIndex ) );
+        playlist_item_t *p_item = playlist_ItemGetById( THEPL, itemId( currentIndex ) );
         if( !p_item ) continue;
 
         playlist_NodeAddCopy( THEPL, p_item,
@@ -1045,39 +1053,29 @@ void PLModel::popupSave()
 
 void PLModel::popupExplore()
 {
+    char *uri = NULL, *path = NULL;
+
     PL_LOCK;
     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_popup_item );
     if( p_item )
     {
         input_item_t *p_input = p_item->p_input;
-        char *psz_meta = input_item_GetURI( p_input );
-        PL_UNLOCK;
-        if( psz_meta )
-        {
-            const char *psz_access;
-            const char *psz_demux;
-            char  *psz_path;
-            input_SplitMRL( &psz_access, &psz_demux, &psz_path, psz_meta );
-
-            if( !EMPTY_STR( psz_access ) && (
-                   !strncasecmp( psz_access, "file", 4 ) ||
-                   !strncasecmp( psz_access, "dire", 4 ) ))
-            {
-#if defined( WIN32 ) || defined( __OS2__ )
-                /* Qt openURL doesn't know to open files that starts with a / or \ */
-                if( psz_path[0] == '/' || psz_path[0] == '\\'  )
-                    psz_path++;
-#endif
+        uri = input_item_GetURI( p_input );
+    }
+    PL_UNLOCK;
 
-                QFileInfo info( qfu( decode_URI( psz_path ) ) );
-                QDesktopServices::openUrl(
-                        QUrl::fromLocalFile( info.absolutePath() ) );
-            }
-            free( psz_meta );
-        }
+    if( uri != NULL )
+    {
+        path = make_path( uri );
+        free( uri );
     }
-    else
-        PL_UNLOCK;
+    if( path == NULL )
+        return;
+
+    QFileInfo info( qfu( path ) );
+    free( path );
+
+    QDesktopServices::openUrl( QUrl::fromLocalFile( info.absolutePath() ) );
 }
 
 void PLModel::popupAddNode()