[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/amarok/src/browsers/collectionbrowser
From:       Dan Meltzer <hydrogen () notyetimplemented ! com>
Date:       2008-08-18 21:24:06
Message-ID: 1219094646.316489.30182.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 849020 by dmeltzer:

Implement inline editing for artists/albums/genre/year in the collectionbrowser.  \
This still isn't perfect, as one needs to refresh the collectionbrowser before the \
changes take effect... will fix shortly

 M  +97 -7     CollectionTreeItemModelBase.cpp  
 M  +4 -4      SingleCollectionTreeItemModel.cpp  


--- trunk/extragear/multimedia/amarok/src/browsers/collectionbrowser/CollectionTreeItemModelBase.cpp \
#849019:849020 @@ -75,12 +75,7 @@
         return Qt::ItemIsEnabled;
 
     Qt::ItemFlags flags;
-    flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
-    if( Meta::TrackPtr track = Meta::TrackPtr::dynamicCast( \
                static_cast<CollectionTreeItem*>( index.internalPointer() )->data() ) \
                )
-    {
-        if( track && track->hasCapabilityInterface( Meta::Capability::Editable ) )
-            flags |= Qt::ItemIsEditable;
-    }
+    flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | \
Qt::ItemIsEditable;  return flags;
     
 }
@@ -94,9 +89,11 @@
     CollectionTreeItem *item = static_cast<CollectionTreeItem*>( \
index.internalPointer() );  
     Meta::DataPtr data = item->data();
-    // Function is only called if flags returns Qt::ItemIsEditable, where \
hasCapabilityInterface is called.  Therfore we don't need to check again +    
     if( Meta::TrackPtr track = Meta::TrackPtr::dynamicCast( data ) )
     {
+        if( !track->hasCapabilityInterface( Meta::Capability::Editable ) )
+            return false;
         Meta::EditCapability *ec = track->as<Meta::EditCapability>();
         if( ec )
         {
@@ -106,6 +103,99 @@
         }
         delete ec;
     }
+    /*else
+    {
+        QModelIndex in = index;
+        while( in.model()->hasChildren( in ) )
+        {
+            int rows = in.model()->rowCount( in );
+            for( int i = 0; i < rows; i++ )
+            {
+                setData( in.child( i, 1 ), value, role );
+                in = in.sibling( in.row() + 1, in.column() );
+            }
+        }
+    }*/
+    else if( Meta::AlbumPtr album = Meta::AlbumPtr::dynamicCast( data ) )
+    {
+        Meta::TrackList tracks = album->tracks();
+        if( tracks.size() > 0 )
+        {
+            foreach( Meta::TrackPtr track, tracks )
+            {
+                Meta::EditCapability *ec = track->as<Meta::EditCapability>();
+                if( ec )
+                    ec->setAlbum( value.toString() );
+                delete ec;
+            }
+            emit dataChanged( index, index );
+            return true;
+        }
+    }
+    else if( Meta::ArtistPtr artist = Meta::ArtistPtr::dynamicCast( data ) )
+    {
+        Meta::TrackList tracks = artist->tracks();
+        if( tracks.size() > 0 )
+        {
+            foreach( Meta::TrackPtr track, tracks )
+            {
+                Meta::EditCapability *ec = track->as<Meta::EditCapability>();
+                if( ec )
+                    ec->setArtist( value.toString() );
+                delete ec;
+            }
+            emit dataChanged( index, index );
+            return true;
+        }
+    }
+    else if( Meta::GenrePtr genre = Meta::GenrePtr::dynamicCast( data ) )
+    {
+        Meta::TrackList tracks = genre->tracks();
+        if( tracks.size() > 0 )
+        {
+            foreach( Meta::TrackPtr track, tracks )
+            {
+                Meta::EditCapability *ec = track->as<Meta::EditCapability>();
+                if( ec )
+                    ec->setGenre( value.toString() );
+                delete ec;
+            }
+            emit dataChanged( index, index );
+            return true;
+        }
+    }
+    else if( Meta::YearPtr year = Meta::YearPtr::dynamicCast( data ) )
+    {
+        Meta::TrackList tracks = year->tracks();
+        if( tracks.size() > 0 )
+        {
+            foreach( Meta::TrackPtr track, tracks )
+            {
+                Meta::EditCapability *ec = track->as<Meta::EditCapability>();
+                if( ec )
+                    ec->setYear( value.toString() );
+                delete ec;
+            }
+            emit dataChanged( index, index );
+            return true;
+        }
+    }
+    else if( Meta::ComposerPtr composer = Meta::ComposerPtr::dynamicCast( data ) )
+    {
+        Meta::TrackList tracks = composer->tracks();
+        if( tracks.size() > 0 )
+        {
+            foreach( Meta::TrackPtr track, tracks )
+            {
+                Meta::EditCapability *ec = track->as<Meta::EditCapability>();
+                if( ec )
+                    ec->setComposer( value.toString() );
+                delete ec;
+            }
+            emit dataChanged( index, index );
+            return true;
+        }
+    }
     return false;
 }
 
--- trunk/extragear/multimedia/amarok/src/browsers/collectionbrowser/SingleCollectionTreeItemModel.cpp \
#849019:849020 @@ -93,16 +93,16 @@
             if ( level < m_levelType.count() )
             {
 
-                if (  m_levelType[level] == CategoryId::Album ) {
-//                     const Meta::Album* album = static_cast< const Meta::Album*> ( \
item->data().data() ); +                if (  m_levelType[level] == CategoryId::Album \
)  +                {
                     Meta::AlbumPtr album = Meta::AlbumPtr::dynamicCast( item->data() \
);  if( album)
                         return album->image( 32, false );
                     else
                         return iconForLevel( level );
-                } else {
+                }
+                else 
                     return iconForLevel( level );
-                }
             }
         } else if ( role == AlternateCollectionRowRole )
             return ( index.row() % 2 == 1 );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic