]> Some of my projects - AniAdd.git/commitdiff
Avoid reset() and fix removing from the model.
authorAPTX <marek321@gmail.com>
Sat, 20 Aug 2011 18:03:30 +0000 (20:03 +0200)
committerAPTX <marek321@gmail.com>
Sat, 20 Aug 2011 18:03:30 +0000 (20:03 +0200)
filemodel.cpp
filemodel.h

index c07bb01d1cfffb2ac223db9a17bbcd2c7985b5bb..756f7b6158c7536ac66b0991c8b3cad75efc40ac 100644 (file)
@@ -48,6 +48,7 @@ void FileModel::addFile(const QFileInfo &file)
 
 void FileModel::addFiles(const QFileInfoList &files)
 {
+       beginInsertRows(QModelIndex(), rowCount(), rowCount() + files.count());
        foreach (const QFileInfo &file, files)
        {
                AniDBUdpClient::File *f = new AniDBUdpClient::File(file);
@@ -57,7 +58,7 @@ void FileModel::addFiles(const QFileInfoList &files)
                connect(f, SIGNAL(statusUpdate(AniDBUdpClient::File::Action,AniDBUdpClient::File::ActionState,int)), signalMapper, SLOT(map()));
                signalMapper->setMapping(f, this->files.size() - 1);
        }
-       reset();
+       endInsertRows();
 }
 
 void FileModel::addDirectory(const QDir &directory)
@@ -81,6 +82,7 @@ void FileModel::removeAt(int index)
        beginRemoveRows(QModelIndex(), index, index);
        signalMapper->removeMappings(files.at(index));
        files.removeAt(index);
+       remap(index);
        endRemoveRows();
 }
 
@@ -90,12 +92,13 @@ void FileModel::removeItems(const QModelIndexList &items)
        QModelIndexList sorted = items;
        qSort(sorted);
 
-       for (QModelIndexList::const_iterator i = sorted.constEnd()-1; i != sorted.constBegin(); --i)
+       for (QModelIndexList::const_iterator i = sorted.constEnd() - 1; i != sorted.constBegin(); --i)
        {
                signalMapper->removeMappings(files.at(i->row()));
                files.removeAt(i->row());
        }
        files.removeAt(sorted[0].row());
+       remap();
        reset();
 }
 
@@ -250,3 +253,12 @@ QVariant FileModel::getDescForActionState(AniDBUdpClient::File::ActionState acti
        }
        return QVariant();
 }
+
+void FileModel::remap(int start)
+{
+       for (int i = start; i < files.count(); ++i)
+       {
+               signalMapper->removeMappings(files[i]);
+               signalMapper->setMapping(files[i], i);
+       }
+}
index 5542f02ed10c2b23afd8e892d84dad580ea60c24..f55a440a754b27b99d28f1bb458c14562b5605c9 100644 (file)
@@ -68,6 +68,8 @@ private slots:
 
 private:
        QVariant getDescForActionState(AniDBUdpClient::File::ActionState actionState, int role) const;
+       void remap(int start = 0);
+
        QList<AniDBUdpClient::File *> files;
 
        AniDBUdpClient::FileRenameDelegate *renameDelegate;