summaryrefslogtreecommitdiff
path: root/src/modinfodialognexus.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-07-02 12:02:07 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-02 12:02:07 -0400
commit82d985064e5105ded4b20d357eaf7cd1b97fe9da (patch)
tree2de9879fa59758d057de1bc1b8017846da377421 /src/modinfodialognexus.cpp
parentc6e80f1a5eed4a57663e7fc55c2727258eaad552 (diff)
added a ModInfoDialogTabContext to avoid passing too many things to tab constructors
mod is passed to ctors to make sure they can never be empty only call deleteRequest() to selected mod comments
Diffstat (limited to 'src/modinfodialognexus.cpp')
-rw-r--r--src/modinfodialognexus.cpp85
1 files changed, 43 insertions, 42 deletions
diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp
index 8c8ce55a..81546f58 100644
--- a/src/modinfodialognexus.cpp
+++ b/src/modinfodialognexus.cpp
@@ -14,11 +14,8 @@ bool isValidModID(int id)
return (id > 0);
}
-NexusTab::NexusTab(
- OrganizerCore& oc, PluginContainer& plugin,
- QWidget* parent, Ui::ModInfoDialog* ui, int id) :
- ModInfoDialogTab(oc, plugin, parent, ui, id), m_requestStarted(false),
- m_loading(false)
+NexusTab::NexusTab(ModInfoDialogTabContext cx) :
+ ModInfoDialogTab(std::move(cx)), m_requestStarted(false), m_loading(false)
{
ui->modID->setValidator(new QIntValidator(ui->modID));
ui->endorse->setVisible(core().settings().endorsementIntegration());
@@ -70,9 +67,9 @@ void NexusTab::update()
clear();
- ui->modID->setText(QString("%1").arg(mod()->getNexusID()));
+ ui->modID->setText(QString("%1").arg(mod().getNexusID()));
- QString gameName = mod()->getGameName();
+ QString gameName = mod().getGameName();
ui->sourceGame->addItem(
core().managedGame()->gameName(),
core().managedGame()->gameShortName());
@@ -100,10 +97,10 @@ void NexusTab::update()
[&](const QUrl& url){ shell::OpenLink(url); });
ui->endorse->setEnabled(
- (mod()->endorsedState() == ModInfo::ENDORSED_FALSE) ||
- (mod()->endorsedState() == ModInfo::ENDORSED_NEVER));
+ (mod().endorsedState() == ModInfo::ENDORSED_FALSE) ||
+ (mod().endorsedState() == ModInfo::ENDORSED_NEVER));
- setHasData(mod()->getNexusID() >= 0);
+ setHasData(mod().getNexusID() >= 0);
}
void NexusTab::firstActivation()
@@ -128,10 +125,10 @@ bool NexusTab::usesOriginFiles() const
void NexusTab::updateVersionColor()
{
- if (mod()->getVersion() != mod()->getNewestVersion()) {
+ if (mod().getVersion() != mod().getNewestVersion()) {
ui->version->setStyleSheet("color: red");
ui->version->setToolTip(tr("Current Version: %1").arg(
- mod()->getNewestVersion().canonicalString()));
+ mod().getNewestVersion().canonicalString()));
} else {
ui->version->setStyleSheet("color: green");
ui->version->setToolTip(tr("No update available"));
@@ -140,11 +137,11 @@ void NexusTab::updateVersionColor()
void NexusTab::updateWebpage()
{
- const int modID = mod()->getNexusID();
+ const int modID = mod().getNexusID();
if (isValidModID(modID)) {
const QString nexusLink = NexusInterface::instance(&plugin())
- ->getModURL(modID, mod()->getGameName());
+ ->getModURL(modID, mod().getGameName());
ui->visitNexus->setToolTip(nexusLink);
refreshData(modID);
@@ -152,19 +149,19 @@ void NexusTab::updateWebpage()
onModChanged();
}
- ui->version->setText(mod()->getVersion().displayString());
- 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());
+ ui->version->setText(mod().getVersion().displayString());
+ 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) {
+ if (mod().trackedState() == ModInfo::TRACKED_TRUE) {
ui->track->setChecked(true);
ui->track->setText(tr("Tracked"));
} else {
@@ -185,7 +182,7 @@ void NexusTab::refreshData(int modID)
bool NexusTab::tryRefreshData(int modID)
{
if (isValidModID(modID) && !m_requestStarted) {
- if (mod()->updateNXMInfo()) {
+ if (mod().updateNXMInfo()) {
ui->browser->setHtml("");
return true;
}
@@ -198,7 +195,7 @@ void NexusTab::onModChanged()
{
m_requestStarted = false;
- const QString nexusDescription = mod()->getNexusDescription();
+ const QString nexusDescription = mod().getNexusDescription();
QString descriptionAsHTML = R"(
<html>
@@ -247,12 +244,12 @@ void NexusTab::onModIDChanged()
return;
}
- const int oldID = mod()->getNexusID();
+ const int oldID = mod().getNexusID();
const int newID = ui->modID->text().toInt();
if (oldID != newID){
- mod()->setNexusID(newID);
- mod()->setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
+ mod().setNexusID(newID);
+ mod().setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
ui->browser->page()->setHtml("");
@@ -270,9 +267,9 @@ void NexusTab::onSourceGameChanged()
for (auto game : plugin().plugins<MOBase::IPluginGame>()) {
if (game->gameName() == ui->sourceGame->currentText()) {
- mod()->setGameName(game->gameShortName());
- mod()->setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
- refreshData(mod()->getNexusID());
+ mod().setGameName(game->gameShortName());
+ mod().setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
+ refreshData(mod().getNexusID());
return;
}
}
@@ -285,16 +282,16 @@ void NexusTab::onVersionChanged()
}
MOBase::VersionInfo version(ui->version->text());
- mod()->setVersion(version);
+ mod().setVersion(version);
updateVersionColor();
}
void NexusTab::onRefreshBrowser()
{
- const auto modID = mod()->getNexusID();
+ const auto modID = mod().getNexusID();
if (isValidModID(modID)) {
- mod()->setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
+ mod().setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0));
updateWebpage();
} else {
qInfo("Mod has no valid Nexus ID, info can't be updated.");
@@ -303,11 +300,11 @@ void NexusTab::onRefreshBrowser()
void NexusTab::onVisitNexus()
{
- const int modID = mod()->getNexusID();
+ const int modID = mod().getNexusID();
if (isValidModID(modID)) {
const QString nexusLink = NexusInterface::instance(&plugin())
- ->getModURL(modID, mod()->getGameName());
+ ->getModURL(modID, mod().getGameName());
shell::OpenLink(QUrl(nexusLink));
}
@@ -315,12 +312,16 @@ void NexusTab::onVisitNexus()
void NexusTab::onEndorse()
{
- core().loggedInAction(parentWidget(), [m=mod()]{ m->endorse(true); });
+ // use modPtr() instead of mod() or this because the callback may be
+ // executed after the dialog is closed
+ core().loggedInAction(parentWidget(), [m=modPtr()]{ m->endorse(true); });
}
void NexusTab::onTrack()
{
- core().loggedInAction(parentWidget(), [m=mod()] {
+ // use modPtr() instead of mod() or this because the callback may be
+ // executed after the dialog is closed
+ core().loggedInAction(parentWidget(), [m=modPtr()] {
if (m->trackedState() == ModInfo::TRACKED_TRUE) {
m->track(false);
} else {
@@ -335,9 +336,9 @@ void NexusTab::onCustomURLToggled()
return;
}
- mod()->setHasCustomURL(ui->hasCustomURL->isChecked());
- ui->customURL->setEnabled(mod()->hasCustomURL());
- ui->visitCustomURL->setEnabled(mod()->hasCustomURL());
+ mod().setHasCustomURL(ui->hasCustomURL->isChecked());
+ ui->customURL->setEnabled(mod().hasCustomURL());
+ ui->visitCustomURL->setEnabled(mod().hasCustomURL());
}
void NexusTab::onCustomURLChanged()
@@ -346,13 +347,13 @@ void NexusTab::onCustomURLChanged()
return;
}
- mod()->setCustomURL(ui->customURL->text());
- ui->visitCustomURL->setToolTip(mod()->parseCustomURL().toString());
+ mod().setCustomURL(ui->customURL->text());
+ ui->visitCustomURL->setToolTip(mod().parseCustomURL().toString());
}
void NexusTab::onVisitCustomURL()
{
- const auto url = mod()->parseCustomURL();
+ const auto url = mod().parseCustomURL();
if (url.isValid()) {
shell::OpenLink(url);
}