WIP: Refactor cat dialog and implement nex cat updates

This commit is contained in:
Silarn
2023-09-21 17:10:39 -05:00
committed by Jeremy Rimpo
parent 127db7799e
commit f764271b1f
10 changed files with 197 additions and 194 deletions
+39 -19
View File
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "settings.h"
#include "ui_categoriesdialog.h"
#include "utility.h"
#include "nexusinterface.h"
#include <QItemDelegate>
#include <QLineEdit>
#include <QMenu>
@@ -102,8 +103,8 @@ private:
QValidator* m_Validator;
};
CategoriesDialog::CategoriesDialog(QWidget* parent)
: TutorableDialog("Categories", parent), ui(new Ui::CategoriesDialog)
CategoriesDialog::CategoriesDialog(PluginContainer* pluginContainer, QWidget* parent)
: TutorableDialog("Categories", parent), ui(new Ui::CategoriesDialog), m_PluginContainer(pluginContainer)
{
ui->setupUi(this);
fillTable();
@@ -172,6 +173,7 @@ void CategoriesDialog::fillTable()
{
CategoryFactory* categories = CategoryFactory::instance();
QTableWidget* table = ui->categoriesTable;
QListWidget* list = ui->nexusCategoryList;
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
@@ -180,23 +182,9 @@ void CategoriesDialog::fillTable()
table->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
table->verticalHeader()->setSectionsMovable(true);
table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
#else
table->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
table->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);
table->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
table->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed);
table->verticalHeader()->setMovable(true);
table->verticalHeader()->setResizeMode(QHeaderView::Fixed);
#endif
table->setItemDelegateForColumn(
0, new ValidatingDelegate(this, new NewIDValidator(m_IDs)));
table->setItemDelegateForColumn(
2, new ValidatingDelegate(this,
new QRegularExpressionValidator(
QRegularExpression("([0-9]+)?(,[0-9]+)*"), this)));
table->setItemDelegateForColumn(
3, new ValidatingDelegate(this, new ExistingIDValidator(m_IDs)));
table->setItemDelegateForColumn(0, new ValidatingDelegate(this, new NewIDValidator(m_IDs)));
table->setItemDelegateForColumn(2, new ValidatingDelegate(this, new QRegExpValidator(QRegExp("([0-9]+)?(,[0-9]+)*"), this)));
table->setItemDelegateForColumn(3, new ValidatingDelegate(this, new ExistingIDValidator(m_IDs)));
int row = 0;
for (std::vector<CategoryFactory::Category>::const_iterator iter = categories->m_Categories.begin();
@@ -233,6 +221,14 @@ void CategoriesDialog::fillTable()
table->setItem(row, 3, parentIDItem.take());
}
for (auto nexusCat : categories->m_NexusMap)
{
QScopedPointer<QListWidgetItem> nexusItem(new QListWidgetItem());
nexusItem->setData(Qt::DisplayRole, nexusCat.first.m_Name);
nexusItem->setData(Qt::UserRole, nexusCat.first.m_ID);
list->addItem(nexusItem.take());
}
refreshIDs();
}
@@ -253,6 +249,30 @@ void CategoriesDialog::removeCategory_clicked()
ui->categoriesTable->removeRow(m_ContextRow);
}
void CategoriesDialog::nexusRefresh_clicked()
{
NexusInterface *nexus = NexusInterface::instance(m_PluginContainer);
nexus->requestGameInfo(Settings::instance().game().plugin()->gameShortName(), this, QVariant(), QString());
}
void CategoriesDialog::nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int)
{
QVariantMap result = resultData.toMap();
QVariantList categories = result["categories"].toList().first().toList();
auto catFactory = CategoryFactory::instance();
QListWidget* list = ui->nexusCategoryList;
list->clear();
for (auto category : categories) {
auto catMap = category.toMap();
QScopedPointer<QListWidgetItem> nexusItem(new QListWidgetItem());
nexusItem->setData(Qt::DisplayRole, catMap["name"].toString());
nexusItem->setData(Qt::UserRole, catMap["category_id"].toInt());
list->addItem(nexusItem.take());
}
}
void CategoriesDialog::on_categoriesTable_customContextMenuRequested(const QPoint& pos)
{
m_ContextRow = ui->categoriesTable->rowAt(pos.y());
+11 -1
View File
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "tutorabledialog.h"
#include "categories.h"
#include "plugincontainer.h"
#include <set>
namespace Ui
@@ -37,7 +38,7 @@ class CategoriesDialog : public MOBase::TutorableDialog
Q_OBJECT
public:
explicit CategoriesDialog(QWidget* parent = 0);
explicit CategoriesDialog(PluginContainer* pluginContainer, QWidget* parent = 0);
~CategoriesDialog();
// also saves and restores geometry
@@ -50,11 +51,19 @@ public:
**/
void commitChanges();
public slots:
void nxmGameInfoAvailable(QString gameName, QVariant, QVariant resultData, int);
signals:
void refreshNexusCategories();
private slots:
void on_categoriesTable_customContextMenuRequested(const QPoint& pos);
void addCategory_clicked();
void removeCategory_clicked();
void nexusRefresh_clicked();
void cellChanged(int row, int column);
private:
@@ -63,6 +72,7 @@ private:
private:
Ui::CategoriesDialog* ui;
PluginContainer* m_PluginContainer;
int m_ContextRow;
int m_HighestID;
+18 -11
View File
@@ -14,16 +14,6 @@
<string>Categories</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="2" colspan="4">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QTableWidget" name="categoriesTable">
<property name="contextMenuPolicy">
@@ -123,6 +113,16 @@ p, li { white-space: pre-wrap; }
</column>
</widget>
</item>
<item row="4" column="3">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QGroupBox" name="groupBox">
<property name="layoutDirection">
@@ -133,7 +133,7 @@ p, li { white-space: pre-wrap; }
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="listWidget">
<widget class="QListWidget" name="nexusCategoryList">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -151,6 +151,13 @@ p, li { white-space: pre-wrap; }
</layout>
</widget>
</item>
<item row="4" column="5">
<widget class="QPushButton" name="nexusRefresh">
<property name="text">
<string>Refresh Nexus Categories</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
+4 -3
View File
@@ -2,6 +2,7 @@
#include "categories.h"
#include "categoriesdialog.h"
#include "organizercore.h"
#include "plugincontainer.h"
#include "settings.h"
#include "ui_mainwindow.h"
#include <utility.h>
@@ -188,8 +189,8 @@ private:
};
FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFactory* factory)
: ui(ui), m_Organizer(organizer), m_factory(factory)
FilterList::FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, PluginContainer* pluginContainer, CategoryFactory* factory)
: ui(ui), m_Organizer(organizer), m_pluginContainer(pluginContainer, m_factory(factory)
{
auto* eventFilter = new CriteriaItemFilter(ui->filters, [&](auto* item, int dir) {
return cycleItem(item, dir);
@@ -425,7 +426,7 @@ void FilterList::checkCriteria()
void FilterList::editCategories()
{
CategoriesDialog dialog(qApp->activeWindow());
CategoriesDialog dialog(m_pluginContainer, qApp->activeWindow());
if (dialog.exec() == QDialog::Accepted) {
dialog.commitChanges();
+3 -1
View File
@@ -9,6 +9,7 @@ namespace Ui
class MainWindow;
};
class CategoryFactory;
class PluginContainer;
class Settings;
class OrganizerCore;
@@ -17,7 +18,7 @@ class FilterList : public QObject
Q_OBJECT;
public:
FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, CategoryFactory* factory);
FilterList(Ui::MainWindow* ui, OrganizerCore* organizer, PluginContainer* pluginContainer, CategoryFactory* factory);
void restoreState(const Settings& s);
void saveState(Settings& s) const;
@@ -37,6 +38,7 @@ private:
Ui::MainWindow* ui;
OrganizerCore* m_Organizer;
CategoryFactory* m_factory;
PluginContainer* m_pluginContainer;
bool onClick(QMouseEvent* e);
void onItemActivated(QTreeWidgetItem* item);
+1 -1
View File
@@ -293,7 +293,7 @@ MainWindow::MainWindow(Settings& settings, OrganizerCore& organizerCore,
languageChange(settings.interface().language());
m_CategoryFactory->loadCategories();
m_Filters.reset(new FilterList(ui, &m_OrganizerCore, m_CategoryFactory));
m_Filters.reset(new FilterList(ui, &m_OrganizerCore, &m_PluginContainer, m_CategoryFactory));
connect(
m_Filters.get(), &FilterList::criteriaChanged,
+111 -152
View File
@@ -868,101 +868,72 @@ void NexusInterface::nextRequest()
if (!info.m_Reroute) {
bool hasParams = false;
switch (info.m_Type) {
case NXMRequestInfo::TYPE_DESCRIPTION:
case NXMRequestInfo::TYPE_MODINFO: {
url = QString("%1/games/%2/mods/%3")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID);
} break;
case NXMRequestInfo::TYPE_CHECKUPDATES: {
QString period;
switch (info.m_UpdatePeriod) {
case UpdatePeriod::DAY:
period = "1d";
break;
case UpdatePeriod::WEEK:
period = "1w";
break;
case UpdatePeriod::MONTH:
period = "1m";
break;
}
url = QString("%1/games/%2/mods/updated?period=%3")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(period);
} break;
case NXMRequestInfo::TYPE_FILES:
case NXMRequestInfo::TYPE_GETUPDATES: {
url = QString("%1/games/%2/mods/%3/files")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID);
} break;
case NXMRequestInfo::TYPE_FILEINFO: {
url = QString("%1/games/%2/mods/%3/files/%4")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID)
.arg(info.m_FileID);
} break;
case NXMRequestInfo::TYPE_DOWNLOADURL: {
ModRepositoryFileInfo* fileInfo = qobject_cast<ModRepositoryFileInfo*>(
qvariant_cast<QObject*>(info.m_UserData));
if (m_User.type() == APIUserAccountTypes::Premium) {
url = QString("%1/games/%2/mods/%3/files/%4/download_link")
case NXMRequestInfo::TYPE_DESCRIPTION:
case NXMRequestInfo::TYPE_MODINFO: {
url = QString("%1/games/%2/mods/%3")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID)
.arg(info.m_FileID);
} else if (!fileInfo->nexusKey.isEmpty() && fileInfo->nexusExpires &&
fileInfo->nexusDownloadUser == m_User.id().toInt()) {
url = QString("%1/games/%2/mods/%3/files/%4/download_link?key=%5&expires=%6")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID)
.arg(info.m_FileID)
.arg(fileInfo->nexusKey)
.arg(fileInfo->nexusExpires);
} else {
log::warn("{}", tr("Aborting download: Either you clicked on a premium-only "
"link and your account is not premium, "
"or the download link was generated by a different account "
"than the one stored in Mod Organizer."));
return;
}
} break;
case NXMRequestInfo::TYPE_ENDORSEMENTS: {
url = QString("%1/user/endorsements").arg(info.m_URL);
} break;
case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
QString endorse = info.m_Endorse ? "endorse" : "abstain";
url = QString("%1/games/%2/mods/%3/%4")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(info.m_ModID)
.arg(endorse);
postObject.insert("Version", info.m_ModVersion);
postData.setObject(postObject);
} break;
case NXMRequestInfo::TYPE_TOGGLETRACKING: {
url = QStringLiteral("%1/user/tracked_mods?domain_name=%2")
.arg(info.m_URL)
.arg(info.m_GameName);
postObject.insert("mod_id", info.m_ModID);
postData.setObject(postObject);
requestIsDelete = !info.m_Track;
} break;
case NXMRequestInfo::TYPE_TRACKEDMODS: {
url = QStringLiteral("%1/user/tracked_mods").arg(info.m_URL);
} break;
case NXMRequestInfo::TYPE_FILEINFO_MD5: {
url = QStringLiteral("%1/games/%2/mods/md5_search/%3")
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(QString(info.m_Hash.toHex()));
}
.arg(info.m_ModID);
} break;
case NXMRequestInfo::TYPE_CHECKUPDATES: {
QString period;
switch (info.m_UpdatePeriod) {
case UpdatePeriod::DAY:
period = "1d";
break;
case UpdatePeriod::WEEK:
period = "1w";
break;
case UpdatePeriod::MONTH:
period = "1m";
break;
}
url = QString("%1/games/%2/mods/updated?period=%3").arg(info.m_URL).arg(info.m_GameName).arg(period);
} break;
case NXMRequestInfo::TYPE_FILES:
case NXMRequestInfo::TYPE_GETUPDATES: {
url = QString("%1/games/%2/mods/%3/files").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID);
} break;
case NXMRequestInfo::TYPE_FILEINFO: {
url = QString("%1/games/%2/mods/%3/files/%4").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID);
} break;
case NXMRequestInfo::TYPE_DOWNLOADURL: {
ModRepositoryFileInfo *fileInfo = qobject_cast<ModRepositoryFileInfo*>(qvariant_cast<QObject*>(info.m_UserData));
if (m_User.type() == APIUserAccountTypes::Premium) {
url = QString("%1/games/%2/mods/%3/files/%4/download_link").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID);
} else if (!fileInfo->nexusKey.isEmpty() && fileInfo->nexusExpires && fileInfo->nexusDownloadUser == m_User.id().toInt()) {
url = QString("%1/games/%2/mods/%3/files/%4/download_link?key=%5&expires=%6")
.arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(info.m_FileID).arg(fileInfo->nexusKey).arg(fileInfo->nexusExpires);
} else {
log::warn("{}", tr("Aborting download: Either you clicked on a premium-only link and your account is not premium, "
"or the download link was generated by a different account than the one stored in Mod Organizer."));
return;
}
} break;
case NXMRequestInfo::TYPE_ENDORSEMENTS: {
url = QString("%1/user/endorsements").arg(info.m_URL);
} break;
case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
QString endorse = info.m_Endorse ? "endorse" : "abstain";
url = QString("%1/games/%2/mods/%3/%4").arg(info.m_URL).arg(info.m_GameName).arg(info.m_ModID).arg(endorse);
postObject.insert("Version", info.m_ModVersion);
postData.setObject(postObject);
} break;
case NXMRequestInfo::TYPE_TOGGLETRACKING: {
url = QStringLiteral("%1/user/tracked_mods?domain_name=%2").arg(info.m_URL).arg(info.m_GameName);
postObject.insert("mod_id", info.m_ModID);
postData.setObject(postObject);
requestIsDelete = !info.m_Track;
} break;
case NXMRequestInfo::TYPE_TRACKEDMODS: {
url = QStringLiteral("%1/user/tracked_mods").arg(info.m_URL);
} break;
case NXMRequestInfo::TYPE_FILEINFO_MD5: {
url = QStringLiteral("%1/games/%2/mods/md5_search/%3").arg(info.m_URL).arg(info.m_GameName).arg(QString(info.m_Hash.toHex()));
} break;
case NXMRequestInfo::TYPE_GAMEINFO: {
url = QStringLiteral("%1/games/%2").arg(info.m_URL).arg(info.m_GameName);
} break;
}
} else {
url = info.m_URL;
@@ -1074,65 +1045,53 @@ void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter)
if (!responseDoc.isNull()) {
QVariant result = responseDoc.toVariant();
switch (iter->m_Type) {
case NXMRequestInfo::TYPE_DESCRIPTION: {
emit nxmDescriptionAvailable(iter->m_GameName, iter->m_ModID,
iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_MODINFO: {
emit nxmModInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_CHECKUPDATES: {
emit nxmUpdateInfoAvailable(iter->m_GameName, iter->m_UserData, result,
iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILES: {
emit nxmFilesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_GETUPDATES: {
emit nxmUpdatesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData,
result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILEINFO: {
emit nxmFileInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID,
iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_DOWNLOADURL: {
emit nxmDownloadURLsAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID,
iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_ENDORSEMENTS: {
emit nxmEndorsementsAvailable(iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
emit nxmEndorsementToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_TOGGLETRACKING: {
auto results = result.toMap();
auto message = results["message"].toString();
if (message.contains(
QRegularExpression("User [0-9]+ is already Tracking Mod: [0-9]+")) ||
message.contains(
QRegularExpression("User [0-9]+ is now Tracking Mod: [0-9]+"))) {
emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
true, iter->m_ID);
} else if (message.contains(QRegularExpression(
"User [0-9]+ is no longer tracking [0-9]+")) ||
message.contains(QRegularExpression(
"Users is not tracking mod. Unable to untrack."))) {
emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData,
false, iter->m_ID);
}
} break;
case NXMRequestInfo::TYPE_TRACKEDMODS: {
emit nxmTrackedModsAvailable(iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILEINFO_MD5: {
emit nxmFileInfoFromMd5Available(iter->m_GameName, iter->m_UserData, result,
iter->m_ID);
} break;
case NXMRequestInfo::TYPE_DESCRIPTION: {
emit nxmDescriptionAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_MODINFO: {
emit nxmModInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_CHECKUPDATES: {
emit nxmUpdateInfoAvailable(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILES: {
emit nxmFilesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_GETUPDATES: {
emit nxmUpdatesAvailable(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILEINFO: {
emit nxmFileInfoAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_DOWNLOADURL: {
emit nxmDownloadURLsAvailable(iter->m_GameName, iter->m_ModID, iter->m_FileID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_ENDORSEMENTS: {
emit nxmEndorsementsAvailable(iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
emit nxmEndorsementToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_TOGGLETRACKING: {
auto results = result.toMap();
auto message = results["message"].toString();
if (message.contains(QRegularExpression("User [0-9]+ is already Tracking Mod: [0-9]+")) ||
message.contains(QRegularExpression("User [0-9]+ is now Tracking Mod: [0-9]+"))) {
emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, true, iter->m_ID);
} else if (message.contains(QRegularExpression("User [0-9]+ is no longer tracking [0-9]+")) ||
message.contains(QRegularExpression("Users is not tracking mod. Unable to untrack."))) {
emit nxmTrackingToggled(iter->m_GameName, iter->m_ModID, iter->m_UserData, false, iter->m_ID);
}
} break;
case NXMRequestInfo::TYPE_TRACKEDMODS: {
emit nxmTrackedModsAvailable(iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_FILEINFO_MD5: {
emit nxmFileInfoFromMd5Available(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
} break;
case NXMRequestInfo::TYPE_GAMEINFO: {
emit nxmGameInfoAvailable(iter->m_GameName, iter->m_UserData, result, iter->m_ID);
} break;
}
m_User.limits(parseLimits(reply));
+1 -2
View File
@@ -37,8 +37,7 @@ SettingsDialog::SettingsDialog(PluginContainer* pluginContainer, Settings& setti
{
ui->setupUi(this);
m_tabs.push_back(
std::unique_ptr<SettingsTab>(new GeneralSettingsTab(settings, *this)));
m_tabs.push_back(std::unique_ptr<SettingsTab>(new GeneralSettingsTab(settings, m_pluginContainer, *this)));
m_tabs.push_back(std::unique_ptr<SettingsTab>(new ThemeSettingsTab(settings, *this)));
m_tabs.push_back(
std::unique_ptr<SettingsTab>(new ModListSettingsTab(settings, *this)));
+3 -3
View File
@@ -8,8 +8,8 @@
using namespace MOBase;
GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
: SettingsTab(s, d)
GeneralSettingsTab::GeneralSettingsTab(Settings& s, PluginContainer* pluginContainer, SettingsDialog& d)
: SettingsTab(s, d), m_PluginContainer(pluginContainer)
{
// language
addLanguages();
@@ -159,7 +159,7 @@ void GeneralSettingsTab::resetDialogs()
void GeneralSettingsTab::onEditCategories()
{
CategoriesDialog catDialog(&dialog());
CategoriesDialog dialog(m_PluginContainer, &dialog());
if (catDialog.exec() == QDialog::Accepted) {
catDialog.commitChanges();
+6 -1
View File
@@ -3,11 +3,12 @@
#include "settings.h"
#include "settingsdialog.h"
#include "plugincontainer.h"
class GeneralSettingsTab : public SettingsTab
{
public:
GeneralSettingsTab(Settings& settings, SettingsDialog& dialog);
GeneralSettingsTab(Settings& settings, PluginContainer *pluginContainer, SettingsDialog& dialog);
void update();
@@ -19,6 +20,10 @@ private:
void onEditCategories();
void onResetDialogs();
private:
PluginContainer* m_PluginContainer;
};
#endif // SETTINGSDIALOGGENERAL_H