Merge pull request #206 from flowln/changelog_height_fix

This commit is contained in:
DioEgizio 2022-10-25 11:29:14 +02:00 committed by GitHub
commit b516dd970f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -366,33 +366,28 @@ void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info)
auto changelog = new QTreeWidgetItem(changelog_item); auto changelog = new QTreeWidgetItem(changelog_item);
auto changelog_area = new QTextBrowser(); auto changelog_area = new QTextBrowser();
QString text = info.changelog;
switch (info.provider) { switch (info.provider) {
case ModPlatform::Provider::MODRINTH: { case ModPlatform::Provider::MODRINTH: {
HoeDown h; HoeDown h;
// HoeDown bug?: \n aren't converted to <br> // HoeDown bug?: \n aren't converted to <br>
auto text = h.process(info.changelog.toUtf8()); text = h.process(info.changelog.toUtf8());
// Don't convert if there's an HTML tag right after (Qt rendering weirdness) // Don't convert if there's an HTML tag right after (Qt rendering weirdness)
text.remove(QRegularExpression("(\n+)(?=<)")); text.remove(QRegularExpression("(\n+)(?=<)"));
text.replace('\n', "<br>"); text.replace('\n', "<br>");
changelog_area->setHtml(text);
break; break;
} }
case ModPlatform::Provider::FLAME: { default:
changelog_area->setHtml(info.changelog);
break; break;
}
} }
changelog_area->setHtml(text);
changelog_area->setOpenExternalLinks(true); changelog_area->setOpenExternalLinks(true);
changelog_area->setLineWrapMode(QTextBrowser::LineWrapMode::NoWrap); changelog_area->setLineWrapMode(QTextBrowser::LineWrapMode::WidgetWidth);
changelog_area->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); changelog_area->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
// HACK: Is there a better way of achieving this?
auto font_height = QFontMetrics(changelog_area->font()).height();
changelog_area->setMaximumHeight((changelog_area->toPlainText().count(QRegularExpression("\n|<br>")) + 2) * font_height);
ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area); ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area);
ui->modTreeWidget->addTopLevelItem(item_top); ui->modTreeWidget->addTopLevelItem(item_top);