summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/mainwindow.ui4
-rw-r--r--src/modinfo.cpp120
-rw-r--r--src/modinfo.h6
-rw-r--r--src/modinfodialog.cpp17
-rw-r--r--src/profile.cpp6
-rw-r--r--src/profile.h5
-rw-r--r--src/shared/appconfig.inc1
8 files changed, 85 insertions, 78 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 12db5e2b..556c33f3 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -217,6 +217,9 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
ui->bsaList->setLocalMoveOnly(true);
+ ui->splitter->setStretchFactor(0, 3);
+ ui->splitter->setStretchFactor(1, 2);
+
resizeLists(initSettings.contains("mod_list_state"), initSettings.contains("plugin_list_state"));
QMenu *linkMenu = new QMenu(this);
@@ -3158,6 +3161,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
dialog->activateWindow();
connect(dialog, SIGNAL(finished(int)), this, SLOT(overwriteClosed(int)));
} else {
+ modInfo->saveMeta();
ModInfoDialog dialog(modInfo, m_DirectoryStructure, this);
connect(&dialog, SIGNAL(nexusLinkActivated(QString)), this, SLOT(nexusLinkActivated(QString)));
connect(&dialog, SIGNAL(downloadRequest(QString)), this, SLOT(downloadRequestedNXM(QString)));
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 110c14c6..26cbbf83 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>868</width>
- <height>701</height>
+ <width>926</width>
+ <height>710</height>
</rect>
</property>
<property name="windowTitle">
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index ff44b392..ed13deae 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -300,8 +300,37 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc
testValid();
m_CreationTime = QFileInfo(path.absolutePath()).created();
// read out the meta-file for information
- QString metaFileName = path.absoluteFilePath("meta.ini");
- QSettings metaFile(metaFileName, QSettings::IniFormat);
+ readMeta();
+
+ connect(&m_NexusBridge, SIGNAL(descriptionAvailable(int,QVariant,QVariant)), this, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant)));
+ connect(&m_NexusBridge, SIGNAL(endorsementToggled(int,QVariant,QVariant)), this, SLOT(nxmEndorsementToggled(int,QVariant,QVariant)));
+ connect(&m_NexusBridge, SIGNAL(requestFailed(int,int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,int,QVariant,QString)));
+}
+
+
+ModInfoRegular::~ModInfoRegular()
+{
+ try {
+ saveMeta();
+ } catch (const std::exception &e) {
+ qCritical("failed to save meta information for \"%s\": %s",
+ m_Name.toUtf8().constData(), e.what());
+ }
+}
+
+bool ModInfoRegular::isEmpty() const
+{
+ QDirIterator iter(m_Path, QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ if (!iter.hasNext()) return true;
+ iter.next();
+ if ((iter.fileName() == "meta.ini") && !iter.hasNext()) return true;
+ return false;
+}
+
+
+void ModInfoRegular::readMeta()
+{
+ QSettings metaFile(m_Path + "/meta.ini", QSettings::IniFormat);
m_Notes = metaFile.value("notes", "").toString();
m_NexusID = metaFile.value("modid", -1).toInt();
@@ -324,7 +353,6 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc
}
}
-
QString categoriesString = metaFile.value("category", "").toString();
QStringList categories = categoriesString.split(',', QString::SkipEmptyParts);
@@ -343,77 +371,39 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc
}
}
- connect(&m_NexusBridge, SIGNAL(descriptionAvailable(int,QVariant,QVariant)), this, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant)));
- connect(&m_NexusBridge, SIGNAL(endorsementToggled(int,QVariant,QVariant)), this, SLOT(nxmEndorsementToggled(int,QVariant,QVariant)));
- connect(&m_NexusBridge, SIGNAL(requestFailed(int,int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,int,QVariant,QString)));
-}
-
-
-ModInfoRegular::~ModInfoRegular()
-{
- try {
- saveMeta();
- } catch (const std::exception &e) {
- qCritical("failed to save meta information for \"%s\": %s",
- m_Name.toUtf8().constData(), e.what());
- }
-}
-
-bool ModInfoRegular::isEmpty() const
-{
- QDirIterator iter(m_Path, QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- if (!iter.hasNext()) return true;
- iter.next();
- if ((iter.fileName() == "meta.ini") && !iter.hasNext()) return true;
- return false;
+ m_MetaInfoChanged = false;
}
-
void ModInfoRegular::saveMeta()
{
// only write meta data if the mod directory exists
if (m_MetaInfoChanged && QFile::exists(absolutePath())) {
- bool success = false;
- {
- QSettings metaFile(absolutePath().append("/meta.ini.new"), QSettings::IniFormat);
- if (metaFile.status() == QSettings::NoError) {
- std::set<int> temp = m_Categories;
- temp.erase(m_PrimaryCategory);
- metaFile.setValue("category", QString("%1").arg(m_PrimaryCategory) + "," + SetJoin(temp, ","));
- metaFile.setValue("newestVersion", m_NewestVersion.canonicalString());
- metaFile.setValue("ignoredVersion", m_IgnoredVersion.canonicalString());
- metaFile.setValue("version", m_Version.canonicalString());
- if (m_NexusID != -1) {
- metaFile.setValue("modid", m_NexusID);
- }
- metaFile.setValue("notes", m_Notes);
- metaFile.setValue("nexusDescription", m_NexusDescription);
- metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate));
- if (m_EndorsedState != ENDORSED_UNKNOWN) {
- metaFile.setValue("endorsed", m_EndorsedState);
- }
- metaFile.sync(); // sync needs to be called to ensure the file is created
-
- if (metaFile.status() == QSettings::NoError) {
- success = true;
- m_MetaInfoChanged = false;
- } else {
- reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
- }
- } else {
- reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
+ QSettings metaFile(absolutePath().append("/meta.ini"), QSettings::IniFormat);
+ if (metaFile.status() == QSettings::NoError) {
+ std::set<int> temp = m_Categories;
+ temp.erase(m_PrimaryCategory);
+ metaFile.setValue("category", QString("%1").arg(m_PrimaryCategory) + "," + SetJoin(temp, ","));
+ metaFile.setValue("newestVersion", m_NewestVersion.canonicalString());
+ metaFile.setValue("ignoredVersion", m_IgnoredVersion.canonicalString());
+ metaFile.setValue("version", m_Version.canonicalString());
+ if (m_NexusID != -1) {
+ metaFile.setValue("modid", m_NexusID);
}
- }
- if (success) {
- if (!QFile::remove(absolutePath().append("/meta.ini"))) {
- qCritical("failed to remove %s", qPrintable(absolutePath().append("/meta.ini")));
- return;
+ metaFile.setValue("notes", m_Notes);
+ metaFile.setValue("nexusDescription", m_NexusDescription);
+ metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate));
+ if (m_EndorsedState != ENDORSED_UNKNOWN) {
+ metaFile.setValue("endorsed", m_EndorsedState);
}
- if (QFile::rename(absolutePath().append("/meta.ini.new"), absolutePath().append("/meta.ini"))) {
- qDebug("%s written", qPrintable(absolutePath().append("/meta.ini")));
+ metaFile.sync(); // sync needs to be called to ensure the file is created
+
+ if (metaFile.status() == QSettings::NoError) {
+ m_MetaInfoChanged = false;
} else {
- qCritical("writing %s failed", qPrintable(absolutePath().append("/meta.ini")));
+ reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
}
+ } else {
+ reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
}
}
}
@@ -717,13 +707,11 @@ QString ModInfoRegular::getNexusDescription() const
return m_NexusDescription;
}
-
ModInfoRegular::EEndorsedState ModInfoRegular::endorsedState() const
{
return m_EndorsedState;
}
-
ModInfoRegular::EConflictType ModInfoRegular::isConflicted() const
{
// this is costy so cache the result
diff --git a/src/modinfo.h b/src/modinfo.h
index b7d72584..8b37b915 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -432,6 +432,11 @@ public:
void testValid();
/**
+ * @brief reads meta information from disk
+ */
+ virtual void readMeta() {}
+
+ /**
* @brief stores meta information back to disk
*/
virtual void saveMeta() {}
@@ -748,6 +753,7 @@ public:
*/
virtual void saveMeta();
+ void readMeta();
private:
enum EConflictType {
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 117b2726..dae4cc18 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -158,9 +158,8 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
ModInfoDialog::~ModInfoDialog()
{
m_ModInfo->setNotes(ui->notesEdit->toPlainText());
- saveIniTweaks();
saveCategories(ui->categoriesTree->invisibleRootItem());
-
+ saveIniTweaks(); // ini tweaks are written to the ini file directly. This is the only information not managed by ModInfo
delete ui;
delete m_Settings;
}
@@ -216,7 +215,6 @@ QByteArray ModInfoDialog::saveTabState() const
stream << ui->tabWidget->count();
for (int i = 0; i < ui->tabWidget->count(); ++i) {
stream << ui->tabWidget->widget(i)->objectName();
-
}
return result;
@@ -475,18 +473,15 @@ void ModInfoDialog::openIniFile(const QString &fileName)
void ModInfoDialog::saveIniTweaks()
{
- QListWidget *iniTweaksList = findChild<QListWidget*>("iniTweaksList");
-
m_Settings->beginWriteArray("INI Tweaks");
int countEnabled = 0;
- for (int i = 0; i < iniTweaksList->count(); ++i) {
- if (iniTweaksList->item(i)->checkState() == Qt::Checked) {
+ for (int i = 0; i < ui->iniTweaksList->count(); ++i) {
+ if (ui->iniTweaksList->item(i)->checkState() == Qt::Checked) {
m_Settings->setArrayIndex(countEnabled++);
- m_Settings->setValue("name", iniTweaksList->item(i)->text());
+ m_Settings->setValue("name", ui->iniTweaksList->item(i)->text());
}
}
-
m_Settings->endArray();
}
@@ -1229,8 +1224,10 @@ void ModInfoDialog::createTweak()
return;
}
- QListWidgetItem *newTweak = new QListWidgetItem(name);
+ QListWidgetItem *newTweak = new QListWidgetItem(name + ".ini");
newTweak->setData(Qt::UserRole, "INI Tweaks/" + name + ".ini");
+ newTweak->setFlags(newTweak->flags() | Qt::ItemIsUserCheckable);
+ newTweak->setCheckState(Qt::Unchecked);
ui->iniTweaksList->addItem(newTweak);
}
diff --git a/src/profile.cpp b/src/profile.cpp
index c1f1025e..41a867c5 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -201,6 +201,7 @@ void Profile::createTweakedIniFile()
}
}
+ mergeTweak(getProfileTweaks(), tweakedIni);
bool error = false;
if (!::WritePrivateProfileStringW(L"Archive", L"bInvalidateOlderFiles", L"1", ToWString(tweakedIni).c_str())) {
@@ -740,6 +741,11 @@ QString Profile::getIniFileName() const
return m_Directory.absoluteFilePath(ToQString(primaryIniFile));
}
+QString Profile::getProfileTweaks() const
+{
+ return QDir::cleanPath(m_Directory.absoluteFilePath(ToQString(AppConfig::profileTweakIni())));
+}
+
QString Profile::getPath() const
{
diff --git a/src/profile.h b/src/profile.h
index 9c678a23..4960671a 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -178,6 +178,11 @@ public:
QString getIniFileName() const;
/**
+ * @return the path of the tweak ini in this profile
+ */
+ QString getProfileTweaks() const;
+
+ /**
* @return path to this profile
**/
QString getPath() const;
diff --git a/src/shared/appconfig.inc b/src/shared/appconfig.inc
index 7710925a..080d3655 100644
--- a/src/shared/appconfig.inc
+++ b/src/shared/appconfig.inc
@@ -1,6 +1,7 @@
APPPARAM(std::wstring, translationPrefix, L"organizer")
APPPARAM(std::wstring, pluginPath, L"plugins")
APPPARAM(std::wstring, stylesheetsPath, L"stylesheets")
+APPPARAM(std::wstring, profileTweakIni, L"profile_tweaks.ini")
APPPARAM(std::wstring, logFile, L"ModOrganizer.log")
APPPARAM(std::wstring, proxyDLLTarget, L"steam_api.dll")
APPPARAM(std::wstring, proxyDLLOrig, L"steam_api_orig.dll") // needs to be identical to the value used in proxydll-project