summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@nokia.com>2011-11-21 13:14:13 +0100
committerEike Ziller <eike.ziller@nokia.com>2011-11-21 13:29:45 +0100
commit38e575fa1b4885ddccb13a12dcdc19cad2f329c9 (patch)
treeba54b0b5ec9fd3efa7c13fe4ca432a179e590f83
parent5ab4e69fbac61e3e52ed25527285ff73a36593dc (diff)
downloadqt-creator-38e575fa1b4885ddccb13a12dcdc19cad2f329c9.tar.gz
Fix assert on undo in qrc editor
Before creating AddFilesCommand we check if files to be added are already in qrc file. If they all are in we don't create AddFilesCommand. Task-number: QTCREATORBUG-6508 Change-Id: I633f7393f1185023052ceaa0465282e1dc7957a2 Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
-rw-r--r--src/shared/qrceditor/qrceditor.cpp1
-rw-r--r--src/shared/qrceditor/resourcefile.cpp29
-rw-r--r--src/shared/qrceditor/resourcefile_p.h1
-rw-r--r--src/shared/qrceditor/resourceview.cpp5
-rw-r--r--src/shared/qrceditor/resourceview.h1
5 files changed, 27 insertions, 10 deletions
diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp
index 8ac36dc299..82751b8158 100644
--- a/src/shared/qrceditor/qrceditor.cpp
+++ b/src/shared/qrceditor/qrceditor.cpp
@@ -417,6 +417,7 @@ void QrcEditor::onAddFiles()
: m_treeview->model()->parent(current).row();
int const cursorFileArrayIndex = currentIsPrefixNode ? 0 : current.row();
QStringList fileNames = m_treeview->fileNamesToAdd();
+ fileNames = m_treeview->existingFilesSubtracted(prefixArrayIndex, fileNames);
resolveLocationIssues(fileNames);
if (fileNames.isEmpty())
return;
diff --git a/src/shared/qrceditor/resourcefile.cpp b/src/shared/qrceditor/resourcefile.cpp
index 9b2466c8b9..9699632b46 100644
--- a/src/shared/qrceditor/resourcefile.cpp
+++ b/src/shared/qrceditor/resourcefile.cpp
@@ -793,36 +793,45 @@ QModelIndex ResourceModel::addFiles(const QModelIndex &model_idx, const QStringL
return index(lastFileArrayIndex, 0, prefixModelIndex);
}
+QStringList ResourceModel::existingFilesSubtracted(int prefixIndex, const QStringList &fileNames) const
+{
+ const QModelIndex prefixModelIdx = index(prefixIndex, 0, QModelIndex());
+ QStringList uniqueList;
+
+ if (prefixModelIdx.isValid()) {
+ foreach (const QString &file, fileNames) {
+ if (!m_resource_file.contains(prefixIndex, file) && !uniqueList.contains(file))
+ uniqueList.append(file);
+ }
+ }
+ return uniqueList;
+}
+
void ResourceModel::addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile)
{
Q_UNUSED(cursorFile)
const QModelIndex prefix_model_idx = index(prefixIndex, 0, QModelIndex());
- const QStringList &file_list = fileNames;
firstFile = -1;
lastFile = -1;
if (!prefix_model_idx.isValid()) {
return;
}
- const int prefix_idx = prefixIndex;
- QStringList unique_list;
- foreach (const QString &file, file_list) {
- if (!m_resource_file.contains(prefix_idx, file) && !unique_list.contains(file))
- unique_list.append(file);
- }
+ QStringList unique_list = existingFilesSubtracted(prefixIndex, fileNames);
if (unique_list.isEmpty()) {
return;
}
- const int cnt = m_resource_file.fileCount(prefix_idx);
+
+ const int cnt = m_resource_file.fileCount(prefixIndex);
beginInsertRows(prefix_model_idx, cnt, cnt + unique_list.count() - 1); // ### FIXME
foreach (const QString &file, unique_list)
- m_resource_file.addFile(prefix_idx, file);
+ m_resource_file.addFile(prefixIndex, file);
- const QFileInfo fi(file_list.last());
+ const QFileInfo fi(unique_list.last());
m_lastResourceDir = fi.absolutePath();
endInsertRows();
diff --git a/src/shared/qrceditor/resourcefile_p.h b/src/shared/qrceditor/resourcefile_p.h
index 4ae2076309..ebcde729d8 100644
--- a/src/shared/qrceditor/resourcefile_p.h
+++ b/src/shared/qrceditor/resourcefile_p.h
@@ -216,6 +216,7 @@ public:
virtual QModelIndex addNewPrefix();
virtual QModelIndex addFiles(const QModelIndex &idx, const QStringList &file_list);
+ QStringList existingFilesSubtracted(int prefixIndex, const QStringList &fileNames) const;
void addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile, int &firstFile, int &lastFile);
void insertPrefix(int prefixIndex, const QString &prefix, const QString &lang);
void insertFile(int prefixIndex, int fileIndex, const QString &fileName, const QString &alias);
diff --git a/src/shared/qrceditor/resourceview.cpp b/src/shared/qrceditor/resourceview.cpp
index 07fd1f36b3..4437a7fad5 100644
--- a/src/shared/qrceditor/resourceview.cpp
+++ b/src/shared/qrceditor/resourceview.cpp
@@ -305,6 +305,11 @@ EntryBackup * ResourceView::removeEntry(const QModelIndex &index)
return m_qrcModel->removeEntry(index);
}
+QStringList ResourceView::existingFilesSubtracted(int prefixIndex, const QStringList &fileNames) const
+{
+ return m_qrcModel->existingFilesSubtracted(prefixIndex, fileNames);
+}
+
void ResourceView::addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile)
{
diff --git a/src/shared/qrceditor/resourceview.h b/src/shared/qrceditor/resourceview.h
index a00afd95a4..5b8a458fa9 100644
--- a/src/shared/qrceditor/resourceview.h
+++ b/src/shared/qrceditor/resourceview.h
@@ -117,6 +117,7 @@ public:
void findSamePlacePostDeletionModelIndex(int &row, QModelIndex &parent) const;
EntryBackup *removeEntry(const QModelIndex &index);
+ QStringList existingFilesSubtracted(int prefixIndex, const QStringList &fileNames) const;
void addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile);
void removeFiles(int prefixIndex, int firstFileIndex, int lastFileIndex);