From 902bafac55fe5b8b6d4cacaad06f6221f56b931d Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sun, 5 Jan 2025 03:05:14 -0800 Subject: [PATCH] move shared code into new dlg class --- cockatrice/CMakeLists.txt | 1 + .../src/client/tabs/tab_deck_editor.cpp | 13 ++--------- cockatrice/src/client/tabs/tab_game.cpp | 13 ++--------- cockatrice/src/dialogs/dlg_load_deck.cpp | 22 +++++++++++++++++++ cockatrice/src/dialogs/dlg_load_deck.h | 21 ++++++++++++++++++ 5 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 cockatrice/src/dialogs/dlg_load_deck.cpp create mode 100644 cockatrice/src/dialogs/dlg_load_deck.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 06870b36c..445c97d8a 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -56,6 +56,7 @@ set(cockatrice_SOURCES src/dialogs/dlg_tip_of_the_day.cpp src/dialogs/dlg_update.cpp src/dialogs/dlg_view_log.cpp + src/dialogs/dlg_load_deck.cpp src/game/filters/filter_string.cpp src/game/filters/filter_builder.cpp src/game/filters/filter_tree.cpp diff --git a/cockatrice/src/client/tabs/tab_deck_editor.cpp b/cockatrice/src/client/tabs/tab_deck_editor.cpp index 90f658f69..12188dca1 100644 --- a/cockatrice/src/client/tabs/tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/tab_deck_editor.cpp @@ -5,6 +5,7 @@ #include "../../client/ui/widgets/cards/card_info_frame_widget.h" #include "../../deck/deck_list_model.h" #include "../../deck/deck_stats_interface.h" +#include "../../dialogs/dlg_load_deck.h" #include "../../dialogs/dlg_load_deck_from_clipboard.h" #include "../../game/cards/card_database_manager.h" #include "../../game/cards/card_database_model.h" @@ -927,20 +928,10 @@ void TabDeckEditor::actLoadDeck() return; } - QFileDialog dialog(this, tr("Load deck")); - - QString startingDir = SettingsCache::instance().recents().getLatestDeckDirPath(); - if (startingDir.isEmpty()) { - startingDir = SettingsCache::instance().getDeckPath(); - } - - dialog.setDirectory(startingDir); - dialog.setNameFilters(DeckLoader::fileNameFilters); + DlgLoadDeck dialog(this); if (!dialog.exec()) return; - SettingsCache::instance().recents().setLatestDeckDirPath(dialog.directory().absolutePath()); - QString fileName = dialog.selectedFiles().at(0); openDeckFromFile(fileName, deckOpenLocation); } diff --git a/cockatrice/src/client/tabs/tab_game.cpp b/cockatrice/src/client/tabs/tab_game.cpp index 67a3937e2..4b2410cce 100644 --- a/cockatrice/src/client/tabs/tab_game.cpp +++ b/cockatrice/src/client/tabs/tab_game.cpp @@ -4,6 +4,7 @@ #include "../../deck/deck_loader.h" #include "../../deck/deck_view.h" #include "../../dialogs/dlg_create_game.h" +#include "../../dialogs/dlg_load_deck.h" #include "../../dialogs/dlg_load_remote_deck.h" #include "../../dialogs/dlg_manage_sets.h" #include "../../game/board/arrow_item.h" @@ -288,20 +289,10 @@ void TabGame::refreshShortcuts() void DeckViewContainer::loadLocalDeck() { - QFileDialog dialog(this, tr("Load deck")); - - QString startingDir = SettingsCache::instance().recents().getLatestDeckDirPath(); - if (startingDir.isEmpty()) { - startingDir = SettingsCache::instance().getDeckPath(); - } - - dialog.setDirectory(startingDir); - dialog.setNameFilters(DeckLoader::fileNameFilters); + DlgLoadDeck dialog(this); if (!dialog.exec()) return; - SettingsCache::instance().recents().setLatestDeckDirPath(dialog.directory().absolutePath()); - loadDeckFromFile(dialog.selectedFiles().at(0)); } diff --git a/cockatrice/src/dialogs/dlg_load_deck.cpp b/cockatrice/src/dialogs/dlg_load_deck.cpp new file mode 100644 index 000000000..0fabdaaa3 --- /dev/null +++ b/cockatrice/src/dialogs/dlg_load_deck.cpp @@ -0,0 +1,22 @@ +#include "dlg_load_deck.h" + +#include "../deck/deck_loader.h" +#include "../settings/cache_settings.h" + +DlgLoadDeck::DlgLoadDeck(QWidget *parent) : QFileDialog(parent, tr("Load Deck")) +{ + QString startingDir = SettingsCache::instance().recents().getLatestDeckDirPath(); + if (startingDir.isEmpty()) { + startingDir = SettingsCache::instance().getDeckPath(); + } + + setDirectory(startingDir); + setNameFilters(DeckLoader::fileNameFilters); + + connect(this, &DlgLoadDeck::accepted, this, &DlgLoadDeck::actAccepted); +} + +void DlgLoadDeck::actAccepted() +{ + SettingsCache::instance().recents().setLatestDeckDirPath(directory().absolutePath()); +} \ No newline at end of file diff --git a/cockatrice/src/dialogs/dlg_load_deck.h b/cockatrice/src/dialogs/dlg_load_deck.h new file mode 100644 index 000000000..13df97995 --- /dev/null +++ b/cockatrice/src/dialogs/dlg_load_deck.h @@ -0,0 +1,21 @@ + +#ifndef DLG_LOAD_DECK_H +#define DLG_LOAD_DECK_H + +#include + +/** + * The file dialog for "Load Deck" operations. + * Handles remembering the most recently used deck loading directory. + */ +class DlgLoadDeck : public QFileDialog +{ + Q_OBJECT + + void actAccepted(); + +public: + explicit DlgLoadDeck(QWidget *parent = nullptr); +}; + +#endif // DLG_LOAD_DECK_H