summaryrefslogtreecommitdiff
path: root/src/modinfodialog.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/modinfodialog.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/modinfodialog.cpp')
-rw-r--r--src/modinfodialog.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 4af479c4..4ef010e4 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -127,7 +127,8 @@ bool ModInfoDialog::TabInfo::isVisible() const
ModInfoDialog::ModInfoDialog(
- MainWindow* mw, OrganizerCore* core, PluginContainer* plugin) :
+ MainWindow* mw, OrganizerCore* core, PluginContainer* plugin,
+ ModInfo::Ptr mod) :
TutorableDialog("ModInfoDialog", mw),
ui(new Ui::ModInfoDialog), m_mainWindow(mw),
m_core(core), m_plugin(plugin), m_initialTab(ETabs(-1)),
@@ -138,6 +139,7 @@ ModInfoDialog::ModInfoDialog(
auto* sc = new QShortcut(QKeySequence::Delete, this);
connect(sc, &QShortcut::activated, [&]{ onDeleteShortcut(); });
+ setMod(mod);
m_tabs = createTabs();
for (int i=0; i<ui->tabWidget->count(); ++i) {
@@ -184,19 +186,26 @@ ModInfoDialog::ModInfoDialog(
ModInfoDialog::~ModInfoDialog() = default;
+template <class T>
+std::unique_ptr<ModInfoDialogTab> createTab(ModInfoDialog& d, int index)
+{
+ return std::make_unique<T>(ModInfoDialogTabContext(
+ *d.m_core, *d.m_plugin, &d, d.ui.get(), index, d.m_mod, d.getOrigin()));
+}
+
std::vector<ModInfoDialog::TabInfo> ModInfoDialog::createTabs()
{
std::vector<TabInfo> v;
- v.push_back(createTab<TextFilesTab>(TAB_TEXTFILES));
- v.push_back(createTab<IniFilesTab>(TAB_INIFILES));
- v.push_back(createTab<ImagesTab>(TAB_IMAGES));
- v.push_back(createTab<ESPsTab>(TAB_ESPS));
- v.push_back(createTab<ConflictsTab>(TAB_CONFLICTS));
- v.push_back(createTab<CategoriesTab>(TAB_CATEGORIES));
- v.push_back(createTab<NexusTab>(TAB_NEXUS));
- v.push_back(createTab<NotesTab>(TAB_NOTES));
- v.push_back(createTab<FileTreeTab>(TAB_FILETREE));
+ v.push_back(createTab<TextFilesTab>(*this, TAB_TEXTFILES));
+ v.push_back(createTab<IniFilesTab>(*this, TAB_INIFILES));
+ v.push_back(createTab<ImagesTab>(*this, TAB_IMAGES));
+ v.push_back(createTab<ESPsTab>(*this, TAB_ESPS));
+ v.push_back(createTab<ConflictsTab>(*this, TAB_CONFLICTS));
+ v.push_back(createTab<CategoriesTab>(*this, TAB_CATEGORIES));
+ v.push_back(createTab<NexusTab>(*this, TAB_NEXUS));
+ v.push_back(createTab<NotesTab>(*this, TAB_NOTES));
+ v.push_back(createTab<FileTreeTab>(*this, TAB_FILETREE));
return v;
}
@@ -218,6 +227,7 @@ int ModInfoDialog::exec()
void ModInfoDialog::setMod(ModInfo::Ptr mod)
{
+ Q_ASSERT(mod);
m_mod = mod;
for (auto& tabInfo : m_tabs) {
@@ -584,10 +594,8 @@ void ModInfoDialog::onOriginModified(int originID)
void ModInfoDialog::onDeleteShortcut()
{
- for (auto& tabInfo : m_tabs) {
- if (tabInfo.tab->deleteRequested()) {
- break;
- }
+ if (auto* tabInfo=currentTab()) {
+ tabInfo->tab->deleteRequested();
}
}
@@ -663,7 +671,7 @@ void ModInfoDialog::onTabMoved()
void ModInfoDialog::on_nextButton_clicked()
{
auto mod = m_mainWindow->nextModInList();
- if (mod == m_mod) {
+ if (!mod || mod == m_mod) {
return;
}
@@ -674,7 +682,7 @@ void ModInfoDialog::on_nextButton_clicked()
void ModInfoDialog::on_prevButton_clicked()
{
auto mod = m_mainWindow->previousModInList();
- if (mod == m_mod) {
+ if (!mod || mod == m_mod) {
return;
}