From 41292e02bdebea8b09c2c11ee87221672e970cdf Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Fri, 28 Jun 2019 14:21:10 -0400 Subject: changed how the mod url works: - it is now independent from the nexus mod url - it can be set in addition to having a valid mod id - both urls can be displayed in the context menu re-arranged some of the widgets on the nexus tab added a track button added a custom url checkbox and open in browser button added a max-width to the browser --- src/modinfodialognexus.cpp | 147 +++++++++++++++++++++++++++++++++------------ 1 file changed, 107 insertions(+), 40 deletions(-) (limited to 'src/modinfodialognexus.cpp') diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp index e1fbe352..8c8ce55a 100644 --- a/src/modinfodialognexus.cpp +++ b/src/modinfodialognexus.cpp @@ -7,6 +7,8 @@ #include #include +namespace shell = MOBase::shell; + bool isValidModID(int id) { return (id > 0); @@ -22,15 +24,20 @@ NexusTab::NexusTab( ui->endorse->setVisible(core().settings().endorsementIntegration()); connect(ui->modID, &QLineEdit::editingFinished, [&]{ onModIDChanged(); }); - connect(ui->version, &QLineEdit::editingFinished, [&]{ onVersionChanged(); }); - connect(ui->openInBrowser, &QToolButton::clicked, [&]{ onOpenLink(); }); - connect(ui->endorse, &QToolButton::clicked, [&]{ onEndorse(); }); - connect(ui->refresh, &QToolButton::clicked, [&]{ onRefreshBrowser(); }); - connect( ui->sourceGame, static_cast(&QComboBox::currentIndexChanged), [&]{ onSourceGameChanged(); }); + connect(ui->version, &QLineEdit::editingFinished, [&]{ onVersionChanged(); }); + + connect(ui->refresh, &QPushButton::clicked, [&]{ onRefreshBrowser(); }); + connect(ui->visitNexus, &QPushButton::clicked, [&]{ onVisitNexus(); }); + connect(ui->endorse, &QPushButton::clicked, [&]{ onEndorse(); }); + connect(ui->track, &QPushButton::clicked, [&]{ onTrack(); }); + + connect(ui->hasCustomURL, &QCheckBox::toggled, [&]{ onCustomURLToggled(); }); + connect(ui->customURL, &QLineEdit::editingFinished, [&]{ onCustomURLChanged(); }); + connect(ui->visitCustomURL, &QPushButton::clicked, [&]{ onVisitCustomURL(); }); } NexusTab::~NexusTab() @@ -52,7 +59,8 @@ void NexusTab::clear() ui->sourceGame->clear(); ui->version->clear(); ui->browser->setPage(new NexusTabWebpage(ui->browser)); - ui->url->clear(); + ui->hasCustomURL->setChecked(false); + ui->customURL->clear(); setHasData(false); } @@ -89,7 +97,7 @@ void NexusTab::update() connect( page, &NexusTabWebpage::linkClicked, - [&](const QUrl& url){ MOBase::shell::OpenLink(url); }); + [&](const QUrl& url){ shell::OpenLink(url); }); ui->endorse->setEnabled( (mod()->endorsedState() == ModInfo::ENDORSED_FALSE) || @@ -138,15 +146,52 @@ void NexusTab::updateWebpage() const QString nexusLink = NexusInterface::instance(&plugin()) ->getModURL(modID, mod()->getGameName()); - ui->openInBrowser->setToolTip(nexusLink); - mod()->setURL(nexusLink); + ui->visitNexus->setToolTip(nexusLink); refreshData(modID); } else { onModChanged(); } ui->version->setText(mod()->getVersion().displayString()); - ui->url->setText(mod()->getURL()); + ui->hasCustomURL->setChecked(mod()->hasCustomURL()); + ui->customURL->setText(mod()->getCustomURL()); + ui->customURL->setEnabled(mod()->hasCustomURL()); + ui->visitCustomURL->setEnabled(mod()->hasCustomURL()); + ui->visitCustomURL->setToolTip(mod()->parseCustomURL().toString()); + + updateTracking(); +} + +void NexusTab::updateTracking() +{ + if (mod()->trackedState() == ModInfo::TRACKED_TRUE) { + ui->track->setChecked(true); + ui->track->setText(tr("Tracked")); + } else { + ui->track->setChecked(false); + ui->track->setText(tr("Untracked")); + } +} + +void NexusTab::refreshData(int modID) +{ + if (tryRefreshData(modID)) { + m_requestStarted = true; + } else { + onModChanged(); + } +} + +bool NexusTab::tryRefreshData(int modID) +{ + if (isValidModID(modID) && !m_requestStarted) { + if (mod()->updateNXMInfo()) { + ui->browser->setHtml(""); + return true; + } + } + + return false; } void NexusTab::onModChanged() @@ -165,6 +210,9 @@ void NexusTab::onModChanged() font-size: 14px; background: #404040; color: #f1f1f1; + max-width: 1060px; + margin-left: auto; + margin-right: auto; } a @@ -178,12 +226,11 @@ void NexusTab::onModChanged() )"; if (nexusDescription.isEmpty()) { - descriptionAsHTML = descriptionAsHTML.arg(tr( - "
" - "

