]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/playlist/playlist_model.cpp
Qt: remove the zoom slider and put it on the menu
[vlc] / modules / gui / qt4 / components / playlist / playlist_model.cpp
index ebec0bb5eff9485e010307a6060df89283c3fa47..8f5da1847e55040f8cb488d10fa31d28dc263f61 100644 (file)
@@ -88,6 +88,8 @@ PLModel::PLModel( playlist_t *_p_playlist,  /* THEPL */
     ADD_ICON( NODE, ":/type/node" );
 #undef ADD_ICON
 
+    i_zoom = getSettings()->value( "Playlist/zoom", 0 ).toInt();
+
     rebuild( p_root );
     DCONNECT( THEMIM->getIM(), metaChanged( input_item_t *),
               this, processInputItemUpdate( input_item_t *) );
@@ -101,6 +103,7 @@ PLModel::PLModel( playlist_t *_p_playlist,  /* THEPL */
 
 PLModel::~PLModel()
 {
+    getSettings()->setValue( "Playlist/zoom", i_zoom );
     delete rootItem;
     delete sortingMenu;
 }
@@ -229,7 +232,7 @@ void PLModel::dropMove( const PlMimeData * plMimeData, PLItem *target, int row )
 {
     QList<input_item_t*> inputItems = plMimeData->inputItems();
     QList<PLItem*> model_items;
-    playlist_item_t *pp_items[inputItems.size()];
+    playlist_item_t *pp_items[inputItems.count()];
 
     PL_LOCK;
 
@@ -308,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;
@@ -367,7 +371,7 @@ QVariant PLModel::data( const QModelIndex &index, const int role ) const
     else if( role == Qt::FontRole )
     {
         QFont f;
-        f.setPointSize( f.pointSize() - 1 );
+        f.setPointSize( __MAX( f.pointSize() - 1 + i_zoom, 4 ) );
         if( isCurrent( index ) )
             f.setBold( true );
         return QVariant( f );
@@ -376,7 +380,10 @@ QVariant PLModel::data( const QModelIndex &index, const int role ) const
     {
         return QVariant( QBrush( Qt::gray ) );
     }
-    else if( role == IsCurrentRole ) return QVariant( isCurrent( index ) );
+    else if( role == IsCurrentRole )
+    {
+        return QVariant( isCurrent( index ) );
+    }
     else if( role == IsLeafNodeRole )
     {
         QVariant isLeaf;
@@ -507,7 +514,7 @@ int PLModel::rowCount( const QModelIndex &parent ) const
 QStringList PLModel::selectedURIs()
 {
     QStringList lst;
-    for( int i = 0; i < current_selection.size(); i++ )
+    for( int i = 0; i < current_selection.count(); i++ )
     {
         const PLItem *item = getItem( current_selection[i] );
         if( item )
@@ -687,7 +694,7 @@ void PLModel::takeItem( PLItem *item )
 void PLModel::insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos )
 {
     assert( node );
-    int count = items.size();
+    int count = items.count();
     if( !count ) return;
     printf( "Here I am\n");
     beginInsertRows( index( node, 0 ), i_pos, i_pos + count - 1 );
@@ -780,7 +787,7 @@ void PLModel::doDelete( QModelIndexList selected )
 
 void PLModel::recurseDelete( QList<PLItem*> children, QModelIndexList *fullList )
 {
-    for( int i = children.size() - 1; i >= 0 ; i-- )
+    for( int i = children.count() - 1; i >= 0 ; i-- )
     {
         PLItem *item = children[i];
         if( item->childCount() )
@@ -854,9 +861,8 @@ void PLModel::search( const QString& search_text, const QModelIndex & idx, bool
         playlist_item_t *p_root = playlist_ItemGetById( p_playlist,
                                                         itemId( idx ) );
         assert( p_root );
-        const char *psz_name = qtu( search_text );
-        playlist_LiveSearchUpdate( p_playlist , p_root, psz_name, b_recursive );
-
+        playlist_LiveSearchUpdate( p_playlist , p_root, qtu( search_text ),
+                                   b_recursive );
         if( idx.isValid() )
         {
             PLItem *searchRoot = getItem( idx );
@@ -890,23 +896,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() ) );
@@ -923,6 +928,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" );
@@ -942,6 +948,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 )
@@ -949,26 +957,39 @@ 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 );
+        /* Choose what columns to show in sorting menu, not sure if this should be configurable*/
+        QList<int> sortingColumns;
+        sortingColumns << COLUMN_TITLE << COLUMN_ARTIST << COLUMN_ALBUM << COLUMN_TRACK_NUMBER << COLUMN_URI;
+        foreach( int Column, sortingColumns )
         {
-            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 ) );
+            QAction *asc  = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Ascending") );
+            QAction *desc = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Descending") );
+            sortingMapper->setMapping( asc, columnFromMeta(Column) + 1 );
+            sortingMapper->setMapping( desc, -1 * (columnFromMeta(Column)+1) );
+            CONNECT( asc, triggered(), sortingMapper, map() );
+            CONNECT( desc, triggered(), sortingMapper, map() );
         }
-        menu.addMenu( sortingMenu );
+        CONNECT( sortingMapper, mapped( int ), this, popupSort( int ) );
     }
+    menu.addMenu( sortingMenu );
+
+    /* Zoom */
+    QMenu *zoomMenu = new QMenu( qtr( "Display size" ) );
+    zoomMenu->addAction( qtr( "Increase" ), this, SLOT( increaseZoom() ) );
+    zoomMenu->addAction( qtr( "Decrease" ), this, SLOT( decreaseZoom() ) );
+    menu.addMenu( zoomMenu );
+
+    /* Store the current selected item for popup*() methods */
+    current_selection = list;
 
+    /* Display and forward the result */
     if( !menu.isEmpty() )
     {
         menu.exec( point ); return true;
@@ -998,7 +1019,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,
@@ -1043,39 +1064,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()
@@ -1101,6 +1112,19 @@ void PLModel::popupSort( int column )
           column > 0 ? Qt::AscendingOrder : Qt::DescendingOrder );
 }
 
+/* */
+void PLModel::increaseZoom()
+{
+    i_zoom++;
+    emit layoutChanged();
+}
+
+void PLModel::decreaseZoom()
+{
+    i_zoom--;
+    emit layoutChanged();
+}
+
 /******************* Drag and Drop helper class ******************/
 PlMimeData::~PlMimeData()
 {