Commit 38e575fa authored by Jarek Kobus's avatar Jarek Kobus Committed by Eike Ziller

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: default avatarEike Ziller <eike.ziller@nokia.com>
parent 5ab4e69f
...@@ -417,6 +417,7 @@ void QrcEditor::onAddFiles() ...@@ -417,6 +417,7 @@ void QrcEditor::onAddFiles()
: m_treeview->model()->parent(current).row(); : m_treeview->model()->parent(current).row();
int const cursorFileArrayIndex = currentIsPrefixNode ? 0 : current.row(); int const cursorFileArrayIndex = currentIsPrefixNode ? 0 : current.row();
QStringList fileNames = m_treeview->fileNamesToAdd(); QStringList fileNames = m_treeview->fileNamesToAdd();
fileNames = m_treeview->existingFilesSubtracted(prefixArrayIndex, fileNames);
resolveLocationIssues(fileNames); resolveLocationIssues(fileNames);
if (fileNames.isEmpty()) if (fileNames.isEmpty())
return; return;
......
...@@ -793,36 +793,45 @@ QModelIndex ResourceModel::addFiles(const QModelIndex &model_idx, const QStringL ...@@ -793,36 +793,45 @@ QModelIndex ResourceModel::addFiles(const QModelIndex &model_idx, const QStringL
return index(lastFileArrayIndex, 0, prefixModelIndex); 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, void ResourceModel::addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile) int &firstFile, int &lastFile)
{ {
Q_UNUSED(cursorFile) Q_UNUSED(cursorFile)
const QModelIndex prefix_model_idx = index(prefixIndex, 0, QModelIndex()); const QModelIndex prefix_model_idx = index(prefixIndex, 0, QModelIndex());
const QStringList &file_list = fileNames;
firstFile = -1; firstFile = -1;
lastFile = -1; lastFile = -1;
if (!prefix_model_idx.isValid()) { if (!prefix_model_idx.isValid()) {
return; return;
} }
const int prefix_idx = prefixIndex;
QStringList unique_list; QStringList unique_list = existingFilesSubtracted(prefixIndex, fileNames);
foreach (const QString &file, file_list) {
if (!m_resource_file.contains(prefix_idx, file) && !unique_list.contains(file))
unique_list.append(file);
}
if (unique_list.isEmpty()) { if (unique_list.isEmpty()) {
return; 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 beginInsertRows(prefix_model_idx, cnt, cnt + unique_list.count() - 1); // ### FIXME
foreach (const QString &file, unique_list) 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(); m_lastResourceDir = fi.absolutePath();
endInsertRows(); endInsertRows();
......
...@@ -216,6 +216,7 @@ public: ...@@ -216,6 +216,7 @@ public:
virtual QModelIndex addNewPrefix(); virtual QModelIndex addNewPrefix();
virtual QModelIndex addFiles(const QModelIndex &idx, const QStringList &file_list); 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 addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile, int &firstFile, int &lastFile);
void insertPrefix(int prefixIndex, const QString &prefix, const QString &lang); void insertPrefix(int prefixIndex, const QString &prefix, const QString &lang);
void insertFile(int prefixIndex, int fileIndex, const QString &fileName, const QString &alias); void insertFile(int prefixIndex, int fileIndex, const QString &fileName, const QString &alias);
......
...@@ -305,6 +305,11 @@ EntryBackup * ResourceView::removeEntry(const QModelIndex &index) ...@@ -305,6 +305,11 @@ EntryBackup * ResourceView::removeEntry(const QModelIndex &index)
return m_qrcModel->removeEntry(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, void ResourceView::addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile) int &firstFile, int &lastFile)
{ {
......
...@@ -117,6 +117,7 @@ public: ...@@ -117,6 +117,7 @@ public:
void findSamePlacePostDeletionModelIndex(int &row, QModelIndex &parent) const; void findSamePlacePostDeletionModelIndex(int &row, QModelIndex &parent) const;
EntryBackup *removeEntry(const QModelIndex &index); EntryBackup *removeEntry(const QModelIndex &index);
QStringList existingFilesSubtracted(int prefixIndex, const QStringList &fileNames) const;
void addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile, void addFiles(int prefixIndex, const QStringList &fileNames, int cursorFile,
int &firstFile, int &lastFile); int &firstFile, int &lastFile);
void removeFiles(int prefixIndex, int firstFileIndex, int lastFileIndex); void removeFiles(int prefixIndex, int firstFileIndex, int lastFileIndex);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment