diff --git a/.ci/compile.sh b/.ci/compile.sh
index a7c349fb0..0af79868b 100755
--- a/.ci/compile.sh
+++ b/.ci/compile.sh
@@ -122,7 +122,7 @@ if [[ $MAKE_SERVER ]]; then
flags+=("-DWITH_SERVER=1")
fi
if [[ $MAKE_NO_CLIENT ]]; then
- flags+=("-DWITH_CLIENT=0" "-DWITH_ORACLE=0" "-DWITH_DBCONVERTER=0")
+ flags+=("-DWITH_CLIENT=0" "-DWITH_ORACLE=0")
fi
if [[ $MAKE_TEST ]]; then
flags+=("-DTEST=1")
@@ -246,7 +246,7 @@ fi
if [[ $RUNNER_OS == macOS ]]; then
echo "::group::Inspect Mach-O binaries"
- for app in cockatrice oracle servatrice dbconverter; do
+ for app in cockatrice oracle servatrice; do
binary="$GITHUB_WORKSPACE/build/$app/$app.app/Contents/MacOS/$app"
echo "Inspecting $app..."
vtool -show-build "$binary"
diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml
index 58b246071..a26e82ee5 100644
--- a/.github/workflows/desktop-build.yml
+++ b/.github/workflows/desktop-build.yml
@@ -166,7 +166,7 @@ jobs:
- name: Restore compiler cache (ccache)
id: ccache_restore
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
with:
@@ -205,7 +205,7 @@ jobs:
- name: Save compiler cache (ccache)
if: github.ref == 'refs/heads/master'
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: ${{env.CACHE}}
key: ${{ steps.ccache_restore.outputs.cache-primary-key }}
@@ -213,7 +213,7 @@ jobs:
- name: Upload artifact
id: upload_artifact
if: matrix.package != 'skip'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: ${{matrix.distro}}${{matrix.version}}-package
path: ${{steps.build.outputs.path}}
@@ -342,6 +342,11 @@ jobs:
name: ${{matrix.os}} ${{matrix.target}}${{ matrix.soc == 'Intel' && ' Intel' || '' }}${{ matrix.type == 'Debug' && ' Debug' || '' }}
needs: configure
runs-on: ${{matrix.runner}}
+ env:
+ CCACHE_DIR: ${{github.workspace}}/.cache/
+ # Cache size over the entire repo is 10Gi:
+ # https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy
+ CCACHE_SIZE: 500M
steps:
- name: Checkout
@@ -356,16 +361,20 @@ jobs:
with:
msbuild-architecture: x64
- # Using jianmingyong/ccache-action to setup ccache without using brew
- # It tries to download a binary of ccache from GitHub Release and falls back to building from source if it fails
- name: Setup ccache
+ if: matrix.use_ccache == 1 && matrix.os == 'macOS'
+ run: brew install ccache
+
+ - name: Restore compiler cache (ccache)
if: matrix.use_ccache == 1
- uses: jianmingyong/ccache-action@v1
+ id: ccache_restore
+ uses: actions/cache/restore@v5
+ env:
+ BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
with:
- install-type: "binary"
- ccache-key-prefix: ccache-${{matrix.runner}}-${{matrix.soc}}-${{matrix.type}}
- max-size: 500M
- gh-token: ${{ secrets.GITHUB_TOKEN }}
+ path: ${{env.CCACHE_DIR}}
+ key: ccache-${{matrix.runner}}-${{matrix.soc}}-${{matrix.type}}-${{env.BRANCH_NAME}}
+ restore-keys: ccache-${{matrix.runner}}-${{matrix.soc}}-${{matrix.type}}-
- name: Install Qt ${{matrix.qt_version}}
uses: jurplel/install-qt-action@v4
@@ -403,6 +412,15 @@ jobs:
TARGET_MACOS_VERSION: ${{ matrix.override_target }}
run: .ci/compile.sh --server --test --vcpkg
+ - name: Save compiler cache (ccache)
+ if: github.ref == 'refs/heads/master' && matrix.use_ccache == 1
+ uses: actions/cache/save@v5
+ env:
+ BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
+ with:
+ path: ${{env.CCACHE_DIR}}
+ key: ccache-${{matrix.runner}}-${{matrix.soc}}-${{matrix.type}}-${{env.BRANCH_NAME}}
+
- name: Sign app bundle
if: matrix.os == 'macOS' && matrix.make_package && (github.ref == 'refs/heads/master' || needs.configure.outputs.tag != null)
env:
@@ -450,7 +468,7 @@ jobs:
- name: Upload artifact
id: upload_artifact
if: matrix.make_package
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: ${{matrix.artifact_name}}
path: ${{steps.build.outputs.path}}
@@ -458,7 +476,7 @@ jobs:
- name: Upload pdb database
if: matrix.os == 'Windows'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: Windows${{matrix.target}}-debug-pdbs
path: |
diff --git a/.github/workflows/translations-pull.yml b/.github/workflows/translations-pull.yml
index 81d6f4e75..ed61e3b19 100644
--- a/.github/workflows/translations-pull.yml
+++ b/.github/workflows/translations-pull.yml
@@ -33,7 +33,7 @@ jobs:
- name: Create pull request
if: github.event_name != 'pull_request'
id: create_pr
- uses: peter-evans/create-pull-request@v7
+ uses: peter-evans/create-pull-request@v8
with:
add-paths: |
cockatrice/translations/*.ts
diff --git a/.github/workflows/translations-push.yml b/.github/workflows/translations-push.yml
index d201e7ad8..777e9e6ac 100644
--- a/.github/workflows/translations-push.yml
+++ b/.github/workflows/translations-push.yml
@@ -57,7 +57,7 @@ jobs:
- name: Create pull request
if: github.event_name != 'pull_request'
id: create_pr
- uses: peter-evans/create-pull-request@v7
+ uses: peter-evans/create-pull-request@v8
with:
add-paths: |
cockatrice/cockatrice_en@source.ts
diff --git a/CMakeLists.txt b/CMakeLists.txt
index affc6472d..574ccecb3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,8 +20,6 @@ option(WITH_SERVER "build servatrice" OFF)
option(WITH_CLIENT "build cockatrice" ON)
# Compile oracle
option(WITH_ORACLE "build oracle" ON)
-# Compile dbconverter
-option(WITH_DBCONVERTER "build dbconverter" ON)
# Compile tests
option(TEST "build tests" OFF)
# Use vcpkg regardless of OS
@@ -356,11 +354,6 @@ if(WITH_ORACLE)
set(CPACK_INSTALL_CMAKE_PROJECTS "Oracle;Oracle;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
endif()
-if(WITH_DBCONVERTER)
- add_subdirectory(dbconverter)
- set(CPACK_INSTALL_CMAKE_PROJECTS "Dbconverter;Dbconverter;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
-endif()
-
if(TEST)
include(CTest)
add_subdirectory(tests)
diff --git a/Dockerfile b/Dockerfile
index 80f9f69f2..d185b746a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -20,7 +20,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
WORKDIR /src
COPY . .
RUN mkdir build && cd build && \
- cmake .. -DWITH_SERVER=1 -DWITH_CLIENT=0 -DWITH_ORACLE=0 -DWITH_DBCONVERTER=0 && \
+ cmake .. -DWITH_SERVER=1 -DWITH_CLIENT=0 -DWITH_ORACLE=0 && \
make -j$(nproc) && \
make install
diff --git a/Doxyfile b/Doxyfile
index d5a3a4b7a..ecacc6b8f 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -1068,7 +1068,6 @@ RECURSIVE = YES
EXCLUDE = build/ \
cmake/ \
- dbconverter/ \
vcpkg/ \
webclient/
diff --git a/README.md b/README.md
index 3e415fa23..3d01e9f3d 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,8 @@ Latest beta version:
- [Magic-Token](https://github.com/Cockatrice/Magic-Token): MtG token data to use in Cockatrice
- [Magic-Spoiler](https://github.com/Cockatrice/Magic-Spoiler): Script to generate MtG spoiler data from [MTGJSON](https://github.com/mtgjson/mtgjson) to use in Cockatrice
-- [cockatrice.github.io](https://github.com/Cockatrice/cockatrice.github.io): Code of the official webpage of the Cockatrice project
+- [cockatrice.github.io](https://github.com/Cockatrice/cockatrice.github.io): Code of the official Cockatrice webpage
+- [Cockatrice @Flathub](https://github.com/flathub/io.github.Cockatrice.cockatrice): Configuration for our Linux `flatpak` package
# Community Resources [](https://discord.gg/3Z9yzmA)
@@ -54,11 +55,12 @@ Latest beta version:
Join our [Discord community](https://discord.gg/3Z9yzmA) to connect with other projet contributors (`#dev` channel) or fellow users of the app. Come here to talk about the application, features, or just to hang out.
- [Official Website](https://cockatrice.github.io)
- [Official Wiki](https://github.com/Cockatrice/Cockatrice/wiki)
+- [Official Code Documentation](https://cockatrice.github.io/docs)
- [Official Discord](https://discord.gg/3Z9yzmA)
- [reddit r/Cockatrice](https://reddit.com/r/cockatrice)
->[!IMPORTANT]
->For support regarding specific servers, please contact that server's admin/mods and use their dedicated communication channels rather than contacting the team building the software.
+> [!IMPORTANT]
+> For support regarding specific servers, please contact that server's admin/mods and use their dedicated communication channels rather than contacting the team building the software.
# Contribute
@@ -75,10 +77,15 @@ This tag is used for issues that we are looking for somebody to pick up. Often t
For both tags, we're willing to provide help to contributors in showing them where and how they can make changes, as well as code reviews for submitted changes.
We'll happily advice on how best to implement a feature, or we can show you where the codebase is doing something similar before you get too far along - put a note on an issue you want to discuss more on!
+You can also have a look at our `Todo List` in our [Code Documentation](https://cockatrice.github.io/docs) or search the repo for [`\todo` comments](https://github.com/search?q=repo%3ACockatrice%2FCockatrice%20%5Ctodo&type=code).
+
Cockatrice tries to use the [Google Developer Documentation Style Guide](https://developers.google.com/style/) to ensure consistent documentation. We encourage you to improve the documentation by suggesting edits based on this guide.
+#### Repository Activity
+
+
-Kudos to our amazing contributors ❤️
+Kudos to all our amazing contributors ❤️
@@ -124,8 +131,8 @@ You can then
make package
```
->[!NOTE]
->Detailed compiling instructions can be found in the Cockatrice wiki at [Compiling Cockatrice](https://github.com/Cockatrice/Cockatrice/wiki/Compiling-Cockatrice)
+> [!NOTE]
+> Detailed compiling instructions can be found in the Cockatrice wiki at [Compiling Cockatrice](https://github.com/Cockatrice/Cockatrice/wiki/Compiling-Cockatrice)
diff --git a/cmake/CMakeDMGSetup.script b/cmake/CMakeDMGSetup.script
index fe02eea13..e9a826eb8 100644
--- a/cmake/CMakeDMGSetup.script
+++ b/cmake/CMakeDMGSetup.script
@@ -42,7 +42,6 @@ tell disk image_name
set position of item "Cockatrice.app" to { 139, 214 }
set position of item "Oracle.app" to { 139, 414 }
set position of item "Servatrice.app" to { 139, 614 }
- set position of item "dbconverter.app" to { 1400, 1400 }
set position of item "Applications" to { 861, 414 }
end tell
update without registering applications
diff --git a/cmake/FindQtRuntime.cmake b/cmake/FindQtRuntime.cmake
index 769f9b463..c205ebdcf 100644
--- a/cmake/FindQtRuntime.cmake
+++ b/cmake/FindQtRuntime.cmake
@@ -1,12 +1,11 @@
# Find a compatible Qt version
-# Inputs: WITH_SERVER, WITH_CLIENT, WITH_ORACLE, WITH_DBCONVERTER, FORCE_USE_QT5
+# Inputs: WITH_SERVER, WITH_CLIENT, WITH_ORACLE, FORCE_USE_QT5
# Optional Input: QT6_DIR -- Hint as to where Qt6 lives on the system
# Optional Input: QT5_DIR -- Hint as to where Qt5 lives on the system
# Output: COCKATRICE_QT_VERSION_NAME -- Example values: Qt5, Qt6
# Output: SERVATRICE_QT_MODULES
# Output: COCKATRICE_QT_MODULES
# Output: ORACLE_QT_MODULES
-# Output: DBCONVERTER_QT_MODULES
# Output: TEST_QT_MODULES
set(REQUIRED_QT_COMPONENTS Core)
@@ -29,15 +28,12 @@ endif()
if(WITH_ORACLE)
set(_ORACLE_NEEDED Concurrent Network Svg Widgets)
endif()
-if(WITH_DBCONVERTER)
- set(_DBCONVERTER_NEEDED Network Widgets)
-endif()
if(TEST)
set(_TEST_NEEDED Widgets)
endif()
set(REQUIRED_QT_COMPONENTS ${REQUIRED_QT_COMPONENTS} ${_SERVATRICE_NEEDED} ${_COCKATRICE_NEEDED} ${_ORACLE_NEEDED}
- ${_DBCONVERTER_NEEDED} ${_TEST_NEEDED}
+ ${_TEST_NEEDED}
)
list(REMOVE_DUPLICATES REQUIRED_QT_COMPONENTS)
@@ -63,7 +59,7 @@ if(Qt6_FOUND)
endif()
else()
find_package(
- Qt5 5.8.0
+ Qt5 5.15.2
COMPONENTS ${REQUIRED_QT_COMPONENTS}
QUIET HINTS ${Qt5_DIR}
)
@@ -112,7 +108,6 @@ message(DEBUG "QT_LIBRARY_DIR = ${QT_LIBRARY_DIR}")
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" SERVATRICE_QT_MODULES "${_SERVATRICE_NEEDED}")
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" COCKATRICE_QT_MODULES "${_COCKATRICE_NEEDED}")
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" ORACLE_QT_MODULES "${_ORACLE_NEEDED}")
-string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" DB_CONVERTER_QT_MODULES "${_DBCONVERTER_NEEDED}")
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" TEST_QT_MODULES "${_TEST_NEEDED}")
# Core-only export (useful for headless libs)
diff --git a/cmake/NSIS.template.in b/cmake/NSIS.template.in
index fbdde0b86..a0d51fa2b 100644
--- a/cmake/NSIS.template.in
+++ b/cmake/NSIS.template.in
@@ -213,7 +213,6 @@ ${AndIf} ${FileExists} "$INSTDIR\portable.dat"
Delete "$INSTDIR\uninstall.exe"
Delete "$INSTDIR\cockatrice.exe"
Delete "$INSTDIR\oracle.exe"
- Delete "$INSTDIR\dbconverter.exe"
Delete "$INSTDIR\servatrice.exe"
Delete "$INSTDIR\Qt*.dll"
Delete "$INSTDIR\libmysql.dll"
diff --git a/cmake/SignMacApplications.cmake b/cmake/SignMacApplications.cmake
index b91e53725..c08c30c1e 100644
--- a/cmake/SignMacApplications.cmake
+++ b/cmake/SignMacApplications.cmake
@@ -3,7 +3,7 @@
string(LENGTH "$ENV{MACOS_CERTIFICATE_NAME}" MACOS_CERTIFICATE_NAME_LEN)
if(APPLE AND MACOS_CERTIFICATE_NAME_LEN GREATER 0)
- set(APPLICATIONS "cockatrice" "servatrice" "oracle" "dbconverter")
+ set(APPLICATIONS "cockatrice" "servatrice" "oracle")
foreach(app_name IN LISTS APPLICATIONS)
set(FULL_APP_PATH "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/${app_name}.app")
diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt
index 522300346..b2d387391 100644
--- a/cockatrice/CMakeLists.txt
+++ b/cockatrice/CMakeLists.txt
@@ -19,7 +19,10 @@ set(cockatrice_SOURCES
src/client/settings/card_counter_settings.cpp
src/client/settings/shortcut_treeview.cpp
src/client/settings/shortcuts_settings.cpp
+ src/interface/deck_loader/card_node_function.cpp
+ src/interface/deck_loader/deck_file_format.cpp
src/interface/deck_loader/deck_loader.cpp
+ src/interface/deck_loader/loaded_deck.cpp
src/interface/widgets/dialogs/dlg_connect.cpp
src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp
src/interface/widgets/dialogs/dlg_create_game.cpp
@@ -142,6 +145,7 @@ set(cockatrice_SOURCES
src/interface/widgets/cards/deck_card_zone_display_widget.cpp
src/interface/widgets/cards/deck_preview_card_picture_widget.cpp
src/interface/widgets/deck_analytics/deck_analytics_widget.cpp
+ src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp
src/interface/widgets/deck_analytics/mana_base_widget.cpp
src/interface/widgets/deck_analytics/mana_curve_widget.cpp
src/interface/widgets/deck_analytics/mana_devotion_widget.cpp
@@ -153,8 +157,10 @@ set(cockatrice_SOURCES
src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp
src/interface/widgets/deck_editor/deck_list_style_proxy.cpp
src/interface/widgets/general/background_sources.cpp
+ src/interface/widgets/general/display/background_plate_widget.cpp
src/interface/widgets/general/display/banner_widget.cpp
src/interface/widgets/general/display/bar_widget.cpp
+ src/interface/widgets/general/display/color_bar.cpp
src/interface/widgets/general/display/dynamic_font_size_label.cpp
src/interface/widgets/general/display/dynamic_font_size_push_button.cpp
src/interface/widgets/general/display/labeled_input.cpp
@@ -196,12 +202,14 @@ set(cockatrice_SOURCES
src/interface/widgets/utility/sequence_edit.cpp
src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp
+ src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_widget.cpp
src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp
+ src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp
src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp
src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp
@@ -220,6 +228,20 @@ set(cockatrice_SOURCES
src/interface/window_main.cpp
src/main.cpp
src/interface/widgets/tabs/abstract_tab_deck_editor.cpp
+ src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/archidekt_formats.h
+ src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp
+ src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp
+ src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp
+ src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp
+ src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp
+ src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp
src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp
src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp
src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp
@@ -265,6 +287,10 @@ set(cockatrice_SOURCES
src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
src/interface/key_signals.cpp
src/interface/logger.cpp
+ src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp
+ src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h
+ src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp
+ src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h
)
add_subdirectory(sounds)
diff --git a/cockatrice/resources/config/qtlogging.ini b/cockatrice/resources/config/qtlogging.ini
index 083d7234e..20aa206ce 100644
--- a/cockatrice/resources/config/qtlogging.ini
+++ b/cockatrice/resources/config/qtlogging.ini
@@ -1,6 +1,10 @@
[Rules]
# The default log level is info
*.debug = false
+#*.info = true
+#*.warning = true
+#*.critical = true
+#*.fatal = true
# Uncomment a rule to see debug level logs for that category,
# or set = false to disable logging
diff --git a/cockatrice/resources/help/deck_search.md b/cockatrice/resources/help/deck_search.md
index 6d58ee590..c42e41c42 100644
--- a/cockatrice/resources/help/deck_search.md
+++ b/cockatrice/resources/help/deck_search.md
@@ -15,15 +15,18 @@ searches are case insensitive.
[n:red n:deck n:wins](#n:red n:deck n:wins) (Any deck with a name containing the words red, deck, and wins)
[n:"red deck wins"](#n:%22red deck wins%22) (Any deck with a name containing the exact phrase "red deck wins")
-File Name:
-[f:aggro](#f:aggro) (Any deck with a filename containing the word aggro)
-[f:red f:deck f:wins](#f:red f:deck f:wins) (Any deck with a filename containing the words red, deck, and wins)
-[f:"red deck wins"](#f:%22red deck wins%22) (Any deck with a filename containing the exact phrase "red deck wins")
+File Name:
+[fn:aggro](#fn:aggro) (Any deck with a filename containing the word aggro)
+[fn:red fn:deck fn:wins](#fn:red fn:deck fn:wins) (Any deck with a filename containing the words red, deck, and wins)
+[fn:"red deck wins"](#fn:%22red deck wins%22) (Any deck with a filename containing the exact phrase "red deck wins")
Relative Path (starting from the deck folder):
[p:aggro](#p:aggro) (Any deck that has "aggro" somewhere in its relative path)
[p:edh/](#p:edh/) (Any deck with "edh/" in its relative path, A.K.A. decks in the "edh" folder)
+Format:
+[f:standard](#f:standard) (Any deck with format set to standard)
+
Deck Contents (Uses [card search expressions](#cardSearchSyntaxHelp)):
[[plains]] (Any deck that contains at least one card with "plains" in its name)
[[t:legendary]] (Any deck that contains at least one legendary)
diff --git a/cockatrice/resources/usericons/pawn_donator_double.svg b/cockatrice/resources/usericons/pawn_donator_double.svg
index f0dba08b2..30b353652 100644
--- a/cockatrice/resources/usericons/pawn_donator_double.svg
+++ b/cockatrice/resources/usericons/pawn_donator_double.svg
@@ -350,11 +350,11 @@
style="fill-opacity:1;stroke:black;stroke-width:2.78220296;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 49.84375 1.71875 C 36.719738 1.71875 26.0625 12.375988 26.0625 25.5 C 26.0625 32.977454 29.538325 39.612734 34.9375 43.96875 C 24.439951 49.943698 17.919149 62.196126 14.3125 75.65625 C 9.0380874 95.34065 30.224013 98.21875 49.84375 98.21875 C 69.463486 98.21875 90.549327 94.96715 85.375 75.65625 C 81.693381 61.916246 75.224585 49.827177 64.8125 43.9375 C 70.181573 39.580662 73.59375 32.953205 73.59375 25.5 C 73.59375 12.375988 62.967762 1.71875 49.84375 1.71875 z "
transform="translate(0,952.36218)"
- id="right" />
+ id="left" />
+ id="left" />
+ id="left" />
#include
-#include
#include
#include
#include
#include
#include
-#include
+#include
+#include
DeckStatsInterface::DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent)
: QObject(parent), cardDatabase(_cardDatabase)
@@ -43,31 +43,32 @@ void DeckStatsInterface::queryFinished(QNetworkReply *reply)
deleteLater();
}
-void DeckStatsInterface::getAnalyzeRequestData(DeckList *deck, QByteArray *data)
+void DeckStatsInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray &data)
{
DeckList deckWithoutTokens;
- copyDeckWithoutTokens(*deck, deckWithoutTokens);
+ copyDeckWithoutTokens(deck, deckWithoutTokens);
QUrl params;
QUrlQuery urlQuery;
urlQuery.addQueryItem("deck", deckWithoutTokens.writeToString_Plain());
- urlQuery.addQueryItem("decktitle", deck->getName());
+ urlQuery.addQueryItem("decktitle", deck.getName());
params.setQuery(urlQuery);
- data->append(params.query(QUrl::EncodeReserved).toUtf8());
+ data.append(params.query(QUrl::EncodeReserved).toUtf8());
}
-void DeckStatsInterface::analyzeDeck(DeckList *deck)
+void DeckStatsInterface::analyzeDeck(const DeckList &deck)
{
QByteArray data;
- getAnalyzeRequestData(deck, &data);
+ getAnalyzeRequestData(deck, data);
QNetworkRequest request(QUrl("https://deckstats.net/index.php"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ request.setHeader(QNetworkRequest::UserAgentHeader, QString("Cockatrice %1").arg(VERSION_STRING));
manager->post(request, data);
}
-void DeckStatsInterface::copyDeckWithoutTokens(DeckList &source, DeckList &destination)
+void DeckStatsInterface::copyDeckWithoutTokens(const DeckList &source, DeckList &destination)
{
auto copyIfNotAToken = [this, &destination](const auto node, const auto card) {
CardInfoPtr dbCard = cardDatabase.query()->getCardInfo(card->getName());
diff --git a/cockatrice/src/client/network/interfaces/deck_stats_interface.h b/cockatrice/src/client/network/interfaces/deck_stats_interface.h
index f621fff7c..7dc841027 100644
--- a/cockatrice/src/client/network/interfaces/deck_stats_interface.h
+++ b/cockatrice/src/client/network/interfaces/deck_stats_interface.h
@@ -7,7 +7,6 @@
#ifndef DECKSTATS_INTERFACE_H
#define DECKSTATS_INTERFACE_H
-#include
#include
#include
@@ -29,15 +28,15 @@ private:
* closest non-token card instead. So we construct a new deck which has no
* tokens.
*/
- void copyDeckWithoutTokens(DeckList &source, DeckList &destination);
+ void copyDeckWithoutTokens(const DeckList &source, DeckList &destination);
private slots:
void queryFinished(QNetworkReply *reply);
- void getAnalyzeRequestData(DeckList *deck, QByteArray *data);
+ void getAnalyzeRequestData(const DeckList &deck, QByteArray &data);
public:
explicit DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent = nullptr);
- void analyzeDeck(DeckList *deck);
+ void analyzeDeck(const DeckList &deck);
};
#endif
diff --git a/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp b/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp
index d18d811b0..a30a7f531 100644
--- a/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp
+++ b/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp
@@ -2,13 +2,13 @@
#include
#include
-#include
#include
#include
#include
#include
#include
-#include
+#include
+#include
TappedOutInterface::TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent)
: QObject(parent), cardDatabase(_cardDatabase)
@@ -67,32 +67,33 @@ void TappedOutInterface::queryFinished(QNetworkReply *reply)
deleteLater();
}
-void TappedOutInterface::getAnalyzeRequestData(DeckList *deck, QByteArray *data)
+void TappedOutInterface::getAnalyzeRequestData(const DeckList &deck, QByteArray &data)
{
DeckList mainboard, sideboard;
- copyDeckSplitMainAndSide(*deck, mainboard, sideboard);
+ copyDeckSplitMainAndSide(deck, mainboard, sideboard);
QUrl params;
QUrlQuery urlQuery;
- urlQuery.addQueryItem("name", deck->getName());
+ urlQuery.addQueryItem("name", deck.getName());
urlQuery.addQueryItem("mainboard", mainboard.writeToString_Plain(false, true));
urlQuery.addQueryItem("sideboard", sideboard.writeToString_Plain(false, true));
params.setQuery(urlQuery);
- data->append(params.query(QUrl::EncodeReserved).toUtf8());
+ data.append(params.query(QUrl::EncodeReserved).toUtf8());
}
-void TappedOutInterface::analyzeDeck(DeckList *deck)
+void TappedOutInterface::analyzeDeck(const DeckList &deck)
{
QByteArray data;
- getAnalyzeRequestData(deck, &data);
+ getAnalyzeRequestData(deck, data);
QNetworkRequest request(QUrl("https://tappedout.net/mtg-decks/paste/"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ request.setHeader(QNetworkRequest::UserAgentHeader, QString("Cockatrice %1").arg(VERSION_STRING));
manager->post(request, data);
}
-void TappedOutInterface::copyDeckSplitMainAndSide(DeckList &source, DeckList &mainboard, DeckList &sideboard)
+void TappedOutInterface::copyDeckSplitMainAndSide(const DeckList &source, DeckList &mainboard, DeckList &sideboard)
{
auto copyMainOrSide = [this, &mainboard, &sideboard](const auto node, const auto card) {
CardInfoPtr dbCard = cardDatabase.query()->getCardInfo(card->getName());
diff --git a/cockatrice/src/client/network/interfaces/tapped_out_interface.h b/cockatrice/src/client/network/interfaces/tapped_out_interface.h
index e4e9498a3..0ea9c8358 100644
--- a/cockatrice/src/client/network/interfaces/tapped_out_interface.h
+++ b/cockatrice/src/client/network/interfaces/tapped_out_interface.h
@@ -7,8 +7,6 @@
#ifndef TAPPEDOUT_INTERFACE_H
#define TAPPEDOUT_INTERFACE_H
-#include
-#include
#include
#include
@@ -32,14 +30,14 @@ private:
QNetworkAccessManager *manager;
CardDatabase &cardDatabase;
- void copyDeckSplitMainAndSide(DeckList &source, DeckList &mainboard, DeckList &sideboard);
+ void copyDeckSplitMainAndSide(const DeckList &source, DeckList &mainboard, DeckList &sideboard);
private slots:
void queryFinished(QNetworkReply *reply);
- void getAnalyzeRequestData(DeckList *deck, QByteArray *data);
+ void getAnalyzeRequestData(const DeckList &deck, QByteArray &data);
public:
explicit TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent = nullptr);
- void analyzeDeck(DeckList *deck);
+ void analyzeDeck(const DeckList &deck);
};
#endif
diff --git a/cockatrice/src/client/network/parsers/interface_json_deck_parser.h b/cockatrice/src/client/network/parsers/interface_json_deck_parser.h
index 8ac05a84b..e19e4f4e4 100644
--- a/cockatrice/src/client/network/parsers/interface_json_deck_parser.h
+++ b/cockatrice/src/client/network/parsers/interface_json_deck_parser.h
@@ -6,6 +6,8 @@
#ifndef INTERFACE_JSON_DECK_PARSER_H
#define INTERFACE_JSON_DECK_PARSER_H
+
+#include "../../../interface/deck_loader/card_node_function.h"
#include "../../../interface/deck_loader/deck_loader.h"
#include
@@ -16,21 +18,21 @@ class IJsonDeckParser
public:
virtual ~IJsonDeckParser() = default;
- virtual DeckLoader *parse(const QJsonObject &obj) = 0;
+ virtual DeckList parse(const QJsonObject &obj) = 0;
};
class ArchidektJsonParser : public IJsonDeckParser
{
public:
- DeckLoader *parse(const QJsonObject &obj) override
+ DeckList parse(const QJsonObject &obj) override
{
- DeckLoader *loader = new DeckLoader(nullptr);
+ DeckList deckList;
QString deckName = obj.value("name").toString();
QString deckDescription = obj.value("description").toString();
- loader->getDeckList()->setName(deckName);
- loader->getDeckList()->setComments(deckDescription);
+ deckList.setName(deckName);
+ deckList.setComments(deckDescription);
QString outputText;
QTextStream outStream(&outputText);
@@ -47,25 +49,25 @@ public:
outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
}
- loader->getDeckList()->loadFromStream_Plain(outStream, false);
- DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
+ deckList.loadFromStream_Plain(outStream, false);
+ deckList.forEachCard(CardNodeFunction::ResolveProviderId());
- return loader;
+ return deckList;
}
};
class MoxfieldJsonParser : public IJsonDeckParser
{
public:
- DeckLoader *parse(const QJsonObject &obj) override
+ DeckList parse(const QJsonObject &obj) override
{
- DeckLoader *loader = new DeckLoader(nullptr);
+ DeckList deckList;
QString deckName = obj.value("name").toString();
QString deckDescription = obj.value("description").toString();
- loader->getDeckList()->setName(deckName);
- loader->getDeckList()->setComments(deckDescription);
+ deckList.setName(deckName);
+ deckList.setComments(deckDescription);
QString outputText;
QTextStream outStream(&outputText);
@@ -94,8 +96,8 @@ public:
outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
}
- loader->getDeckList()->loadFromStream_Plain(outStream, false);
- DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
+ deckList.loadFromStream_Plain(outStream, false);
+ deckList.forEachCard(CardNodeFunction::ResolveProviderId());
QJsonObject commandersObj = obj.value("commanders").toObject();
if (!commandersObj.isEmpty()) {
@@ -106,12 +108,12 @@ public:
QString collectorNumber = cardData.value("cn").toString();
QString providerId = cardData.value("scryfall_id").toString();
- loader->getDeckList()->setBannerCard({commanderName, providerId});
- loader->getDeckList()->addCard(commanderName, DECK_ZONE_MAIN, -1, setName, collectorNumber, providerId);
+ deckList.setBannerCard({commanderName, providerId});
+ deckList.addCard(commanderName, DECK_ZONE_MAIN, -1, setName, collectorNumber, providerId);
}
}
- return loader;
+ return deckList;
}
};
diff --git a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp
index cfd4cbbf8..7194c46e5 100644
--- a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp
+++ b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp
@@ -4,18 +4,17 @@
#include "../../../../main.h"
#include "../../../settings/cache_settings.h"
-#include
#include
#include
#include
#include
#include
-#include
#include
#include
#include
#include
#include
+#include
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
#define SPOILERS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/spoiler.xml"
@@ -41,7 +40,9 @@ void SpoilerBackgroundUpdater::startSpoilerDownloadProcess(QString url, bool sav
void SpoilerBackgroundUpdater::downloadFromURL(QUrl url, bool saveResults)
{
auto *nam = new QNetworkAccessManager(this);
- QNetworkReply *reply = nam->get(QNetworkRequest(url));
+ auto request = QNetworkRequest(url);
+ request.setHeader(QNetworkRequest::UserAgentHeader, QString("Cockatrice %1").arg(VERSION_STRING));
+ QNetworkReply *reply = nam->get(request);
if (saveResults) {
// This will write out to the file (used for spoiler.xml)
diff --git a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h
index 387f93820..a2feb5ccf 100644
--- a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h
+++ b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h
@@ -22,7 +22,7 @@ public:
inline QString getCardUpdaterBinaryName()
{
return "oracle";
- };
+ }
QByteArray getHash(const QString fileName);
QByteArray getHash(QByteArray data);
static bool deleteSpoilerFile();
diff --git a/cockatrice/src/client/network/update/client/update_downloader.cpp b/cockatrice/src/client/network/update/client/update_downloader.cpp
index 40186bec4..c0f3e945c 100644
--- a/cockatrice/src/client/network/update/client/update_downloader.cpp
+++ b/cockatrice/src/client/network/update/client/update_downloader.cpp
@@ -1,6 +1,5 @@
#include "update_downloader.h"
-#include
#include
UpdateDownloader::UpdateDownloader(QObject *parent) : QObject(parent), response(nullptr)
diff --git a/cockatrice/src/client/network/update/client/update_downloader.h b/cockatrice/src/client/network/update/client/update_downloader.h
index 4f79f3f6d..d70759038 100644
--- a/cockatrice/src/client/network/update/client/update_downloader.h
+++ b/cockatrice/src/client/network/update/client/update_downloader.h
@@ -7,9 +7,7 @@
#ifndef COCKATRICE_UPDATEDOWNLOADER_H
#define COCKATRICE_UPDATEDOWNLOADER_H
-#include
#include
-#include
#include
class UpdateDownloader : public QObject
diff --git a/cockatrice/src/client/settings/cache_settings.h b/cockatrice/src/client/settings/cache_settings.h
index 1cf04070c..df68ce0c4 100644
--- a/cockatrice/src/client/settings/cache_settings.h
+++ b/cockatrice/src/client/settings/cache_settings.h
@@ -11,7 +11,6 @@
#include
#include
-#include
#include
#include
#include
@@ -325,8 +324,8 @@ private:
int keepalive;
int timeout;
void translateLegacySettings();
- QString getSafeConfigPath(QString configEntry, QString defaultPath) const;
- QString getSafeConfigFilePath(QString configEntry, QString defaultPath) const;
+ [[nodiscard]] QString getSafeConfigPath(QString configEntry, QString defaultPath) const;
+ [[nodiscard]] QString getSafeConfigFilePath(QString configEntry, QString defaultPath) const;
void loadPaths();
bool rememberGameSettings;
QList releaseChannels;
@@ -338,137 +337,137 @@ public:
SettingsCache();
QString getDataPath();
QString getSettingsPath();
- QString getCachePath() const;
- QString getNetworkCachePath() const;
- const QByteArray &getMainWindowGeometry() const
+ [[nodiscard]] QString getCachePath() const;
+ [[nodiscard]] QString getNetworkCachePath() const;
+ [[nodiscard]] const QByteArray &getMainWindowGeometry() const
{
return mainWindowGeometry;
}
- const QByteArray &getTokenDialogGeometry() const
+ [[nodiscard]] const QByteArray &getTokenDialogGeometry() const
{
return tokenDialogGeometry;
}
- const QByteArray &getSetsDialogGeometry() const
+ [[nodiscard]] const QByteArray &getSetsDialogGeometry() const
{
return setsDialogGeometry;
}
- QString getLang() const
+ [[nodiscard]] QString getLang() const
{
return lang;
}
- QString getDeckPath() const
+ [[nodiscard]] QString getDeckPath() const
{
return deckPath;
}
- QString getFiltersPath() const
+ [[nodiscard]] QString getFiltersPath() const
{
return filtersPath;
}
- QString getReplaysPath() const
+ [[nodiscard]] QString getReplaysPath() const
{
return replaysPath;
}
- QString getThemesPath() const
+ [[nodiscard]] QString getThemesPath() const
{
return themesPath;
}
- QString getPicsPath() const
+ [[nodiscard]] QString getPicsPath() const
{
return picsPath;
}
- QString getRedirectCachePath() const
+ [[nodiscard]] QString getRedirectCachePath() const
{
return redirectCachePath;
}
- QString getCustomPicsPath() const
+ [[nodiscard]] QString getCustomPicsPath() const
{
return customPicsPath;
}
- QString getCustomCardDatabasePath() const override
+ [[nodiscard]] QString getCustomCardDatabasePath() const override
{
return customCardDatabasePath;
}
- QString getCardDatabasePath() const override
+ [[nodiscard]] QString getCardDatabasePath() const override
{
return cardDatabasePath;
}
- QString getSpoilerCardDatabasePath() const override
+ [[nodiscard]] QString getSpoilerCardDatabasePath() const override
{
return spoilerDatabasePath;
}
- QString getTokenDatabasePath() const override
+ [[nodiscard]] QString getTokenDatabasePath() const override
{
return tokenDatabasePath;
}
- QString getThemeName() const
+ [[nodiscard]] QString getThemeName() const
{
return themeName;
}
- QString getHomeTabBackgroundSource() const
+ [[nodiscard]] QString getHomeTabBackgroundSource() const
{
return homeTabBackgroundSource;
}
- int getHomeTabBackgroundShuffleFrequency() const
+ [[nodiscard]] int getHomeTabBackgroundShuffleFrequency() const
{
return homeTabBackgroundShuffleFrequency;
}
- bool getTabVisualDeckStorageOpen() const
+ [[nodiscard]] bool getTabVisualDeckStorageOpen() const
{
return tabVisualDeckStorageOpen;
}
- bool getTabServerOpen() const
+ [[nodiscard]] bool getTabServerOpen() const
{
return tabServerOpen;
}
- bool getTabAccountOpen() const
+ [[nodiscard]] bool getTabAccountOpen() const
{
return tabAccountOpen;
}
- bool getTabDeckStorageOpen() const
+ [[nodiscard]] bool getTabDeckStorageOpen() const
{
return tabDeckStorageOpen;
}
- bool getTabReplaysOpen() const
+ [[nodiscard]] bool getTabReplaysOpen() const
{
return tabReplaysOpen;
}
- bool getTabAdminOpen() const
+ [[nodiscard]] bool getTabAdminOpen() const
{
return tabAdminOpen;
}
- bool getTabLogOpen() const
+ [[nodiscard]] bool getTabLogOpen() const
{
return tabLogOpen;
}
- QString getChatMentionColor() const
+ [[nodiscard]] QString getChatMentionColor() const
{
return chatMentionColor;
}
- QString getChatHighlightColor() const
+ [[nodiscard]] QString getChatHighlightColor() const
{
return chatHighlightColor;
}
- bool getPicDownload() const
+ [[nodiscard]] bool getPicDownload() const
{
return picDownload;
}
- bool getShowStatusBar() const
+ [[nodiscard]] bool getShowStatusBar() const
{
return showStatusBar;
}
- bool getNotificationsEnabled() const
+ [[nodiscard]] bool getNotificationsEnabled() const
{
return notificationsEnabled;
}
- bool getSpectatorNotificationsEnabled() const
+ [[nodiscard]] bool getSpectatorNotificationsEnabled() const
{
return spectatorNotificationsEnabled;
}
- bool getBuddyConnectNotificationsEnabled() const
+ [[nodiscard]] bool getBuddyConnectNotificationsEnabled() const
{
return buddyConnectNotificationsEnabled;
}
- bool getCheckUpdatesOnStartup() const
+ [[nodiscard]] bool getCheckUpdatesOnStartup() const
{
return checkUpdatesOnStartup;
}
@@ -480,263 +479,263 @@ public:
{
return startupCardUpdateCheckAlwaysUpdate;
}
- int getCardUpdateCheckInterval() const
+ [[nodiscard]] int getCardUpdateCheckInterval() const
{
return cardUpdateCheckInterval;
}
- QDate getLastCardUpdateCheck() const
+ [[nodiscard]] QDate getLastCardUpdateCheck() const
{
return lastCardUpdateCheck;
}
- bool getCardUpdateCheckRequired() const
+ [[nodiscard]] bool getCardUpdateCheckRequired() const
{
return getLastCardUpdateCheck().daysTo(QDateTime::currentDateTime().date()) >= getCardUpdateCheckInterval() &&
getLastCardUpdateCheck() != QDateTime::currentDateTime().date();
}
- bool getNotifyAboutUpdates() const override
+ [[nodiscard]] bool getNotifyAboutUpdates() const override
{
return notifyAboutUpdates;
}
- bool getNotifyAboutNewVersion() const
+ [[nodiscard]] bool getNotifyAboutNewVersion() const
{
return notifyAboutNewVersion;
}
- bool getShowTipsOnStartup() const
+ [[nodiscard]] bool getShowTipsOnStartup() const
{
return showTipsOnStartup;
}
- QList getSeenTips() const
+ [[nodiscard]] QList getSeenTips() const
{
return seenTips;
}
- int getUpdateReleaseChannelIndex() const
+ [[nodiscard]] int getUpdateReleaseChannelIndex() const
{
return updateReleaseChannel;
}
- ReleaseChannel *getUpdateReleaseChannel() const
+ [[nodiscard]] ReleaseChannel *getUpdateReleaseChannel() const
{
return releaseChannels.at(qMax(0, updateReleaseChannel));
}
- QList getUpdateReleaseChannels() const
+ [[nodiscard]] QList getUpdateReleaseChannels() const
{
return releaseChannels;
}
- bool getDoubleClickToPlay() const
+ [[nodiscard]] bool getDoubleClickToPlay() const
{
return doubleClickToPlay;
}
- bool getClickPlaysAllSelected() const
+ [[nodiscard]] bool getClickPlaysAllSelected() const
{
return clickPlaysAllSelected;
}
- bool getPlayToStack() const
+ [[nodiscard]] bool getPlayToStack() const
{
return playToStack;
}
- bool getDoNotDeleteArrowsInSubPhases() const
+ [[nodiscard]] bool getDoNotDeleteArrowsInSubPhases() const
{
return doNotDeleteArrowsInSubPhases;
}
- int getStartingHandSize() const
+ [[nodiscard]] int getStartingHandSize() const
{
return startingHandSize;
}
- bool getAnnotateTokens() const
+ [[nodiscard]] bool getAnnotateTokens() const
{
return annotateTokens;
}
- QByteArray getTabGameSplitterSizes() const
+ [[nodiscard]] QByteArray getTabGameSplitterSizes() const
{
return tabGameSplitterSizes;
}
- bool getShowShortcuts() const
+ [[nodiscard]] bool getShowShortcuts() const
{
return showShortcuts;
}
- bool getDisplayCardNames() const
+ [[nodiscard]] bool getDisplayCardNames() const
{
return displayCardNames;
}
- bool getOverrideAllCardArtWithPersonalPreference() const
+ [[nodiscard]] bool getOverrideAllCardArtWithPersonalPreference() const
{
return overrideAllCardArtWithPersonalPreference;
}
- bool getBumpSetsWithCardsInDeckToTop() const
+ [[nodiscard]] bool getBumpSetsWithCardsInDeckToTop() const
{
return bumpSetsWithCardsInDeckToTop;
}
- int getPrintingSelectorSortOrder() const
+ [[nodiscard]] int getPrintingSelectorSortOrder() const
{
return printingSelectorSortOrder;
}
- int getPrintingSelectorCardSize() const
+ [[nodiscard]] int getPrintingSelectorCardSize() const
{
return printingSelectorCardSize;
}
- bool getIncludeRebalancedCards() const
+ [[nodiscard]] bool getIncludeRebalancedCards() const
{
return includeRebalancedCards;
}
- bool getPrintingSelectorNavigationButtonsVisible() const
+ [[nodiscard]] bool getPrintingSelectorNavigationButtonsVisible() const
{
return printingSelectorNavigationButtonsVisible;
}
- bool getDeckEditorBannerCardComboBoxVisible() const
+ [[nodiscard]] bool getDeckEditorBannerCardComboBoxVisible() const
{
return deckEditorBannerCardComboBoxVisible;
}
- bool getDeckEditorTagsWidgetVisible() const
+ [[nodiscard]] bool getDeckEditorTagsWidgetVisible() const
{
return deckEditorTagsWidgetVisible;
}
- int getVisualDeckStorageSortingOrder() const
+ [[nodiscard]] int getVisualDeckStorageSortingOrder() const
{
return visualDeckStorageSortingOrder;
}
- bool getVisualDeckStorageShowFolders() const
+ [[nodiscard]] bool getVisualDeckStorageShowFolders() const
{
return visualDeckStorageShowFolders;
}
- bool getVisualDeckStorageShowTagFilter() const
+ [[nodiscard]] bool getVisualDeckStorageShowTagFilter() const
{
return visualDeckStorageShowTagFilter;
}
- QStringList getVisualDeckStorageDefaultTagsList() const
+ [[nodiscard]] QStringList getVisualDeckStorageDefaultTagsList() const
{
return visualDeckStorageDefaultTagsList;
}
- bool getVisualDeckStorageSearchFolderNames() const
+ [[nodiscard]] bool getVisualDeckStorageSearchFolderNames() const
{
return visualDeckStorageSearchFolderNames;
}
- bool getVisualDeckStorageShowBannerCardComboBox() const
+ [[nodiscard]] bool getVisualDeckStorageShowBannerCardComboBox() const
{
return visualDeckStorageShowBannerCardComboBox;
}
- bool getVisualDeckStorageShowTagsOnDeckPreviews() const
+ [[nodiscard]] bool getVisualDeckStorageShowTagsOnDeckPreviews() const
{
return visualDeckStorageShowTagsOnDeckPreviews;
}
- int getVisualDeckStorageCardSize() const
+ [[nodiscard]] int getVisualDeckStorageCardSize() const
{
return visualDeckStorageCardSize;
}
- bool getVisualDeckStorageDrawUnusedColorIdentities() const
+ [[nodiscard]] bool getVisualDeckStorageDrawUnusedColorIdentities() const
{
return visualDeckStorageDrawUnusedColorIdentities;
}
- int getVisualDeckStorageUnusedColorIdentitiesOpacity() const
+ [[nodiscard]] int getVisualDeckStorageUnusedColorIdentitiesOpacity() const
{
return visualDeckStorageUnusedColorIdentitiesOpacity;
}
- int getVisualDeckStorageTooltipType() const
+ [[nodiscard]] int getVisualDeckStorageTooltipType() const
{
return visualDeckStorageTooltipType;
}
- bool getVisualDeckStoragePromptForConversion() const
+ [[nodiscard]] bool getVisualDeckStoragePromptForConversion() const
{
return visualDeckStoragePromptForConversion;
}
- bool getVisualDeckStorageAlwaysConvert() const
+ [[nodiscard]] bool getVisualDeckStorageAlwaysConvert() const
{
return visualDeckStorageAlwaysConvert;
}
- bool getVisualDeckStorageInGame() const
+ [[nodiscard]] bool getVisualDeckStorageInGame() const
{
return visualDeckStorageInGame;
}
- bool getVisualDeckStorageSelectionAnimation() const
+ [[nodiscard]] bool getVisualDeckStorageSelectionAnimation() const
{
return visualDeckStorageSelectionAnimation;
}
- int getVisualDeckEditorCardSize() const
+ [[nodiscard]] int getVisualDeckEditorCardSize() const
{
return visualDeckEditorCardSize;
}
- int getVisualDatabaseDisplayCardSize() const
+ [[nodiscard]] int getVisualDatabaseDisplayCardSize() const
{
return visualDatabaseDisplayCardSize;
}
- int getEDHRecCardSize() const
+ [[nodiscard]] int getEDHRecCardSize() const
{
return edhrecCardSize;
}
- int getArchidektPreviewSize() const
+ [[nodiscard]] int getArchidektPreviewSize() const
{
return archidektPreviewSize;
}
- int getDefaultDeckEditorType() const
+ [[nodiscard]] int getDefaultDeckEditorType() const
{
return defaultDeckEditorType;
}
- bool getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const
+ [[nodiscard]] bool getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const
{
return visualDatabaseDisplayFilterToMostRecentSetsEnabled;
}
- int getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const
+ [[nodiscard]] int getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const
{
return visualDatabaseDisplayFilterToMostRecentSetsAmount;
}
- int getVisualDeckEditorSampleHandSize() const
+ [[nodiscard]] int getVisualDeckEditorSampleHandSize() const
{
return visualDeckEditorSampleHandSize;
}
- bool getHorizontalHand() const
+ [[nodiscard]] bool getHorizontalHand() const
{
return horizontalHand;
}
- bool getInvertVerticalCoordinate() const
+ [[nodiscard]] bool getInvertVerticalCoordinate() const
{
return invertVerticalCoordinate;
}
- int getMinPlayersForMultiColumnLayout() const
+ [[nodiscard]] int getMinPlayersForMultiColumnLayout() const
{
return minPlayersForMultiColumnLayout;
}
- bool getTapAnimation() const
+ [[nodiscard]] bool getTapAnimation() const
{
return tapAnimation;
}
- bool getAutoRotateSidewaysLayoutCards() const
+ [[nodiscard]] bool getAutoRotateSidewaysLayoutCards() const
{
return autoRotateSidewaysLayoutCards;
}
- bool getOpenDeckInNewTab() const
+ [[nodiscard]] bool getOpenDeckInNewTab() const
{
return openDeckInNewTab;
}
- int getRewindBufferingMs() const
+ [[nodiscard]] int getRewindBufferingMs() const
{
return rewindBufferingMs;
}
- bool getChatMention() const
+ [[nodiscard]] bool getChatMention() const
{
return chatMention;
}
- bool getChatMentionCompleter() const
+ [[nodiscard]] bool getChatMentionCompleter() const
{
return chatMentionCompleter;
}
- bool getChatMentionForeground() const
+ [[nodiscard]] bool getChatMentionForeground() const
{
return chatMentionForeground;
}
- bool getChatHighlightForeground() const
+ [[nodiscard]] bool getChatHighlightForeground() const
{
return chatHighlightForeground;
}
/**
* Currently selected index for the `Group by X` QComboBox
*/
- int getZoneViewGroupByIndex() const
+ [[nodiscard]] int getZoneViewGroupByIndex() const
{
return zoneViewGroupByIndex;
}
/**
* Currently selected index for the `Sort by X` QComboBox
*/
- int getZoneViewSortByIndex() const
+ [[nodiscard]] int getZoneViewSortByIndex() const
{
return zoneViewSortByIndex;
}
@@ -744,136 +743,136 @@ public:
Returns if the view should be sorted into pile view.
@return zoneViewPileView if the view should be sorted into pile view.
*/
- bool getZoneViewPileView() const
+ [[nodiscard]] bool getZoneViewPileView() const
{
return zoneViewPileView;
}
- bool getSoundEnabled() const
+ [[nodiscard]] bool getSoundEnabled() const
{
return soundEnabled;
}
- QString getSoundThemeName() const
+ [[nodiscard]] QString getSoundThemeName() const
{
return soundThemeName;
}
- bool getIgnoreUnregisteredUsers() const
+ [[nodiscard]] bool getIgnoreUnregisteredUsers() const
{
return ignoreUnregisteredUsers;
}
- bool getIgnoreUnregisteredUserMessages() const
+ [[nodiscard]] bool getIgnoreUnregisteredUserMessages() const
{
return ignoreUnregisteredUserMessages;
}
- int getPixmapCacheSize() const
+ [[nodiscard]] int getPixmapCacheSize() const
{
return pixmapCacheSize;
}
- int getNetworkCacheSizeInMB() const
+ [[nodiscard]] int getNetworkCacheSizeInMB() const
{
return networkCacheSize;
}
- int getRedirectCacheTtl() const
+ [[nodiscard]] int getRedirectCacheTtl() const
{
return redirectCacheTtl;
}
- bool getScaleCards() const
+ [[nodiscard]] bool getScaleCards() const
{
return scaleCards;
}
- int getStackCardOverlapPercent() const
+ [[nodiscard]] int getStackCardOverlapPercent() const
{
return verticalCardOverlapPercent;
}
- bool getShowMessagePopup() const
+ [[nodiscard]] bool getShowMessagePopup() const
{
return showMessagePopups;
}
- bool getShowMentionPopup() const
+ [[nodiscard]] bool getShowMentionPopup() const
{
return showMentionPopups;
}
- bool getRoomHistory() const
+ [[nodiscard]] bool getRoomHistory() const
{
return roomHistory;
}
- bool getLeftJustified() const
+ [[nodiscard]] bool getLeftJustified() const
{
return leftJustified;
}
- int getMasterVolume() const
+ [[nodiscard]] int getMasterVolume() const
{
return masterVolume;
}
- int getCardInfoViewMode() const
+ [[nodiscard]] int getCardInfoViewMode() const
{
return cardInfoViewMode;
}
- QStringList getCountries() const;
- QString getHighlightWords() const
+ [[nodiscard]] QStringList getCountries() const;
+ [[nodiscard]] QString getHighlightWords() const
{
return highlightWords;
}
- QString getGameDescription() const
+ [[nodiscard]] QString getGameDescription() const
{
return gameDescription;
}
- int getMaxPlayers() const
+ [[nodiscard]] int getMaxPlayers() const
{
return maxPlayers;
}
- QString getGameTypes() const
+ [[nodiscard]] QString getGameTypes() const
{
return gameTypes;
}
- bool getOnlyBuddies() const
+ [[nodiscard]] bool getOnlyBuddies() const
{
return onlyBuddies;
}
- bool getOnlyRegistered() const
+ [[nodiscard]] bool getOnlyRegistered() const
{
return onlyRegistered;
}
- bool getSpectatorsAllowed() const
+ [[nodiscard]] bool getSpectatorsAllowed() const
{
return spectatorsAllowed;
}
- bool getSpectatorsNeedPassword() const
+ [[nodiscard]] bool getSpectatorsNeedPassword() const
{
return spectatorsNeedPassword;
}
- bool getSpectatorsCanTalk() const
+ [[nodiscard]] bool getSpectatorsCanTalk() const
{
return spectatorsCanTalk;
}
- bool getSpectatorsCanSeeEverything() const
+ [[nodiscard]] bool getSpectatorsCanSeeEverything() const
{
return spectatorsCanSeeEverything;
}
- int getDefaultStartingLifeTotal() const
+ [[nodiscard]] int getDefaultStartingLifeTotal() const
{
return defaultStartingLifeTotal;
}
- bool getShareDecklistsOnLoad() const
+ [[nodiscard]] bool getShareDecklistsOnLoad() const
{
return shareDecklistsOnLoad;
}
- bool getCreateGameAsSpectator() const
+ [[nodiscard]] bool getCreateGameAsSpectator() const
{
return createGameAsSpectator;
}
- bool getRememberGameSettings() const
+ [[nodiscard]] bool getRememberGameSettings() const
{
return rememberGameSettings;
}
- int getKeepAlive() const override
+ [[nodiscard]] int getKeepAlive() const override
{
return keepalive;
}
- int getTimeOut() const override
+ [[nodiscard]] int getTimeOut() const override
{
return timeout;
}
- int getMaxFontSize() const
+ [[nodiscard]] int getMaxFontSize() const
{
return maxFontSize;
}
@@ -901,73 +900,73 @@ public:
{
return useTearOffMenus;
}
- int getCardViewInitialRowsMax() const
+ [[nodiscard]] int getCardViewInitialRowsMax() const
{
return cardViewInitialRowsMax;
}
- int getCardViewExpandedRowsMax() const
+ [[nodiscard]] int getCardViewExpandedRowsMax() const
{
return cardViewExpandedRowsMax;
}
- bool getCloseEmptyCardView() const
+ [[nodiscard]] bool getCloseEmptyCardView() const
{
return closeEmptyCardView;
}
- bool getFocusCardViewSearchBar() const
+ [[nodiscard]] bool getFocusCardViewSearchBar() const
{
return focusCardViewSearchBar;
}
- ShortcutsSettings &shortcuts() const
+ [[nodiscard]] ShortcutsSettings &shortcuts() const
{
return *shortcutsSettings;
}
- CardDatabaseSettings *cardDatabase() const
+ [[nodiscard]] CardDatabaseSettings *cardDatabase() const
{
return cardDatabaseSettings;
}
- ServersSettings &servers() const
+ [[nodiscard]] ServersSettings &servers() const
{
return *serversSettings;
}
- MessageSettings &messages() const
+ [[nodiscard]] MessageSettings &messages() const
{
return *messageSettings;
}
- GameFiltersSettings &gameFilters() const
+ [[nodiscard]] GameFiltersSettings &gameFilters() const
{
return *gameFiltersSettings;
}
- LayoutsSettings &layouts() const
+ [[nodiscard]] LayoutsSettings &layouts() const
{
return *layoutsSettings;
}
- DownloadSettings &downloads() const
+ [[nodiscard]] DownloadSettings &downloads() const
{
return *downloadSettings;
}
- RecentsSettings &recents() const
+ [[nodiscard]] RecentsSettings &recents() const
{
return *recentsSettings;
}
- CardOverrideSettings &cardOverrides() const
+ [[nodiscard]] CardOverrideSettings &cardOverrides() const
{
return *cardOverrideSettings;
}
- DebugSettings &debug() const
+ [[nodiscard]] DebugSettings &debug() const
{
return *debugSettings;
}
- CardCounterSettings &cardCounters() const;
+ [[nodiscard]] CardCounterSettings &cardCounters() const;
- bool getIsPortableBuild() const
+ [[nodiscard]] bool getIsPortableBuild() const
{
return isPortableBuild;
}
- bool getDownloadSpoilersStatus() const
+ [[nodiscard]] bool getDownloadSpoilersStatus() const
{
return mbDownloadSpoilers;
}
- bool getRoundCardCorners() const
+ [[nodiscard]] bool getRoundCardCorners() const
{
return roundCardCorners;
}
diff --git a/cockatrice/src/client/settings/card_counter_settings.h b/cockatrice/src/client/settings/card_counter_settings.h
index f2c1c1d43..b1d467d67 100644
--- a/cockatrice/src/client/settings/card_counter_settings.h
+++ b/cockatrice/src/client/settings/card_counter_settings.h
@@ -7,7 +7,6 @@
#ifndef CARD_COUNTER_SETTINGS_H
#define CARD_COUNTER_SETTINGS_H
-#include
#include
class QSettings;
@@ -20,9 +19,9 @@ class CardCounterSettings : public SettingsManager
public:
CardCounterSettings(const QString &settingsPath, QObject *parent = nullptr);
- QColor color(int counterId) const;
+ [[nodiscard]] QColor color(int counterId) const;
- QString displayName(int counterId) const;
+ [[nodiscard]] QString displayName(int counterId) const;
public slots:
void setColor(int counterId, const QColor &color);
diff --git a/cockatrice/src/client/settings/shortcut_treeview.cpp b/cockatrice/src/client/settings/shortcut_treeview.cpp
index 6b329b23d..b909d47ac 100644
--- a/cockatrice/src/client/settings/shortcut_treeview.cpp
+++ b/cockatrice/src/client/settings/shortcut_treeview.cpp
@@ -150,12 +150,7 @@ void ShortcutTreeView::currentChanged(const QModelIndex ¤t, const QModelIn
*/
void ShortcutTreeView::updateSearchString(const QString &searchString)
{
-#if QT_VERSION > QT_VERSION_CHECK(5, 14, 0)
- const auto skipEmptyParts = Qt::SkipEmptyParts;
-#else
- const auto skipEmptyParts = QString::SkipEmptyParts;
-#endif
- QStringList searchWords = searchString.split(" ", skipEmptyParts);
+ QStringList searchWords = searchString.split(" ", Qt::SkipEmptyParts);
auto escapeRegex = [](const QString &s) { return QRegularExpression::escape(s); };
std::transform(searchWords.begin(), searchWords.end(), searchWords.begin(), escapeRegex);
diff --git a/cockatrice/src/client/settings/shortcut_treeview.h b/cockatrice/src/client/settings/shortcut_treeview.h
index 229bf2ed2..8d74a6f1e 100644
--- a/cockatrice/src/client/settings/shortcut_treeview.h
+++ b/cockatrice/src/client/settings/shortcut_treeview.h
@@ -7,7 +7,6 @@
#ifndef SHORTCUT_TREEVIEW_H
#define SHORTCUT_TREEVIEW_H
-#include
#include
#include
#include
@@ -22,7 +21,7 @@ public:
explicit ShortcutFilterProxyModel(QObject *parent = nullptr);
protected:
- bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
+ [[nodiscard]] bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
};
class ShortcutTreeView : public QTreeView
diff --git a/cockatrice/src/client/settings/shortcuts_settings.h b/cockatrice/src/client/settings/shortcuts_settings.h
index 31e90bdc7..736f0c896 100644
--- a/cockatrice/src/client/settings/shortcuts_settings.h
+++ b/cockatrice/src/client/settings/shortcuts_settings.h
@@ -99,15 +99,15 @@ public:
void setSequence(const QList &_sequence)
{
QList::operator=(_sequence);
- };
- QString getName() const
+ }
+ [[nodiscard]] QString getName() const
{
return QApplication::translate("shortcutsTab", name.toUtf8().data());
- };
- QString getGroupName() const
+ }
+ [[nodiscard]] QString getGroupName() const
{
return ShortcutGroup::getGroupName(group);
- };
+ }
private:
QString name;
@@ -120,24 +120,24 @@ class ShortcutsSettings : public QObject
public:
explicit ShortcutsSettings(const QString &settingsFilePath, QObject *parent = nullptr);
- ShortcutKey getDefaultShortcut(const QString &name) const;
- ShortcutKey getShortcut(const QString &name) const;
- QKeySequence getSingleShortcut(const QString &name) const;
- QString getDefaultShortcutString(const QString &name) const;
- QString getShortcutString(const QString &name) const;
- QString getShortcutFriendlyName(const QString &shortcutName) const;
- QList getAllShortcutKeys() const
+ [[nodiscard]] ShortcutKey getDefaultShortcut(const QString &name) const;
+ [[nodiscard]] ShortcutKey getShortcut(const QString &name) const;
+ [[nodiscard]] QKeySequence getSingleShortcut(const QString &name) const;
+ [[nodiscard]] QString getDefaultShortcutString(const QString &name) const;
+ [[nodiscard]] QString getShortcutString(const QString &name) const;
+ [[nodiscard]] QString getShortcutFriendlyName(const QString &shortcutName) const;
+ [[nodiscard]] QList getAllShortcutKeys() const
{
return shortCuts.keys();
- };
+ }
void setShortcuts(const QString &name, const QList &Sequence);
void setShortcuts(const QString &name, const QKeySequence &Sequence);
void setShortcuts(const QString &name, const QString &sequences);
- bool isKeyAllowed(const QString &name, const QString &sequences) const;
- bool isValid(const QString &name, const QString &sequences) const;
- QStringList findOverlaps(const QString &name, const QString &sequences) const;
+ [[nodiscard]] bool isKeyAllowed(const QString &name, const QString &sequences) const;
+ [[nodiscard]] bool isValid(const QString &name, const QString &sequences) const;
+ [[nodiscard]] QStringList findOverlaps(const QString &name, const QString &sequences) const;
void resetAllShortcuts();
void clearAllShortcuts();
@@ -152,8 +152,8 @@ private:
QString settingsFilePath;
QHash shortCuts;
- QString stringifySequence(const QList &Sequence) const;
- QList parseSequenceString(const QString &stringSequence) const;
+ [[nodiscard]] QString stringifySequence(const QList &Sequence) const;
+ [[nodiscard]] QList parseSequenceString(const QString &stringSequence) const;
const QHash defaultShortCuts = {
{"MainWindow/aCheckCardUpdates", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Check for Card Updates..."),
diff --git a/cockatrice/src/database/interface/settings_card_preference_provider.h b/cockatrice/src/database/interface/settings_card_preference_provider.h
index 4197bb53c..6c31b9d6d 100644
--- a/cockatrice/src/database/interface/settings_card_preference_provider.h
+++ b/cockatrice/src/database/interface/settings_card_preference_provider.h
@@ -7,15 +7,15 @@
class SettingsCardPreferenceProvider : public ICardPreferenceProvider
{
public:
- QString getCardPreferenceOverride(const QString &cardName) const override
+ [[nodiscard]] QString getCardPreferenceOverride(const QString &cardName) const override
{
return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
}
- bool getIncludeRebalancedCards() const override
+ [[nodiscard]] bool getIncludeRebalancedCards() const override
{
return SettingsCache::instance().getIncludeRebalancedCards();
- };
+ }
};
#endif // COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
diff --git a/cockatrice/src/filters/deck_filter_string.cpp b/cockatrice/src/filters/deck_filter_string.cpp
index c9adc17e9..5cce5d323 100644
--- a/cockatrice/src/filters/deck_filter_string.cpp
+++ b/cockatrice/src/filters/deck_filter_string.cpp
@@ -1,5 +1,6 @@
#include "deck_filter_string.h"
+#include
#include
#include
#include
@@ -12,7 +13,7 @@ QueryPartList <- ComplexQueryPart ( ws ("AND" ws)? ComplexQueryPart)* ws*
ComplexQueryPart <- SomewhatComplexQueryPart ws "OR" ws ComplexQueryPart / SomewhatComplexQueryPart
SomewhatComplexQueryPart <- [(] QueryPartList [)] / QueryPart
-QueryPart <- NotQuery / DeckContentQuery / DeckNameQuery / FileNameQuery / PathQuery / GenericQuery
+QueryPart <- NotQuery / DeckContentQuery / DeckNameQuery / FileNameQuery / PathQuery / FormatQuery / GenericQuery
NotQuery <- ('NOT' ws/'-') SomewhatComplexQueryPart
@@ -21,8 +22,9 @@ CardSearch <- '[[' CardFilterString ']]'
CardFilterString <- (!']]'.)*
DeckNameQuery <- ([Dd] 'eck')? [Nn] 'ame'? [:] String
-FileNameQuery <- [Ff] ('ile' 'name'?)? [:] String
+FileNameQuery <- [Ff] ([Nn] / 'ile' ([Nn] 'ame')?) [:] String
PathQuery <- [Pp] 'ath'? [:] String
+FormatQuery <- [Ff] 'ormat'? [:] String
GenericQuery <- String
@@ -117,12 +119,13 @@ static void setupParserRules()
return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) -> bool {
int count = 0;
- deck->deckLoader->getDeckList()->forEachCard([&](InnerDecklistNode *, const DecklistCardNode *node) {
+ auto cardNodes = deck->deckLoader->getDeck().deckList.getCardNodes();
+ for (auto node : cardNodes) {
auto cardInfoPtr = CardDatabaseManager::query()->getCardInfo(node->getName());
if (!cardInfoPtr.isNull() && cardFilter.check(cardInfoPtr)) {
count += node->getNumber();
}
- });
+ }
return numberMatcher(count);
};
};
@@ -136,7 +139,7 @@ static void setupParserRules()
search["DeckNameQuery"] = [](const peg::SemanticValues &sv) -> DeckFilter {
auto name = std::any_cast(sv[0]);
return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) {
- return deck->deckLoader->getDeckList()->getName().contains(name, Qt::CaseInsensitive);
+ return deck->deckLoader->getDeck().deckList.getName().contains(name, Qt::CaseInsensitive);
};
};
@@ -155,6 +158,14 @@ static void setupParserRules()
};
};
+ search["FormatQuery"] = [](const peg::SemanticValues &sv) -> DeckFilter {
+ auto format = std::any_cast(sv[0]);
+ return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) {
+ auto gameFormat = deck->deckLoader->getDeck().deckList.getGameFormat();
+ return QString::compare(format, gameFormat, Qt::CaseInsensitive) == 0;
+ };
+ };
+
search["GenericQuery"] = [](const peg::SemanticValues &sv) -> DeckFilter {
auto name = std::any_cast(sv[0]);
return [=](const DeckPreviewWidget *deck, const ExtraDeckSearchInfo &) {
diff --git a/cockatrice/src/filters/deck_filter_string.h b/cockatrice/src/filters/deck_filter_string.h
index 15782b3ad..1b43d770d 100644
--- a/cockatrice/src/filters/deck_filter_string.h
+++ b/cockatrice/src/filters/deck_filter_string.h
@@ -10,10 +10,8 @@
#include "../interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h"
#include
-#include
#include
#include
-#include
inline Q_LOGGING_CATEGORY(DeckFilterStringLog, "deck_filter_string");
@@ -40,7 +38,7 @@ public:
return filter(deck, info);
}
- bool valid() const
+ [[nodiscard]] bool valid() const
{
return _error.isEmpty();
}
diff --git a/cockatrice/src/filters/filter_tree_model.h b/cockatrice/src/filters/filter_tree_model.h
index ce6eb85fc..c6666a838 100644
--- a/cockatrice/src/filters/filter_tree_model.h
+++ b/cockatrice/src/filters/filter_tree_model.h
@@ -24,8 +24,8 @@ public slots:
void addFilter(const CardFilter *f);
void removeFilter(const CardFilter *f);
void clearFiltersOfType(CardFilter::Attr filterType);
- QList getFiltersOfType(CardFilter::Attr filterType) const;
- QList allFilters() const;
+ [[nodiscard]] QList getFiltersOfType(CardFilter::Attr filterType) const;
+ [[nodiscard]] QList allFilters() const;
private slots:
void proxyBeginInsertRow(const FilterTreeNode *, int);
@@ -34,23 +34,23 @@ private slots:
void proxyEndRemoveRow(const FilterTreeNode *, int);
private:
- FilterTreeNode *indexToNode(const QModelIndex &idx) const;
+ [[nodiscard]] FilterTreeNode *indexToNode(const QModelIndex &idx) const;
QModelIndex nodeIndex(const FilterTreeNode *node, int row, int column) const;
public:
FilterTreeModel(QObject *parent = nullptr);
~FilterTreeModel() override;
- FilterTree *filterTree() const
+ [[nodiscard]] FilterTree *filterTree() const
{
return fTree;
}
- int rowCount(const QModelIndex &parent = QModelIndex()) const override;
- int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
- QVariant data(const QModelIndex &index, int role) const override;
+ [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
+ [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- Qt::ItemFlags flags(const QModelIndex &index) const override;
- QModelIndex parent(const QModelIndex &ind) const override;
- QModelIndex index(int row, int column, const QModelIndex &parent) const override;
+ [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
+ [[nodiscard]] QModelIndex parent(const QModelIndex &ind) const override;
+ [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent) const override;
bool removeRows(int row, int count, const QModelIndex &parent) override;
void clear();
};
diff --git a/cockatrice/src/game/board/abstract_counter.cpp b/cockatrice/src/game/board/abstract_counter.cpp
index 985c78ad2..08d19ec8a 100644
--- a/cockatrice/src/game/board/abstract_counter.cpp
+++ b/cockatrice/src/game/board/abstract_counter.cpp
@@ -3,15 +3,14 @@
#include "../../client/settings/cache_settings.h"
#include "../../interface/widgets/tabs/tab_game.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "translate_counter_name.h"
#include
#include
-#include
#include
#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/board/arrow_item.cpp b/cockatrice/src/game/board/arrow_item.cpp
index d5d0ebfe0..1352b3a05 100644
--- a/cockatrice/src/game/board/arrow_item.cpp
+++ b/cockatrice/src/game/board/arrow_item.cpp
@@ -3,6 +3,7 @@
#include "../../client/settings/cache_settings.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "../player/player_target.h"
#include "../zones/card_zone.h"
#include "card_item.h"
diff --git a/cockatrice/src/game/board/card_item.cpp b/cockatrice/src/game/board/card_item.cpp
index e786b5329..34c2f9a98 100644
--- a/cockatrice/src/game/board/card_item.cpp
+++ b/cockatrice/src/game/board/card_item.cpp
@@ -5,7 +5,7 @@
#include "../game_scene.h"
#include "../phase.h"
#include "../player/player.h"
-#include "../zones/card_zone.h"
+#include "../player/player_actions.h"
#include "../zones/logic/view_zone_logic.h"
#include "../zones/table_zone.h"
#include "../zones/view_zone.h"
diff --git a/cockatrice/src/game/deckview/deck_view.cpp b/cockatrice/src/game/deckview/deck_view.cpp
index 64e9abc46..383545cf3 100644
--- a/cockatrice/src/game/deckview/deck_view.cpp
+++ b/cockatrice/src/game/deckview/deck_view.cpp
@@ -10,7 +10,7 @@
#include
#include
#include
-#include
+#include
DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item,
const QPointF &_hotSpot,
@@ -343,10 +343,7 @@ void DeckViewScene::rebuildTree()
if (!deck)
return;
- InnerDecklistNode *listRoot = deck->getRoot();
- for (int i = 0; i < listRoot->size(); i++) {
- auto *currentZone = dynamic_cast(listRoot->at(i));
-
+ for (auto *currentZone : deck->getZoneNodes()) {
DeckViewCardContainer *container = cardContainers.value(currentZone->getName(), 0);
if (!container) {
container = new DeckViewCardContainer(currentZone->getName());
diff --git a/cockatrice/src/game/deckview/deck_view.h b/cockatrice/src/game/deckview/deck_view.h
index 027d0fafd..5abc558bd 100644
--- a/cockatrice/src/game/deckview/deck_view.h
+++ b/cockatrice/src/game/deckview/deck_view.h
@@ -9,11 +9,8 @@
#include "../board/abstract_card_drag_item.h"
-#include
#include
#include
-#include
-#include
#include
class DeckList;
diff --git a/cockatrice/src/game/deckview/deck_view_container.cpp b/cockatrice/src/game/deckview/deck_view_container.cpp
index da24aa814..c7876a12f 100644
--- a/cockatrice/src/game/deckview/deck_view_container.cpp
+++ b/cockatrice/src/game/deckview/deck_view_container.cpp
@@ -8,13 +8,9 @@
#include "../../interface/widgets/dialogs/dlg_load_deck_from_website.h"
#include "../../interface/widgets/dialogs/dlg_load_remote_deck.h"
#include "../../interface/widgets/tabs/tab_game.h"
-#include "../game_scene.h"
#include "deck_view.h"
#include
-#include
-#include
-#include
#include
#include
#include
@@ -263,7 +259,7 @@ void DeckViewContainer::loadLocalDeck()
void DeckViewContainer::loadDeckFromFile(const QString &filePath)
{
- DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(filePath);
+ DeckFileFormat::Format fmt = DeckFileFormat::getFormatFromName(filePath);
DeckLoader deck(this);
bool success = deck.loadFromFile(filePath, fmt, true);
@@ -273,12 +269,12 @@ void DeckViewContainer::loadDeckFromFile(const QString &filePath)
return;
}
- loadDeckFromDeckLoader(&deck);
+ loadDeckFromDeckList(deck.getDeck().deckList);
}
-void DeckViewContainer::loadDeckFromDeckLoader(DeckLoader *deck)
+void DeckViewContainer::loadDeckFromDeckList(const DeckList &deck)
{
- QString deckString = deck->getDeckList()->writeToString_Native();
+ QString deckString = deck.writeToString_Native();
if (deckString.length() > MAX_FILE_LENGTH) {
QMessageBox::critical(this, tr("Error"), tr("Deck is greater than maximum file size."));
@@ -312,8 +308,8 @@ void DeckViewContainer::loadFromClipboard()
return;
}
- DeckLoader *deck = dlg.getDeckList();
- loadDeckFromDeckLoader(deck);
+ DeckList deck = dlg.getDeckList();
+ loadDeckFromDeckList(deck);
}
void DeckViewContainer::loadFromWebsite()
@@ -324,16 +320,15 @@ void DeckViewContainer::loadFromWebsite()
return;
}
- DeckLoader *deck = dlg.getDeck();
- loadDeckFromDeckLoader(deck);
+ DeckList deck = dlg.getDeck();
+ loadDeckFromDeckList(deck);
}
void DeckViewContainer::deckSelectFinished(const Response &r)
{
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
- DeckLoader newDeck(this, new DeckList(QString::fromStdString(resp.deck())));
- CardPictureLoader::cacheCardPixmaps(
- CardDatabaseManager::query()->getCards(newDeck.getDeckList()->getCardRefList()));
+ DeckList newDeck = DeckList(QString::fromStdString(resp.deck()));
+ CardPictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(newDeck.getCardRefList()));
setDeck(newDeck);
switchToDeckLoadedView();
}
@@ -414,8 +409,8 @@ void DeckViewContainer::setSideboardLocked(bool locked)
deckView->resetSideboardPlan();
}
-void DeckViewContainer::setDeck(DeckLoader &deck)
+void DeckViewContainer::setDeck(const DeckList &deck)
{
- deckView->setDeck(*deck.getDeckList());
+ deckView->setDeck(deck);
switchToDeckLoadedView();
}
\ No newline at end of file
diff --git a/cockatrice/src/game/deckview/deck_view_container.h b/cockatrice/src/game/deckview/deck_view_container.h
index 620929789..6d685cd79 100644
--- a/cockatrice/src/game/deckview/deck_view_container.h
+++ b/cockatrice/src/game/deckview/deck_view_container.h
@@ -85,12 +85,12 @@ public:
void setReadyStart(bool ready);
void readyAndUpdate();
void setSideboardLocked(bool locked);
- void setDeck(DeckLoader &deck);
+ void setDeck(const DeckList &deck);
void setVisualDeckStorageExists(bool exists);
public slots:
void loadDeckFromFile(const QString &filePath);
- void loadDeckFromDeckLoader(DeckLoader *deck);
+ void loadDeckFromDeckList(const DeckList &deck);
};
#endif // DECK_VIEW_CONTAINER_H
diff --git a/cockatrice/src/game/dialogs/dlg_create_token.cpp b/cockatrice/src/game/dialogs/dlg_create_token.cpp
index 6594e339d..836c0c16a 100644
--- a/cockatrice/src/game/dialogs/dlg_create_token.cpp
+++ b/cockatrice/src/game/dialogs/dlg_create_token.cpp
@@ -16,7 +16,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -118,11 +117,7 @@ DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *pa
chooseTokenFromDeckRadioButton->setDisabled(true); // No tokens in deck = no need for option
} else {
chooseTokenFromDeckRadioButton->setChecked(true);
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
cardDatabaseDisplayModel->setCardNameSet(QSet(predefinedTokens.begin(), predefinedTokens.end()));
-#else
- cardDatabaseDisplayModel->setCardNameSet(QSet::fromList(predefinedTokens));
-#endif
}
auto *tokenChooseLayout = new QVBoxLayout;
@@ -224,11 +219,7 @@ void DlgCreateToken::actChooseTokenFromAll(bool checked)
void DlgCreateToken::actChooseTokenFromDeck(bool checked)
{
if (checked) {
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
cardDatabaseDisplayModel->setCardNameSet(QSet(predefinedTokens.begin(), predefinedTokens.end()));
-#else
- cardDatabaseDisplayModel->setCardNameSet(QSet::fromList(predefinedTokens));
-#endif
}
}
diff --git a/cockatrice/src/game/dialogs/dlg_create_token.h b/cockatrice/src/game/dialogs/dlg_create_token.h
index 8235aa4cc..9a18f1a57 100644
--- a/cockatrice/src/game/dialogs/dlg_create_token.h
+++ b/cockatrice/src/game/dialogs/dlg_create_token.h
@@ -8,7 +8,6 @@
#define DLG_CREATETOKEN_H
#include
-#include
class QLabel;
class QLineEdit;
diff --git a/cockatrice/src/game/game_event_handler.cpp b/cockatrice/src/game/game_event_handler.cpp
index 1cb47f368..7bfc4da75 100644
--- a/cockatrice/src/game/game_event_handler.cpp
+++ b/cockatrice/src/game/game_event_handler.cpp
@@ -15,7 +15,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/game_scene.cpp b/cockatrice/src/game/game_scene.cpp
index 2175f4aa2..77037cd6e 100644
--- a/cockatrice/src/game/game_scene.cpp
+++ b/cockatrice/src/game/game_scene.cpp
@@ -8,7 +8,6 @@
#include "zones/view_zone.h"
#include "zones/view_zone_widget.h"
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/game_state.h b/cockatrice/src/game/game_state.h
index b5d6a6572..54f6d9276 100644
--- a/cockatrice/src/game/game_state.h
+++ b/cockatrice/src/game/game_state.h
@@ -7,10 +7,8 @@
#ifndef COCKATRICE_GAME_STATE_H
#define COCKATRICE_GAME_STATE_H
-#include
#include
#include
-#include
class AbstractGame;
class ServerInfo_PlayerProperties;
diff --git a/cockatrice/src/game/log/message_log_widget.cpp b/cockatrice/src/game/log/message_log_widget.cpp
index d4af5d00d..1ff3e32ff 100644
--- a/cockatrice/src/game/log/message_log_widget.cpp
+++ b/cockatrice/src/game/log/message_log_widget.cpp
@@ -6,12 +6,10 @@
#include "../board/translate_counter_name.h"
#include "../phase.h"
#include "../player/player.h"
-#include "../zones/card_zone.h"
#include <../../client/settings/card_counter_settings.h>
#include
#include
-#include
#include
static const QString TABLE_ZONE_NAME = "table";
diff --git a/cockatrice/src/game/log/message_log_widget.h b/cockatrice/src/game/log/message_log_widget.h
index a185cb288..369debd33 100644
--- a/cockatrice/src/game/log/message_log_widget.h
+++ b/cockatrice/src/game/log/message_log_widget.h
@@ -7,12 +7,9 @@
#ifndef MESSAGELOGWIDGET_H
#define MESSAGELOGWIDGET_H
-#include "../../client/translation.h"
#include "../../interface/widgets/server/chat_view/chat_view.h"
#include "../zones/logic/card_zone_logic.h"
-#include
-
class AbstractGame;
class CardItem;
class GameEventContext;
diff --git a/cockatrice/src/game/player/menu/grave_menu.cpp b/cockatrice/src/game/player/menu/grave_menu.cpp
index 47d01bc77..d4faca42b 100644
--- a/cockatrice/src/game/player/menu/grave_menu.cpp
+++ b/cockatrice/src/game/player/menu/grave_menu.cpp
@@ -3,7 +3,6 @@
#include "../../abstract_game.h"
#include "../player.h"
#include "../player_actions.h"
-#include "grave_menu.h"
#include
#include
diff --git a/cockatrice/src/game/player/menu/player_menu.cpp b/cockatrice/src/game/player/menu/player_menu.cpp
index 82747d482..3016a727f 100644
--- a/cockatrice/src/game/player/menu/player_menu.cpp
+++ b/cockatrice/src/game/player/menu/player_menu.cpp
@@ -3,12 +3,11 @@
#include "../../../interface/widgets/tabs/tab_game.h"
#include "../../board/card_item.h"
#include "../../zones/hand_zone.h"
-#include "../card_menu_action_type.h"
-#include "../player_actions.h"
+#include "../../zones/pile_zone.h"
+#include "../../zones/table_zone.h"
#include "card_menu.h"
#include "hand_menu.h"
-#include
#include
PlayerMenu::PlayerMenu(Player *_player) : player(_player)
diff --git a/cockatrice/src/game/player/menu/sideboard_menu.cpp b/cockatrice/src/game/player/menu/sideboard_menu.cpp
index bfc40cfd3..beaabfcc6 100644
--- a/cockatrice/src/game/player/menu/sideboard_menu.cpp
+++ b/cockatrice/src/game/player/menu/sideboard_menu.cpp
@@ -1,6 +1,7 @@
#include "sideboard_menu.h"
#include "../player.h"
+#include "../player_actions.h"
SideboardMenu::SideboardMenu(Player *player, QMenu *playerMenu) : QMenu(playerMenu)
{
diff --git a/cockatrice/src/game/player/menu/utility_menu.cpp b/cockatrice/src/game/player/menu/utility_menu.cpp
index 15128defe..37bdcbbaf 100644
--- a/cockatrice/src/game/player/menu/utility_menu.cpp
+++ b/cockatrice/src/game/player/menu/utility_menu.cpp
@@ -1,9 +1,13 @@
#include "utility_menu.h"
+#include "../../../interface/deck_loader/deck_loader.h"
#include "../player.h"
#include "../player_actions.h"
#include "player_menu.h"
+#include
+#include
+
UtilityMenu::UtilityMenu(Player *_player, QMenu *playerMenu) : QMenu(playerMenu), player(_player)
{
PlayerActions *playerActions = player->getPlayerActions();
@@ -56,21 +60,19 @@ void UtilityMenu::populatePredefinedTokensMenu()
clear();
setEnabled(false);
predefinedTokens.clear();
- DeckLoader *_deck = player->getDeck();
+ const DeckList &deckList = player->getDeck();
- if (!_deck) {
+ if (deckList.isEmpty()) {
return;
}
- InnerDecklistNode *tokenZone =
- dynamic_cast(_deck->getDeckList()->getRoot()->findChild(DECK_ZONE_TOKENS));
+ auto tokenCardNodes = deckList.getCardNodes({DECK_ZONE_TOKENS});
- if (tokenZone) {
- if (!tokenZone->empty())
- setEnabled(true);
+ if (!tokenCardNodes.isEmpty()) {
+ setEnabled(true);
- for (int i = 0; i < tokenZone->size(); ++i) {
- const QString tokenName = tokenZone->at(i)->getName();
+ for (int i = 0; i < tokenCardNodes.size(); ++i) {
+ const QString tokenName = tokenCardNodes[i]->getName();
predefinedTokens.append(tokenName);
QAction *a = addAction(tokenName);
if (i < 10) {
diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp
index ffb26c26e..0723ae6bc 100644
--- a/cockatrice/src/game/player/player.cpp
+++ b/cockatrice/src/game/player/player.cpp
@@ -11,7 +11,7 @@
#include "../zones/pile_zone.h"
#include "../zones/stack_zone.h"
#include "../zones/table_zone.h"
-#include "../zones/view_zone.h"
+#include "player_actions.h"
#include "player_target.h"
#include
@@ -32,7 +32,7 @@
Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
: QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)),
playerEventHandler(new PlayerEventHandler(this)), playerActions(new PlayerActions(this)), active(false),
- conceded(false), deck(nullptr), zoneId(0), dialogSemaphore(false)
+ conceded(false), zoneId(0), dialogSemaphore(false)
{
initializeZones();
@@ -263,10 +263,9 @@ void Player::deleteCard(CardItem *card)
}
}
-// TODO: Does a player need a DeckLoader?
-void Player::setDeck(DeckLoader &_deck)
+void Player::setDeck(const DeckList &_deck)
{
- deck = new DeckLoader(this, _deck.getDeckList());
+ deck = _deck;
emit deckChanged();
}
diff --git a/cockatrice/src/game/player/player.h b/cockatrice/src/game/player/player.h
index 0751abb14..0a03b3abe 100644
--- a/cockatrice/src/game/player/player.h
+++ b/cockatrice/src/game/player/player.h
@@ -9,9 +9,12 @@
#include "../../game_graphics/board/abstract_graphics_item.h"
#include "../../interface/widgets/menus/tearoff_menu.h"
-#include "../dialogs/dlg_create_token.h"
+#include "../interface/deck_loader/loaded_deck.h"
+#include "../zones/logic/hand_zone_logic.h"
+#include "../zones/logic/pile_zone_logic.h"
+#include "../zones/logic/stack_zone_logic.h"
+#include "../zones/logic/table_zone_logic.h"
#include "menu/player_menu.h"
-#include "player_actions.h"
#include "player_area.h"
#include "player_event_handler.h"
#include "player_graphics_item.h"
@@ -20,9 +23,7 @@
#include
#include
#include
-#include
#include
-#include
#include
#include
#include
@@ -44,7 +45,6 @@ class ArrowTarget;
class CardDatabase;
class CardZone;
class CommandContainer;
-class DeckLoader;
class GameCommand;
class GameEvent;
class PlayerInfo;
@@ -66,7 +66,7 @@ class Player : public QObject
Q_OBJECT
signals:
- void openDeckEditor(DeckLoader *deck);
+ void openDeckEditor(const LoadedDeck &deck);
void deckChanged();
void newCardAdded(AbstractCardItem *card);
void rearrangeCounters();
@@ -113,7 +113,7 @@ public:
[[nodiscard]] PlayerActions *getPlayerActions() const
{
return playerActions;
- };
+ }
[[nodiscard]] PlayerEventHandler *getPlayerEventHandler() const
{
@@ -123,16 +123,16 @@ public:
[[nodiscard]] PlayerInfo *getPlayerInfo() const
{
return playerInfo;
- };
+ }
[[nodiscard]] PlayerMenu *getPlayerMenu() const
{
return playerMenu;
}
- void setDeck(DeckLoader &_deck);
+ void setDeck(const DeckList &_deck);
- [[nodiscard]] DeckLoader *getDeck() const
+ [[nodiscard]] const DeckList &getDeck() const
{
return deck;
}
@@ -241,7 +241,7 @@ private:
bool active;
bool conceded;
- DeckLoader *deck;
+ DeckList deck;
int zoneId;
QMap zones;
diff --git a/cockatrice/src/game/player/player_actions.cpp b/cockatrice/src/game/player/player_actions.cpp
index e6efaf854..444eecb0d 100644
--- a/cockatrice/src/game/player/player_actions.cpp
+++ b/cockatrice/src/game/player/player_actions.cpp
@@ -5,14 +5,15 @@
#include "../board/card_item.h"
#include "../dialogs/dlg_move_top_cards_until.h"
#include "../dialogs/dlg_roll_dice.h"
+#include "../zones/hand_zone.h"
#include "../zones/logic/view_zone_logic.h"
+#include "../zones/table_zone.h"
#include "card_menu_action_type.h"
#include
#include
#include
#include
-#include
#include
#include
#include
@@ -217,7 +218,7 @@ void PlayerActions::actAlwaysLookAtTopCard()
void PlayerActions::actOpenDeckInDeckEditor()
{
- emit player->openDeckEditor(player->getDeck());
+ emit player->openDeckEditor({.deckList = player->getDeck()});
}
void PlayerActions::actViewGraveyard()
diff --git a/cockatrice/src/game/player/player_actions.h b/cockatrice/src/game/player/player_actions.h
index 9c775691c..e0f86e4fc 100644
--- a/cockatrice/src/game/player/player_actions.h
+++ b/cockatrice/src/game/player/player_actions.h
@@ -7,6 +7,7 @@
#ifndef COCKATRICE_PLAYER_ACTIONS_H
#define COCKATRICE_PLAYER_ACTIONS_H
+#include "../dialogs/dlg_create_token.h"
#include "event_processing_options.h"
#include "player.h"
diff --git a/cockatrice/src/game/player/player_event_handler.cpp b/cockatrice/src/game/player/player_event_handler.cpp
index 972229489..331605918 100644
--- a/cockatrice/src/game/player/player_event_handler.cpp
+++ b/cockatrice/src/game/player/player_event_handler.cpp
@@ -6,6 +6,7 @@
#include "../board/card_list.h"
#include "../zones/view_zone.h"
#include "player.h"
+#include "player_actions.h"
#include
#include
@@ -77,14 +78,7 @@ void PlayerEventHandler::eventShuffle(const Event_Shuffle &event)
void PlayerEventHandler::eventRollDie(const Event_RollDie &event)
{
if (!event.values().empty()) {
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QList rolls(event.values().begin(), event.values().end());
-#else
- QList rolls;
- for (const auto &value : event.values()) {
- rolls.append(value);
- }
-#endif
std::sort(rolls.begin(), rolls.end());
emit logRollDie(player, static_cast(event.sides()), rolls);
} else if (event.value()) {
diff --git a/cockatrice/src/game/player/player_graphics_item.cpp b/cockatrice/src/game/player/player_graphics_item.cpp
index 27fbc82c8..30648c926 100644
--- a/cockatrice/src/game/player/player_graphics_item.cpp
+++ b/cockatrice/src/game/player/player_graphics_item.cpp
@@ -1,7 +1,12 @@
#include "player_graphics_item.h"
#include "../../interface/widgets/tabs/tab_game.h"
+#include "../board/abstract_card_item.h"
#include "../hand_counter.h"
+#include "../zones/hand_zone.h"
+#include "../zones/pile_zone.h"
+#include "../zones/stack_zone.h"
+#include "../zones/table_zone.h"
PlayerGraphicsItem::PlayerGraphicsItem(Player *_player) : player(_player)
{
diff --git a/cockatrice/src/game/player/player_info.h b/cockatrice/src/game/player/player_info.h
index d60c245e2..2e9b49d6d 100644
--- a/cockatrice/src/game/player/player_info.h
+++ b/cockatrice/src/game/player/player_info.h
@@ -7,11 +7,6 @@
#ifndef COCKATRICE_PLAYER_INFO_H
#define COCKATRICE_PLAYER_INFO_H
-#include "../../interface/deck_loader/deck_loader.h"
-#include "../zones/hand_zone.h"
-#include "../zones/pile_zone.h"
-#include "../zones/stack_zone.h"
-#include "../zones/table_zone.h"
#include "player_target.h"
#include
diff --git a/cockatrice/src/game/player/player_list_widget.cpp b/cockatrice/src/game/player/player_list_widget.cpp
index 7cf7c34a6..9506e0729 100644
--- a/cockatrice/src/game/player/player_list_widget.cpp
+++ b/cockatrice/src/game/player/player_list_widget.cpp
@@ -4,15 +4,11 @@
#include "../../interface/widgets/server/user/user_context_menu.h"
#include "../../interface/widgets/server/user/user_list_manager.h"
#include "../../interface/widgets/server/user/user_list_widget.h"
-#include "../../interface/widgets/tabs/tab_account.h"
#include "../../interface/widgets/tabs/tab_game.h"
#include "../../interface/widgets/tabs/tab_supervisor.h"
-#include
#include
-#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/player/player_target.h b/cockatrice/src/game/player/player_target.h
index aaa0f0610..b60464e12 100644
--- a/cockatrice/src/game/player/player_target.h
+++ b/cockatrice/src/game/player/player_target.h
@@ -11,7 +11,6 @@
#include "../board/abstract_counter.h"
#include "../board/arrow_target.h"
-#include
#include
class Player;
diff --git a/cockatrice/src/game/zones/hand_zone.cpp b/cockatrice/src/game/zones/hand_zone.cpp
index 860881f38..cc3b44910 100644
--- a/cockatrice/src/game/zones/hand_zone.cpp
+++ b/cockatrice/src/game/zones/hand_zone.cpp
@@ -5,6 +5,7 @@
#include "../board/card_drag_item.h"
#include "../board/card_item.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include
#include
diff --git a/cockatrice/src/game/zones/logic/card_zone_logic.cpp b/cockatrice/src/game/zones/logic/card_zone_logic.cpp
index a5dc64b50..bd32eab3e 100644
--- a/cockatrice/src/game/zones/logic/card_zone_logic.cpp
+++ b/cockatrice/src/game/zones/logic/card_zone_logic.cpp
@@ -2,7 +2,7 @@
#include "../../board/card_item.h"
#include "../../player/player.h"
-#include "../pile_zone.h"
+#include "../../player/player_actions.h"
#include "../view_zone.h"
#include "view_zone_logic.h"
@@ -10,7 +10,6 @@
#include
#include
#include
-#include
/**
* @param _player the player that the zone belongs to
diff --git a/cockatrice/src/game/zones/logic/card_zone_logic.h b/cockatrice/src/game/zones/logic/card_zone_logic.h
index 4d02b7dd1..1aa46effd 100644
--- a/cockatrice/src/game/zones/logic/card_zone_logic.h
+++ b/cockatrice/src/game/zones/logic/card_zone_logic.h
@@ -52,7 +52,7 @@ public:
void rawInsertCard(CardItem *card, int index)
{
cards.insert(index, card);
- };
+ }
[[nodiscard]] const CardList &getCards() const
{
diff --git a/cockatrice/src/game/zones/pile_zone.cpp b/cockatrice/src/game/zones/pile_zone.cpp
index cafb29038..2d1390826 100644
--- a/cockatrice/src/game/zones/pile_zone.cpp
+++ b/cockatrice/src/game/zones/pile_zone.cpp
@@ -3,6 +3,7 @@
#include "../board/card_drag_item.h"
#include "../board/card_item.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "logic/pile_zone_logic.h"
#include "view_zone.h"
diff --git a/cockatrice/src/game/zones/stack_zone.cpp b/cockatrice/src/game/zones/stack_zone.cpp
index 0c0501705..820008b27 100644
--- a/cockatrice/src/game/zones/stack_zone.cpp
+++ b/cockatrice/src/game/zones/stack_zone.cpp
@@ -6,10 +6,10 @@
#include "../board/card_drag_item.h"
#include "../board/card_item.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "logic/stack_zone_logic.h"
#include
-#include
#include
StackZone::StackZone(StackZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent)
diff --git a/cockatrice/src/game/zones/table_zone.cpp b/cockatrice/src/game/zones/table_zone.cpp
index 55aaeaa39..c76514350 100644
--- a/cockatrice/src/game/zones/table_zone.cpp
+++ b/cockatrice/src/game/zones/table_zone.cpp
@@ -6,11 +6,11 @@
#include "../board/card_drag_item.h"
#include "../board/card_item.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "logic/table_zone_logic.h"
#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/zones/view_zone.cpp b/cockatrice/src/game/zones/view_zone.cpp
index d5eea9dfe..4ae25989e 100644
--- a/cockatrice/src/game/zones/view_zone.cpp
+++ b/cockatrice/src/game/zones/view_zone.cpp
@@ -3,6 +3,7 @@
#include "../board/card_drag_item.h"
#include "../board/card_item.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "logic/view_zone_logic.h"
#include
@@ -10,7 +11,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/game/zones/view_zone_widget.cpp b/cockatrice/src/game/zones/view_zone_widget.cpp
index e2f242883..91abb4663 100644
--- a/cockatrice/src/game/zones/view_zone_widget.cpp
+++ b/cockatrice/src/game/zones/view_zone_widget.cpp
@@ -6,6 +6,7 @@
#include "../board/card_item.h"
#include "../game_scene.h"
#include "../player/player.h"
+#include "../player/player_actions.h"
#include "view_zone.h"
#include
@@ -16,7 +17,6 @@
#include
#include
#include
-#include
#include
/**
diff --git a/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp b/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp
index 8ced8d5bc..05f4a41ab 100644
--- a/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp
+++ b/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp
@@ -17,12 +17,7 @@ void AbstractGraphicsItem::paintNumberEllipse(int number,
font.setWeight(QFont::Bold);
QFontMetrics fm(font);
- double w = 1.3 *
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
- fm.horizontalAdvance(numStr);
-#else
- fm.width(numStr);
-#endif
+ double w = 1.3 * fm.horizontalAdvance(numStr);
double h = fm.height() * 1.3;
if (w < h)
w = h;
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp
index 296355940..06a0476c9 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp
@@ -9,7 +9,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader.h
index 29bdf26c8..4000fd99a 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader.h
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader.h
@@ -5,7 +5,6 @@
#include "card_picture_loader_worker.h"
#include
-#include
inline Q_LOGGING_CATEGORY(CardPictureLoaderLog, "card_picture_loader");
inline Q_LOGGING_CATEGORY(CardPictureLoaderCardBackCacheFailLog, "card_picture_loader.card_back_cache_fail");
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h
index 84f16cc38..44163d1db 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h
@@ -1,8 +1,6 @@
#ifndef PICTURE_LOADER_LOCAL_H
#define PICTURE_LOADER_LOCAL_H
-#include
-#include
#include
#include
@@ -42,7 +40,7 @@ public:
*
* Uses a set of name variants and folder paths to attempt to locate the correct image.
*/
- QImage tryLoad(const ExactCard &toLoad) const;
+ [[nodiscard]] QImage tryLoad(const ExactCard &toLoad) const;
private:
QString picsPath; ///< Path to standard card image folder
@@ -72,10 +70,10 @@ private:
* Uses several filename patterns to match card images, in order from
* most-specific to least-specific.
*/
- QImage tryLoadCardImageFromDisk(const QString &setName,
- const QString &correctedCardName,
- const QString &collectorNumber,
- const QString &providerId) const;
+ [[nodiscard]] QImage tryLoadCardImageFromDisk(const QString &setName,
+ const QString &correctedCardName,
+ const QString &collectorNumber,
+ const QString &providerId) const;
private slots:
/**
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h
index 2e3233c2d..c9a272b68 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h
@@ -1,11 +1,11 @@
#ifndef PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H
#define PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H
-#include "card_picture_loader_worker_work.h"
-
#include
#include
+#include
#include
+#include
/**
* @class CardPictureLoaderRequestStatusDisplayWidget
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h
index cb469269c..7f1f509db 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h
@@ -6,7 +6,6 @@
#include
#include
-#include
#include
/**
diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp
index a2da3c953..128b03c95 100644
--- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp
+++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp
@@ -9,8 +9,8 @@
#include
#include
#include
-#include
#include
+#include