Changeset 148


Ignore:
Timestamp:
10/25/08 00:38:06 (4 years ago)
Author:
roeland
Message:

Files are now orderd before we pack it (by track number).

Location:
gui
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • gui/musiclibraryitem.cpp

    r146 r148  
    2424{ 
    2525    childItems.append(item); 
     26} 
     27 
     28void MusicLibraryItem::removeAllChildrens() 
     29{ 
     30    while (!childItems.empty()) { 
     31        childItems.takeLast(); 
     32    } 
     33} 
     34 
     35/** 
     36 * Insert a new child item at a given place 
     37 * 
     38 * @param child The child item 
     39 * @param place The place to insert the child item 
     40 */ 
     41void MusicLibraryItem::insertChild(MusicLibraryItem * const child, const int place) 
     42{ 
     43    childItems.insert(place, child); 
    2644} 
    2745 
  • gui/musiclibraryitem.h

    r61 r148  
    1818 
    1919        void appendChild(MusicLibraryItem * const child); 
     20        void insertChild(MusicLibraryItem * const child, const int place); 
     21        void removeAllChildrens(); 
    2022 
    2123        MusicLibraryItem *child(int row) const; 
  • gui/musiclibrarymodel.cpp

    r147 r148  
    305305        return Qt::ItemIsDropEnabled; 
    306306} 
    307 #include <QDebug> 
     307 
    308308/** 
    309309* Convert the data at indexes into mimedata ready for transport 
     
    326326            case MusicLibraryItem::Type_Artist: 
    327327                for(int i = 0; i < item->childCount(); i++) { 
    328                     for(int j = 0; j < item->child(i)->childCount(); j++) { 
    329                         if (!filenames.contains(item->child(i)->child(j)->file())) 
    330                             filenames << item->child(i)->child(j)->file(); 
    331                     } 
     328                    filenames << sortAlbumTracks(item->child(i)); 
    332329                } 
    333330                break; 
    334331            case MusicLibraryItem::Type_Album: 
    335                 for(int i = 0; i < item->childCount(); i++) { 
    336                     if (!filenames.contains(item->child(i)->file())) 
    337                         filenames << item->child(i)->file(); 
    338                 } 
     332                filenames << sortAlbumTracks(item); 
    339333                break; 
    340334            case MusicLibraryItem::Type_Song: 
     
    349343    } 
    350344 
    351     for (int i = filenames.size() - 1; i >= 0; i--) 
     345    for (int i = filenames.size() - 1; i >= 0; i--) { 
    352346        stream << filenames.at(i); 
     347    } 
    353348 
    354349    mimeData->setData("application/qtmpc_songs_filename_text", encodedData); 
    355350    return mimeData; 
    356351} 
     352 
     353/** 
     354 * Sort an album by its track numbers. All unnumberd tracks are added to the end 
     355 * 
     356 * @param album The album musiclibrary item 
     357 */ 
     358QStringList MusicLibraryModel::sortAlbumTracks(const MusicLibraryItem *album) const 
     359{ 
     360    if (album->type() != MusicLibraryItem::Type_Album) { 
     361        return QStringList(); 
     362    } 
     363 
     364    MusicLibraryItem *orderdTracks = new MusicLibraryItem("Album", MusicLibraryItem::Type_Album); 
     365    QStringList unorderdTracks; 
     366 
     367    for(int i = 0; i < album->childCount(); i++) { 
     368        MusicLibraryItem *track = album->child(i); 
     369        if (track->track() == (quint32)0) { 
     370            unorderdTracks << track->file(); 
     371        } 
     372 
     373        bool insert = false; 
     374        for(int j = 0; j < orderdTracks->childCount(); j++) { 
     375            if (track->track() < orderdTracks->child(j)->track()) { 
     376                orderdTracks->insertChild(track, j); 
     377                insert = true; 
     378                break; 
     379            } 
     380        } 
     381 
     382        if (insert == false) { 
     383            orderdTracks->insertChild(track, orderdTracks->childCount()); 
     384        } 
     385    } 
     386 
     387    QStringList tracks; 
     388    for (int i = 0; i < orderdTracks->childCount(); i++) { 
     389        tracks << orderdTracks->child(i)->file(); 
     390    } 
     391    tracks << unorderdTracks; 
     392 
     393    orderdTracks->removeAllChildrens(); 
     394    delete orderdTracks; 
     395    return tracks; 
     396} 
  • gui/musiclibrarymodel.h

    r147 r148  
    3838        MusicLibraryItem *rootItem; 
    3939        QSettings settings; 
     40        QStringList sortAlbumTracks(const MusicLibraryItem *album) const; 
    4041}; 
    4142 
Note: See TracChangeset for help on using the changeset viewer.