summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-24 10:35:31 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-02 10:10:18 -0400
commitf14f2bad3ba7440d6f36657f32d00c89cae54623 (patch)
tree513ab6d43d931ca98f13c25a26c8fb917c13847e /src
parent581cfacbbdee17f2b4df8195487e5934702a430e (diff)
don't update invisible tabs
update tabs when origin changes change setting name because 2.2.0 can't handle the text list
Diffstat (limited to 'src')
-rw-r--r--src/modinfodialog.cpp57
-rw-r--r--src/modinfodialog.h7
-rw-r--r--src/modinfodialogcategories.cpp5
-rw-r--r--src/modinfodialogcategories.h1
-rw-r--r--src/modinfodialognexus.cpp5
-rw-r--r--src/modinfodialognexus.h1
-rw-r--r--src/modinfodialogtab.cpp10
-rw-r--r--src/modinfodialogtab.h3
8 files changed, 68 insertions, 21 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index c03739ca..4c169cc4 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -100,6 +100,12 @@ ModInfoDialog::TabInfo::TabInfo(std::unique_ptr<ModInfoDialogTab> tab)
{
}
+bool ModInfoDialog::TabInfo::isVisible() const
+{
+ return (realPos != -1);
+}
+
+
ModInfoDialog::ModInfoDialog(
MainWindow* mw, OrganizerCore* core, PluginContainer* plugin) :
TutorableDialog("ModInfoDialog", mw),
@@ -126,7 +132,9 @@ ModInfoDialog::ModInfoDialog(
connect(
tabInfo.tab.get(), &ModInfoDialogTab::originModified,
- [&](int originID){ emit originModified(originID); });
+ [this, i](int originID) {
+ onOriginModified(static_cast<std::size_t>(i), originID);
+ });
connect(
tabInfo.tab.get(), &ModInfoDialogTab::modOpen,
@@ -207,9 +215,8 @@ void ModInfoDialog::update(bool firstTime)
{
setWindowTitle(m_mod->name());
setTabsVisibility(firstTime);
+
updateTabs();
- feedFiles();
- setTabsColors();
if (m_initialTab >= 0) {
switchToTab(m_initialTab);
@@ -261,18 +268,29 @@ void ModInfoDialog::setTabsVisibility(bool firstTime)
reAddTabs(visibility, sel);
}
-void ModInfoDialog::updateTabs()
+void ModInfoDialog::updateTabs(bool becauseOriginChanged)
{
auto* origin = getOrigin();
for (auto& tabInfo : m_tabs) {
+ if (!tabInfo.isVisible()) {
+ continue;
+ }
+
+ if (becauseOriginChanged && !tabInfo.tab->usesOriginFiles()) {
+ continue;
+ }
+
tabInfo.tab->setMod(m_mod, origin);
tabInfo.tab->clear();
tabInfo.tab->update();
}
+
+ feedFiles(becauseOriginChanged);
+ setTabsColors();
}
-void ModInfoDialog::feedFiles()
+void ModInfoDialog::feedFiles(bool becauseOriginChanged)
{
const auto rootPath = m_mod->absolutePath();
@@ -282,6 +300,14 @@ void ModInfoDialog::feedFiles()
QString fileName = dirIterator.next();
for (auto& tabInfo : m_tabs) {
+ if (!tabInfo.isVisible()) {
+ continue;
+ }
+
+ if (becauseOriginChanged && !tabInfo.tab->usesOriginFiles()) {
+ continue;
+ }
+
if (tabInfo.tab->feedFile(rootPath, fileName)) {
break;
}
@@ -332,7 +358,7 @@ void ModInfoDialog::saveState(Settings& s) const
{
const auto tabState = saveTabState();
if (!tabState.isEmpty()) {
- s.directInterface().setValue("mod_info_tabs", tabState);
+ s.directInterface().setValue("mod_info_tab_order", tabState);
}
for (const auto& tabInfo : m_tabs) {
@@ -366,14 +392,13 @@ QString ModInfoDialog::saveTabState() const
std::vector<QString> ModInfoDialog::getOrderedTabNames() const
{
- const auto value = Settings::instance()
- .directInterface().value("mod_info_tabs");
+ const auto& settings = Settings::instance().directInterface();
std::vector<QString> v;
- if (value.type() == QVariant::ByteArray) {
+ if (settings.contains("mod_info_tabs")) {
// old byte array
- QDataStream stream(value.toByteArray());
+ QDataStream stream(settings.value("mod_info_tabs").toByteArray());
int count = 0;
stream >> count;
@@ -385,7 +410,7 @@ std::vector<QString> ModInfoDialog::getOrderedTabNames() const
}
} else {
// string list
- QString string = value.toString();
+ QString string = settings.value("mod_info_tab_order").toString();
QTextStream stream(&string);
while (!stream.atEnd()) {
@@ -458,14 +483,10 @@ void ModInfoDialog::reAddTabs(const std::vector<bool>& visibility, ETabs sel)
}
}
-int ModInfoDialog::tabIndex(const QString& tabId)
+void ModInfoDialog::onOriginModified(std::size_t tabIndex, int originID)
{
- for (int i = 0; i < ui->tabWidget->count(); ++i) {
- if (ui->tabWidget->widget(i)->objectName() == tabId) {
- return i;
- }
- }
- return -1;
+ emit originModified(originID);
+ updateTabs(true);
}
void ModInfoDialog::onDeleteShortcut()
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index 54e056b8..31ea5536 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -116,6 +116,7 @@ private:
QIcon icon;
TabInfo(std::unique_ptr<ModInfoDialogTab> tab);
+ bool isVisible() const;
};
std::unique_ptr<Ui::ModInfoDialog> ui;
@@ -131,15 +132,15 @@ private:
QString saveTabState() const;
void update(bool firstTime=false);
void onDeleteShortcut();
- int tabIndex(const QString &tabId);
MOShared::FilesOrigin* getOrigin();
void setTabsVisibility(bool firstTime);
- void updateTabs();
- void feedFiles();
+ void updateTabs(bool becauseOriginChanged=false);
+ void feedFiles(bool becauseOriginChanged);
void setTabsColors();
void switchToTab(ETabs id);
void reAddTabs(const std::vector<bool>& visibility, ETabs sel);
std::vector<QString> getOrderedTabNames() const;
+ void onOriginModified(std::size_t tabIndex, int originID);
template <class T>
std::unique_ptr<ModInfoDialogTab> createTab(int index)
diff --git a/src/modinfodialogcategories.cpp b/src/modinfodialogcategories.cpp
index 4bd10028..0d739d1f 100644
--- a/src/modinfodialogcategories.cpp
+++ b/src/modinfodialogcategories.cpp
@@ -42,6 +42,11 @@ bool CategoriesTab::canHandleSeparators() const
return true;
}
+bool CategoriesTab::usesOriginFiles() const
+{
+ return false;
+}
+
void CategoriesTab::add(
const CategoryFactory &factory, const std::set<int>& enabledCategories,
QTreeWidgetItem* root, int rootLevel)
diff --git a/src/modinfodialogcategories.h b/src/modinfodialogcategories.h
index 738b4e4d..392023e7 100644
--- a/src/modinfodialogcategories.h
+++ b/src/modinfodialogcategories.h
@@ -12,6 +12,7 @@ public:
void clear() override;
void update() override;
bool canHandleSeparators() const override;
+ bool usesOriginFiles() const override;
private:
void add(
diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp
index 172968ab..d296e000 100644
--- a/src/modinfodialognexus.cpp
+++ b/src/modinfodialognexus.cpp
@@ -102,6 +102,11 @@ void NexusTab::setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin)
mod.data(), &ModInfo::modDetailsUpdated, [&]{ onModChanged(); });
}
+bool NexusTab::usesOriginFiles() const
+{
+ return false;
+}
+
void NexusTab::updateVersionColor()
{
if (mod()->getVersion() != mod()->getNewestVersion()) {
diff --git a/src/modinfodialognexus.h b/src/modinfodialognexus.h
index ce1ef426..a09f4316 100644
--- a/src/modinfodialognexus.h
+++ b/src/modinfodialognexus.h
@@ -42,6 +42,7 @@ public:
void clear() override;
void update() override;
void setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin) override;
+ bool usesOriginFiles() const override;
private:
QMetaObject::Connection m_modConnection;
diff --git a/src/modinfodialogtab.cpp b/src/modinfodialogtab.cpp
index 2f5fbdb8..009fb804 100644
--- a/src/modinfodialogtab.cpp
+++ b/src/modinfodialogtab.cpp
@@ -53,6 +53,11 @@ bool ModInfoDialogTab::canHandleUnmanaged() const
return false;
}
+bool ModInfoDialogTab::usesOriginFiles() const
+{
+ return true;
+}
+
void ModInfoDialogTab::setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin)
{
m_mod = mod;
@@ -158,3 +163,8 @@ void NotesTab::onNotes()
mod()->setNotes(ui->notesEdit->toHtml());
}
}
+
+bool NotesTab::usesOriginFiles() const
+{
+ return false;
+}
diff --git a/src/modinfodialogtab.h b/src/modinfodialogtab.h
index fae5bc41..c85d2ded 100644
--- a/src/modinfodialogtab.h
+++ b/src/modinfodialogtab.h
@@ -27,10 +27,12 @@ public:
virtual bool canClose();
virtual void saveState(Settings& s);
virtual void restoreState(const Settings& s);
+
virtual bool deleteRequested();
virtual bool canHandleSeparators() const;
virtual bool canHandleUnmanaged() const;
+ virtual bool usesOriginFiles() const;
virtual void setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin);
@@ -81,6 +83,7 @@ public:
void clear() override;
void update() override;
bool canHandleSeparators() const override;
+ bool usesOriginFiles() const override;
private:
void onComments();