diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-28 14:21:10 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-07-02 10:10:20 -0400 |
| commit | 41292e02bdebea8b09c2c11ee87221672e970cdf (patch) | |
| tree | ae130b7767feedc07bf0a5790824a9508ba588d1 /src/modinfodialognexus.cpp | |
| parent | b4c26c516412b2f7270be02494b85be9cad0cadb (diff) | |
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
Diffstat (limited to 'src/modinfodialognexus.cpp')
| -rw-r--r-- | src/modinfodialognexus.cpp | 147 |
1 files changed, 107 insertions, 40 deletions
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 <versioninfo.h> #include <utility.h> +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<void (QComboBox::*)(int)>(&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() </html>)"; if (nexusDescription.isEmpty()) { - descriptionAsHTML = descriptionAsHTML.arg(tr( - "<div style=\"text-align: center;\">" - "<h1>Uh oh!</h1>" - "<p>Sorry, there is no description available for this mod. :(</p>" - "</div>")); - + descriptionAsHTML = descriptionAsHTML.arg(tr(R"( + <div style="text-align: center;"> + <p>This mod does not have a valid Nexus ID. You can add a custom web + page for it in the "Custom URL" box below.</p> + </div>)")); } 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); + } } |
