Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions src/dlgConnectionProfiles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
3 changes: 3 additions & 0 deletions src/dlgConnectionProfiles.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class dlgConnectionProfiles : public QDialog, public Ui::connection_profiles
QList<QListWidgetItem*> findData(const QListWidget& listWidget, const QVariant& what, const int role = Qt::UserRole) const;
QList<int> findProfilesBeginningWith(const QString&) const;
static const int csmNameRole{Qt::UserRole};
QStringList getDeletedDefaults() const;

QString btn_connect_enabled_accessDesc;
QString btn_load_enabled_accessDesc;
Expand All @@ -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);
Expand Down
48 changes: 48 additions & 0 deletions src/mudlet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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<dlgConnectionProfiles*>();
// Open dialog if not open
if (!dlg) {
slot_showConnectionDialog();
dlg = findChild<dlgConnectionProfiles*>();
}
// 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<dlgConnectionProfiles*>();
if (!dlg) {
slot_showConnectionDialog();
dlg = findChild<dlgConnectionProfiles*>();
}
// 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) {
Expand Down
1 change: 1 addition & 0 deletions src/mudlet.h
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,7 @@ private slots:
bool scanDictionaryFile(const QString& dictionaryPath, int&, QHash<QString, unsigned int>&, QStringList&);
int scanWordList(QStringList&, QHash<QString, unsigned int>&);
void setupTrayIcon();
void setupRestoreDefaultsMenu();
void reshowRequiredMainConsoles();
void toggleMute(bool state, QAction* toolbarAction, QAction* menuAction, bool isAPINotGame, const QString& unmuteText, const QString& muteText);
dlgTriggerEditor* createMudletEditor();
Expand Down
Loading