From dd37823a5df4d94520e476567b0c6f5c7b28edfa Mon Sep 17 00:00:00 2001 From: RickyRister Date: Fri, 4 Apr 2025 22:48:25 -0700 Subject: [PATCH] refactor out search syntax help window --- cockatrice/CMakeLists.txt | 1 + .../deck_editor_database_display_widget.cpp | 39 +----------- .../deck_editor_database_display_widget.h | 1 - cockatrice/src/game/filters/syntax_help.cpp | 62 +++++++++++++++++++ cockatrice/src/game/filters/syntax_help.h | 9 +++ 5 files changed, 74 insertions(+), 38 deletions(-) create mode 100644 cockatrice/src/game/filters/syntax_help.cpp create mode 100644 cockatrice/src/game/filters/syntax_help.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 84b331f0f..18df9795f 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -157,6 +157,7 @@ set(cockatrice_SOURCES src/game/filters/filter_string.cpp src/game/filters/filter_tree.cpp src/game/filters/filter_tree_model.cpp + src/game/filters/syntax_help.cpp src/game/game_scene.cpp src/game/game_selector.cpp src/game/game_view.cpp diff --git a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp index 94c6609be..0374503bc 100644 --- a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.cpp @@ -1,6 +1,7 @@ #include "deck_editor_database_display_widget.h" #include "../../../../game/cards/card_database_manager.h" +#include "../../../../game/filters/syntax_help.h" #include "../../../../settings/cache_settings.h" #include "../../../tabs/abstract_tab_deck_editor.h" #include "../../../tabs/tab_supervisor.h" @@ -56,7 +57,7 @@ DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(AbstractTabDeck &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); connect(&searchKeySignals, &KeySignals::onCtrlEnter, this, &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard); connect(&searchKeySignals, &KeySignals::onCtrlC, this, &DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents); - connect(help, &QAction::triggered, this, &DeckEditorDatabaseDisplayWidget::showSearchSyntaxHelp); + connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); }); databaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), true, this); databaseModel->setObjectName("databaseModel"); @@ -234,42 +235,6 @@ void DeckEditorDatabaseDisplayWidget::saveDbHeaderState() SettingsCache::instance().layouts().setDeckEditorDbHeaderState(databaseView->header()->saveState()); } -void DeckEditorDatabaseDisplayWidget::showSearchSyntaxHelp() -{ - - QFile file("theme:help/search.md"); - - if (!file.open(QFile::ReadOnly | QFile::Text)) { - return; - } - - QTextStream in(&file); - QString text = in.readAll(); - file.close(); - - // Poor Markdown Converter - auto opts = QRegularExpression::MultilineOption; - text = text.replace(QRegularExpression("^(###)(.*)", opts), "

\\2

") - .replace(QRegularExpression("^(##)(.*)", opts), "

\\2

") - .replace(QRegularExpression("^(#)(.*)", opts), "

\\2

") - .replace(QRegularExpression("^------*", opts), "
") - .replace(QRegularExpression(R"(\[([^[]+)\]\(([^\)]+)\))", opts), R"(\1)"); - - auto browser = new QTextBrowser; - browser->setParent(this, Qt::Window | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | - Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint); - browser->setWindowTitle("Search Help"); - browser->setReadOnly(true); - browser->setMinimumSize({500, 600}); - - QString sheet = QString("a { text-decoration: underline; color: rgb(71,158,252) };"); - browser->document()->setDefaultStyleSheet(sheet); - - browser->setHtml(text); - connect(browser, &QTextBrowser::anchorClicked, [this](const QUrl &link) { searchEdit->setText(link.fragment()); }); - browser->show(); -} - void DeckEditorDatabaseDisplayWidget::setFilterTree(FilterTree *filterTree) { databaseDisplayModel->setFilterTree(filterTree); diff --git a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.h b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.h index 9022a2cb7..4010a2954 100644 --- a/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.h +++ b/cockatrice/src/client/ui/widgets/deck_editor/deck_editor_database_display_widget.h @@ -42,7 +42,6 @@ private: QWidget *centralWidget; private slots: - void showSearchSyntaxHelp(); void retranslateUi(); void updateSearch(const QString &search); void updateCard(const QModelIndex ¤t, const QModelIndex &); diff --git a/cockatrice/src/game/filters/syntax_help.cpp b/cockatrice/src/game/filters/syntax_help.cpp new file mode 100644 index 000000000..a4eaf9112 --- /dev/null +++ b/cockatrice/src/game/filters/syntax_help.cpp @@ -0,0 +1,62 @@ +#include "syntax_help.h" + +#include +#include +#include + +/** + * Creates the card search syntax help window + * + * @return the QTextBrowser + */ +static QTextBrowser *createBrowser() +{ + QFile file("theme:help/search.md"); + + if (!file.open(QFile::ReadOnly | QFile::Text)) { + return nullptr; + } + + QTextStream in(&file); + QString text = in.readAll(); + file.close(); + + // Poor Markdown Converter + auto opts = QRegularExpression::MultilineOption; + text = text.replace(QRegularExpression("^(###)(.*)", opts), "

\\2

") + .replace(QRegularExpression("^(##)(.*)", opts), "

\\2

") + .replace(QRegularExpression("^(#)(.*)", opts), "

\\2

") + .replace(QRegularExpression("^------*", opts), "
") + .replace(QRegularExpression(R"(\[([^[]+)\]\(([^\)]+)\))", opts), R"(\1)"); + + auto browser = new QTextBrowser(); + browser->setParent(nullptr, Qt::Window | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | + Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | + Qt::WindowFullscreenButtonHint); + browser->setWindowTitle("Search Help"); + browser->setReadOnly(true); + browser->setMinimumSize({500, 600}); + + QString sheet = QString("a { text-decoration: underline; color: rgb(71,158,252) };"); + browser->document()->setDefaultStyleSheet(sheet); + browser->setHtml(text); + + browser->show(); + + return browser; +} + +/** + * Creates the card search syntax help window and connects its anchorClicked signal to the given QLineEdit. + * The window will automatically close when the QLineEdit is destroyed. + * + * @return the QTextBrowser + */ +QTextBrowser *createSearchSyntaxHelpWindow(QLineEdit *lineEdit) +{ + auto browser = createBrowser(); + QObject::connect(browser, &QTextBrowser::anchorClicked, + [lineEdit](const QUrl &link) { lineEdit->setText(link.fragment()); }); + QObject::connect(lineEdit, &QObject::destroyed, browser, &QTextBrowser::close); + return browser; +} \ No newline at end of file diff --git a/cockatrice/src/game/filters/syntax_help.h b/cockatrice/src/game/filters/syntax_help.h new file mode 100644 index 000000000..4016e02bb --- /dev/null +++ b/cockatrice/src/game/filters/syntax_help.h @@ -0,0 +1,9 @@ +#ifndef SEARCH_SYNTAX_HELP_H +#define SEARCH_SYNTAX_HELP_H + +#include +#include + +QTextBrowser *createSearchSyntaxHelpWindow(QLineEdit *lineEdit); + +#endif // SEARCH_SYNTAX_HELP_H