mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
Merge pull request #1274 from ModOrganizer2/conflicts_conter_tooltip
Add advanced counters as tooltip to general conflicts tab.
This commit is contained in:
@@ -566,7 +566,7 @@ text-align: left;</string>
|
||||
<widget class="QLineEdit" name="overwriteLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLCDNumber" name="overwriteCount">
|
||||
<widget class="LCDNumber" name="overwriteCount">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
@@ -635,7 +635,7 @@ text-align: left;</string>
|
||||
<widget class="QLineEdit" name="overwrittenLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLCDNumber" name="overwrittenCount">
|
||||
<widget class="LCDNumber" name="overwrittenCount">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
@@ -701,7 +701,7 @@ text-align: left;</string>
|
||||
<widget class="QLineEdit" name="noConflictLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLCDNumber" name="noConflictCount">
|
||||
<widget class="LCDNumber" name="noConflictCount">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
@@ -1410,6 +1410,11 @@ p, li { white-space: pre-wrap; }
|
||||
<extends>QPlainTextEdit</extends>
|
||||
<header>texteditor.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>LCDNumber</class>
|
||||
<extends>QLCDNumber</extends>
|
||||
<header>lcdnumber.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>HTMLEditor</class>
|
||||
<extends>QTextEdit</extends>
|
||||
|
||||
+108
-11
@@ -599,6 +599,8 @@ GeneralConflictsTab::GeneralConflictsTab(
|
||||
|
||||
void GeneralConflictsTab::clear()
|
||||
{
|
||||
m_counts.clear();
|
||||
|
||||
m_overwriteModel->clear();
|
||||
m_overwrittenModel->clear();
|
||||
m_noConflictModel->clear();
|
||||
@@ -632,10 +634,6 @@ bool GeneralConflictsTab::update()
|
||||
{
|
||||
clear();
|
||||
|
||||
int numNonConflicting = 0;
|
||||
int numOverwrite = 0;
|
||||
int numOverwritten = 0;
|
||||
|
||||
if (m_tab->origin() != nullptr) {
|
||||
const auto rootPath = m_tab->mod().absolutePath();
|
||||
|
||||
@@ -646,29 +644,68 @@ bool GeneralConflictsTab::update()
|
||||
|
||||
bool archive = false;
|
||||
const int fileOrigin = file->getOrigin(archive);
|
||||
|
||||
++m_counts.numTotalFiles;
|
||||
|
||||
const auto& alternatives = file->getAlternatives();
|
||||
|
||||
if (fileOrigin == m_tab->origin()->getID()) {
|
||||
// current mod is primary origin, the winner
|
||||
(archive) ? ++m_counts.numTotalArchive : ++m_counts.numTotalLoose;
|
||||
|
||||
if (!alternatives.empty()) {
|
||||
m_overwriteModel->add(createOverwriteItem(
|
||||
file->getIndex(), archive,
|
||||
std::move(fileName), std::move(relativeName), alternatives));
|
||||
|
||||
++numOverwrite;
|
||||
++m_counts.numOverwrite;
|
||||
if (archive) {
|
||||
++m_counts.numOverwriteArchive;
|
||||
}
|
||||
else {
|
||||
++m_counts.numOverwriteLoose;
|
||||
}
|
||||
} else {
|
||||
// otherwise, put the file in the noconflict tree
|
||||
m_noConflictModel->add(createNoConflictItem(
|
||||
file->getIndex(), archive,
|
||||
std::move(fileName), std::move(relativeName)));
|
||||
|
||||
++numNonConflicting;
|
||||
++m_counts.numNonConflicting;
|
||||
if (archive) {
|
||||
++m_counts.numNonConflictingArchive;
|
||||
}
|
||||
else {
|
||||
++m_counts.numNonConflictingLoose;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
auto currId = m_tab->origin()->getID();
|
||||
auto currModAlt = std::find_if(alternatives.begin(), alternatives.end(),
|
||||
[&currId](auto const& alt) {
|
||||
return currId == alt.first;
|
||||
});
|
||||
|
||||
if (currModAlt == alternatives.end()) {
|
||||
log::error("Mod {} not found in the list of origins for file {}", m_tab->origin(), fileName);
|
||||
continue;
|
||||
}
|
||||
|
||||
bool currModFileArchive = currModAlt->second.first.size() > 0;
|
||||
|
||||
m_overwrittenModel->add(createOverwrittenItem(
|
||||
file->getIndex(), fileOrigin, archive,
|
||||
std::move(fileName), std::move(relativeName)));
|
||||
|
||||
++numOverwritten;
|
||||
++m_counts.numOverwritten;
|
||||
if (currModFileArchive) {
|
||||
++m_counts.numOverwrittenArchive;
|
||||
++m_counts.numTotalArchive;
|
||||
}
|
||||
else {
|
||||
++m_counts.numOverwrittenLoose;
|
||||
++m_counts.numTotalLoose;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -677,11 +714,9 @@ bool GeneralConflictsTab::update()
|
||||
m_noConflictModel->finished();
|
||||
}
|
||||
|
||||
ui->overwriteCount->display(numOverwrite);
|
||||
ui->overwrittenCount->display(numOverwritten);
|
||||
ui->noConflictCount->display(numNonConflicting);
|
||||
updateUICounters();
|
||||
|
||||
return (numOverwrite > 0 || numOverwritten > 0);
|
||||
return (m_counts.numOverwrite > 0 || m_counts.numOverwritten > 0);
|
||||
}
|
||||
|
||||
ConflictItem GeneralConflictsTab::createOverwriteItem(
|
||||
@@ -729,6 +764,68 @@ ConflictItem GeneralConflictsTab::createOverwrittenItem(
|
||||
index, std::move(fileName), true, std::move(altOrigin), archive);
|
||||
}
|
||||
|
||||
QString percent(int a, int b) {
|
||||
if (b == 0) {
|
||||
return QString::number(0, 'f', 2);
|
||||
}
|
||||
return QString::number((((float)a / (float)b) * 100), 'f', 2);
|
||||
}
|
||||
|
||||
void GeneralConflictsTab::updateUICounters()
|
||||
{
|
||||
ui->overwriteCount->display(m_counts.numOverwrite);
|
||||
ui->overwrittenCount->display(m_counts.numOverwritten);
|
||||
ui->noConflictCount->display(m_counts.numNonConflicting);
|
||||
|
||||
QString tooltipBase = tr("<table cellspacing=\"5\">"
|
||||
"<tr><th>Type</th><th>%1</th><th>Total</th><th>Percent</th></tr>"
|
||||
"<tr><td>Loose files: </td>"
|
||||
"<td align=right>%2</td><td align=right>%3</td><td align=right>%4%</td></tr>"
|
||||
"<tr><td>Archive files: </td>"
|
||||
"<td align=right>%5</td><td align=right>%6</td><td align=right>%7%</td></tr>"
|
||||
"<tr><td>Combined: </td>"
|
||||
"<td align=right>%8</td><td align=right>%9</td><td align=right>%10%</td></tr>"
|
||||
"</table>");
|
||||
|
||||
QString tooltipOverwrite = tooltipBase.arg(tr("Winning"))
|
||||
.arg(m_counts.numOverwriteLoose)
|
||||
.arg(m_counts.numTotalLoose)
|
||||
.arg(percent(m_counts.numOverwriteLoose, m_counts.numTotalLoose))
|
||||
.arg(m_counts.numOverwriteArchive)
|
||||
.arg(m_counts.numTotalArchive)
|
||||
.arg(percent(m_counts.numOverwriteArchive, m_counts.numTotalArchive))
|
||||
.arg(m_counts.numOverwrite)
|
||||
.arg(m_counts.numTotalFiles)
|
||||
.arg(percent(m_counts.numOverwrite, m_counts.numTotalFiles));
|
||||
|
||||
QString tooltipOverwritten = tooltipBase.arg(tr("Losing"))
|
||||
.arg(m_counts.numOverwrittenLoose)
|
||||
.arg(m_counts.numTotalLoose)
|
||||
.arg(percent(m_counts.numOverwrittenLoose, m_counts.numTotalLoose))
|
||||
.arg(m_counts.numOverwrittenArchive)
|
||||
.arg(m_counts.numTotalArchive)
|
||||
.arg(percent(m_counts.numOverwrittenArchive, m_counts.numTotalArchive))
|
||||
.arg(m_counts.numOverwritten)
|
||||
.arg(m_counts.numTotalFiles)
|
||||
.arg(percent(m_counts.numOverwritten, m_counts.numTotalFiles));
|
||||
|
||||
|
||||
QString tooltipNonConflict = tooltipBase.arg(tr("Non conflicting"))
|
||||
.arg(m_counts.numNonConflictingLoose)
|
||||
.arg(m_counts.numTotalLoose)
|
||||
.arg(percent(m_counts.numNonConflictingLoose, m_counts.numTotalLoose))
|
||||
.arg(m_counts.numNonConflictingArchive)
|
||||
.arg(m_counts.numTotalArchive)
|
||||
.arg(percent(m_counts.numNonConflictingArchive, m_counts.numTotalArchive))
|
||||
.arg(m_counts.numNonConflicting)
|
||||
.arg(m_counts.numTotalFiles)
|
||||
.arg(percent(m_counts.numNonConflicting, m_counts.numTotalFiles));
|
||||
|
||||
ui->overwriteCount->setToolTip(tooltipOverwrite);
|
||||
ui->overwrittenCount->setToolTip(tooltipOverwritten);
|
||||
ui->noConflictCount->setToolTip(tooltipNonConflict);
|
||||
}
|
||||
|
||||
void GeneralConflictsTab::onOverwriteActivated(const QModelIndex& index)
|
||||
{
|
||||
const auto* proxy = dynamic_cast<QAbstractProxyModel*>(ui->overwriteTree->model());
|
||||
|
||||
@@ -51,6 +51,28 @@ private:
|
||||
FilterWidget m_filterOverwritten;
|
||||
FilterWidget m_filterNoConflicts;
|
||||
|
||||
struct GeneralConflictNumbers
|
||||
{
|
||||
int numTotalFiles = 0;
|
||||
int numTotalLoose = 0;
|
||||
int numTotalArchive = 0;
|
||||
int numNonConflicting = 0;
|
||||
int numNonConflictingLoose = 0;
|
||||
int numNonConflictingArchive = 0;
|
||||
int numOverwrite = 0;
|
||||
int numOverwriteLoose = 0;
|
||||
int numOverwriteArchive = 0;
|
||||
int numOverwritten = 0;
|
||||
int numOverwrittenLoose = 0;
|
||||
int numOverwrittenArchive = 0;
|
||||
|
||||
void clear() {
|
||||
*this = {};
|
||||
};
|
||||
};
|
||||
|
||||
GeneralConflictNumbers m_counts;
|
||||
|
||||
ConflictItem createOverwriteItem(
|
||||
MOShared::FileIndex index, bool archive,
|
||||
QString fileName, QString relativeName,
|
||||
@@ -64,6 +86,8 @@ private:
|
||||
MOShared::FileIndex index, int fileOrigin, bool archive,
|
||||
QString fileName, QString relativeName);
|
||||
|
||||
void updateUICounters();
|
||||
|
||||
void onOverwriteActivated(const QModelIndex& index);
|
||||
void onOverwrittenActivated(const QModelIndex& index);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user