summaryrefslogtreecommitdiff
path: root/src/savestab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/savestab.cpp')
-rw-r--r--src/savestab.cpp133
1 files changed, 70 insertions, 63 deletions
diff --git a/src/savestab.cpp b/src/savestab.cpp
index 5b0b5275..c6ab645f 100644
--- a/src/savestab.cpp
+++ b/src/savestab.cpp
@@ -1,15 +1,16 @@
#include "savestab.h"
-#include "ui_mainwindow.h"
-#include "organizercore.h"
#include "activatemodsdialog.h"
+#include "organizercore.h"
+#include "ui_mainwindow.h"
#include <iplugingame.h>
#include <isavegameinfowidget.h>
using namespace MOBase;
SavesTab::SavesTab(QWidget* window, OrganizerCore& core, Ui::MainWindow* mwui)
- : m_window(window), m_core(core), m_CurrentSaveView(nullptr), ui{
- mwui->tabWidget, mwui->savesTab, mwui->savegameList}
+ : m_window(window), m_core(core),
+ m_CurrentSaveView(nullptr), ui{mwui->tabWidget, mwui->savesTab,
+ mwui->savegameList}
{
m_SavesWatcherTimer.setSingleShot(true);
m_SavesWatcherTimer.setInterval(500);
@@ -17,21 +18,21 @@ SavesTab::SavesTab(QWidget* window, OrganizerCore& core, Ui::MainWindow* mwui)
ui.list->installEventFilter(this);
ui.list->setMouseTracking(true);
- connect(
- &m_SavesWatcher, &QFileSystemWatcher::directoryChanged,
- [&]{ m_SavesWatcherTimer.start(); });
+ connect(&m_SavesWatcher, &QFileSystemWatcher::directoryChanged, [&] {
+ m_SavesWatcherTimer.start();
+ });
- connect(
- &m_SavesWatcherTimer, &QTimer::timeout,
- [&]{ refreshSavesIfOpen(); });
+ connect(&m_SavesWatcherTimer, &QTimer::timeout, [&] {
+ refreshSavesIfOpen();
+ });
- connect(
- ui.list, &QWidget::customContextMenuRequested,
- [&](auto pos){ onContextMenu(pos); });
+ connect(ui.list, &QWidget::customContextMenuRequested, [&](auto pos) {
+ onContextMenu(pos);
+ });
- connect(
- ui.list, &QTreeWidget::itemEntered,
- [&](auto* item){ saveSelectionChanged(item); });
+ connect(ui.list, &QTreeWidget::itemEntered, [&](auto* item) {
+ saveSelectionChanged(item);
+ });
}
bool SavesTab::eventFilter(QObject* object, QEvent* e)
@@ -40,7 +41,7 @@ bool SavesTab::eventFilter(QObject* object, QEvent* e)
if (e->type() == QEvent::Leave || e->type() == QEvent::WindowDeactivate) {
hideSaveGameInfo();
} else if (e->type() == QEvent::KeyPress) {
- QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
+ QKeyEvent* keyEvent = static_cast<QKeyEvent*>(e);
if (keyEvent->key() == Qt::Key_Delete) {
deleteSavegame();
}
@@ -50,19 +51,19 @@ bool SavesTab::eventFilter(QObject* object, QEvent* e)
return false;
}
-void SavesTab::displaySaveGameInfo(QTreeWidgetItem *newItem)
+void SavesTab::displaySaveGameInfo(QTreeWidgetItem* newItem)
{
// don't display the widget if the main window doesn't have focus
//
// this goes against the standard behaviour for tooltips, which are displayed
// on hover regardless of focus, but this widget is so large and busy that
// it's probably better this way
- if (!m_window->isActiveWindow()){
+ if (!m_window->isActiveWindow()) {
return;
}
if (m_CurrentSaveView == nullptr) {
- const IPluginGame* game = m_core.managedGame();
+ const IPluginGame* game = m_core.managedGame();
const SaveGameInfo* info = game->feature<SaveGameInfo>();
if (info != nullptr) {
@@ -76,7 +77,7 @@ void SavesTab::displaySaveGameInfo(QTreeWidgetItem *newItem)
m_CurrentSaveView->setSave(*m_SaveGames[ui.list->indexOfTopLevelItem(newItem)]);
- QWindow *window = m_CurrentSaveView->window()->windowHandle();
+ QWindow* window = m_CurrentSaveView->window()->windowHandle();
QRect screenRect;
if (window == nullptr)
screenRect = QGuiApplication::primaryScreen()->geometry();
@@ -98,20 +99,20 @@ void SavesTab::displaySaveGameInfo(QTreeWidgetItem *newItem)
m_CurrentSaveView->move(pos);
m_CurrentSaveView->show();
- m_CurrentSaveView->setProperty("displayItem", QVariant::fromValue(static_cast<void *>(newItem)));
+ m_CurrentSaveView->setProperty("displayItem",
+ QVariant::fromValue(static_cast<void*>(newItem)));
}
-
-void SavesTab::saveSelectionChanged(QTreeWidgetItem *newItem)
+void SavesTab::saveSelectionChanged(QTreeWidgetItem* newItem)
{
if (newItem == nullptr) {
hideSaveGameInfo();
- } else if (m_CurrentSaveView == nullptr || newItem != m_CurrentSaveView->property("displayItem").value<void*>()) {
+ } else if (m_CurrentSaveView == nullptr ||
+ newItem != m_CurrentSaveView->property("displayItem").value<void*>()) {
displaySaveGameInfo(newItem);
}
}
-
void SavesTab::hideSaveGameInfo()
{
if (m_CurrentSaveView != nullptr) {
@@ -142,14 +143,11 @@ QDir SavesTab::currentSavesDir() const
QString iniPath = m_core.currentProfile()->absoluteIniFilePath(iniFiles[0]);
wchar_t path[MAX_PATH];
- if (::GetPrivateProfileStringW(
- L"General", L"SLocalSavePath", L"",
- path, MAX_PATH,
- iniPath.toStdWString().c_str()
- )) {
- savesDir.setPath(m_core.managedGame()->documentsDirectory().absoluteFilePath(QString::fromWCharArray(path)));
- }
- else {
+ if (::GetPrivateProfileStringW(L"General", L"SLocalSavePath", L"", path, MAX_PATH,
+ iniPath.toStdWString().c_str())) {
+ savesDir.setPath(m_core.managedGame()->documentsDirectory().absoluteFilePath(
+ QString::fromWCharArray(path)));
+ } else {
savesDir = m_core.managedGame()->savesDirectory();
}
}
@@ -177,26 +175,24 @@ void SavesTab::refreshSaveList()
{
TimeThis tt("MainWindow::refreshSaveList()");
- startMonitorSaves(); // re-starts monitoring
+ startMonitorSaves(); // re-starts monitoring
- try
- {
+ try {
QDir savesDir = currentSavesDir();
MOBase::log::debug("reading save games from {}", savesDir.absolutePath());
m_SaveGames = m_core.managedGame()->listSaves(savesDir);
- std::sort(m_SaveGames.begin(), m_SaveGames.end(), [](auto const& lhs, auto const& rhs) {
- return lhs->getCreationTime() > rhs->getCreationTime();
- });
+ std::sort(m_SaveGames.begin(), m_SaveGames.end(),
+ [](auto const& lhs, auto const& rhs) {
+ return lhs->getCreationTime() > rhs->getCreationTime();
+ });
ui.list->clear();
- for (auto& save: m_SaveGames) {
+ for (auto& save : m_SaveGames) {
auto relpath = savesDir.relativeFilePath(save->getFilepath());
auto display = save->getName();
- ui.list->addTopLevelItem(new QTreeWidgetItem(ui.list, { display, relpath }));
+ ui.list->addTopLevelItem(new QTreeWidgetItem(ui.list, {display, relpath}));
}
- }
- catch(std::exception& e)
- {
+ } catch (std::exception& e) {
// listSaves() can throw
log::error("{}", e.what());
}
@@ -204,19 +200,20 @@ void SavesTab::refreshSaveList()
void SavesTab::deleteSavegame()
{
- SaveGameInfo const *info = m_core.managedGame()->feature<SaveGameInfo>();
+ SaveGameInfo const* info = m_core.managedGame()->feature<SaveGameInfo>();
QString savesMsgLabel;
QStringList deleteFiles;
int count = 0;
- for (const QModelIndex &idx : ui.list->selectionModel()->selectedRows()) {
+ for (const QModelIndex& idx : ui.list->selectionModel()->selectedRows()) {
auto& saveGame = m_SaveGames[idx.row()];
if (count < 10) {
- savesMsgLabel += "<li>" + QFileInfo(saveGame->getFilepath()).completeBaseName() + "</li>";
+ savesMsgLabel +=
+ "<li>" + QFileInfo(saveGame->getFilepath()).completeBaseName() + "</li>";
}
++count;
@@ -227,18 +224,19 @@ void SavesTab::deleteSavegame()
savesMsgLabel += "<li><i>... " + tr("%1 more").arg(count - 10) + "</i></li>";
}
- if (QMessageBox::question(m_window, tr("Confirm"),
- tr("Are you sure you want to remove the following %n save(s)?<br>"
- "<ul>%1</ul><br>"
- "Removed saves will be sent to the Recycle Bin.", "", count)
- .arg(savesMsgLabel),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- shellDelete(deleteFiles, true); // recycle bin delete.
+ if (QMessageBox::question(
+ m_window, tr("Confirm"),
+ tr("Are you sure you want to remove the following %n save(s)?<br>"
+ "<ul>%1</ul><br>"
+ "Removed saves will be sent to the Recycle Bin.",
+ "", count)
+ .arg(savesMsgLabel),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ shellDelete(deleteFiles, true); // recycle bin delete.
refreshSaveList();
}
}
-
void SavesTab::onContextMenu(const QPoint& pos)
{
QItemSelectionModel* selection = ui.list->selectionModel();
@@ -257,27 +255,35 @@ void SavesTab::onContextMenu(const QPoint& pos)
auto& save = m_SaveGames[selection->selectedRows()[0].row()];
SaveGameInfo::MissingAssets missing = info->getMissingAssets(*save);
if (missing.size() != 0) {
- connect(action, &QAction::triggered, this, [this, missing] { fixMods(missing); });
+ connect(action, &QAction::triggered, this, [this, missing] {
+ fixMods(missing);
+ });
action->setEnabled(true);
}
}
}
- QString deleteMenuLabel = tr("Delete %n save(s)", "", selection->selectedRows().count());
- menu.addAction(deleteMenuLabel, [&]{ deleteSavegame(); });
+ QString deleteMenuLabel =
+ tr("Delete %n save(s)", "", selection->selectedRows().count());
+ menu.addAction(deleteMenuLabel, [&] {
+ deleteSavegame();
+ });
- menu.addAction(tr("Open in Explorer..."), [&]{ openInExplorer(); });
+ menu.addAction(tr("Open in Explorer..."), [&] {
+ openInExplorer();
+ });
menu.exec(ui.list->viewport()->mapToGlobal(pos));
}
-void SavesTab::fixMods(SaveGameInfo::MissingAssets const &missingAssets)
+void SavesTab::fixMods(SaveGameInfo::MissingAssets const& missingAssets)
{
ActivateModsDialog dialog(missingAssets, m_window);
if (dialog.exec() == QDialog::Accepted) {
// activate the required mods, then enable all esps
std::set<QString> modsToActivate = dialog.getModsToActivate();
- for (std::set<QString>::iterator iter = modsToActivate.begin(); iter != modsToActivate.end(); ++iter) {
+ for (std::set<QString>::iterator iter = modsToActivate.begin();
+ iter != modsToActivate.end(); ++iter) {
if ((*iter != "<data>") && (*iter != "<overwrite>")) {
unsigned int modIndex = ModInfo::getIndex(*iter);
m_core.currentProfile()->setModEnabled(modIndex, true);
@@ -288,7 +294,8 @@ void SavesTab::fixMods(SaveGameInfo::MissingAssets const &missingAssets)
m_core.refreshLists();
std::set<QString> espsToActivate = dialog.getESPsToActivate();
- for (std::set<QString>::iterator iter = espsToActivate.begin(); iter != espsToActivate.end(); ++iter) {
+ for (std::set<QString>::iterator iter = espsToActivate.begin();
+ iter != espsToActivate.end(); ++iter) {
m_core.pluginList()->enableESP(*iter);
}