From 48174f0f868950ae31d738b529407749a0205ea1 Mon Sep 17 00:00:00 2001 From: Lychee Lynx <248896295+lychee-lynx@users.noreply.github.com> Date: Sun, 5 Apr 2026 16:38:16 +0530 Subject: [PATCH] Add: Allow some or all deleted default profiles to be restored --- src/dlgConnectionProfiles.cpp | 27 ++++++++++++++++++++ src/dlgConnectionProfiles.h | 3 +++ src/mudlet.cpp | 48 +++++++++++++++++++++++++++++++++++ src/mudlet.h | 1 + 4 files changed, 79 insertions(+) diff --git a/src/dlgConnectionProfiles.cpp b/src/dlgConnectionProfiles.cpp index 5cbdca34685..0ba55c10765 100644 --- a/src/dlgConnectionProfiles.cpp +++ b/src/dlgConnectionProfiles.cpp @@ -835,6 +835,33 @@ void dlgConnectionProfiles::reallyDeleteProfile(const QString& profile) listWidget_profiles->setFocus(); } +QStringList dlgConnectionProfiles::getDeletedDefaults() const +{ + auto& settings = *mudlet::self()->mpSettings; + return settings.value(qsl("deletedDefaultMuds"), QStringList()).toStringList(); +} + +void dlgConnectionProfiles::slot_restoreDefaultProfile(const QString& profile) +{ + auto& settings = *mudlet::self()->mpSettings; + auto deletedDefaultMuds = getDeletedDefaults(); + + if(!deletedDefaultMuds.contains(profile)) + return; + + deletedDefaultMuds.removeAll(profile); + settings.setValue(qsl("deletedDefaultMuds"), deletedDefaultMuds); + + fillout_form(); +} + +void dlgConnectionProfiles::slot_restoreAllDefaults() +{ + auto& settings = *mudlet::self()->mpSettings; + settings.setValue(qsl("deletedDefaultMuds"), QStringList()); + fillout_form(); +} + // called when the 'delete' button is pressed, raises a dialog to confirm deletion // if this profile has been used void dlgConnectionProfiles::slot_deleteProfile() diff --git a/src/dlgConnectionProfiles.h b/src/dlgConnectionProfiles.h index 021720910c9..6c6132c3cd4 100644 --- a/src/dlgConnectionProfiles.h +++ b/src/dlgConnectionProfiles.h @@ -50,6 +50,7 @@ class dlgConnectionProfiles : public QDialog, public Ui::connection_profiles QList findData(const QListWidget& listWidget, const QVariant& what, const int role = Qt::UserRole) const; QList findProfilesBeginningWith(const QString&) const; static const int csmNameRole{Qt::UserRole}; + QStringList getDeletedDefaults() const; QString btn_connect_enabled_accessDesc; QString btn_load_enabled_accessDesc; @@ -76,6 +77,8 @@ public slots: void slot_addProfile(); void slot_deleteProfile(); void slot_reallyDeleteProfile(); + void slot_restoreDefaultProfile(const QString& profile); + void slot_restoreAllDefaults(); void slot_updateAutoConnect(int state); void slot_updateAutoReconnect(int state); diff --git a/src/mudlet.cpp b/src/mudlet.cpp index d96fd2ca036..2b55d09b1e4 100644 --- a/src/mudlet.cpp +++ b/src/mudlet.cpp @@ -239,6 +239,7 @@ void mudlet::init() menuHelp->setToolTipsVisible(true); menuAbout->setToolTipsVisible(true); + setupRestoreDefaultsMenu(); setAttribute(Qt::WA_DeleteOnClose); const QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setWindowTitle(scmVersion); @@ -3222,6 +3223,53 @@ void mudlet::restoreProfileFocus(const QString& profileName) }); } +void mudlet::setupRestoreDefaultsMenu() +{ + auto restoreDefaultsMenu = menuGames->addMenu(tr("Restore Default Profiles")); + connect(restoreDefaultsMenu, &QMenu::aboutToShow, this, [this, restoreDefaultsMenu]() { + // Ensure no previous entries exist to avoid duplicates + restoreDefaultsMenu->clear(); + mpSettings->sync(); + QStringList deleted = mpSettings->value(qsl("deletedDefaultMuds"), QStringList()).toStringList(); + for (const auto& game : TGameDetails::scmDefaultGames) { + if (deleted.contains(game.name)) { + QAction* restore = new QAction(game.name, restoreDefaultsMenu); + connect(restore, &QAction::triggered, this, [this, game]() { + auto* dlg = findChild(); + // Open dialog if not open + if (!dlg) { + slot_showConnectionDialog(); + dlg = findChild(); + } + // Restore specific deleted game + if (dlg) { + dlg->slot_restoreDefaultProfile(game.name); + } + }); + restoreDefaultsMenu->addAction(restore); + } + } + + if (!deleted.isEmpty()) { + restoreDefaultsMenu->addSeparator(); + QAction* restoreAll = new QAction(tr("Restore All Defaults"), restoreDefaultsMenu); + connect(restoreAll, &QAction::triggered, this, [this]() { + auto* dlg = findChild(); + if (!dlg) { + slot_showConnectionDialog(); + dlg = findChild(); + } + // Restore all default games + if (dlg) { + dlg->slot_restoreAllDefaults(); + } + }); + restoreDefaultsMenu->addAction(restoreAll); + } + restoreDefaultsMenu->setEnabled(true); + }); +} + void mudlet::setupEditorFocusRestoration(dlgTriggerEditor* pEditor, const QString& profileName, QWidget* targetWindow) { if (!pEditor) { diff --git a/src/mudlet.h b/src/mudlet.h index fede1a7bc60..b66a5e9b13f 100644 --- a/src/mudlet.h +++ b/src/mudlet.h @@ -568,6 +568,7 @@ private slots: bool scanDictionaryFile(const QString& dictionaryPath, int&, QHash&, QStringList&); int scanWordList(QStringList&, QHash&); void setupTrayIcon(); + void setupRestoreDefaultsMenu(); void reshowRequiredMainConsoles(); void toggleMute(bool state, QAction* toolbarAction, QAction* menuAction, bool isAPINotGame, const QString& unmuteText, const QString& muteText); dlgTriggerEditor* createMudletEditor();