Uh oh!

" - "

Sorry, there is no description available for this mod. :(

" - "
")); - + descriptionAsHTML = descriptionAsHTML.arg(tr(R"( +
+

This mod does not have a valid Nexus ID. You can add a custom web + page for it in the "Custom URL" box below.

+
)")); } else { descriptionAsHTML = descriptionAsHTML.arg( BBCode::convertToHTML(nexusDescription)); @@ -191,6 +238,7 @@ void NexusTab::onModChanged() ui->browser->page()->setHtml(descriptionAsHTML); updateVersionColor(); + updateTracking(); } void NexusTab::onModIDChanged() @@ -241,18 +289,6 @@ void NexusTab::onVersionChanged() updateVersionColor(); } -void NexusTab::onOpenLink() -{ - const int modID = mod()->getNexusID(); - - if (isValidModID(modID)) { - const QString nexusLink = NexusInterface::instance(&plugin()) - ->getModURL(modID, mod()->getGameName()); - - MOBase::shell::OpenLink(QUrl(nexusLink)); - } -} - void NexusTab::onRefreshBrowser() { const auto modID = mod()->getNexusID(); @@ -265,28 +301,59 @@ void NexusTab::onRefreshBrowser() } } +void NexusTab::onVisitNexus() +{ + const int modID = mod()->getNexusID(); + + if (isValidModID(modID)) { + const QString nexusLink = NexusInterface::instance(&plugin()) + ->getModURL(modID, mod()->getGameName()); + + shell::OpenLink(QUrl(nexusLink)); + } +} + void NexusTab::onEndorse() { core().loggedInAction(parentWidget(), [m=mod()]{ m->endorse(true); }); } -void NexusTab::refreshData(int modID) +void NexusTab::onTrack() { - if (tryRefreshData(modID)) { - m_requestStarted = true; - } else { - onModChanged(); + core().loggedInAction(parentWidget(), [m=mod()] { + if (m->trackedState() == ModInfo::TRACKED_TRUE) { + m->track(false); + } else { + m->track(true); + } + }); +} + +void NexusTab::onCustomURLToggled() +{ + if (m_loading) { + return; } + + mod()->setHasCustomURL(ui->hasCustomURL->isChecked()); + ui->customURL->setEnabled(mod()->hasCustomURL()); + ui->visitCustomURL->setEnabled(mod()->hasCustomURL()); } -bool NexusTab::tryRefreshData(int modID) +void NexusTab::onCustomURLChanged() { - if (isValidModID(modID) && !m_requestStarted) { - if (mod()->updateNXMInfo()) { - ui->browser->setHtml(""); - return true; - } + if (m_loading) { + return; } - return false; + mod()->setCustomURL(ui->customURL->text()); + ui->visitCustomURL->setToolTip(mod()->parseCustomURL().toString()); +} + +void NexusTab::onVisitCustomURL() +{ + const auto url = mod()->parseCustomURL(); + if (url.isValid()) { + shell::OpenLink(url); + } } -- cgit v1.3.1