diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-05-28 15:39:09 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-05-31 11:54:30 -0400 |
| commit | ab385347afc3317049d85a5ee4b011592d8b3dce (patch) | |
| tree | 5bb997836e0a3d4bf01509fffb94424329ff2866 /src | |
| parent | d168b5db084457a106c5bb155be6eca5013f77c0 (diff) | |
allow for refreshing individual conflict tabs
advanced conflict list now has items
Diffstat (limited to 'src')
| -rw-r--r-- | src/modinfodialog.cpp | 132 | ||||
| -rw-r--r-- | src/modinfodialog.h | 11 | ||||
| -rw-r--r-- | src/modinfodialog.ui | 3 |
3 files changed, 116 insertions, 30 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index f5b6abc8..2d2cc559 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -437,6 +437,10 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo m_overwriteExpander.set(ui->overwriteExpander, ui->overwriteTree, true); m_overwrittenExpander.set(ui->overwrittenExpander, ui->overwrittenTree, true); m_nonconflictExpander.set(ui->noConflictExpander, ui->noConflictTree); + + connect(ui->conflictsAdvancedShowNoConflict, &QCheckBox::clicked, [&] { + refreshConflictLists(false, true); + }); } @@ -597,55 +601,76 @@ QByteArray ModInfoDialog::saveConflictExpandersState() const void ModInfoDialog::refreshLists() { - refreshConflictLists(); + refreshConflictLists(true, true); refreshFiles(); } -void ModInfoDialog::refreshConflictLists() +void ModInfoDialog::refreshConflictLists( + bool refreshGeneral, bool refreshAdvanced) { int numNonConflicting = 0; int numOverwrite = 0; int numOverwritten = 0; - ui->overwriteTree->clear(); - ui->overwrittenTree->clear(); - ui->noConflictTree->clear(); + if (refreshGeneral) { + ui->overwriteTree->clear(); + ui->overwrittenTree->clear(); + ui->noConflictTree->clear(); + } + + if (refreshAdvanced) { + ui->conflictsAdvancedList->clear(); + } if (m_Origin != nullptr) { std::vector<FileEntry::Ptr> files = m_Origin->getFiles(); for (const auto& file : m_Origin->getFiles()) { - QString relativeName = QDir::fromNativeSeparators(ToQString(file->getRelativePath())); - QString fileName = relativeName.mid(0).prepend(m_RootPath); + const QString relativeName = QDir::fromNativeSeparators(ToQString(file->getRelativePath())); + const QString fileName = relativeName.mid(0).prepend(m_RootPath); + bool archive = false; + const int fileOrigin = file->getOrigin(archive); + const auto& alternatives = file->getAlternatives(); - if (file->getOrigin(archive) == m_Origin->getID()) { - const auto& alternatives = file->getAlternatives(); + if (refreshGeneral) { + if (fileOrigin == m_Origin->getID()) { + if (!alternatives.empty()) { + ui->overwriteTree->addTopLevelItem(createOverwriteItem( + archive, fileName, relativeName, alternatives)); - if (!alternatives.empty()) { - ui->overwriteTree->addTopLevelItem(createOverwriteItem( - archive, fileName, relativeName, alternatives)); + ++numOverwrite; + } else { + // otherwise, put the file in the noconflict tree + ui->noConflictTree->addTopLevelItem(createNoConflictItem( + archive, fileName, relativeName)); - ++numOverwrite; + ++numNonConflicting; + } } else { - // otherwise, put the file in the nonconflict tree - ui->noConflictTree->addTopLevelItem(createNoConflictItem( - archive, fileName, relativeName)); + ui->overwrittenTree->addTopLevelItem(createOverwrittenItem( + fileOrigin, archive, fileName, relativeName)); - ++numNonConflicting; + ++numOverwritten; } - } else { - ui->overwrittenTree->addTopLevelItem(createOverwrittenItem( - file, archive, fileName, relativeName)); + } + + if (refreshAdvanced) { + auto* advancedItem = createAdvancedConflictItem( + fileOrigin, archive, fileName, relativeName, alternatives); - ++numOverwritten; + if (advancedItem) { + ui->conflictsAdvancedList->addTopLevelItem(advancedItem); + } } } } - ui->overwriteCount->display(numOverwrite); - ui->overwrittenCount->display(numOverwritten); - ui->noConflictCount->display(numNonConflicting); + if (refreshGeneral) { + ui->overwriteCount->display(numOverwrite); + ui->overwrittenCount->display(numOverwritten); + ui->noConflictCount->display(numNonConflicting); + } } QTreeWidgetItem* ModInfoDialog::createOverwriteItem( @@ -697,10 +722,10 @@ QTreeWidgetItem* ModInfoDialog::createNoConflictItem( } QTreeWidgetItem* ModInfoDialog::createOverwrittenItem( - const MOShared::FileEntry::Ptr& file, - bool archive, const QString& fileName, const QString& relativeName) + int fileOrigin, bool archive, + const QString& fileName, const QString& relativeName) { - const FilesOrigin &realOrigin = m_Directory->getOriginByID(file->getOrigin(archive)); + const FilesOrigin &realOrigin = m_Directory->getOriginByID(fileOrigin); QStringList fields(relativeName); fields.append(ToQString(realOrigin.getName())); @@ -720,6 +745,59 @@ QTreeWidgetItem* ModInfoDialog::createOverwrittenItem( return item; } +QTreeWidgetItem* ModInfoDialog::createAdvancedConflictItem( + int fileOrigin, bool archive, + const QString& fileName, const QString& relativeName, + const MOShared::FileEntry::AlternativesVector& alternatives) +{ + QString before, after; + + if (!alternatives.empty()) { + int beforePrio = 0; + int afterPrio = std::numeric_limits<int>::max(); + + for (const auto& alt : alternatives) + { + auto altOrigin = m_Directory->getOriginByID(alt.first); + + if (altOrigin.getPriority() > beforePrio) { + if (altOrigin.getPriority() < m_Origin->getPriority()) { + before = ToQString(altOrigin.getName()); + beforePrio = altOrigin.getPriority(); + } + } + + if (altOrigin.getPriority() < afterPrio) { + if (altOrigin.getPriority() > m_Origin->getPriority()) { + after = ToQString(altOrigin.getName()); + afterPrio = altOrigin.getPriority(); + } + } + } + + if (after.isEmpty()) { + FilesOrigin &realOrigin = m_Directory->getOriginByID(fileOrigin); + + if (realOrigin.getID() != m_Origin->getID()) { + after = ToQString(realOrigin.getName()); + } + } + } + + if (!ui->conflictsAdvancedShowNoConflict->isChecked()) { + if (before.isEmpty() && after.isEmpty()) { + return nullptr; + } + } + + QTreeWidgetItem* item = new QTreeWidgetItem; + item->setText(0, before); + item->setText(1, relativeName); + item->setText(2, after); + + return item; +} + void ModInfoDialog::refreshFiles() { if (m_RootPath.length() > 0) { diff --git a/src/modinfodialog.h b/src/modinfodialog.h index 3c193cd3..69b0069e 100644 --- a/src/modinfodialog.h +++ b/src/modinfodialog.h @@ -429,7 +429,7 @@ private: ExpanderWidget m_overwriteExpander, m_overwrittenExpander, m_nonconflictExpander;
- void refreshConflictLists();
+ void refreshConflictLists(bool refreshGeneral, bool refreshAdvanced);
void refreshFiles();
QTreeWidgetItem* createOverwriteItem(
@@ -440,8 +440,13 @@ private: bool archive, const QString& fileName, const QString& relativeName);
QTreeWidgetItem* createOverwrittenItem(
- const MOShared::FileEntry::Ptr& file,
- bool archive, const QString& fileName, const QString& relativeName);
+ int fileOrigin, bool archive,
+ const QString& fileName, const QString& relativeName);
+
+ QTreeWidgetItem* createAdvancedConflictItem(
+ int fileOrigin, bool archive,
+ const QString& fileName, const QString& relativeName,
+ const MOShared::FileEntry::AlternativesVector& alternatives);
void restoreTabState(const QByteArray &state);
void restoreConflictExpandersState(const QByteArray &state);
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui index 190f5b56..b31f49d3 100644 --- a/src/modinfodialog.ui +++ b/src/modinfodialog.ui @@ -744,6 +744,9 @@ text-align: left;</string> <property name="text">
<string>Show files that have no conflicts</string>
</property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
</widget>
</item>
<item>
|
