summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-05-28 15:39:09 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-05-31 11:54:30 -0400
commitab385347afc3317049d85a5ee4b011592d8b3dce (patch)
tree5bb997836e0a3d4bf01509fffb94424329ff2866 /src
parentd168b5db084457a106c5bb155be6eca5013f77c0 (diff)
allow for refreshing individual conflict tabs
advanced conflict list now has items
Diffstat (limited to 'src')
-rw-r--r--src/modinfodialog.cpp132
-rw-r--r--src/modinfodialog.h11
-rw-r--r--src/modinfodialog.ui3
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>