summaryrefslogtreecommitdiff
path: root/src/overwriteinfodialog.cpp
diff options
context:
space:
mode:
authorJeremy Rimpo <jeremy.rimpo@servermonkey.com>2025-05-23 14:08:01 -0500
committerGitHub <noreply@github.com>2025-05-23 14:08:01 -0500
commit3a8ea3cccee06397e90305e1e39a305f8b7c3cb3 (patch)
tree6c16bf9825bf3f1613a8536d4702f24667fc4c80 /src/overwriteinfodialog.cpp
parent5d766e94a7a3b3fa861d57d3ad6ae619d98dd5d8 (diff)
Oblivion Remastered Meta PR (#2241)
* Allow for mod directory maps - Set main data files based on game - Mapped mod directories to VFS - Update overwrite setup * Skip if mod contains no 'data' dir * More mod directory compatibility fixes * Workaround for Obl:Rem save location - SLocalSavePath does nothing yet MO2 wants to use it to override the default save location - This only applies to BGS games anyway, we should move this logic * First pass for overwrite mod directory support * More overwrite move / delete restrictions * Fix issue with moving directories that are not required * Formatting pass * More modDataDirectory updates * Formatting --------- Co-authored-by: Mikaƫl Capelle <capelle.mikael@gmail.com>
Diffstat (limited to 'src/overwriteinfodialog.cpp')
-rw-r--r--src/overwriteinfodialog.cpp48
1 files changed, 42 insertions, 6 deletions
diff --git a/src/overwriteinfodialog.cpp b/src/overwriteinfodialog.cpp
index 366671e7..11e6fc32 100644
--- a/src/overwriteinfodialog.cpp
+++ b/src/overwriteinfodialog.cpp
@@ -18,7 +18,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
#include "overwriteinfodialog.h"
-#include "organizercore.h"
#include "report.h"
#include "ui_overwriteinfodialog.h"
#include "utility.h"
@@ -29,15 +28,17 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
-OverwriteInfoDialog::OverwriteInfoDialog(ModInfo::Ptr modInfo, QWidget* parent)
- : QDialog(parent), ui(new Ui::OverwriteInfoDialog), m_FileSystemModel(nullptr),
- m_DeleteAction(nullptr), m_RenameAction(nullptr), m_OpenAction(nullptr)
+OverwriteInfoDialog::OverwriteInfoDialog(ModInfo::Ptr modInfo, OrganizerCore& organizer,
+ QWidget* parent)
+ : QDialog(parent), m_Organizer(organizer), ui(new Ui::OverwriteInfoDialog),
+ m_FileSystemModel(nullptr), m_DeleteAction(nullptr), m_RenameAction(nullptr),
+ m_OpenAction(nullptr)
{
ui->setupUi(this);
this->setWindowModality(Qt::NonModal);
- m_FileSystemModel = new OverwriteFileSystemModel(this);
+ m_FileSystemModel = new OverwriteFileSystemModel(this, organizer);
m_FileSystemModel->setReadOnly(false);
setModInfo(modInfo);
ui->filesView->setModel(m_FileSystemModel);
@@ -137,10 +138,19 @@ void OverwriteInfoDialog::delete_activated()
QItemSelectionModel* selection = ui->filesView->selectionModel();
if (selection->hasSelection() && selection->selectedRows().count() >= 1) {
+ auto root = m_FileSystemModel->rootDirectory();
if (selection->selectedRows().count() == 0) {
return;
} else if (selection->selectedRows().count() == 1) {
+ for (auto modDir : m_Organizer.managedGame()->getModMappings().keys()) {
+ if (root.absoluteFilePath(modDir).compare(
+ m_FileSystemModel->filePath(selection->selectedRows().at(0)),
+ Qt::CaseInsensitive) == 0) {
+ return;
+ }
+ }
+
QString fileName = m_FileSystemModel->fileName(selection->selectedRows().at(0));
if (QMessageBox::question(
this, tr("Confirm"),
@@ -158,6 +168,12 @@ void OverwriteInfoDialog::delete_activated()
}
foreach (QModelIndex index, selection->selectedRows()) {
+ for (auto modDir : m_Organizer.managedGame()->getModMappings().keys()) {
+ if (root.absoluteFilePath(modDir).compare(m_FileSystemModel->filePath(index),
+ Qt::CaseInsensitive) == 0) {
+ return;
+ }
+ }
deleteFile(index);
}
}
@@ -166,9 +182,17 @@ void OverwriteInfoDialog::delete_activated()
void OverwriteInfoDialog::deleteTriggered()
{
+ auto root = m_FileSystemModel->rootDirectory();
if (m_FileSelection.count() == 0) {
return;
} else if (m_FileSelection.count() == 1) {
+ for (auto modDir : m_Organizer.managedGame()->getModMappings().keys()) {
+ if (root.absoluteFilePath(modDir).compare(
+ m_FileSystemModel->filePath(m_FileSelection.at(0)),
+ Qt::CaseInsensitive) == 0) {
+ return;
+ }
+ }
QString fileName = m_FileSystemModel->fileName(m_FileSelection.at(0));
if (QMessageBox::question(
this, tr("Confirm"),
@@ -185,18 +209,30 @@ void OverwriteInfoDialog::deleteTriggered()
}
foreach (QModelIndex index, m_FileSelection) {
+ for (auto modDir : m_Organizer.managedGame()->getModMappings().keys()) {
+ if (root.absoluteFilePath(modDir).compare(m_FileSystemModel->filePath(index),
+ Qt::CaseInsensitive) == 0) {
+ return;
+ }
+ }
deleteFile(index);
}
}
void OverwriteInfoDialog::renameTriggered()
{
+ auto root = m_FileSystemModel->rootDirectory();
QModelIndex selection = m_FileSelection.at(0);
QModelIndex index = selection.sibling(selection.row(), 0);
if (!index.isValid() || m_FileSystemModel->isReadOnly()) {
return;
}
-
+ for (auto modDir : m_Organizer.managedGame()->getModMappings().keys()) {
+ if (root.absoluteFilePath(modDir).compare(m_FileSystemModel->filePath(selection),
+ Qt::CaseInsensitive) == 0) {
+ return;
+ }
+ }
ui->filesView->edit(index);
}