From 55ace147bc3da3da1535b8792c83451bfc0911e6 Mon Sep 17 00:00:00 2001 From: Sebastian Dine Date: Sat, 9 May 2026 11:05:47 +0200 Subject: [PATCH] major: initial release * initial development * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * pipeline * ci/cd * ci/cd * ci/cd * ci/cd * ci/cd * ci/cd * ci/cd * pokemon * pokemon * pokemon * pokemon * pokemon * pokemon * improvements * improvements * ci/cd * ci/cd * improvements * improvements * improvements * improvements * improvements * improvements * improvements * improvements * improvements --------- Co-authored-by: sdine --- .github/workflows/AGENTS.md | 59 ++ .github/workflows/feature-ci.yml | 18 + .github/workflows/feature-linux.yml | 87 +++ .github/workflows/feature-windows.yml | 122 ++++ .github/workflows/master-ci.yml | 71 ++ .github/workflows/master-pr-title-guard.yml | 33 + .github/workflows/master-windows.yml | 128 ++++ AGENTS.md | 104 +++ CMakeLists.txt | 58 ++ LICENSE | 21 + README.md | 68 ++ app/AGENTS.md | 35 + app/CMakeLists.txt | 20 + app/ccm.rc | 1 + app/main.cpp | 145 ++++ app/resources/ccm.ico | Bin 0 -> 67646 bytes cmake/CompilerWarnings.cmake | 33 + cmake/Dependencies.cmake | 145 ++++ cmake/Toolchain.cmake | 49 ++ core/AGENTS.md | 59 ++ core/CMakeLists.txt | 49 ++ core/include/ccm/domain/Configuration.hpp | 26 + core/include/ccm/domain/Enums.hpp | 77 ++ core/include/ccm/domain/MagicCard.hpp | 36 + core/include/ccm/domain/PokemonCard.hpp | 38 + core/include/ccm/domain/Set.hpp | 24 + core/include/ccm/games/IGameModule.hpp | 47 ++ .../games/magic/MagicCardPreviewSource.hpp | 42 ++ .../ccm/games/magic/MagicGameModule.hpp | 29 + .../ccm/games/magic/MagicSetSource.hpp | 28 + .../pokemon/PokemonCardPreviewSource.hpp | 42 ++ .../ccm/games/pokemon/PokemonGameModule.hpp | 28 + .../ccm/games/pokemon/PokemonSetSource.hpp | 30 + core/include/ccm/infra/CprHttpClient.hpp | 23 + .../ccm/infra/JsonCollectionRepository.hpp | 85 +++ core/include/ccm/infra/JsonSetRepository.hpp | 32 + core/include/ccm/infra/LocalImageStore.hpp | 37 + core/include/ccm/infra/StdFileSystem.hpp | 25 + core/include/ccm/ports/ICardPreviewSource.hpp | 30 + .../ccm/ports/ICollectionRepository.hpp | 25 + core/include/ccm/ports/IFileSystem.hpp | 33 + core/include/ccm/ports/IHttpClient.hpp | 26 + core/include/ccm/ports/IImageStore.hpp | 34 + core/include/ccm/ports/ISetRepository.hpp | 22 + core/include/ccm/services/CardFilter.hpp | 41 ++ .../ccm/services/CardPreviewService.hpp | 55 ++ core/include/ccm/services/CardSorter.hpp | 62 ++ .../ccm/services/CollectionService.hpp | 126 ++++ core/include/ccm/services/ConfigService.hpp | 41 ++ core/include/ccm/services/ImageService.hpp | 70 ++ core/include/ccm/services/SetService.hpp | 38 + core/include/ccm/util/FsNames.hpp | 24 + core/include/ccm/util/Result.hpp | 150 ++++ core/src/domain/Configuration.cpp | 19 + core/src/domain/Enums.cpp | 139 ++++ core/src/domain/MagicCard.cpp | 35 + core/src/domain/PokemonCard.cpp | 39 + core/src/domain/Set.cpp | 19 + .../games/magic/MagicCardPreviewSource.cpp | 100 +++ core/src/games/magic/MagicGameModule.cpp | 8 + core/src/games/magic/MagicSetSource.cpp | 48 ++ .../pokemon/PokemonCardPreviewSource.cpp | 110 +++ core/src/games/pokemon/PokemonGameModule.cpp | 8 + core/src/games/pokemon/PokemonSetSource.cpp | 45 ++ core/src/infra/CprHttpClient.cpp | 30 + core/src/infra/JsonSetRepository.cpp | 41 ++ core/src/infra/LocalImageStore.cpp | 43 ++ core/src/infra/StdFileSystem.cpp | 88 +++ core/src/services/CardFilter.cpp | 66 ++ core/src/services/CardPreviewService.cpp | 34 + core/src/services/CardSorter.cpp | 173 +++++ core/src/services/ConfigService.cpp | 47 ++ core/src/services/ImageService.cpp | 120 +++ core/src/services/SetService.cpp | 27 + core/src/util/FsNames.cpp | 85 +++ docs/AGENTS.md | 39 + docs/README.md | 26 + docs/adding-a-new-game.md | 473 ++++++++++++ docs/assets-and-info-apis.md | 52 ++ docs/assets/images/demo-mtg.png | Bin 0 -> 582222 bytes docs/assets/images/demo-pkm.png | Bin 0 -> 663357 bytes docs/ci-cd-guide.md | 90 +++ docs/dow-doc-build-locally.md | 129 ++++ docs/intro-to-new-developers.md | 108 +++ docs/testing-and-test-code-of-conduct.md | 116 +++ docs/versioning.md | 89 +++ docs/windows-installer.md | 128 ++++ scripts/AGENTS.md | 28 + scripts/compute_feature_version.sh | 19 + scripts/compute_master_semver.sh | 54 ++ scripts/installer.nsi | 76 ++ scripts/installer_icon.ico | Bin 0 -> 67646 bytes tests/AGENTS.md | 58 ++ tests/CMakeLists.txt | 37 + tests/card_filter_tests.cpp | 160 ++++ tests/card_preview_service_tests.cpp | 152 ++++ tests/card_sorter_tests.cpp | 248 +++++++ tests/collection_service_tests.cpp | 120 +++ tests/config_service_tests.cpp | 78 ++ tests/domain_json_tests.cpp | 123 ++++ tests/fakes/InMemoryFileSystem.cpp | 85 +++ tests/fakes/InMemoryFileSystem.hpp | 40 + tests/fs_names_tests.cpp | 53 ++ tests/image_service_tests.cpp | 131 ++++ tests/json_collection_repository_tests.cpp | 88 +++ tests/json_set_repository_tests.cpp | 52 ++ tests/magic_card_preview_source_tests.cpp | 112 +++ tests/magic_set_source_tests.cpp | 83 +++ tests/main.cpp | 2 + tests/pokemon_card_preview_source_tests.cpp | 130 ++++ tests/pokemon_set_source_tests.cpp | 94 +++ tests/set_service_tests.cpp | 119 +++ ui_wx/AGENTS.md | 93 +++ ui_wx/CMakeLists.txt | 55 ++ ui_wx/include/ccm/ui/AppContext.hpp | 34 + ui_wx/include/ccm/ui/AppVersion.hpp.in | 7 + ui_wx/include/ccm/ui/BaseCardEditDialog.hpp | 524 ++++++++++++++ ui_wx/include/ccm/ui/BaseCardListPanel.hpp | 681 +++++++++++++++++ .../include/ccm/ui/BaseSelectedCardPanel.hpp | 500 +++++++++++++ ui_wx/include/ccm/ui/IGameView.hpp | 63 ++ ui_wx/include/ccm/ui/IconListCtrl.hpp | 92 +++ ui_wx/include/ccm/ui/ImageViewerDialog.hpp | 42 ++ ui_wx/include/ccm/ui/MagicCardEditDialog.hpp | 33 + ui_wx/include/ccm/ui/MagicCardListPanel.hpp | 34 + ui_wx/include/ccm/ui/MagicGameView.hpp | 67 ++ .../include/ccm/ui/MagicSelectedCardPanel.hpp | 28 + ui_wx/include/ccm/ui/MainFrame.hpp | 86 +++ .../include/ccm/ui/PokemonCardEditDialog.hpp | 38 + ui_wx/include/ccm/ui/PokemonCardListPanel.hpp | 26 + ui_wx/include/ccm/ui/PokemonGameView.hpp | 67 ++ .../ccm/ui/PokemonSelectedCardPanel.hpp | 30 + ui_wx/include/ccm/ui/SettingsDialog.hpp | 28 + ui_wx/include/ccm/ui/SvgIcons.hpp | 51 ++ ui_wx/include/ccm/ui/Theme.hpp | 28 + ui_wx/src/BaseEvents.cpp | 14 + ui_wx/src/IconListCtrl.cpp | 243 +++++++ ui_wx/src/ImageViewerDialog.cpp | 163 +++++ ui_wx/src/MagicCardEditDialog.cpp | 39 + ui_wx/src/MagicCardListPanel.cpp | 70 ++ ui_wx/src/MagicGameView.cpp | 201 +++++ ui_wx/src/MagicSelectedCardPanel.cpp | 77 ++ ui_wx/src/MainFrame.cpp | 446 ++++++++++++ ui_wx/src/PokemonCardEditDialog.cpp | 50 ++ ui_wx/src/PokemonCardListPanel.cpp | 75 ++ ui_wx/src/PokemonGameView.cpp | 198 +++++ ui_wx/src/PokemonSelectedCardPanel.cpp | 82 +++ ui_wx/src/SettingsDialog.cpp | 97 +++ ui_wx/src/SvgIcons.cpp | 118 +++ ui_wx/src/Theme.cpp | 684 ++++++++++++++++++ 149 files changed, 12611 insertions(+) create mode 100644 .github/workflows/AGENTS.md create mode 100644 .github/workflows/feature-ci.yml create mode 100644 .github/workflows/feature-linux.yml create mode 100644 .github/workflows/feature-windows.yml create mode 100644 .github/workflows/master-ci.yml create mode 100644 .github/workflows/master-pr-title-guard.yml create mode 100644 .github/workflows/master-windows.yml create mode 100644 AGENTS.md create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/AGENTS.md create mode 100644 app/CMakeLists.txt create mode 100644 app/ccm.rc create mode 100644 app/main.cpp create mode 100644 app/resources/ccm.ico create mode 100644 cmake/CompilerWarnings.cmake create mode 100644 cmake/Dependencies.cmake create mode 100644 cmake/Toolchain.cmake create mode 100644 core/AGENTS.md create mode 100644 core/CMakeLists.txt create mode 100644 core/include/ccm/domain/Configuration.hpp create mode 100644 core/include/ccm/domain/Enums.hpp create mode 100644 core/include/ccm/domain/MagicCard.hpp create mode 100644 core/include/ccm/domain/PokemonCard.hpp create mode 100644 core/include/ccm/domain/Set.hpp create mode 100644 core/include/ccm/games/IGameModule.hpp create mode 100644 core/include/ccm/games/magic/MagicCardPreviewSource.hpp create mode 100644 core/include/ccm/games/magic/MagicGameModule.hpp create mode 100644 core/include/ccm/games/magic/MagicSetSource.hpp create mode 100644 core/include/ccm/games/pokemon/PokemonCardPreviewSource.hpp create mode 100644 core/include/ccm/games/pokemon/PokemonGameModule.hpp create mode 100644 core/include/ccm/games/pokemon/PokemonSetSource.hpp create mode 100644 core/include/ccm/infra/CprHttpClient.hpp create mode 100644 core/include/ccm/infra/JsonCollectionRepository.hpp create mode 100644 core/include/ccm/infra/JsonSetRepository.hpp create mode 100644 core/include/ccm/infra/LocalImageStore.hpp create mode 100644 core/include/ccm/infra/StdFileSystem.hpp create mode 100644 core/include/ccm/ports/ICardPreviewSource.hpp create mode 100644 core/include/ccm/ports/ICollectionRepository.hpp create mode 100644 core/include/ccm/ports/IFileSystem.hpp create mode 100644 core/include/ccm/ports/IHttpClient.hpp create mode 100644 core/include/ccm/ports/IImageStore.hpp create mode 100644 core/include/ccm/ports/ISetRepository.hpp create mode 100644 core/include/ccm/services/CardFilter.hpp create mode 100644 core/include/ccm/services/CardPreviewService.hpp create mode 100644 core/include/ccm/services/CardSorter.hpp create mode 100644 core/include/ccm/services/CollectionService.hpp create mode 100644 core/include/ccm/services/ConfigService.hpp create mode 100644 core/include/ccm/services/ImageService.hpp create mode 100644 core/include/ccm/services/SetService.hpp create mode 100644 core/include/ccm/util/FsNames.hpp create mode 100644 core/include/ccm/util/Result.hpp create mode 100644 core/src/domain/Configuration.cpp create mode 100644 core/src/domain/Enums.cpp create mode 100644 core/src/domain/MagicCard.cpp create mode 100644 core/src/domain/PokemonCard.cpp create mode 100644 core/src/domain/Set.cpp create mode 100644 core/src/games/magic/MagicCardPreviewSource.cpp create mode 100644 core/src/games/magic/MagicGameModule.cpp create mode 100644 core/src/games/magic/MagicSetSource.cpp create mode 100644 core/src/games/pokemon/PokemonCardPreviewSource.cpp create mode 100644 core/src/games/pokemon/PokemonGameModule.cpp create mode 100644 core/src/games/pokemon/PokemonSetSource.cpp create mode 100644 core/src/infra/CprHttpClient.cpp create mode 100644 core/src/infra/JsonSetRepository.cpp create mode 100644 core/src/infra/LocalImageStore.cpp create mode 100644 core/src/infra/StdFileSystem.cpp create mode 100644 core/src/services/CardFilter.cpp create mode 100644 core/src/services/CardPreviewService.cpp create mode 100644 core/src/services/CardSorter.cpp create mode 100644 core/src/services/ConfigService.cpp create mode 100644 core/src/services/ImageService.cpp create mode 100644 core/src/services/SetService.cpp create mode 100644 core/src/util/FsNames.cpp create mode 100644 docs/AGENTS.md create mode 100644 docs/README.md create mode 100644 docs/adding-a-new-game.md create mode 100644 docs/assets-and-info-apis.md create mode 100644 docs/assets/images/demo-mtg.png create mode 100644 docs/assets/images/demo-pkm.png create mode 100644 docs/ci-cd-guide.md create mode 100644 docs/dow-doc-build-locally.md create mode 100644 docs/intro-to-new-developers.md create mode 100644 docs/testing-and-test-code-of-conduct.md create mode 100644 docs/versioning.md create mode 100644 docs/windows-installer.md create mode 100644 scripts/AGENTS.md create mode 100644 scripts/compute_feature_version.sh create mode 100644 scripts/compute_master_semver.sh create mode 100644 scripts/installer.nsi create mode 100644 scripts/installer_icon.ico create mode 100644 tests/AGENTS.md create mode 100644 tests/CMakeLists.txt create mode 100644 tests/card_filter_tests.cpp create mode 100644 tests/card_preview_service_tests.cpp create mode 100644 tests/card_sorter_tests.cpp create mode 100644 tests/collection_service_tests.cpp create mode 100644 tests/config_service_tests.cpp create mode 100644 tests/domain_json_tests.cpp create mode 100644 tests/fakes/InMemoryFileSystem.cpp create mode 100644 tests/fakes/InMemoryFileSystem.hpp create mode 100644 tests/fs_names_tests.cpp create mode 100644 tests/image_service_tests.cpp create mode 100644 tests/json_collection_repository_tests.cpp create mode 100644 tests/json_set_repository_tests.cpp create mode 100644 tests/magic_card_preview_source_tests.cpp create mode 100644 tests/magic_set_source_tests.cpp create mode 100644 tests/main.cpp create mode 100644 tests/pokemon_card_preview_source_tests.cpp create mode 100644 tests/pokemon_set_source_tests.cpp create mode 100644 tests/set_service_tests.cpp create mode 100644 ui_wx/AGENTS.md create mode 100644 ui_wx/CMakeLists.txt create mode 100644 ui_wx/include/ccm/ui/AppContext.hpp create mode 100644 ui_wx/include/ccm/ui/AppVersion.hpp.in create mode 100644 ui_wx/include/ccm/ui/BaseCardEditDialog.hpp create mode 100644 ui_wx/include/ccm/ui/BaseCardListPanel.hpp create mode 100644 ui_wx/include/ccm/ui/BaseSelectedCardPanel.hpp create mode 100644 ui_wx/include/ccm/ui/IGameView.hpp create mode 100644 ui_wx/include/ccm/ui/IconListCtrl.hpp create mode 100644 ui_wx/include/ccm/ui/ImageViewerDialog.hpp create mode 100644 ui_wx/include/ccm/ui/MagicCardEditDialog.hpp create mode 100644 ui_wx/include/ccm/ui/MagicCardListPanel.hpp create mode 100644 ui_wx/include/ccm/ui/MagicGameView.hpp create mode 100644 ui_wx/include/ccm/ui/MagicSelectedCardPanel.hpp create mode 100644 ui_wx/include/ccm/ui/MainFrame.hpp create mode 100644 ui_wx/include/ccm/ui/PokemonCardEditDialog.hpp create mode 100644 ui_wx/include/ccm/ui/PokemonCardListPanel.hpp create mode 100644 ui_wx/include/ccm/ui/PokemonGameView.hpp create mode 100644 ui_wx/include/ccm/ui/PokemonSelectedCardPanel.hpp create mode 100644 ui_wx/include/ccm/ui/SettingsDialog.hpp create mode 100644 ui_wx/include/ccm/ui/SvgIcons.hpp create mode 100644 ui_wx/include/ccm/ui/Theme.hpp create mode 100644 ui_wx/src/BaseEvents.cpp create mode 100644 ui_wx/src/IconListCtrl.cpp create mode 100644 ui_wx/src/ImageViewerDialog.cpp create mode 100644 ui_wx/src/MagicCardEditDialog.cpp create mode 100644 ui_wx/src/MagicCardListPanel.cpp create mode 100644 ui_wx/src/MagicGameView.cpp create mode 100644 ui_wx/src/MagicSelectedCardPanel.cpp create mode 100644 ui_wx/src/MainFrame.cpp create mode 100644 ui_wx/src/PokemonCardEditDialog.cpp create mode 100644 ui_wx/src/PokemonCardListPanel.cpp create mode 100644 ui_wx/src/PokemonGameView.cpp create mode 100644 ui_wx/src/PokemonSelectedCardPanel.cpp create mode 100644 ui_wx/src/SettingsDialog.cpp create mode 100644 ui_wx/src/SvgIcons.cpp create mode 100644 ui_wx/src/Theme.cpp diff --git a/.github/workflows/AGENTS.md b/.github/workflows/AGENTS.md new file mode 100644 index 0000000..2375bbd --- /dev/null +++ b/.github/workflows/AGENTS.md @@ -0,0 +1,59 @@ +# AGENTS.md + +GitHub Actions workflows for CI, release automation, and policy checks. + +## Scope + +- This file governs edits in `.github/workflows/*.yml`. +- Keep one top-level triggered workflow per CI intent: + - `feature-ci.yml` for non-`master` push CI + - `master-ci.yml` for merged-PR-to-`master` release CI +- Keep OS/platform splits in reusable workflows invoked via `workflow_call`. + +## Current workflow map + +- `feature-ci.yml` -> orchestrator for feature branch CI. +- `feature-linux.yml` -> reusable Linux build/test/package workflow. +- `feature-windows.yml` -> reusable Windows build/test/package workflow. +- `master-pr-title-guard.yml` -> validates semantic-prefix policy for PRs targeting `master`. +- `master-ci.yml` -> orchestrator for merged PRs into `master`. +- `master-windows.yml` -> reusable Windows build/test/package workflow for master release flow. + +## CI invariants (do not break) + +1. Keep workflow intent stable: + - feature workflows produce branch+sha artifacts + - master workflows produce semver-tagged release artifacts +2. Do not duplicate top-level triggers for the same intent (avoid split runs in Actions UI). +3. Preserve artifact naming conventions unless docs are updated in the same change: + - `ccm3-linux-.zip` + - `ccm3-windows-.zip` + - `ccm3-windows-installer-` (feature) and `.exe` (master release asset) +4. Preserve embedded app version wiring via `-DCCM_APP_VERSION=...` in both feature and master build flows. +5. Keep `master` release flow gated to merged PRs only. +6. Keep PR title prefix policy aligned with `scripts/compute_master_semver.sh`. + +## Editing rules + +- Prefer minimal, surgical edits; avoid large workflow rewrites unless requested. +- Reusable workflows should declare explicit `workflow_call` inputs for required context (e.g., version, merge SHA). +- Keep `permissions` least-privilege: + - reusable build workflows: `contents: read` + - release/tag orchestrator: `contents: write` +- Keep shells consistent with runner setup: + - Linux steps use standard bash-compatible shell. + - Windows MSYS2 jobs keep `shell: msys2 {0}` and run `msys2/setup-msys2` before MSYS2 commands. + +## Required follow-ups + +- After changing workflow topology, update `docs/ci-cd-guide.md`. +- If artifact names or release behavior change, update `docs/ci-cd-guide.md` and `docs/versioning.md` if needed. +- If semver prefix policy changes, update both `master-pr-title-guard.yml` and docs. +- If adding/removing workflow files, update this file's "Current workflow map". + +## Anti-patterns + +- Do not add a second top-level feature or master trigger file. +- Do not move release creation into a reusable workflow that lacks `contents: write`. +- Do not introduce MSVC-specific build commands; project CI targets Clang/MinGW toolchains. +- Do not silently change artifact names; downstream release/download steps depend on exact names. diff --git a/.github/workflows/feature-ci.yml b/.github/workflows/feature-ci.yml new file mode 100644 index 0000000..3f265bc --- /dev/null +++ b/.github/workflows/feature-ci.yml @@ -0,0 +1,18 @@ +name: Feature CI + +on: + push: + branches-ignore: + - master + +permissions: + contents: read + +jobs: + linux: + name: Linux build + tests + uses: ./.github/workflows/feature-linux.yml + + windows: + name: Windows build + tests + uses: ./.github/workflows/feature-windows.yml diff --git a/.github/workflows/feature-linux.yml b/.github/workflows/feature-linux.yml new file mode 100644 index 0000000..91de283 --- /dev/null +++ b/.github/workflows/feature-linux.yml @@ -0,0 +1,87 @@ +name: Feature Linux Build, Test, and Package + +on: + workflow_call: + +permissions: + contents: read + +jobs: + build-linux: + name: Linux build + tests + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Compute feature version + run: | + VERSION="$(bash scripts/compute_feature_version.sh "${GITHUB_REF_NAME}" "${GITHUB_SHA}")" + echo "VERSION=${VERSION}" >> "$GITHUB_ENV" + + - name: Install build tools + run: > + sudo apt-get update && + sudo apt-get install -y + ninja-build + ccache + pkg-config + libgtk-3-dev + libwxgtk3.2-dev + + - name: Restore Linux compiler cache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: ccache-linux-${{ github.ref_name }}-v1 + restore-keys: | + ccache-linux-${{ github.ref_name }}- + ccache-linux- + + - name: Configure + run: > + cmake -S . -B build -G Ninja + -DCCM_BUILD_TESTS=ON + -DCCM_USE_SYSTEM_WX=ON + -DCCM_APP_VERSION="${VERSION}" + -DCMAKE_C_COMPILER_LAUNCHER=ccache + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + + - name: Build + run: cmake --build build --parallel 3 + + - name: Run unit tests + run: ctest --test-dir build --output-on-failure + + - name: Remove test executable from bundle + run: rm -f build/bin/ccm_core_tests + + - name: Verify runtime dependencies are resolved + run: | + for f in build/bin/*; do + [ -f "$f" ] || continue + if file "$f" | grep -q "ELF"; then + echo "Checking $f" + ldd "$f" + if ldd "$f" | grep -q "not found"; then + echo "Missing runtime dependency detected in $f" + exit 1 + fi + fi + done + + - name: Stage Linux artifact folder + run: | + rm -rf dist/ccm3-linux + mkdir -p dist/ccm3-linux + cp -a build/bin/. dist/ccm3-linux/ + + - name: Upload Linux artifact + uses: actions/upload-artifact@v4 + with: + name: ccm3-linux-${{ env.VERSION }}.zip + path: dist/ccm3-linux + if-no-files-found: error diff --git a/.github/workflows/feature-windows.yml b/.github/workflows/feature-windows.yml new file mode 100644 index 0000000..38d1a7d --- /dev/null +++ b/.github/workflows/feature-windows.yml @@ -0,0 +1,122 @@ +name: Feature Windows Build, Test, and Package + +on: + workflow_call: + +permissions: + contents: read + +jobs: + build-windows: + name: Windows build + tests + runs-on: windows-latest + env: + CCACHE_DIR_WIN: ${{ github.workspace }}\.ccache + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup MSYS2 (MinGW-w64 UCRT64) + uses: msys2/setup-msys2@v2 + with: + msystem: UCRT64 + update: true + cache: true + install: >- + mingw-w64-ucrt-x86_64-gcc + mingw-w64-ucrt-x86_64-cmake + mingw-w64-ucrt-x86_64-ninja + mingw-w64-ucrt-x86_64-make + mingw-w64-ucrt-x86_64-ccache + mingw-w64-ucrt-x86_64-wxwidgets3.2-msw + mingw-w64-ucrt-x86_64-nsis + + - name: Compute feature version + run: | + VERSION="$(bash scripts/compute_feature_version.sh "${GITHUB_REF_NAME}" "${GITHUB_SHA}")" + echo "VERSION=${VERSION}" >> "$GITHUB_ENV" + + - name: Restore Windows compiler cache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR_WIN }} + key: ccache-windows-${{ github.ref_name }}-v2 + restore-keys: | + ccache-windows-${{ github.ref_name }}- + ccache-windows- + + - name: Configure MSYS2 ccache directory + run: | + CCACHE_DIR_POSIX="$(cygpath -u "$CCACHE_DIR_WIN")" + echo "CCACHE_DIR=${CCACHE_DIR_POSIX}" >> "$GITHUB_ENV" + mkdir -p "$CCACHE_DIR_POSIX" + + - name: Configure + run: > + cmake -S . -B build -G Ninja + -DCMAKE_BUILD_TYPE=Release + -DCCM_BUILD_TESTS=ON + -DCCM_USE_SYSTEM_WX=ON + -DCCM_APP_VERSION="${VERSION}" + -DCMAKE_C_COMPILER_LAUNCHER=ccache + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + + - name: Build + run: cmake --build build --parallel 4 + + - name: Run unit tests + run: ctest --test-dir build --output-on-failure + + - name: Collect runtime DLL dependencies + run: | + rm -f deps.txt + for f in build/bin/*.exe build/bin/*.dll; do + [ -e "$f" ] || continue + ldd "$f" | awk '/\/ucrt64\/bin\// { print $3 }' >> deps.txt + done + sort -u deps.txt | while read -r dep; do + [ -f "$dep" ] && cp -n "$dep" build/bin/ + done + + - name: Verify runtime dependencies are resolved + run: | + for f in build/bin/*.exe build/bin/*.dll; do + [ -e "$f" ] || continue + echo "Checking $f" + ldd "$f" + if ldd "$f" | grep -q "not found"; then + echo "Missing runtime dependency detected in $f" + exit 1 + fi + done + + - name: Remove test executable from bundle + run: rm -f build/bin/ccm_core_tests.exe build/bin/ccm_core_tests + + - name: Build Windows installer + run: makensis -DAPP_VERSION="${VERSION}" scripts/installer.nsi + + - name: Stage Windows artifact folder + run: | + rm -rf dist/ccm3-windows + mkdir -p dist/ccm3-windows + cp -a build/bin/. dist/ccm3-windows/ + + - name: Upload Windows artifact + uses: actions/upload-artifact@v4 + with: + name: ccm3-windows-${{ env.VERSION }}.zip + path: dist/ccm3-windows + if-no-files-found: error + + - name: Upload Windows installer artifact + uses: actions/upload-artifact@v4 + with: + name: ccm3-windows-installer-${{ env.VERSION }} + path: ccm3-windows-installer.exe + if-no-files-found: error diff --git a/.github/workflows/master-ci.yml b/.github/workflows/master-ci.yml new file mode 100644 index 0000000..04afe0d --- /dev/null +++ b/.github/workflows/master-ci.yml @@ -0,0 +1,71 @@ +name: Master CI + +on: + pull_request: + branches: + - master + types: + - closed + +permissions: + contents: write + +jobs: + compute-version: + name: Determine semantic version + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + release_tag: ${{ steps.version.outputs.release_tag }} + steps: + - name: Checkout tags + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Resolve semantic version + id: version + run: bash scripts/compute_master_semver.sh "${{ github.event.pull_request.title }}" + + build-windows: + name: Windows build + tests + needs: compute-version + uses: ./.github/workflows/master-windows.yml + with: + version: ${{ needs.compute-version.outputs.version }} + merge_commit_sha: ${{ github.event.pull_request.merge_commit_sha }} + + release-master: + name: Tag and release on master + needs: + - compute-version + - build-windows + runs-on: ubuntu-latest + steps: + - name: Download Windows artifact + uses: actions/download-artifact@v4 + with: + name: ccm3-windows-${{ needs.compute-version.outputs.version }}.zip + path: release/windows + + - name: Download Windows installer artifact + uses: actions/download-artifact@v4 + with: + name: ccm3-windows-installer-${{ needs.compute-version.outputs.version }} + path: release/installer + + - name: Package release assets with semantic version + run: | + mkdir -p release-assets + VERSION="${{ needs.compute-version.outputs.version }}" + zip -r "release-assets/ccm3-windows-${VERSION}.zip" release/windows + cp release/installer/ccm3-windows-installer.exe "release-assets/ccm3-windows-installer-${VERSION}.exe" + + - name: Create tag and GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.compute-version.outputs.release_tag }} + target_commitish: ${{ github.event.pull_request.merge_commit_sha }} + generate_release_notes: true + files: release-assets/* diff --git a/.github/workflows/master-pr-title-guard.yml b/.github/workflows/master-pr-title-guard.yml new file mode 100644 index 0000000..f61d94b --- /dev/null +++ b/.github/workflows/master-pr-title-guard.yml @@ -0,0 +1,33 @@ +name: Master PR Title Guard + +on: + pull_request: + branches: + - master + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + +permissions: + contents: read + +jobs: + validate-title: + name: Require semver prefix in PR title + runs-on: ubuntu-latest + steps: + - name: Validate pull request title prefix + env: + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + title_lower="$(echo "${PR_TITLE}" | tr '[:upper:]' '[:lower:]')" + if [[ "${title_lower}" == major* || "${title_lower}" == minor* || "${title_lower}" == fix* || "${title_lower}" == patch* || "${title_lower}" == path* ]]; then + echo "PR title is valid: ${PR_TITLE}" + exit 0 + fi + echo "Invalid PR title: '${PR_TITLE}'" + echo "Title must start with one of: major, minor, fix, patch, or path." + exit 1 diff --git a/.github/workflows/master-windows.yml b/.github/workflows/master-windows.yml new file mode 100644 index 0000000..cc79cc8 --- /dev/null +++ b/.github/workflows/master-windows.yml @@ -0,0 +1,128 @@ +name: Master Windows Build, Test, and Package + +on: + workflow_call: + inputs: + version: + required: true + type: string + merge_commit_sha: + required: true + type: string + +permissions: + contents: read + +jobs: + build-windows: + name: Windows build + tests + runs-on: windows-latest + env: + CCACHE_DIR_WIN: ${{ github.workspace }}\.ccache + VERSION: ${{ inputs.version }} + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout merge commit + uses: actions/checkout@v4 + with: + ref: ${{ inputs.merge_commit_sha }} + + - name: Setup MSYS2 (MinGW-w64 UCRT64) + uses: msys2/setup-msys2@v2 + with: + msystem: UCRT64 + update: true + cache: true + install: >- + mingw-w64-ucrt-x86_64-gcc + mingw-w64-ucrt-x86_64-cmake + mingw-w64-ucrt-x86_64-ninja + mingw-w64-ucrt-x86_64-make + mingw-w64-ucrt-x86_64-ccache + mingw-w64-ucrt-x86_64-wxwidgets3.2-msw + mingw-w64-ucrt-x86_64-nsis + + - name: Restore Windows compiler cache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR_WIN }} + key: ccache-windows-master-v2 + restore-keys: | + ccache-windows-master- + ccache-windows- + + - name: Configure MSYS2 ccache directory + run: | + CCACHE_DIR_POSIX="$(cygpath -u "$CCACHE_DIR_WIN")" + echo "CCACHE_DIR=${CCACHE_DIR_POSIX}" >> "$GITHUB_ENV" + mkdir -p "$CCACHE_DIR_POSIX" + + - name: Configure + run: > + cmake -S . -B build -G Ninja + -DCMAKE_BUILD_TYPE=Release + -DCCM_BUILD_TESTS=ON + -DCCM_USE_SYSTEM_WX=ON + -DCCM_APP_VERSION="${VERSION}" + -DCMAKE_C_COMPILER_LAUNCHER=ccache + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + + - name: Build + run: cmake --build build --parallel 4 + + - name: Run unit tests + run: ctest --test-dir build --output-on-failure + + - name: Collect runtime DLL dependencies + run: | + rm -f deps.txt + for f in build/bin/*.exe build/bin/*.dll; do + [ -e "$f" ] || continue + ldd "$f" | awk '/\/ucrt64\/bin\// { print $3 }' >> deps.txt + done + sort -u deps.txt | while read -r dep; do + [ -f "$dep" ] && cp -n "$dep" build/bin/ + done + + - name: Verify runtime dependencies are resolved + run: | + for f in build/bin/*.exe build/bin/*.dll; do + [ -e "$f" ] || continue + echo "Checking $f" + ldd "$f" + if ldd "$f" | grep -q "not found"; then + echo "Missing runtime dependency detected in $f" + exit 1 + fi + done + + - name: Remove test executable from bundle + run: rm -f build/bin/ccm_core_tests.exe build/bin/ccm_core_tests + + - name: Build Windows installer + run: makensis -DAPP_VERSION="${VERSION}" scripts/installer.nsi + + - name: Stage Windows artifact folder + run: | + rm -rf dist/ccm3-windows + mkdir -p dist/ccm3-windows + cp -a build/bin/. dist/ccm3-windows/ + + - name: Upload Windows artifact + uses: actions/upload-artifact@v4 + with: + name: ccm3-windows-${{ env.VERSION }}.zip + path: dist/ccm3-windows + if-no-files-found: error + + - name: Upload Windows installer artifact + uses: actions/upload-artifact@v4 + with: + name: ccm3-windows-installer-${{ env.VERSION }} + path: ccm3-windows-installer.exe + if-no-files-found: error + diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..af5c0e5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,104 @@ +# AGENTS.md + +C++ desktop implementation (originally based on a Tauri Rust+TS version) — single wxWidgets binary built with CMake + FetchContent. + +## Project structure + +- `core/` — `ccm_core` static library. UI-agnostic domain, ports, services, infra adapters. **Never** depends on wxWidgets. See `core/AGENTS.md`. +- `ui_wx/` — `ccm_ui_wx` static library. The only place that touches wxWidgets. See `ui_wx/AGENTS.md`. +- `app/` — `ccm` executable (composition root). Wires concrete adapters into services. See `app/AGENTS.md`. +- `tests/` — `ccm_core_tests` doctest binary. Pure-logic tests against in-memory fakes. See `tests/AGENTS.md`. +- `docs/` — long-form developer documentation. Start with `docs/adding-a-new-game.md` for the canonical end-to-end procedure for extending the app with a new TCG. See `docs/AGENTS.md`. +- `.github/workflows/` — GitHub Actions CI/release workflows. See `.github/workflows/AGENTS.md` for orchestrator/reusable workflow rules and CI invariants. +- `cmake/` — `Toolchain.cmake` (Clang first, MinGW-w64 fallback), `Dependencies.cmake` (FetchContent pins), `CompilerWarnings.cmake` (`ccm_warnings` interface target). +- `CMakeLists.txt` — top-level. Defines options `CCM_USE_SYSTEM_WX` (default OFF) and `CCM_BUILD_TESTS` (default ON). + - Build metadata option: `CCM_APP_VERSION` (defaults to `${PROJECT_VERSION} (localbuild)` for local/manual builds, overridden by CI). + +## Architecture rules (do not break) + +1. Dependencies point inward only: `app` -> `ui_wx` -> `core`. `core` depends on no other first-party target. +2. `core` must not include any wx header. CI-equivalent: `rg "wx/" core/` must return zero hits. +3. Cross-boundary types are domain types and `ccm::ui::AppContext`. UI code consumes services via the references in `AppContext` — **never** by including a concrete adapter header. +4. Errors cross port boundaries as `ccm::Result` (see `core/include/ccm/util/Result.hpp`). Do not throw across ports; reserve exceptions for genuinely unrecoverable bugs. +5. JSON layout must stay byte-for-byte stable: aliases `releaseDate`, `setNo`, `firstEdition`, `dataStorage`, `defaultGame`, and the `signed` JSON key (mapped to C++ field `signed_`). If you touch a domain type, update the round-trip test in `tests/domain_json_tests.cpp`. + +## Toolchain + +- **Compilers**: Clang 14+ preferred, MinGW-w64 GCC 11+ fallback on Windows. **Do not** add MSVC support. +- **C++ standard**: C++20 (`CMAKE_CXX_STANDARD 20`, `CXX_EXTENSIONS OFF`). +- **Build system**: CMake 3.22+ with `FetchContent`. Pin every dep by tag in `cmake/Dependencies.cmake`; never use `master`. + +## Key dependencies + +| Library | Version | Purpose | +|---|---|---| +| nlohmann/json | v3.11.3 | All JSON serde | +| libcpr/cpr | 1.10.5 | HTTPS (libcurl built in-tree, Schannel on Windows) | +| wxWidgets | v3.2.5 | UI toolkit (only `ui_wx/` may use it) | +| doctest | v2.4.11 | Tests (only when `CCM_BUILD_TESTS=ON`) | + +## Commands + +Run from the **workspace root**. + +- Configure (Clang/Ninja, FetchContent wx): + `cmake -S . -B build -G Ninja` +- Configure (Windows MinGW-w64 fallback — verified working with MSYS2 UCRT64 GCC 15.2 + CMake 4.x): + `cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release` +- Configure with system wx for fast iteration: + `cmake -S . -B build -G Ninja -DCCM_USE_SYSTEM_WX=ON` +- Build everything: + `cmake --build build --parallel` +- Run the app: + `./build/bin/ccm3` (`.\build\bin\ccm3.exe` on Windows) +- Run tests (CCM_BUILD_TESTS defaults to ON): + `ctest --test-dir build --output-on-failure` — current baseline: **86 cases / 211 assertions, all green**. +- Build tests only: + `cmake --build build --target ccm_core_tests` + +> **Windows runtime note**: `cpr` is built as a shared library, so `build/bin/` ends up with `libcpr.dll`, `libcurl.dll`, `libzlib.dll` next to `ccm.exe`. With MinGW-w64 you also need `libgcc_s_seh-1.dll` and `libstdc++-6.dll` from your MSYS2 UCRT64 `bin/` on `PATH` (or copied alongside the exe) to launch from Explorer. +> +> **Windows rebuild note**: linking `ccm.exe` fails with `Permission denied` if the app is still running/locked. Close `ccm.exe` before rebuilding app targets. +> +> **Windows cold-start note**: first launch right after a fresh build is often slower than subsequent launches due to cold file cache and Windows security scanning (Defender/SmartScreen) on the new exe/dll set. Warm launches are the meaningful baseline for app-side perf changes. + +## UI performance guardrails + +- Keep first paint responsive: avoid heavy synchronous work in constructors of top-level windows/dialogs. +- For startup, defer non-critical work with `CallAfter(...)` so the frame appears before data loading. +- Preserve "select first row on startup" behavior without blocking first paint by scheduling the initial selection with `CallAfter(...)` instead of selecting synchronously during row rebuild. +- Avoid repeated set-list loads when opening Add/Edit: cache Magic sets in `MainFrame` and reuse them in `CardEditDialog`. +- Pass preloaded set data to dialogs by pointer/reference, not by value, to avoid copying large vectors on every open. +- While constructing/populating dialogs with many controls/choices, wrap with `Freeze()`/`Thaw()` and append choice items in bulk (`wxArrayString`) to reduce layout/repaint churn. +- Keep selected-card preview usable when remote lookup fails: show a per-game card-back fallback image (CCM2 parity), not a blank preview panel. + +## Windows UI theming guardrails + +- `wxWidgets` native dark-mode behavior on Windows is inconsistent across controls and OS builds; prefer explicit app theming in `ui_wx/src/Theme.cpp` plus targeted native hints only where needed. +- Treat UI text from domain/services as UTF-8 and convert explicitly at wx boundaries (`wxString::FromUTF8(...)` for display, `ToStdString(wxConvUTF8)` for write-back); do not rely on implicit `std::string` conversions on Windows. +- For dialogs (`wxDialog`) and frames (`wxFrame`), apply title-bar dark mode through top-level-window handling (not frame-only handling), otherwise modal window headers stay light. +- The `wxListCtrl` native header can ignore dark hints; if native theming is unreliable, use a custom themed header row and preserve key UX parity (single-click sort, edge-drag resize, divider double-click autosize). +- Do **not** apply `Explorer` class theming to `wxTextCtrl` in dark mode; some Windows builds force black typed text. Keep edit controls palette-driven, and for critical fields (for example the top-right filter box) enforce colors through `WM_CTLCOLOREDIT` handling in `MainFrame` when needed. +- Theme modal dialogs explicitly before `ShowModal()` (Settings, Create/Edit, image viewer, etc.) so they don't inherit mismatched defaults from Windows. +- For button hover/pressed contrast fixes in dark theme, prefer explicit state handling in `Theme.cpp`; native Windows button states can override wx colors and produce unreadable white-on-white combinations. +- Keep button theming state dynamic across theme switches (Dark <-> Light). Avoid lambdas that permanently capture old theme colors or behavior; stale handlers can make light-mode buttons look wrong. +- After changing `ui_wx` theming behavior, rebuild the final app target (`cmake --build build --target ccm --parallel`), not just `ccm_ui_wx`, before validating runtime behavior. +- If linker fails with `Permission denied` on `build/bin/ccm.exe`, the app is still running; close it before rebuilding. + +## Required follow-ups + +- After modifying a domain type's fields or JSON layout you **must** update the matching round-trip test in `tests/domain_json_tests.cpp` and re-run tests. +- After adding a new `.cpp` to `core/` or `ui_wx/` you **must** add it to that package's `CMakeLists.txt`. There is no glob. +- After adding a new dependency you **must** verify its license is compatible with this repository's MIT license before merging. +- After adding a new game module you **must**: (1) extend `Game` enum + string mappings in `core/include/ccm/domain/Enums.hpp`, (2) register the module in `app/main.cpp`, (3) add a directory mapping in `app/main.cpp::dirNameForGame`, (4) implement an `IGameView` derived class (or `GameView`) and add it to `AppContext::gameViews` in the composition root. +- After changing the per-game seams (`IGameModule`, `IGameView`, the `BaseCard*Panel` template hooks) you **must** update `docs/adding-a-new-game.md` so the canonical "add a new game" walkthrough stays in sync with the code. +- After changing `formatTextForFs` or `parseIndexFromFilename` you **must** update `tests/fs_names_tests.cpp` — these functions exist to stay byte-compatible with the original Rust `util/fs.rs`. + +## Anti-patterns + +- Don't include `wx/...` headers from `core/` (breaks layering and tests will refuse to build). +- Don't add tests that hit real network or real disk; use the fake `ccm::testing::InMemoryFileSystem` and the existing http/source fakes. +- Don't enable `-Wconversion` / `-Wsign-conversion`; they fight wxWidgets's `int` IDs. They were intentionally removed from `cmake/CompilerWarnings.cmake`. +- Don't use `master` for FetchContent tags. Bump deliberately. +- Don't bump `cpr` past `1.10.5` without re-doing the curl install/export plumbing: cpr 1.11.x adds `install(EXPORT cprTargets)` rules that reference `libcurl_shared`, which isn't in any export set when curl is built as a sub-project, breaking configure. The 1.10.5 + `HAVE_IOCTLSOCKET_FIONBIO=ON` workaround in `cmake/Dependencies.cmake` is the verified MinGW-w64 path — do not remove it without an end-to-end Windows build first. +- Don't create multiple top-level triggers for the same CI intent (feature or master). Keep one triggered orchestrator workflow (`feature-ci.yml`, `master-ci.yml`) and use `workflow_call` reusable workflows for OS-specific splits so GitHub Actions stays a single run per intent. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..305c95c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.22) + +# Detect the toolchain BEFORE project() so we can pick clang or fall back to +# MinGW-w64 g++ on Windows. This file is no-op on non-Windows hosts. +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchain.cmake) + +project(ccm + VERSION 0.1.0 + DESCRIPTION "Card Collection Manager 3 - C++/wxWidgets desktop app" + LANGUAGES CXX +) + +if(WIN32) + enable_language(RC) +endif() + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) +endif() + +# Generate compile_commands.json for tooling (clangd, ccls, etc.). +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# All built artifacts land in a predictable place. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + +# Project-wide options. +option(CCM_USE_SYSTEM_WX "Use a system-installed wxWidgets via find_package instead of FetchContent" OFF) +option(CCM_BUILD_TESTS "Build unit tests for ccm_core" ON) +set(CCM_APP_VERSION "${PROJECT_VERSION} (localbuild)" CACHE STRING "Application version string embedded in UI") + +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CompilerWarnings.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Dependencies.cmake) + +add_subdirectory(core) +add_subdirectory(ui_wx) +add_subdirectory(app) + +if(CCM_BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif() + +message(STATUS "") +message(STATUS "============================================================") +message(STATUS " ${PROJECT_NAME} ${PROJECT_VERSION}") +message(STATUS " Compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS " Build type: ${CMAKE_BUILD_TYPE}") +message(STATUS " System wx: ${CCM_USE_SYSTEM_WX}") +message(STATUS " Build tests: ${CCM_BUILD_TESTS}") +message(STATUS "============================================================") +message(STATUS "") diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ab99c0a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Card Collection Manager 3 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..171e772 --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +# Card Collection Manager 3 + +Card Collection Manager 3 is an extensible desktop application for managing trading card game collections. It is designed as a practical way to track cards and manage per-card images for large collections, with local per-game data, set synchronization workflows, and a desktop-first UX. The app preserves the established JSON layout from earlier CCM versions so existing collections stay compatible. + +## Screenshots + +### Magic The Gathering + +![CCM3 Demo - Magic: The Gathering](docs/assets/images/demo-mtg.png) + +### Pokemon TCG + +![CCM3 Demo - Pokemon](docs/assets/images/demo-pkm.png) + +## Migrating From CCM1 And CCM2 + +CCM3 reads the established collection layout, so data from both CCM1 and CCM2 can be copied into the configured CCM3 data directory. + +Basic migration flow: + +1. Close any running CCM app instance that points to the same data folder. +2. Copy your existing game data into the matching CCM3 game folder: + - from CCM1: export/copy your collection JSON and images into the corresponding CCM3 game directory. + - from CCM2: copy per-game `collection.json` and `images/` directories into the same per-game folders in CCM3. +3. Start CCM3 and confirm the data directory in `File > Settings`. + +If your files are in the expected layout, collections should load without conversion. + +## Technical Overview + +This is a C++20 project with a wxWidgets UI: + +- `core/`: domain logic, services, and infrastructure adapters +- `ui_wx/`: wxWidgets presentation layer +- `app/`: executable composition root + +Key libraries used by the project: + +- `cpr` (libcurl-based): REST/HTTP calls +- `nlohmann/json`: JSON serialization/deserialization +- `doctest`: unit testing + +Dependency direction is strict: `app -> ui_wx -> core`. + +## Documentation + +Implementation details now live in `docs/`. Start here: + +- [Documentation Index](docs/README.md) +- [Build Locally Guide](docs/dow-doc-build-locally.md) +- [Intro For New Developers](docs/intro-to-new-developers.md) +- [CI/CD Guide](docs/ci-cd-guide.md) +- [Versioning Guide](docs/versioning.md) +- [Testing Guide And Test Code Of Conduct](docs/testing-and-test-code-of-conduct.md) +- [Adding A New Game To Card Collection Manager](docs/adding-a-new-game.md) + +## Previous Implementations + +This project continues earlier versions of Card Collection Manager: + +- [Card Collection Manager (CCM1)](https://github.com/sebastiandine/Card-Collection-Manager): original Java/Swing implementation. +- [Card Collection Manager 2 (CCM2)](https://github.com/sebastiandine/Card-Collection-Manager-2): Rust/TypeScript (Tauri) rewrite with multi-game support. + +## License + +This project is licensed under the [MIT License](LICENSE). + +Third-party dependencies and assets remain under their respective licenses. diff --git a/app/AGENTS.md b/app/AGENTS.md new file mode 100644 index 0000000..0dd578b --- /dev/null +++ b/app/AGENTS.md @@ -0,0 +1,35 @@ +# app/AGENTS.md + +The `ccm` executable — composition root only. The single place where concrete adapter types are mentioned. Read the root `AGENTS.md` first. + +## File pointers + +- `main.cpp` — the entire app. Defines `CcmApp : public wxApp`, builds the dependency graph in `OnInit()`, then hands an `AppContext` to `MainFrame`. +- `CMakeLists.txt` — declares the `ccm` target. Sets `WIN32_EXECUTABLE TRUE` on Windows so no console window appears. Links `ccm_core`, `ccm_ui_wx`, `ccm_warnings`. + +## Conventions + +1. **Composition root is the only place** that names concrete adapters: `StdFileSystem`, `CprHttpClient`, `JsonCollectionRepository`, `JsonCollectionRepository`, `JsonSetRepository`, `LocalImageStore`, `MagicGameModule`, `PokemonGameModule`, `MagicGameView`, `PokemonGameView`, etc. If a concrete adapter type appears anywhere else in the codebase, move the wiring here. +2. **Member declaration order in `CcmApp` matters** — destruction is reverse, so a member that depends on another (e.g. `magicCollSvc_` depends on `magicRepo_` and `imgStore_`; `previewSvc_` depends on `http_` and is consumed by `ctx_`; `magicView_` depends on the typed `magicCollSvc_` and the shared services) must be declared **after** its deps. Do not reorder casually. +3. **Use `std::unique_ptr` for everything owned** by `CcmApp`. The `AppContext` then holds plain references into those owned objects, plus a vector of `IGameView*` raw pointers (the `unique_ptr<>`s for the views are the actual owners; the vector just describes the active set). +4. **Game-to-directory mapping** lives in `dirNameForGame(Game)` (anonymous namespace). When adding a new game, extend this function — it is wired into all three repositories (`JsonCollectionRepository`, `JsonSetRepository`, `LocalImageStore`). +5. **`config.json` location** is the executable's parent directory, resolved via `wxStandardPaths::Get().GetExecutablePath()`. Do not change this — existing installations rely on that location. +6. **Image format handlers** must be registered via `wxImage::AddHandler(new wxPNGHandler)` and `new wxJPEGHandler` before any image is loaded. They are added in `OnInit()` first thing — keep it that way. +7. **Card preview source ownership** lives inside the `IGameModule`. The composition root never constructs an `CardPreviewSource` directly; it calls `previewSvc_->registerModule(*Mod_)` and the service pulls the module's preview source via `IGameModule::cardPreviewSource()` (returning `nullptr` is silently skipped). + +## Required follow-ups + +- After adding a new game module you **must**: (1) add a `unique_ptr<GameModule>` member in declaration-order-correct position, (2) construct it in `OnInit()`, (3) call `setSvc_->registerModule(Mod_.get())`, (4) call `previewSvc_->registerModule(*Mod_)` (no-op when the module has no preview source), (5) extend `dirNameForGame`, (6) add a typed `JsonCollectionRepository<Card>` + `CollectionService<Card>` if the game has a custom card type, (7) construct a `GameView` and append its raw pointer to the `AppContext::gameViews` vector, (8) make sure the view's `unique_ptr<>` member sits **after** all its deps (typed services + `IGameModule`). +- After adding a new core service you **must** add a `unique_ptr<...>` member, construct it in `OnInit()` after its deps, and add a reference field to `AppContext`. +- After adding a new dependency edge you **must** verify destruction order is still correct: deps **before** dependents in the member list. +- After changing the IGameView contract or the AppContext shape, update `docs/adding-a-new-game.md` so the canonical procedure stays in sync. + +## Anti-patterns + +- Don't add business logic here. If something is more than `std::make_unique` and a `register/Bind` call, it belongs in `core/`. +- Don't construct services on the stack inside `OnInit()` — they must outlive the `MainFrame`, so they live as `CcmApp` members. + +## Commands + +- Build the binary: `cmake --build build --target ccm` +- Run on Windows / MinGW-w64: `.\build\bin\ccm.exe`. The cpr/curl/zlib DLLs are placed next to the exe automatically; the MSYS2 UCRT64 runtime (`libgcc_s_seh-1.dll`, `libstdc++-6.dll`) needs to be on `PATH` (e.g. `P:\msys2\msys64\ucrt64\bin`). On verified runs the exe loads under window title "Card Collection Manager 3". diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000..8eee632 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,20 @@ +# ccm: thin executable / composition root. +# Wires concrete adapters into the services and hands them to the UI. + +add_executable(ccm + main.cpp +) +set_target_properties(ccm PROPERTIES OUTPUT_NAME ccm3) + +# Subsystem WINDOWS on Windows so we don't get a stray console. +if(WIN32) + target_sources(ccm PRIVATE ccm.rc) + set_target_properties(ccm PROPERTIES WIN32_EXECUTABLE TRUE) +endif() + +target_link_libraries(ccm + PRIVATE + ccm_core + ccm_ui_wx + ccm_warnings +) diff --git a/app/ccm.rc b/app/ccm.rc new file mode 100644 index 0000000..a2d3b30 --- /dev/null +++ b/app/ccm.rc @@ -0,0 +1 @@ +ccm_main_icon ICON "resources/ccm.ico" diff --git a/app/main.cpp b/app/main.cpp new file mode 100644 index 0000000..3cb1eb7 --- /dev/null +++ b/app/main.cpp @@ -0,0 +1,145 @@ +// Composition root: builds the dependency graph from the bottom up and hands +// it to the wxWidgets UI layer. This is the only place where concrete adapter +// types are mentioned - everything downstream depends on interfaces. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/games/magic/MagicGameModule.hpp" +#include "ccm/games/pokemon/PokemonGameModule.hpp" +#include "ccm/infra/CprHttpClient.hpp" +#include "ccm/infra/JsonCollectionRepository.hpp" +#include "ccm/infra/JsonSetRepository.hpp" +#include "ccm/infra/LocalImageStore.hpp" +#include "ccm/infra/StdFileSystem.hpp" +#include "ccm/services/CardPreviewService.hpp" +#include "ccm/services/CollectionService.hpp" +#include "ccm/services/ConfigService.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/services/SetService.hpp" +#include "ccm/ui/AppContext.hpp" +#include "ccm/ui/MagicGameView.hpp" +#include "ccm/ui/MainFrame.hpp" +#include "ccm/ui/PokemonGameView.hpp" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace { + +// All Game::X -> directory string mappings live in one place. Eliminates the +// need for the repositories to know about concrete game module classes. +std::string dirNameForGame(ccm::Game g) { + switch (g) { + case ccm::Game::Magic: return "magic"; + case ccm::Game::Pokemon: return "pokemon"; + } + return "magic"; +} + +} // namespace + +class CcmApp : public wxApp { +public: + bool OnInit() override { + // wxImage knows about PNG/JPEG once these handlers are registered. + wxImage::AddHandler(new wxPNGHandler); + wxImage::AddHandler(new wxJPEGHandler); + + // --- locate config next to exe, data in user home ---------------- + const std::filesystem::path exeDir = + std::filesystem::path(wxStandardPaths::Get().GetExecutablePath().ToStdString()) + .parent_path(); + const auto configPath = exeDir / "config.json"; + const auto defaultDataDir = + std::filesystem::path(wxGetHomeDir().ToStdString()) / "ccm3-data"; + + // --- build the dependency graph ----------------------------------- + fs_ = std::make_unique(); + config_ = std::make_unique(*fs_, configPath, defaultDataDir); + + if (auto init = config_->initialize(); !init) { + wxMessageBox("Failed to load configuration: " + init.error(), + "Startup error", wxOK | wxICON_ERROR); + return false; + } + + http_ = std::make_unique(); + magicMod_ = std::make_unique(*http_); + pokeMod_ = std::make_unique(*http_); + + magicRepo_ = std::make_unique>( + *fs_, *config_, &dirNameForGame); + pokeRepo_ = std::make_unique>( + *fs_, *config_, &dirNameForGame); + setRepo_ = std::make_unique(*fs_, *config_, &dirNameForGame); + imgStore_ = std::make_unique(*fs_, *config_, &dirNameForGame); + + imgSvc_ = std::make_unique(*imgStore_); + magicCollSvc_ = std::make_unique>( + *magicRepo_, *imgStore_); + pokeCollSvc_ = std::make_unique>( + *pokeRepo_, *imgStore_); + setSvc_ = std::make_unique(*setRepo_); + setSvc_->registerModule(magicMod_.get()); + setSvc_->registerModule(pokeMod_.get()); + + previewSvc_ = std::make_unique(*http_); + previewSvc_->registerModule(*magicMod_); + previewSvc_->registerModule(*pokeMod_); + + // Per-game UI bundles. Order here is the order shown in the Game menu. + magicView_ = std::make_unique( + *config_, *magicCollSvc_, *setSvc_, *imgSvc_, *previewSvc_, *magicMod_); + pokeView_ = std::make_unique( + *config_, *pokeCollSvc_, *setSvc_, *imgSvc_, *previewSvc_, *pokeMod_); + + ctx_ = std::make_unique(ccm::ui::AppContext{ + *config_, + *setSvc_, + *imgSvc_, + *previewSvc_, + *magicMod_, + *pokeMod_, + { magicView_.get(), pokeView_.get() }, + }); + + auto* frame = new ccm::ui::MainFrame(*ctx_); +#ifdef __WXMSW__ + frame->SetIcon(wxICON(ccm_main_icon)); +#endif + frame->Show(true); + return true; + } + +private: + // Order matters - destruction is reverse, so put services that depend on + // others *after* their deps in the member list. Game views are torn down + // first so their panels release any references to the typed services. + std::unique_ptr fs_; + std::unique_ptr config_; + std::unique_ptr http_; + std::unique_ptr magicMod_; + std::unique_ptr pokeMod_; + std::unique_ptr> magicRepo_; + std::unique_ptr> pokeRepo_; + std::unique_ptr setRepo_; + std::unique_ptr imgStore_; + std::unique_ptr imgSvc_; + std::unique_ptr> magicCollSvc_; + std::unique_ptr> pokeCollSvc_; + std::unique_ptr setSvc_; + std::unique_ptr previewSvc_; + std::unique_ptr magicView_; + std::unique_ptr pokeView_; + std::unique_ptr ctx_; +}; + +wxIMPLEMENT_APP(CcmApp); diff --git a/app/resources/ccm.ico b/app/resources/ccm.ico new file mode 100644 index 0000000000000000000000000000000000000000..27384e418f84e897139e18ade55cb00949ed1ff9 GIT binary patch literal 67646 zcmeI54YVFbdB^AGI}k|ZGYOCzA|;Uq%7?8|QUevKZ6j6dN3DQJDyP%+Bu4%=7&JGtbV>&b-%{5&n&j8~$Hu)+`t?2N+}4Ae_=kcV34vLG|Q{|9jYb2J$szcVhds#Dg5hG0yS*Y2x=I2bQ&k;o!fl zA3Oyq<-7;k9^mQHUsBfo^`nv>z+Ke2Za@w$fX#+(TTgBV_gQO?eB zVh(ch&A`3lq2PZ$5L}5ofjoumg*be^K8WOF(^aw$Ctz^`Iqoss4j=!A$n1=~Bk+%F zG=~mY8(4@vJHbWB5)k)FaoFlL^NI+ zl<-vyu{Z&X6G%Ca{1>6PFz~PVX9tA*gRp~PzOgugqQPl8_J2X~ATko#faXUBA$$-c zoK3ex{;f&p|BK_l&=rmk{A;|Vanno>-@yR89MQWz#+6F!{{fai3;Zj7%M2&~r^UVG z{7HBZ?IH3X_}>X63ms!|5Jf~oIo(JG>-gdVR=j7|9S9RHbdKhzVrV;{Nn_& z#+4pN{9ckc}4|3>ML6RDb&O5l|FiAj zn9v4xfMwa5$$o7X_lSF(fW--94Vv^g_Wv?yE)V=G{*`_uyP(&R;$E_;Meeyde*Z1) zCOd#;uEP>MXUcw&KMMSREApTB{aVxBmj9PeI5qJ9EV%BA^mCYla{q(apKODB42=E1 zwEv6$F9iM-zo(zcM>m%7dEftsk^hN(zoY*DEWGa*+Q40X&i~(t|Jevmplm=h>A5)m zn-m(j|E<8k;Ae@UP6f3~=n{B`8N-1m3n|ASw6 zS!e^>!5A0Ycj2GW$l?SnP9P}Vavc4CGpH^J{40J~zH4_UKfgEfnP!kYQ}TC;%nt0k-1ck~8pj$sXMoxeTM_WVx@5s-d1@UQr+ejpzm zP7?PLoIqCDwvKzo|6y;pX3m~j9P`KX7F)CWtoqtOSN!inSM>9E-%8vM;cAp{`?_!f zZE=nv>HR(7UwuBTuU^NV%j>VV=0Vn6-+#X~S6@xvPrkQ}%(7+`Yq09@16}bixM-W6 ze~q_ZicDwNlggh!EKVThGRteL$F=jXelK1}SYLnHW!AjNejAI*S$UpyH|L$_@trlt znl&4%Zv$QPe{0}h@z`{dPu*vTd&$-P%>U6BSTk>LkK4r;=Q+>vAC5O|^7k%0z?x$( zsT|KMiR-wgQ? zJnS(IZQy?K&*si4_jLhaP8$O z4{z%+|F0DHk`J}WFE>vQ|C-m4u3umsMXS7r`>wdc=iTqvKIH#L=(dN~&zP_DnEyWw z{Nn_s6!{NH$^&#N|6dH-MD3N%gbd7IbI|9+gt zW4#FTsN{bUixX(dZ4(3BeDSXb-a}j^|C-xXxtik%{kqlow%dH(MJsCHU*B@>ZU#@2 z>tFHudECzH1^LwRW``$r;smca_is<6xVrPTJ7l(!41iGO{^QC%mU)IR@f*ZRDx-&r~ThoIA=$X+Q9+VkBhq%Ze+ z`rlQbUtiv_NNlhkr7$uO|NW z-nQ@29-oaHTjzhn2A^js^K4bU`>C7)|4)Gfn|gd*=FS9*cHw=TeDjks3|nq%2_Fyq z;{@7OFn9k|slBIW?5&aiwLHi5Jy+j;H*ap<2Clo#V>xG`HAnqUt^5ms52ScdSI5x4 z-s|kgXZu&&0_IR2-PYK(ohz8Of!|2&mEQ`dYvf=3Zu!r9d=|5Q=5F4*Cz}JfDCE0`LhwIaSe`eJHt z&HNuXX3aiF`g-T%E5~UQJ9aeM!S?Oe=o`Uo&C8&l-W#g)`=P9Y{}%xK$dhfn59;^8 zQ>fZF=6jXdA92|7Ii=EYgUZDTSUtPjP^$Fa!@Z6a^FXGky7`B1t>tjvQ1oojIjs>|eiGb|^^AXkaAb-}H}gR}=hAWvMOG4CLMhK6b^{_^yOq_cj;y^) zi|YaZp%3bPZVCHoMv}fRee{kX|M0T2>)}1rUDE#rg7(Y_V`G@7N-=2{>I{a)TviGD z#=P6>Wh_phU4=^TKPt8LTNzt3x>q^>6L2q!wKn9)-$u@&wQLEQp8~A@3{+4vu24<0uDQaUi zUT3pGtChEO-!G&#pEdOSH|9fl|EvV&>jVFa-_;@iCyRTD{B=c&rR6+8nG2Hgjrjn@ z-|6adb@pof*Nf+Uv5vy?|6jnse*>R~{n_{76siuOf0{f?0-m>b$p2@=1x~yVfrpxn(li%UGjTl$na@fM1ZeJHppbo_*l*xp3(6!q2U(?NZvHq0* z{jfK@`%HkNOWs3yzuUmnm=jxMf0X;^lE$9dBkpDF@bQ00MH~mN%i?X+!S@W`xBiN_ zmGBX6a(TWH`LF(4K-&L%!N1zXddDT4vecxdzb($InX#jYp37wJiNyY27tDVd_*Z-y zGF4z2+V}m7dc=EZUy=X1_}BWnMWGFBo{D^~eLC>}ACdp+eZR(nJ@@}=SEmL3HLg2k zk~Y9}ocTZTuWwOg=&8j1UnksJXXX7m@dZd(_%%+t`)~qvDpOi^pj=eMd1I3@XaTPG<=66y9~hz^g@vd zbwvIrKvFUHD*sOc|BBy~uz#Gmm#jjrLv|sY=&3~hdja?3(3`|PsA{|z`LBY1ts~J~-|5I6WxO-3Z^n^B zk#>T{h;)7bTi?WK*~>ZJgmk+nJo4WS|M$Yj`N)AOFBy(Br!Vf-A!YM^oNhVj8v$M4 zXzZx*L#{qOA1+6BAY5omBL8i{1-$a_S0em2C0G~a1=4zkpMkKoxR!7brM?fL>*wp& z+QtpY=aJ_Slxr$E{^zkSPQTkWh%$RY!j0;b5;pevA|h?>haC22Og1 zZFj7j#quf=sHg8H4^^#ZNqM_C_jzOklKE|dhCR4R_srcdtK^_eUQ#q?<5x=U-ROcIJ|2jI4F)p$Us zNIO8cH102^9e|nZEvgfELoD#dHo{04}5#7t`Ca+S7sy>G@mo*Nf@dh3m7&^Y<6iBZce5wP(e2 zzBE$X3TFy<&d&2ogUM$Y%eP;3sPRmRw9j0IG19JvF~_6pe=dXPRk!;LK0W5r%HZ0G zzg;!>b~EZOD+6h&^|z}Amkzgcjl*$umL%*Xy+xfh2`{K!H*UA~64ImLD)G})l1b|D KdxdnLB>x|XuW&E` literal 0 HcmV?d00001 diff --git a/cmake/CompilerWarnings.cmake b/cmake/CompilerWarnings.cmake new file mode 100644 index 0000000..2dbb5e3 --- /dev/null +++ b/cmake/CompilerWarnings.cmake @@ -0,0 +1,33 @@ +# Shared warning configuration as an INTERFACE library so each first-party +# target can opt in with `target_link_libraries( PRIVATE ccm_warnings)` +# without duplicating flags. + +add_library(ccm_warnings INTERFACE) + +set(_CCM_GCC_CLANG_FLAGS + -Wall + -Wextra + -Wpedantic + -Wshadow + -Wnon-virtual-dtor + -Wcast-align + -Wunused + -Woverloaded-virtual + -Wnull-dereference + -Wdouble-promotion + -Wformat=2 + # -Wconversion / -Wsign-conversion are intentionally NOT enabled - they + # fight badly with wxWidgets's wxWindowID = int API surface and the + # noise-to-signal ratio doesn't justify it for a single-binary app. +) + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + target_compile_options(ccm_warnings INTERFACE ${_CCM_GCC_CLANG_FLAGS}) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + target_compile_options(ccm_warnings INTERFACE /W4 /permissive-) +endif() + +# UTF-8 source/exec encoding everywhere. +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + target_compile_options(ccm_warnings INTERFACE /utf-8) +endif() diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake new file mode 100644 index 0000000..6e455f8 --- /dev/null +++ b/cmake/Dependencies.cmake @@ -0,0 +1,145 @@ +# Third-party dependencies pulled via FetchContent. Pinning to known-good tags +# is intentional - bump deliberately, never use `master`. + +include(FetchContent) + +# Avoid hammering the network on every reconfigure once content is downloaded. +set(FETCHCONTENT_UPDATES_DISCONNECTED ON CACHE BOOL "" FORCE) + +# CMake 4 dropped compatibility with cmake_minimum_required(VERSION < 3.5). +# Some pinned tags below (doctest 2.4.11, nlohmann/json 3.11.3, wxWidgets 3.2.5) +# still ship a `cmake_minimum_required(VERSION 3.0/3.1)` and would otherwise +# fail to configure. Override the floor for all FetchContent'd subprojects. +# See: https://cmake.org/cmake/help/latest/variable/CMAKE_POLICY_VERSION_MINIMUM.html +if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM) + set(CMAKE_POLICY_VERSION_MINIMUM 3.5) +endif() + +# --------------------------------------------------------------------------- +# nlohmann/json - JSON (de)serialization. Header-only. +# --------------------------------------------------------------------------- +message(STATUS "[ccm] Fetching nlohmann/json ...") +FetchContent_Declare( + nlohmann_json + GIT_REPOSITORY https://github.com/nlohmann/json.git + GIT_TAG v3.11.3 + GIT_SHALLOW TRUE +) +set(JSON_BuildTests OFF CACHE INTERNAL "") +set(JSON_Install OFF CACHE INTERNAL "") +FetchContent_MakeAvailable(nlohmann_json) + +# --------------------------------------------------------------------------- +# cpr - C++ Requests (libcurl wrapper). Builds curl in-tree so we don't need +# a system libcurl. Used for Scryfall + pokemontcg.io REST calls. +# +# Pinned at 1.10.5 deliberately. 1.11.x adds an `install(EXPORT cprTargets)` +# rule that references `libcurl_shared`, which isn't in any export set when +# curl is built as a sub-project here - configure fails with: +# "install(EXPORT \"cprTargets\" ...) includes target \"cpr\" which requires +# target \"libcurl_shared\" that is not in any export set." +# Bumping past 1.10.5 needs additional plumbing (either disable cpr's install +# rules or move curl to its own export set). Verified end-to-end on MSYS2 +# UCRT64 GCC 15.2 + CMake 4.3 with this pin. +# --------------------------------------------------------------------------- +message(STATUS "[ccm] Fetching libcpr/cpr (this also fetches a curl source tree) ...") +FetchContent_Declare( + cpr + GIT_REPOSITORY https://github.com/libcpr/cpr.git + GIT_TAG 1.10.5 + GIT_SHALLOW TRUE +) +set(CPR_USE_SYSTEM_CURL OFF CACHE INTERNAL "") +set(CPR_BUILD_TESTS OFF CACHE INTERNAL "") +set(CPR_ENABLE_SSL ON CACHE INTERNAL "") +# Let cpr fetch & build a matching curl, with a Windows-friendly SSL backend. +set(CPR_FORCE_USE_SYSTEM_CURL OFF CACHE INTERNAL "") + +# Trim the curl build aggressively. We only need HTTPS GET, so anything else +# is dead weight at best and a MinGW-w64 link-failure source at worst. +set(BUILD_CURL_EXE OFF CACHE INTERNAL "") +set(BUILD_TESTING OFF CACHE INTERNAL "") +set(CURL_DISABLE_TESTS ON CACHE INTERNAL "") +set(CURL_DISABLE_DOCS ON CACHE INTERNAL "") +set(CURL_DISABLE_INSTALL ON CACHE INTERNAL "") +set(CURL_DISABLE_LDAP ON CACHE INTERNAL "") +set(CURL_DISABLE_LDAPS ON CACHE INTERNAL "") +set(CURL_DISABLE_FTP ON CACHE INTERNAL "") +set(CURL_DISABLE_TELNET ON CACHE INTERNAL "") +set(CURL_DISABLE_DICT ON CACHE INTERNAL "") +set(CURL_DISABLE_FILE ON CACHE INTERNAL "") +set(CURL_DISABLE_TFTP ON CACHE INTERNAL "") +set(CURL_DISABLE_GOPHER ON CACHE INTERNAL "") +set(CURL_DISABLE_IMAP ON CACHE INTERNAL "") +set(CURL_DISABLE_POP3 ON CACHE INTERNAL "") +set(CURL_DISABLE_SMB ON CACHE INTERNAL "") +set(CURL_DISABLE_SMTP ON CACHE INTERNAL "") +set(CURL_DISABLE_RTSP ON CACHE INTERNAL "") +set(CURL_DISABLE_MQTT ON CACHE INTERNAL "") + +if(WIN32) + # Use the OS-provided TLS stack so we don't need OpenSSL on the build host. + set(CURL_USE_SCHANNEL ON CACHE INTERNAL "") + set(CMAKE_USE_SCHANNEL ON CACHE INTERNAL "") + set(CURL_USE_OPENSSL OFF CACHE INTERNAL "") + + # Workaround: curl's CMake compile-test for ioctlsocket(FIONBIO) sometimes + # fails on MinGW-w64 UCRT64 due to winsock2.h header ordering, which then + # makes nonblock.c #error out with "no non-blocking method was found". + # Force-set the macro so the build proceeds; ioctlsocket+FIONBIO is the + # canonical Win32 API for non-blocking sockets and is always available. + set(HAVE_IOCTLSOCKET_FIONBIO ON CACHE INTERNAL "") +endif() +FetchContent_MakeAvailable(cpr) + +# --------------------------------------------------------------------------- +# wxWidgets - cross-platform UI toolkit. +# --------------------------------------------------------------------------- +# --------------------------------------------------------------------------- +# doctest - lightweight, header-only unit testing framework. Only fetched when +# tests are enabled, so a default release build doesn't pull it. +# --------------------------------------------------------------------------- +if(CCM_BUILD_TESTS) + message(STATUS "[ccm] Fetching doctest ...") + FetchContent_Declare( + doctest + GIT_REPOSITORY https://github.com/doctest/doctest.git + GIT_TAG v2.4.11 + GIT_SHALLOW TRUE + ) + set(DOCTEST_WITH_TESTS OFF CACHE INTERNAL "") + set(DOCTEST_WITH_MAIN_IN_STATIC_LIB OFF CACHE INTERNAL "") + FetchContent_MakeAvailable(doctest) +endif() + +if(CCM_USE_SYSTEM_WX) + message(STATUS "[ccm] Using system wxWidgets via find_package") + find_package(wxWidgets REQUIRED COMPONENTS core base) + include(${wxWidgets_USE_FILE}) + # Re-export as a cleaner imported target so the rest of the build can + # depend on `wx::wx` regardless of how it was provided. + add_library(wx::wx INTERFACE IMPORTED) + target_include_directories(wx::wx INTERFACE ${wxWidgets_INCLUDE_DIRS}) + target_compile_definitions(wx::wx INTERFACE ${wxWidgets_DEFINITIONS}) + target_link_libraries(wx::wx INTERFACE ${wxWidgets_LIBRARIES}) +else() + message(STATUS "[ccm] Fetching wxWidgets (slow on first configure) ...") + set(wxBUILD_SHARED OFF CACHE INTERNAL "") + set(wxBUILD_PRECOMP OFF CACHE INTERNAL "") + set(wxBUILD_INSTALL OFF CACHE INTERNAL "") + set(wxUSE_STL ON CACHE INTERNAL "") + set(wxUSE_GUI ON CACHE INTERNAL "") + FetchContent_Declare( + wxWidgets + GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git + GIT_TAG v3.2.5 + GIT_SHALLOW TRUE + ) + FetchContent_MakeAvailable(wxWidgets) + # wxWidgets provides `wx::core`, `wx::base` etc. as targets when used as + # a sub-project. Aggregate the ones we need into `wx::wx`. + if(NOT TARGET wx::wx) + add_library(wx::wx INTERFACE IMPORTED) + target_link_libraries(wx::wx INTERFACE wx::core wx::base) + endif() +endif() diff --git a/cmake/Toolchain.cmake b/cmake/Toolchain.cmake new file mode 100644 index 0000000..5a7721d --- /dev/null +++ b/cmake/Toolchain.cmake @@ -0,0 +1,49 @@ +# Toolchain detection. +# +# Preferred compiler is Clang. On Windows hosts we additionally fall back to +# MinGW-w64 g++ when Clang is not present. MSVC is intentionally not supported. +# +# Run this BEFORE project() so the resulting CMAKE_C(XX)_COMPILER takes effect. + +if(DEFINED CMAKE_CXX_COMPILER) + # Respect explicit user override. + return() +endif() + +# Look for clang / clang++ first. +find_program(_CCM_CLANG NAMES clang clang-cl) +find_program(_CCM_CLANGXX NAMES clang++ clang-cl) + +if(_CCM_CLANG AND _CCM_CLANGXX) + set(CMAKE_C_COMPILER "${_CCM_CLANG}" CACHE FILEPATH "C compiler" FORCE) + set(CMAKE_CXX_COMPILER "${_CCM_CLANGXX}" CACHE FILEPATH "C++ compiler" FORCE) + message(STATUS "[ccm] Toolchain: Clang at ${_CCM_CLANGXX}") + return() +endif() + +if(WIN32) + # MinGW-w64 GCC fallback. + find_program(_CCM_GCC NAMES x86_64-w64-mingw32-gcc gcc) + find_program(_CCM_GXX NAMES x86_64-w64-mingw32-g++ g++) + if(_CCM_GCC AND _CCM_GXX) + set(CMAKE_C_COMPILER "${_CCM_GCC}" CACHE FILEPATH "C compiler" FORCE) + set(CMAKE_CXX_COMPILER "${_CCM_GXX}" CACHE FILEPATH "C++ compiler" FORCE) + message(STATUS "[ccm] Toolchain: MinGW-w64 GCC at ${_CCM_GXX}") + return() + endif() + message(WARNING + "[ccm] Neither Clang nor MinGW-w64 GCC was found in PATH. " + "Install LLVM (preferred) or MSYS2's mingw-w64-x86_64-gcc and re-run." + ) +else() + # Unix-likes: GCC fallback. + find_program(_CCM_GCC NAMES gcc cc) + find_program(_CCM_GXX NAMES g++ c++) + if(_CCM_GCC AND _CCM_GXX) + set(CMAKE_C_COMPILER "${_CCM_GCC}" CACHE FILEPATH "C compiler" FORCE) + set(CMAKE_CXX_COMPILER "${_CCM_GXX}" CACHE FILEPATH "C++ compiler" FORCE) + message(STATUS "[ccm] Toolchain: GCC at ${_CCM_GXX}") + return() + endif() + message(WARNING "[ccm] Neither Clang nor GCC was found in PATH.") +endif() diff --git a/core/AGENTS.md b/core/AGENTS.md new file mode 100644 index 0000000..2b126b4 --- /dev/null +++ b/core/AGENTS.md @@ -0,0 +1,59 @@ +# core/AGENTS.md + +`ccm_core` static library — domain types, ports, services, infra adapters. Hard rule: **no UI dependencies, ever**. Read the root `AGENTS.md` first. + +## Layer pointers + +- `include/ccm/domain/` — POD value types: `Enums`, `Set`, `MagicCard`, `PokemonCard`, `Configuration`. Each has `to_json` / `from_json` defined in the matching `src/domain/*.cpp`. +- `include/ccm/ports/` — interfaces (`IHttpClient`, `IFileSystem`, `ICollectionRepository`, `ISetRepository`, `IImageStore`, `ICardPreviewSource`). All seams the services depend on. Add new ports here when adding new external concerns. +- `include/ccm/services/` — high-level operations: `ConfigService`, `CollectionService` (header-only template), `SetService`, `ImageService`, `CardPreviewService`, `CardSorter` (free functions; per-column sort comparators that mirror established table sorting behavior — UI-agnostic so they can be unit-tested directly), `CardFilter` (free functions; case-insensitive substring row matcher restricted to each game's `tableFields` valueKey list). They depend only on ports. +- `include/ccm/infra/` — concrete adapters: `CprHttpClient`, `StdFileSystem`, `JsonCollectionRepository` (header-only template), `JsonSetRepository`, `LocalImageStore`. +- `include/ccm/games/` — `IGameModule` + per-game modules. `IGameModule` consolidates the per-game seams: every module owns an `ISetSource` (required) and may own an `ICardPreviewSource` (optional, default `nullptr`). `magic/` and `pokemon/` are the reference implementations — both expose a fully working set source + card preview source. +- `include/ccm/util/` — `Result.hpp` (the sum type), `FsNames.hpp` (filename munging ported from `util/fs.rs`). +- `src/` mirrors `include/ccm/` for non-template implementations. + +## Conventions + +1. **No throw across ports.** Return `ccm::Result::ok(...)` / `Result::err("msg")`. The caller propagates with `if (!r) return Result::err(r.error());`. +2. **JSON serde stays byte-for-byte stable.** When the C++ field name differs from the JSON key (`signed_` vs `"signed"`, `releaseDate`, `setNo`, `firstEdition`, `dataStorage`, `defaultGame`), write hand-rolled `to_json` / `from_json` instead of `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` so the alias is explicit. Round-trip tests in `tests/domain_json_tests.cpp` enforce this — extend them whenever you touch a domain type. +3. **Filename rule for images** lives in `services/ImageService.hpp` and matches the Rust source exactly: + - new entry -> `"{set}+{name}+{idx}.{ext}"` + - existing -> `"{id}+{set}+{name}+{idx}.{ext}"` + `ImageService::buildTargetName` is the single source of truth. Don't duplicate the rule elsewhere. +4. **Templates stay header-only** (`CollectionService`, `JsonCollectionRepository`). Don't add `.cpp` files for them; explicit instantiation is not used. +5. **Path strings** that get persisted (e.g. `Configuration::dataStorage`) use `std::filesystem::path::generic_string()`, never `string()` — keeps `/` separators on Windows so JSON round-trips and tests stay portable. +6. **Compiler warnings**: every target in this package links `ccm_warnings` `PRIVATE`. Treat warnings as errors locally during dev (`-Werror` is opt-in but encouraged). +7. **No `wx/...` includes** in headers or sources here. Verify with `rg "wx/" core/` — must be empty. +8. **HTTP query strings must be percent-encoded** before they reach `IHttpClient::get`. `cpr::Url` does **not** encode the URL string we hand it. See `MagicCardPreviewSource::buildSearchUrl` for the canonical pattern (RFC 3986 unreserved-set encoder). `IHttpClient::get` accepts arbitrary bytes back — `Result` is a binary buffer, not text, so callers can use it for image payloads directly. + +## Adding a new game + +The end-to-end procedure (core + UI + composition root + docs) lives in `docs/adding-a-new-game.md`. The core-side checklist is: + +1. Add `Game::` plus `to_string` / `FromString` / `allGames()` entries in `include/ccm/domain/Enums.hpp` and `src/domain/Enums.cpp`. +2. Create `include/ccm/games//SetSource.hpp` + `.cpp` implementing `ISetSource`. Mirror `MagicSetSource` / `PokemonSetSource`: expose a static `parseResponse(std::string)` helper so it's unit-testable without HTTP. +3. (Optional) Create `include/ccm/games//CardPreviewSource.hpp` + `.cpp` implementing `ICardPreviewSource`. Mirror `MagicCardPreviewSource` / `PokemonCardPreviewSource`: expose static `buildSearchUrl` + `parseResponse` helpers for unit testing without HTTP. +4. Create `include/ccm/games//GameModule.hpp` + `.cpp` implementing `IGameModule`. Pick a stable lowercase `dirName()` — it becomes the on-disk subdirectory and must never change. The module **owns** its set source and (optionally) its card preview source: override `cardPreviewSource()` to return `&previewSource_` when present (default returns `nullptr`). +5. If the game has a card type with different fields, add a `Card` domain type with hand-rolled JSON aliases. Otherwise reuse an existing one. +6. Add the new `.cpp` files to `core/CMakeLists.txt` (no glob). +7. Add tests under `tests/_set_source_tests.cpp` and `tests/_card_preview_source_tests.cpp` modeled on the Magic / Pokemon versions. +8. The composition root in `app/main.cpp` and the directory mapping in `app/main.cpp::dirNameForGame` must be updated too — see `app/AGENTS.md`. `CardPreviewService::registerModule(*module)` is the single registration call; modules whose `cardPreviewSource()` returns `nullptr` are silently skipped. + +## Adding / changing a card-table column + +When you add or rename a `tableFields` entry on a list panel (Magic or Pokemon), keep `core/`'s sort/filter helpers and their tests in lockstep: + +1. Extend `MagicSortColumn` / `PokemonSortColumn` and add a `case` branch in `sortMagicCards` / `sortPokemonCards` (`core/include/ccm/services/CardSorter.hpp` + `.cpp`). +2. Add the new value-key column to the matching `matchesMagicFilter` / `matchesPokemonFilter` (`core/include/ccm/services/CardFilter.hpp` + `.cpp`) — boolean-flag columns are *excluded* (the filtering rule only checks values equivalent to JS `typeof === "string" | "number"`). +3. Add tests under `tests/card_sorter_tests.cpp` and `tests/card_filter_tests.cpp`. + +## Adding a new port + +1. Add the interface header under `include/ccm/ports/` with `virtual ~IFoo() = default;`. +2. Implement the adapter under `include/ccm/infra/` + `src/infra/`. Mark it `final`. +3. Update `core/CMakeLists.txt`. Wire it into the relevant service's constructor. +4. Add a fake under `tests/fakes/` modeled on `InMemoryFileSystem` and write service-level tests against it. + +## Commands + +Build core only: `cmake --build build --target ccm_core` diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt new file mode 100644 index 0000000..3fa3ecf --- /dev/null +++ b/core/CMakeLists.txt @@ -0,0 +1,49 @@ +# ccm_core: UI-agnostic domain, services, ports, and infra adapters. +# This target MUST NOT depend on wxWidgets or any UI toolkit. + +add_library(ccm_core STATIC + src/domain/Enums.cpp + src/domain/Set.cpp + src/domain/MagicCard.cpp + src/domain/PokemonCard.cpp + src/domain/Configuration.cpp + + src/services/ConfigService.cpp + src/services/ImageService.cpp + src/services/SetService.cpp + src/services/CardPreviewService.cpp + src/services/CardSorter.cpp + src/services/CardFilter.cpp + + src/infra/CprHttpClient.cpp + src/infra/StdFileSystem.cpp + src/infra/JsonSetRepository.cpp + src/infra/LocalImageStore.cpp + + src/games/magic/MagicSetSource.cpp + src/games/magic/MagicCardPreviewSource.cpp + src/games/magic/MagicGameModule.cpp + src/games/pokemon/PokemonSetSource.cpp + src/games/pokemon/PokemonCardPreviewSource.cpp + src/games/pokemon/PokemonGameModule.cpp + + src/util/FsNames.cpp +) + +target_include_directories(ccm_core + PUBLIC + $ +) + +target_link_libraries(ccm_core + PUBLIC + nlohmann_json::nlohmann_json + PRIVATE + cpr::cpr + ccm_warnings +) + +target_compile_features(ccm_core PUBLIC cxx_std_20) + +# JsonCollectionRepository and CollectionService are header-only templates +# and live entirely under include/ccm/ - nothing to compile here for them. diff --git a/core/include/ccm/domain/Configuration.hpp b/core/include/ccm/domain/Configuration.hpp new file mode 100644 index 0000000..f3d2c0e --- /dev/null +++ b/core/include/ccm/domain/Configuration.hpp @@ -0,0 +1,26 @@ +#pragma once + +// Configuration: matches the persisted `config.json` schema used by this app. +// +// { "dataStorage": "/abs/path", "defaultGame": "Magic" } + +#include "ccm/domain/Enums.hpp" + +#include + +#include + +namespace ccm { + +struct Configuration { + std::string dataStorage; + Game defaultGame{Game::Magic}; + Theme theme{Theme::Light}; + + friend bool operator==(const Configuration&, const Configuration&) = default; +}; + +void to_json(nlohmann::json& j, const Configuration& c); +void from_json(const nlohmann::json& j, Configuration& c); + +} // namespace ccm diff --git a/core/include/ccm/domain/Enums.hpp b/core/include/ccm/domain/Enums.hpp new file mode 100644 index 0000000..acdfc8f --- /dev/null +++ b/core/include/ccm/domain/Enums.hpp @@ -0,0 +1,77 @@ +#pragma once + +// Game / Language / Condition enums. +// +// String spellings are kept identical to the established Rust serde defaults +// (e.g. `NearMint`, `LightPlayed`, `Magic`, `Pokemon`) so existing JSON files +// remain interchangeable. + +#include + +#include +#include +#include +#include + +namespace ccm { + +enum class Game { + Magic, + Pokemon, +}; + +enum class Language { + English, + German, + French, + Spanish, + Italian, + Chinese, + Japanese, + Russian, +}; + +enum class Condition { + Mint, + NearMint, + Excellent, + Good, + LightPlayed, + Played, + Poor, +}; + +enum class Theme { + Light, + Dark, +}; + +std::string_view to_string(Game g) noexcept; +std::string_view to_string(Language l) noexcept; +std::string_view to_string(Condition c) noexcept; +std::string_view to_string(Theme t) noexcept; + +std::optional gameFromString(std::string_view s) noexcept; +std::optional languageFromString(std::string_view s) noexcept; +std::optional conditionFromString(std::string_view s) noexcept; +std::optional themeFromString(std::string_view s) noexcept; + +const std::array& allGames() noexcept; +const std::array& allLanguages() noexcept; +const std::array& allConditions() noexcept; +const std::array& allThemes() noexcept; + +// nlohmann/json hooks - serialize as plain strings, matching Rust serde. +void to_json(nlohmann::json& j, Game v); +void from_json(const nlohmann::json& j, Game& v); + +void to_json(nlohmann::json& j, Language v); +void from_json(const nlohmann::json& j, Language& v); + +void to_json(nlohmann::json& j, Condition v); +void from_json(const nlohmann::json& j, Condition& v); + +void to_json(nlohmann::json& j, Theme v); +void from_json(const nlohmann::json& j, Theme& v); + +} // namespace ccm diff --git a/core/include/ccm/domain/MagicCard.hpp b/core/include/ccm/domain/MagicCard.hpp new file mode 100644 index 0000000..cfdd2de --- /dev/null +++ b/core/include/ccm/domain/MagicCard.hpp @@ -0,0 +1,36 @@ +#pragma once + +// MagicCard - faithful port of magic/card_services.rs::Card. +// JSON layout remains stable so collection.json files stay interchangeable. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" + +#include + +#include +#include +#include + +namespace ccm { + +struct MagicCard { + std::uint32_t id{0}; + std::uint8_t amount{1}; + std::string name; + Set set; + std::string note; + std::vector images; + Language language{Language::English}; + Condition condition{Condition::NearMint}; + bool foil{false}; + bool signed_{false}; // `signed` is a reserved keyword + bool altered{false}; + + friend bool operator==(const MagicCard&, const MagicCard&) = default; +}; + +void to_json(nlohmann::json& j, const MagicCard& c); +void from_json(const nlohmann::json& j, MagicCard& c); + +} // namespace ccm diff --git a/core/include/ccm/domain/PokemonCard.hpp b/core/include/ccm/domain/PokemonCard.hpp new file mode 100644 index 0000000..92a1085 --- /dev/null +++ b/core/include/ccm/domain/PokemonCard.hpp @@ -0,0 +1,38 @@ +#pragma once + +// PokemonCard - faithful port of pokemon/card_services.rs::Card. +// Same established JSON shape (with `setNo` and `firstEdition` aliases). + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" + +#include + +#include +#include +#include + +namespace ccm { + +struct PokemonCard { + std::uint32_t id{0}; + std::uint8_t amount{1}; + std::string name; + Set set; + std::string setNo; + std::string note; + std::vector images; + Language language{Language::English}; + Condition condition{Condition::NearMint}; + bool firstEdition{false}; + bool holo{false}; + bool signed_{false}; + bool altered{false}; + + friend bool operator==(const PokemonCard&, const PokemonCard&) = default; +}; + +void to_json(nlohmann::json& j, const PokemonCard& c); +void from_json(const nlohmann::json& j, PokemonCard& c); + +} // namespace ccm diff --git a/core/include/ccm/domain/Set.hpp b/core/include/ccm/domain/Set.hpp new file mode 100644 index 0000000..138a558 --- /dev/null +++ b/core/include/ccm/domain/Set.hpp @@ -0,0 +1,24 @@ +#pragma once + +// Set: identifier of a printing run shared by both supported games. +// JSON shape matches the original Rust Set struct exactly: +// { "id": "...", "name": "...", "releaseDate": "YYYY/MM/DD" } + +#include + +#include + +namespace ccm { + +struct Set { + std::string id; + std::string name; + std::string releaseDate; // formatted as "YYYY/MM/DD" + + friend bool operator==(const Set&, const Set&) = default; +}; + +void to_json(nlohmann::json& j, const Set& s); +void from_json(const nlohmann::json& j, Set& s); + +} // namespace ccm diff --git a/core/include/ccm/games/IGameModule.hpp b/core/include/ccm/games/IGameModule.hpp new file mode 100644 index 0000000..cd8584a --- /dev/null +++ b/core/include/ccm/games/IGameModule.hpp @@ -0,0 +1,47 @@ +#pragma once + +// IGameModule + ISetSource: the seam that lets the UI handle Magic and Pokemon +// uniformly. New game support is "implement these interfaces and register the +// module in the composition root" - see the Rust `templates/` module for the +// pattern this is modeled after. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/ports/ICardPreviewSource.hpp" +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +class ISetSource { +public: + virtual ~ISetSource() = default; + + // Fetch the canonical set list from the game's external API. + // Implementations return a vector that has already been filtered + // (e.g. no digital-only sets) and sorted by release date ascending. + virtual Result> fetchAll() = 0; +}; + +class IGameModule { +public: + virtual ~IGameModule() = default; + + [[nodiscard]] virtual Game id() const noexcept = 0; + // Subdirectory name used inside the data storage root. Matches the Rust + // string literals "magic" / "pokemon". + [[nodiscard]] virtual std::string dirName() const = 0; + [[nodiscard]] virtual std::string displayName() const = 0; + + virtual ISetSource& setSource() = 0; + + // Optional preview source. Returning nullptr signals the game has no + // remote preview API (the UI then renders only locally stored images). + // The default keeps existing modules compiling without forcing every + // game to provide one. + virtual ICardPreviewSource* cardPreviewSource() noexcept { return nullptr; } +}; + +} // namespace ccm diff --git a/core/include/ccm/games/magic/MagicCardPreviewSource.hpp b/core/include/ccm/games/magic/MagicCardPreviewSource.hpp new file mode 100644 index 0000000..2c3e5ab --- /dev/null +++ b/core/include/ccm/games/magic/MagicCardPreviewSource.hpp @@ -0,0 +1,42 @@ +#pragma once + +// MagicCardPreviewSource: ICardPreviewSource implementation for Magic the +// Gathering. Calls Scryfall's search endpoint at +// https://api.scryfall.com/cards/search?q=name:"" AND set: +// and returns `data[0].image_uris.normal`. Mirrors the established +// `src/components/magic/SelectedMtgPanel.tsx::getImage`, including the +// `&` -> `and` substitution in the card name. + +#include "ccm/ports/ICardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +#include +#include + +namespace ccm { + +class MagicCardPreviewSource final : public ICardPreviewSource { +public: + explicit MagicCardPreviewSource(IHttpClient& http); + + Result fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) override; + + // Build the fully URL-encoded Scryfall search URL for the given card. + // Exposed for unit testing and to keep encoding rules in one place. + static std::string buildSearchUrl(std::string_view name, + std::string_view setId); + + // Parse a Scryfall /cards/search response body and pull out the + // `data[0].image_uris.normal` URL. Returns an error result when no + // matching printing is found, when the JSON is malformed, or when the + // entry has no top-level `image_uris` (double-faced cards expose them + // on a face object - no fallback in this compatibility behavior either). + static Result parseResponse(const std::string& body); + +private: + IHttpClient& http_; +}; + +} // namespace ccm diff --git a/core/include/ccm/games/magic/MagicGameModule.hpp b/core/include/ccm/games/magic/MagicGameModule.hpp new file mode 100644 index 0000000..9cc883c --- /dev/null +++ b/core/include/ccm/games/magic/MagicGameModule.hpp @@ -0,0 +1,29 @@ +#pragma once + +// MagicGameModule: IGameModule for Magic the Gathering. Owns its set source +// and card preview source, reports the canonical "magic" subdirectory name +// used on disk. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/games/magic/MagicCardPreviewSource.hpp" +#include "ccm/games/magic/MagicSetSource.hpp" + +namespace ccm { + +class MagicGameModule final : public IGameModule { +public: + explicit MagicGameModule(IHttpClient& http); + + [[nodiscard]] Game id() const noexcept override { return Game::Magic; } + [[nodiscard]] std::string dirName() const override { return "magic"; } + [[nodiscard]] std::string displayName() const override { return "Magic"; } + + ISetSource& setSource() override { return setSource_; } + ICardPreviewSource* cardPreviewSource() noexcept override { return &previewSource_; } + +private: + MagicSetSource setSource_; + MagicCardPreviewSource previewSource_; +}; + +} // namespace ccm diff --git a/core/include/ccm/games/magic/MagicSetSource.hpp b/core/include/ccm/games/magic/MagicSetSource.hpp new file mode 100644 index 0000000..907364a --- /dev/null +++ b/core/include/ccm/games/magic/MagicSetSource.hpp @@ -0,0 +1,28 @@ +#pragma once + +// MagicSetSource: ISetSource implementation for Magic the Gathering. +// Calls the Scryfall API at https://api.scryfall.com/sets, drops digital-only +// sets, maps the response into our `Set` domain type, and sorts by release date +// ascending. Behavior matches `magic/set_services.rs::update_sets`. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/IHttpClient.hpp" + +namespace ccm { + +class MagicSetSource final : public ISetSource { +public: + static constexpr const char* kEndpoint = "https://api.scryfall.com/sets"; + + explicit MagicSetSource(IHttpClient& http); + + Result> fetchAll() override; + + // Pure parser exposed for unit testing without a network round-trip. + static Result> parseResponse(const std::string& body); + +private: + IHttpClient& http_; +}; + +} // namespace ccm diff --git a/core/include/ccm/games/pokemon/PokemonCardPreviewSource.hpp b/core/include/ccm/games/pokemon/PokemonCardPreviewSource.hpp new file mode 100644 index 0000000..39adb33 --- /dev/null +++ b/core/include/ccm/games/pokemon/PokemonCardPreviewSource.hpp @@ -0,0 +1,42 @@ +#pragma once + +// PokemonCardPreviewSource: ICardPreviewSource implementation for the Pokemon +// TCG. Calls the Pokemon TCG search endpoint at +// https://api.pokemontcg.io/v2/cards?q=name:"" set.id: number: +// and returns `data[0].images.large` (with `images.small` as a graceful +// fallback). Mirrors the established `getImage` flow in +// `src/components/pokemon/SelectedPokemonPanel.tsx`. + +#include "ccm/ports/ICardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +#include +#include + +namespace ccm { + +class PokemonCardPreviewSource final : public ICardPreviewSource { +public: + explicit PokemonCardPreviewSource(IHttpClient& http); + + Result fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) override; + + // Build the fully URL-encoded Pokemon TCG search URL for the given card. + // Exposed for unit testing and to keep encoding rules in one place. + static std::string buildSearchUrl(std::string_view name, + std::string_view setId, + std::string_view setNo); + + // Parse a Pokemon TCG /v2/cards response body and pull out the image URL + // for the first matching card. Prefers `images.large`, falls back to + // `images.small`, and returns an error result if neither is present, the + // data array is empty, or the JSON is malformed. + static Result parseResponse(const std::string& body); + +private: + IHttpClient& http_; +}; + +} // namespace ccm diff --git a/core/include/ccm/games/pokemon/PokemonGameModule.hpp b/core/include/ccm/games/pokemon/PokemonGameModule.hpp new file mode 100644 index 0000000..62d6114 --- /dev/null +++ b/core/include/ccm/games/pokemon/PokemonGameModule.hpp @@ -0,0 +1,28 @@ +#pragma once + +// PokemonGameModule: IGameModule for the Pokemon TCG. Owns its set source +// and card preview source, both backed by api.pokemontcg.io/v2. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/games/pokemon/PokemonCardPreviewSource.hpp" +#include "ccm/games/pokemon/PokemonSetSource.hpp" + +namespace ccm { + +class PokemonGameModule final : public IGameModule { +public: + explicit PokemonGameModule(IHttpClient& http); + + [[nodiscard]] Game id() const noexcept override { return Game::Pokemon; } + [[nodiscard]] std::string dirName() const override { return "pokemon"; } + [[nodiscard]] std::string displayName() const override { return "Pokemon"; } + + ISetSource& setSource() override { return setSource_; } + ICardPreviewSource* cardPreviewSource() noexcept override { return &previewSource_; } + +private: + PokemonSetSource setSource_; + PokemonCardPreviewSource previewSource_; +}; + +} // namespace ccm diff --git a/core/include/ccm/games/pokemon/PokemonSetSource.hpp b/core/include/ccm/games/pokemon/PokemonSetSource.hpp new file mode 100644 index 0000000..7222638 --- /dev/null +++ b/core/include/ccm/games/pokemon/PokemonSetSource.hpp @@ -0,0 +1,30 @@ +#pragma once + +// PokemonSetSource: ISetSource implementation for the Pokemon TCG. +// Calls the Pokemon TCG API at https://api.pokemontcg.io/v2/sets, maps the +// response into our `Set` domain type, and sorts by release date ascending. +// The Pokemon TCG API already returns `releaseDate` in `YYYY/MM/DD` format, +// so no rewriting is needed (unlike Scryfall's `released_at`). +// Behavior matches `pokemon/set_services.rs::update_sets`. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/IHttpClient.hpp" + +namespace ccm { + +class PokemonSetSource final : public ISetSource { +public: + static constexpr const char* kEndpoint = "https://api.pokemontcg.io/v2/sets"; + + explicit PokemonSetSource(IHttpClient& http); + + Result> fetchAll() override; + + // Pure parser exposed for unit testing without a network round-trip. + static Result> parseResponse(const std::string& body); + +private: + IHttpClient& http_; +}; + +} // namespace ccm diff --git a/core/include/ccm/infra/CprHttpClient.hpp b/core/include/ccm/infra/CprHttpClient.hpp new file mode 100644 index 0000000..e4c6b46 --- /dev/null +++ b/core/include/ccm/infra/CprHttpClient.hpp @@ -0,0 +1,23 @@ +#pragma once + +// CprHttpClient: cpr-based implementation of IHttpClient. +// All cpr/libcurl symbols stay confined to the .cpp file - any TU that just +// needs to make HTTP calls only depends on the IHttpClient port. + +#include "ccm/ports/IHttpClient.hpp" + +#include + +namespace ccm { + +class CprHttpClient final : public IHttpClient { +public: + explicit CprHttpClient(std::chrono::milliseconds timeout = std::chrono::milliseconds{30000}); + + Result get(std::string_view url) override; + +private: + std::chrono::milliseconds timeout_; +}; + +} // namespace ccm diff --git a/core/include/ccm/infra/JsonCollectionRepository.hpp b/core/include/ccm/infra/JsonCollectionRepository.hpp new file mode 100644 index 0000000..0c4ecaa --- /dev/null +++ b/core/include/ccm/infra/JsonCollectionRepository.hpp @@ -0,0 +1,85 @@ +#pragma once + +// JsonCollectionRepository: persists std::map as a JSON object +// keyed by stringified id. Layout matches the established collection file: +// +// //collection.json -> { "0": {...}, "1": {...} } +// +// Header-only because it's a template over the card type. + +#include "ccm/domain/Configuration.hpp" +#include "ccm/domain/Enums.hpp" +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/ICollectionRepository.hpp" +#include "ccm/ports/IFileSystem.hpp" +#include "ccm/services/ConfigService.hpp" +#include "ccm/util/Result.hpp" + +#include + +#include +#include +#include + +namespace ccm { + +template +class JsonCollectionRepository final : public ICollectionRepository { +public: + using Map = typename ICollectionRepository::Map; + // The repository needs a way to translate a Game enum into the per-game + // subdirectory name ("magic" / "pokemon"); a small lookup function keeps + // this layer free of concrete game module types. + using DirNameFn = std::function; + + JsonCollectionRepository(IFileSystem& fs, ConfigService& config, DirNameFn dirName) + : fs_(fs), config_(config), dirName_(std::move(dirName)) {} + + Result load(Game game) override { + const auto p = collectionPath(game); + if (!fs_.exists(p)) { + // Mirror the Rust "create on first read" semantics so the UI + // never sees a missing-file error on a fresh install. + Map empty; + auto saved = save(game, empty); + if (!saved) return Result::err(saved.error()); + return Result::ok(std::move(empty)); + } + auto text = fs_.readText(p); + if (!text) return Result::err(text.error()); + try { + auto j = nlohmann::json::parse(text.value()); + Map out; + for (auto it = j.begin(); it != j.end(); ++it) { + std::uint32_t key = static_cast(std::stoul(it.key())); + out.emplace(key, it.value().template get()); + } + return Result::ok(std::move(out)); + } catch (const std::exception& e) { + return Result::err(std::string("JSON parse error: ") + e.what()); + } + } + + Result save(Game game, const Map& collection) override { + nlohmann::json j = nlohmann::json::object(); + for (const auto& [id, card] : collection) { + j[std::to_string(id)] = card; + } + const auto p = collectionPath(game); + auto dirRes = fs_.ensureDirectory(p.parent_path()); + if (!dirRes) return dirRes; + return fs_.writeText(p, j.dump(2)); + } + +private: + std::filesystem::path collectionPath(Game game) const { + return std::filesystem::path(config_.current().dataStorage) / + dirName_(game) / "collection.json"; + } + + IFileSystem& fs_; + ConfigService& config_; + DirNameFn dirName_; +}; + +} // namespace ccm diff --git a/core/include/ccm/infra/JsonSetRepository.hpp b/core/include/ccm/infra/JsonSetRepository.hpp new file mode 100644 index 0000000..f462a50 --- /dev/null +++ b/core/include/ccm/infra/JsonSetRepository.hpp @@ -0,0 +1,32 @@ +#pragma once + +// JsonSetRepository: persists vector to `//sets.json`. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/IFileSystem.hpp" +#include "ccm/ports/ISetRepository.hpp" +#include "ccm/services/ConfigService.hpp" + +#include +#include + +namespace ccm { + +class JsonSetRepository final : public ISetRepository { +public: + using DirNameFn = std::function; + + JsonSetRepository(IFileSystem& fs, ConfigService& config, DirNameFn dirName); + + Result> load(Game game) override; + Result save(Game game, const std::vector& sets) override; + +private: + IFileSystem& fs_; + ConfigService& config_; + DirNameFn dirName_; + + [[nodiscard]] std::filesystem::path setsPath(Game game) const; +}; + +} // namespace ccm diff --git a/core/include/ccm/infra/LocalImageStore.hpp b/core/include/ccm/infra/LocalImageStore.hpp new file mode 100644 index 0000000..ce08bd2 --- /dev/null +++ b/core/include/ccm/infra/LocalImageStore.hpp @@ -0,0 +1,37 @@ +#pragma once + +// LocalImageStore: stores card images under +// `//images/`. +// Implements IImageStore, used by ImageService. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/IFileSystem.hpp" +#include "ccm/ports/IImageStore.hpp" +#include "ccm/services/ConfigService.hpp" + +#include +#include + +namespace ccm { + +class LocalImageStore final : public IImageStore { +public: + using DirNameFn = std::function; + + LocalImageStore(IFileSystem& fs, ConfigService& config, DirNameFn dirName); + + Result copyIn(Game game, + const std::filesystem::path& srcPath, + const std::string& targetName) override; + Result remove(Game game, const std::string& imageName) override; + std::filesystem::path resolvePath(Game game, const std::string& imageName) const override; + +private: + IFileSystem& fs_; + ConfigService& config_; + DirNameFn dirName_; + + [[nodiscard]] std::filesystem::path gameImageDir(Game game) const; +}; + +} // namespace ccm diff --git a/core/include/ccm/infra/StdFileSystem.hpp b/core/include/ccm/infra/StdFileSystem.hpp new file mode 100644 index 0000000..d84daa9 --- /dev/null +++ b/core/include/ccm/infra/StdFileSystem.hpp @@ -0,0 +1,25 @@ +#pragma once + +// std::filesystem-backed implementation of IFileSystem. + +#include "ccm/ports/IFileSystem.hpp" + +namespace ccm { + +class StdFileSystem final : public IFileSystem { +public: + [[nodiscard]] bool exists(const std::filesystem::path& p) const override; + [[nodiscard]] bool isDirectory(const std::filesystem::path& p) const override; + + Result ensureDirectory(const std::filesystem::path& p) override; + Result readText(const std::filesystem::path& p) override; + Result writeText(const std::filesystem::path& p, std::string_view contents) override; + Result copyFile(const std::filesystem::path& from, + const std::filesystem::path& to, + bool overwrite) override; + Result remove(const std::filesystem::path& p) override; + Result> listDirectory( + const std::filesystem::path& p) override; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/ICardPreviewSource.hpp b/core/include/ccm/ports/ICardPreviewSource.hpp new file mode 100644 index 0000000..43a3046 --- /dev/null +++ b/core/include/ccm/ports/ICardPreviewSource.hpp @@ -0,0 +1,30 @@ +#pragma once + +// ICardPreviewSource - resolves the preview image URL for a single card via +// the active game's external API. Implementations stay HTTP-bound, no UI deps. +// +// Modeled after per-game `getImage` helpers in +// `src/components/{magic,pokemon}/Selected*Panel.tsx`. The resulting URL is +// then fetched as raw image bytes by `CardPreviewService` and decoded by the +// UI layer (wxImage in our wx adapter). + +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +class ICardPreviewSource { +public: + virtual ~ICardPreviewSource() = default; + + // Resolve the preview image URL for a single card. `setNo` is optional + // (empty string is fine); some game APIs (e.g. Pokemon TCG) can use it as + // a more precise lookup key, others (Magic/Scryfall) ignore it. + virtual Result fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/ICollectionRepository.hpp b/core/include/ccm/ports/ICollectionRepository.hpp new file mode 100644 index 0000000..21e4971 --- /dev/null +++ b/core/include/ccm/ports/ICollectionRepository.hpp @@ -0,0 +1,25 @@ +#pragma once + +// ICollectionRepository - persistence port for a per-game card collection, +// keyed by uint32_t id. Mirrors the HashMap in the original Rust code. + +#include "ccm/domain/Enums.hpp" +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +template +class ICollectionRepository { +public: + using Map = std::map; + + virtual ~ICollectionRepository() = default; + + virtual Result load(Game game) = 0; + virtual Result save(Game game, const Map& collection) = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/IFileSystem.hpp b/core/include/ccm/ports/IFileSystem.hpp new file mode 100644 index 0000000..174990a --- /dev/null +++ b/core/include/ccm/ports/IFileSystem.hpp @@ -0,0 +1,33 @@ +#pragma once + +// IFileSystem - filesystem operations the services need, expressed as a +// narrow port. Real implementation is `StdFileSystem` (over ). +// In-memory implementation can be plugged in for tests. + +#include "ccm/util/Result.hpp" + +#include +#include +#include + +namespace ccm { + +class IFileSystem { +public: + virtual ~IFileSystem() = default; + + [[nodiscard]] virtual bool exists(const std::filesystem::path& p) const = 0; + [[nodiscard]] virtual bool isDirectory(const std::filesystem::path& p) const = 0; + + virtual Result ensureDirectory(const std::filesystem::path& p) = 0; + virtual Result readText(const std::filesystem::path& p) = 0; + virtual Result writeText(const std::filesystem::path& p, std::string_view contents) = 0; + virtual Result copyFile(const std::filesystem::path& from, + const std::filesystem::path& to, + bool overwrite) = 0; + virtual Result remove(const std::filesystem::path& p) = 0; + virtual Result> listDirectory( + const std::filesystem::path& p) = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/IHttpClient.hpp b/core/include/ccm/ports/IHttpClient.hpp new file mode 100644 index 0000000..589619a --- /dev/null +++ b/core/include/ccm/ports/IHttpClient.hpp @@ -0,0 +1,26 @@ +#pragma once + +// IHttpClient - tiny abstraction over HTTP GET so the rest of the codebase +// never sees libcurl/cpr directly. Tests can substitute a fake client. + +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +class IHttpClient { +public: + virtual ~IHttpClient() = default; + + // Issue a blocking HTTPS GET. Returns the response body on success, an + // error string on failure (no exceptions across the port boundary). + // + // The returned `std::string` is a raw byte buffer - it is NOT decoded as + // text. Binary payloads (e.g. PNG/JPEG image bytes for the card preview + // feature) round-trip through this method intact. + virtual Result get(std::string_view url) = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/IImageStore.hpp b/core/include/ccm/ports/IImageStore.hpp new file mode 100644 index 0000000..a311e9e --- /dev/null +++ b/core/include/ccm/ports/IImageStore.hpp @@ -0,0 +1,34 @@ +#pragma once + +// IImageStore - manages card image files on disk inside the per-game +// `images/` subdirectory. Returns absolute paths so the UI can decode with +// whichever image library it likes (we use wxImage in the wx adapter); core +// stays free of any image decoding dependency. + +#include "ccm/domain/Enums.hpp" +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +class IImageStore { +public: + virtual ~IImageStore() = default; + + // Copy `srcPath` into the per-game image dir under filename `targetName` + // (extension preserved from `srcPath`). Returns the final filename + // (basename only, no path) on success. + virtual Result copyIn(Game game, + const std::filesystem::path& srcPath, + const std::string& targetName) = 0; + + // Delete `imageName` from the per-game image dir. + virtual Result remove(Game game, const std::string& imageName) = 0; + + // Resolve `imageName` to an absolute path inside the per-game image dir. + virtual std::filesystem::path resolvePath(Game game, const std::string& imageName) const = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/ports/ISetRepository.hpp b/core/include/ccm/ports/ISetRepository.hpp new file mode 100644 index 0000000..95d348f --- /dev/null +++ b/core/include/ccm/ports/ISetRepository.hpp @@ -0,0 +1,22 @@ +#pragma once + +// ISetRepository - persistence port for the cached `sets.json` of a game. +// Stored as a flat list to mirror the original Rust file layout. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/util/Result.hpp" + +#include + +namespace ccm { + +class ISetRepository { +public: + virtual ~ISetRepository() = default; + + virtual Result> load(Game game) = 0; + virtual Result save(Game game, const std::vector& sets) = 0; +}; + +} // namespace ccm diff --git a/core/include/ccm/services/CardFilter.hpp b/core/include/ccm/services/CardFilter.hpp new file mode 100644 index 0000000..ecf3399 --- /dev/null +++ b/core/include/ccm/services/CardFilter.hpp @@ -0,0 +1,41 @@ +#pragma once + +// CardFilter - row matcher aligned with TableTemplate.tsx::applyFilter semantics. +// kept a single `filter` string in the table component and, before rendering, +// kept only the rows where *any* of the `tableFields` value-key columns +// (string- or number-typed) contained the filter as a substring. Boolean flag +// columns (foil / signed / altered / holo / firstEdition) were skipped because +// `typeof` was neither "string" nor "number". +// +// We replicate that logic here as free functions so the UI can stay dumb (it +// just owns a wxTextCtrl and re-asks core which rows match). +// +// Differences worth knowing: +// * The match is case-insensitive on **both** sides — the old JS path only lowercased +// the cell value, leaving the filter as-typed, which made uppercase input +// never match. Lowercasing the filter too is the obvious-intent fix and +// keeps round-trip semantics for any filter the original UI would accept +// (lowercase filters behave identically). +// * An empty filter matches every row, exactly as in JS where every string +// `.includes("")` returns true. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" + +#include + +namespace ccm { + +// Magic value-key columns from the MtgTable.tsx tableFields list: +// name, set.name, language, condition, amount, note. +// Foil/Signed/Altered are bool-typed and intentionally excluded. +[[nodiscard]] bool matchesMagicFilter(const MagicCard& card, + std::string_view filter); + +// Pokemon value-key columns from PokemonTable.tsx tableFields list: +// name, set.name, setNo, language, condition, amount, note. +// Holo/FirstEdition/Signed/Altered are bool-typed and excluded. +[[nodiscard]] bool matchesPokemonFilter(const PokemonCard& card, + std::string_view filter); + +} // namespace ccm diff --git a/core/include/ccm/services/CardPreviewService.hpp b/core/include/ccm/services/CardPreviewService.hpp new file mode 100644 index 0000000..a9b62bf --- /dev/null +++ b/core/include/ccm/services/CardPreviewService.hpp @@ -0,0 +1,55 @@ +#pragma once + +// CardPreviewService: high-level operation for resolving and downloading a +// card's preview image from the active game's external API. Mirrors the +// `EntryPanelTemplate.tsx::useEffect([entry])` flow: +// 1. Per-game `ICardPreviewSource` resolves the card -> an image URL. +// 2. Service issues a GET against that URL through `IHttpClient`. +// 3. Raw bytes are returned to the caller (UI decodes them with whichever +// image lib it prefers - we use wxImage in the wx adapter). +// +// Sources are registered through `IGameModule::cardPreviewSource()`. Modules +// that return nullptr are silently skipped; games without a registered source +// produce an explicit error result on lookup rather than silently doing nothing. + +#include "ccm/domain/Enums.hpp" +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/ICardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" +#include "ccm/util/Result.hpp" + +#include +#include +#include + +namespace ccm { + +class CardPreviewService { +public: + explicit CardPreviewService(IHttpClient& http); + + // Register a game module's preview source. Calling this with a module + // whose `cardPreviewSource()` returns nullptr is a no-op (the game has + // no remote preview API). The module reference must remain valid for + // the lifetime of the service. + void registerModule(IGameModule& module); + + // Resolve and download the preview image bytes for a single card. + // The returned `std::string` is a raw byte buffer (PNG/JPEG payload) - + // it is NOT decoded text. Use std::string::data()/size() with whatever + // image-decoding facility your UI provides. + Result fetchPreviewBytes(Game game, + std::string_view name, + std::string_view setId, + std::string_view setNo); + + // Download image bytes from a fully-qualified URL without going through + // per-game preview-source resolution. + Result fetchImageBytesByUrl(std::string_view url); + +private: + IHttpClient& http_; + std::unordered_map sources_; +}; + +} // namespace ccm diff --git a/core/include/ccm/services/CardSorter.hpp b/core/include/ccm/services/CardSorter.hpp new file mode 100644 index 0000000..78c3546 --- /dev/null +++ b/core/include/ccm/services/CardSorter.hpp @@ -0,0 +1,62 @@ +#pragma once + +// CardSorter - per-column sorting behavior matching the established table model +// `tableFields` configuration. The original TS code stored each column's +// (valueKey, sortKey) pair on a config object so that, e.g., the "Set" column +// could *display* `set.name` while sorting by `set.releaseDate`. We replicate +// that mapping here as two enums (one per supported game), each variant naming +// a sort key. The free functions below run a stable sort over a vector using +// the same per-type rules as the original `byField`: +// +// * strings -> case-insensitive (lowercased) `<` / `>` +// * numbers -> direct `<` / `>` +// * booleans -> direct `<` / `>` (so false < true; unset flags first when asc) +// +// Stable sort matches the JS `Array.prototype.sort` guarantee from ES2019; the +// UI relies on it so successive clicks on different columns compose predictably +// (e.g. sort by name, then by set => grouped by set, name-sorted within each). + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" + +#include + +namespace ccm { + +// One value per *real* (non-spacer) column of the Magic table, in the same +// order as the Magic tableFields list. +enum class MagicSortColumn { + Name, + SetReleaseDate, // value column shows set.name, sort key is set.releaseDate + Language, + Condition, + Amount, + Foil, + Signed, + Altered, + Note, +}; + +// Pokemon equivalent (PokemonTable.tsx tableFields). Adds Holo + FirstEdition, +// drops Foil. +enum class PokemonSortColumn { + Name, + SetReleaseDate, + Language, + Condition, + Amount, + Holo, + FirstEdition, + Signed, + Altered, + Note, +}; + +// Stable in-place sort. `ascending=false` runs the same comparator with +// inverted sign, matching `byField(field, asc)` semantics. +void sortMagicCards(std::vector& cards, MagicSortColumn column, + bool ascending); +void sortPokemonCards(std::vector& cards, PokemonSortColumn column, + bool ascending); + +} // namespace ccm diff --git a/core/include/ccm/services/CollectionService.hpp b/core/include/ccm/services/CollectionService.hpp new file mode 100644 index 0000000..17151d5 --- /dev/null +++ b/core/include/ccm/services/CollectionService.hpp @@ -0,0 +1,126 @@ +#pragma once + +// CollectionService: high-level CRUD over the per-game collection. +// Header-only template that operates on the ICollectionRepository port and +// delegates image cleanup to an IImageStore on remove. +// +// This is the C++ equivalent of the Rust generic helpers in +// `templates/card_service_templates.rs` (add_entry_to_collection, +// update_entry_in_collection, get_entry_by_id, delete_entry_by_id, ...). +// +// Each TCard must expose `std::uint32_t id` and `std::vector images`. + +#include "ccm/domain/Enums.hpp" +#include "ccm/ports/ICollectionRepository.hpp" +#include "ccm/ports/IImageStore.hpp" +#include "ccm/util/Result.hpp" + +#include +#include +#include +#include +#include +#include +#include + +namespace ccm { + +template +class CollectionService { +public: + using Map = std::map; + + CollectionService(ICollectionRepository& repo, IImageStore& imageStore) + : repo_(repo), imageStore_(imageStore) {} + + Result> list(Game game) { + auto loaded = repo_.load(game); + if (!loaded) return Result>::err(loaded.error()); + Map map = std::move(loaded).value(); + std::vector out; + out.reserve(map.size()); + for (auto& [id, card] : map) { + (void)id; + out.push_back(std::move(card)); + } + return Result>::ok(std::move(out)); + } + + [[nodiscard]] static std::uint32_t nextId(const Map& map) noexcept { + if (map.empty()) return 0; + return map.rbegin()->first + 1; + } + + // Add a card. The `id` field on the input is overwritten with the next + // free id (matching the Rust HashMap-keyed behavior). + Result add(Game game, TCard card) { + auto loaded = repo_.load(game); + if (!loaded) return Result::err(loaded.error()); + Map map = std::move(loaded).value(); + const std::uint32_t newId = nextId(map); + card.id = newId; + map.emplace(newId, std::move(card)); + auto saved = repo_.save(game, map); + if (!saved) return Result::err(saved.error()); + return Result::ok(newId); + } + + // Update an existing entry, identified by `card.id`. If the id is not + // present, an error is returned. + Result update(Game game, TCard card) { + auto loaded = repo_.load(game); + if (!loaded) return Result::err(loaded.error()); + Map map = std::move(loaded).value(); + auto it = map.find(card.id); + if (it == map.end()) { + return Result::err("Card with id " + std::to_string(card.id) + + " not found in collection."); + } + it->second = std::move(card); + return repo_.save(game, map); + } + + // Remove the card with the given id. Also deletes any associated images + // via the IImageStore (best-effort - image removal failures are logged in + // the error string but the card itself is still purged from the JSON). + Result remove(Game game, std::uint32_t id) { + auto loaded = repo_.load(game); + if (!loaded) return Result::err(loaded.error()); + Map map = std::move(loaded).value(); + auto it = map.find(id); + if (it == map.end()) { + return Result::err("Card with id " + std::to_string(id) + " not found."); + } + std::string imgErr; + for (const auto& image : it->second.images) { + auto rm = imageStore_.remove(game, image); + if (!rm) { + if (!imgErr.empty()) imgErr += "; "; + imgErr += rm.error(); + } + } + map.erase(it); + auto saved = repo_.save(game, map); + if (!saved) return saved; + if (!imgErr.empty()) { + return Result::err("Card removed but image cleanup had issues: " + imgErr); + } + return Result::ok(); + } + + // Look up a card by id without mutating storage. + Result> findById(Game game, std::uint32_t id) { + auto loaded = repo_.load(game); + if (!loaded) return Result>::err(loaded.error()); + const auto& m = loaded.value(); + auto it = m.find(id); + if (it == m.end()) return Result>::ok(std::nullopt); + return Result>::ok(it->second); + } + +private: + ICollectionRepository& repo_; + IImageStore& imageStore_; +}; + +} // namespace ccm diff --git a/core/include/ccm/services/ConfigService.hpp b/core/include/ccm/services/ConfigService.hpp new file mode 100644 index 0000000..ff0d279 --- /dev/null +++ b/core/include/ccm/services/ConfigService.hpp @@ -0,0 +1,41 @@ +#pragma once + +// ConfigService: owns the live `Configuration`, persists it to `config.json` +// next to the executable. Mirrors `util/config.rs` behavior - a missing file +// is auto-created with sensible defaults on first launch. + +#include "ccm/domain/Configuration.hpp" +#include "ccm/ports/IFileSystem.hpp" +#include "ccm/util/Result.hpp" + +#include + +namespace ccm { + +class ConfigService { +public: + // `configFilePath` is the absolute path to `config.json`. The defaults + // applied to a freshly created config use `defaultDataStorage` for the + // dataStorage field. + ConfigService(IFileSystem& fs, + std::filesystem::path configFilePath, + std::filesystem::path defaultDataStorage); + + // Load (or create) the configuration. Must be called once at startup. + Result initialize(); + + [[nodiscard]] const Configuration& current() const noexcept { return current_; } + + // Replace the live configuration and persist immediately. + Result store(Configuration cfg); + +private: + IFileSystem& fs_; + std::filesystem::path path_; + std::filesystem::path defaultDataStorage_; + Configuration current_{}; + + [[nodiscard]] Configuration makeDefault() const; +}; + +} // namespace ccm diff --git a/core/include/ccm/services/ImageService.hpp b/core/include/ccm/services/ImageService.hpp new file mode 100644 index 0000000..1b0e999 --- /dev/null +++ b/core/include/ccm/services/ImageService.hpp @@ -0,0 +1,70 @@ +#pragma once + +// ImageService: applies the established image filename rules and delegates the actual +// disk operations to an IImageStore. +// +// Filename rule (mirrors Rust `magic/card_services.rs` and +// `pokemon/card_services.rs`): +// - new entry -> "{set}+{name}+{idx}.{ext}" +// - existing -> "{id}+{set}+{name}+{idx}.{ext}" +// +// The "+name+set+name+" convention is preserved byte-for-byte so legacy +// collections continue to display correctly when imported. + +#include "ccm/domain/Enums.hpp" +#include "ccm/ports/IImageStore.hpp" +#include "ccm/util/Result.hpp" + +#include +#include +#include +#include + +namespace ccm { + +class ImageService { +public: + explicit ImageService(IImageStore& store); + + // Compute the next image index from the previously stored image filenames + // for a card. Implements the same logic as the Rust card_services modules. + static std::uint8_t nextImageIndex(const std::vector& existingImages); + + // Build the target filename (without extension) for a new image attached + // to a card. Pass the card's existing id (0 if not yet stored) and a + // `newEntry` flag matching the established semantic. + static std::string buildTargetName(bool newEntry, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + std::uint8_t index); + + // Convenience: build target name + delegate copy to the IImageStore. + Result addImage(Game game, + const std::filesystem::path& srcPath, + bool newEntry, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + const std::vector& existingImages); + + Result removeImage(Game game, const std::string& imageName); + + // Ensure image filenames for a persisted card include the card id prefix. + // This upgrades "create-mode" names (`set+name+idx.ext`) to + // `id+set+name+idx.ext` to match the ccm2-compatible naming scheme. + Result> normalizeNamesForPersistedCard( + Game game, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + const std::vector& imageNames); + + [[nodiscard]] std::filesystem::path resolveImagePath(Game game, + const std::string& imageName) const; + +private: + IImageStore& store_; +}; + +} // namespace ccm diff --git a/core/include/ccm/services/SetService.hpp b/core/include/ccm/services/SetService.hpp new file mode 100644 index 0000000..80d4772 --- /dev/null +++ b/core/include/ccm/services/SetService.hpp @@ -0,0 +1,38 @@ +#pragma once + +// SetService: high-level operations for fetching and caching set data. +// Wraps an ISetRepository (cache) and dispatches to the correct ISetSource +// based on the active IGameModule. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/ISetRepository.hpp" +#include "ccm/util/Result.hpp" + +#include +#include + +namespace ccm { + +class SetService { +public: + explicit SetService(ISetRepository& repo); + + // Register a game module so this service can route fetch requests. + // Pointer must remain valid for the lifetime of the SetService. + void registerModule(IGameModule* module); + + // Force a fresh fetch from the API for `game`, persist it via the + // repository, and return the new list. + Result> updateSets(Game game); + + // Cached read; returns an error if no local data exists yet. + Result> getSets(Game game); + +private: + ISetRepository& repo_; + std::unordered_map modules_; +}; + +} // namespace ccm diff --git a/core/include/ccm/util/FsNames.hpp b/core/include/ccm/util/FsNames.hpp new file mode 100644 index 0000000..1899ba9 --- /dev/null +++ b/core/include/ccm/util/FsNames.hpp @@ -0,0 +1,24 @@ +#pragma once + +// Pure functions for filename munging. Ported from the original `util/fs.rs` so +// that file naming on disk stays identical between the two codebases. + +#include +#include +#include + +namespace ccm { + +// Replace problematic characters so the result is safe to use as a filename +// component. Mirrors `format_text_for_fs` in Rust (drops apostrophes/commas, +// strips spaces, replaces `:` with `-`, `&` with `And`, `|` with `Or`, +// flattens accented vowels). Pure; safe at any call site. +std::string formatTextForFs(std::string_view text); + +// Parse the trailing 1- or 2-digit numeric index from a filename. Examples: +// "Image1.png" -> 1 +// "Image22.jpeg" -> 22 +// Returns 0 on parse failure, matching the optimistic Rust behavior. +std::uint8_t parseIndexFromFilename(std::string_view filename) noexcept; + +} // namespace ccm diff --git a/core/include/ccm/util/Result.hpp b/core/include/ccm/util/Result.hpp new file mode 100644 index 0000000..6e4e696 --- /dev/null +++ b/core/include/ccm/util/Result.hpp @@ -0,0 +1,150 @@ +#pragma once + +// A minimal Result type used as a sum-type for fallible operations. +// Mirrors the Rust `Result` style used in the original codebase. +// +// We intentionally do not depend on tl::expected or std::expected so this +// header stays buildable on every toolchain in our matrix (clang 14+, GCC 11+). + +#include +#include +#include +#include +#include + +namespace ccm { + +template +class Result { +public: + using value_type = T; + using error_type = E; + + static Result ok(T value) { return Result(OkTag{}, std::move(value)); } + static Result err(E error) { return Result(ErrTag{}, std::move(error)); } + + Result(const Result& other) : has_value_(other.has_value_) { + if (has_value_) { + ::new (static_cast(&value_)) T(other.value_); + } else { + ::new (static_cast(&error_)) E(other.error_); + } + } + + Result(Result&& other) noexcept : has_value_(other.has_value_) { + if (has_value_) { + ::new (static_cast(&value_)) T(std::move(other.value_)); + } else { + ::new (static_cast(&error_)) E(std::move(other.error_)); + } + } + + Result& operator=(const Result& other) { + if (this == &other) return *this; + destroy(); + has_value_ = other.has_value_; + if (has_value_) { + ::new (static_cast(&value_)) T(other.value_); + } else { + ::new (static_cast(&error_)) E(other.error_); + } + return *this; + } + + Result& operator=(Result&& other) noexcept { + if (this == &other) return *this; + destroy(); + has_value_ = other.has_value_; + if (has_value_) { + ::new (static_cast(&value_)) T(std::move(other.value_)); + } else { + ::new (static_cast(&error_)) E(std::move(other.error_)); + } + return *this; + } + + ~Result() { destroy(); } + + [[nodiscard]] bool isOk() const noexcept { return has_value_; } + [[nodiscard]] bool isErr() const noexcept { return !has_value_; } + explicit operator bool() const noexcept { return has_value_; } + + const T& value() const& { + if (!has_value_) throw std::logic_error("Result::value() on err"); + return value_; + } + T& value() & { + if (!has_value_) throw std::logic_error("Result::value() on err"); + return value_; + } + T&& value() && { + if (!has_value_) throw std::logic_error("Result::value() on err"); + return std::move(value_); + } + + const E& error() const& { + if (has_value_) throw std::logic_error("Result::error() on ok"); + return error_; + } + E&& error() && { + if (has_value_) throw std::logic_error("Result::error() on ok"); + return std::move(error_); + } + + template + T valueOr(U&& fallback) const& { + return has_value_ ? value_ : static_cast(std::forward(fallback)); + } + +private: + struct OkTag {}; + struct ErrTag {}; + + Result(OkTag, T value) : has_value_(true) { + ::new (static_cast(&value_)) T(std::move(value)); + } + Result(ErrTag, E error) : has_value_(false) { + ::new (static_cast(&error_)) E(std::move(error)); + } + + void destroy() noexcept { + if (has_value_) { + value_.~T(); + } else { + error_.~E(); + } + } + + bool has_value_; + union { + T value_; + E error_; + }; +}; + +// Specialization for void-returning fallible operations. +template +class Result { +public: + using value_type = void; + using error_type = E; + + static Result ok() { return Result(true, E{}); } + static Result err(E error) { return Result(false, std::move(error)); } + + [[nodiscard]] bool isOk() const noexcept { return has_value_; } + [[nodiscard]] bool isErr() const noexcept { return !has_value_; } + explicit operator bool() const noexcept { return has_value_; } + + const E& error() const& { + if (has_value_) throw std::logic_error("Result::error() on ok"); + return error_; + } + +private: + Result(bool ok, E error) : has_value_(ok), error_(std::move(error)) {} + bool has_value_; + E error_; +}; + +} // namespace ccm diff --git a/core/src/domain/Configuration.cpp b/core/src/domain/Configuration.cpp new file mode 100644 index 0000000..520c488 --- /dev/null +++ b/core/src/domain/Configuration.cpp @@ -0,0 +1,19 @@ +#include "ccm/domain/Configuration.hpp" + +namespace ccm { + +void to_json(nlohmann::json& j, const Configuration& c) { + j = nlohmann::json{ + {"dataStorage", c.dataStorage}, + {"defaultGame", c.defaultGame}, + {"theme", c.theme}, + }; +} + +void from_json(const nlohmann::json& j, Configuration& c) { + j.at("dataStorage").get_to(c.dataStorage); + j.at("defaultGame").get_to(c.defaultGame); + c.theme = j.value("theme", Theme::Light); +} + +} // namespace ccm diff --git a/core/src/domain/Enums.cpp b/core/src/domain/Enums.cpp new file mode 100644 index 0000000..97ee986 --- /dev/null +++ b/core/src/domain/Enums.cpp @@ -0,0 +1,139 @@ +#include "ccm/domain/Enums.hpp" + +#include +#include + +namespace ccm { + +std::string_view to_string(Game g) noexcept { + switch (g) { + case Game::Magic: return "Magic"; + case Game::Pokemon: return "Pokemon"; + } + return "Magic"; +} + +std::string_view to_string(Language l) noexcept { + switch (l) { + case Language::English: return "English"; + case Language::German: return "German"; + case Language::French: return "French"; + case Language::Spanish: return "Spanish"; + case Language::Italian: return "Italian"; + case Language::Chinese: return "Chinese"; + case Language::Japanese: return "Japanese"; + case Language::Russian: return "Russian"; + } + return "English"; +} + +std::string_view to_string(Condition c) noexcept { + switch (c) { + case Condition::Mint: return "Mint"; + case Condition::NearMint: return "NearMint"; + case Condition::Excellent: return "Excellent"; + case Condition::Good: return "Good"; + case Condition::LightPlayed: return "LightPlayed"; + case Condition::Played: return "Played"; + case Condition::Poor: return "Poor"; + } + return "Mint"; +} + +std::string_view to_string(Theme t) noexcept { + switch (t) { + case Theme::Light: return "Light"; + case Theme::Dark: return "Dark"; + } + return "Light"; +} + +std::optional gameFromString(std::string_view s) noexcept { + if (s == "Magic") return Game::Magic; + if (s == "Pokemon") return Game::Pokemon; + return std::nullopt; +} + +std::optional languageFromString(std::string_view s) noexcept { + if (s == "English") return Language::English; + if (s == "German") return Language::German; + if (s == "French") return Language::French; + if (s == "Spanish") return Language::Spanish; + if (s == "Italian") return Language::Italian; + if (s == "Chinese") return Language::Chinese; + if (s == "Japanese") return Language::Japanese; + if (s == "Russian") return Language::Russian; + return std::nullopt; +} + +std::optional conditionFromString(std::string_view s) noexcept { + if (s == "Mint") return Condition::Mint; + if (s == "NearMint") return Condition::NearMint; + if (s == "Excellent") return Condition::Excellent; + if (s == "Good") return Condition::Good; + if (s == "LightPlayed") return Condition::LightPlayed; + if (s == "Played") return Condition::Played; + if (s == "Poor") return Condition::Poor; + return std::nullopt; +} + +std::optional themeFromString(std::string_view s) noexcept { + if (s == "Light") return Theme::Light; + if (s == "Dark") return Theme::Dark; + return std::nullopt; +} + +const std::array& allGames() noexcept { + static constexpr std::array v{Game::Magic, Game::Pokemon}; + return v; +} + +const std::array& allLanguages() noexcept { + static constexpr std::array v{ + Language::English, Language::German, Language::French, Language::Spanish, + Language::Italian, Language::Chinese, Language::Japanese, Language::Russian + }; + return v; +} + +const std::array& allConditions() noexcept { + static constexpr std::array v{ + Condition::Mint, Condition::NearMint, Condition::Excellent, + Condition::Good, Condition::LightPlayed, Condition::Played, Condition::Poor + }; + return v; +} + +const std::array& allThemes() noexcept { + static constexpr std::array v{Theme::Light, Theme::Dark}; + return v; +} + +void to_json(nlohmann::json& j, Game v) { j = std::string(to_string(v)); } +void to_json(nlohmann::json& j, Language v) { j = std::string(to_string(v)); } +void to_json(nlohmann::json& j, Condition v) { j = std::string(to_string(v)); } +void to_json(nlohmann::json& j, Theme v) { j = std::string(to_string(v)); } + +void from_json(const nlohmann::json& j, Game& v) { + auto parsed = gameFromString(j.get()); + if (!parsed) throw std::invalid_argument("Unknown Game value: " + j.get()); + v = *parsed; +} +void from_json(const nlohmann::json& j, Language& v) { + auto parsed = languageFromString(j.get()); + if (!parsed) throw std::invalid_argument("Unknown Language value: " + j.get()); + v = *parsed; +} +void from_json(const nlohmann::json& j, Condition& v) { + auto parsed = conditionFromString(j.get()); + if (!parsed) throw std::invalid_argument("Unknown Condition value: " + j.get()); + v = *parsed; +} + +void from_json(const nlohmann::json& j, Theme& v) { + auto parsed = themeFromString(j.get()); + if (!parsed) throw std::invalid_argument("Unknown Theme value: " + j.get()); + v = *parsed; +} + +} // namespace ccm diff --git a/core/src/domain/MagicCard.cpp b/core/src/domain/MagicCard.cpp new file mode 100644 index 0000000..56a7858 --- /dev/null +++ b/core/src/domain/MagicCard.cpp @@ -0,0 +1,35 @@ +#include "ccm/domain/MagicCard.hpp" + +namespace ccm { + +void to_json(nlohmann::json& j, const MagicCard& c) { + j = nlohmann::json{ + {"id", c.id}, + {"amount", c.amount}, + {"name", c.name}, + {"set", c.set}, + {"note", c.note}, + {"images", c.images}, + {"language", c.language}, + {"condition", c.condition}, + {"foil", c.foil}, + {"signed", c.signed_}, + {"altered", c.altered}, + }; +} + +void from_json(const nlohmann::json& j, MagicCard& c) { + j.at("id").get_to(c.id); + j.at("amount").get_to(c.amount); + j.at("name").get_to(c.name); + j.at("set").get_to(c.set); + j.at("note").get_to(c.note); + j.at("images").get_to(c.images); + j.at("language").get_to(c.language); + j.at("condition").get_to(c.condition); + j.at("foil").get_to(c.foil); + j.at("signed").get_to(c.signed_); + j.at("altered").get_to(c.altered); +} + +} // namespace ccm diff --git a/core/src/domain/PokemonCard.cpp b/core/src/domain/PokemonCard.cpp new file mode 100644 index 0000000..22d4517 --- /dev/null +++ b/core/src/domain/PokemonCard.cpp @@ -0,0 +1,39 @@ +#include "ccm/domain/PokemonCard.hpp" + +namespace ccm { + +void to_json(nlohmann::json& j, const PokemonCard& c) { + j = nlohmann::json{ + {"id", c.id}, + {"amount", c.amount}, + {"name", c.name}, + {"set", c.set}, + {"setNo", c.setNo}, + {"note", c.note}, + {"images", c.images}, + {"language", c.language}, + {"condition", c.condition}, + {"firstEdition", c.firstEdition}, + {"holo", c.holo}, + {"signed", c.signed_}, + {"altered", c.altered}, + }; +} + +void from_json(const nlohmann::json& j, PokemonCard& c) { + j.at("id").get_to(c.id); + j.at("amount").get_to(c.amount); + j.at("name").get_to(c.name); + j.at("set").get_to(c.set); + j.at("setNo").get_to(c.setNo); + j.at("note").get_to(c.note); + j.at("images").get_to(c.images); + j.at("language").get_to(c.language); + j.at("condition").get_to(c.condition); + j.at("firstEdition").get_to(c.firstEdition); + j.at("holo").get_to(c.holo); + j.at("signed").get_to(c.signed_); + j.at("altered").get_to(c.altered); +} + +} // namespace ccm diff --git a/core/src/domain/Set.cpp b/core/src/domain/Set.cpp new file mode 100644 index 0000000..47402f2 --- /dev/null +++ b/core/src/domain/Set.cpp @@ -0,0 +1,19 @@ +#include "ccm/domain/Set.hpp" + +namespace ccm { + +void to_json(nlohmann::json& j, const Set& s) { + j = nlohmann::json{ + {"id", s.id}, + {"name", s.name}, + {"releaseDate", s.releaseDate}, + }; +} + +void from_json(const nlohmann::json& j, Set& s) { + j.at("id").get_to(s.id); + j.at("name").get_to(s.name); + j.at("releaseDate").get_to(s.releaseDate); +} + +} // namespace ccm diff --git a/core/src/games/magic/MagicCardPreviewSource.cpp b/core/src/games/magic/MagicCardPreviewSource.cpp new file mode 100644 index 0000000..74db794 --- /dev/null +++ b/core/src/games/magic/MagicCardPreviewSource.cpp @@ -0,0 +1,100 @@ +#include "ccm/games/magic/MagicCardPreviewSource.hpp" + +#include + +#include +#include +#include + +namespace ccm { + +namespace { + +// Percent-encode all bytes that are not unreserved per RFC 3986 +// (A-Z / a-z / 0-9 / - . _ ~). Spaces become %20, quotes become %22, etc. +// Used to keep Scryfall's `q=...` parameter syntactically valid through cpr, +// which does not URL-encode the URL string we hand it. +std::string urlEncode(std::string_view in) { + std::ostringstream out; + out.fill('0'); + out << std::hex << std::uppercase; + for (unsigned char c : in) { + const bool unreserved = + (c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '.' || c == '_' || c == '~'; + if (unreserved) { + out << static_cast(c); + } else { + out << '%'; + out.width(2); + out << static_cast(c); + } + } + return out.str(); +} + +// Apply the same name massaging as the legacy query path before sending. +std::string sanitizeName(std::string_view name) { + std::string s(name); + std::string::size_type pos = 0; + while ((pos = s.find('&', pos)) != std::string::npos) { + s.replace(pos, 1, "and"); + pos += 3; + } + return s; +} + +} // namespace + +MagicCardPreviewSource::MagicCardPreviewSource(IHttpClient& http) : http_(http) {} + +std::string MagicCardPreviewSource::buildSearchUrl(std::string_view name, + std::string_view setId) { + // Build the unencoded query first so the output matches what Scryfall + // would parse: name:"" AND set: + const std::string sanitized = sanitizeName(name); + std::string query = "name:\""; + query += sanitized; + query += "\" AND set:"; + query += std::string(setId); + return std::string("https://api.scryfall.com/cards/search?q=") + urlEncode(query); +} + +Result MagicCardPreviewSource::parseResponse(const std::string& body) { + try { + const auto j = nlohmann::json::parse(body); + if (!j.contains("data") || !j.at("data").is_array()) { + return Result::err("Scryfall response missing 'data' array."); + } + const auto& data = j.at("data"); + if (data.empty()) { + return Result::err("Scryfall returned no matching cards."); + } + const auto& first = data.at(0); + if (!first.contains("image_uris") || !first.at("image_uris").is_object()) { + // Double-faced cards expose image_uris on each face; there is no + // fallback for this and surfaces it as "no preview". + return Result::err("Card has no top-level image_uris."); + } + const auto& uris = first.at("image_uris"); + if (!uris.contains("normal") || !uris.at("normal").is_string()) { + return Result::err("Card has no 'normal' image variant."); + } + return Result::ok(uris.at("normal").get()); + } catch (const std::exception& e) { + return Result::err(std::string("Scryfall JSON parse error: ") + e.what()); + } +} + +Result MagicCardPreviewSource::fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view /*setNo*/) { + const std::string url = buildSearchUrl(name, setId); + auto resp = http_.get(url); + if (!resp) return Result::err(resp.error()); + return parseResponse(resp.value()); +} + +} // namespace ccm diff --git a/core/src/games/magic/MagicGameModule.cpp b/core/src/games/magic/MagicGameModule.cpp new file mode 100644 index 0000000..6dbdb18 --- /dev/null +++ b/core/src/games/magic/MagicGameModule.cpp @@ -0,0 +1,8 @@ +#include "ccm/games/magic/MagicGameModule.hpp" + +namespace ccm { + +MagicGameModule::MagicGameModule(IHttpClient& http) + : setSource_(http), previewSource_(http) {} + +} // namespace ccm diff --git a/core/src/games/magic/MagicSetSource.cpp b/core/src/games/magic/MagicSetSource.cpp new file mode 100644 index 0000000..9bca754 --- /dev/null +++ b/core/src/games/magic/MagicSetSource.cpp @@ -0,0 +1,48 @@ +#include "ccm/games/magic/MagicSetSource.hpp" + +#include + +#include +#include + +namespace ccm { + +MagicSetSource::MagicSetSource(IHttpClient& http) : http_(http) {} + +Result> MagicSetSource::parseResponse(const std::string& body) { + try { + const auto j = nlohmann::json::parse(body); + if (!j.contains("data") || !j.at("data").is_array()) { + return Result>::err("Scryfall response missing 'data' array."); + } + std::vector out; + out.reserve(j.at("data").size()); + for (const auto& entry : j.at("data")) { + // Filter out digital-only sets exactly like the Rust code. + const bool digital = entry.value("digital", false); + if (digital) continue; + + Set s; + s.id = entry.value("code", ""); + s.name = entry.value("name", ""); + // Scryfall returns "released_at" as YYYY-MM-DD; persisted data stores YYYY/MM/DD. + std::string releasedAt = entry.value("released_at", ""); + std::replace(releasedAt.begin(), releasedAt.end(), '-', '/'); + s.releaseDate = std::move(releasedAt); + out.push_back(std::move(s)); + } + std::sort(out.begin(), out.end(), + [](const Set& a, const Set& b) { return a.releaseDate < b.releaseDate; }); + return Result>::ok(std::move(out)); + } catch (const std::exception& e) { + return Result>::err(std::string("Scryfall JSON parse error: ") + e.what()); + } +} + +Result> MagicSetSource::fetchAll() { + auto resp = http_.get(kEndpoint); + if (!resp) return Result>::err(resp.error()); + return parseResponse(resp.value()); +} + +} // namespace ccm diff --git a/core/src/games/pokemon/PokemonCardPreviewSource.cpp b/core/src/games/pokemon/PokemonCardPreviewSource.cpp new file mode 100644 index 0000000..e9cbf34 --- /dev/null +++ b/core/src/games/pokemon/PokemonCardPreviewSource.cpp @@ -0,0 +1,110 @@ +#include "ccm/games/pokemon/PokemonCardPreviewSource.hpp" + +#include + +#include +#include +#include + +namespace ccm { + +namespace { + +// RFC 3986 percent-encoder for the search-query payload. Same rules as the +// Magic implementation; kept private so the two can drift independently if a +// future API requires it. +std::string urlEncode(std::string_view in) { + std::ostringstream out; + out.fill('0'); + out << std::hex << std::uppercase; + for (unsigned char c : in) { + const bool unreserved = + (c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '.' || c == '_' || c == '~'; + if (unreserved) { + out << static_cast(c); + } else { + out << '%'; + out.width(2); + out << static_cast(c); + } + } + return out.str(); +} + +// Strip everything after the first '/' in a Pokemon collector number. +// The Pokemon TCG API expects `number:"4"`, but cards are commonly stored as +// `4/102`. Without this, no API match is found. +std::string normalizeNumber(std::string_view setNo) { + std::string s(setNo); + const auto slash = s.find('/'); + if (slash != std::string::npos) { + s = s.substr(0, slash); + } + return s; +} + +} // namespace + +PokemonCardPreviewSource::PokemonCardPreviewSource(IHttpClient& http) : http_(http) {} + +std::string PokemonCardPreviewSource::buildSearchUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) { + // Build the unencoded query first so the output matches what the Pokemon + // TCG search syntax expects: name:"" set.id: number:. + std::string query = "name:\""; + query += std::string(name); + query += "\""; + if (!setId.empty()) { + query += " set.id:"; + query += std::string(setId); + } + const std::string num = normalizeNumber(setNo); + if (!num.empty()) { + query += " number:"; + query += num; + } + return std::string("https://api.pokemontcg.io/v2/cards?q=") + urlEncode(query); +} + +Result PokemonCardPreviewSource::parseResponse(const std::string& body) { + try { + const auto j = nlohmann::json::parse(body); + if (!j.contains("data") || !j.at("data").is_array()) { + return Result::err("Pokemon TCG response missing 'data' array."); + } + const auto& data = j.at("data"); + if (data.empty()) { + return Result::err("Pokemon TCG returned no matching cards."); + } + const auto& first = data.at(0); + if (!first.contains("images") || !first.at("images").is_object()) { + return Result::err("Card has no 'images' object."); + } + const auto& images = first.at("images"); + if (images.contains("large") && images.at("large").is_string()) { + return Result::ok(images.at("large").get()); + } + if (images.contains("small") && images.at("small").is_string()) { + return Result::ok(images.at("small").get()); + } + return Result::err("Card has no 'large' or 'small' image variant."); + } catch (const std::exception& e) { + return Result::err( + std::string("Pokemon TCG JSON parse error: ") + e.what()); + } +} + +Result PokemonCardPreviewSource::fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) { + const std::string url = buildSearchUrl(name, setId, setNo); + auto resp = http_.get(url); + if (!resp) return Result::err(resp.error()); + return parseResponse(resp.value()); +} + +} // namespace ccm diff --git a/core/src/games/pokemon/PokemonGameModule.cpp b/core/src/games/pokemon/PokemonGameModule.cpp new file mode 100644 index 0000000..9992b83 --- /dev/null +++ b/core/src/games/pokemon/PokemonGameModule.cpp @@ -0,0 +1,8 @@ +#include "ccm/games/pokemon/PokemonGameModule.hpp" + +namespace ccm { + +PokemonGameModule::PokemonGameModule(IHttpClient& http) + : setSource_(http), previewSource_(http) {} + +} // namespace ccm diff --git a/core/src/games/pokemon/PokemonSetSource.cpp b/core/src/games/pokemon/PokemonSetSource.cpp new file mode 100644 index 0000000..6df985c --- /dev/null +++ b/core/src/games/pokemon/PokemonSetSource.cpp @@ -0,0 +1,45 @@ +#include "ccm/games/pokemon/PokemonSetSource.hpp" + +#include + +#include +#include + +namespace ccm { + +PokemonSetSource::PokemonSetSource(IHttpClient& http) : http_(http) {} + +Result> PokemonSetSource::parseResponse(const std::string& body) { + try { + const auto j = nlohmann::json::parse(body); + if (!j.contains("data") || !j.at("data").is_array()) { + return Result>::err( + "Pokemon TCG API response missing 'data' array."); + } + std::vector out; + out.reserve(j.at("data").size()); + for (const auto& entry : j.at("data")) { + Set s; + s.id = entry.value("id", ""); + s.name = entry.value("name", ""); + // Pokemon TCG API already returns "releaseDate" in YYYY/MM/DD; + // no separator rewrite needed (cf. Scryfall's "released_at"). + s.releaseDate = entry.value("releaseDate", ""); + out.push_back(std::move(s)); + } + std::sort(out.begin(), out.end(), + [](const Set& a, const Set& b) { return a.releaseDate < b.releaseDate; }); + return Result>::ok(std::move(out)); + } catch (const std::exception& e) { + return Result>::err( + std::string("Pokemon TCG JSON parse error: ") + e.what()); + } +} + +Result> PokemonSetSource::fetchAll() { + auto resp = http_.get(kEndpoint); + if (!resp) return Result>::err(resp.error()); + return parseResponse(resp.value()); +} + +} // namespace ccm diff --git a/core/src/infra/CprHttpClient.cpp b/core/src/infra/CprHttpClient.cpp new file mode 100644 index 0000000..e644f84 --- /dev/null +++ b/core/src/infra/CprHttpClient.cpp @@ -0,0 +1,30 @@ +#include "ccm/infra/CprHttpClient.hpp" + +#include + +#include + +namespace ccm { + +CprHttpClient::CprHttpClient(std::chrono::milliseconds timeout) : timeout_(timeout) {} + +Result CprHttpClient::get(std::string_view url) { + cpr::Response r = cpr::Get( + cpr::Url{std::string(url)}, + cpr::Timeout{timeout_}, + // Identify ourselves; some APIs rate-limit unknown agents harshly. + cpr::Header{{"User-Agent", "card-collection-manager-3/0.1"}, + {"Accept", "application/json"}} + ); + + if (r.error) { + return Result::err("HTTP error: " + r.error.message); + } + if (r.status_code < 200 || r.status_code >= 300) { + return Result::err( + "HTTP " + std::to_string(r.status_code) + " from " + std::string(url)); + } + return Result::ok(std::move(r.text)); +} + +} // namespace ccm diff --git a/core/src/infra/JsonSetRepository.cpp b/core/src/infra/JsonSetRepository.cpp new file mode 100644 index 0000000..0842fcd --- /dev/null +++ b/core/src/infra/JsonSetRepository.cpp @@ -0,0 +1,41 @@ +#include "ccm/infra/JsonSetRepository.hpp" + +#include + +#include + +namespace ccm { + +namespace fs = std::filesystem; + +JsonSetRepository::JsonSetRepository(IFileSystem& fs, ConfigService& config, DirNameFn dirName) + : fs_(fs), config_(config), dirName_(std::move(dirName)) {} + +fs::path JsonSetRepository::setsPath(Game game) const { + return fs::path(config_.current().dataStorage) / dirName_(game) / "sets.json"; +} + +Result> JsonSetRepository::load(Game game) { + const auto p = setsPath(game); + if (!fs_.exists(p)) { + return Result>::err("Set list not yet downloaded for this game."); + } + auto text = fs_.readText(p); + if (!text) return Result>::err(text.error()); + try { + auto j = nlohmann::json::parse(text.value()); + return Result>::ok(j.get>()); + } catch (const std::exception& e) { + return Result>::err(std::string("sets.json parse error: ") + e.what()); + } +} + +Result JsonSetRepository::save(Game game, const std::vector& sets) { + const auto p = setsPath(game); + auto dir = fs_.ensureDirectory(p.parent_path()); + if (!dir) return dir; + const nlohmann::json j = sets; + return fs_.writeText(p, j.dump(2)); +} + +} // namespace ccm diff --git a/core/src/infra/LocalImageStore.cpp b/core/src/infra/LocalImageStore.cpp new file mode 100644 index 0000000..c1aae41 --- /dev/null +++ b/core/src/infra/LocalImageStore.cpp @@ -0,0 +1,43 @@ +#include "ccm/infra/LocalImageStore.hpp" + +#include + +namespace ccm { + +namespace fs = std::filesystem; + +LocalImageStore::LocalImageStore(IFileSystem& fs, ConfigService& config, DirNameFn dirName) + : fs_(fs), config_(config), dirName_(std::move(dirName)) {} + +fs::path LocalImageStore::gameImageDir(Game game) const { + return fs::path(config_.current().dataStorage) / dirName_(game) / "images"; +} + +Result LocalImageStore::copyIn(Game game, + const fs::path& srcPath, + const std::string& targetName) { + const auto dir = gameImageDir(game); + auto ensure = fs_.ensureDirectory(dir); + if (!ensure) return Result::err(ensure.error()); + + // Preserve the source's extension - the original Rust code does the same. + std::string ext = srcPath.extension().string(); + std::string finalName = targetName + ext; + const auto dest = dir / finalName; + + auto cp = fs_.copyFile(srcPath, dest, /*overwrite=*/true); + if (!cp) return Result::err(cp.error()); + return Result::ok(std::move(finalName)); +} + +Result LocalImageStore::remove(Game game, const std::string& imageName) { + const auto p = gameImageDir(game) / imageName; + if (!fs_.exists(p)) return Result::ok(); // be forgiving on stale entries + return fs_.remove(p); +} + +fs::path LocalImageStore::resolvePath(Game game, const std::string& imageName) const { + return gameImageDir(game) / imageName; +} + +} // namespace ccm diff --git a/core/src/infra/StdFileSystem.cpp b/core/src/infra/StdFileSystem.cpp new file mode 100644 index 0000000..aa485d2 --- /dev/null +++ b/core/src/infra/StdFileSystem.cpp @@ -0,0 +1,88 @@ +#include "ccm/infra/StdFileSystem.hpp" + +#include +#include +#include + +namespace ccm { + +namespace fs = std::filesystem; + +bool StdFileSystem::exists(const fs::path& p) const { + std::error_code ec; + return fs::exists(p, ec); +} + +bool StdFileSystem::isDirectory(const fs::path& p) const { + std::error_code ec; + return fs::is_directory(p, ec); +} + +Result StdFileSystem::ensureDirectory(const fs::path& p) { + std::error_code ec; + if (fs::exists(p, ec)) { + if (fs::is_directory(p, ec)) return Result::ok(); + return Result::err("Path exists but is not a directory: " + p.string()); + } + fs::create_directories(p, ec); + if (ec) return Result::err("create_directories failed: " + ec.message()); + return Result::ok(); +} + +Result StdFileSystem::readText(const fs::path& p) { + std::ifstream in(p, std::ios::binary); + if (!in) return Result::err("Unable to open file: " + p.string()); + std::ostringstream ss; + ss << in.rdbuf(); + if (!in && !in.eof()) return Result::err("Read error on: " + p.string()); + return Result::ok(ss.str()); +} + +Result StdFileSystem::writeText(const fs::path& p, std::string_view contents) { + std::error_code ec; + if (p.has_parent_path()) { + fs::create_directories(p.parent_path(), ec); + if (ec) return Result::err("create_directories failed: " + ec.message()); + } + std::ofstream out(p, std::ios::binary | std::ios::trunc); + if (!out) return Result::err("Unable to create file: " + p.string()); + out.write(contents.data(), static_cast(contents.size())); + if (!out) return Result::err("Write error on: " + p.string()); + return Result::ok(); +} + +Result StdFileSystem::copyFile(const fs::path& from, const fs::path& to, bool overwrite) { + std::error_code ec; + if (to.has_parent_path()) { + fs::create_directories(to.parent_path(), ec); + if (ec) return Result::err("create_directories failed: " + ec.message()); + ec.clear(); + } + const auto opt = overwrite ? fs::copy_options::overwrite_existing + : fs::copy_options::none; + fs::copy_file(from, to, opt, ec); + if (ec) return Result::err("copy_file failed: " + ec.message()); + return Result::ok(); +} + +Result StdFileSystem::remove(const fs::path& p) { + std::error_code ec; + fs::remove(p, ec); + if (ec) return Result::err("remove failed: " + ec.message()); + return Result::ok(); +} + +Result> StdFileSystem::listDirectory(const fs::path& p) { + std::error_code ec; + if (!fs::is_directory(p, ec)) { + return Result>::err("Not a directory: " + p.string()); + } + std::vector out; + for (const auto& entry : fs::directory_iterator(p, ec)) { + out.push_back(entry.path()); + } + if (ec) return Result>::err("directory_iterator: " + ec.message()); + return Result>::ok(std::move(out)); +} + +} // namespace ccm diff --git a/core/src/services/CardFilter.cpp b/core/src/services/CardFilter.cpp new file mode 100644 index 0000000..a16ff3f --- /dev/null +++ b/core/src/services/CardFilter.cpp @@ -0,0 +1,66 @@ +#include "ccm/services/CardFilter.hpp" + +#include "ccm/domain/Enums.hpp" + +#include +#include +#include + +namespace ccm { +namespace { + +// Plain ASCII tolower, same approach as CardSorter::asciiLower. The old JS path used +// String.prototype.toLowerCase() which on the realistic ASCII-only data set +// (English/German set names, Scryfall-fed labels, integer amounts) behaves +// identically. +std::string asciiLower(std::string_view s) { + std::string out; + out.reserve(s.size()); + for (char c : s) { + out.push_back(static_cast( + std::tolower(static_cast(c)))); + } + return out; +} + +bool containsLower(std::string_view haystack, std::string_view needleLower) { + return asciiLower(haystack).find(needleLower) != std::string::npos; +} + +} // namespace + +bool matchesMagicFilter(const MagicCard& card, std::string_view filter) { + // `""`.includes(filter) is true for filter == "" in JS; mirror that so the + // panel does not need a separate "no filter" branch. + if (filter.empty()) return true; + + const std::string needle = asciiLower(filter); + + // Order mirrors the MtgTable.tsx tableFields list (minus the boolean + // flag columns, which `applyFilter` skips). Stops on first match for the + // same short-circuit behavior as the JS for-loop with `break`. + if (containsLower(card.name, needle)) return true; + if (containsLower(card.set.name, needle)) return true; + if (containsLower(to_string(card.language), needle)) return true; + if (containsLower(to_string(card.condition), needle)) return true; + if (containsLower(std::to_string(card.amount), needle)) return true; + if (containsLower(card.note, needle)) return true; + return false; +} + +bool matchesPokemonFilter(const PokemonCard& card, std::string_view filter) { + if (filter.empty()) return true; + + const std::string needle = asciiLower(filter); + + if (containsLower(card.name, needle)) return true; + if (containsLower(card.set.name, needle)) return true; + if (containsLower(card.setNo, needle)) return true; + if (containsLower(to_string(card.language), needle)) return true; + if (containsLower(to_string(card.condition), needle)) return true; + if (containsLower(std::to_string(card.amount), needle)) return true; + if (containsLower(card.note, needle)) return true; + return false; +} + +} // namespace ccm diff --git a/core/src/services/CardPreviewService.cpp b/core/src/services/CardPreviewService.cpp new file mode 100644 index 0000000..80b5e9d --- /dev/null +++ b/core/src/services/CardPreviewService.cpp @@ -0,0 +1,34 @@ +#include "ccm/services/CardPreviewService.hpp" + +namespace ccm { + +CardPreviewService::CardPreviewService(IHttpClient& http) : http_(http) {} + +void CardPreviewService::registerModule(IGameModule& module) { + if (auto* src = module.cardPreviewSource(); src != nullptr) { + sources_[module.id()] = src; + } +} + +Result CardPreviewService::fetchPreviewBytes(Game game, + std::string_view name, + std::string_view setId, + std::string_view setNo) { + auto it = sources_.find(game); + if (it == sources_.end() || it->second == nullptr) { + return Result::err("No preview source registered for this game."); + } + auto url = it->second->fetchImageUrl(name, setId, setNo); + if (!url) return Result::err(url.error()); + auto bytes = http_.get(url.value()); + if (!bytes) return Result::err(bytes.error()); + return Result::ok(std::move(bytes).value()); +} + +Result CardPreviewService::fetchImageBytesByUrl(std::string_view url) { + auto bytes = http_.get(url); + if (!bytes) return Result::err(bytes.error()); + return Result::ok(std::move(bytes).value()); +} + +} // namespace ccm diff --git a/core/src/services/CardSorter.cpp b/core/src/services/CardSorter.cpp new file mode 100644 index 0000000..b6ee0a5 --- /dev/null +++ b/core/src/services/CardSorter.cpp @@ -0,0 +1,173 @@ +#include "ccm/services/CardSorter.hpp" + +#include "ccm/domain/Enums.hpp" + +#include +#include +#include +#include + +namespace ccm { +namespace { + +// The comparator lowercases strings before compare via String.toLowerCase()-style behavior. +// We use ASCII-only tolower; the original TS app processed the same fields and +// never special-cased Unicode either, so this stays byte-compatible for the +// realistic data set (English/German/etc. names already lowercase identically). +std::string asciiLower(std::string_view s) { + std::string out; + out.reserve(s.size()); + for (char c : s) { + out.push_back(static_cast( + std::tolower(static_cast(c)))); + } + return out; +} + +// Wrap a less-than predicate so that ascending=false flips its meaning, +// mirroring `byField(field, asc)` in TableTemplate.tsx. +template +auto directional(Less less, bool ascending) { + return [less, ascending](const auto& a, const auto& b) { + return ascending ? less(a, b) : less(b, a); + }; +} + +} // namespace + +void sortMagicCards(std::vector& cards, MagicSortColumn column, + bool ascending) { + switch (column) { + case MagicSortColumn::Name: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return asciiLower(a.name) < asciiLower(b.name); + }, ascending)); + break; + case MagicSortColumn::SetReleaseDate: + // Release dates are stored as "YYYY/MM/DD" so plain lexicographic + // compare is chronological. The legacy JS path lowercased strings anyway; we + // do the same for parity even though digits/'/' are unaffected. + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return asciiLower(a.set.releaseDate) < + asciiLower(b.set.releaseDate); + }, ascending)); + break; + case MagicSortColumn::Language: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return asciiLower(to_string(a.language)) < + asciiLower(to_string(b.language)); + }, ascending)); + break; + case MagicSortColumn::Condition: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return asciiLower(to_string(a.condition)) < + asciiLower(to_string(b.condition)); + }, ascending)); + break; + case MagicSortColumn::Amount: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return a.amount < b.amount; + }, ascending)); + break; + case MagicSortColumn::Foil: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return a.foil < b.foil; // false < true (asc puts unset first) + }, ascending)); + break; + case MagicSortColumn::Signed: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return a.signed_ < b.signed_; + }, ascending)); + break; + case MagicSortColumn::Altered: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return a.altered < b.altered; + }, ascending)); + break; + case MagicSortColumn::Note: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const MagicCard& a, const MagicCard& b) { + return asciiLower(a.note) < asciiLower(b.note); + }, ascending)); + break; + } +} + +void sortPokemonCards(std::vector& cards, PokemonSortColumn column, + bool ascending) { + switch (column) { + case PokemonSortColumn::Name: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return asciiLower(a.name) < asciiLower(b.name); + }, ascending)); + break; + case PokemonSortColumn::SetReleaseDate: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return asciiLower(a.set.releaseDate) < + asciiLower(b.set.releaseDate); + }, ascending)); + break; + case PokemonSortColumn::Language: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return asciiLower(to_string(a.language)) < + asciiLower(to_string(b.language)); + }, ascending)); + break; + case PokemonSortColumn::Condition: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return asciiLower(to_string(a.condition)) < + asciiLower(to_string(b.condition)); + }, ascending)); + break; + case PokemonSortColumn::Amount: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return a.amount < b.amount; + }, ascending)); + break; + case PokemonSortColumn::Holo: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return a.holo < b.holo; + }, ascending)); + break; + case PokemonSortColumn::FirstEdition: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return a.firstEdition < b.firstEdition; + }, ascending)); + break; + case PokemonSortColumn::Signed: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return a.signed_ < b.signed_; + }, ascending)); + break; + case PokemonSortColumn::Altered: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return a.altered < b.altered; + }, ascending)); + break; + case PokemonSortColumn::Note: + std::stable_sort(cards.begin(), cards.end(), directional( + [](const PokemonCard& a, const PokemonCard& b) { + return asciiLower(a.note) < asciiLower(b.note); + }, ascending)); + break; + } +} + +} // namespace ccm diff --git a/core/src/services/ConfigService.cpp b/core/src/services/ConfigService.cpp new file mode 100644 index 0000000..043c462 --- /dev/null +++ b/core/src/services/ConfigService.cpp @@ -0,0 +1,47 @@ +#include "ccm/services/ConfigService.hpp" + +#include + +#include + +namespace ccm { + +ConfigService::ConfigService(IFileSystem& fs, + std::filesystem::path configFilePath, + std::filesystem::path defaultDataStorage) + : fs_(fs), + path_(std::move(configFilePath)), + defaultDataStorage_(std::move(defaultDataStorage)) {} + +Configuration ConfigService::makeDefault() const { + Configuration c; + // generic_string() always uses '/' separators - keeps the value portable + // across Windows / Unix and round-trip-friendly for tests and JSON. + c.dataStorage = defaultDataStorage_.generic_string(); + c.defaultGame = Game::Magic; + return c; +} + +Result ConfigService::initialize() { + if (!fs_.exists(path_)) { + current_ = makeDefault(); + return store(current_); + } + auto text = fs_.readText(path_); + if (!text) return Result::err(text.error()); + try { + auto j = nlohmann::json::parse(text.value()); + current_ = j.get(); + } catch (const std::exception& e) { + return Result::err(std::string("config.json parse error: ") + e.what()); + } + return Result::ok(); +} + +Result ConfigService::store(Configuration cfg) { + current_ = std::move(cfg); + const nlohmann::json j = current_; + return fs_.writeText(path_, j.dump(2)); +} + +} // namespace ccm diff --git a/core/src/services/ImageService.cpp b/core/src/services/ImageService.cpp new file mode 100644 index 0000000..e469590 --- /dev/null +++ b/core/src/services/ImageService.cpp @@ -0,0 +1,120 @@ +#include "ccm/services/ImageService.hpp" + +#include "ccm/util/FsNames.hpp" + +#include + +namespace ccm { + +ImageService::ImageService(IImageStore& store) : store_(store) {} + +std::uint8_t ImageService::nextImageIndex(const std::vector& existingImages) { + if (existingImages.empty()) return 0; + const std::string& last = existingImages.back(); + // Preserve the compatibility shim for legacy image filenames that + // contain "IMG_FRONT"/"IMG_BACK" markers - those start a fresh index. + if (last.find("IMG_FRONT") != std::string::npos || + last.find("IMG_BACK") != std::string::npos) { + return 0; + } + const std::uint8_t parsed = parseIndexFromFilename(last); + // Saturating +1 since we hand back uint8 just like the Rust version. + return parsed == 255 ? 255 : static_cast(parsed + 1); +} + +std::string ImageService::buildTargetName(bool newEntry, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + std::uint8_t index) { + const std::string set = formatTextForFs(setName); + const std::string card = formatTextForFs(cardName); + if (newEntry) { + return set + "+" + card + "+" + std::to_string(static_cast(index)); + } + return std::to_string(cardId) + "+" + set + "+" + card + "+" + + std::to_string(static_cast(index)); +} + +Result ImageService::addImage(Game game, + const std::filesystem::path& srcPath, + bool newEntry, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + const std::vector& existingImages) { + const auto idx = nextImageIndex(existingImages); + const auto target = buildTargetName(newEntry, cardId, setName, cardName, idx); + return store_.copyIn(game, srcPath, target); +} + +Result ImageService::removeImage(Game game, const std::string& imageName) { + return store_.remove(game, imageName); +} + +Result> ImageService::normalizeNamesForPersistedCard( + Game game, + std::uint32_t cardId, + const std::string& setName, + const std::string& cardName, + const std::vector& imageNames) { + const std::string idPrefix = std::to_string(cardId) + "+"; + std::vector normalized = imageNames; + struct RenameOp { + std::string oldName; + std::string newName; + }; + std::vector ops; + ops.reserve(imageNames.size()); + + for (std::size_t i = 0; i < imageNames.size(); ++i) { + const std::string& oldName = imageNames[i]; + if (oldName.starts_with(idPrefix)) { + continue; + } + const std::uint8_t idx = parseIndexFromFilename(oldName); + const std::filesystem::path oldPath(oldName); + const std::string ext = oldPath.extension().string(); + const std::string newBase = buildTargetName(false, cardId, setName, cardName, idx); + const std::string newName = newBase + ext; + if (newName == oldName) { + continue; + } + ops.push_back({oldName, newName}); + normalized[i] = newName; + } + + if (ops.empty()) { + return Result>::ok(std::move(normalized)); + } + + std::vector created; + created.reserve(ops.size()); + for (const auto& op : ops) { + auto copied = store_.copyIn(game, store_.resolvePath(game, op.oldName), + std::filesystem::path(op.newName).stem().string()); + if (!copied) { + for (const auto& createdName : created) { + (void)store_.remove(game, createdName); + } + return Result>::err(copied.error()); + } + created.push_back(copied.value()); + } + + for (const auto& op : ops) { + auto removed = store_.remove(game, op.oldName); + if (!removed) { + return Result>::err(removed.error()); + } + } + + return Result>::ok(std::move(normalized)); +} + +std::filesystem::path ImageService::resolveImagePath(Game game, + const std::string& imageName) const { + return store_.resolvePath(game, imageName); +} + +} // namespace ccm diff --git a/core/src/services/SetService.cpp b/core/src/services/SetService.cpp new file mode 100644 index 0000000..666bf01 --- /dev/null +++ b/core/src/services/SetService.cpp @@ -0,0 +1,27 @@ +#include "ccm/services/SetService.hpp" + +namespace ccm { + +SetService::SetService(ISetRepository& repo) : repo_(repo) {} + +void SetService::registerModule(IGameModule* module) { + if (module) modules_[module->id()] = module; +} + +Result> SetService::updateSets(Game game) { + auto it = modules_.find(game); + if (it == modules_.end() || it->second == nullptr) { + return Result>::err("No game module registered for this game."); + } + auto fetched = it->second->setSource().fetchAll(); + if (!fetched) return fetched; + auto saved = repo_.save(game, fetched.value()); + if (!saved) return Result>::err(saved.error()); + return fetched; +} + +Result> SetService::getSets(Game game) { + return repo_.load(game); +} + +} // namespace ccm diff --git a/core/src/util/FsNames.cpp b/core/src/util/FsNames.cpp new file mode 100644 index 0000000..5233cea --- /dev/null +++ b/core/src/util/FsNames.cpp @@ -0,0 +1,85 @@ +#include "ccm/util/FsNames.hpp" + +#include +#include +#include +#include +#include +#include + +namespace ccm { + +namespace { + +// Replacements ordered exactly like the Rust source's chained .replace(...) so +// behavior is bit-identical for inputs that contain multiple of these chars. +struct Replacement { + std::string_view from; + std::string_view to; +}; + +constexpr std::array kReplacements{{ + {"'", ""}, + {"`", ""}, + {",", ""}, + {" ", ""}, + {":", "-"}, + {"&", "And"}, + {"|", "Or"}, + {"\xC3\xA1", "a"}, // a-acute (UTF-8) + {"\xC3\xA9", "e"}, // e-acute + {"\xC3\xAD", "i"}, // i-acute + {"\xC3\xB3", "o"}, // o-acute + {"\xC3\xBA", "u"}, // u-acute + {"\xC3\xBB", "u"}, // u-circumflex + // Remaining accented vowels appear in modern Scryfall data but were not + // listed in the Rust source. Keeping behavior 1:1 deliberately. +}}; + +void replaceAllInPlace(std::string& s, std::string_view from, std::string_view to) { + if (from.empty()) return; + std::string::size_type pos = 0; + while ((pos = s.find(from, pos)) != std::string::npos) { + s.replace(pos, from.size(), to); + pos += to.size(); + } +} + +} // namespace + +std::string formatTextForFs(std::string_view text) { + std::string out(text); + for (const auto& r : kReplacements) { + replaceAllInPlace(out, r.from, r.to); + } + return out; +} + +std::uint8_t parseIndexFromFilename(std::string_view filename) noexcept { + const auto dot = filename.find_last_of('.'); + if (dot == std::string_view::npos || dot == 0) return 0; + + // Walk backwards from the position before the dot, collecting digits. + std::size_t end = dot; + std::size_t begin = end; + while (begin > 0) { + unsigned char ch = static_cast(filename[begin - 1]); + if (std::isdigit(ch)) { + --begin; + // Rust source intentionally caps at 2-digit indices. + if (end - begin >= 2) break; + } else { + break; + } + } + if (begin == end) return 0; + + unsigned int value = 0; + for (std::size_t i = begin; i < end; ++i) { + value = value * 10 + static_cast(filename[i] - '0'); + } + if (value > 255) value = 255; + return static_cast(value); +} + +} // namespace ccm diff --git a/docs/AGENTS.md b/docs/AGENTS.md new file mode 100644 index 0000000..e40aa8d --- /dev/null +++ b/docs/AGENTS.md @@ -0,0 +1,39 @@ +# AGENTS.md + +Long-form contributor documentation that lives outside the source tree. + +## Files + +- `adding-a-new-game.md` — the **canonical, end-to-end procedure** for adding a brand-new game module to the project. Covers required external resources (sets API, optional card-preview API, icons), domain type with stable JSON, set source + tests, optional card preview source + tests, `IGameModule` glue, `Game` enum + `dirNameForGame` wiring, deriving the three UI panel templates (`BaseCardListPanel`, `BaseCardEditDialog`, `BaseSelectedCardPanel`), the `IGameView` adapter, composition-root wiring in `app/main.cpp`, CMake additions, AGENTS.md updates, and the test checklist. +- `ci-cd-guide.md` — user-facing CI/CD and release procedure: feature/master workflow split, orchestrator + reusable platform workflow structure, versioning conventions, PR title guard for `master`, artifact naming, and a concrete "create a new release" checklist. +- `versioning.md` — dedicated versioning reference: branch+sha scheme for feature builds, semantic version bump rules for `master`, tag format, and embedded app version behavior. +- `windows-installer.md` — how the NSIS-based Windows installer (`scripts/installer.nsi`) is built and configured: the `APP_VERSION` define, where the version is surfaced (window title, branding, Programs and Features), installed sections, registry layout, and CI vs. local invocation. +- `dow-doc-build-locally.md` — complete local build/setup reference for Windows and Linux, including dependency management and troubleshooting. +- `intro-to-new-developers.md` — onboarding map for new contributors: architecture, folder responsibilities, guardrails, anti-patterns, and links to deeper docs. +- `testing-and-test-code-of-conduct.md` — testing workflow plus expected standards for writing and maintaining deterministic, hermetic, behavior-focused tests. +- `assets-and-info-apis.md` — reference for the external info APIs (set metadata) and asset APIs (card preview images) used by the Magic and Pokemon modules, plus the runtime flow through `SetService` / `CardPreviewService` and the error-surface conventions. +- `README.md` — index page that clusters docs by area and links to all documents in this directory. + +## Subdirectories + +- `assets/images/` — static screenshots and other binary assets referenced from the documentation (currently `demo-mtg.png`, `demo-pkm.png`). Keep filenames stable so cross-doc links don't break, and prefer compressed PNG/JPEG over uncompressed formats. + +## Conventions + +- These docs are reference material for contributors, not user-facing release notes. Keep them precise and dated implicitly by the source state they describe. +- Code examples should be C++20 and quote real file paths from the repo. +- Do **not** introduce dependencies on a specific upcoming feature, hypothetical game, or unmerged branch. The procedure must always describe the current code as it is on `main`. + +## Required follow-ups + +- After changing per-game seams in `core/` (e.g. `IGameModule`, `ISetSource`, `ICardPreviewSource`, `CollectionService`, `SetService`, `CardPreviewService`, `ImageService`) you **must** update `adding-a-new-game.md` to keep the canonical procedure in sync. The same applies to the UI seams (`IGameView`, `BaseCardListPanel`, `BaseCardEditDialog`, `BaseSelectedCardPanel`) and the composition-root wiring in `app/main.cpp`. +- After changing the Magic or Pokemon set/preview adapters (`MagicSetSource`, `MagicCardPreviewSource`, `PokemonSetSource`, `PokemonCardPreviewSource`) — endpoints, response parsing, name/number normalization, or the info-vs-asset split — you **must** update `assets-and-info-apis.md` so the API reference matches the live behavior. +- After bumping a key dependency (`nlohmann/json`, `cpr`, `wxWidgets`, `doctest`) in a way that changes a public API used in the guide's examples, update those examples. +- After adding a new file under `docs/` (or a new entry under `docs/assets/images/`) you **must** add it to the file list above **and** to `README.md` so the index stays complete. +- Do **not** rename, move, or split this file without first updating every other `AGENTS.md` that points at it (root, `core/`, `ui_wx/`, `app/`, `tests/`). + +## Anti-patterns + +- Don't sneak hypothetical or in-progress games into the doc as concrete examples; the guide is meant to be game-agnostic and must read as such. +- Don't link to the original Rust/Tauri repo as the source of truth — it is a historical reference, not the spec. The C++ code under `core/`, `ui_wx/`, and `app/` is the spec. +- Don't duplicate the per-package `AGENTS.md` content here; cross-link instead. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..2ca0d78 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,26 @@ +#documentation #contributors #ccm3 + +# Documentation Index + +This folder contains contributor documentation for Card Collection Manager 3. Start with [Intro for New Developers](intro-to-new-developers.md) if you are new to the repository, then use the category sections below to navigate to specific tasks. + +## CI/CD And Release + +- [ci-cd-guide.md](ci-cd-guide.md): CI workflows, merge guards, artifacts, and release execution. +- [versioning.md](versioning.md): feature-build version format, semantic release rules on `master`, and tag/app-version behavior. +- [windows-installer.md](windows-installer.md): how the NSIS-based Windows installer is built, configured, and versioned. + +## Build And Local Setup + +- [dow-doc-build-locally.md](dow-doc-build-locally.md): local build setup for Windows/Linux, dependency model, build options, and troubleshooting. + +## Onboarding & Development Workflows + +- [intro-to-new-developers.md](intro-to-new-developers.md): architecture orientation, boundaries, common pitfalls, and first-week workflow guidance. + +- [testing-and-test-code-of-conduct.md](testing-and-test-code-of-conduct.md): test workflow plus repository rules for deterministic, behavior-focused tests. + +- [adding-a-new-game.md](adding-a-new-game.md): canonical end-to-end procedure for adding a new game module across `core/`, `ui_wx/`, and `app/`. + +- [assets-and-info-apis.md](assets-and-info-apis.md): external info and asset APIs used by Magic/Pokemon modules and their runtime purpose. + diff --git a/docs/adding-a-new-game.md b/docs/adding-a-new-game.md new file mode 100644 index 0000000..f9fa6f8 --- /dev/null +++ b/docs/adding-a-new-game.md @@ -0,0 +1,473 @@ +#documentation #architecture #game-modules + +# Adding A New Game To Card Collection Manager + +This is the canonical end-to-end walkthrough for adding support for a new TCG to Card Collection Manager. The guide covers external API selection, core and UI integration, composition-root wiring, and required tests so a full implementation can land cleanly on `main`. + +**Quick Setup:** gather required external resources first, then follow sections in order and run the full verification checklist before opening a PR. + +The guide is prescriptive about file locations and seam shapes but game-agnostic in naming. Replace `` with your game type name and `` with the lowercase key used for on-disk directories and `dirName()`. Both Magic and Pokemon follow this structure; use their implementations as references when needed. + +Read the root `AGENTS.md`, `core/AGENTS.md`, `ui_wx/AGENTS.md`, `app/AGENTS.md`, and `tests/AGENTS.md` before starting. They define the architecture rules this guide is built on top of. + +--- + +## 1. Prerequisites: pick your external resources + +Before you write any C++, gather the following. The further along you discover that something is missing, the more work you throw away. + +### 1.1 Set list API (required) + +A public HTTP endpoint that returns the canonical set / expansion list for the game, with at least: + +- a stable identifier (`id`) — used as the on-disk and JSON key. Must be stable across API revisions. +- a human-readable name. +- a release date — used to sort the set picker chronologically. + +The endpoint must be callable without authentication, or you must accept a hard-coded API key (we do not currently expose a way to ask the user for one). It must support HTTPS. Plan for the response body to be JSON; we do not have an XML or CSV path. + +The release date may be in any format **as long as you can rewrite it to `YYYY/MM/DD` during parsing**, because the `Set` domain type stores it that way (see `core/include/ccm/domain/Set.hpp`) and the rest of the code assumes lexicographic comparison sorts chronologically. + +### 1.2 Card preview API (optional) + +A public HTTP endpoint that returns the URL of a card's preview image given some lookup key (typically `name`, `set id`, and possibly a printed collector number). If the game does not expose one, the UI will simply skip the remote preview and only show locally-stored images — the implementation is allowed to omit this seam entirely. + +A few traps to plan around now, before you write code: + +- **Lookup precision.** Some APIs return many ambiguous matches when you query by name only and require the set id (and sometimes the collector number) to disambiguate. Decide up front which fields make a search reliable enough to take the first result. +- **URL encoding.** All query strings must be RFC 3986 percent-encoded before they reach `IHttpClient::get` (`cpr::Url` does **not** re-encode). The Magic/Pokemon implementations have a private `urlEncode` helper you can copy. +- **Collector-number normalization.** Pokemon stores `4/102` but the API only accepts `4`. Whichever convention your domain type uses, normalize it inside `buildSearchUrl` so the wire format is whatever the API actually expects. Mismatches here produce empty result sets, which then look identical to "no preview available" and are very tedious to debug. + +### 1.3 Flag icons + +Identify any boolean flag columns the game needs (Magic: `Foil`, `Signed`, `Altered`; Pokemon: `Holo`, `1. Edition`, `Signed`, `Altered`). For each one that doesn't already exist, plan an SVG glyph. SVG art with a single fillable path works best — see `ui_wx/src/SvgIcons.cpp` for the established style. Re-use existing glyphs across games where the meaning is identical (`Signed` and `Altered` are shared between Magic and Pokemon). + +### 1.4 Domain shape decision + +Decide whether the new game can re-use an existing card type or needs its own. Re-use is allowed when **every** field has identical semantics; in practice, every game we have shipped has needed its own type because at least one flag or extra column differs (e.g. Pokemon adds `setNo`, `holo`, `firstEdition`). + +If you create a new type, freeze the JSON layout now. The root `AGENTS.md` rule is unambiguous: **JSON layout must stay byte-for-byte stable** once you ship. Pick names that match any pre-existing on-disk format (this app may inherit data from a previous tool), and decide which C++ field names need a JSON alias (the canonical example: the C++ field `signed_` maps to the JSON key `"signed"` because `signed` is a C++ keyword). + +--- + +## 2. Core: domain types and the `Game` enum + +Everything below this point assumes you have already gathered the resources from §1. + +### 2.1 Extend the `Game` enum + +Edit `core/include/ccm/domain/Enums.hpp`: + +- Add a new enumerator to `enum class Game`. +- Update the size of `allGames()` (`std::array`). + +Edit `core/src/domain/Enums.cpp`: + +- Add a `case` to `to_string(Game)`. +- Add a branch to `gameFromString(std::string_view)`. +- Add the new enumerator to the `allGames()` constexpr array. + +The `Game` enum is the only place in `core/` that hardcodes which games exist. Adding a new entry here is what makes the rest of the registries (`SetService`, `CardPreviewService`, `AppContext::gameViews`, `dirNameForGame`) accept it. + +### 2.2 Add the card domain type (only if needed) + +If you decided in §1.4 that an existing card type fits, skip this section. + +Otherwise, create `core/include/ccm/domain/Card.hpp`: + +- A `struct Card` with `id`, `amount`, `name`, `set`, `note`, `images`, `language`, `condition` (these seven fields are required — the UI templates assume them) and any game-specific extras. +- Forward-declare `to_json` and `from_json` for `nlohmann::json`. +- Add a defaulted `friend bool operator==(const Card&, const Card&) = default;` so the JSON round-trip test can compare values. + +Then create `core/src/domain/Card.cpp`: + +- Hand-roll `to_json` and `from_json` using `nlohmann::json`. **Do not** use `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` — the explicit form keeps JSON aliases visible and makes future stability bugs easier to catch in code review. + +A real example to cargo-cult from is `core/src/domain/PokemonCard.cpp`. Note how `signed` (the JSON key) maps to `signed_` (the C++ field), and how every JSON key is spelled out. If your game uses a printed collector number, follow Pokemon's lead and store it as `setNo` (string) so the format `"4/102"` can survive a round-trip even when the API only consumes `"4"`. + +### 2.3 Update the JSON round-trip test + +Open `tests/domain_json_tests.cpp`. Add a `TEST_CASE` that: + +1. Constructs a `Card` with **every** field non-default (including `set.id`, `set.name`, `set.releaseDate`). +2. Serializes it to `nlohmann::json`. +3. Asserts the JSON contains the expected keys with the expected literal spellings (in particular, any C++/JSON aliases like `"signed"`). +4. Round-trips it back into a `Card` and `CHECK(roundTripped == original)`. + +This is the **byte-for-byte stability gate**. If you skip it, the alias bugs only surface in production after you ship and someone's collection.json fails to parse. + +--- + +## 3. Core: set source and (optional) card preview source + +### 3.1 `SetSource` + +Mirrors `core/include/ccm/games/pokemon/PokemonSetSource.hpp` and the matching `.cpp`. Put your files at: + +- `core/include/ccm/games//SetSource.hpp` +- `core/src/games//SetSource.cpp` + +The header should declare: + +- `class SetSource final : public ISetSource` +- `static constexpr const char* kEndpoint = "";` +- `explicit SetSource(IHttpClient& http);` +- `Result> fetchAll() override;` +- `static Result> parseResponse(const std::string& body);` + +The static `parseResponse` is mandatory. It is the seam you unit-test (no HTTP, no fakes — just a string in, a `Result` out). `fetchAll()` is a thin wrapper that calls `http_.get(kEndpoint)` and forwards to `parseResponse` on success. + +In `parseResponse`: + +1. Parse the body with `nlohmann::json::parse(body)` inside a `try`/`catch (const std::exception&)` block. Throwing across the port boundary is forbidden; catch and return `Result>::err(...)` with a useful message. +2. Walk the response, mapping each entry to a `Set { id, name, releaseDate }`. Rewrite the release date to `YYYY/MM/DD` if the API uses a different format. +3. `std::sort` ascending by release date. +4. Return `Result>::ok(std::move(out))`. + +A note on quirky APIs: some endpoints return a top-level array, some wrap it in `{ "data": [...] }`, and some put it under a different key. The two reference implementations diverge on exactly this: Magic walks the Scryfall-shaped response, Pokemon walks `data[]`. Do whatever your API requires; it is fine for `parseResponse` to be game-specific. + +### 3.2 `CardPreviewSource` (optional) + +Skip this section if the game has no remote preview API. + +Mirror `core/include/ccm/games/pokemon/PokemonCardPreviewSource.hpp`. The header should declare: + +- `class CardPreviewSource final : public ICardPreviewSource` +- `explicit CardPreviewSource(IHttpClient& http);` +- `Result fetchImageUrl(std::string_view name, std::string_view setId, std::string_view setNo) override;` +- `static std::string buildSearchUrl(std::string_view name, std::string_view setId, std::string_view setNo);` +- `static Result parseResponse(const std::string& body);` + +Both `buildSearchUrl` and `parseResponse` are static and pure on purpose: every URL-encoding and JSON-shape rule is testable without HTTP. Common edge cases your tests must cover: + +- Names with spaces, punctuation, or non-ASCII characters (percent-encoding correctness). +- An empty `setId` (don't append the `set.id:` clause). +- An empty `setNo`, and a `setNo` that needs normalization (strip everything after `/`, strip leading zeros, etc.). +- Response with the preferred image variant present. +- Response with only the fallback image variant present. +- Empty `data[]` array. +- Malformed JSON (parse error path). + +`fetchImageUrl` is a thin wrapper: build URL → `http_.get(url)` → `parseResponse(body)`. + +### 3.3 `GameModule` + +Wire the two sources together. Create: + +- `core/include/ccm/games//GameModule.hpp` +- `core/src/games//GameModule.cpp` + +Header: + +```cpp +#pragma once + +#include "ccm/games/IGameModule.hpp" +#include "ccm/games//CardPreviewSource.hpp" // omit if no preview +#include "ccm/games//SetSource.hpp" + +namespace ccm { + +class GameModule final : public IGameModule { +public: + explicit GameModule(IHttpClient& http); + + [[nodiscard]] Game id() const noexcept override { return Game::; } + [[nodiscard]] std::string dirName() const override { return ""; } + [[nodiscard]] std::string displayName() const override { return ""; } + + ISetSource& setSource() override { return setSource_; } + // Omit the override below if the game has no remote preview API. + ICardPreviewSource* cardPreviewSource() noexcept override { return &previewSource_; } + +private: + SetSource setSource_; + CardPreviewSource previewSource_; +}; + +} // namespace ccm +``` + +Two subtle requirements: + +- `dirName()` returns the **on-disk directory name**. Once you ship, this is forever — changing it later orphans every existing user's data. Pick something lowercase, ASCII, and short. +- `cardPreviewSource()` defaults to `nullptr` in `IGameModule`. Only override it if you actually have a preview source. Returning `nullptr` makes `CardPreviewService::registerModule(*module)` a silent no-op for that game; the UI gracefully falls back to "no preview available". + +The `.cpp` is one line of constructor body — see `core/src/games/pokemon/PokemonGameModule.cpp`. + +### 3.4 Register the new sources in `core/CMakeLists.txt` + +There is no glob. Add the new `.cpp` files (set source, card preview source, game module, and the card domain `.cpp` if you added one) to the `add_library(ccm_core ...)` argument list. Configure the build before moving on; this catches any missing headers immediately. + +--- + +## 4. Core: tests for the new sources + +Writing the tests now, before the UI work, makes the next sections noticeably faster — every later UI debugging session benefits from already knowing the parser and the URL builder are correct. + +### 4.1 `_set_source_tests.cpp` + +Create `tests/_set_source_tests.cpp` modeled on `tests/pokemon_set_source_tests.cpp`. The required cases are: + +- `parseResponse` happy path with two or three sets, including the date rewrite if your API uses a non-`YYYY/MM/DD` format. +- `parseResponse` already-sorted output (input out of order, output ascending by release date). +- `parseResponse` empty array → empty `Result::ok(...)`. +- `parseResponse` missing top-level container → `Result::err(...)`. +- `parseResponse` malformed JSON → `Result::err(...)`. +- `fetchAll` happy path through a `FixedHttpClient` fake (in-file, ~10 lines — see the existing tests). Assert the `lastUrl` equals `kEndpoint`. +- `fetchAll` HTTP error → `Result::err(...)` propagation. + +### 4.2 `_card_preview_source_tests.cpp` (if you have a preview source) + +Create `tests/_card_preview_source_tests.cpp` modeled on `tests/pokemon_card_preview_source_tests.cpp`. The required cases are: + +- `buildSearchUrl` percent-encodes names with spaces and reserved characters. +- `buildSearchUrl` includes / omits the `setId` clause based on whether `setId` is empty. +- `buildSearchUrl` includes / omits / normalizes `setNo` according to your normalization rules. +- `parseResponse` returns the preferred image variant. +- `parseResponse` falls back to the secondary variant when the primary is absent. +- `parseResponse` errors on empty `data[]`, missing `images`, malformed JSON. +- `fetchImageUrl` round-trips through `FixedHttpClient` and asserts the URL was percent-encoded as expected. +- `fetchImageUrl` propagates HTTP errors. + +### 4.3 Register the new test files + +Add `_set_source_tests.cpp` (and `_card_preview_source_tests.cpp` if applicable) to `tests/CMakeLists.txt` `add_executable(ccm_core_tests ...)`. Build and run `ctest --test-dir build --output-on-failure`. **Do not** continue until these pass. + +### 4.4 Sorter / filter tests + +If you introduced a new card type in §2.2, add cases to `tests/card_sorter_tests.cpp` and `tests/card_filter_tests.cpp` covering the new sort columns and filter columns introduced by your domain type. The boolean-flag exclusion rule (filter only checks string/number columns; flag columns are skipped) must be covered explicitly so future refactors don't quietly break it. + +### 4.5 Set-service routing test + +Append a case to `tests/set_service_tests.cpp` that registers your new module alongside Magic and verifies that `updateSets(Game::)` does not perturb cached data for the other game. Routing isolation is what `SetService` exists for; one test per game keeps it honest. + +--- + +## 5. UI: derive from the three base templates + +The UI layer is built on three header-only class templates that own all the wxWidgets-specific machinery. Each has a small, well-documented set of virtual hooks; deriving for a new game is a hook-implementation exercise, not a wxWidgets exercise. Read `ui_wx/include/ccm/ui/Base*.hpp` once before starting. + +### 5.1 SVG icons + +If your game introduces flag columns whose glyphs do not already exist in `ui_wx/include/ccm/ui/SvgIcons.hpp`, add them now: + +- Declare each new icon as `extern const char* const kSvg;` in the header. +- Define them in `ui_wx/src/SvgIcons.cpp`. Keep the `@FILL@` placeholder so the rasterizer can substitute the active palette text color at draw time. **Do not** bake a color into the SVG — that breaks dark mode. +- Re-use existing glyphs (`kSvgSigned`, `kSvgAltered`, `kSvgFoil`, `kSvgHolo`) when the meaning matches. + +### 5.2 Sort and filter helpers + +Add a `SortColumn` enum to `core/include/ccm/services/CardSorter.hpp`, plus the corresponding `sortCards(std::vector<Card>&, SortColumn, bool)` declaration. Implement it in `core/src/services/CardSorter.cpp` mirroring the existing per-column dispatch (each enum entry maps to a comparator). + +Add `[[nodiscard]] bool matchesFilter(const Card&, std::string_view)` to `core/include/ccm/services/CardFilter.hpp` and implement it in `core/src/services/CardFilter.cpp`. Walk the same value-key columns that the list panel will display, lowercase both sides, and short-circuit on any substring hit. Boolean flag columns are intentionally excluded — only string/number columns participate in filtering. + +These functions are also the targets of §4.4's tests; you'll have already written the tests if you followed the order. + +### 5.3 `CardListPanel` + +Create: + +- `ui_wx/include/ccm/ui/CardListPanel.hpp` +- `ui_wx/src/CardListPanel.cpp` + +The header declares a `final class` deriving from `BaseCardListPanel<Card, SortColumn>`, with overrides for: + +- `declareTextColumns()` — return a `std::vector` of `{label, width, format, optional}`. The order is left-to-right on screen. The **last** entry must be the `Note` column; the base reserves it. +- `declareIconColumns()` — return a `std::vector` of `{svg, width, optional}`. These render between the leading text columns and the Note column. +- `renderTextCell(card, idx)` — return the cell text for the `idx`-th text column. The base passes index `0..textCols-1` for the leading rows and `textCols-1` for the Note row, so you usually `switch (idx)`. +- `isIconColumnSet(card, idx)` — return whether the `idx`-th icon column should render its glyph for this row. Index `0` is the first icon column declared in `declareIconColumns()`. +- `sortBy(column, ascending)` — call `sortCards(mutableCards(), column, ascending)`. **Use `mutableCards()`**, not `cards()`, because `sortBy` writes through the underlying vector. +- `matchesFilter(card, filter)` — call `matchesFilter(card, filter)`. + +In the constructor body, call `buildLayout()` (from `BaseCardListPanel`) so the base wires up the `wxListCtrl`, the themed header row, and the image lists. + +The reference implementation at `ui_wx/src/PokemonCardListPanel.cpp` is ~75 lines including the icon-column declaration and the `switch`-based renderer. Yours should land in the same ballpark. + +### 5.4 `SelectedCardPanel` + +Create: + +- `ui_wx/include/ccm/ui/SelectedCardPanel.hpp` +- `ui_wx/src/SelectedCardPanel.cpp` + +Inside the `.cpp`, define an unnamed-namespace `enum DetailKey : int { ... };` with one entry per detail row and one per flag column. Keep these names local — they're only used between this file's hook overrides. + +Override: + +- `declareDetailRows()` — return a `std::vector` of `{label, key, emptyLabel}`. The **first** row should typically be `Name`; its `emptyLabel` is what the panel shows when no card is selected. +- `declareFlagIcons()` — return a `std::vector` of `{svg, tooltip, key}`. +- `detailValueFor(card, key)` — `switch (key)` and return the appropriate string. **Also handle `kNoteKey`** (defined in `BaseSelectedCardPanel` as `-1`); the base calls `detailValueFor(card, kNoteKey)` to populate the bottom Note row. +- `isFlagSet(card, key)` — `switch (key)` and return the matching boolean. +- `previewKey(card)` — return `std::tuple` of `(name, setId, setNo)`. Use empty `setNo` for games whose preview API does not need a collector number. +- `gameId()` — return `Game::`. + +In the constructor body, call `buildLayout()` so the base wires up the preview area, detail grid, flag strip, and image list. + +The reference implementation is `ui_wx/src/PokemonSelectedCardPanel.cpp`. + +### 5.5 `CardEditDialog` + +Create: + +- `ui_wx/include/ccm/ui/CardEditDialog.hpp` +- `ui_wx/src/CardEditDialog.cpp` + +Derive from `BaseCardEditDialog<Card>`. Override: + +- `buildFlagsRow(wxBoxSizer* flagsBox)` — create your `wxCheckBox`es and `flagsBox->Add(...)` them. The base owns the surrounding `Flags` label and sizer. +- `appendExtraRows(wxFlexGridSizer* grid)` — only if your game has fields beyond the standard set. Use the inherited `appendRow(grid, label, ctrl)` helper. (Pokemon adds a `Set #` text input here.) +- `readExtraFromCard()` — copy fields from `constCard()` into your widgets. +- `writeExtraToCard()` — copy values from your widgets back into `mutableCard()`. +- `updateMenuName()` — return `"Update "`. This is what the dialog's "no sets cached" hint shows the user. + +In the constructor: + +1. Pass through to the `BaseCardEditDialog` constructor with the dialog title (e.g. `"Add Card"` or `"Edit Card"` based on `EditMode`), `imageService`, `setService`, `mode`, `std::move(initial)`, `Game::`, and the optional `preloadedSets` pointer. +2. Call `buildAndPopulate()` (from the base) to build the form, populate the choices, and call `readExtraFromCard()`. + +The reference implementation is `ui_wx/src/PokemonCardEditDialog.cpp`. + +### 5.6 `GameView` + +This is the polymorphic glue between the new game's panels and the rest of the app. Create: + +- `ui_wx/include/ccm/ui/GameView.hpp` +- `ui_wx/src/GameView.cpp` + +Derive from `IGameView`. The constructor takes references to the shared services (`ConfigService`, `SetService`, `ImageService`, `CardPreviewService`), the typed `CollectionService<Card>&`, and the `IGameModule&`. Members: + +- `CardListPanel* listPanel_{nullptr};` +- `SelectedCardPanel* selectedPanel_{nullptr};` +- `std::vector setsCache_;` — populated lazily by `setsForDialog()` so each Add/Edit open does not re-read from `SetService`. + +Implement the virtuals: + +- `gameId()` returns `Game::`. +- `displayName()` returns `""`. +- `listPanel(parent)` — lazily allocates the list panel as a child of `parent`; on first allocation, also `Bind(EVT_CARD_SELECTED, ...)` to push `listPanel_->selected()` into `selectedPanel_`. **The binding must live here**, in the typed `IGameView`, not in `MainFrame` — `MainFrame` only sees `IGameView` and never `Card`. +- `selectedPanel(parent)` — lazily allocates the selected panel. +- `refreshCollection()` — calls `collection_.list(Game::)`, handles errors with `wxMessageBox`, and pushes the new vector into `listPanel_->setCards(...)`. Also re-syncs the selected panel. +- `onAddCard(parent)`, `onEditCard(parent)`, `onDeleteCard(parent)` — open the typed `CardEditDialog` (or pop a confirm dialog for delete), call the typed `CollectionService` to commit, and refresh on success. +- `onUpdateSets(parent)` — calls `sets_.updateSets(Game::)`, refreshes `setsCache_`, returns a status string. +- `setFilter(filter)` — forwards to `listPanel_->setFilter(filter)`. +- `applyTheme(palette)` — forwards to both panels' `applyTheme`. +- `updateSetsMenuLabel()` — returns `"Update "`. This is what the `Sets` menu entry shows. + +The reference implementation is `ui_wx/src/PokemonGameView.cpp`. It's about 160 lines and is the same shape for every game. + +### 5.7 Register the new UI sources + +Add **all** new UI `.cpp` files to `ui_wx/CMakeLists.txt`: + +- `CardListPanel.cpp` +- `SelectedCardPanel.cpp` +- `CardEditDialog.cpp` +- `GameView.cpp` + +There is no glob. + +--- + +## 6. Composition root + +Edit `app/main.cpp` to wire the new game in. Read `app/AGENTS.md` first — destruction-order rules apply. + +### 6.1 New members + +Add `std::unique_ptr<...>` members to `CcmApp`. Order matters (destruction is reverse — deps before dependents): + +```cpp +std::unique_ptrGameModule> Mod_; +std::unique_ptrCard>> Repo_; +std::unique_ptrCard>> CollSvc_; +std::unique_ptrGameView> View_; +``` + +Place them next to the existing Magic/Pokemon members in the matching position — game module after `http_`, repo after the module, collection service after the repo and the image store, view at the end before `ctx_`. + +### 6.2 New constructions in `OnInit()` + +```cpp +Mod_ = std::make_uniqueGameModule>(*http_); + +Repo_ = std::make_uniqueCard>>( + *fs_, *config_, &dirNameForGame); + +CollSvc_ = std::make_uniqueCard>>( + *Repo_, *imgStore_); + +setSvc_->registerModule(Mod_.get()); +previewSvc_->registerModule(*Mod_); // no-op when the module has no preview source + +View_ = std::make_uniqueGameView>( + *config_, *CollSvc_, *setSvc_, *imgSvc_, *previewSvc_, *Mod_); +``` + +### 6.3 `dirNameForGame` + +Add a `case ccm::Game::: return "";` arm. The string must match `GameModule::dirName()`. + +### 6.4 `AppContext` + +`AppContext` (`ui_wx/include/ccm/ui/AppContext.hpp`) currently holds explicit references to `magicModule` and `pokemonModule`. Add an `Module` reference field — keep the alphabetical / canonical order — and pass `*Mod_` for it in the `AppContext{...}` brace-init in `OnInit()`. Also append `View_.get()` to the `gameViews` vector. + +The `Game` and `Sets` menus in `MainFrame` are built dynamically from `gameViews`, so once the new view is in the vector its menu entries (the `Game > ` radio item and the `Sets > Update ` action) appear automatically. + +--- + +## 7. AGENTS.md and tests housekeeping + +After all the above compiles and tests pass: + +1. **`AGENTS.md`** (root) — the "After adding a new game module you must" required follow-up should already cover your work; read it and confirm. If you added a new domain type, the matching `tests/domain_json_tests.cpp` round-trip test is required (per `core/AGENTS.md`). +2. **`core/AGENTS.md`** — update only if your game required a new core seam shape (a new port, a new service, a new shared helper). Describing the new game itself is not required; the doc is meant to stay game-agnostic. +3. **`ui_wx/AGENTS.md`** — same: update only if you needed a new template hook or had to teach the `Base*` templates a new behaviour. Describing the new game's panel set is not required. +4. **`app/AGENTS.md`** — confirm the "Composition root is the only place" allowlist still mentions the concrete adapter types. If you added new ones (a new `GameView`, `GameModule`), append them. +5. **`tests/AGENTS.md`** — add the new test file names to the file map and the "Required follow-ups" list. +6. **This file** (`docs/adding-a-new-game.md`) — only edit when the procedure itself changes (new template hook, new service registration, new composition-root step). Do not insert your specific game's quirks here; capture those in code comments next to the relevant overrides. + +--- + +## 8. Verification checklist + +Run, in order, from the workspace root. Do not skip any step. + +1. **Configure**: `cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release` (or your usual generator). Configuration must succeed without warnings about a missing source file. +2. **Build**: `cmake --build build --parallel`. Must succeed cleanly. Pay close attention to template-instantiation errors — those usually indicate one of the `Base*` hooks is missing or wrongly-typed. +3. **Tests**: `ctest --test-dir build --output-on-failure`. Every existing test plus the new `_set_source_tests`, `_card_preview_source_tests`, the extended `domain_json_tests`, the extended `card_sorter_tests`, the extended `card_filter_tests`, and the extended `set_service_tests` must pass. +4. **Smoke test**: launch `./build/bin/ccm3` (or `.\build\bin\ccm3.exe`). Note: the CMake target is `ccm` but the executable is renamed to `ccm3` via `set_target_properties(... OUTPUT_NAME ccm3)`. + - The `Game` menu shows your new game alongside Magic and Pokemon and switching is instantaneous (no panel re-creation cost on subsequent switches). + - The `Sets > Update ` action fetches sets and reports a count. + - With sets cached, opening the new game's Add dialog populates the set picker and the dialog can be dismissed with `OK`. + - Adding, editing, and deleting a card all round-trip through disk: close and re-open the app and the card persists. + - Selecting a card kicks off a preview fetch (if the game has a preview source) and renders the image; the status line returns to `"Ready"` when the preview lands. + - The flag-icon strip shows / hides per card depending on which flags are set. + - Theme switching applies to all of the new game's panels (light → dark → light). + +--- + +## 9. Common traps + +These do not match a single seam in this guide but are worth calling out explicitly. + +- **Stale set caches.** Each `IGameView` caches `std::vector setsCache_`. After `onUpdateSets` succeeds, refresh the cache (assign the new vector). The reference implementations do this. +- **`signed_` / `signed`.** The C++ field is `signed_`; the JSON key is `"signed"`. This is intentional and must not be changed. The same convention applies to any new field where the natural name collides with a C++ keyword — pick a trailing-underscore C++ name and an unaliased JSON key. +- **Spacer column index.** `BaseCardListPanel` reserves index `0` for a hidden zero-width spacer column (MSW comctl32 image-list gutter workaround). Real columns start at index `1`. If you ever need to call into `wxListCtrl` directly from a derived panel (you should not), remember this. +- **Preview-fetch threading.** The async preview fetch in `BaseSelectedCardPanel` uses a `shared_ptr` + `std::atomic alive` + `std::atomic currentGen` triple. Do not capture `this` raw in any background work you add to a new game's selected panel; copy that pattern verbatim. +- **First-paint perf.** `MainFrame` defers initial collection load with `CallAfter(...)` and `BaseCardListPanel` defers the initial selection the same way. Don't move that work back into the constructor for "convenience" — it makes startup visibly slower. +- **`previewKey` for games without `setNo`.** If your preview API only needs `(name, setId)`, return an empty string for the third tuple element. The base will pass `""` through to the source, which is exactly what `MagicCardPreviewSource` is built to handle. +- **Filter exclusion.** The filter intentionally ignores boolean-flag columns. If you find yourself wanting `signed:true` style filters, that is a future feature, not a fix; don't smuggle it into `matchesFilter` without a design discussion. +- **Theming dialogs.** Always `applyThemeToWindowTree(&dlg, palette, theme)` before `ShowModal()` for any dialog you open. The reference `GameView::onAddCard` / `onEditCard` show the canonical pattern. + +--- + +## 10. Where to read first when something does not work + +- The new game compiles but its menu entries do not appear — check that the view was appended to `AppContext::gameViews` in `app/main.cpp`. +- The list panel is empty even after `Sets > Update ` succeeds — check `dirNameForGame`. The repository writes to `//collection.json`, and a typo here makes the load silently return an empty list on next launch. +- The filter input does nothing on the new game — check that `GameView::setFilter(...)` forwards to the list panel and that `matchesFilter` actually evaluates the active filter substring (the empty filter must match every row). +- The Add dialog shows `(no sets cached - use Sets > Update )` even after a successful update — `setsCache_` was not refreshed in `onUpdateSets`. The reference views assign `out.value()` into the cache. +- Preview never resolves — first add a unit test that hits `parseResponse` with a real captured response body. If that passes, log the URL `IHttpClient::get` is called with and try it in a browser or `curl`. Most "broken preview" bugs are URL encoding or a wrong shape in `buildSearchUrl`. +- Sort works but its arrow indicator is wrong — column `0` is the spacer, so the visual column index sort key cares about is one higher than you might expect. The base handles this; if it goes wrong, check that your `TextColumnSpec`/`IconColumnSpec` order matches `renderTextCell` / `isIconColumnSet` indexing exactly. +- Tests pass but the app crashes on shutdown — destruction order in `CcmApp` is wrong. Move `View_` so it is declared **after** `CollSvc_`, `setSvc_`, `imgSvc_`, `previewSvc_`, `Mod_` — the view must be torn down before any of its referenced services. diff --git a/docs/assets-and-info-apis.md b/docs/assets-and-info-apis.md new file mode 100644 index 0000000..4594bc6 --- /dev/null +++ b/docs/assets-and-info-apis.md @@ -0,0 +1,52 @@ +#documentation #apis #integrations #ccm3 + +# Asset And Info APIs + +This document explains which external APIs Card Collection Manager 3 uses, and what each API is responsible for in the app. Use this page with [adding-a-new-game.md](adding-a-new-game.md) when you are wiring a new game module or debugging API behavior. + +## API Roles + +The code separates remote APIs into two roles: **info APIs** and **asset APIs**. Info APIs provide set metadata used to populate local set lists (ID, name, release date). Asset APIs resolve a card lookup into an image URL, then `CardPreviewService` downloads the raw preview image bytes for the UI. + +## Magic: The Gathering APIs + +**Info API:** `https://api.scryfall.com/sets` +Used by `MagicSetSource` to fetch all sets. The parser drops digital-only sets, maps Scryfall fields to the internal `Set` type, rewrites `released_at` from `YYYY-MM-DD` to `YYYY/MM/DD`, and sorts ascending by release date. + +**Asset API:** `https://api.scryfall.com/cards/search?q=...` +Used by `MagicCardPreviewSource` to find a card printing from `name` + `setId`, then extract `data[0].image_uris.normal` as the preview URL. The search query is percent-encoded and card names apply `&` -> `and` normalization before lookup. + +## Pokemon APIs + +**Info API:** `https://api.pokemontcg.io/v2/sets` +Used by `PokemonSetSource` to fetch all sets. The parser maps `id`, `name`, and `releaseDate` directly into `Set`, then sorts ascending by release date. + +**Asset API:** `https://api.pokemontcg.io/v2/cards?q=...` +Used by `PokemonCardPreviewSource` to search by `name` plus optional `set.id` and collector number. It extracts `data[0].images.large` first and falls back to `images.small` if needed. + +The Pokemon source also normalizes collector numbers before request build. For example, `4/102` is reduced to `4` because the remote query expects only the printed number component. + +## Runtime Flow In CCM3 + +The app uses the same flow for both games: + +- `SetService` asks the game's `ISetSource` (info API) for the latest set list. +- `CardPreviewService` asks the game's `ICardPreviewSource` (asset API) for a preview image URL. +- `CardPreviewService` performs a second HTTP GET to that URL and returns raw bytes to the UI layer. +- If preview lookup fails (or returns empty bytes), the UI fetches a per-game fallback card-back image URL through `CardPreviewService::fetchImageBytesByUrl(...)` and shows that image in the selected-card preview panel. + +Current fallback image URLs (kept in `BaseSelectedCardPanel` for CCM2 parity): + +- Magic: `https://gamepedia.cursecdn.com/mtgsalvation_gamepedia/f/f8/Magic_card_back.jpg` +- Pokemon: `https://archives.bulbagarden.net/media/upload/1/17/Cardback.jpg` + +If a game module does not provide a preview source (`cardPreviewSource() == nullptr`), preview registration is skipped and the UI behaves as "no remote preview API available." + +## Error Surface And Debugging Intent + +Both source types return `Result` errors so failures cross boundaries without exceptions. In practice, this keeps failures debuggable by separating: + +- info API failures (bad set payload, schema mismatch, endpoint/network failure), and +- asset API failures (query mismatch, no matching card, missing image fields, image download failure). + +When previews fail, verify request construction first (name sanitization, number normalization, percent encoding), then verify response shape assumptions (`data`, `image_uris`, `images.large`/`images.small`). If the fallback fetch succeeds, the panel intentionally shows the card-back image and the inline label `(image preview unavailable)`. diff --git a/docs/assets/images/demo-mtg.png b/docs/assets/images/demo-mtg.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5a78ce3676e0b43aba8a4448778eb3c72ee884 GIT binary patch literal 582222 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ⅆ0cD#=u=Q=4!r$(E{k>)ZL1w|fNj$@aROr5-dC&eh^4J{{6H{eR< z{F|PK*q*fadRD@uS<*V*75y{qAki=9pauSp2A%!TP-1>9CK>dUNz6#fH6pv81vw+y zB4wEp{KJ6YF&?7~ye1?qzNB1x!o<1$cKn^QJPk?ijd6^pGUbm;?38O5@9B8xJql53` zEp+;2&)bY_(7O)O~Jj*DY2Zm)9r%A5Cuo6vy+t4<~pM2o8t4JBJ5% zcZcBa?h=B#9`5e$?(PJ)AcsqEhxb0;-~X+;y4t(h*`4j#>gn!z`svI|XyN|3*neYz zBJ)i$uc0*zo6imqe0prE+5KO`t&c=!-KXdo$2?%6w{_yfukkYyJMZ0+M`Hc`haB#a zw$trsbI5K56E6kioI{v3o{sj(?kAHph`&b&%A5nPUS8#fLbgb5G>+gBi_&8Zw zwBOV4zteaE_q@>Y-ke3gE`KZv1cf`lZMH5xJ*gi&PgT!wy1HE*d_;JBiHNdD+6c#h z@PCM=8{Hsgn62~yHgR@ubwG8Q3`Q!Aa&czANK8xd$+qLeGTHE02=4*k+oQz!=7nM_ zm&G1QUc(M3-Z5)`HlM zfuk?C`>A@lIM2yRNrwDJaj}3E7LoWls**!)p6ntrBwyyS{JWGMiBsE^bNf58XSO~PHCh@waIoA=(L}Q z>p1)E0p);;WNcDAA@IcY2)TX8+mXgNF#-AcR@}FJESHOae%^LCDg)C=!2r(pI$CYM z535aTR!cg$=+906-IxN4}8mV;Oi=RDqb1f@5o+XzzX$<&C(&80aF%iBq2y zb3`d3J{IS)LUn8lJhNrNe>kQT@jCW6?34tY;pdRcNG=%Zf3GL$@{!%%M|7EH#!D=Z za@-=3@-Fm}6`r2O=y6Ulb_tOIx+KJi{HqGm9?O53;+b=dH=L=$6H>fT-7ew-p+4n z$O+}3LQhs&Gv+#D#(w~qei_I*HA;#Fl!zqQ=w>4G7{B&d9=b|nu zB}T#+G3Uo331)pWD~#=!Bij6_lWS=sxckn>C6X5N((0=H6ky$qT z)!xnY+>6a9;N_O9vU{VUy~> zbGeQ9ZulSa-_Kl(;s`6RyGCsS8MHYuV(il_-L~(EV?X}wZ7lqf+-&#j53&ylYvq~h z-t)E$=HJ${+RYJSlW~4`BkV9wU-c&3S*hl@xvGkW7y|#?#)Gaxnx?7tWigS}}j0C~TrE(2g`LlG3(~Pf8~T!)XXwOW#W)hK2oM;0bfqp;1&3t0+`KZnj#a`ClDK15=SFX`Hl(Rhl`7mi>Xp?~v2Pfu zzEvJqt*(gHQ+GhrwGipw3vL@b<(cK+tkIXz3D^2zwzQ}@p>XnYR$5L;Yg?D5;48Y7 z+6cyF91XnN^@XUz2jYWLaCmG%W#u zj9+8D9whC$6yYcPkYHw;6jS+pWCfy(T0*Ndq52%eGF>x4Sq7+SM^)H{6v0`x$=5(c zWoc+7Ct4tPKNR?`lbjucV{$akVxK@Rvqk0R*5i8KiovZ$EQLYnoX=aP6uT z(G`UtNXfL^0$iywadm4$S_Y>YX+qA?44{dM^HHw2vL!PkcFn{P`+O-E)s0moTXozs zi)DqJa#{Qn;To>2SzJFIX#s@W-jKkFSsZb=m3)ABHXv3BEzwM~AhKH=!%@nvWc}&e zL)R&Ms>3riu!{Elm6hpWq}A3vu&o@jb99L}Prmb9L^lZRC{;g&`4uHB4gav?uB;7W zZ7RbhM$I40e)?+3YT|vPQ@_0}8re4R@b9k*BzJ_Me~c>Wi@(qnp0~x+Iatsyz2V93 zz^r&>`+3@={|owieStKCRfmE@C2PM*`h)n3Tko&alJ3DAzyG6!=6_3@xtat=U2vvz z-D4-?+!OTVz;C%@OVC~hYkq7J7xj1r0R12TW3wLO|0uv_bTGVGa=ZM@5q!a|_qxY) z^_pf)-)#={{{P?-TdYqf&kX(dM_dV#DF==s3FA3w3~~e&uyk_-2?=&# zkkz#kgv;?n*1;LVQs6i?vJ71Pd?}TmVnHn5cl?IVHdo$GcFivJnOf8(gG!EYNx>laBX|$h`tS9D+_Wl)yCz}l6bOM|T;sA{waG-{BLP&Tm$FO90!#S)OHKS~~}aPYezIT6QI3uCqP))1@V#G=iE z#$IU)v@?3us54jzS!g~(E9IjvYNo9ZEp-osE%EnPMyyQMeaRj7XpSN9L{t-%kGi+I zHFu9c6ZpOE`w2{{%Si^}7hVKZaHMSyKf0nRnNb_V8K(J_2`O8Ov_*%nlM4mXTgAgO zuqu(LP;i*Yj?nGpQ-ZJAXiN9XaHlI0MUg^;2)J*3l5ZKX|yxMxYn?`FY(Pm#j?8^%#MkTta95Pw_@Sl`i3%I zQM+c4x*TbP6$UcwmH$v_$)_<4XAC>A^x+4!!kk%fD4ek8TuIg{j0WHsZ47?%v}sUb znpV>9n1qWa&4MTcmIcRgc}n9)kfP{}8-6*KN%>nPv)RR$kd)CUq9kUZ2+5+UI_67L zjz{SZj)u5c*`h7>j1azMxemRM)ep*wGi3BA>|P{`aUR@U}5w`d%<@0lw{1BquGuWFe=NP;H_Pm1kl zl%GVSwTg?))3UNm-O8mZoJ1PG(JY>@6|b>nFqoO0B=HUDz}bHpgn*}Ho2*ogiOPI- z?H{h{@zpgnnK;8`SmbEF$Y9>%3rKz}HXs6{D>)Gm;*7Ef;9>XtQWim<=R58^@z}O~ z^kPfrbK4s1%*;Z}+GGo~@|45FJHwo;LypDMs1=EQJ6pxQ-ICKFLo?T5D`)u(6{Jwc zBIbQqSG+EFGN&)vvK=I#Pd*-7)@+`ZO*0L0D-h<+eWX7Gm2yO$I=Q)}ryb)`P}sLO z+leb>ST1D8;ADG-98TZFk~EX#8CDc3GqwNtJDg<<}f(eYcqk@p`s z%!1?`0B{u3vJAJo-~pWu>F4K+dphf#<_NuH)lC+EDpbkTL{r3EaieJ$xdch#XbU&e z&8$ikQmq!tLVg_3V5*cirKUp!=oYfN3J2=l%fMyyU$*6YEfw}{mn&K`u(I+x>|V@O zx<)0WY^~ZjW~baMzKOvRQdwHC9Ne!r$HUR1uvr%!VOOSytS%T zY{e4)@m7!gf86&EbXInD7ayv$AV4&wNFV1)k3W$D-(8*#_5efLsXYS*F>IG!%FW^S zU+a=-MY{{CTM;O5o*f2i5|%XsH8MKfe!!qA8Lt2-%I{gtq~;Y9QCPW-)xt$9CG}YX zs;Fn*TMGos-*Usb44w%>>BKh}@rSAOf#i^)5~(Ipe{e|g_J+w+v-7U;e@Mp-@G~kH z@(Lq{hMCAFN7bz&WRx7S4Mn}=j*v@9Cr8&E|F3>S!+H6{>(zs{^(AnL+jY9E?POZy zVBakJFbJnVi5MY&1z`mcnqw^Yp! zA7OT#uxHwOEs#zZracFnSAQS&1f#x19E9 z*5qUhq&l0WQ6yHVL);>B7yBEHWxGNwIO-roYForMoWxEK_0hCS74lup5tbaaO3({d zy(hS7$DU`Ch)TJZp=c`hsQA8w>zZVCoO9<`!-Jwi5nQT*h)NT8u2muFI>gl);kz8- z*1PJ^wnix^8hADvl)~uMs_{zDkvibKHJ0Yh;pX%(?Wt(rDtX%Df^5Rx9+? zu;fJxyg*yyHKZVxRBB2q_HZ4f+H^NpB%KQ3ituPsmjbv&_O&Wp4y!yDm^)m#O;NhN zHMN>NT%`QgfU0Ver6rVTT)ESO=tWd%YYePJ8DmtKbG7+qG0F@I6>7s^(L+|vqFOrZ zqk$2Yud*D$lCacBjYywE6osX&WWA%wUUILbz_O8*s*}9bb2-Jbju| zWSE$0IhsaauS^w45diJk%U$OToqM5MlM_r`zxa+#e*+~-iMB>=BtGQm#ww%@((_@#8e)z^EX&YXpImWOt z{+$x|Fy3&pBr389ABa{i>0ItQF|+G7K>y)9vGH(*@9=%OYmYta+OETus!9U6zHu!V zE|(#HuK2Qkg1S<6K3%^^X=T{7h9A%Q!+B*B)BN;yklxt}JEf~xcCRfEf1Ojt+ky(a z`>p5NxaIjJyCbY%O<<^b5p7*A!Zrp_9FvD`4Ewz~0F3Je5C7?ZE-EZIa z_3!#tueDuwlr&Mcwi0GjI({xN*{(m<6Xl~+6T z`gr3O{Ud;=6RfszJ)Y5K;!XqthkDw5ci9GQ+z#t_F2{BUFK_uUaBg?v+{ZMqQAycu zOAAkV_k z(iu`QvpVR;GG;8{ejV}9lYPqgBXQxmrS|kSvdzyW`Y?upwP%f|?dn4sV6>iHg@~m? zFK|T;zuaq@2z6Az=7MAY1|l-h+1BdZ4M}lcx2-u0p<~?teJ1o>c3HF9dek=mV^ZTL zQQ(1W<2oY68GJC6>3qTH*8QwJ{GE5)#r9X8b2F==Mg8^u=kL|$JM02?;`fLafA*p1 zo*Fz>&p+Z@wy(eHJw#-*c}RqBfv7y)+=3cvw#9iEnc2MfYdjx*w1N*Z+Dh35AlV~( zk>}{z^J3UPUFL>lpckz`ZZ8=hNL;6t4FG(66Hm`HDo9q}{s7hAc^M|~ZX}bTkx_(q zw*&U9oQ0RPPeD*ILEaHuxAZ6BYAUw39-=25I8J@(;&}=CI#K>C=P%qDa+=n8K&>?} zsZt$0-&*LniIlZS`KmD6iRhFVoXOTK*JPA%QSx*22-jY6e6ZiyE+y3O>VG z+oJqZ>-SAXlcy^~LO>_0V_c<0vqVxZ)Xf(wK`` zVF)5YF2=$YNRCkuh6`BIj6Ne4KrLJmLqBbpvB{tQVO%myOH4H5Fc?h=C22HKRLZPA zt4N#XcqLIfbR(dp33Z&ZK~VmpRe|cK{%EsbeF$H)e<0iM@DQUU!$BC#@-V0|4L;{F zXbaK{in2U;;i>79$xG$id?!)4Rn@2)&TaaUfhUYYY=jUk-uScobEMcv zx_F0NE|g>mi6SxacNjw%<2p?eA<21!T`pnk=*EzwrBt(^CI~A>U2y6r3idjT#=uWW zDtI`y8_u~f;_Vv<(!nSalE$6xZT;Gjvn)cyUsOJqF$)f3G3YYFLJ!taMzQl0p}-YB zD8@pGNf&9Asi*1LGS{dK4g^}zjZMZT+E>P(9+Po4Bhd+&D~GuSrKgJFfV`|HYfU?+a!}UiG-G!UT{RiAE@a(r zLB&wd)dxr|HU)n?vYGr}mA;oPc-|;%{CYg$<9+Eh=Iu%s8QttWd$T`4yutVudVhVU z9K2hd;Q>inC>D57>VABJ_v}nBVD3!JBSZjGx@EP1es@%!>oTCHCOaa|zfb@D-9MhHWK==oO-LXKK$tAA3PClL0rh+~)|JJq_`k(6hfYZtZzP0qZn} zukUAtR$0UY45Y~(T3yy3AM&oJ_uVz-^|1-@O%!{6INM36;GDZz!S*ovd_s0uN7f{K z*)R0&b*}99&NJlzt{M%!sPtd*Rcw`~mgiB{&>MeqJS11H@lVfB!TOIo0;>dY%N>~y4<>!BA6Y3~ACz!Z*#`Gdd-#|a-OJPd5efo+nZC~3iP=~`T^zqA zt$N-yWp*`4?xb}*g$`ACET4)T_s(W=_sFyJIqOI2OV{>6HCYGu+mwd$ z#XZl+`=!3)$i7|mV?5rm!+c1DnMuwx9wPt`7Z&SHuCz;Ym5?zsW!`fqZK ztEkX7_ButCT>AWyAkxg|IT<#-31GTfDR}X4s*(lYetX=x8Gd@%{y;<~h}(bA?PIrZ z4XXngXo{}!PuzTiuB;e~3aH;k2bS31rukA<-g0#V^gs&E(rZfY1v%AdpE zS)pvN6CAJWz*1(2sY)el%3LQ-iYoL=zG!xp&Cwot-w8&T)X^k6%-Cgv+?0JNo0N}F zENQVZxfo{}p&2PA;T91y0M`>TvZ*fD^fP8)HP6P>n(PQ?Vx}b|Ca4rj->hjc(x6hse6LM(0-hl`?K;LX=uvarT3LwozN8`s+ZS6^sQ6O&s0~n_Q z1LxFv-J)pJp=eZ6KVHsP403vRwHSw5giZBreOt|_Ce4V2eN3HlfEQ%y@#jaxZq9PE(?ibw~FphSvzMT+nTz=Yzo zVj*5Ph?qBsDc6W8k%$ji02)j{_3iAoMxlLf%KJNOV4yGJ{T-|7iD7H1VQG?itExez zvQee7NnxsaWvY20=Zt}UcAru9oN_>&GV(w$VnHx{!4O1RyaOOo5fD@$h!Ac9He_5( z{AHq=AM_jVMj4q53^f4Sy5pW*o=_|bW$+an_PU9}+T>85Y$!`LZ-k6B)wDLwurSrI zHO{n_YQTVhz(OHAFPmN@7{35kBR0<`W=A+?=Xb?}1<8!0eN3M;vWSQ;;`dt?RT>su z8dhG-V*A?IzPzu2WRQO!fLtqwYjf*+&$W;%w}ke+>xDdf<5XfCGl7rkp4=cZJ8|{p zQ=VjAJAHO2RW&I5Ga%U(8n6YC5n;$UEZjIOEeHzyj#kvICk@i0^%Z-5`HHCOg~Nym zpgF){yl2*BWSw80uxJa7he)7{FAC#23e(vx8#0}$UaR{r&V@B8bJFqg^&M`dHG_(6 zql#_47Hy*z`b-cJ6@WQe4Btih7h>QQg`v#{gRN5n}pd#WoQ6zhyKds~iWf86!Kja`Yd3Yf-`i z%KAMKUiewXX!8!n$TZh`E+BwvQ{uDtc(1@O9zGxRzzS5#(Rs$U>t?%aFeYbmOICgA z!J|g^=wVKJ0Tv!d;VPVA7~H*sn??L&*~l=OoxXa!!n(~KSk$;n z)LWY|*7x`|lA~`@#@^q&Fb=c0Crg-a$l4OBu~{D)pG2NP^Y~)7)0r)m&E4Gl=eh^8 z$O`+XkN454Cxy2g=*S)d3mA#1i(4BLGl%=5&jx<}&h<)<9vb8D_{g@Pl8FC9} zt2Li5hWO0>wJllFB&1Li$QNIiMw$E6rn)`9zu%mH>`j4a=kFlfO(b2Vn5E67=f>kW z-x=;1Ne!#Xi#PyxeTsXCyZC@jM(F9!_#M@QlVbLSYt6<$b-@0bQpm8IqkP}b4t#a4 z^G>w6x158USOSynAQH7R<7H3iKZH-LFH|bGXMp@v9i!bF_Zv_++|-fv5c-GLf9{ZN z)UD-GwqK_Chz&gYAD#j=a|upaESi*?Z>i z@Hco(zIzOKWc=OUK~n1~6u`~~o?C)G-zWsw3n_^(lBP-RFl?HkI02+5BrtzIr4&8S zk7R5=+I_*?W&nFF|2l&;C|LF){fXUg7gwiaQ%_U^lcE%4!IsspOI-;}rupG@05S|$q_Do9VtcTED99sAj6+pj5L0Xpd4PA0$cLG=kpfN+> z=@5}r0T)a_wz$`=ky*jufOowX``VdB@7mbBJU=*icmNKriHXOryuPnwA{Sc&5cQ9& z1|Xycaw(cwM~+~>FKKj2Fd z0yptrSDXvuKikf=J-aXM!v6ljebQ-t-K@U8rnDfmBIz_`{j@Eoc&8#s{US;KHc9`Y z6o_=7L9Eb4Xue>yw<1!=!5bJ2)XfU&MgwgTK1cH1KHR&-Ab}zgpXx5~9CXTdt8vb1 znExD}%n8hn7!(Z}w59Yx)-AHPC`2UY`Rx(KqJD$2K}CC}f;Y?%T8a>9$dVU{c#nlc z4_N{3=C^eUds;>X%SHv;1}%yvEsFXT+a?9=ncl=&{7ZGs3U!TIl_B#J+ubJw2Nwz; z1ejPre&l_A4h=aX!Y%fx!@-C10w5}YAEWq%B`}bc&~gH zhujH2|NiWj-2m$ALxq!YbC?FFI6Rq}v!-8~PE_04tk#7mB+RahbaVIhPksf;I{`|ByqNco#K{V(l~P9A z6Rmb=)cM9_^AsQbB!glF2Qhsd(VFY7Z^PGx;i<(okuxHFgK6~@*9!_=zg5#r_T-{e z?xzbu4v|!(F{yyb@7(rxwbI_EF$0NosmF&NXBL=0*T%IDAwJV#&eVmUq^n#-hh$vE ztct41Eq&;H6`C!1IaDz9!I+dB0BiK&JIkMpym{X7yfhxVsp!IF7+RaPrnI`Lf+U#? z?$hguR!F#Qb!~a1SkBl+z#86HIQJ``$u0ikljrbZuhrCAz`$g6RUMoirbb<8=bxam z-4F;|pb1mfspN++17-q4(u|C_3x8Js6=lWJX!ge z&{6?FJ4RVFqtw9_)f$FjqR~*WVhZw*e}_THbp7(1m}5n=fIbM4q2x5KMiKt2n4__Y zWGRFz237r6d@cpxGgf6C^-eXW@NdO1VkG4Nlr4amQIRMl&NL4q!4TJxwP9W}XdJ?2 z7AKFP(>$$?ji#7SUeRoXwcTjD@G-A4V$(dYsk=yB#HvE7s~c2D(GfBsZpO0BQj2O% z21FK+6x}qq=j&Et0!~K>jS;m+ENti0a~;8=;tTV*n^(i`>RkO_>2rg75dyHF7zAOy zmO&+{PU8{92@?mqyp`(y6OjfZDA8;-A-L<)&8c(Ip;=o>peo^`j=&L!;J5i%K|(n{ zigB!QIiGYvrFmCL=~DpI&w$b9UH{+jhW+#1gz&QDxv855IB2Kp^RbU*+qwKhczof z0P^9lMz-Nbdp_G@zr^z8SoNT)60KpDBr8z?w&BLnOK{e($}kAz%94dB7JI`StgTOm zh>n%vWYLRDw!@@Fq?0D2Can9;+!1`9kk8jP{3n}aA4VDe9E$BkvMeMiQ{nkE#8sOZ z8%7Dn6tawogmDweA{CgjPdJjQfZTo*lV6x$14Z#7=R&BL8rN9rnk|slxMsYKVQpAc!Wc~QRDX4o7VC=Msn-q>%2J9{ zLZ$!0nuovLD90Ho@?WSS|LH?Td=tl)6FEc6>a*5%)_sPx^?u)S6DaV=q35a|9#CbB z0WZPL0Am!LjMMKTNeh#QA;hmB{R|WG!~*B8*V|ziDZdg$Fmzy#b zi$>><7!?&Elf?@w4L{7heBwc1%Kc%$nkWBdXZ27b(F^c>f53lud;5+n)T&hgE;80} zd*matr`wt7#moL6)cAP%obq*ay;mpC=CbW%!Gbfq1-oX0yyW9Unxb}^+ z!FBypS-fp#MqQyx6e^7>tr#WvJqGRxzpR%^v=M8UgC&vI`%oa$V>^~_xUbB<+odUz z@%@|(2I6y27j~M$7hrcMw?GPEZoQ}9th9mYr`MecQ+{@4ZP`caeuzuPkHHk0h`QFr zoYST{Vm-z0cfoKHDGPg;kNO7z~Op`}7ntweWA|;4mYbj$pPBMH)#dmp>uu zk+pN=U7CTCKfq-ek~CkUDHPF+k;J*K#b8N}iOJ)>28bbu0ECIjKPL!MD@&u&N&#Sk zq){cMh$*CDC5w3MIL5c(^8~3SOr!+?zZC=GemRIX_i3#@CbzTFD_2$+2ctj;WR!n5 zSdIK0bt*Y*Ar_R}`69lPc3sF8nFK|V$tS*xYFqT#)S(z+>^bP2UHqUG#zh(aSwSw$ zBVb2@L996c6yMRjTBvpLDu^0HB3+~?^c6Em60^NKK`Ir7zQ2apA;@016F!d=;b#VB z|C_lGZ7?DzQ63>cEHB#S^H*b*C9yA2OPa>0;<-^UfmGcDo`k0WTcgG$z{m!Vf<3u3 zO(7b>PSV6UI|`j(a0D?Tk1u^Kgq^A$fQR0sqiLS;RwgRr(RO_pf_ z3N>+3+;@ys*$5j(5y~8r#F>OC)6rs;{RNuqG>lc72w4vDM0wPZ2x0;>lLbi5O0eh` zpLfU!6AGbCHjX)^!Vw2$sfJ&@92;N`mi=)_B)5JC;<*tKK3FT^`9u+ zkfNCzd4^7I(a@)WttZ1Qw7$o8GDb)X&h#zf0B+wOhnf0YntwS%JO24EwckZ-f=GOE0%jh1`jQZ+q}>>npLAFhYUSU}xEgYML#3;$^j zi27iH`8ji^@)ysm+TFtH!TUN?S976n8G4}!`x_Kg(ZU$sLL|1wYZD~z916gE3F5(47Q@g6uRxV6eJO7ol7Ynhh4+O zu(?Y6N{r%`9JTNx3QbN#>r>Z9C`5)o~?sB4fk?STYqH;b{O=^EhH-shAH#;S*7y(Q4Qvt`rh~m z&7LyCF^J40aWF?%Fn6P~mMhkt21W>li{eN3Ot6CxR!_R{S8S(vziM(JEU>?JL%`V` z_m@HxgyVzCxN7?ZOoXNOCo<5{WYP4==Q0FnFoF#xO0ja`f~9IMj}8iTQZKAv;kUo7 zF9<1_8g2V6%3q<#Srz3$Ou7aVni}xf2u{u_(#IIlOQ;{xJgk&y1!F$xRP=$LK7HIu zi3+JACkfL$Y>>bGLZL=g)X_1sG7T=HgjppW)--VjCDodI#WX4Ut*b3G#YC228~0Vo zzT=QJqtA@h4l~kCDsmwj&T?}woo6H#|8G5A^=n6gLE8wB}@Hza^jd$6( z=<{^vyJnwsXQZ)6?17{qM z{!B9)WQ4u{M0^OjU3_pl{OO%$DPnVK@*GO@U~jto`sVW*Fo0jvJZCGS4W`!jAUn)z z2&J1QFgw*mZt{v;EFs+aJ38SBw$_`lt?5duVC0MBTd%K;<2hw$)YRde98&^T_cXXFlWx|u= zoF~hfsVjl5rZwcWy8HKOv&BL3QmVddw=6Aa=hk{_6bAx@co3K(lfZgwAVd{Ik~Iud zHcge0zVWf#=0Y#-pIx!k^+)R z9d<)@M!Jv!V~jsCMMZJ*&)gV!L~1$s#`2(nK3xKQ+xXn9Pg7@YPr`2Y+|kZVoe6Z+ zZ7~&09YHr?KiB90v|4nxR#DCZqeX1&WDJ%3xhCQ z@9EvjZ!_RCAmjdSMfKj=Y4zSNgQb^CVwoAyf3T0!D~Z%pU88Ogl@4ID);_^F-iV{2~b>WjNa`$<< z+b`qC@RkU>I@l3BrO6PXcSAIE_%Px`fr~sN9#lxUkY_wDfGJ zG@G(04wj~4DKBOWZ?DmVo9TNB64JMj+dowra8!f!s^d+4=wUG%Fvdv2o}}}?WdH2z zVKVTwos}B)DDXi2*&GI0^5W&7L<(~yaK(+I&bHobS@V5PM|q3Mbn|JV5*h&x^cob)0hB-{60TE--K1Rs1U?Nw+X{RQ8`w zp{XyF57&(m2jR@a$s7njmf}yVv-PSDLC4hu@*w*+{^RqYD5=gqSakq4!m(y^W#U9P z@jvGQSI{N9g2Oi=MXBFp%2H58y4jzD@bqcEK-DOx#MHV~FhX>!9j17kla(XqW#W5r z!}EXwEj=S~;vWSBl%*M_p7wsEGFS3;hxq*Obxc|35&ysl$7*l$ci}{^%h-BX3i&<{ zz8%^+yN~0nBi3+f$3lZxbGl^AEXOVZwTj|$QxNE35A7$}hVb#j+NVsq9xZp@pH*m$ z+J#9&qZ~6tYZKrU{k|B24(eNsu9L0UhRaL)AjUR7(ryB$pTvsAW3PEs++1yw($0JY z)E4<}k;A))-)#%G9+YW`_&SEPg@2)p zRRF5k)_O%;A83cTHTJ&_vgmJxl;?bs>)0&j@s0`~fcLyuVU_DeLzQ4qH#1A+{fDR! zQ==G*bcC>3S*Kam;U-JC^DlmYx8(r=9bIMenBFp-O#?eE8`peyc7gZmQOV4T{lqcj zWcMpwBv6(>U_8Ez`v5ChOGmF*Ti@8vDr7Yc$E-L8$jvwMsGI@Co{W8vn$9&D?>lp~ z@4P^tahZfxA9)F@xscn;JM#E0m0ZAaCm#5`#%isUxOj|n02xyz*Dxeg+j)`FT854d zuY#U|ky!wO)}3SnCXR6NHce^|c+!6(MhO8Mdvo)$OuUNcn6WwjDeh*Q8Gl8DFTvK- zDx24Kb#^y1i@7>Z-EC$&Px}(X?-v)Y9@tc*hI^NI;k~ihvi1tMHT|C|L`2U!ZNMkW zF|})(Zpk*D|7|;0J_Q8wkNx?B2m}HrWfg#Yj!|jiiEYNATwebWBs9t^8Ct@Yi__Ax zO}*UW!C*0~=Ar9J`fos>EK!bu(+O9@B9=9s+Q}kja!QJ3>J?a?5Pb9p>ZU?Q6}uQ9 zz%^|{R*X|s&&Az0_=p&JerK&A-+B+2@tzW<^pWI+eDzD;lOna|X7S zX{F7>e{ShVN~{}2#4IJ9&zxhO8nIL&)pc{^C+q$|2qwgeWARO`y5%<|or=dd&gfP4 z;JI7fiDn4W3#4W7Uv3W6wIV+mxzyXcf$UAvw*O~M4n0tH>+H9$G?>SppPm{+Akh0a z`t_~PC)SUP`fp9sJqncNXslQ@zr}g_Z&x0b_}`9a{vG~sEC^)j(|nLXe5<{6F5w%T2lnZIGE3!Ai=xQE+T~J_7Kn4&H6#rQc zy)HZq(e_MOL(jn~!D_+6gqwEWKpzw4MqAJ<*#IE~Ioh%a8}Oo5$KiEOpkF9^FxhRp zW!5zBEu#0Y()fXt4Wb)b>!!boQA#_{Xy93I-XSFYOD0*;>eW2&nWZ%K&hZEu!i{Eu zqY-JmQ)h4Gz(eeB<=`P*G-w*ig;c?;By*_3nD!c~DCt|BktAVWbMfgfinHr0rwR;C zDD5>OEy0l3#rU(P^<-h(h1`XgqiGG(kGh&oeEB%yt=2P#OW;}Kq41B6#P`#X>+hj< zFRB0n1u`81h%2ReNOgHoAXwHL-L{mK`-|+?Ph)i0HWY(KM|Jiuwl)mPQgH@0vcFoe zuKQ4T4r9I9&{#JY=TPseiQaNs>(PhWk&^-D`b zol?1kmnsl2dv|%ctw#?rY`c29++U#uo)!cqEK;;KXiq5 zc|T-#zEDI0r?~~=c##Tz*NIg4m;Xg*J@VoVljol< z_X%pIQ26eM-9O%-GkJ8E{}&*c7oLg1Ykgh&=CO(cgrp?-Cz)%<%e-#<|2_~@aY>1m z&dY(n*4FC*r!%B9`_1dk%*~{e~DT{JQXt&=u+WnM*+1~ipPzC$w^`S_(MjvXJ%$>Q18J1GfTV)KqI zGk)O7J>Dt3IQ|uaux4RDO&EG`Z5-nhRm>>%JZc;sgKol$RTZD-G3Gu;-4=?TT8_sI z`Df_UGnF9W@!n;_tbeklilHa9fk#>3AhMs zVQFaW(Vk)aRYoiAHIH}gzRgRZ-uaDUM@SxV8nhvQP>c5{%0ei)gYkqWN?a#x(771# zwG&F;(>re=;EyOhB1KoncJf%R%jo`dJ>M6`R2{JSDROg@?sSRoPO%Q7HS^<)HRJ2qJZZ5yJQ<4N*LfNfN*Nm?*@_(~d)sexbfu-> zs^2iItkgt^r=2A{(LYBxz5HGO&zj2;6)aXPW@R3nokbxlAk+0(T)maBwfaU!pY7xI zf529#1mdicmCLPY5fPD0PY9US{$v0@%V-$T-PT?f8(+1GWNGQ;!sN%wI3 ztYl4mm{K=VY&kVKr(H2;)nqZUM$r?6w8jI4O@<<#A0^|E9#=bmyi%8~DtmHaA&N3= z)TEIt6L4kav=i=O&9F8|oGHNBZ(timaUTTybu;w6{}b5uXAm>7E~~69fhS`Z+UnzT z%bo`?gM=tX#`41UXE^l;uqQD_fvy8!vjZN%Jit3#w@R$Ic0A~7uOn@yUa zy2>l0AY6Jftt5HeN9mfFeZ`$!Rv`(*B)DM6jX!#Cb)iM$0#j{Dsl?7~$F{(qi5Yo= zg7*bMCZY-+NuO5o?SB(AE1rEVUl$Cyi2&TdatOWrjk4qb0q*=eAd<{S2 zb@Pp|v(NIWh>Yer(u(yE+;P6Fz~eIC%L9q{JWtkN6E1pJ6FC~Hl1>N zD$rMfyqD>iwE2|Lrkv``5*r(u7HUyG-7$V1a1wK(SB3pUZ?+~!ftP zo5({hY#oIl?WwGZkN`L14-_mCf2-~!NLtw20UELSOvP3!ef^Zc~E6QF{O8t8l z{<~1~M!?hCYG!*8A$v6?+mRyshXJk2TwK4u49Gp+ewE9N_TVEE{|_gLC6l(?iw-<2 z2#7|12m6b?Ed;+)y`5T`?v&a{uf1lj{P%dBSlQ#WP^w?H5P1CqKOCwOF;q{xw@az# zbtwYKD?YgP?blo#KHb`ij+?%m4KkQs5!FUewl~B2!s?Yuu*UuQl&6B77W>x%Q@@Hz z*CE;~KGsspGQrL|KmUU)ugeckPDvcT%r9bH^1(4R<5a05G^ux1R+NteN$rwNkn{y? zfTn<&XL~oAl<&`(Cqp6FWlD~fBuJ0o$lP>MKK%vvBIXI~EHr(tt-ppC=kMD~!p1@m z?8<7r&rjTKX0=m=?iffMY5$S`rl5Ayvo0rVr7USui(2KeaEI}FLjCvpx|41p&OFzFVMYSO($K1(hzq7z(WtwV( zXZ-^rYq}m7MMZUfM%!_x(^d?un3nSx9M&%OXiFj(C_{%mlXo$=Y_RJT2lp3}Kf=%h z4{OOR+bT${fq}mVgh5L3sWdc7?Ai&X7(NcA_lorkuAmxYS>Z>2v2t!EJU*-s{*oM| z0E@CNxbZtBoNd8K~r`sjzpu<6%rdDV2nu z{n~YZYZmswA|aZ`fZ+C+$ig0eIT}L*ekYZdSlnggXHMOk`{CeIOu;_}=ca9&$SAoN zJwUGZCIM7x#=aUCUVL8_6YewJyqQBBZ2fP2{r}E?|9c2-ol<+{viaAX;vJ0Yb-EgZNhd*_^{V=(!*`QwSN3l^E~2tmp*cejI`ns_iAsl4 zWsXA)v?C(z&o}J8ktJx1%@q{EEfB z)7ce$eqx@?ZTQUa95GPj-Zax$<-x9(Ekx8|0>>Z&1{rNLS0!`|E6;=;e17yFHBxP-<;%w%x}*dq2B z{h}>}?L9xaN+F9?c-`dI=8+{x(1z(3u|Yx0q{QJS4iBqNd^P`TL5)Dewr_2%=5nNL zZ4d2Ws&I5wg0o|WBG+yh@e|a0p$_zgyjx>a!%oTG78&Bao9gd{1f^IrYh-m3V(a5< z86S8+jvps7#7Z;h78CBe<4`*;&x4)MLvHRH2STUe7|nJbH9Be^e9y&9=ybpIu~wO% zVr6-SX>v*V&D!i}A!QAN;J><1YKK(JbHv3h$$ljKmH0%-f}4b!E%`krhilFIaIpEc zI5_ger7326+uStj?r>k)$qq93yz#KX+S~!N8E^F7Jh}L|8-h|TUwAMoKS0cHm(Pw#010J8vU+bt%a8hZgajiw{|5e z5ga=?=jygyxEx`XBT=-`#KM+hC}P4*tn|Z^kzA3$QAl7=w)2d(ypH}8!3uW6g{w>$ z@Xth!;NozDYrBM@YNYI~?>@T;I^2MzMKBVlK!9yzv+vY>sbc#jZxeCiSc=1lVzeHp zPMP?7_Divi_dY^ZNh6|m9<=6CJ>d8JqfhV?13Q5QH^4EmOnc4&x7n!o59*mDTFRs) zCj-8ZogCB>v`(vMOyk6jAQ{8Fk2pgy^0^Lyx?*bGn@Vs}(jubH+?_|%_vHUO$NYCK z4uvpRWipK3d8dCg3CEwJqgS=&p zjzz>*ZzV?!y+8A$o{ex&Oe9sBMu%p=EZ&os95Lze0uWC(AfgYb=vS7ZH2Wy3b#`_>wEnitUa1TsNoX` zh*(0s;%@ht-GGEYB(2ogIMXQ5xFy!8=bbU_R6@G?Y8ruVOY)ZmO`fVp|G$@nj4bq$ zpw-h2Nmj3;`|{ALMqUS@9(kBT)6DckZf%mD(+ji6=f|E=6&OuZ9<|Udn{sYVP75jT z+G`upb%dgbYYwwh90StyWr(hb3Pt=H+WB+xUI-3K1oWX(OyMFwSU!SOu)fpwmAWc= zJg~{_8d^qM9!fbUP+>WJ1qfkNRrrUv=46wx;I+!K|SY z%@Z`TWVb6@#Lh8@<5|&f=xa$?!*T2;P}_M9|55$L48sgU1*m~7MAaa{9%Q}x4Yq`8 zD-^%)c?GamDawi(k$`*cU2)F|RFOp<&*dC;yOJ2-Ew9&-fJAWxg_3Zk^CSM%yC+Ig z4VF}KB>b*Keo6jB)x5K4^F>uA*YNsIz5)HQ@O)-je)M}VdI!^#VbkMYu_7g`T!^6~ zbT#CO^cGI78to@X&^nLEx?D`vS48GwDs*^_Em(i=*P{cPXZ^4nN_h^dS%4}FqRSN+ z;9OneOtWG??-(Oe?Q?)-n}xCBKA7p~AgzFI;NMheDt($HQUsEuR;DC8j06To2?ota zh`Kys2#OJ>soZcYIXbHz4YZ+97HoW+O_NzjBfa9lH0^>yjEFij1|xL@rKw{W4`d}< zOGsA#BbJ5Z6q1F7a{DKDCGHHJ7*4{U7U+UGz)6dCm;?f1#|I-M5CUwtGS+&Fs0a3i z6|XTh_7 zcxxjtWAprFy5i;BmjWM;H~%?LJiXCqagxnwbCei4nSJPH*5%92;k{L}p!apNalkv3 z)uJ9-=i7vNkXxOFE#q?4(65`9HFT64vWan5-}}BY)dcRvi_*){s*_zgrclYEp|dKY zov=k5-}OepDlWnak-~3cPe06qY*H-bii0-MaGsRW#oiapgYI)tG6GdrXVzTbKD@j4 z-uN!IHeMaFF-jOo8|7x!GWM+ax4T+CpOHXUl&Rsi zG0oqnAir17s~z$Jo5xca(fi(yFV8hNt*WALXWyrK4J!!`3W*ON4WFM%XStk2pVshk z2~B(z$U1LFI4}N2+&;X@m7`R3I3ueiC*TFF_ z>SOCL&opi4o*aKlnN%SMkzDwmk&C^fPX52C`vRqfEKm(*P$RGWgGf@QqWtEb_XD!Y zu#@rPFG&O(X(FA)+*buwR7O|E9W8`2-UT}d3?cL$9`Og<<#|v2Y4=P4OQvQ?{AUHR z@z${Wg$pZ5cQjo+w7j3%D0kJsX;PHq4Aomf@Yv;HJ+lZm^)JVEU3 zib+j0xKQ)kJ=aMa&D*&>8fIOFTiu80I$opc0%P zbR*ccYtC8({z`b>dBj2tMY^?0Wbf4z=hO&Lz7VO+Gp4Z>h$x4vNiWyrM`=W>V0pFI zn5?R}zI-M!l(H40a^P1>Dc*cf`{il_iKb@ZXiRRQLKn+1`)=GjEqK;r03sDGG%q-_ zTDA3$qPb(1ucI9gAH}uoOD?>Ut@Dm9ulzE_M1=Yliw$)Du;}0W*xXmndQ1`CWe{`q z^BvN$653D+-LP1XewVu5eKz1{5!O_UPhHZZI#H2E{=@rM+=6-u%A0+m%0|_yi2Xe; zZs<{pzpC4Fps8nG4GafUmIJ+{4Tzl}uRg8%tyh6tg;d4j*AQAm{7p=&nbR+0*DJ;h zycehY2elSTKGzDH0C~vRWn|gtS_9X3^HIvTPIdZ!{$F!j1;)?khT%fRqeHlOiwQU} zQwD#p`TiNkCxX$yCDDq*Zn9&YB8?S0sik<|L`hHVlKh zKQlW_QN+TAb>&%!B0^Ao=9;qVFX*)KcGw7`B&4pvMxai2`hn-hghLB$SsOEYnDK$M z-0cv=XqxThUJbl%F3)IW8O@@R5zCe_Jv=;4|BWUPYzy)>(%IS{C&}qMz~My$YG#qu&?0G)7K8A4qW1sU zShYOW(Ox-p-*_I61IDxhuA7N}EQzFVmv@A0~xwc^a&_;TnEAjM=&oQlU>F@(S&B`HwU+V`;U z4@=6SARWoO?N+E^(KPNZ3Hz2|$yC5p`QXi9MiR$dp-ububQs-M# zbz?W0M6k4_jR~e5Jr6GG6Whim!(j@hGX>2W6xP!&WYaJI^D2`ek&!;b(;yMp zZ{q2rrR7c1b@7*}YitD8x{H~a1fDj%h08zO-48Q&uO8C}D>sibOc^)#7}mi-DH`Es zS$-97@}kCbptVyxPsmB@o|vmdYM+vkd~Wu-;byqGI3q5Wp9_$IhLK`5jcTRH4N`TZ z={;g2cWc;o*0#A2M!zswkWzLqcNF^JBx;>$EHIIrP@4~3+G6=)>{A_OILLbO!U>O09M*bs)Yo(4&3M;VC258-C5bXGu9>gUhCp(|LOQc=K}59`|xD z#q(RrcjDZ;&k72?sr4F^@HL$bYri=MhgI>aiEhJF#%5;zzNRxZ*{)NHZ06sKXYn-& z4$60Q&o6lccU9NU?7hhyJY5Dt4~KvFv^hEVG;=+Cmxws?_b;ug0*M3-@%7(-T=%XjWh{FHy2dmKuE3=vB z?NrIx`Tai!ex*AWuKsQc@%OAj>)o*k^C!zbY`pLcd>!;B7H;yp_GN>O2N~oA2RTK2 zBXzz~KH01rEK~vBPS%G&_|kGj!a>CJ_-dPB;?0VT#2ZOgwfn z(MEVeS_8Lt$%?k}h9Cr7!3^0?6iM|M@>Y!E*0bUL!jz;K$a0T}VRU=#BK@Bv#|8Wi zA#Qs`SFu)dJAU`GEz-r{fP3j8mv5uPN2hGU?r4ZGU}H7NvHyr4lEW;8 zL`q$aSv?mcJ}(7(UZ}p|38IHe8R@iBLn&VlcQ#A*8D4@-m`<5O;k0XKqv0O|mFx=I z8gO1-JdoN?6W^Srhsf5uZX3C*eq(UmKUztRz>pgMnpGX z&pU=Y4>kU4N~?6q7Q(gF#MWU#JswmDCxNzNS4;m4a)ayi^kO8%ZN~^Vm*09F%lrR?@Ah09dj|R?tMtO>iByyEY%*m`B_KMeS&EixITw? zO-24IxKq z@7aXsU2{kBsqah$CpIjEOgn?0wb9NQFu{6*V(2}Fs1$;X-c;epiwH4V6pRQ^<2LF? z2#NxOOr~a{3YDgrBD^%~MZi%75K&pzamj`_Ptn{T8BSh{NpfK|+K+e|jL5yDyoE&q zorlO>C#Mi!19sL{9_!*R@Zb!iG~*#GgXr2%IlbvWe&A5a3=38;NqXsM zo|Z$FvNQJ7)b$Y+BNE50y#xFitoY$Uu8i%HtY&4MUbZx5>?}hcK*_fmnode1EO7Bw zG*oFJlH?3FA0y*nECn8HzWhZcI6_@sBd#tgp@;1^8qyoiFh*ORrcwxGD!`!(%X7F2 zApXg1HS3%oE6$;bv}~eKQ-|ese&S3q^b1#N_?3x)_mHN)3qHypnW5pI=(0W%!Lu&9 z(SH~(2|=xREy;g3FouffS!)_d%c;2MzRyJRBO)+izB1EQR>aKkD0{H7erxW{g;<=~ zm^ihupr34Y&^ra&@KgEikvfMF+7UX9l#C2b*@^ zNWI*Xt%0K74e_Qf1MfaH{3g1l;-^uVk0LOZ#Qz+WOcGy-?gH^QTc?B@ykpRVywVGN znz~ow>dPhMW1qOi{It=Jml(az%7AKs*Gt_3gZ;{@PiizmsTS3lFRuzUg(RHWksjB4 zstBR#HKn=2?hFmMA3yOj&Jk=P0H(B`y|XOeGI{+~}VL9sQK_U+jH%M135k>`H3CLKq)@ zhC;2KKynRP@@#-|J1EO=K$)$@E!)$H1d~{W32Y|=zykfQS4BMym=mdShEcN!b33Pt zfscJyy2pfBgxgI{po~xwWQ1Q}3NW@5iGyazB7%qb^!~V(x6S7>FXCCkNjAI4#;~q_ z0FdrpvnwVdF;OS+YUQZtIP&N$Ea({-n|qmqmLp^i4)C)I3T%Udz{8~qzY~aL3CcYj zJg8WboM#>Q>>CaHfXX=ieL!iF#+X%rGKs&%TondJr7^3-FY%>2=^{a|SnuuCGS4*% zH&PB%y;+LoFmX)!c?v-(HMmx@Fqu}gi^PHjLA3xZ>n0ECI!#dLH)1tg%iWJ~CZuen zyWqnKr8a#n)X@{SN2A-P72%^*D8KE}n%HM*lj~CFBqMpL*vT1wi}J3nG$z z@v$x($fI9BQ9<>C(K-a0RD%J>%AYvbj=gmGc1)fKqEs%1T6;)2HyI8-HquB3Fp5Wl zzJ~hiiDkf__cmhuOhM5`C=S4<#^ZQvdRN%FaIUDcx)MEJ@tbeCAjAKq2&>Q`{4T72 z0;`TB1NHI1df;Fl;%d~0bEW(wG_WYGaV(3jC!)-Y(8MG~u)t{`Y<-Y0u!yI1Xtax* zQbk;0P++2p(VTb=wCqjk@BoEZJ=x6kdy~M}qRK1&*na!Sk}s@RERbmPmBR|poR=H^{f%0$k7A=CD(ZymOuzpZtIvAs;uce)eB z7v)u5m9dg-&o;JNep?eAsmjf=Mvt8aeF-{06KXmcT(1cZdPV5;wolr8dXQ@S%{F?% zN_N1v$=&nbO!-YyBw!0b^|E2ed*$syx{uwc~g;Ey}>u|xsvpNY_lUx&Uv#tV?$uX z)QE)hk>_9-cIdjWifC`qnc2-zBWV)nai8qVey0&v*F}e0su1+UA1~Gi$j%XcULyiu ziuqbN$^16G-i}t7b+xE5+y>III-e~IUtZEF$pQk&E?R$P|DwPFF+t^;G=-(f9 za9&AW?h@-7(jN1?zg^$tAO~Ec2DV*Xn>c?t+uwZc;yw2TB%MTFw_PU(1>LB;zW5N@ z4t_n|W`TAuSI9s5W|X%(|N0@;qOz;%ZHNH6Va9yBfJP8>_+9Y6J!Lazq<2OXhP0LHFT9{*5;@ z!4ss7s8^;9bze@0t(%WSDc+v$NrgS0(L`^qVO^k#b|?w#CncG;f(P(b92@aAn~VG8 z?Z=Ca9=b|pchzaJ*&`gw)z6P74}il_=&)2Se!I-5`m)uyDKIvPipZNM9VJ#o5hEIjl8Od54-1XZPRGWlWLvg ze-&?`xO2M2uNLbU&swXp)K(>}1FL!RAi^>X6m+bSknbzx?66s?mOl|@oh{2LkZ39- z5sWNSU%>Q%^TGBg&4V(B2u|ILlvDe9=r@)eSJggARy?d z846rN@x(l9Kby$@W&ymzLwzG7D^Kez13;QXyKLF|{Q^6O#+u|w$u5ZW2!Vp7G?fye z%OK-+K0zv;7qccNdIfM?Pn2MgSF-K~#|;*4?7=KDIRWFU*07~{+*3+yy$nU{mehN_ zGPLcGAe=1@ArYtOZS$R~LLV+jnVLaTb`4i*#M-tR9DdyXvNk z%ftIrxfdn&EO*FPRiaB(vFn}}-@e_(P?C{_ccpA8GRlql*SBJ@s)b;l3&@9(F(Rmg zU@4{+%z$NzmmpkxLd=Pabsr%bK~dfl7y`9Ftv9d9T8_CQiCq<;@&j{&xof_x=2bi# zE3%pVkqxqXQn{mrAK~$|xG0TG`dL|iNJXd=SL>J^vy5G1{alu&$2h`}+&?v=lv4ke zm!@o`aHLv3T3>O)D)?mVx%2!x?t(m4z{{59NGIp>A@@~48XX|}Ek9&dNb{=%Yu>?e zvN_N#$?!cWo6M&qVrik5=apeXf>Uew>SB|7gsD*b?doQ*`HpJ$<&w_kY3qi4b>i|M z?#Ae=Jv6w3=y0JkcWZ%dfcpj}BR{7wn0nOk82ROxZrxMt?MWc$wUnsyY7u#@b#4z? zZS2O-d*TZDTjK`_-aMNW=gYsd$ZhX+Ol$Tm-lBrzY(W9JhGLxK?-v_HQQjFovmrb2 z_|hv8Mgdpko!1S3HP2NHvQ3>sz6<>WHSiw+=Z_8d`;S$PdnKYAqg8L~{Eb0wS?FZi zZD&1+n!J0zl>YggoF|@cFgU*sLEp2=EeI?bIK(setsl2NCp=sa7MiFa%i5QUve-F; zhw6@Q4?^zvn^;EQTXL0dBH!@H0$n2w#p=7FXjyDc)pv01eUYkcBm`-Oi{R|vALueB zTzl=2+W!nx1v*8N`BT~~_FJ~O^i@BeqBI8m=an{Z|0&ciZQj#Ioo=R(qHjj|fM@AvHy^gOw_O&(u7hB~XUGVptab&)+x%hiVbiUm3 zU$omMb)wXsVk!8BiX-`PhL$^Be|uoPX;do*zB{FLzTW~jeAUvT4pB?R6V((rHOZyZ z$y$D9IQmm{cs%eozRd%jU-uXXqvG1GPhqPVpjJ8~+HsZr%=Rd}raLlQ-^~=vG_E)! zQzU`2Jz8iQp)A4!2c1z|rW0{GGtMYsWxHE^@V}&rwYzf;(Ewlcs=pdq*S70eg zN-syn1I>4ZTram_DzcR%I{?F3qeKPZ`L8cQ_mRR^*eNd=-xAzU1`nPJ6`*OG5*u9P z%Q!YZ`^_@Wt1JQ@oBS6qC%~XUv;*tQ9a`I0KJ@-y>B0DO6bkTk zf*@esL)w@13}w0t`y&lCWq#i1C&!11k~=LwSR2s zFI|YRM9i~{7h}MfDFe6b`dPHsfc_YEe$yRwOqd6oc{Bfss+X?7D`R3B8z1N55gDJm z#X&|!W@crr;qDxod4U~Oiql%uvEy<0ljFHEF4(dzZKg3JScaS1VuT2SjYd6_&GD;% zS>W$FvI2y)H~CeI7R^COeWb+p)TBiPC@e;%P@)K=XG0P&G7Ha8R;vgv;>w$9#l zdKNC}E070@w2S#!Y|acfGv@Yuq2a@LBj)}~iY0V4?Og>&Lk+rZU@_5lIr~Q&-ubOF zsmdVgabY8Ts9wn9_)7ezqyh%LWYr^jYF&NO$g(JZD;~Z`txm{Yj3nv%`q3nW6l(k` zFw=Sp38^~+4!%CH$`435sUIUFLyMZ%Hj3vA3bFV-nB<^vbv;-YniTexo`1~@aBjVx zvV$QM)sgI}(H3Y(zEEfi4zj`_Q3zj(ku)huP7(WkIh0>k77*%ytq%z0U21p{6 zjztv&2Tn!q!Q4;2mL?{i5;wA%Xdw^~j&qjt)bHa>Hn23z@B9$xmKW%MDkQeni;Re% zRr^v3e0XE@7BkrwCzx3*TQWkRf3WpEBTR0l;_0|HN^3=*f8440q^9*FNyU9ZJ$tlq zZ>g>#D&u0}=DG$&*IBWynS}hKOl9tNF1v+S%??i=^x$QAD(XqVD#&^0}yAbs~Yfbic9h0si>wCjC>d1isj^`ms0t%K`^SA>4F zegz>>X^5skuSyPAZY#~?ypX@o(*g+}_*b);Qmit=XoR7ZtW}?Gfzj@{6wkS+)^2xm z<}QmJRVJb&>uUPpezA448TYs=tJ&frwJtOvBbYFLfke#Yu)CM%Jg8ydRc=)|jWgE- zC)Fe|EyUcpvb#|3_gYQW0DeIwhdxU5F{a$0<63*wfXL*WK&}ec924Og+;8UZzCkVH z+x^kYHhnj{JRSVF9CWY^sE}p{rS!Und)L|XFD4xVqdb-jUI`F+Tumcwuz;Y(A=uVo z&9izUFUnAPApJfjZS{jvAtvyz9dvwkp4Q$3zp?g>eNL`U+&Oj|yTL|1_gTpBF6qA- zx~|6?%%&nf5!Tqmpm|G0oE0Nc46o@@&6qaOfZrl!qIw75g4%5t**(?w$uS1pt5c2hI1& z;7XJd)Ry7@+o3H8_&H$w*&*OwJggXx$B}OFBF#os)5=2*#WA6B_R^nXm)R22n zt~EAd5ynR9Qqy?Qu^3_vEbUK``yFr)@*H2U7LF4KW5`99G5Rd1p)2F3?qnTqFpU~;l(R?&QV6Dc+VLb&Yr7!T#TdkBqnDR znERWprW{xcIONO!BSAglNi9je*8oQ&p?H{9nVY7R9H8wR?7yFOp_orFm)MgQ;mPP8 zg-X`=>NBb;-c2Ln2^GihLKAA;-kGW02)0*tjxVA;GR78M-f;c{Ttenr0^@};RBM+Z z&QKKo8m`>~1`YGmR7!6o#Yi7q1ysw?!xgXjP&&o1Ysg|%7coUd9o=waEN7^d={0GL zg~An?DV>)OXS~q*H{2JQc;oAT<~d;mIEsvmG5+9%H)g(k-MxmJ>)d=~en)f z-&YYloH{N1{=!HW>^HticgVD0 zw~Z#ooKyiI%)!FNy3vf5u`#>On#H;+#%d~lFT_?m`HB2FgS~y_dcp@0B5s8vU>-wh zC-WhF$u2+Nu1g=0Tgqou7OiiT;8Tu7S@sveE6`RVpc7^z<^G}7W0k+z>XQE+bb<7K84%a2NbVlHk|*OXe--=2hCQDXUm99AB4C&X z1I{q25x>!f-w1dQ6Nr$mZZDBc(_NOhBRp<$q&}NY-4z5qco&MPI099 z(z>!*&mJI65~yxS!+h)10)oCF&v$4=z)zgVP7Vdz&E*OFa_~Bp=SsKo8e5h!G3K#v zeJ0)6`n;^J2Ye4s&W_JhT4+JPRIANIhA6@tg%t1g<#Oqm*dge&2-~^}k3}V#Q~EqV ztgy^n@4UQtL&ZUw3+ufGU6eF%AQ}WX`50L&5PBMmJwvQsSTau)JvlvMbBX z_F?fWB?e(oS<+T>Nh?I1f)IxRRl*9RrW+yg2XcB-`DbS#klMvg>t_ngBjKuL%<4c# z^o;!3$*N9^MAP6W@{46mPTpkmlH`LGd`T>QXe3b!-YrB;;?zE_0rUAA^Gy_)(1hW; zUk{+b_~2dGaQEpD|LLexVB)i_X0HDRc_&aM%R8aHD+ZHZE12#530C23in8;O@9WEL zp3<6b*ouPD1D{Om_?}0?=KJrh_;q_#GOfJ`9gQ$)*GYgg3 z8Q34xB6LdAT=rhhBR7Wl1Ra+VghAIX#ZPxpi#~0@9eZPsZ8N(*jzL|x<#=j*1Xyx; zCBLW{Cr*wy$H?V_;l)?t&>8|__W-YiZvij-7ypRg+X5Uwn?5Tts22N9ShYwHEUVh& za@Su@@05DE{1PqKoC>~#3g?ClY@h}^CUwO`g^ggvBy<)er8;7g6DZJUWmolQSy%TK z9WEZ1rg*F`X$;6DFEA*A0ZSuLy90cjSBLeqLEV1|q5TdpZ3Ub3C*2NBNr-;GI3+Edx|c|R%O zrVUV6ohf=lsx#^S9!bc4nvW$-T1=s#$0y%K7!_y4QME4L6V%AU=tNvTKb64xxq#U` z+)O&dXCHO0o}( z#S&GwBeqmQc8agZBh~+zP5YY%6DUodn=BN|!x^Hbn#2V8d!+J1^Ai&fB^7}9$u@H|1cGkZ;a|fD?y52|S4iIQ3m9SK*fix{R zMsgHM*bD#sM5uIS0uOf0kl2d$x=3Ixx&^FYge)hvaZ`jP02!q&EY1(UZ)S8ERGmMF zUOOWp#p6u)8~eQnobY});`cBT?pATwJ=yK00^>X|25z!U*w80Vv~G|}Gui@nEk1OJ z;QfiI)^Vv$sljOK(3OY4msxUF;6)S(mg>YO!bVV+)MF40+5E_i@<6gS7?KTlkogYx zD-qZrt%2e=!6++3bo6NzzEkk3dQWDq-y4@Og1;h4q=K>FZ47Ag{v6fZR7bjtPZpD@ zSk&w~I*gwWJ04vhf%i~#>)N|)@8y}C>&Gm|%q{gPse_;~R zmf4$ldS*FBevSVS)(+E{yE!_M^+|2PB46~WHdsk7PQOB_XM@D0nO>MsbE)rDte%Xq+JRNb6o`s~YxMS=Cwe_86t zYmiL1uX@QdECFpmO0u)LLDwR!{5;1Tcj=I6)4jZ6#K=1K7M?+w)@!4`T)ge-Bz`tv zF(13EPC;jAEmmlA`TsEirXQjI^qj7wbUHf3+d*NOMUbnJ14h_y9&;}kA)zQ72-Ejhv75`HE7cmS}?X#fTqk?Kv;WqF#8)Q zS?v3%cLo z%e8W-K@?$G90Arv#Iiz3j}e-71+(B&+rWh~5j037$Bw-J*&tN&J2j(g&nEhoZ2>Hk;Kw-@nG1Mv%9OwG;EH zB|ft%Psqs^Z)C7i{Qf%7%89x_C$AD}4+~8f6yyo2wdjU-#|iDab0k;qp=j0@XM#Y9BF-bgIb?_<-tRP~Rcjl-D zsRgpMn2MSxr*bCiUJMl;W(&72S(tvUTU#~|=3Td8z{+hrg14(JH+O(`n16j0{yf0A z_V#NWDnbGRURbDJR#XYlh+kd{%U*6E7L%SiO(*NCYxj{zjixK3`uJ$>|3NyJ$(DP_ zOft61$#;;SSM*l5%2Hy-i_xz~t4MbqSOsK^4T#*WBG~@a8hM`42fwAm1f7H?E^9|) z$K40Rl+XVuBzpJw5Gi}p_Hv6MV7f2%K1-xz`0pu#4*>KG9waE};23N$8aw=AbO2UZ z3V8KfeS6RrY2%%@x$;R7vSNFG8_#)q=1cWiYzQf;x(J5$c_DE}R(U(hCltj!^t~Im ze7S?3Wn<&*jb%Tym;5Ntm%NxKykB?T2r9HX(C!$I-F(j5yKHQ(cj9A*1%|utq7{T~ z0r8!FhdK|+Yl2-aMi}aji;oGPiI%2CgSMd>^53#gO(J%jU{79x;=W--mBy=YRcBDK z6i>^LCukQW7=M3Nu-TT-8E7pghRH2J%gjWF|4}^d%DVR_{U!MSejAhPK4P~xa>GQy zX6J}h0&`=VGqLyUU%c~{ilHH&H2?ex;CrWsj55A)F6^1j81^^io0JE+F>w0R6qNCW z4!i4O>t|n?!tU8gzQT+aYrSshjNkdoEP;UuS5rOv(24w(0P`+uX@!a@o!UO@s6LNCMx6 z$Mred0@dybTzYEqe3~^H34hmDHBqHX_IS?N)HFDGCnzR!U9v=O0EnONYsOKemo6tg zE5ngA+*v`gC!S3iPFAswR#CRJ&fkzs*DRIi&A5~PMFne|XGDtCGgqoFf_bbzwAbmm zYHwSZln5O5)kFx_#SjXey8(7I4;aJ)9gg^Up%4>M0xgqc8FN*6b%RckNflPTfmRt0 zQNpJRoiMLC*pE=O-GAo`imW``0_OPnM5QXx)F%oQ35-O=eGFI+NX*YA%=(sy1r9-H z>_I?zf_)>ADv)fD;4Iqf1K}I8I zi!4RlT0go&Qa8SeX(ao@`$HWIb>b8?O;^9YYPyqYYdSPovv--!hVG?f*dUH#J>yK< zC;P%v#?_MY_?fPGXIjtaMtrg}Owa2+6_b|5%HC9z;mFF=@(B0TOXLt4AKNe9!Md?0 zrY={z3a<&))W4s@Zy)5=P$NEM^vwDG?QO|O5UUKg@bpcx{OV4USC)cBF%bGIqBi@_ z$oG-Jz6fUd7`uAR1X}qxZoCu)OHK;Cuz2{T%v5fORLla)K*8pqb%yE0{h81a15Uu! z{+^yaC${Ub`71vH#p52`d)Cv_Q_4i}(a+A#0z>EK{qVpFot)ueLNBMyo;*3qFFC^X zQQWIPo`P1 zdR^)O0~=k+d{d{ZwSb)BbnXgziwo(v_R;JJ0z1ca%F#K+zDLOv+h4?Mflb4^gE=Hl z1UeSIx0-Rqw5ufGTr{cD|2K{v6$h3Oi&-hgLtg<8~;F1O&IeaSczkg)8j#rnV zHeM=qYcpd!sC92k8(E*8@u_HkXYZo+-n!*bxvPB1b8@@5LCwzwxKr28S&k=V;Z08T zEBB}C;M}Z1WfZ3DewTlM_P7f^JAi(L>{va^>?i=tQok&=x|eiV7O!1bO_9@|8N&)yU5^Fs17t!vrRuXL*WiF$$R?PY)GALDPo zZ7P4;^H>Z7`l^wXxw{k#>mEkbN7I4p`RCY~Wzw7HGk2MwzafvWm8eYvp?koO{;#u` za#W)MDs>A}V~aey$Si2%Jk8#nN?O84&qW)tJ_ng)H`j~ni~SGC%#j9M2S=6wFz-0u z5awl%8Oxt+judUF_ELT4zVnM6$+*vGI?abZech2c(5fp(f;?9<7F3Pv-zfd$En;|h zm2KT`key`X%=3$g7|bdyEVj8^1R5_Q)6CceR_i4n>fI| z3ZKu`)2D|o-!caayxaOWXvTBjNwA&*Cq3`~7b>ACdGO?qm|h^}`_LGn#MYh~$JP-Z z6T@)+)MNZ1TEzc;siQ;m;NU=2^qnTov9dYR^mX3!bKB2*>ga@^>HL(hionyQn}Fl5 z1v_kS*M+wUCgQR-L;HTix9QdGzPIXPiu8LuoWB}m%jlGr3}xpGRT*+r!+5#z=@^Qc zbN+o|$oOZU%^SxRwal$)b8?`f#b~XD!zd@bgT(|53oETV%5>5TuOT?WX#_tT(#545 zWP!1GpB@B3=PRun_!BGAmI)NG-1B~6eiaiVBb?*1$N-DtTKse}kpLuEyI zEqVz5hpo2^iX+pRA0J#8AV#3lX_b^)k52nSgUrsk_X*^RX6qhCbhKz!hJkZYSsCvD&nOU+ z8eSW{IXbo03^teW^)U3_X+p52j(-em6^U|eDen8lZ~&{q&Qit+JtO}lW{^dL64 z==$-wiKRWsO6`StG%NoozsHW=18T|PV+;t_D{tfi@%PIR-8BWPwI5`8U6yD2am38@ zFxf~v-ltId-VV$Ugqmb=jOb#hkWkR6^r!7_-_wejkg`DSnWt)v6HR<_)y9g;cw)sguMe}`FioA>*9Tk4;+y(#3GVe4SC!Uehzz8qohf&+A zZay*@J#w5Ml_}VOlZxdok+!GBgO46pq^d2$>ES^HjpJ-nsQS)e&$QZR^ZM4w#oEV4Q15WHNJno(Y zD$R!$5{-wp05CeSlwn`QLdp8SqKWE4h3OeMM%Km^im0VKo)b?LXDmV3-uIukW)@S< zk1I-4)Yb$x4qUwzWb@U@i{~%F-}^D?>;ou@ziU`hNd3|+N7XQN%Da+|XimyxUd&a;JX>xrrUt;7n4^Y8#qBvTEnN;siu}NIr8KzOS z&Vxe3Gr~JlqHDwYWNC#YZr=DSlx+OuyB7MPok2%WcT$daxYB=8Jtev$I==)t4~9pP zh4{v#k%sm({F8m=R_?1NlR}h2Lmd!z7>PiB+WU@686ljon>AuWy0fjz6s^e<0+{-I zs5a=gP%@~eFPPYE0SI@*K?v&&XdM61JV!sXLY38NBzeBH$uRl+EmfE0p@wexC! z^dpL0jTs$99UDb=R<1(UC`S7v1!;j3W={xm=ElH@i2P+7hr)C5yEe3%!TVkM*)l4D zPOU_>SUF!hf$pw6CMOmL42#BzOl^%P-(=<(p`+2aTd0ieM&pr?^gk0X#1ib@(k2~z zDMz_HL!$S_NdA$b84&x(Ac(w{C!L>i z?1!$ogVyOlfUj5aRUT{X5nvU8yc$aHQxt%QfJc=>iabY|WBN$|>w6J;gcKR%+rpHq zPmHF3Ezkd2J$W8&f@MW1v-|=gSW=Io3Z?6&&Da`JTK+p+EnjooE;D6po?xUZ-=1@1 zL4k;J$HL0lHH-<3c!%m5l1t_B>R5Gdv0;Gk9JZj%r?)JwdSU}=K5zUtlFpwYKMjFjyR8nkFYIn}JC8eRl% zy>x(d?BLC>_a^w2l3zcw1}&qYLD+U@!F5S#@TlB_PkYwp`*;ZGV!66jCRG1MGiXRU z5Gz<6B9%swyMoT3aw+kGSZ;EBN7#@_4F-pjmsWSm2ej?vLuvY1;~7YTlmV-+PNi7C z+rKiP{J?6d6?2+0P&51j8u=6izcLM;x=rLCxw^3_Ne3BM`^%}MhGd&y2##f^Xa9&| zRlDtCX{kik3bk~dtVb|sk@}~EW;6TqnUaAI-9*Qq$py~a0gKC|&(+oG zwgKC5>xl36e86>?c~M$h%`?&YcF8cY|IQ%+^S?5=0S}QiHPt3RE!ZLi0}XyamyCV$ zu*migb(+%P5Md7tTyTRuFigE1VeX%HA{z7f3_Gn>j-w_%+~O&VVvx;>|2h)Gvh<2=;6>#NC+fi0Z>e z{hE{YL(;jDRf5zLUvTiurnEy&@ItIYV!vSG)+wpR1!uUYyVr}CE9Yaq+fW2rim8-> zRky$7B1O0-Sk_B}`b1;6t553jAYOuWy}WL5PR>69IldtE;~_Q}(M=8uQ^_BLHcw1mx3`>!N5#`CI@yhl^7VKD`(-@iFVTz@EMiz*G`y1N6Ps@H(_m$n z*5J?>vVd<@xc}D z=Grhl-Nh+o7%Pew8_Ku#FEAg5W}#0>Ha}Lem_oG_GnOJIFhepD$bIZkak$B?f#)CV z1~Pp9%+$0*DNl`jGDCL?X-vpS2L~|V#Q^S$DG3{z>^}I`wV&-8~ zXl;oE0zhX4MZSZN*%70sm)kmpG!Fj)i)u`dxUxdO@$*M2uNC26nBeL=MIxQ3X>TFX z5Wr{9WeoC#R1fi*?}d<)N8TOrTsOn8p~oQI$3@)cT5^nT=U^;v2Q!37>F^k1tw~Lt z5v0@CA?-Y<%@RhP8`gAE+A{xtitH?Duj`7(d&h@pN6*JD-1YUHb^Tsn;rhKZWzVR% z@P?yvE%Cp4ZzG-V$AZ3?>#9B6$F=^u?b-&6vfir_bA|JhQg+1F<5lkKp2SD&$McKN z@L^zDv6~oqg>p!#=7qfyj7oXd3B0ub9~V2k?T$|%*4T+N{=<0hxN6HYUhxH+KHQ0` zq)bz1g#_nPbvAaka1ElfJLP@nPp=?!VH~zfXnZk?wXqV;PdL~W>X?g#^ofo{7rKK@ zOsh|V>@T;woCEYh&OG17s16DXQqogNC-}BE>mll~hzb@n)yNX5nlqW3Y93RH7-ft~ z?|iZv%J4z}SpsBU7N8k+(-PY^YsC>8+EiHXoM#b9UAS2n!z!v2uAH&@cY2#iJy=C6 z<@@jL1jYN!?ZjX-f5&JO7Ote6_<~pp(U{px2=N!<@FA4yx57>WA51W=Cn_NFfo|73 z$kQ>=ZyCyd@9P(mi}o%6;m<*hs9&(n3%`nCrblj6V@NA8faW-P9HKF#^4pMFHKi|T z8eaCV`7y=p)Mr?VJDB{F z8s6`|b%;9w*Mk2Dq+B}K+mQN$m>!WU8yOtieNSrS0~)9K7lOP$wdmk{n_^oJOj2sv zRAr7#VvdxfNyK@pfo@mkdYD;T3A7FSCW%3e)$yj=IZ^9{XzP0?gqU> zuQ7}m#_~lUd9G8}=fdnmKBc)sR-fMSZQ=dV@%2GLz_oklKi2gBmB#;3dw_gqF9Hvj zjegfos&?&tcX)`t6gVVZv=w{M^7n70T^$%0m2fDDkA=^JsRf=Y{P> zmAx=qgtoInsJh%u&H5(`Tdh2{j`uMD=J2AI>o~R$w5O@;t{XN-uTf)o=59^7{YXDi z)zR6#>|Bb2M<@;>Y$5O&3%aiEH$F`CFlQi!s(OcHPD}ZdF;OC7(wKVae!ju7EOOM}-HAipGfJS1}2X zLutzm!nlqb#*?z4#!OMzCur-Tis2ow1J4I<*(!W7FNxw!>VUG^Mrr&njqH(qb0WtzjZ?nzmD?szZyzaVFNkP%WCWc`nw&3wg#St`4~K} z$}z?kBuuaMitr1}vkQMuI^R}0`;DRmT>gIrE?v+o6@p!bU3km6b2I_KJ#FI7gjHXn z_ZWr?4(lRH)$DS~AFu3ZH%Usg#SU<%p0twnveYWKa}b_J8MLfEVO!)h{nfGF0rl=D zwk=WVo9C1xMc^P6eGM>n4~x?pk;Bh1rzIB%CEwQEYzPV6ARk)i%x=z$-i#(|X9#l- zDS&mMLt?O3mu!GZ^fZlxSV++2QyHCO?-{MrEY`m(LuaD@!Mn$Z|7 zg>y`zPjlly>n6;Xir$WI;gnq_A@kkMP({5y-A{~5Hwcxxnv(xQNvCTv$mH{IRwx4r z9A-q2`CvAf@T~EGHs$#=-*H8(5fiuz)TN444Ra(>F~=l#@^ge$ceCLN-L30Z^_%86 zKA{G=B}_J{J2z5TXD2RwUUsXCdBkdo;e?S)0%v?KPP+e*HzITHc~zUJNkD5&Q-?*u zJoSULgeF`jrahMfM+Ji?Jp8xsRR;}~^OldM5NWgceHH#4*=Ad?%ax{ak0keuNVhd^ z!Z}veuj&FCL|s*utKU3(yY=zY=9PJ$_esw1No-ZChqw6%>uL`(@aWizM$tVYO7Dy` z!hhqdc`l1HGa1GvOG@=cM3U1{k=1-3R+3qHvZSNK!`}G6^%2D1Z#RW_R~%OG4VY~6 zNH${5%bC4!J# zUD{8cq-2zlM%y$9_N1Rq1F4dg%BD2y8fmOZ8)=eq2Nj1uVI4Svt|1W+dc-tVrt9Dg zGSHHesbA}wq1P0viWEf`bh^H`%VfqXr*&9o?vh%^CucnmZb;oN$7+}%n^@j$h^Xh` z?7CsEUnB_ey87&xOOxpNV2NaeIM1h?HY4=|;=1p%fgC=kC5TB(lg#rnlW>QU>`wAo zU9HO$xW%9_&B1}t4r(t<3;b`U{ptp9&&RR8DlyO*H_!*L<8Te?|GN>Q}Qoc1eb4DT9j zF=>JLJpT1$SO;|TEs-XGg)O^?BG0@#Ul3~*6KV3z9dAKlJ2y4YX)RH6!mG5{;~I z$^v=ZkUSuYo$kT_d;gND5MZlVISXMZD{poTN4{s{W)rS&WI|$uW|-|>Dvbb}e~SK$ z#$oS!tUcuLd5Bz=B4t}DHd^&dLzsxBf%}4#9`_A&^qm_>*|^!LW6AW-ZwM$LmdaDZ z9~X=WmB(7p7+uI?K}|m9s5?kH(OWaGT~j938aI7zoL4M-VajLZk}XvlCv_VPcj8M! z_7E!n=g3LfIwR&FgQ0d;-k`#@A+4IxxPc^ZM7LEs%Nazmz5Rf2L4tDb64moB1xoBl zlyvJznm&g+RuYqNbs8DBmL;rvry4M?1!bU$Izhgo*jHnoYvSS;v!TWfs}vJb(ep;i z+{rCZWxSNjuhfV`ChvGr-gJtIgSmRwUBBl12X3+?Ui9EQ!G4JjGeQ(JKx+R9?LILu z=QAj5FNw^QA~xUcEq@U|e-E?InFu`Y%FNsoJ>=%W1E7lrrX2b1reQDS$42(hb=e@$ zt+#U~QPiSn{v8psC+9xxhbP)})SM;vLVyBcW&sE~_Z9*#AA4Sy4pwJR5re4Bc&2ZY z-BF6wALki($0ntiE0hNs2`d`?2+a-Z2bjm>KxscGIJ)U`q$$~9=T*rdO`hXU;&Yh= z2jsXmh65w;kB-h5@2hmaHY=`u%kuCztsY1Qf!f@D{^wE=x9M&HwKjvjIxmf? zR<=9$T>OIyZ8u}9&I@OdL)+4pHQv>N5cAu5kWF)c}M+Ppdc> z6LKa_0xb=A{>Zmr1{A0k+m_4LCr#;WjI>^8jWr#y04)RW`@eau9T&3NG1|TbJY3Jq zlopMD9-zWb66o+Ny=e8<`J*#1Squ%b9Fgr`kbt+tb?tmehwS3imr13b3UYc}{Yusr z%57{T*OIVGE=uxI(JAfzU~H@-r!EMx3pWS{q}_gAH75DR4foL2f5C5A*ba zDmnc-1RvL=k5qLrRvT{ETpLZHeh~2GxH+Qn<4{1C=Tzxn!cHFTC$ln46Uf77JHnb! ztxw;+`M+q9e?dS1%rtxZ4WFe6SXH*4Q#)XZJE^A z4KLKXEk;4t!%;(R!tEuk?PA)|TLws)y_MQ^HmRzQ5Gz95zMECGHfV&mwx}POozMKD z|K}gFa84X%dzJ#<6LEs>7}Q6)NdfLLa=AQGw$MQa#>$woa~dqTx{x|iuxN~No&+A@ z(f1$Zk#6~Q!WQHe)@f$DTGD@hT(eVJtZLgVms5?I#y$08eJe+{NZqQ9bl<*ixAHK_l=_gFC`fTsXhfU%P)l1sZ7sQQLEo5ac zcTi)!MF!xF==o+j1k%vX@Si`ViPgc;&)>u87dQRZM@2wPJ|#%S=`d=@7()kRjxwMg zezEPI1kU_CPl+cE*4&zcanjJ6Wwg@-h9~-5ZEq(Myg{Wy3(u2Y=h>zC$67n9y>5|- zeKz_vJ5p2so$Vx@I^{ks*Gd7Y}7txRk(hMAUpC{rYz z-k@4ssZ*Zv1GL&0m(Hhea4>$8*Z!tzMY#WPVSI4IT=nuua8rB0?eqHm<(_EomJ6}C z6TbNCbE88qr0pxqpvQ3?vGz z8yHw)md?wuC9=KFA-#g4JAWm26 z>vzKYcuJf@$tzEHE<3w5E}nCN7&XzP4Q9jE9bB`h{>LXa{IhA~!;kw0_kmDwZx3&zJON zKUu`~snWx@-_hMk%Tk6Eb6MWr&K9ZDZ4v?#b0_d5*zZ5#i;mRP5|}ys&F2a9ipaKXXK{hbhDK5>+HmL)9fO zz3jkN_3@*O6?dP7M_3d8O5s$VH=i)b_a?uiAXeA7eAwn!hHT>F%#^DG zFRn<3Dcepj{wzxLG<$8q!UhwM12G%ISg0_3 z1)BE5=19>|TI8L9J~Twph5Tc1!|LeN5+5~bzsfTGxr9)#sKGtFk7nLQi`LC)RcK!~?hP6eG)b0ze* zpA@`f2y#CWnw3m2G zgcz9Nb#P$rC18s_wnN~3MN9PYdUKlo!D;PStXx@}^Zebbw4u6roq`RwGV1pVbQnnQ z(8R4@x?-74`fcS|u5j${IrWiF|DBbk=(U)xDsC39J1!Tpj_Rp#pa!SJ$!M78J+si* zIQb0dqh)n2x2$AY`dlBCLKbBJM7#|X{>x&u6Ga4KRY#1=Tr<;uUchzfJAOdvDv$gWXVn}gU zl?p{{Oe3F{Zi=3GY9!+pN)6cS_>5EfDN(6HSmw9(v6a#>j2L4aaQ0aBp0%Jh$b?(c zUi_H<@EW^Xg%E}Ojce|j#Ixu7795|ZEXY2Cf!#{C*}`gGe#s3Q8M+DQA5%i0O9-~) zK%Q)qZ(o+NRbUo@76?atVB?=w__&0EervzIpFOgeHJ`OYt48bRrmQBW6Sm52$AAfy zOrz;>Pu90)<7)JE&ahO@2b3#S&KFUs#Y+ED{gKSwWyL7R+Rmw2SOtiqmpkt^$*8lj z;9&d~M*A&{5G$3DH$5J*tD`KFy7xE1E12x(R=UB`_pkqyLTT8t>WvL+p;B9XEfKzj5WX|%wKAZ!X*BGnnmcfd|LY1l@@^+KcpyXP%E^1@d7f_~AiL50|s2ce?T#A*R1` zr!zF4!||#I-7pIb?6mSBRsg!Y6cxS>O$$e?$B;h52H_A8{Py$&U0vCWzm%%(Y`3Ti z%X-=Ui(v(N_8+o9bFj4hYWMMd_ai!n2@gBIMUJd8{LgI6@F=9oV8p;=>GmkUso(A% za9Y)dvH&YLUq5%m67da5;t1^o_xhlYEhR9lrKsuB!e_Og)K*PL8RfH7t~b|l3fDcO z)4kNL=f)EidIUd%7Vr%X-2TPH{1y*;Z>^bg*ov524$a_cCxgawjyOEMjN{ zKR40VwaRLE(Efp{6vaq04_*b)n;Z9U{rV9Yad<=ToteoIftNE(S z(QmQ}6YYWA$;=BwYkVn%J)8SBWmcm4xWZ|85${`dPfQ zLAEYoa`?;nwRR zFRpiZTNb5sziQOyXEa9_Y4KqA?axYx+&Iz^DZ@6tdBI@kXe%r@g9 zC1bR)pp$FKzN~tLOJu}OP&k$C{YN~dD8oF110vtBACc5*L&+?`NA zvZG<+*33~Lg#;qK_PCu0hhi%=hCi&Rhg z>@mv`mo-((@-66undGR-zmaB27T5`8oLK;w$#^n| z^=>*??TL)0-Mm1X0e#aEC+Xao(4dYEtWo^^f{c~b;hj;C~*I&A;#{s)$`miit=h2)zvRppmy|vNrITs z>SccF49|>%i95#~x%Saa-ih51Tmva-33D$A> zaXSYp7&@Bv*w&Bn7vKZm#(1yodUyE>XSKt=BLTM$C0E-E+ z57(C~M4J_irHkCjQ(8Y{Z)Eg$2b*C`VkAI#6XWmx5$DG^F7_Brt4VilzKN!z_9$wrwP|gen1R86NiW`^ZwwZ$?{f$KVa0lAach(EX(!1Uzn$ zw%%mw>6SZa6-(6_x5ZHoIX@zaJO1LoJlu@Nh_SW)t=A|wv1T!HIgr1f@F#3ec=0~e zdp*m1{=MF^Bkyvm8Q}ATGjp&X%n2A_ym&HueRI9ol(Sv!jw}~JEVjs4?u61EgYLX^ zId6MGT6JD?S$BG{+$YZby*)o?EFoXzc24kqKlZ55+2>?>G&wq^rJcw~{SCUI<~V&`0Df62=!bf~#<0*k&;1DddlP14J#5 zPH`LEclfY}nLxj!arvsdb7$3SL9qItopPbK9sW8axCJE8Z&UYBBb7b=*8jN3&p%aD zn%@cM0!WSxS?Zm99veNP2HX`w2XOt%DHSV!)4^-=gilD?iE_u^H6;!dBj5xKuO#n( zE|}?_qf;$WLxZE6uulk{HP?l*8}Av6DzIki-ZHl8lvZ}uhm;~ZYl$jwhtM9u3mF3S zbYATOw|93+#q(ck_-JL#1K5c$IdyM8Aw^*#+u3t{Ghoiq`Sqt|Ueq2VHEHn|qAXWz!H>=Uq?Z(u}p zct2pM_$pgqC<$pN0j6vu5eke3?HD!`Wa8r}Cxo0|MldQ%dn2*s^jjN0tI=bIe!-$# zL;MAjTbwX_buy>ZZrW-87U>@G&>|T+01VK;yGn!Js?SsS75oAJLm-Fyykf*WA5P+3xSObRp}ekc;AktCXbIWCqv8ZU>4byf-ca9>@!NWF?GGF3oc9BS09p)A8n zQS<^)kx`(#Qo`3g!Wd^wTM<;@@lQN}k?~Fw?e~{b0l@KH^xv&9-RVO`i*(bC5V6$| zY@S{9=^reE!(Via@s4ai&;M9*KM-d{fYKAs@2NT$*LsE<2IvC!w#;rwMOb8C4V zo&Txu13OCandal%^}`qC%x@`@v_e%9vV%4^^=x_WvoLonFEB*ybD%`@_TbZ3>66pb zLNA_@eAq4O6@GhXKM?x%I&|?NLG)&uxfk*Td(xmkuKt3i|Hz!VS)2s;y^t|+6C(5| z;QhvY@A*W0BAshim~7LS?D+j5%5f+%a|io%Zu7*}=i333eM_$#+(O2MTNAZ3haElNSQRKF_1_F5)MPXv_WG zmJPbjeZXceJa~NT6P2EunU_0U549!4PqG}&?$7EDBjsw5-dnw|8y{N=PdDjdw`*75 z8!Ib*XwM~clNM9;(OEm1{QK#X__P*vh5xZ20W_`XKd1iq+xa*Vb$yuIIcEEQkL~sp zYqeD85|1P>!dVD`+Dl=V-1fvdt?*yVeLT@X#Kp|>H5shi zlAt3&I*n>?5>M(1a^xf4+4wluzwxAw>+uyBA3X&|W~}$*C*ixh`>xwR2f=C${B+42 z)jagBql*ufvQ&$eG%Zan`ss7Q;wnq9wexY)d3{Ly%8|)$qv3pr%FZtCHKTrR=@lCF-tDtFB|*Fg*$*K1H1wGY%E`RL$G>gTc)Zzo zC43(nK#r+c8BSCy)oOn=`ClM$L5ouN13{Z8SMk-m8X@`Mua)L%?swW?wkkrIeSR&1 znTq);0k5XK&|fi{5(>ddcFp~TJQeA`YUNgsqg~k?$|7>T?PA;Wd1b$Tx|hhGU*2(BT@MT z>q1o}lcQu)%?aj4wId8zwXN&M6FKir4(4VR)kfEWVG8$ibSoTmtZJqXLAOjmP|CXm zte#mMOVM#yMg)qs8eDekRVIjD?}mld?VF~grJI<#WTY%n)z;oD@{@-k&T0RO?OSBX zjWadYLLQFkLul(Y7eO0PrAJNBM7JO$>wvyakOK$3I@4N9?n)Ymvy;xnR%Uoa-Ax~= zSma5WU;Fh2d!&JYEw(7RGv)C1!m>ir2FKu2NoVlv zQ1otjVUiEX#keis5be~V5ODn)cZS^I_3w=uJy5;OxVI&yDhp0|U!HjTG6Q?D{)W=U z%bSZjP6@Bq3lRxV(t)9S(k)79=cKT3*BxIUml4cEMv>Wp}|kVrI(idbg)wmfIO z?n#?gu?TJ`tu$O|;m~cd`0JMqn<8z#0B*W2DP3x?A-7tPWtp96EW@<~_cZSicmYwE zF9f>dok_Vm#zuE3JoI@d9+5QI*d|AY=T0?7pVTu-OMPGw@);7jr`NoW=+KhVQVs&Ud-Gj%$ zh0~MDBWvt-s-0l*hO9MXt$$>KaBH;7JuuMn773Y+WwrNsSt{eDN2aaH5u3TADhgVH zDy8$XGN_WoKNOE5*Gf|@tu)anp9$!vuIsUGs|La0 z0O!`({+l;Adyt zlDVrzSVo0C^Hdw=3->Y92Yl&l43vxN;zbTmAzBfUl~@@^f@W$o*#2*b;itdrzdv2{ zGh%5NZZCchNOAz0?;rE4m%-tXBioiod%Btpm18#AWBg7Rp@$~2&WJ0(1tuEt5!T$3 zX|+nFHXIq#p2_3qGbE&DPX{Yilhxyv%S%&_RRNK?%P_ej=D*{L5zx}v$B?c^tORc2 zXml?zh#Wu@aK+MABoGv`lxU--MyGzOS;*y%-LDpxnU$fK)UzTSr{7vwGsm5+aa4u0 zeK6+Qq8fL>oiI%NOo}kbQ#CI|f#}rxU)!jauHC`a=ZXF-g~zxoQorX^k+;ZZr|hrT9g3(3=j0YiJz>w?2iS$WcvYYmDV(ca&P98Ly719TA$$mu3c z@}Y8!>mG&#z;;;iRJa-QO&uOhdV%kT{*@Z6ka7)0mMN+p?1Oo>rVjRh*E1UK6VK8Q zN$!lHie&~f^Yvw#)v;FzY0dldX-#*D<+{@=6U%ZZTD9+Ju&pCpJdV!{2jj9LsXbRJ zpb0cx#)9b$l5>26Hv81Lpu&{2C%T!1aKCq=<7KoI-Z}7B@^-aAZ8#n`%Zy^NZ^m^x z5U|bz#6D(Vnb@C#^`k)EmiVv|v-gyMeZ{E+n%%wRmdZe%{yM^2ye?sGaY)C;V9ec>w6v$`p4tC^@@&xfYC#LKp z7GmwEr0T|#T@}}kvS+IlE1pCtwhOR3MTX$bx{Ko+g&f%u8D0!g)s}0}GjgQxUz1IE zZj-<6QFjh*JtOIQA5n2CutSB79dN&H1IFbhX3j^aGt#zaJ^iKii~#k1!f62kz=8?p zVeI;6O6x@zBn_LjQE-emEF7jF%!g%~a>;C?E-cRPvwJHDoIqI$3#(6i|HRo5S`Z`2>zGonw%DOL=@IR6{9g>~b2Gb-x^jJLFU<}bWI&#pap2U9oLjTQU` zyDy)5-9ydH4<9UPsLCgf+1qW{r;Z_yj?eIRb^+J2rr`ElD_C6YMP>$o`&|}Kvfxi) zAa0k?lwzQH!=QqK19%|>FEFq37lxT=t;C|w>ddk5%P3EQJjk@>h4H?$h(qLN7eFMm zNP)Z3ldxjD|6Iyh`X%N=7Uh{~z^K4pC3y#Za2x zfcZmmvYf2pMEK%&T$j~UWW9^X!!)|FlOgn@a9qv5f(mj&HR;>#Mc0j%30Do{R`+*f zy2W9MLEYxtJuyim~>DkUUJIFX*s`TB1&0`BDB@mH#ptgOcbUCipD;#i68! zM=wj_A`d58=Q?_+-05Eu(lMf_)u<1xQ`4Ia z$DHIyQ+#w~6Nld~dXz=97_Wp3-;)ktdRA>1jz#i9MAI0qOf8)7eQT0ry?c!2fet5M z8sMVOTAr>x@9uR#bW#m+W!^uE2ROG5M3<59ufSDat*CFEFJv8k!{Wm=HERG1Mb>c( z(1M%o=S!3iOqTWGPGxJTaza4!x%Ia_5uZ=g3w{L1L$X}iSMk@%M~Y&itx2B~+A2UN zGDs@vs<6N2z3pox9Tz8~)n&kKbOaa37N?=y+j0cxzzC|I-Oxd+oIL432}TCt)GbVI ztD$|YOYInXu|!cwH5o{$i00P-tGHFXBMv?0x1|C_bDHb(Ucr|=R=yF_?Reie=fpq4 zUib@oQv-_y^ow?HI&KfG8)GORm#uC)`Cf?SDOtAt(hY4TC%0tH1es=a5F&8_(qm2@ zFH9hcR^*-8;>!}s%|Yi~n&+iI@vi^JJ=f#rhg;~{fGM*#n5%-JKa+2$_=$IJid1~y z#8aS^^jbKu9xtB*{G~~$R1y9nfIFzsAQ!g2go-UIE;$d7tK5Y}|HCZU>UMTF%1k9; ze{K!;qq)C@HnQ_pOYolWLms^KpBwqya(V9O{}|zd6eTSvtnb`loG8>D#QBV8z6WhY z-<)%O2oS&Cm@WBOdRu7aXDw$XimI|lkH@Ba1u~xsq9iE6!Upxa)&@&cVv+lw=W64d zdN%owwT;d`TTZi3XF&dt<%^`Vc1Rd&6t!D#w85*F`dn z-guA&-WEI`8+*<6;e-a^J|1uQy$Uk#k^o?6ox;b_i+8Nfn>3$6BmLEpsXsgaDznEK zj&^?oG@Jfi$y{u<)K6{zQ_PTk-?SIbQDVzRmGAA-10Q8r5)kamTW(X{=Vk>5PTv(E zG2%JbW35*^;vb)6NN(BN=^{aO8?nd#77L!KKe688sroW}k0gPle1Pr#CkUNa3n<;A( zN8u5j#7-p!0 zr+*tkvtwO4r8Ab5qeB{ktb7hr8`p4FIMs;2JZ_uxU>lguUm0GyUzDmqyErHO=Sj3! z5fWI`ys}8Wl!CY0nSbmFD@>)f4hzeoet8!tk0Id(ZP6NF)2PHG;jA|x&vqn$!;WcG zq(MJhf*H#V7Dc6!XPHvYRYE_C9sy))%SpxtTcRn2AjV8()%*Uop$HYlR~-zBis&|{ zM1IpG@uFm-h$%qBkG;gx29g;S^=QblVe?QxNVJSbtMe>9*Y?T%=xv#WK( zcJc{F9*uNgJN+()Cr0*R%BB|)5DKylMNeT9$T_C;qWzUs{Hjv-P%JN&pCU_t+v`hH zE{FOj@tE4V1pX}+t#Uvju2(^taHsFjtwi&ZVTy$$WvwOJVkTLyUh_ERmD?Y)Nb zHE)%`qW4Z}wua7e=?(0WkocHJnl4A_J2O65`->yNR&@NmOR_a3{FDsho6xli?smps z@}9Zu$N!IaAfAr=ev5H%2HT+9nuw&+G0cHOX}7m#ts@l4piat$uG?V(Gt6bdG!6|P zgKILfhkkpvkmVYlaizq0*V)s(hU=(b`lC{vg;!R88O+SYrguh}x;UJl%j%_%T~DWW ze5a1k)0|%^ow0=$S>4x)us{|egDBOf}K7aYx5t*>(d`#CTuD4($+Kcmf=DC)s zG<`Eksz#ulb$BMIO^2syC_5Ook+~UyIy}o(uACNf&Tw3hLAEupwvM0E->d0Rv`H;j z@w~1z)AAbIE5i*pC+556y;ynh+uyfnv~;5SvzuWP=tp$eYK?vZSqr%hlH_F1>&}}g z1@FWOf?-@dBBYIn{{?+6!aHIns+6&dPhihJmu^;oRrJhru~xW|p3I5UBT7@&Y69o; zPYl+yV=;GBEd~0T#atcAZj8ag7&~>O^;ov)O*Z6WjFG|dJ$ystN$WWXVLhMa;a?d* zWnwqOpZ|vTE^h0t+Yr&3qqn(kqoF|6r{SLE(dJE)vh`^Vm7ZsCY+o}%6>EI?e#%1i z`J%d++qWLeton|JszH=jBqlptBqpvEagY^k=oG1rwnl0c-uH(lf)g{=J-k?R`H0|b zp8$_Jx{XS4y@k@XQ_fM>vbrH61nK{9WwhQ9ql#xwvsX*70^`bG7CYB@C6^)owlOm<1p`+r%ipS!pG^f_Om6LCa zN&cD1zy%ACW6M(hpg%56EXK4J;WIu(OQ~l0SVhW+2gkRA?|L*`MqSHClNv@{NMrSz z;hlGE;FT~4^AFrE*K{|d3sjLM3eF!Q+#JH|kGPyD@_`AudKY(s^b(Ud-icQ}3&N+nYJudJq-cWVq(>uk+x9e#!fL*~-@SGKCf^ceKHQcI*9lB#t_S5kjgWe;lc1 zB9T>Zr&-J-c}(^PKc9)y1(sKeyI9i?dLhrF>2_zmsaYKn+=~0O4*a;YLV$?4xPBQM z`yNM3xi$G_eD>q=)1{VVDasX`f5Pw;`(;sp zcN8A~E3VkZi|pM!|9TJWqzlGdmLRc_wKuKzTjagGXFkCJcZ#v+)AKRaU?o>l3$c|^ z;R}A%>MI)xlC>LDE{s^=9%`{GxLf1a%e)iVzq?05cG2|GaM;VaBB;!GBJ&J=exuSa zP}cv+iY-N@FmI)MO#sQsTgd4}HWt=2px8)xz3^?yX20B-X20lvzEY2yQnr#^>swxb z#Pr^wcxCm!3&o-nd$4Y6su~)b{}a7O)OJZzITpp?_ZWL|^}0`gFY83sZyl=iBNryx zU<@UAEY-DUN3-f>qS?8@D&*0f$HOD~*a?DRl_&IU-xtD1mBP)5WZV@tQRqTq8&_j` z=^7L>S(MrTQq+;eVB;yi_L!t8_V$VWHOlxQ{KVdP+C=R~UnhpQpLP84{Y35KwPQ!s z5reN$s!!(4$wzB2>r}~V4~hRC#nr@GdnS~*BatkE-O=XZ-Rn-f(+;|RN;?Edd!I-u zaD$!g^=CL4IUv0ARh4}6Y^@=Ud5kC~*on^gOOPE=^GW;DW#to7=fi|(*F@(P7u$)z zXsvO2PfO+f@qZ0?`gGi)qAwFiP{HxN6v*In&exNr`W3f{c7pYGv?G%N_>~) z>O@UH0*Ncrx+k!l{B>-Uo5n3{15Cf^o7KyY#$SMZA<)`e!2fNyA^Omx_(g0P$UPV?1{E**vi^)ferO9BSl zkT?4}8w@}Z*fR=A#f|kq$wzkqeUP29(G2@thB$U(iY9`fnWUaD9MhJ?*&RO^RcgfxGCciBNw%cjPl z7h+Xol;a5|$Sq)s9Q+J`~B$MqEg{ zBpYI`7u7mPTxsg!m~IaFEg+nY1BK@JN%45#C)TS)lYdo?1iSe;z4=m(4T%}jE91L+ z5uFidX9{=LGtV5{VU%C%9#?g7hfJ?HZ!4EASH)+o8F@P$4lLoO*b}~54$6^h3*Rh+ zrGa2Mv)7=C_;@UGpZ#3a(<66vl`P@jP^g{PURu#&tLGVFEP;C9@G?l~9N|%QoMYL@ zAB>`Dqnx?9((Fbm!Y{d&wzKoS7nE*bLWw+-yvjdl(Av8-XQKGy685(B0u(yKaO z-l?ffz>)<-U^1bRaGb=k0tb96h%GCa3-}_OSfuLqaBZuS4e06C&=?z2<#fAwJBX3F zWq@3E>m}5A-0@3`+1&qYLP;&X0PqrktTHh@%-#pzz&mkL`_mjpbuQs_)05`YQ1bj`5lME0Cy5lm_zc`PODHsn`9-B0B4|le$z9v1r58 z&9TK=kg#8%B(l+7VXv&f)1@hRj6cnePd7E|w}{x_utt%9|DTYfaGUEoz(Y7JEhL|o zX>8)+7`nJf1oj-tiZZ+r;}44bo-b z;M&OKYba$vp#sp{mGORyNQG2rbjO~X2l3fzr@PUX9kjc!CJD;2r7Xt~-ic&k<4Y6u z2sTH)seWA``aOk#>W0b#u}(|NYT4kvI{AR=4qcHz0>6h_LI zZM}EQsFL+=+w*~kUX^sSFU<{p9PosvfjGEdGAfTGE!6Ga}dKvc;gebu!})&kyw{Rcs^0B`?z>C)mw0dST;?{NO( zLL&t4h7@G+JxVxZ>pGVj_QnSN?qV!qEB8MeGc>5+pA6A;={46Qo%?n)zw0xU-}&i| zQS`Y)6)vZud5>5O=E`h#gRmLBAZz_MF#qiI!9+7xJLG62h~THs^@6GB!({B`>rRr>c>bFXKrzY@K`Lb zieE^TDO=*8LEUhIZf4MEYIX+9&ys%M?A_)RR*cD7SxJMRKRt5ZjM}^vF}AD8gy*uo zbsnh23D(_Wpo*aqCWo-b|M*%cVGykrPemm`A}8dqXKk&MnptR6!pY0gDC8K${fpi}-E#1k(zr~RES+Lm#!Oj--~bhYbHs_uJU8$ZEHC4U^?fVOyn<&mr(r;k84`(s#bcULmU5Ep{;^rr zHvD5k`Mb}Z&N|E--SO-w;s#6Qp{+aK2=~-w9)Vrjo)XrwYs1+7(zGHX0q$)I)y5nR-U_;PwU6_7*h=qF#Cq3X zosWF?RPpS$w}5bQ2VjflME1mCRf@lko$NH>&^eAUEuNK2cgWMq_*RcnI;h5sbY4x# z|DJ84xE^w#3aPfnxF~tOTz*=4e1*R~_M+a#Veaog12&r4!_V(7u(TWFJ@^KkotP8SR2v4-bfC1;=qHeg`u*=mo6 zr0iYf>+{3{`mejTncIfBs?+oguR99+?PDk5ks{-?J)Hw@#xH+nFav$~R(i)h4M$1X zM0&GdD+9(9GnK3w{~N5W3{uG!9e;W{dK|uV6T5YLTJ5~8^}7hSzB3MhrsPD0c%SI~ z$Uqdwg-aufj->i41D8@Sl^HeS7dbM9FuX#gCM4}0=AV!z{`~y8 zJTL#PC0g}lu5IBP*5*mr51&f@@)Yv6oF6~Xve!!a-Z{>M-6Ghd%CRgiBTxe4OHTTB z-!WOZBM(;M^SAJzB^7@->oSvf2wN#M)UF<9)y<0EW3*kP^K>AhKdWY=9~CUHO&s%p zYn|zvW&ovFm82!1c|y2dm%Ep6+vum>yBNG7OSHyF(fx(&z@wHIjxDKKVv@k5K%c`a zBQF>^`9sM8ODITolV*0w3XtL%YqN>s88}Vsv?D{acqoG^$1g)=wAJ^MM6fRw_t88G zmq2p}j-c%HqRDYv$r#S`EnKN{R778Vj|Z9=l&!&VK>yepvA98Wr^J&2)5Jfmw%NG-{*$oEjzKY8g(th{E@Oxc31v zgV{8kiQ>tVZe?Xr_s0>A0i#j?!MraineduM`6B0 zv6-7ZpNS{`8|XhnB-&EIe9p&#x$3PS@U)%Gu4pBjdg%qWK~g>cU0v(uOq&nXmaJ$cN8 zhKNZy95nL(u#<45Z3^Y{V9F|81T_!wysJ`H*6#HMHwfUL;0Cc8s!1)FV*a@9eV)*6 z7>yQQg4O>;v!JR%d2X0PaG>~Iie$1+8}Clq!Z9_q_d&eMxypN`IXUxLhPQ=bZaF{w zIbDKdsFY~L29tsrVmRXApbUIlmviLqSkzP)-`e^&eijliHIKT0Q5wJKrH_4uZ$iE=41#;a?4N7{f?Jm)RV=`b=VE~LD?8Fy(Zg^&Vd9gL2GL9v z((lH-b`AI`^Vd9*0xxx^>W}lKwd!5( z)9%-p3!?CED2KwfTQo`IV9uR~wK+Ju#?BDWfQ|XPdgH|92~mK|_D;&(e!!#p`}zM- zd5EB#F83mB+bRChuOfcGUwef3xjAofDPAVBx4oLgI{)7<7YDBtjl3&%G6bKiNa7C-h|UMk^Yt(m0x! zQ2gj^TSA#Vt1>-e4O4h%yh_|?gY3uZ0z+hi1_J(8rsMV+cLFeqLdv82&yl!!oKy%% z+B@=6U;+0MV@Vg=p;#tV&bvxrEkcnWfl7EpetJ}RV%Si{sL3U>*HSh1s*)vTcD9v~u zj!BzVHp}}V7%7NFEw#Dd{|s&oOL8I}S%iwiwXeP-WkpQu>1I=b(hjx-zM6cxB~O8P zm9*rbgay3S6N+k(8o?s^NfjNAOZUTu$b`)bm5_QHFQk}+RuVJt24i=(-t3LuXn#o( zZsvXu`Sg(Ta`=XxIy%^yXs<3($;-S5%72a{zOW`x{{%5`6GCaKR{QEQJ zwP@MPCO+CWM;F8f7UwR(5!9D}WRF53zEKyW&35WW_5CVv5SJG%w_L=LhNd`_Bj4oU zWCOwQ4y0b#vCKOdo+3If>wjc?Rry-K;(zk`*!t9MEZRS6`y$92$^7L|sJs>=dQS9m z_j>F51nuw!C%c!xIECvedK<^z>F-L{@8_Q~UIXrwUd8;wUZ1S9A^j>w_@n<>s57@^ z3QaFe*r!jsY*6-;oXHAZO}XE24kvHhWKgI=qNy$wq~?nMo|aD^lqTLn#q*IfG|%aJ za^ziq3K6-h8#p4iK%pO?Q0)HqNUV&jddOZ4qy_hE3@ImNDBjC?mVEpe zoaZb+py=xtSn@VUUwGM)NH;k_-{ryw@|WE2bl;szFOpF=J!}DEsEoQXi)H-4ooh-Z zV*Kj!+j9$BnW9-r2N>WaN`;wLnY*pg=8c-!{)y9Het_J1*GK3Y5?u`JY4t>zWy+(4+h=FVk2v@4_-Z6@2+R)#~4iPCl zxLfE~O5RV|VQ<@ZT>3WZQC3?=%cwHy(cb&7DdeLtJv58u%0gf#4bGFqD$pHM+Y_~i z*H)w@EjOLjJz4RWMj7W?zAGbu0m3==W1M3xZwfc%w-*Q(w`HGHn9m@;pOc-z2LRve z3Ohyv81e<&LbrX5w+d4tmf>SSSyr1{(y%=*>x<3E-Q_10_8mXj2i$*%aImgF(aF6V zXyp;RwKee*NEvoTz#FEIR-176?}v>1uk<#lV>v%CtL}&_DgFvm zHnVS+SktFJD^27l-l-R?(CVH46W7P!a6Y#!)VxwAo0cbkaOolMSAT0L{2sCITEU=_ zAW+n0_F)6WYH$Mxf2W2WL&-4}kwFAeGm=<{T=6&}wVlgN{9Shin$cY<|FtI(8FDYZ z2fmh&bWi1KqrSCDwo*S% z4s&s303U*_} z#fjo`{T&7jp$alKDjkwO>#?L&@%x2g0z43f?@`Rr$zuO&Y?SZ3H!29ii;KcWJ9FOp ziTRma!Y>xomXkc-egA^n{{{rO?WHoG&QDh(}ok5B@}+> zGFNS1Gc@Hdz)l7fVX&LbM4JUq>PEP#a6Kl<4a|9K?tQGi;|bBiF(;!NS3AL2+apAy z8~ZKp-PTCi*l|ZqV-M%PPVoOhDFKhZ^gt`~5Po;2qf`<3>$}Epb$k7~*#8ie``Lyz z>uTuJ4?1;XCtTgUVLQAUnM_!ws;Ed|u6Qd^$EY!J8(;rU3-ySrtd0l$uYL~OJL9W} zLIx}f@xnwuE0DO@nO~C_V6xSj_pjP89z5hTo0M-8>6yJv8G}jtqP*_0Mcq`C6}_c@ zNB_({5m;4)n_EQI%_UxizPE+6YJ*jDqDw!VTTNw4Esm~KE#U*LJOh>2UzHo_;k!KZ zEt*`t@Zv92henNp?Bv^p(<-BZX2PQ}@0y9yXmq8#M19t!ne15lcGo-UgYc>=@M9lZuGjX@?DstiT8l{d9+pzRTe-$|hL$rAZ_2N7pl0w?^~UCm2|rv4VFKtWQYSK4t0F zun>qZcpwFNXl>{RCaQR|U>vdH$4;BTV1RtR%?1tHz8|eSlDI^c%?|w%OAhEXt{7`e z@^^W(2Ahf{Li3UY1o26U&CUF9!`%p09T?If5jo(G7^*hU1>xRS z(xJ(b+`6XJ`bk*Oxlp~x$nJ9`|GwRIo@TH*mWu(UJT{esT;9(iIgWR0iG5h{;h$AZ zH56MHP5o84)~9*;b#3PuMR@x;S;Ly0qu4W%!S6}gBk=eD-AQxZA#Bb%D~HWI{q9;;y4n=i@EwhtqEu-Z`xsh`>e?C zoplFozuk9~)RtHoS2t>BCcT19wjfU8^Djyi z-MR$%Nzo_^^`}%BRo76JJ zKS5a4TBV(qtW2DLKJ33!@!i`4bNnsl0xYPus}VT;L53jgpo;Sm2EF&gj+2Se^R*=| z>Gv+fvmtwDHMzpwrQep)lxAX$UxgtPR7+-M4S|{YvYOL$r@#osXlM-EoLI0?b3&V$ zOkMUgK?B~Al6h7jH+O>=4@Obd6!G#=POm&U)4CoZ#pG}2Yy^J|0sYFsF$r+ukxe9T zC@W|yq%>iPgd`MsGmhL6OAE~*E&jgnT=nRZ8EhtbrF!*3t#WL7PC>3zhCFromUv;& zE-PCPV$wrH`r5<`Y}Cf6QcucM*`P#As`5z*iwh$vQ%#$xl3#H9J#Q-6m@aYSmhoya zk|l39Vs4EF3}Z5%*x-B_j||}&P`Jt1qWmTmxTfC2vy4^-7H&xZ)<4X*Twyb79>+FK zM{*|iBx++v7bJaR463q;RmUhVG-cfML9vylB1j(%HUGFwd(<;Zcu-YFO7fSIdVMr> z3pk{Ei!c^R_4A6nToPCL77*%Ed+F9xAhEq{mYK`3(Y-r${3RwF7rt(a2l5->ZIzJE zO{Q7TCeL|5DtPvxgz$^}xpz#YIgFNukZ>>UPAel65^267&TdtO8PaP(u1>Uz1=8eqc9#nmH;DdOG@%v2c}PPAUA@<*Q# zzT)w{J#F8(s4Uo2=69YZSsV6kY*_F$iwU_on$1$|9)b~7{)(*lEPhPlmIW-fc%?ag z{}sx5d({xOHWJ%*;(yxlNO#%>q&-c-8DsxuW8CKVie~^EG!#A$9VG&Egbia97?&Ou zPjR^72(5j?jt9gmKVO=jrkL_MMN8Ywq(h4=Qavi+nr%*5F1x<_eSTa?HyY3SVwdrz2Vs{?V~(s)PPf4?Or3 z*JaGJjU{xE888{-I>pdy{pSwUG2m9n>quyQM8D^51$et^Uy((r&yyNX;x($eK03nv zm};zK>#vLSB-pU#E!4Q)8Zw#aD=?irF+X26@(x<>d2TLNA5{M>!v0(6L8UN9VF$A1 zpZ2J=2P6NTtl6jxjKm_VjwiRBBQ3G$?m29h*Iufu z-FmKd{h6~}a&sHAA`m-j)g@WH8E8D;i0uqQPHFcv-~?f_lSA%OFuVD4qYZpt4Ojf8 zzamX!?rBaqv^|U5y3WQ)W{UMTYdhQ-z_UTtvfHxD^CRw<*|h(&zxe;HtEv)D@8~dQ zaB91dspxz`ilGqeFA{^kXUIINte_3_q6A$M^f}^U|0O(kCwTCNgx7!+xM|azO!4vm zUZM7(DsSD>S#?Oy9GXnwp7cjM{2H{03SLLJs$GQ61kink0AZUB3qpHVK9Sv_H69@b<%CvR<*gsrP*sYbbeP0_e0+{H9WBZd;T~S?DQM4LgPsVD*l&4G;DqG+2T6x1Msb7IxI!suz}nxGZsI zpHvbo8wB5kq!W=u`i+%9X>%d@LeDio2vW_L@+eUz?}+%IxIGo;P4SXw`bB;JT|Y+m zPzbY8$j`(No7gqunMpPT8A7(jwzO|nLLCs;k1&@tLA81rf5$Ys+O$^pPf=-9&fq$9 zN4R9)=OiOUk;;>RN#MsXo22I7X&Qg~0tbVA$y9aYkefxd5FHw=9APWte!Q)5xY~qT zt`vv`N|DOPv}3YeZ|RLk+R@-z_z|iSy{Vp7jL(DHk#>>TJg2n!4QL>jmu1?r|KZ!w zq|ydBLU&av^vW5MH0l^F!$m)D67JOx-qTt1%pk1ELgC}GXh%QZ{{Y)c-o*f;uL(HP zsca#$*I&;J3pm(8w$bx9e!2nAGlQ! zqmJ!~`e#iMtUv-W3@P;M^M5+)J~GENvRS}nYhyqcI3I{s!Et>Z<2r1~?>wk~X0rTI z6Fm;h;j#6>*I2Z#1mB|alKjf@l6=Wpz{P|D86(@O<|(LY#!fxt>jXz>LzFqVW9&bj zzHWIsyATl;^amO3ny=3aGR!rzm67%tey0FmW3M!7$X?oO){mINjs{}Q zuNh6J;1dJjtR7t`aa+T*0G$GouE!#ima#YeGTZ9VT=i}&KOtdju;N?{_y5wrl&khe zN*C)cxGMHBYdKmEbM@Bypq@sfv&-z(t9@|KEz*L%Q7N9Mn?pNPsK(mQz#q}ePP+|{ z6#+>eeyy`6CVo+y@Y0W6wa0!cYeF}qqN8c^<)dDhZ?;RDEXE0YU1GjwZk>--I`8+* zXfrktnFLmQ*y#%Ji3j*y{1;R`)2LN>b{j<@?g0p%;rbaKx{_XP>Yu+NA z&o_7xp|EuQE*7>tec1IoFO#+>KWUI?So20Awzq<5c4f+Ha(v(D$6*qS zAbf>243*9fRH;XCA^p%FK@(oAg~OC2M|uHY#bl=@T{|M&dynSCU852g=5Dm zh>O$*&nDjFET#yh!e#goDcm^4!flLyzlBHXZ~Z>zEA61cz?wPPj`X$?MVEK{FqtEa zgBqxvMev)#J#$_Wi`%ub*F!aKLzq2A@j zm#jX%bgPR41&zM4oy%Q)v5U0IF~id~G9thg#r5nOb$Q3hB?vfn(3uM>QoN_?>kN+a zHf}m-osYDSlm&}1lD_qP<+5(Ql9tpgD6VSz`IoHduXZ;ftQRrRqp&GSt!-)9*;ace zEQ?nw2}0|bN0~1+i>9>GbO{pK?~oysXI10SOTROEH<2P!7ks#``$dMo)~qTe7yKzp zh2QOf_DvL2hJgJ>d8D_8@3$A+JD)@pcaUFL`)!tL?g1FH17(* zmpBIL3G`xnF-UKdQ8NG+b^j!(<}1$=tcivc7w=&f47-*!L50 zCc{KUUcB1D@jF-ql6o87l+R!`u<&K?4W)>7TZ`V9iaw=eZ!1=gskJ|7@u6uRD62YK z%ufry+-JggUV@S0m64&k0u4WAdn1p1pV;pgii~!;n(r;ahUihX_n{=sd+F$9CC2AF z^STbdVWR*b^sv89jHPj+-8~%#mdLtw(CiQwyoUv|@2nTRoon2){IePVU`{rECCNC9 zloH&AmSlRF#Mh#>qgCn*&+5yR7+;HA>6h}M{)sJc!ke!w@w7HY`1~&*3{6*a#|GZQ ztqy#=0`~$=?GOu13JblR=~kJzk?w)|i#lh*~VQnfYfu(|^Qb z1%kMMw8#!;bY|&aG@1!-L!{$#s~McSA%K*vA;d&MRr-mvtPJz&dbkc{^}flCZUQz3 z7kFmaG!ohEACjx)br_Qzu8~yXblpNjT=uo&Pb(~uS66lEkvs$hsab*(Gc!En{TO^H z5|Xg7={de*yfR_iwJb)34A{8Qa$f){-wPv_1wmq9`ROSZOz}0r8exK}QS1%8RKuo8 z$xnsL?wTxn()nu5nBp5XxEKhZK6AN=Glsm!IHx)@xNJj3Zf}C1em)IqUI{z)Y{Q(u zn{T>AX#aA%6sL<6{JRRFG$p+fB~BYqS)j9l_cYG10ksV6=q3w>UUB zWrW3Q(UGy{hp96E3EOJS}DBEsWbBaX-7PiGqp<~TS?N>QAgoN}u6 z95kB5z<>Bx^Zb1a3r%fvLmz{nZ#6SJCjEU5c@OK29%QvRICZEK=y0gYbG7oPYKrAx z=I9#lm1g$K716=G!@|nSPpp3?xdpoyK4aDw&>fMHM{x-Y_w?O;6j2N6 zsB~WM632wfXvt9-6}Zfib6eJFKca%MY;lRsEfqPO8VSjnzB|ojA$zj7$ylxmWQFdE5LAPn7=& z*wv8Imc`iVxd*CVXzl#7ds0nCMyBPc9E!#T(2F_%;7FqXss5x*%!4%8GQa!J7nC1_ z2A%oa0`6LP_Z%I8dkmAG<+S&SD9lfI?NS3Cq<>rQ8A+0kr5x>?W{%yXyveAvG*rD# zg0Cx?CM0}6KLo(Rk-XM2qw1phLM(~1YUgR@9@m{k1KQ^G2}=QARO3C*1ew~n{FZd2 z)^adZUfn+*tfwR=&IuT0(mGxoybqDK>UkFY%E2M3U@Ss8$tho+(tV-!@DQp~Em0A9 zF-aLp%&9QDPj;GLR3uYACAmICxE%zwJR@0G=1MK5eB|Qj8yZ3(8mz`E+gJRFI@%t? zIqNSoU|BX88b(A!Y~tMi0T|vgl-9{}^9<`AglmlYbxkYuE1SMVZ=bLh~{R2o0Ihk@G858 zZhJgUOvwy!svem&PhWh~FSkeq4V$9W6>Q5K?$}}1tul1m#1>aHbhOE3p}Ihc4;7BV_DYZ$m z+cA|$Xf@B(kP}^QRp$*+(pee|nXrFs!y)MK=&mE{s#QbUMNDpm`@>kX@I{RnC(fvB zS_pm|A=6`X9X}3ynJ&I5Nne(4W5ooi<57?%c1SM-GUarr8x5@3M8$72y8$BX0~k?k z&3goxjK6;QIE`@hCh!&|8ViHd|`m=Q4uW@ z?WaA-JZN{rP1R+3ys^r(SH{Q3r}YC+K&kWY`D^pY7!(!yU{Mk4azCz5R66eVGz{^6 zS%KqUn;Bg>V5C!3n$AOZsMsazyynnnUk0BnpKT2KADf=Go*6ap$GF}+q0w8b=lqyr zZazADqB`@3EPLOL3pGL0m6gW)lHX`(yKc8qY|J@O^Tf3EPP{!S!sOuPA9!dz-DMSn!j=Bfzq_CapvM$Gw{mQEkK^>svW|7w+r$(eE7zZ| zwe@?GV(5YA88dNy{c<%{|0A1&yLdRb-l;888F3TcT>08xHSL1mL8Q0^`%tP__fp-y7eBYm}oGb2}M8}&Xrx$7P^qv_Hu=V`}!5BU5v}P zkpGXcfMb!Tp*KQJk6?YB=_l->-|0%yFy_Iw{d@A2>LC8pg|SpSuG&XJnCZ{M zn8K8 zF&|`l%F0*D%%EO!W^HVPWMA9{cp*FaY-4=0C$sqZFYK)MU)Y&7vZv!ZIO9}z{0U;6 z+T_8z7>~n}B^1`_!2L4K&Y7tzc$F4@<{TjH6$rbV1K49|Ro zJlAV79cF>YBK1Q`(-J^DYHi`J$JYbZ^S{qdJ9D$8&6gv}_I_8&Wh=Kl*7&lpz_*@^ z@A4Ro=^=s5N_isPSJuCAQ zZaF(#Nt~Y3ZZH4FkQvMeq%R&Y#;5@MmD2t_2!Ulz+W!uKvYW5i?sz;s>M5ywThd~} zD=aD`H2MO3^nU3Vk=i~grom%^k|%sMG-(Py*V{G^Qe}$MEU^7OI_VwbN|{$MO?i>r zv1UXJMdEXq7IgcO`?aS_T&x~8o&Br;?g)Il6S~59^-*q+7Rj40K@RO@Wj2>3a2Cb!D1I zBUZcA_YA|h-I3v~%(i^3DR7f8!A1$so!<@8h=>R~2O z2TRrBiZ6sn1afG*B-_1H6R8=OHeW`tSET&d)`A^Z@ktrVgdlBGIDRRTru}9!5vUvzJMgr(QlG;`7%7_Pm<==d9d1?K8 ze4u`QdW>c}qu+E>$e>O-?m4&0CtqIkb(K5L(D$`qPNIfc3{FwnuCsvD^3L zk9XEyTP4=s7w2e@jFhT_-{?^^sAFyJsgmQ&O|SG$R$hnRMh|zgUdQ3j!ko3q4kGkv zU*{&7`CZ2AQ=I#sG@gcK#m4Dx8eN{B?TtzVp6{kf0qI!LTKh^TrV!&N#(;+%Qx%X? zyyto!%fb~%(2KZni;Hi)El8+BZ(?Mw7L=;LGZv1~JVyhpJ$`iR9DRM-Vm=m#=cx1N zCE=U36?vw4glN~C4%jVlREZyjbZ))A{H<+s%^SIk)~>l3J=K>D;F%aZl_Yg6-&%UC zw6^n$&}i-Gq5xicXMsreT1rXWV?gGI!MQa)LYObtK(vm_LBG99v2IB0p1YP&fB6x! zk|^|T*q@YYt8tE$!ifvtfIGriu@}HZn|mB}qJvSRXl-E!>g+_LeU{@#gxBYQ7d+#;Eu7;O z&vb6L(gpWvj}>Rb%(U1SN{W}AZNEL8q<4d~(5vH?oZ5Yqf%)~WjCD_vXZB~x?5De; zyM;u0KpNC-JX1d$Lu@ej8I^@FD172#B>ROx^l1zWL$yJ^9N86=xjokXYk>9(zN+XT zH^oc#Q~xwQKxBF%IiqstvYs>PAmx4``-L|*3q)ri zXqJBs%*v0xm3=n>TL|P3+SY{cUrKe#e+yh3Uma%~4<`#%SUT*Iatn!pDPDHnj>Wip z)2`?Nb&s}LFH@1iS6fuijm8n8z~K9QWPz#xesTkKYB2n2WZd+!#eE!L8+vtJeF|1A zISmLu*yCWXVAyzYyqPc_AUo?w`$B5U=<`wz4GY1^P>&tx|r-sSbSaKCvs5a8gmc}DZi+_*vW zISa+}j`jWisqUWLvq5d)$N{_XXl}2Ay;BqnXE*hF_vYnV5m~_f+jo}NhFx9OX~Lt5 z<{!)zt?A5_O<5$4of)mCYhBJuW*1%=WlpT~?e}zSPG_5iMdT2es0&wVA-VFc_haG& zg}K$A?8$O|m-Xd_DX$x`tN2)8Oi|HMUulE$tTQ+bMoanLyzBgIc{B0adHn48%VOSi zE%N1N4FXcgY^A^635Mr*7xW1O?IT?LF9!AR*z69piWmu%EJq6S4LjEIO&zxndOo90 zB9X~KJJxpXc8e1YEQ|l!C3_eZLzeHJQiFGfgrE2jFpTv^y zCX*p?dnSnaA9DM-Iz&-7YMM5K50flkxJtBv&{=I`;PdXjon^%>M6MnF-uHdRrwfLAdqf0|}E7W0%&*&#y#8A#$ix+(Sy{t?ye_`}+=%d_f2o zlZtEVskw5S?X%GauBJ^laqM$jAa;jqtLkn&jSXFtPPGVhiwIR}<^+IM`#Rz-N#v1?3#xaYnIz=G z8;~ejBnVlEBR?r*&+%a_xeWN^EAoTig;1iAs^9#jUrLGiF_=*dhxK;o<3}dxUn6V# zu@cg_3> zxSo2&C?x}5kJ(RryX`M(znnHRG26yvih9_h>{nw0i;4Aixq%~>k@Qw8SGc2r>dW4> zMsgGKXL#=TscA4ui%3TkUx%jFMq~ek#ktt+2dQ>9ovAPTZ|AKLXTYZT-EMnbyE6vnW^;1inIV~o@j6~DM;R}`9P4z+ zq<`<1=h+gJ8}q3OX#@GakBm?3dZlo$v13lE@SdE)_s`N1VsSska|>v2Q7lROIBDL0 zN}zNL`he1dEhAT^PA<01GV-H}SQ{aMbxdKm%_|Yq@!rsJ@!nFKhm#RQ7B&fKCN!+bY)!9_u2lVo%5Ge%d0~ z33tp~BmneDPvW6(-K-hEeEh>1kXFLY?siz12zogt+EZAL0P;#X*n{*3@d2+}x<>vl zxb#M%gUwf{JWo|{A9DWWqs2s5i=}QK_SYJKN^94w8~jm+wv-o!03dO|3g$b>{RB^v7EB)}95{CS(cBNjv9(ZUeE zle$J;V!Ok!%nbALSu-H;d$S^efY367QXS~#kVRXyb7+)a#pSTJC>8v*_=2+`TI=1w zt?SjxDk;E^q;bWC-*esNap3Wj!-mXxJx$UVe(=N`h&p>cLetCsPd)t(5G zkaJr2aZv*#>=J>)ZfNnf!#|TTeOfou^5K{W+{QKf)vDd*G4qrVcc9;eknphU9w72*4^lJlv z9+_a{!*|tmwk%w}58g&zo8DOgFQnSZ#CM_^$TVe!A`|}<5YQ(^a0f?!&yfGX025kF z3>TMZ*XboGyWa~gd#5|>12o>~nL#Pn2Id1<8H4{|IV|>8d=0a>r-HCeaI7CbXE5g1 z1NxJ=*)J{?ivZ9Ajj^9%^nxlHr$ix(E+^I#q4!g>CG^Ty zMUi5t?#Wm3Ls+Em9i9DIMT#XwezrvlZ~#ume&{GtfB%Ca7=byjK!U1D=KoOj)Dg9ix^+}+)S2X}|XUEY58yZ60%f9zCktxe7TX6Bsk zKHU^0tE`@W)W7I?cXb_)-PQT4pzS!t&}EmFlBxNmalNzi9t|>|<)6bElQ;2DOGp{j zS4<0NBOwN$u!p5(YPDwV2k|awWkOh4_jMI9e)DPk zdU)^s!;9k%MC;XYVkbN^{!`mcw~+O#alzN9LquKp(9zG|hoSd5wSyM;olNM+2mv8w z6BJBrx$aAk+)N8`f&c26(&p%HT8$VjiZl7K`$j)$>wuK?cgQ57Z8*JU$mjc;k_Kh} z`?DSrqm9NnW>CHdj)PyATTmt4EJybI?g#%Z6q5b^`TN72IA}BW@l_$psP2yliKI(8 z!qJph0>Ednq{HQwL#cWSBXRC_Rj6ePRnUjHQ>Fcn*-}(ux9xXGdD&FVGDZo{4(JW6 zG&_+*O~NnO+mPXyCRKe8^8UG38gvMU-L$YWzOR4n?Y%(W{?Cu)Jjqs|GluU`CJd2| zTNBL=0xR8n)R(^dV#I+@o}Q@44M(N#=Nmn-f8*{u7?~OCIyEC1L;v|`-JGZk!$rXE$u;8V&WZK!3kZjsQJy@p46<-Ejsp=X^9_pRBjg*cV-HFhpgl| zUNS$e7~f80=?*mi!4Y&A>%W5;G)j{%G}FH{()QUbbdJYl+_P&(TQYB3*IxgRx8ra9 zS(B}C37?~9Qd%c;TJW566g^_aMXchKHD^a+)uL|xPgC^H9kqPZhf^f$WeHE>wuDz= z|IDJVEwv8YFGnY5*(%uxN+KU4{x_2d3Ome~8-^uB29HKI$c(vrcWIVdgV0|={=tzX z{=sXWsrW=pm}ywp5Mky(Adu~F$)<|Q#rC=VtO2X=M{T5+VMvN58Pic~vu;CF1Oi;0}vi`mw~hL*P3 zJ9GcLBIE6a{+A4Dfj`*f|N5$DTwJD6Z#=9Ibq$Ry-@h|ZH|jGjEw^`%6t~BQj>Nl; zBuSi;5L#GBZnKMAp>(tI{S=&}@Iu8j?j9UMY`8np2xyRlz&r=v4I)u5Egp|)*Dk$- zzb0Ioo((cToc|jrgmSWkunoN*V#x8fir7Ak{MX_Kyf&h%O=aa2rE(5qCudAxSDHX<$$=8{@!hS>Ez=5wmwttcZpts=4xJR1D58C zN!Y+4y@ai6IO4OZg}78dmb6Vb`I?fgs_SSclBY*l+Z{tE6Xh^X)vL{tD`zh%gg2FI zz1&-?HWHnyW1@U5kWfkFNf}|A!_fOMR`jh|$E`sTV#6}tQQU(WX&+yH?WVWkliNHV zIGo8^8SAk9zSL!>{B;Be3Ma6(cTZa|<$X1%t1o!7H-2OW3%BqJ3ccDZKxbwZl(ZA@ zvW0W*cY=Irh9-d^Mhb0OpgQ+^_!}{ZqJ&fxLM%ynL^t1;1>+s^2+=T>vbzB`>u{78 zu>RDCagum|Rua=g_O_U=AVd9joHNSAJg;NkCzk_rLDc4K1H*mp!DQf7#@%Iok96N% z{_#D%Qv9Czvdtr^>T81Y_9kdsg5(8_%2^s~b1Z7fq*8 zE)7jc^_wTrEzu6BzrSvsxBD3QzWlUk{Qf=go`PgYJLpJPS%s%MXwcX|UCc63j}o2= zjb$!Vpf5lF2ZvyD3INb|MsnSx!6q>b%~fG3S0E})X4)j)_IOb0k;jq$40;>+e3N-| z@fS%5oJqJ2NFd&cA0zCXxxb(KbI4%8D>P7kLKZLVnON61i!1fG&sq8HNTcU9=+;=o zC%XLa$n&3|3#Y5D$N0L2!`kM))AQK3=bqP$x3i#Y^q}1LprHJ%04v{l61r(QWa(78 zv~Zq53rV!Jaw&M9Q(EeXu6tLM-yA^w?aBN%=Ff|*H^iRYo`;&}#VtQTEMgUS*M}{U zmSE7*@M-;^6uys3mP8%Dc=#og*#{(!fJjVDo^RhCWCBBj-a((id$DXv$Y>bxmsS&X zUd}3y8V0S6y=~nMA4;?^=T^&M7B)x3&703g!gqb3LkUn@?t6#R&gg|q>*I=1#3sAj zH=C+N1Kz&h7aQxoXUy^EjOgnARzKogCJX{EG5ybZVrC})=eYL-rXQt8u6Ru_b%L6? zgzrItxm!<7pCl>);6iHaSn+qGT)S&H=0&c($Q$?N2I9bpZeGWzHmLnmI<=0M!NoKU zAkQYys7YR#YW(_c(U5FOfcqKtdB^ez)8iKy{MVdhKj@{}>vnJ_cq-uhzwPb)eUsLw z`Ef+M6@8KdB)Qnzat+0|KR;FsQRE#p73H^8ba&cmqR##EW0(nws=H*Pmk$r+H zWR&RUZAdAdKdRN~=sLy`^a%3?2o~FHSnA#!_(!T@qIeNuV%u?-aSolsRp}M1E3xi% zYj;6a0WmuIN_k$<^W4(_$z34XOuOt(FE(}g5*&m&EfxfZST)y%mUy~dyPP6VoLqe> z=SXI9i^YvmDMd}JZl!V zKxcfhZBP{ZCS%kVq8=Y$bW6g;qGM5bj?^S}vkvi5>` z&O{wIwcM)vE}q2clm-cLqa_onqk5*WS0_tgC=8 z;jhMw^zq*zl3h>$JgXAcvF^Y64hYipG;_?upzLaMxvyUca1??mdLL1s0sTwli3L>q z7)a?@q0A5Z1;xhNcVBovj=S=zgIGE~9=kV-E3gOa)_5~>_Me>I2|kx+J_SX3Twbl; zmhzW$%N1R(4$nxup**xsre|Dz58%86YqP&~_$GA_(oVSCDpa0yo%aNgL^^%z4vgce zS%te<>F`;*6!X;j@?)VQW!=Rh#IZ#=xl?U<=TCuhMyILH#tX`2Pto{3-onGB)eMxE z8$+!RBZYpxx5daX8W`= zeW{9`7wPAe*w_2{84gJ!6D|&Vm7I3?x|a&n1N-=OvFqoX*%m z)ENIozF2PXmzK}u?vjUwl(BIvk*D$1O>Gfn`=c89Mfq7}xmlyW5r`urk;!8xLM%OF z43m06w~1}n7SbZ9N=V{iR3ys6NQz^W8I7;|NJ?#EPGXgNCM5n7RNd}z_ja2l91jfc zZ72(O3%(Ce13+7kHc_?kDdVMvkRqwdt5&7b;?lXN_QE9MD;ePx}Ut2{34aHup?ft1e5`HHI&ygYrJ3jsb%%pB4of4o9gc%MPXRM~Ocd`UW_A zD7!PYx~}I+!>VkSD_JxP=MEtKyB!27X$k*Q4ku5giKb3SWMbkC7iZz?7{|#G1_75n z`(t4&nW&{NqGuQqR5D$KuEXH0Y*tk~BJ|YPij{gWzt1lZAZAR1;XjJv<-@kX=*v8? zvW1JCeYH;=smu(SFzPJP@j~XAPob69av@GI_Zxm0em)k|-13#~;#u|sz9@wvU|E)A zPul^Yk7CvRMizd2EfpQYvT8k}+KBCo-Tac8oUAI>FZzp8vhZf4(Yn*A_$VMbw_oS+ z$N?2`FIFk-)`qr_k{*b5z>XE_EKe_vkH)WRi?V9sfU<=411%1Rc}8s&%_g)Fro&i1 zKamGEjZjjnAb}hIpv%1e`Em2TE1#$4f8za``oa0;^1?hr>o<@SE{dHl*$3ly35G~kEv?ih)WfY(LOH187z-!_rkEuZT|hxgXj6J6l7gjcPH_k7AA?6rJ$ zH0VSBEiK)T{PXG)}YQ2yt2R%}j|z{txBf!)|e=le)dQqLol)827Lz-EiA zWB5TDCfM1hb$luE1MFwlBRHlKFcK2{yxoxJDiR%Bw!U(p07 zqt*RGso4AVB_g!}v9j858<9o3?d)2n)pl8n`_Qlq&hcGY_>Lzi-S}n5c$?(y0<N(r zL|!RXKHgDpyS&nPKS=^3aS07ijUSkFpscgP`B0(=_LD@Z@LM?0tudZ3s)N+q7 zf#7*{z%$_0`%dN~Z)@84DN^t`6xDU2nh?1gx$gDy@n$3FacsA1PcHC50`;c1@64*W zbs`7M>+fm*Sijw&d2S23qYQd)HuW6+erVKn$aO+A9SGovW3u-dLA}=aJTu<2?r}rp zPP5>%@3_#q^uH5Y=W@jby_fflsC@3ST7NHf|qpdv1JMR)Kwh&i6l!&2hLqoJM`09QOI#PY~*(D00yH zjl;)t11<98_8ArQRP^XDigE*GQrd%vvC{;w}53XK6 z$%2kRB4a9@7icmIKW-6aQD*lTw zy}T$SuXYE#eri=|op|=7k~~&bboo8rfX#f2d+@pkd+CJ-b4Ro}vyqt%T6-sGR4^Ua zWMJgzXbUx=wJ1{iX`|60e^Z8`Q^VB)2I&rthT$Rjix`oh1|&4?pm=lV4fM_IYx|E^ z;1>0!vbQ0fYO!_juWYbr#~EELXk6@cznd`LqGv;NGG`J+Y!@BA-T&gLY2IRqLS}HSwC{qm|J5eLy%|FJ0%W04rH!=&Cf=gIb zmH(C6+YV%$it1njE(wdAzipvH%3;yVn+7LBXpQc2`3$V+?6pkz&GViZbBMoWK?-rk zFwAXFe@-aNM%RI9iqv21X|AGZqSeSNiLO`}(Bm_dw2VeEAxa1Xtu#*KIIymDpYK(? zkqDJ?2{0(aaTf@o>wF}rk3@Im&r?nKU!#7tHushoOsKuO4d$aRiL~5Kgk2qpJH3Y8 z)q3huPQ1Tw&Zgr8`TO|?+4mXzv)JW7nsNhd{S9=B8SzGn<-)NBl0=~m1vhw~^CG!sZLI<^!?NL2h!`hWu&_7C|kVNJT{Yw&03vH=~7#~`e zCORYCMc!#9RTE$G<+Ewysm$OW{{)a>; z2Zh(Rx7q4S^Gw@RG1qnSj=Y^C;o`1Zw2%JNMYIJXyAd!qCnouV^8o*ERZjwq=mTC~AasOB%b zV0*b%u)#s3#k|_-S+)|2T}Pw#Q6|4v+E6of18fndo*i=gJzr^QhK>VsLnG_J7M?vjA@Px9an3%_P*6O#(9m{N~^$!6a+SsH7?%mVl z=ZqX2w;x3mjaF5yg}C9X*hnm83|f_X@jkyiJj22jyJhbkblI|I}g*$PWk=U_!Kd=jDJ|*SoVXT&GVv4+dsX-3c8XB z8Vq`x>5;f!!9>#hfdq7n%zM8Qltw}Q@h#X}%u#5X!IWawUp=iGm zAKftt9&|4J77ETt&Q6MU3F8QZnH$hMsw4k3N`xqg*e*Nn8wM>^f!~{*D@+GcVDhMT zp{7#O*ySvpznJ~etfOb2au{tLrBFcoh08}i*+R!09t!X`7y-RP7Nj6m2I-oMoAcvf zN*_T|$yC}mv$Y>Tl<_BT94qY(=2e<}maCkpq9P9A>BJuk-FOcKbL?qb*hqOrM|?AX zcRcL0sM}!2Q*@qb-LNpy7&r;z>eELUNp&;#OQn|*4*08M(Hw0>K0U1 zVIv59vwK$aJqk^`@BOnymO!YYs*!2l7PUKh0Q)tabN%agLC1@||0TMGSC;N;lCSpahhICAWdr z4LT6h@Tql~qS(?^TQwLWiR$*IF6(}o#k*R9zui`EFRQks>4aD|u@i=T&4pDfR$6!O zaW)|2pQ<5gh*rf`FGy2Gs^!CJ(YJGC_Mey`gW?dZ`|8+1k$zox5W03`fu>|^Q}w|J)gA13X8=(KJ}PUmey!KZ0+|Fx;u zx672zv=rNE!aUa5|2YS=jg6%d5fK~poGvC0^54et_eX+uoo=65h>pgL-}sJaI{h6s zMs<3Uj4bVaGce9JxO2Fp9OY+$@TcDff8-YY6>s8i)ru_M7`C9x8k4On22jR{@4D_! zC|L%_iG!0{RtYOmOs`@2>S>{v))n`ZR4SQ(Vv!tHP~TjU(f7a&wmDzp(xBYBe~W$MN5WqnT(Q=izKzR~F?_2dpGTJwRyo?JjO zFkW+|J0Mj#r@nKQ?9wVVRcs~9vq7Q-v*>m`BLk-ao^mtwV#mlga-_`;=-5#{iy65U zv&XrLElgM&($lD z+T`#t{+#Nh2`gR|8$ZQN`#yi4PQt+TQPwbi92?)X&t@AN>>nmP#HC;^*`pxbp$DC# znMkA4O>Fppn6QpI*eand!!sm1A?q!jP_Cbq8^s;X@(qi{*_I~ZTaR<-vT!A&$N2B{ zxE(FBIWn!##3GcbwAA`hzjzmoTL^~(o%Sp7CKHD$fo9cTu|g?6I`4ZPVcTzZeX*8I z4C9A?--p-9Ugg5I^=XmYmyOPcb+{zfH=}uj($W}NFhc(q)LdL% zj>Izc3ErvtaPxC@OD5finX0-5x_!k6$EesYeZ&}CPVN&HGuW1_cJ2WND)}rw&PTA#Z*X?VtkTxJ;>d%nng`KaSh;J%JZ*J4EImY z3AvP1!LiZgR7E>>^HGm@WsRH(I7wwWOU?cqK#X~9=}Mbls-YkCiZI{!(inQPG76?N z*_7wFo{+S4h&(MmF(Vtlft3ZTSuKGoofsCsJbJ2p2&=nI#;-cUoLfdE8}6UH7k?Ss zrrDG=%G1hF(rrB0ad6G->B}@RfeKN3VZ76$!29r0gvLgj&LqZM2?tUM{~uecc8k*C zzYQ~+KX}QA)OoRR4v-MeNI*p&!c~rOGN)M4elw(xp$yY6>KaZD1d43tePr+F5qU|B zf&`XDEAs+FE5Gm-;32q&JP&QFlvA4Yj}>40FmMwELOlb6`}t1lM9O}#E&L5m%F@7vk!psBB49zD81%hN{vF<}?APrfDYu(LL8;ZMzR83akWBdPbK-R~LbI6O|>|6iZkK8Kdl0v>F7Z!F< z9_!xOqN~P!=FfH3yoSKNC78q17E`my8;)8eFub~t_DrjkCWMRaO6xv{Db#a1pW=2B^^k9Is8)0h|Uk;6VC>V2_2;#Hs;S)K8KQ2 z-0GMy%NK%7v2Ki6m?9}PWKT^C3wo=&JsS1^DG;7+Xiqx-dkQiR2q^laV7>#L{}yMw zL-Bd8{gh_>jQw%)d0+Fi-1F>`r^0nzI&=8HOZN2aOpGa=**{O@gQuroBht zcy>{6jD}`)Qk%2|ETdEsRWJn)-;`(QP>GM$Qbsusp?gZaiXPzw8=;VdSJ6J$TI1&? zH(b6=({LgUzFe|d<&b)9KacmnO*~Jq{CbHGGJG+F(T$g^Zt1yx9I_$#hyc$2nR1E7 z0sXl1X?5Rli~RmPR>{vYZaKHr`P=Ry=ZrnVBTkb=<%#iu2^wtk6P znH{Y=mzx+eW>~HDY-uOl9$wwp4o; zk2eO^xu3|>PC`{`caFwG@>N%=FDMiDAcydXG4Q&nkD@1lFjR_qh?>bBLnG#gWW92# z3a0ySv}?i+I25w9FOdR}C#auIbOt&fNLgHnc(=JEGZ!Qg2_lq-B<0gbn*s-*>e_JWbNB4E*-uJj~ywen0u)QVQ3p0J{2i z!(=LDPrh;%HxiR**axeG;f^Rhxe=>P;?ctX>B=3ztFU1lg zRa+&k8b~J>nI*#tqY6_WWdvA3nYwD`71a}2Ges|cJP8;}+tqY6#$9x!%lB~O9UIFy zZS?DS{p!UAYae*pk$lvxulsF{_}qTZ|4*8M53_;pFTf|!|5vl-70c-{Oy+_D9Pz%h+x3zUsg2vEEy-|t{d#ivWdNTq(Bl*`xcQ*ixpNVNiXKeIpwMN zC(ZmORaCcM^;ZZvfF*|~;IAx<7@Rt<6AGaco@faHMjB*T?Qy5VPcC?Ir8Xprf$tTI z2p7uI4UTMj6jCVMR7&P^i~}}%KG)gvebc{7=`a>6GGxJ=qMg$);OfvDv|iT*^tk@* zFRDjM>&y(ek@lYv0OfXwKLzOL#1Uri_yXO6#Nl>Qu7o(+dC<&>bQo%F5jS)x9DchC zz~)v;uqVius$FCK5=wBWG1+6*A{6O0d*92&)DhKpCKoM>n!AEdOLBlV#dg5bf({fM zCvZMowe#XDwwrAS+8YmYGZ(JiW){aa6-1+j>Z?jnjJodgU6wu)2$GL9+!-cSd_6<( zk8k+!z_Ds@6TUav-i{r4?NK{d{PebC9WJOMYgs}S{}+;NoKuA5RECfMg>WTR!i_LX zbufQQ{23nyDOo_Ox*`g|qBXD8jTmS+{R?aTP5McU0hIKL4>wd66|`0O_<6Rd|AZSL zarS@B(EoHq|GPPhD|4#uiQrb>tSQ`l4@}#f=_+pT55vHuHy{P0f{2eAq;SEayv4O} zRJB+KNz-O&koaaq-AHr$iIyvjV!WYsKb7Y!tLmgX=8G2{|3-IM_{6X+5gv-;oI5zN zJj5te-JZC`ur^{rI@=UQ-*(F8__@omJXFN-toT`V{f8t&>n}`|qIW8b5DQB*35S6Z zliRrp|J@~7?*WVL&9Rc*QIJXjM=4gE2)K&Akwp(D6We~QVMD1R1JbAVv#X(@$&1lK zFOvRJk15k6?^jK>{%IwVLP>`qQP$~WhbYYlvqY_)EKdqY1!wM}S7agW!CIjH2LsmR zhB|ke-FB5Mib#TjYj{|u?E4=^CXZuEK4qKYIh~A@VmhBZ^D67&z4w{^r*o=_u5x7n zy4W@wSY|0H=VFhxDLvwo9oSIU?IL)!f=h>Zr(%ky-&uDdbk|?NqW-jmCo)O_4M>G4 z>ai9T0N%nhPV>zg+AonQxhD9|$@C0+3x<@hWI+4wZgscRO5DrA8z3Bo+%Unw= zGpC6v0#Ii-}gG1FZA{4?KKU|GVN;Ev!by#{jg`*%BVLooPhO-pW&?rE=(fod>uyn_>{eU8$k~3jp*2h2%!f{?xCD2L#G; z>VI71V6z_VU2`eIDc~g7|LEFPHgwjDrZ>$tOVE@zY#RN}rXrpdEf>d=mNb>c zf{7A+dbN=Ko>rDtp;pyV981+z?6*Cc)7Tn3aqAoTq3sC^9kRLzMB1 zfA@#Iaaxk`cF@$xOK!?=cdQXaYo4?)prsH3C^A9w2kP_%y|6o&OQqWgX;a2uzI@)v zNs4JUTl*+GHu4OFv$S&J0MYR%#@vi)?W&x1?vCmQcM{bx%Fw>ALt~J=HPceTrApAp z(tn4Op`in{W&t*2$}jn22v_AsQf-=GOxwgM&BZZNS%b+EaV#wvaK;g<-2iRh3h*8*CY_%b5&@34t#$aYlhc&6?XO6TiAz$!n-BL2o) z*0O>yNm=J{3jIOY?vjjA9^z+>tHp4rqPP)Ue0{87{+Yig*K>vdA9Rzt;??XEm!I{U z7xkMC8lXlScmBqdO4;5$k_0N;0?X|V#L9uwob`h!_2^=Ca$*v4k_s_LxqdiP7*Q4~Sp1T}{oh|MX+iFc^AIi2lX7@Snx4+IJcoei|KY)gTb5p&IO+i2h&i{lB=- zf1h^2sIRp+eQs4O(r-9EzPxr@Hd)UY5&NC9(PEq$D+{fI2TitjpAmC-T_SA!QK=ZB z$FV~I1l(|N@?>FTI)Dje?wM;O6lc@ma_JS?UMn^(Tl~sJ+KfLdit|QBV4f^YHC@^| z_x^<)5ThysC0f*jH6hEf9Qq(cyk30p$M?e)~Iv@_+p zCu$uII>KK8+|g#Zwn?JBKZKR#vg;b&lyGnJ%CJlwq^Z^zKN@^068hoRm zM=q3%N`@>NFFVDtP$i2!bJw!AsWvXr=#gK|ks9=nXQqf5Pi26TCDOHytL&0T+i&eu zUNxjR<3wLYm4w4L$?ZG*7B=mC;397>03SI*c6Asu%MftSf=C4;HcLo)b<~C-e7~je z{7MXw|MbAJPB<6XW;~-4LL?!dGfRY+>$?Q2xQ z;ei&Qx>1f9GkD&kMXM=#WBtQWWWYG!v#9g+TE^$@ulCmE#tGcKN2%8Q8OaNdEM%n5 zl^^k5-r6v}LFdc&pss)bH=DC6r@cbdH(HT901Fs#dv1S+A34$@0= z4L>t^{>XW5J$wN@_qEiyU1FbJ8=>@^eG_~GPhK3du#&ujUbZ^Ju-+P1HwA^1@Q z+G%DAarU_8TKaE^bf&L#;hD|oXV-(a9`yOX?gt8(oSeM1&i5yH8M`O6YslYJs5K7q zOY`l!k9%d(LH3E4RX5-XUm!fulC!4@0nk^gOVP_&AdBTml-3O!DbNW76^Y6)Rxz

!#?8;+9^THO;^DJR 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 %eCEHlh1)N&%wNo@N5_AgWrQ73 zCLsyWG1%CmXx*UIW4RHHzt8LVJtpf^7UKuC;!}RGQ^>Kzt@wEEjX#!W{-81Eu~`R*Cn>G=|b!?5AuLt6j%qc}*2*ABHSDd5)OgEIkaoQh%kye(|{6uR(y*L~&>Fdz6Yee
9&dPb6he#+3jrn_N{*a>vP0+a7&q#{;xTDNl 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ⅅ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

sF$nO-`c_dp4*mWZ9 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

?UvD2?Uif5-BZ0X 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

S0?RArH=D#M3$?Y4 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

goFv#ZlH*4ma2b;Q4(laz8MZOu(uAvD8A=^r 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 TD>MBS3_#%N>gTe~DWM4f7E*Ck literal 0 HcmV?d00001 diff --git a/docs/ci-cd-guide.md b/docs/ci-cd-guide.md new file mode 100644 index 0000000..57ecc82 --- /dev/null +++ b/docs/ci-cd-guide.md @@ -0,0 +1,90 @@ +#documentation #ci-cd #github-actions + +# CI/CD Guide + +This guide defines the CI/CD behavior for Card Collection Manager 3. For the complete versioning policy, including prefix semantics and tag rules, see [Versioning Guide](versioning.md). For how the Windows installer artifact is produced and configured, see [Windows Installer Guide](windows-installer.md). + +**Quick Setup:** protect `master` with the required check `Require semver prefix in PR title`, then keep release PR titles aligned with the accepted prefixes. + +## Workflow Map + +The repository uses GitHub Actions workflows split by branch intent, with one orchestrator per branch intent: + +- `feature-ci.yml`: single workflow run for non-`master` pushes; orchestrates Linux and Windows feature builds. +- `feature-linux.yml`: reusable Linux build/test/package workflow invoked by `feature-ci.yml`. +- `feature-windows.yml`: reusable Windows build/test/package workflow invoked by `feature-ci.yml`. +- `master-pr-title-guard.yml`: validate PR title prefixes for PRs targeting `master`. +- `master-ci.yml`: single workflow run on merged PRs to `master`; computes semver, invokes Windows reusable build, then tags/publishes release assets. +- `master-windows.yml`: reusable Windows build/test/package workflow invoked by `master-ci.yml`. + +## Version Flow + +Feature branches and `master` use different version modes because they solve different problems: feature builds need traceability to a commit, while `master` builds need stable semantic releases. + +### Feature Branch Builds + +On pushes to non-`master` branches, `feature-ci.yml` fans out to Linux and Windows reusable workflows. Each platform workflow computes a version string in the format `-` via `scripts/compute_feature_version.sh` (for example `feature-dark-mode-a1b2c3d`). + +That version is used in two places: + +- artifact file names +- app embedded version via `-DCCM_APP_VERSION=...` + +### Master Releases + +When a PR is merged into `master`, `master-ci.yml` computes the next semantic version from the latest semver tag and the PR title prefix using `scripts/compute_master_semver.sh`. + +Accepted prefix mapping: + +- `major...` -> major bump +- `minor...` -> minor bump +- `fix...` -> patch bump +- `patch...` -> patch bump +- `path...` -> patch bump (accepted alias in current setup) + +The resulting version is embedded in the app (`CCM_APP_VERSION`), used in artifact names, and tagged as `v`. + +## Master Merge Guard + +PRs targeting `master` must start with one of the accepted prefixes: + +- `major` +- `minor` +- `fix` +- `patch` +- `path` + +If a title does not match, `master-pr-title-guard.yml` fails and the PR should not be merged. + +## Artifact Naming + +Feature workflow artifacts (produced by jobs inside `feature-ci.yml`): + +- Windows: `ccm3-windows-.zip`, `ccm3-windows-installer-` +- Linux: `ccm3-linux-.zip` + +Master release artifacts (`master-ci.yml`, built via `master-windows.yml`): + +- `ccm3-windows-.zip` +- `ccm3-windows-installer-.exe` + +## Release Procedure + +Follow this flow for every release: + +1. Open a PR to `master`. +2. Use a valid semver prefix in the PR title (`major:`, `minor:`, `fix:`, `patch:`, or `path:`). +3. Wait for all required checks to pass. +4. Merge the PR. +5. Wait for `master-ci.yml` to complete semver computation, Windows build/test, tag creation, and release publishing. +6. Verify the `vX.Y.Z` tag and release assets in GitHub. + +## Local Build Version Behavior + +Outside CI, the app version defaults to `${PROJECT_VERSION} (localbuild)` through `CCM_APP_VERSION` in the top-level `CMakeLists.txt`. This keeps local binaries easy to distinguish from CI and release outputs. + +## Troubleshooting + +- **`msys2: command not found` in workflow logs:** ensure the MSYS2 setup step runs before jobs that use `shell: msys2 {0}`. +- **`Permission denied` while linking `ccm3.exe`:** the app is still running; close it and rebuild. +- **No release after merge:** verify the PR merged into `master` and used a valid prefix, then inspect `master-ci.yml` logs for version/tag/release failures. diff --git a/docs/dow-doc-build-locally.md b/docs/dow-doc-build-locally.md new file mode 100644 index 0000000..0eae24e --- /dev/null +++ b/docs/dow-doc-build-locally.md @@ -0,0 +1,129 @@ +#documentation #build #cmake + +# Build Locally Guide + +This guide explains how to build Card Collection Manager 3 on Windows and Linux, how dependencies are resolved, and how to run tests locally. For architecture orientation, see [Intro For New Developers](intro-to-new-developers.md). + +**Quick Setup:** run CMake configure, build, launch `ccm3`, then run `ctest` from the same build directory. + +## Build Model + +The project uses CMake and builds one desktop executable: + +- executable target: `ccm` (output binary: `ccm3` / `ccm3.exe`) +- language standard: C++20 +- layered targets: `ccm_core` (logic), `ccm_ui_wx` (wx UI), `ccm` (composition root) + +## Dependency Model + +Dependencies are managed with CMake `FetchContent` in `cmake/Dependencies.cmake`. + +Pinned versions: + +- `nlohmann/json` `v3.11.3` +- `libcpr/cpr` `1.10.5` +- `wxWidgets` `v3.2.5` +- `doctest` `v2.4.11` (only when tests are enabled) + +On first configure, CMake downloads sources. On first full build, heavy dependencies (especially wxWidgets and curl) build locally. Later builds reuse cached dependencies under `build/_deps`. + +## Use System wxWidgets + +By default, the build fetches wxWidgets. For faster local iteration with an installed wxWidgets, set `-DCCM_USE_SYSTEM_WX=ON`. + +## Prerequisites + +### Windows + +Recommended: Clang + Ninja + +- LLVM/Clang 14+ on `PATH` +- CMake 3.22+ +- Ninja on `PATH` + +Verified fallback: MSYS2 UCRT64 + MinGW-w64 GCC + +- MSYS2 UCRT64 toolchain (`gcc`, `cmake`, `make` or `ninja`) +- CMake 3.22+ + +MSVC is intentionally not supported. + +### Linux + +- CMake 3.22+ +- Clang or GCC with C++20 support +- Ninja recommended +- required system packages when using system wxWidgets (for example GTK/wx dev packages) + +## Build Commands + +Run from repository root. + +### Windows (Clang + Ninja) + +```powershell +cmake -S . -B build -G Ninja +cmake --build build --parallel +.\build\bin\ccm3.exe +``` + +### Windows (MinGW Makefiles) + +```powershell +cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release +cmake --build build --parallel 4 +.\build\bin\ccm3.exe +``` + +### Linux (Ninja) + +```bash +cmake -S . -B build -G Ninja +cmake --build build --parallel +./build/bin/ccm3 +``` + +## Build Options + +- `CCM_USE_SYSTEM_WX` (default `OFF`): use installed wxWidgets instead of fetched wxWidgets. +- `CCM_BUILD_TESTS` (default `ON`): build `ccm_core_tests`. +- `CMAKE_BUILD_TYPE` (commonly `Release`): standard CMake build type. +- `CCM_APP_VERSION` (default `${PROJECT_VERSION} (localbuild)`): app version string shown in About dialog. + +Example for faster local iteration: +```bash +cmake -S . -B build -DCCM_USE_SYSTEM_WX=ON -DCCM_BUILD_TESTS=OFF +cmake --build build +``` + +## Run Tests Locally + +From repository root: +```bash +cmake -S . -B build -DCCM_BUILD_TESTS=ON +cmake --build build --target ccm_core_tests +ctest --test-dir build --output-on-failure +``` + +Automated tests primarily cover `core/` and infrastructure adapters. UI testing is currently manual. + +## Runtime Notes + +### Windows Runtime DLLs + +`cpr` builds as shared, so `build/bin` contains runtime DLLs (for example `libcpr.dll`, `libcurl.dll`, `libzlib.dll`) next to `ccm3.exe`. + +For MinGW/MSYS2 builds, UCRT runtime DLLs must be available (typically via MSYS2 UCRT64 `bin` on `PATH`). + +## Troubleshooting + +- **First build is slow:** expected on cold dependency fetch/build, especially wxWidgets and curl. +- **`Permission denied` while linking `ccm3.exe`:** the app is still running; close it and rebuild. +- **Generator mismatch:** reuse the same generator for a build directory or create a new build directory. +- **Windows CI/local shell mismatch:** in CI jobs using `shell: msys2 {0}`, ensure MSYS2 setup runs before shell commands. + +## Related Docs + +- [CI/CD Guide](ci-cd-guide.md) +- [Versioning Guide](versioning.md) +- [Adding a new game to Card Collection Manager](adding-a-new-game.md) diff --git a/docs/intro-to-new-developers.md b/docs/intro-to-new-developers.md new file mode 100644 index 0000000..41358f3 --- /dev/null +++ b/docs/intro-to-new-developers.md @@ -0,0 +1,108 @@ +#documentation #onboarding #architecture + +# Intro For New Developers + +This document orients new contributors to Card Collection Manager 3. For local setup and build commands, start with [Build Locally Guide](dow-doc-build-locally.md); then use this guide to understand architecture boundaries and daily workflows. + +**Quick Setup:** read `AGENTS.md` files first, build once, run tests once, then make one small layer-scoped change to validate your environment. + +## Toolchain Snapshot + +Card Collection Manager 3 builds as a native C++ desktop binary with CMake. The project standard is C++20, with Clang as the preferred compiler on Windows and Linux, plus a verified MinGW-w64 fallback path on Windows. + +- build system: CMake 3.22+ with `FetchContent` +- language/toolchain: C++20, Clang preferred, MinGW-w64 GCC fallback on Windows +- UI toolkit: wxWidgets (`ui_wx/` only) +- REST/HTTP client library: `cpr` (libcurl-based, used through `IHttpClient`/`CprHttpClient`) +- JSON library: `nlohmann/json` +- test framework: `doctest` + +Use [Build Locally Guide](dow-doc-build-locally.md) for exact commands, generator options, runtime DLL notes, and troubleshooting details. + +## Project Shape + +Card Collection Manager 3 is a native desktop app written in C++20 with wxWidgets. The architecture is intentionally layered so core logic stays UI-agnostic. + +- `core/`: domain logic, services, and infrastructure adapters +- `ui_wx/`: wxWidgets UI code only +- `app/`: composition root that wires adapters, services, and views + +Dependency direction is strict: `app -> ui_wx -> core`. + +## Architecture Rules + +These rules are the baseline for all feature work: + +- `core/` must never include or depend on wxWidgets. +- UI code consumes services through `ccm::ui::AppContext`. +- Concrete adapter wiring belongs in `app/main.cpp`. +- JSON keys and aliases are contract-sensitive and must stay stable. + +## Repository Map + +### `core/` + +`core/` contains domain and non-UI behavior: + +- `domain/`: value types and enums (`MagicCard`, `PokemonCard`, `Set`, `Configuration`) +- `ports/`: seam interfaces (`IHttpClient`, `IFileSystem`, repositories, game seams) +- `services/`: use-case logic (`CollectionService`, `SetService`, `ConfigService`) +- `infra/`: concrete adapters (`Json*Repository`, `StdFileSystem`, `CprHttpClient`, `LocalImageStore`) +- `games/`: per-game modules (`magic`, `pokemon`) + +### `ui_wx/` + +`ui_wx/` contains all presentation code: + +- `MainFrame`: top-level shell and menu/split-view orchestration +- `BaseCardListPanel`, `BaseCardEditDialog`, `BaseSelectedCardPanel`: reusable UI templates +- `Magic*` and `Pokemon*` classes: game-specific view/panel implementations +- `Theme.cpp`, `SvgIcons.cpp`, `IconListCtrl.cpp`: theming and visual behavior + +### `app/` + +`app/main.cpp` is the composition root: + +- instantiate adapters, services, and modules +- register game modules and game views +- build `AppContext` +- create and show `MainFrame` + +Keep this file focused on wiring, not business logic. + +### `tests/` + +Tests target non-UI behavior with deterministic fakes and in-memory adapters. When a domain JSON contract or filesystem naming rule changes, update the matching tests in the same change. + +## Common Workflows + +### Add A Small Feature + +1. Identify the correct layer (`core`, `ui_wx`, or both). +2. Make the smallest coherent change in that layer. +3. Rebuild the affected target. +4. Run tests when core behavior changes. + +### Add A New Game + +Use [Adding a new game to Card Collection Manager](adding-a-new-game.md). Do not bypass the existing seams or invent parallel architecture for a new game. + +### Release-Oriented Changes + +Use [CI/CD Guide](ci-cd-guide.md) and [Versioning Guide](versioning.md) for workflow and release policy decisions. + +## Avoid These Pitfalls + +- adding wx headers in `core/` +- putting business logic in `app/main.cpp` +- accessing concrete adapters directly from UI code instead of `AppContext` +- changing JSON key spellings casually +- using unpinned dependency versions + +## First-Day Checklist + +1. Read repository `AGENTS.md` files (`core/`, `ui_wx/`, `app/`, `tests/`). +2. Build locally with [Build Locally Guide](dow-doc-build-locally.md). +3. Run the test suite once. +4. Make one small layer-contained change. +5. Rebuild and rerun relevant tests. diff --git a/docs/testing-and-test-code-of-conduct.md b/docs/testing-and-test-code-of-conduct.md new file mode 100644 index 0000000..b3e185e --- /dev/null +++ b/docs/testing-and-test-code-of-conduct.md @@ -0,0 +1,116 @@ +#documentation #testing #quality + +# Testing Guide And Test Code Of Conduct + +This guide defines how testing works in Card Collection Manager 3 and which standards test code must meet. For local build setup and toolchain prerequisites, see [Build Locally Guide](dow-doc-build-locally.md). + +**Quick Setup:** run `ccm_core_tests` from a clean build, keep tests hermetic, and update contract tests in the same change when contracts move. + +## Testing Focus + +The project prioritizes deterministic, fast, behavior-oriented testing. Most automated coverage intentionally targets `core/` logic and infrastructure/service behavior, while UI validation remains manual. + +## Test Setup + +- framework: `doctest` +- primary target: `ccm_core_tests` +- location: `tests/` +- default behavior: tests enabled via `CCM_BUILD_TESTS=ON` + +## Run Tests + +From repository root: +```bash +cmake -S . -B build -DCCM_BUILD_TESTS=ON +cmake --build build --target ccm_core_tests +ctest --test-dir build --output-on-failure +``` + +Windows and Linux use the same logical flow; only generator and compiler setup differ. + +## Coverage Surface + +Current automated tests cover non-UI behavior, including: + +- filesystem naming and parsing behavior +- domain JSON round-trip behavior +- service behavior (`CollectionService`, `ConfigService`, `SetService`) +- repository behavior with in-memory filesystem fakes +- game set-source parsing behavior + +## Manual UI Validation + +Because there is no UI automation, UI-affecting changes require manual checks: + +- theme switching (dark and light) +- dialog and popup behavior +- add/edit/delete card flows +- set update flows +- preview and image interactions + +For theming work, rebuild and run the final app target (`ccm`) instead of validating only static library targets. + +## Test Code Of Conduct + +### Keep Tests Hermetic + +- do not call real network services +- do not depend on local machine files +- use fakes and in-memory adapters where possible + +### Test Behavior, Not Internals + +- assert externally visible outcomes +- avoid brittle assertions tied to incidental implementation details +- prefer domain-level expectations over call-level trivia + +### Keep Tests Deterministic + +- no unseeded randomness +- no timing-sensitive assertions that can flap +- no ordering assumptions unless ordering is part of the contract + +### Keep Tests Readable + +- one intent per test case +- descriptive test names +- clear arrange/act/assert flow +- minimal abstraction for small tests + +### Update Tests With Contract Changes + +When contracts change, update tests in the same change: + +- domain JSON schema or aliases -> round-trip tests +- filename formatting or parsing -> filesystem naming tests +- service semantics -> matching service tests + +Behavior changes without aligned tests are incomplete. + +### Avoid Over-Mocking + +- prefer realistic fakes over mock-heavy tests +- mock at external boundaries only when needed +- preserve confidence in integration-shaped behavior paths + +### Keep Runtime Practical + +- keep suite runtime fast enough for frequent local execution +- avoid repeated expensive setup when shared setup works +- justify any expensive new suite and keep scope narrow + +## Review Checklist + +Before merging test changes, verify: + +- tests pass locally +- no new flakiness risk +- no external dependency introduced +- assertions reflect intended behavior +- failure messages are clear and actionable + +## Related Docs + +- [Build Locally Guide](dow-doc-build-locally.md) +- [Intro For New Developers](intro-to-new-developers.md) +- [Adding a new game to Card Collection Manager](adding-a-new-game.md) diff --git a/docs/versioning.md b/docs/versioning.md new file mode 100644 index 0000000..7876aa9 --- /dev/null +++ b/docs/versioning.md @@ -0,0 +1,89 @@ +#documentation #versioning #releases + +# Versioning Guide + +This guide defines how Card Collection Manager 3 assigns versions in CI and release flows. For workflow wiring and release execution details, see [CI/CD Guide](ci-cd-guide.md). + +**Quick Setup:** choose a valid PR title prefix before opening a `master` PR because the prefix determines the release bump. + +## Versioning Model + +The project uses two versioning modes: + +- feature-build versioning for non-`master` branches +- semantic versioning for merged PRs into `master` + +## Feature-Build Versioning + +Non-`master` pushes use `-` (for example `feature-dark-theme-a1b2c3d` or `fix-sort-order-f91d2ab`). + +Rules: + +- branch names are sanitized and lowercased +- commit SHA is shortened to 7 characters +- computation runs in `scripts/compute_feature_version.sh` + +Usage: + +- artifact names +- app embedded version (`CCM_APP_VERSION`, visible in `Help -> About`) + +## Master Semantic Versioning + +Merged PRs into `master` use semantic versions in `MAJOR.MINOR.PATCH` format (for example `1.4.2`). + +CI computes the next version from the latest semver tag and the PR title prefix: + +- `major...` -> bump `MAJOR`, reset `MINOR` and `PATCH` to `0` +- `minor...` -> bump `MINOR`, reset `PATCH` to `0` +- `fix...` -> bump `PATCH` +- `patch...` -> bump `PATCH` +- `path...` -> bump `PATCH` (accepted alias in current setup) + +Computation runs in `scripts/compute_master_semver.sh`. + +## Validation Rules + +If the PR title prefix is not accepted, two controls fail by design: + +- PR title guard check for `master` PRs +- semantic-version script validation + +This enforcement keeps release bumps deterministic and reviewable. + +## Tag Format + +Master releases create git tags in this format: + +- `v` + +Examples: + +- `v1.0.0` +- `v2.3.7` + +## Embedded App Version + +The app embeds a build-time version string through CMake variable `CCM_APP_VERSION`. + +CI behavior: + +- feature workflows set it to `-` +- master release workflow sets it to semantic version + +Local/manual behavior: + +- default is `${PROJECT_VERSION} (localbuild)` unless overridden + +This default makes local binaries easy to distinguish from CI and release outputs. + +## PR Title Conventions + +Use explicit prefixes in this shape: + +- `major: ` +- `minor: ` +- `fix: ` +- `patch: ` + +Example: `minor: add custom themed confirmation dialogs`. diff --git a/docs/windows-installer.md b/docs/windows-installer.md new file mode 100644 index 0000000..d65d021 --- /dev/null +++ b/docs/windows-installer.md @@ -0,0 +1,128 @@ +#documentation #installer #nsis #windows + +# Windows Installer Guide + +This guide explains how the Windows installer for Card Collection Manager 3 is built, how it is configured, and how it cooperates with the rest of the build/release pipeline. For CI flow and artifact naming, see [CI/CD Guide](ci-cd-guide.md). For where the version string comes from, see [Versioning Guide](versioning.md). + +**Quick Setup:** install NSIS (`makensis` on `PATH`), build the app into `build/bin/`, then run `makensis -DAPP_VERSION="" scripts/installer.nsi` from the repository root. + +## Installer Model + +The installer is a single NSIS script: `scripts/installer.nsi`. It produces one self-contained executable that ships the entire `build/bin/` directory plus an embedded uninstaller. + +Key facts: + +- installer technology: NSIS (`makensis`) with the Modern UI 2 (MUI2) library +- output file: `ccm3-windows-installer.exe`, written to the repository root (resolved as `..\ccm3-windows-installer.exe` from `scripts/`) +- payload source: every file under `build/bin/` (resolved as `..\build\bin\*.*` from `scripts/`) +- icon: `scripts/installer_icon.ico` (resolved relative to `scripts/`) +- default install location: `%PROGRAMFILES64%\Card Collection Manager 3` +- elevation: `RequestExecutionLevel admin` + +Because the installer pulls from `build/bin/` directly, it must run **after** a successful release build that has been bundled with all required runtime DLLs (see [Build Locally Guide](dow-doc-build-locally.md) for what ends up in `build/bin/`). + +## Configuration Inputs + +Almost everything the installer needs is hard-coded in `scripts/installer.nsi`. The only configurable input is the version string, supplied at `makensis` time: + +- `APP_VERSION` — passed via `-DAPP_VERSION=""`. Falls back to `"localbuild"` if not provided, so manual local runs still work. + +This single value is reused in three visible places, so the installer, the uninstaller, and the OS Programs and Features entry all advertise the same version: + +- installer/uninstaller window title (NSIS `Name`): `Card Collection Manager 3 ` +- footer / branding text on every wizard page (NSIS `BrandingText`): `Card Collection Manager 3 ` +- Add/Remove Programs `DisplayVersion` registry value, so Windows shows the version in its own column + +The MUI welcome page and the uninstall confirm page reference `$(^Name)` internally, so embedding the version into `Name` is enough to make those pages say "Welcome to the Card Collection Manager 3 \ Setup Wizard" and "Card Collection Manager 3 \ will be uninstalled..." respectively, without any extra wiring. + +## Installed Sections + +The installer presents three sections on the Components page: + +- **Core files (required)** — read-only (`SectionIn RO`). Copies the full `build/bin/` payload into `$INSTDIR`, writes the uninstaller, and registers the Add/Remove Programs entry plus an `App Paths` entry so `ccm3` resolves from `Win+R`. +- **Start Menu shortcuts** — creates a shortcut at the top level of the Start Menu plus a `Card Collection Manager 3` folder containing both the app shortcut and an "Uninstall" shortcut. Uses `SetShellVarContext all` so shortcuts go to the all-users Start Menu. +- **Desktop shortcut** — creates a desktop shortcut for all users. + +Shortcut names intentionally do **not** include the version, so installing a newer version overwrites the existing shortcuts cleanly instead of leaving orphaned per-version entries behind. + +## Registry Layout + +The installer writes two registry roots, both under `HKLM` so an uninstall removes them cleanly regardless of which user launches it: + +- `Software\Microsoft\Windows\CurrentVersion\Uninstall\Card Collection Manager 3` (the Add/Remove Programs entry): + - `DisplayName` — product name + - `DisplayVersion` — value of `APP_VERSION` + - `DisplayIcon` — path to `ccm3.exe` + - `UninstallString` / `QuietUninstallString` — interactive and silent uninstall commands + - `InstallLocation` — `$INSTDIR` + - `NoModify` / `NoRepair` — both `1` (we do not implement modify/repair flows) +- `Software\Microsoft\Windows\CurrentVersion\App Paths\ccm3.exe`: + - default value — full path to `ccm3.exe` + - `Path` — `$INSTDIR` so child processes inherit DLL search rights + +The uninstall section (`Section "Uninstall"`) deletes both roots and removes the install directory and all created shortcuts. It uses `RMDir /r "$INSTDIR"` because the install dir is owned by the app. + +## Build Commands + +Run from the repository root. + +### Local manual build + +```powershell +cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release +cmake --build build --parallel +makensis -DAPP_VERSION="0.1.0-localbuild" scripts/installer.nsi +``` + +The output is `ccm3-windows-installer.exe` at the repository root. With no `-DAPP_VERSION`, the installer self-labels as `localbuild` instead. + +### CI build + +Both Windows workflows install NSIS via MSYS2 (`mingw-w64-ucrt-x86_64-nsis`) and invoke the same script: + +```yaml +- name: Build Windows installer + run: makensis -DAPP_VERSION="${VERSION}" scripts/installer.nsi +``` + +The `${VERSION}` value comes from: + +- `scripts/compute_master_semver.sh` for merged `master` PRs (semantic version, e.g. `1.2.3`) +- `scripts/compute_feature_version.sh` for non-`master` branches (e.g. `feature-dark-mode-a1b2c3d`) + +The exact same `${VERSION}` is also passed to `cmake -DCCM_APP_VERSION=...`, so the installer/uninstaller, the Programs and Features entry, and the running app's About dialog always agree. + +## Artifact Names + +The CI artifacts produced from a single installer build are documented in [CI/CD Guide](ci-cd-guide.md), but for reference: + +- raw build output: `ccm3-windows-installer.exe` (in repo root, regardless of version) +- feature workflow artifact: `ccm3-windows-installer-` (folder containing the exe) +- master release asset: `ccm3-windows-installer-.exe` (renamed at release-asset packaging time) + +Renaming happens in the workflow's release-assets step, not in `installer.nsi`, so the script's `OutFile` is intentionally fixed. + +## Editing Rules + +When changing the installer: + +- edit `scripts/installer.nsi` and keep both `.github/workflows/feature-windows.yml` and `.github/workflows/master-windows.yml` invoking it the same way +- pass the version through `-DAPP_VERSION="${VERSION}"` so the installer, uninstaller, and Programs and Features stay in sync with `CCM_APP_VERSION` +- keep installer assets that should not be generated at runtime (such as `installer_icon.ico`) committed in `scripts/` +- keep shortcut display names version-agnostic so upgrades do not orphan old shortcuts +- if you add a new registry value to the uninstall key, mirror it in the `Section "Uninstall"` cleanup if it lives outside that key + +## Troubleshooting + +- **`makensis: command not found`:** install NSIS and ensure `makensis` is on `PATH`. In CI this is provided by the MSYS2 package `mingw-w64-ucrt-x86_64-nsis`. +- **`File: ... \build\bin\*.*` failures:** the build payload is missing. Run `cmake --build build --parallel` first and confirm `build/bin/ccm3.exe` plus the runtime DLLs exist (see [Build Locally Guide](dow-doc-build-locally.md)). +- **Installer self-labels as `localbuild` in CI:** `-DAPP_VERSION="${VERSION}"` was not passed, or `${VERSION}` was empty. Check that the workflow's version-computation step ran before the installer step and exported `VERSION`. +- **Programs and Features does not show a version:** the `DisplayVersion` registry write was skipped because the installer was built without `APP_VERSION` (or with an empty value). Rebuild with the define set. +- **Old shortcuts left behind after upgrade:** shortcut display names were changed (or were made version-specific). Restore the version-agnostic names so upgrades overwrite cleanly. +- **Uninstaller appears to leave files:** `RMDir /r "$INSTDIR"` does not remove files outside `$INSTDIR`. Anything written by the app at runtime under user profile paths is intentionally kept; the uninstaller only manages what the installer placed. + +## Related Docs + +- [CI/CD Guide](ci-cd-guide.md) +- [Versioning Guide](versioning.md) +- [Build Locally Guide](dow-doc-build-locally.md) diff --git a/scripts/AGENTS.md b/scripts/AGENTS.md new file mode 100644 index 0000000..e1dac48 --- /dev/null +++ b/scripts/AGENTS.md @@ -0,0 +1,28 @@ +# AGENTS.md + +Utility scripts and CI helper assets live in this folder. + +## Scope + +- Keep CI-facing scripts and config here so workflows stay concise. +- Current contents: + - `installer.nsi` — NSIS installer definition used by the Windows CI job. + - `installer_icon.ico` — committed installer icon consumed by `installer.nsi`. + - `compute_feature_version.sh` — branch+sha version formatter for feature CI workflows. + - `compute_master_semver.sh` — semantic version bump logic for merged PRs to `master`. + +## Editing rules + +- Prefer referencing script files from workflows instead of embedding large inline scripts. +- Keep scripts deterministic and non-interactive so CI can run unattended. +- Keep versioning scripts strict and fail-fast (non-zero exit) when required title/version conventions are violated. +- When changing installer behavior, edit `installer.nsi` and ensure both `.github/workflows/feature-windows.yml` and `.github/workflows/master-windows.yml` still invoke it via `makensis -DAPP_VERSION="${VERSION}" scripts/installer.nsi`. +- Keep installer assets that should not be generated at runtime (such as icon files) committed in this folder. +- `installer.nsi` path semantics: + - `installer_icon.ico` is resolved relative to `scripts/`. + - build payload is loaded from `..\build\bin\*.*` (project root build output). + - installer output is written to `..\ccm3-windows-installer.exe` so CI upload paths can stay root-based. +- `installer.nsi` version semantics: + - `APP_VERSION` is supplied by CI (`makensis -DAPP_VERSION=...`) using the same `VERSION` value that is fed into `-DCCM_APP_VERSION` for the C++ build, so the installer, uninstaller, Add/Remove Programs entry, and the running app all advertise the same version. + - When `APP_VERSION` is not provided (manual local `makensis` runs), it defaults to `"localbuild"`. +- If a script depends on generated files, document those expectations in the script or workflow step that creates them. diff --git a/scripts/compute_feature_version.sh b/scripts/compute_feature_version.sh new file mode 100644 index 0000000..34eedad --- /dev/null +++ b/scripts/compute_feature_version.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $# -lt 2 ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +branch_name="$1" +commit_sha="$2" + +branch_safe="$(echo "${branch_name}" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9._-]+/-/g; s/^-+|-+$//g')" +short_sha="$(echo "${commit_sha}" | cut -c1-7)" + +if [[ -z "${branch_safe}" ]]; then + branch_safe="branch" +fi + +echo "${branch_safe}-${short_sha}" diff --git a/scripts/compute_master_semver.sh b/scripts/compute_master_semver.sh new file mode 100644 index 0000000..5fd0424 --- /dev/null +++ b/scripts/compute_master_semver.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ $# -lt 1 ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +pr_title="$(echo "$1" | tr '[:upper:]' '[:lower:]')" + +if [[ "${pr_title}" == major* ]]; then + bump="major" +elif [[ "${pr_title}" == minor* ]]; then + bump="minor" +elif [[ "${pr_title}" == fix* || "${pr_title}" == patch* || "${pr_title}" == path* ]]; then + bump="patch" +else + echo "Invalid PR title prefix. Must start with: major, minor, fix, patch, or path." >&2 + exit 1 +fi + +latest="$(git tag --list | sed -E 's/^v//' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -t. -k1,1nr -k2,2nr -k3,3nr | head -n1 || true)" +if [[ -z "${latest}" ]]; then + latest="0.0.0" +fi + +IFS='.' read -r major minor patch <<< "${latest}" + +case "${bump}" in + major) + major=$((major + 1)) + minor=0 + patch=0 + ;; + minor) + minor=$((minor + 1)) + patch=0 + ;; + patch) + patch=$((patch + 1)) + ;; +esac + +version="${major}.${minor}.${patch}" +release_tag="v${version}" + +if [[ -n "${GITHUB_OUTPUT:-}" ]]; then + { + echo "version=${version}" + echo "release_tag=${release_tag}" + } >> "${GITHUB_OUTPUT}" +else + echo "${version}" +fi diff --git a/scripts/installer.nsi b/scripts/installer.nsi new file mode 100644 index 0000000..8c3125e --- /dev/null +++ b/scripts/installer.nsi @@ -0,0 +1,76 @@ +Unicode True +!include "MUI2.nsh" + +!define APP_NAME "Card Collection Manager 3" +!define APP_DIR "Card Collection Manager 3" +!define APP_EXE "ccm3.exe" +!define APP_ICON "installer_icon.ico" +!define REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Card Collection Manager 3" +!define APP_PATHS_KEY "Software\Microsoft\Windows\CurrentVersion\App Paths\ccm3.exe" + +; APP_VERSION is supplied by CI via `makensis -DAPP_VERSION=...`. Falls back to +; "localbuild" so manual runs from a developer machine still work. +!ifndef APP_VERSION + !define APP_VERSION "localbuild" +!endif + +Name "${APP_NAME} ${APP_VERSION}" +OutFile "..\ccm3-windows-installer.exe" +Icon "${APP_ICON}" +UninstallIcon "${APP_ICON}" +BrandingText "${APP_NAME} ${APP_VERSION}" +InstallDir "$PROGRAMFILES64\${APP_DIR}" +RequestExecutionLevel admin + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_LANGUAGE "English" + +Section "!Core files (required)" + SectionIn RO + SetOutPath "$INSTDIR" + File /r "..\build\bin\*.*" + WriteUninstaller "$INSTDIR\Uninstall.exe" + WriteRegStr HKLM "${REG_KEY}" "DisplayName" "${APP_NAME}" + WriteRegStr HKLM "${REG_KEY}" "DisplayVersion" "${APP_VERSION}" + WriteRegStr HKLM "${REG_KEY}" "DisplayIcon" "$INSTDIR\${APP_EXE}" + WriteRegStr HKLM "${REG_KEY}" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" + WriteRegStr HKLM "${REG_KEY}" "QuietUninstallString" "$\"$INSTDIR\Uninstall.exe$\" /S" + WriteRegStr HKLM "${REG_KEY}" "InstallLocation" "$INSTDIR" + WriteRegDWORD HKLM "${REG_KEY}" "NoModify" 1 + WriteRegDWORD HKLM "${REG_KEY}" "NoRepair" 1 + WriteRegStr HKLM "${APP_PATHS_KEY}" "" "$INSTDIR\${APP_EXE}" + WriteRegStr HKLM "${APP_PATHS_KEY}" "Path" "$INSTDIR" +SectionEnd + +Section "Start Menu shortcuts" + SetShellVarContext all + CreateDirectory "$SMPROGRAMS\${APP_DIR}" + CreateShortcut "$SMPROGRAMS\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0 + CreateShortcut "$SMPROGRAMS\${APP_DIR}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0 + CreateShortcut "$SMPROGRAMS\${APP_DIR}\Uninstall ${APP_NAME}.lnk" "$INSTDIR\Uninstall.exe" +SectionEnd + +Section "Desktop shortcut" + SetShellVarContext all + CreateShortcut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0 +SectionEnd + +Section "Uninstall" + SetShellVarContext all + Delete "$DESKTOP\${APP_NAME}.lnk" + Delete "$SMPROGRAMS\${APP_NAME}.lnk" + Delete "$SMPROGRAMS\${APP_DIR}\${APP_NAME}.lnk" + Delete "$SMPROGRAMS\${APP_DIR}\Uninstall ${APP_NAME}.lnk" + RMDir "$SMPROGRAMS\${APP_DIR}" + + RMDir /r "$INSTDIR" + DeleteRegKey HKLM "${REG_KEY}" + DeleteRegKey HKLM "${APP_PATHS_KEY}" +SectionEnd diff --git a/scripts/installer_icon.ico b/scripts/installer_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..27384e418f84e897139e18ade55cb00949ed1ff9 GIT binary patch literal 67646 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 KdxdnLB>x|XuW&E` literal 0 HcmV?d00001 diff --git a/tests/AGENTS.md b/tests/AGENTS.md new file mode 100644 index 0000000..53899c0 --- /dev/null +++ b/tests/AGENTS.md @@ -0,0 +1,58 @@ +# tests/AGENTS.md + +`ccm_core_tests` — doctest unit tests for `ccm_core`. Hermetic, fast, no real network or disk. Read the root `AGENTS.md` first. + +## File pointers + +- `main.cpp` — doctest entry point with `DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN`. Do not put tests here. +- `fakes/InMemoryFileSystem.{hpp,cpp}` — `IFileSystem` implementation backed by `std::map`. Normalizes paths via `lexically_normal().generic_string()` (always `/` separators). +- `fs_names_tests.cpp` — `formatTextForFs` + `parseIndexFromFilename`. Both are compatibility ports of the original Rust path rules. +- `domain_json_tests.cpp` — JSON round-trip tests for every domain type. **Update this file whenever a domain type changes.** +- `image_service_tests.cpp` — `ImageService` (uses inline `RecordingImageStore` fake). +- `collection_service_tests.cpp` — `CollectionService` (uses inline `InMemoryRepo` + `StubImageStore`). +- `config_service_tests.cpp` — `ConfigService` against `InMemoryFileSystem`. +- `json_collection_repository_tests.cpp`, `json_set_repository_tests.cpp` — repository round-trips against `InMemoryFileSystem`. +- `set_service_tests.cpp` — `SetService` with `FakeSetSource` + `InMemSetRepo`. +- `magic_set_source_tests.cpp` — `MagicSetSource::parseResponse` (Scryfall mapping). Drives `fetchAll` via `FixedHttpClient` fake. +- `magic_card_preview_source_tests.cpp` — `MagicCardPreviewSource::buildSearchUrl` URL-encoding rules + `parseResponse` (`data[0].image_uris.normal`). Drives `fetchImageUrl` via `FixedHttpClient`. +- `card_preview_service_tests.cpp` — `CardPreviewService` registry/orchestration through `registerModule(IGameModule&)` with an inline `FakeGameModule` returning a `FakeSource : ICardPreviewSource` and a `FixedHttpClient`. Pin-down for the "module returning nullptr is silently skipped" rule. +- `pokemon_set_source_tests.cpp` — `PokemonSetSource::parseResponse` (api.pokemontcg.io/v2/sets shape — `data[].id`, `name`, `releaseDate` already in `YYYY/MM/DD`) + sort-by-release-date stability. Drives `fetchAll` via `FixedHttpClient` and asserts the public endpoint URL. +- `pokemon_card_preview_source_tests.cpp` — `PokemonCardPreviewSource::buildSearchUrl` (percent-encoded `name:` / `set.id:` / `number:` triple, with collector-number `4/102` -> `4` normalization) + `parseResponse` (`data[0].images.large` with `images.small` fallback). Drives `fetchImageUrl` via `FixedHttpClient`. +- `card_sorter_tests.cpp` — `sortMagicCards` / `sortPokemonCards` per-column behavior. Pin-down tests for `byField`-equivalent semantics: case-insensitive strings, chronological set sort via `set.releaseDate`, numeric `amount`, `false < true` boolean order, stable composition (sort by name then by set keeps inner-name order). Update this file whenever you add a new column / sort key. +- `card_filter_tests.cpp` — `matchesMagicFilter` / `matchesPokemonFilter` row-matcher behavior. Pin-down tests for `applyFilter`-equivalent semantics: case-insensitive substring match across `tableFields` valueKeys (name, set.name, language, condition, amount-as-string, note; Pokemon adds `setNo`), boolean flag columns (foil/signed/altered/holo/firstEdition) intentionally excluded, empty filter matches everything. Update this file whenever you add a new searchable column. +- `CMakeLists.txt` — explicit list of every `.cpp` (no glob). + +## Conventions + +1. **Framework**: doctest. Each test file `#include ` and uses `TEST_SUITE("...")` + `TEST_CASE("...")`. Asserts: `CHECK`, `REQUIRE`, `CHECK_THROWS`. +2. **No real I/O.** Everything goes through `ccm::testing::InMemoryFileSystem` or an inline test-local fake. If you need HTTP, write a fake `IHttpClient` like `FixedHttpClient` in `magic_set_source_tests.cpp`. +3. **Fakes for narrow concerns stay in the test file** as anonymous-namespace classes (e.g. `RecordingImageStore`, `InMemoryRepo`). Promote a fake to `tests/fakes/` only when more than one test file needs it. +4. **Path strings** in expectations must use forward slashes. The fake normalizes everything to `generic_string()`. Do not hard-code `\` separators. +5. **Test names** describe behavior, not implementation. Prefer "missing file is created with defaults" over "test_init_no_file". +6. **Add a `.cpp` to the `add_executable` call in `tests/CMakeLists.txt`.** No glob. + +## Required follow-ups + +- After modifying any domain type field or alias you **must** extend the matching test in `domain_json_tests.cpp`. +- After modifying `formatTextForFs` or `parseIndexFromFilename` you **must** extend `fs_names_tests.cpp` — these are byte-compatibility shims with the original Rust code. +- After adding a new service in `core/` you **must** add a corresponding `_service_tests.cpp` with at least the happy-path and one error-path test. +- After adding a new game's set source / card preview source you **must** add `tests/_set_source_tests.cpp` and (if applicable) `tests/_card_preview_source_tests.cpp` mirroring the Magic and Pokemon files. Add them to `tests/CMakeLists.txt`. + +## Commands + +- Configure with tests on: + `cmake -S . -B build -DCCM_BUILD_TESTS=ON` +- Build the suite: + `cmake --build build --target ccm_core_tests` +- Run all tests: + `ctest --test-dir build --output-on-failure` +- Run a single test by name pattern: + `./build/bin/ccm_core_tests --test-case="*nextImageIndex*"` +- Run a single suite: + `./build/bin/ccm_core_tests --test-suite="MagicSetSource::parseResponse"` + +## Anti-patterns + +- Don't depend on `ccm_ui_wx` from tests. UI is out of scope here. +- Don't rely on file paths existing on the host (no `/tmp`, no `C:\Users\...`). Use `InMemoryFileSystem`. +- Don't add tests that require network access. The Pokemon stub test checks the message, not a real API call. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..a9286c0 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,37 @@ +# Unit tests for ccm_core. Wx and infra-bound tests are out of scope here - +# everything in this target operates against the ccm_core ports/services using +# in-memory fakes, so the suite is fast and hermetic. + +add_executable(ccm_core_tests + fakes/InMemoryFileSystem.cpp + + fs_names_tests.cpp + domain_json_tests.cpp + image_service_tests.cpp + collection_service_tests.cpp + config_service_tests.cpp + json_collection_repository_tests.cpp + json_set_repository_tests.cpp + set_service_tests.cpp + magic_set_source_tests.cpp + magic_card_preview_source_tests.cpp + card_preview_service_tests.cpp + pokemon_set_source_tests.cpp + pokemon_card_preview_source_tests.cpp + card_sorter_tests.cpp + card_filter_tests.cpp + + main.cpp +) + +target_include_directories(ccm_core_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +target_link_libraries(ccm_core_tests + PRIVATE + ccm_core + doctest::doctest + ccm_warnings +) + +include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake) +doctest_discover_tests(ccm_core_tests) diff --git a/tests/card_filter_tests.cpp b/tests/card_filter_tests.cpp new file mode 100644 index 0000000..c7a5479 --- /dev/null +++ b/tests/card_filter_tests.cpp @@ -0,0 +1,160 @@ +// CardFilter tests - exercises the per-row matcher ported from the table +// TableTemplate.tsx::applyFilter. Each TEST_CASE pins down a behavior the +// original UI relied on, so a regression here implies the C++ table no +// longer filters like the TypeScript reference. + +#include + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/services/CardFilter.hpp" + +#include + +using namespace ccm; + +namespace { + +MagicCard mc(std::string name, + std::string setName, + std::uint8_t amount = 1, + Language lang = Language::English, + Condition cond = Condition::NearMint, + std::string note = "", + bool foil = false, bool sgnd = false, bool altered = false) { + MagicCard c; + c.id = 1; + c.name = std::move(name); + c.set.name = std::move(setName); + c.amount = amount; + c.language = lang; + c.condition = cond; + c.note = std::move(note); + c.foil = foil; + c.signed_ = sgnd; + c.altered = altered; + return c; +} + +PokemonCard pc(std::string name, + std::string setName, + std::string setNo = "", + std::uint8_t amount = 1, + std::string note = "") { + PokemonCard c; + c.id = 1; + c.name = std::move(name); + c.set.name = std::move(setName); + c.setNo = std::move(setNo); + c.amount = amount; + c.note = std::move(note); + return c; +} + +} // namespace + +TEST_SUITE("CardFilter::matchesMagicFilter") { + TEST_CASE("empty filter matches every row (mirrors JS \"\".includes(\"\"))") { + CHECK(matchesMagicFilter(mc("Brainstorm", "Alpha"), "")); + } + + TEST_CASE("matches by name (case-insensitive substring)") { + const MagicCard c = mc("Lightning Bolt", "Beta"); + CHECK(matchesMagicFilter(c, "lightning")); + CHECK(matchesMagicFilter(c, "BOLT")); // both sides lowercased + CHECK(matchesMagicFilter(c, "ning Bo")); // mid-string substring + CHECK_FALSE(matchesMagicFilter(c, "fireball")); + } + + TEST_CASE("matches by set.name (valueKey 'set.name', not 'set')") { + const MagicCard c = mc("Brainstorm", "Modern Horizons"); + CHECK(matchesMagicFilter(c, "Modern")); + CHECK(matchesMagicFilter(c, "horizons")); + CHECK_FALSE(matchesMagicFilter(c, "Zendikar")); + } + + TEST_CASE("matches by language label") { + const MagicCard c = mc("Brainstorm", "Alpha", 1, Language::Japanese); + CHECK(matchesMagicFilter(c, "japanese")); + CHECK_FALSE(matchesMagicFilter(c, "german")); + } + + TEST_CASE("matches by condition label") { + const MagicCard c = mc("Brainstorm", "Alpha", 1, + Language::English, Condition::Played); + CHECK(matchesMagicFilter(c, "played")); + CHECK_FALSE(matchesMagicFilter(c, "mint")); + } + + TEST_CASE("matches by amount as decimal string (val.toString())") { + // JS used `val.toString().toLowerCase().includes(filter)` so the + // *integer* amount becomes searchable as its decimal representation. + const MagicCard c = mc("Brainstorm", "Alpha", 17); + CHECK(matchesMagicFilter(c, "17")); + CHECK(matchesMagicFilter(c, "1")); // substring match: "1" in "17" + CHECK_FALSE(matchesMagicFilter(c, "99")); + } + + TEST_CASE("matches by note (case-insensitive)") { + const MagicCard c = mc("Brainstorm", "Alpha", 1, + Language::English, Condition::NearMint, + "Birthday gift"); + CHECK(matchesMagicFilter(c, "Birthday")); + CHECK(matchesMagicFilter(c, "GIFT")); + CHECK_FALSE(matchesMagicFilter(c, "trade")); + } + + TEST_CASE("boolean flag columns (foil / signed / altered) are NOT matched") { + // Filtering checks only string- or number-typed cells (typeof check). The + // bool flag columns therefore must not match the literal "true" / + // "false" — even when the flag is set. + const MagicCard c = mc("Brainstorm", "Alpha", 1, + Language::English, Condition::NearMint, "", + /*foil=*/true, /*sgnd=*/true, /*altered=*/true); + CHECK_FALSE(matchesMagicFilter(c, "true")); + CHECK_FALSE(matchesMagicFilter(c, "false")); + // ...unless the literal happens to be a substring of an actual + // string-typed column. Sanity-check that the matcher still fires on + // the name field with the same haystack. + CHECK(matchesMagicFilter(c, "brain")); + } + + TEST_CASE("filter is lowercased so uppercase input matches lowercased data") { + // The original path only lowercased the cell value, so "Brainstorm" filter against + // a card named "brainstorm" never matched. We lowercase both sides; + // pin that down here so a regression to the literal JS behavior gets + // caught. + const MagicCard c = mc("brainstorm", "alpha"); + CHECK(matchesMagicFilter(c, "BRAIN")); + CHECK(matchesMagicFilter(c, "Alpha")); + } +} + +TEST_SUITE("CardFilter::matchesPokemonFilter") { + TEST_CASE("matches by name and set.name") { + const PokemonCard c = pc("Charizard", "Base Set"); + CHECK(matchesPokemonFilter(c, "char")); + CHECK(matchesPokemonFilter(c, "BASE")); + CHECK_FALSE(matchesPokemonFilter(c, "pikachu")); + } + + TEST_CASE("Pokemon adds setNo to the searchable columns") { + // PokemonTable.tsx tableFields includes a "Set No" column whose + // valueKey is `setNo`. Pin that down — `setNo` is Pokemon-specific so + // the Magic matcher does not see it. + const PokemonCard c = pc("Charizard", "Base Set", "4/102"); + CHECK(matchesPokemonFilter(c, "4/102")); + CHECK(matchesPokemonFilter(c, "/102")); + } + + TEST_CASE("amount is searchable as decimal string for Pokemon too") { + const PokemonCard c = pc("Charizard", "Base Set", "4/102", 23); + CHECK(matchesPokemonFilter(c, "23")); + CHECK_FALSE(matchesPokemonFilter(c, "99")); + } + + TEST_CASE("empty filter matches everything") { + CHECK(matchesPokemonFilter(pc("Charizard", "Base Set"), "")); + } +} diff --git a/tests/card_preview_service_tests.cpp b/tests/card_preview_service_tests.cpp new file mode 100644 index 0000000..1295619 --- /dev/null +++ b/tests/card_preview_service_tests.cpp @@ -0,0 +1,152 @@ +#include + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/ICardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" +#include "ccm/services/CardPreviewService.hpp" + +#include + +using namespace ccm; + +namespace { + +class FakeSource final : public ICardPreviewSource { +public: + std::string url = "https://example.com/preview.jpg"; + bool ok = true; + std::string err = "boom"; + + // Capture inputs so tests can assert routing. + std::string lastName; + std::string lastSetId; + std::string lastSetNo; + + Result fetchImageUrl(std::string_view name, + std::string_view setId, + std::string_view setNo) override { + lastName = std::string(name); + lastSetId = std::string(setId); + lastSetNo = std::string(setNo); + return ok ? Result::ok(url) + : Result::err(err); + } +}; + +class FixedHttpClient final : public IHttpClient { +public: + std::string lastUrl; + std::string body; + bool ok = true; + std::string err = "offline"; + + Result get(std::string_view url) override { + lastUrl = std::string(url); + return ok ? Result::ok(body) + : Result::err(err); + } +}; + +// Minimal IGameModule fake that exposes a configurable preview source. +class FakeGameModule final : public IGameModule { +public: + Game gameId = Game::Magic; + ICardPreviewSource* preview = nullptr; + + [[nodiscard]] Game id() const noexcept override { return gameId; } + [[nodiscard]] std::string dirName() const override { return "fake"; } + [[nodiscard]] std::string displayName() const override { return "Fake"; } + + ISetSource& setSource() override { + // Tests in this file never call setSource(); a never-returned helper + // would clutter the fake. Throwing keeps misuse loud. + throw std::logic_error("FakeGameModule::setSource() not used in this test"); + } + ICardPreviewSource* cardPreviewSource() noexcept override { return preview; } +}; + +} // namespace + +TEST_SUITE("CardPreviewService::fetchPreviewBytes") { + TEST_CASE("happy path: routes through registered module then http GET") { + FakeSource source; + source.url = "https://example.com/img.png"; + FakeGameModule module; + module.gameId = Game::Magic; + module.preview = &source; + + FixedHttpClient http; + http.body = std::string("\x89PNG\r\n\x1a\n", 8); // arbitrary binary + + CardPreviewService svc{http}; + svc.registerModule(module); + + const auto out = svc.fetchPreviewBytes(Game::Magic, "Lightning Bolt", "lea", ""); + REQUIRE(out.isOk()); + CHECK(out.value() == http.body); + CHECK(http.lastUrl == "https://example.com/img.png"); + CHECK(source.lastName == "Lightning Bolt"); + CHECK(source.lastSetId == "lea"); + CHECK(source.lastSetNo.empty()); + } + + TEST_CASE("module returning nullptr preview source is skipped silently") { + FakeGameModule module; + module.gameId = Game::Pokemon; + module.preview = nullptr; + + FixedHttpClient http; + CardPreviewService svc{http}; + svc.registerModule(module); // no-op + + const auto out = svc.fetchPreviewBytes(Game::Pokemon, "Pikachu", "sv3", "1"); + CHECK(out.isErr()); + CHECK(out.error().find("No preview source registered") != std::string::npos); + } + + TEST_CASE("unregistered game returns an explicit error") { + FixedHttpClient http; + CardPreviewService svc{http}; + const auto out = svc.fetchPreviewBytes(Game::Pokemon, "Pikachu", "sv3", "1"); + CHECK(out.isErr()); + CHECK(out.error().find("No preview source registered") != std::string::npos); + } + + TEST_CASE("source error propagates and http is not called") { + FakeSource source; + source.ok = false; + source.err = "scryfall 404"; + FakeGameModule module; + module.gameId = Game::Magic; + module.preview = &source; + + FixedHttpClient http; + http.lastUrl = ""; + + CardPreviewService svc{http}; + svc.registerModule(module); + + const auto out = svc.fetchPreviewBytes(Game::Magic, "X", "abc", ""); + CHECK(out.isErr()); + CHECK(out.error() == "scryfall 404"); + CHECK(http.lastUrl == ""); + } + + TEST_CASE("http GET error propagates") { + FakeSource source; + FakeGameModule module; + module.gameId = Game::Magic; + module.preview = &source; + + FixedHttpClient http; + http.ok = false; + http.err = "net down"; + + CardPreviewService svc{http}; + svc.registerModule(module); + + const auto out = svc.fetchPreviewBytes(Game::Magic, "X", "abc", ""); + CHECK(out.isErr()); + CHECK(out.error() == "net down"); + } +} diff --git a/tests/card_sorter_tests.cpp b/tests/card_sorter_tests.cpp new file mode 100644 index 0000000..84c253a --- /dev/null +++ b/tests/card_sorter_tests.cpp @@ -0,0 +1,248 @@ +// CardSorter tests - exercises the per-column comparators ported from the +// TableTemplate.tsx::byField. Each TEST_CASE pins down a specific behavior +// the original UI relied on, so a regression here implies the C++ table no +// longer behaves like the TypeScript reference. + +#include + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/services/CardSorter.hpp" + +#include +#include +#include + +using namespace ccm; + +namespace { + +MagicCard mc(std::uint32_t id, std::string name, + std::string setName, std::string releaseDate, + std::uint8_t amount = 1, + bool foil = false, bool sgnd = false, bool altered = false, + Language lang = Language::English, + Condition cond = Condition::NearMint, + std::string note = "") { + MagicCard c; + c.id = id; + c.name = std::move(name); + c.set.name = std::move(setName); + c.set.releaseDate = std::move(releaseDate); + c.amount = amount; + c.foil = foil; + c.signed_ = sgnd; + c.altered = altered; + c.language = lang; + c.condition = cond; + c.note = std::move(note); + return c; +} + +PokemonCard pc(std::uint32_t id, std::string name, + std::string setName, std::string releaseDate, + std::uint8_t amount = 1, + bool holo = false, bool firstEdition = false, + bool sgnd = false, bool altered = false) { + PokemonCard c; + c.id = id; + c.name = std::move(name); + c.set.name = std::move(setName); + c.set.releaseDate = std::move(releaseDate); + c.amount = amount; + c.holo = holo; + c.firstEdition = firstEdition; + c.signed_ = sgnd; + c.altered = altered; + return c; +} + +std::vector ids(const std::vector& v) { + std::vector out; + out.reserve(v.size()); + for (const auto& c : v) out.push_back(c.id); + return out; +} + +std::vector ids(const std::vector& v) { + std::vector out; + out.reserve(v.size()); + for (const auto& c : v) out.push_back(c.id); + return out; +} + +} // namespace + +TEST_SUITE("CardSorter - Magic columns") { + TEST_CASE("Name sorts case-insensitively (matches String.toLowerCase())") { + // Three cards whose names only differ in casing - if sort were a + // plain `<` this would put "ABC" before "abc" and wedge "Brainstorm" + // somewhere wrong. The JS path normalizes to lowercase first. + std::vector v = { + mc(1, "brainstorm", "X", "2000/01/01"), + mc(2, "ABC", "X", "2000/01/01"), + mc(3, "abc", "X", "2000/01/01"), + }; + sortMagicCards(v, MagicSortColumn::Name, /*ascending=*/true); + // ABC and abc tie under case-insensitive compare; stable sort keeps + // the input order (id 2 before id 3). + CHECK(ids(v) == std::vector{2, 3, 1}); + + sortMagicCards(v, MagicSortColumn::Name, /*ascending=*/false); + CHECK(ids(v) == std::vector{1, 2, 3}); + } + + TEST_CASE("Set column sorts by release date (chronological), not by name") { + // The whole point of having distinct valueKey/sortKey: the + // table *displays* set.name, but ascending order is chronological. + std::vector v = { + mc(1, "x", "Zendikar", "2009/10/02"), + mc(2, "y", "Alpha", "1993/08/05"), + mc(3, "z", "Modern Horizons","2019/06/14"), + }; + sortMagicCards(v, MagicSortColumn::SetReleaseDate, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 1, 3}); // 1993 < 2009 < 2019 + + sortMagicCards(v, MagicSortColumn::SetReleaseDate, /*ascending=*/false); + CHECK(ids(v) == std::vector{3, 1, 2}); + } + + TEST_CASE("Amount sorts numerically (no string-compare 10 < 2 trap)") { + std::vector v = { + mc(1, "a", "X", "2000/01/01", /*amount=*/10), + mc(2, "b", "X", "2000/01/01", /*amount=*/2), + mc(3, "c", "X", "2000/01/01", /*amount=*/4), + }; + sortMagicCards(v, MagicSortColumn::Amount, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 3, 1}); // 2 < 4 < 10 + } + + TEST_CASE("boolean flag column orders false < true (asc puts unset first)") { + std::vector v = { + mc(1, "a", "X", "2000/01/01", 1, /*foil=*/true), + mc(2, "b", "X", "2000/01/01", 1, /*foil=*/false), + mc(3, "c", "X", "2000/01/01", 1, /*foil=*/true), + mc(4, "d", "X", "2000/01/01", 1, /*foil=*/false), + }; + sortMagicCards(v, MagicSortColumn::Foil, /*ascending=*/true); + // Stable: relative order within each bucket preserved. + CHECK(ids(v) == std::vector{2, 4, 1, 3}); + + sortMagicCards(v, MagicSortColumn::Foil, /*ascending=*/false); + CHECK(ids(v) == std::vector{1, 3, 2, 4}); + } + + TEST_CASE("Signed and Altered booleans sort independently") { + std::vector v = { + mc(1, "a", "X", "2000/01/01", 1, false, /*sgnd=*/false, /*alt=*/true), + mc(2, "b", "X", "2000/01/01", 1, false, /*sgnd=*/true, /*alt=*/false), + }; + sortMagicCards(v, MagicSortColumn::Signed, /*ascending=*/true); + CHECK(ids(v) == std::vector{1, 2}); + + sortMagicCards(v, MagicSortColumn::Altered, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 1}); + } + + TEST_CASE("Language and Condition sort by their string label, lowercased") { + std::vector v = { + mc(1, "a", "X", "2000/01/01", 1, false, false, false, + Language::Japanese, Condition::Mint), + mc(2, "b", "X", "2000/01/01", 1, false, false, false, + Language::English, Condition::Played), + mc(3, "c", "X", "2000/01/01", 1, false, false, false, + Language::German, Condition::NearMint), + }; + sortMagicCards(v, MagicSortColumn::Language, /*ascending=*/true); + // english < german < japanese (lowercased compare) + CHECK(ids(v) == std::vector{2, 3, 1}); + + sortMagicCards(v, MagicSortColumn::Condition, /*ascending=*/true); + // mint < nearmint < played (lowercased compare) + CHECK(ids(v) == std::vector{1, 3, 2}); + } + + TEST_CASE("Note sorts case-insensitively") { + std::vector v = { + mc(1, "a", "X", "2000/01/01", 1, false, false, false, + Language::English, Condition::NearMint, "Zeta"), + mc(2, "b", "X", "2000/01/01", 1, false, false, false, + Language::English, Condition::NearMint, "alpha"), + mc(3, "c", "X", "2000/01/01", 1, false, false, false, + Language::English, Condition::NearMint, "Beta"), + }; + sortMagicCards(v, MagicSortColumn::Note, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 3, 1}); // alpha, beta, zeta + } + + TEST_CASE("stable: sort by name then by set keeps name order within each set") { + // Mirrors the UX expectation: a user clicks Name, then Set, and + // sees rows grouped by set with names alphabetical inside each group. + std::vector v = { + mc(1, "Counterspell", "Beta", "1993/10/04"), + mc(2, "Brainstorm", "Alpha", "1993/08/05"), + mc(3, "Lightning Bolt","Beta", "1993/10/04"), + mc(4, "Ancestral Recall","Alpha","1993/08/05"), + }; + sortMagicCards(v, MagicSortColumn::Name, /*asc=*/true); + sortMagicCards(v, MagicSortColumn::SetReleaseDate, /*asc=*/true); + // Alpha (1993/08/05) first: ancestral, brainstorm + // Beta (1993/10/04) next: counterspell, lightning bolt + CHECK(ids(v) == std::vector{4, 2, 1, 3}); + } +} + +TEST_SUITE("CardSorter - Pokemon-specific columns") { + TEST_CASE("Holo and FirstEdition each sort their own bool field") { + std::vector v = { + pc(1, "a", "X", "2000/01/01", 1, /*holo=*/true, /*1st=*/false), + pc(2, "b", "X", "2000/01/01", 1, /*holo=*/false, /*1st=*/true), + pc(3, "c", "X", "2000/01/01", 1, /*holo=*/false, /*1st=*/false), + }; + sortPokemonCards(v, PokemonSortColumn::Holo, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 3, 1}); + + sortPokemonCards(v, PokemonSortColumn::FirstEdition, /*ascending=*/true); + // After previous sort: 2,3,1 (false=2, false=1 actually... let me think + // -- with v in order {2,3,1} their firstEdition = {true,false,false}. + // Stable asc on firstEdition keeps 3 before 1 in the false bucket.) + CHECK(ids(v) == std::vector{3, 1, 2}); + } + + TEST_CASE("Set column sorts by release date for Pokemon too") { + std::vector v = { + pc(1, "x", "Sun & Moon", "2017/02/03"), + pc(2, "y", "Base Set", "1999/01/09"), + pc(3, "z", "Sword & Shield","2020/02/07"), + }; + sortPokemonCards(v, PokemonSortColumn::SetReleaseDate, /*ascending=*/true); + CHECK(ids(v) == std::vector{2, 1, 3}); + } + + TEST_CASE("Amount sorts numerically") { + std::vector v = { + pc(1, "a", "X", "2000/01/01", 9), + pc(2, "b", "X", "2000/01/01", 11), + pc(3, "c", "X", "2000/01/01", 1), + }; + sortPokemonCards(v, PokemonSortColumn::Amount, /*ascending=*/true); + CHECK(ids(v) == std::vector{3, 1, 2}); + } +} + +TEST_SUITE("CardSorter - empty / single-element inputs are no-ops") { + TEST_CASE("empty vector stays empty") { + std::vector v; + sortMagicCards(v, MagicSortColumn::Name, true); + CHECK(v.empty()); + } + + TEST_CASE("single element preserved") { + std::vector v = { mc(42, "Solo", "X", "2000/01/01") }; + sortMagicCards(v, MagicSortColumn::Amount, false); + CHECK(v.size() == 1); + CHECK(v.front().id == 42); + } +} diff --git a/tests/collection_service_tests.cpp b/tests/collection_service_tests.cpp new file mode 100644 index 0000000..276d73f --- /dev/null +++ b/tests/collection_service_tests.cpp @@ -0,0 +1,120 @@ +#include + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/ports/ICollectionRepository.hpp" +#include "ccm/ports/IImageStore.hpp" +#include "ccm/services/CollectionService.hpp" + +#include +#include +#include + +using namespace ccm; + +namespace { + +class InMemoryRepo final : public ICollectionRepository { +public: + Map storage; + + Result load(Game) override { return Result::ok(storage); } + Result save(Game, const Map& m) override { + storage = m; + return Result::ok(); + } +}; + +class StubImageStore final : public IImageStore { +public: + std::vector> removed; + + Result copyIn(Game, const std::filesystem::path&, const std::string& n) override { + return Result::ok(n); + } + Result remove(Game g, const std::string& n) override { + removed.emplace_back(g, n); + return Result::ok(); + } + std::filesystem::path resolvePath(Game, const std::string& n) const override { + return std::filesystem::path(n); + } +}; + +MagicCard makeCard(const std::string& name, std::vector imgs = {}) { + MagicCard c; + c.name = name; + c.set = Set{"alp", "Alpha", "1993/08/05"}; + c.images = std::move(imgs); + return c; +} + +} // namespace + +TEST_SUITE("CollectionService") { + TEST_CASE("nextId on empty map is 0, then strictly increments") { + InMemoryRepo repo; + StubImageStore store; + CollectionService svc{repo, store}; + + const auto id0 = svc.add(Game::Magic, makeCard("A")); + REQUIRE(id0.isOk()); + CHECK(id0.value() == 0); + + const auto id1 = svc.add(Game::Magic, makeCard("B")); + REQUIRE(id1.isOk()); + CHECK(id1.value() == 1); + + const auto listed = svc.list(Game::Magic); + REQUIRE(listed.isOk()); + CHECK(listed.value().size() == 2); + } + + TEST_CASE("update modifies an existing card and is rejected for unknown ids") { + InMemoryRepo repo; + StubImageStore store; + CollectionService svc{repo, store}; + + const auto id = svc.add(Game::Magic, makeCard("Initial")).value(); + + MagicCard updated = makeCard("Renamed"); + updated.id = id; + CHECK(svc.update(Game::Magic, updated).isOk()); + + const auto found = svc.findById(Game::Magic, id); + REQUIRE(found.isOk()); + REQUIRE(found.value().has_value()); + CHECK(found.value()->name == "Renamed"); + + MagicCard ghost = makeCard("Ghost"); + ghost.id = 999; + CHECK(svc.update(Game::Magic, ghost).isErr()); + } + + TEST_CASE("remove deletes images and the entry") { + InMemoryRepo repo; + StubImageStore store; + CollectionService svc{repo, store}; + + const auto id = svc.add( + Game::Magic, makeCard("With Images", {"a.png", "b.png"})).value(); + + REQUIRE(svc.remove(Game::Magic, id).isOk()); + + // Both images should have been requested for deletion. + REQUIRE(store.removed.size() == 2); + CHECK(store.removed[0].second == "a.png"); + CHECK(store.removed[1].second == "b.png"); + + const auto listed = svc.list(Game::Magic); + REQUIRE(listed.isOk()); + CHECK(listed.value().empty()); + } + + TEST_CASE("remove of unknown id returns an error") { + InMemoryRepo repo; + StubImageStore store; + CollectionService svc{repo, store}; + + CHECK(svc.remove(Game::Magic, 12345).isErr()); + } +} diff --git a/tests/config_service_tests.cpp b/tests/config_service_tests.cpp new file mode 100644 index 0000000..85b1fa3 --- /dev/null +++ b/tests/config_service_tests.cpp @@ -0,0 +1,78 @@ +#include + +#include "ccm/services/ConfigService.hpp" + +#include "fakes/InMemoryFileSystem.hpp" + +#include + +using namespace ccm; +using ccm::testing::InMemoryFileSystem; + +TEST_SUITE("ConfigService") { + TEST_CASE("missing file is created with defaults") { + InMemoryFileSystem fs; + ConfigService svc{fs, "/app/config.json", "/data"}; + + REQUIRE(svc.initialize().isOk()); + CHECK(svc.current().dataStorage == "/data"); + CHECK(svc.current().defaultGame == Game::Magic); + CHECK(svc.current().theme == Theme::Light); + + const auto& written = fs.files(); + REQUIRE(written.count("/app/config.json")); + const auto j = nlohmann::json::parse(written.at("/app/config.json")); + CHECK(j.at("dataStorage") == "/data"); + CHECK(j.at("defaultGame") == "Magic"); + CHECK(j.at("theme") == "Light"); + } + + TEST_CASE("existing file is loaded verbatim") { + InMemoryFileSystem fs; + REQUIRE(fs.writeText("/app/config.json", + R"({"dataStorage":"/somewhere","defaultGame":"Pokemon","theme":"Dark"})").isOk()); + + ConfigService svc{fs, "/app/config.json", "/default"}; + REQUIRE(svc.initialize().isOk()); + CHECK(svc.current().dataStorage == "/somewhere"); + CHECK(svc.current().defaultGame == Game::Pokemon); + CHECK(svc.current().theme == Theme::Dark); + } + + TEST_CASE("store updates both the live config and the file") { + InMemoryFileSystem fs; + ConfigService svc{fs, "/app/config.json", "/data"}; + REQUIRE(svc.initialize().isOk()); + + Configuration next; + next.dataStorage = "/new/place"; + next.defaultGame = Game::Pokemon; + next.theme = Theme::Dark; + REQUIRE(svc.store(next).isOk()); + + CHECK(svc.current() == next); + const auto j = nlohmann::json::parse(fs.files().at("/app/config.json")); + CHECK(j.at("dataStorage") == "/new/place"); + CHECK(j.at("defaultGame") == "Pokemon"); + CHECK(j.at("theme") == "Dark"); + } + + TEST_CASE("missing theme field defaults to light for compatibility") { + InMemoryFileSystem fs; + REQUIRE(fs.writeText("/app/config.json", + R"({"dataStorage":"/somewhere","defaultGame":"Pokemon"})").isOk()); + + ConfigService svc{fs, "/app/config.json", "/default"}; + REQUIRE(svc.initialize().isOk()); + CHECK(svc.current().theme == Theme::Light); + } + + TEST_CASE("malformed JSON surfaces a clear error") { + InMemoryFileSystem fs; + REQUIRE(fs.writeText("/app/config.json", "not-json").isOk()); + ConfigService svc{fs, "/app/config.json", "/default"}; + const auto r = svc.initialize(); + REQUIRE(r.isErr()); + CHECK(r.error().find("config.json parse error") != std::string::npos); + } +} diff --git a/tests/domain_json_tests.cpp b/tests/domain_json_tests.cpp new file mode 100644 index 0000000..6a72031 --- /dev/null +++ b/tests/domain_json_tests.cpp @@ -0,0 +1,123 @@ +#include + +#include "ccm/domain/Configuration.hpp" +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/MagicCard.hpp" +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/domain/Set.hpp" + +#include + +using namespace ccm; + +TEST_SUITE("domain enums round-trip JSON as strings") { + TEST_CASE("Game") { + nlohmann::json j = Game::Magic; + CHECK(j.get() == "Magic"); + CHECK(j.get() == Game::Magic); + + nlohmann::json j2 = "Pokemon"; + CHECK(j2.get() == Game::Pokemon); + + nlohmann::json j3 = Theme::Dark; + CHECK(j3.get() == "Dark"); + CHECK(j3.get() == Theme::Dark); + } + + TEST_CASE("Language and Condition") { + nlohmann::json l = Language::Japanese; + CHECK(l.get() == "Japanese"); + CHECK(l.get() == Language::Japanese); + + nlohmann::json c = Condition::LightPlayed; + CHECK(c.get() == "LightPlayed"); + CHECK(c.get() == Condition::LightPlayed); + } + + TEST_CASE("invalid enum string throws") { + nlohmann::json bad = "Spanglish"; + CHECK_THROWS(bad.get()); + } +} + +TEST_SUITE("Set JSON shape stays stable") { + TEST_CASE("uses 'releaseDate' alias") { + Set s{"abc", "Test Set", "2024/05/01"}; + const nlohmann::json j = s; + CHECK(j.contains("releaseDate")); + CHECK_FALSE(j.contains("release_date")); + CHECK(j.at("releaseDate") == "2024/05/01"); + + const Set back = j.get(); + CHECK(back == s); + } +} + +TEST_SUITE("MagicCard JSON") { + TEST_CASE("round-trips with all original field names") { + MagicCard c; + c.id = 42; + c.amount = 3; + c.name = "Lightning Bolt"; + c.set = Set{"lea", "Limited Edition Alpha", "1993/08/05"}; + c.note = "rare promo"; + c.images = {"foo+bar+0.png"}; + c.language = Language::English; + c.condition = Condition::NearMint; + c.foil = true; + c.signed_ = false; + c.altered = false; + + nlohmann::json j = c; + CHECK(j.contains("signed")); + CHECK(j.at("signed") == false); + CHECK(j.at("foil") == true); + + const MagicCard back = j.get(); + CHECK(back == c); + } +} + +TEST_SUITE("PokemonCard JSON") { + TEST_CASE("uses 'setNo' and 'firstEdition' aliases") { + PokemonCard c; + c.id = 7; + c.amount = 1; + c.name = "Charizard"; + c.set = Set{"base1", "Base Set", "1999/01/09"}; + c.setNo = "4/102"; + c.note = ""; + c.images = {}; + c.language = Language::English; + c.condition = Condition::Excellent; + c.firstEdition = true; + c.holo = true; + c.signed_ = false; + c.altered = false; + + nlohmann::json j = c; + CHECK(j.at("setNo") == "4/102"); + CHECK(j.at("firstEdition") == true); + CHECK(j.at("signed") == false); + + const PokemonCard back = j.get(); + CHECK(back == c); + } +} + +TEST_SUITE("Configuration JSON matches Rust serde aliases") { + TEST_CASE("dataStorage / defaultGame / theme keys are present") { + Configuration cfg; + cfg.dataStorage = "/some/path"; + cfg.defaultGame = Game::Pokemon; + cfg.theme = Theme::Dark; + + nlohmann::json j = cfg; + CHECK(j.at("dataStorage") == "/some/path"); + CHECK(j.at("defaultGame") == "Pokemon"); + CHECK(j.at("theme") == "Dark"); + + const auto back = j.get(); + CHECK(back == cfg); + } +} diff --git a/tests/fakes/InMemoryFileSystem.cpp b/tests/fakes/InMemoryFileSystem.cpp new file mode 100644 index 0000000..a5ad1fc --- /dev/null +++ b/tests/fakes/InMemoryFileSystem.cpp @@ -0,0 +1,85 @@ +#include "fakes/InMemoryFileSystem.hpp" + +namespace ccm::testing { + +namespace fs = std::filesystem; + +std::string InMemoryFileSystem::norm(const fs::path& p) { + // Use forward slashes regardless of host so tests are portable. + return p.lexically_normal().generic_string(); +} + +bool InMemoryFileSystem::exists(const fs::path& p) const { + const auto k = norm(p); + return files_.count(k) || dirs_.count(k); +} + +bool InMemoryFileSystem::isDirectory(const fs::path& p) const { + return dirs_.count(norm(p)) > 0; +} + +Result InMemoryFileSystem::ensureDirectory(const fs::path& p) { + auto k = norm(p); + if (files_.count(k)) { + return Result::err("Path is a file, cannot become a directory: " + k); + } + // Walk parent chain so listDirectory() acts naturally. + fs::path acc; + for (const auto& part : p) { + acc /= part; + dirs_.insert(norm(acc)); + } + return Result::ok(); +} + +Result InMemoryFileSystem::readText(const fs::path& p) { + auto it = files_.find(norm(p)); + if (it == files_.end()) { + return Result::err("Not found: " + norm(p)); + } + return Result::ok(it->second); +} + +Result InMemoryFileSystem::writeText(const fs::path& p, std::string_view contents) { + if (p.has_parent_path()) { + auto r = ensureDirectory(p.parent_path()); + if (!r) return r; + } + files_[norm(p)] = std::string(contents); + return Result::ok(); +} + +Result InMemoryFileSystem::copyFile(const fs::path& from, const fs::path& to, bool overwrite) { + auto src = files_.find(norm(from)); + if (src == files_.end()) { + return Result::err("copy_file source missing: " + norm(from)); + } + if (!overwrite && files_.count(norm(to))) { + return Result::err("copy_file destination exists: " + norm(to)); + } + if (to.has_parent_path()) { + auto r = ensureDirectory(to.parent_path()); + if (!r) return r; + } + files_[norm(to)] = src->second; + return Result::ok(); +} + +Result InMemoryFileSystem::remove(const fs::path& p) { + files_.erase(norm(p)); + return Result::ok(); +} + +Result> InMemoryFileSystem::listDirectory(const fs::path& p) { + const auto prefix = norm(p) + "/"; + std::vector out; + for (const auto& [path, _] : files_) { + if (path.rfind(prefix, 0) == 0 && + path.find('/', prefix.size()) == std::string::npos) { + out.emplace_back(path); + } + } + return Result>::ok(std::move(out)); +} + +} // namespace ccm::testing diff --git a/tests/fakes/InMemoryFileSystem.hpp b/tests/fakes/InMemoryFileSystem.hpp new file mode 100644 index 0000000..ca599d9 --- /dev/null +++ b/tests/fakes/InMemoryFileSystem.hpp @@ -0,0 +1,40 @@ +#pragma once + +// In-memory IFileSystem fake used to drive the service tests with no real I/O. +// Tracks regular files (string contents) and directories (just by presence). + +#include "ccm/ports/IFileSystem.hpp" + +#include +#include +#include + +namespace ccm::testing { + +class InMemoryFileSystem final : public IFileSystem { +public: + [[nodiscard]] bool exists(const std::filesystem::path& p) const override; + [[nodiscard]] bool isDirectory(const std::filesystem::path& p) const override; + + Result ensureDirectory(const std::filesystem::path& p) override; + Result readText(const std::filesystem::path& p) override; + Result writeText(const std::filesystem::path& p, std::string_view contents) override; + Result copyFile(const std::filesystem::path& from, + const std::filesystem::path& to, + bool overwrite) override; + Result remove(const std::filesystem::path& p) override; + Result> listDirectory( + const std::filesystem::path& p) override; + + // Test helpers. + [[nodiscard]] const std::map& files() const noexcept { return files_; } + [[nodiscard]] const std::set& dirs() const noexcept { return dirs_; } + +private: + static std::string norm(const std::filesystem::path& p); + + std::map files_; + std::set dirs_; +}; + +} // namespace ccm::testing diff --git a/tests/fs_names_tests.cpp b/tests/fs_names_tests.cpp new file mode 100644 index 0000000..921944b --- /dev/null +++ b/tests/fs_names_tests.cpp @@ -0,0 +1,53 @@ +#include + +#include "ccm/util/FsNames.hpp" + +using ccm::formatTextForFs; +using ccm::parseIndexFromFilename; + +TEST_SUITE("FsNames::formatTextForFs") { + TEST_CASE("strips spaces, commas, apostrophes, backticks") { + CHECK(formatTextForFs("Hello, World's Set") == "HelloWorldsSet"); + CHECK(formatTextForFs("`tick`") == "tick"); + } + + TEST_CASE("colons become hyphens") { + CHECK(formatTextForFs("Set: Subtitle") == "Set-Subtitle"); + } + + TEST_CASE("ampersand becomes And, pipe becomes Or") { + CHECK(formatTextForFs("Black & White") == "BlackAndWhite"); + CHECK(formatTextForFs("a|b") == "aOrb"); + } + + TEST_CASE("flattens accented vowels listed in the original Rust source") { + // UTF-8 sequences for the accented characters the Rust crate handles. + CHECK(formatTextForFs("\xC3\xA1\xC3\xA9\xC3\xAD\xC3\xB3\xC3\xBA\xC3\xBB") == "aeiouu"); + } + + TEST_CASE("idempotent on already-clean strings") { + CHECK(formatTextForFs("AlreadyClean") == "AlreadyClean"); + } +} + +TEST_SUITE("FsNames::parseIndexFromFilename") { + TEST_CASE("single digit") { + CHECK(parseIndexFromFilename("Image1.png") == 1); + CHECK(parseIndexFromFilename("foo+bar+0.jpg") == 0); + } + + TEST_CASE("two digit") { + CHECK(parseIndexFromFilename("Image22.jpeg") == 22); + CHECK(parseIndexFromFilename("set+name+99.png") == 99); + } + + TEST_CASE("only the last two digits are taken (matches Rust source)") { + CHECK(parseIndexFromFilename("foo+123+45.png") == 45); + } + + TEST_CASE("no digits or no extension returns 0") { + CHECK(parseIndexFromFilename("noindex.png") == 0); + CHECK(parseIndexFromFilename("nothing") == 0); + CHECK(parseIndexFromFilename("") == 0); + } +} diff --git a/tests/image_service_tests.cpp b/tests/image_service_tests.cpp new file mode 100644 index 0000000..68e7b48 --- /dev/null +++ b/tests/image_service_tests.cpp @@ -0,0 +1,131 @@ +#include + +#include "ccm/domain/Enums.hpp" +#include "ccm/ports/IImageStore.hpp" +#include "ccm/services/ImageService.hpp" + +#include +#include +#include + +using namespace ccm; + +namespace { + +// Trivial image store that records calls without touching disk. +class RecordingImageStore final : public IImageStore { +public: + struct Call { Game game; std::filesystem::path src; std::string target; }; + std::vector copies; + std::vector> removes; + std::string returnedExt = ".png"; + + Result copyIn(Game game, + const std::filesystem::path& srcPath, + const std::string& targetName) override { + copies.push_back({game, srcPath, targetName}); + return Result::ok(targetName + returnedExt); + } + + Result remove(Game game, const std::string& imageName) override { + removes.emplace_back(game, imageName); + return Result::ok(); + } + + std::filesystem::path resolvePath(Game, const std::string& imageName) const override { + return std::filesystem::path("/fake") / imageName; + } +}; + +} // namespace + +TEST_SUITE("ImageService::nextImageIndex") { + TEST_CASE("empty list returns 0") { + CHECK(ImageService::nextImageIndex({}) == 0); + } + + TEST_CASE("increments by one over the latest filename") { + std::vector imgs = {"set+name+0.png", "set+name+1.png"}; + CHECK(ImageService::nextImageIndex(imgs) == 2); + } + + TEST_CASE("CCM1-style filenames reset back to 0") { + std::vector imgs = {"someCardIMG_FRONT.png"}; + CHECK(ImageService::nextImageIndex(imgs) == 0); + std::vector imgs2 = {"otherIMG_BACK.png"}; + CHECK(ImageService::nextImageIndex(imgs2) == 0); + } +} + +TEST_SUITE("ImageService::buildTargetName") { + TEST_CASE("new entry omits id, uses sanitized set+name+idx") { + const auto out = ImageService::buildTargetName(true, 99, "Limited: Alpha", "Lightning, Bolt", 3); + CHECK(out == "Limited-Alpha+LightningBolt+3"); + } + + TEST_CASE("existing entry prepends the card id") { + const auto out = ImageService::buildTargetName(false, 42, "Beta", "Black Lotus", 0); + CHECK(out == "42+Beta+BlackLotus+0"); + } +} + +TEST_SUITE("ImageService::addImage") { + TEST_CASE("delegates to the store with the computed target name") { + RecordingImageStore store; + ImageService svc{store}; + + std::vector existing; + auto res = svc.addImage(Game::Magic, "/tmp/source.png", + /*newEntry=*/true, /*cardId=*/0, + "Beta", "Black Lotus", existing); + + REQUIRE(res.isOk()); + CHECK(res.value() == "Beta+BlackLotus+0.png"); + REQUIRE(store.copies.size() == 1); + CHECK(store.copies[0].game == Game::Magic); + CHECK(store.copies[0].target == "Beta+BlackLotus+0"); + } +} + +TEST_SUITE("ImageService::normalizeNamesForPersistedCard") { + TEST_CASE("renames non-prefixed images to include card id") { + RecordingImageStore store; + ImageService svc{store}; + + const std::vector images{ + "Beta+BlackLotus+0.png", + "Beta+BlackLotus+1.jpg" + }; + auto normalized = svc.normalizeNamesForPersistedCard( + Game::Magic, 42, "Beta", "Black Lotus", images); + + REQUIRE(normalized.isOk()); + CHECK(normalized.value().size() == 2); + CHECK(normalized.value()[0] == "42+Beta+BlackLotus+0.png"); + CHECK(normalized.value()[1] == "42+Beta+BlackLotus+1.jpg"); + + REQUIRE(store.copies.size() == 2); + CHECK(store.copies[0].src == std::filesystem::path("/fake/Beta+BlackLotus+0.png")); + CHECK(store.copies[0].target == "42+Beta+BlackLotus+0"); + CHECK(store.copies[1].src == std::filesystem::path("/fake/Beta+BlackLotus+1.jpg")); + CHECK(store.copies[1].target == "42+Beta+BlackLotus+1"); + + REQUIRE(store.removes.size() == 2); + CHECK(store.removes[0].second == "Beta+BlackLotus+0.png"); + CHECK(store.removes[1].second == "Beta+BlackLotus+1.jpg"); + } + + TEST_CASE("keeps already-prefixed names untouched") { + RecordingImageStore store; + ImageService svc{store}; + + const std::vector images{"42+Beta+BlackLotus+0.png"}; + auto normalized = svc.normalizeNamesForPersistedCard( + Game::Magic, 42, "Beta", "Black Lotus", images); + + REQUIRE(normalized.isOk()); + CHECK(normalized.value() == images); + CHECK(store.copies.empty()); + CHECK(store.removes.empty()); + } +} diff --git a/tests/json_collection_repository_tests.cpp b/tests/json_collection_repository_tests.cpp new file mode 100644 index 0000000..580401c --- /dev/null +++ b/tests/json_collection_repository_tests.cpp @@ -0,0 +1,88 @@ +#include + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/infra/JsonCollectionRepository.hpp" +#include "ccm/services/ConfigService.hpp" + +#include "fakes/InMemoryFileSystem.hpp" + +#include + +using namespace ccm; +using ccm::testing::InMemoryFileSystem; + +namespace { + +ConfigService makeConfig(InMemoryFileSystem& fs, const std::string& dataDir) { + // Pre-write a config so initialize() doesn't reset our data directory. + Configuration c; + c.dataStorage = dataDir; + c.defaultGame = Game::Magic; + const nlohmann::json j = c; + fs.writeText("/app/config.json", j.dump()); + ConfigService cfg{fs, "/app/config.json", dataDir}; + cfg.initialize(); + return cfg; +} + +std::string magicDir(Game g) { return g == Game::Magic ? "magic" : "pokemon"; } + +} // namespace + +TEST_SUITE("JsonCollectionRepository") { + TEST_CASE("missing collection.json is created on first load") { + InMemoryFileSystem fs; + auto cfg = makeConfig(fs, "/data"); + JsonCollectionRepository repo{fs, cfg, magicDir}; + + const auto loaded = repo.load(Game::Magic); + REQUIRE(loaded.isOk()); + CHECK(loaded.value().empty()); + CHECK(fs.files().count("/data/magic/collection.json") == 1); + } + + TEST_CASE("save/load round-trip preserves all card fields") { + InMemoryFileSystem fs; + auto cfg = makeConfig(fs, "/data"); + JsonCollectionRepository repo{fs, cfg, magicDir}; + + MagicCard c; + c.id = 5; + c.amount = 2; + c.name = "Black Lotus"; + c.set = Set{"lea", "Limited Edition Alpha", "1993/08/05"}; + c.note = "tournament-illegal"; + c.images = {"lea+BlackLotus+0.png"}; + c.language = Language::English; + c.condition = Condition::Mint; + c.foil = false; + c.signed_ = true; + c.altered = false; + + std::map m{{c.id, c}}; + REQUIRE(repo.save(Game::Magic, m).isOk()); + + const auto loaded = repo.load(Game::Magic); + REQUIRE(loaded.isOk()); + REQUIRE(loaded.value().count(5) == 1); + CHECK(loaded.value().at(5) == c); + } + + TEST_CASE("on-disk JSON is keyed by stringified card id") { + InMemoryFileSystem fs; + auto cfg = makeConfig(fs, "/data"); + JsonCollectionRepository repo{fs, cfg, magicDir}; + + MagicCard c; + c.id = 17; + c.name = "X"; + c.set = Set{"x", "X", "2024/01/01"}; + std::map m{{c.id, c}}; + REQUIRE(repo.save(Game::Magic, m).isOk()); + + const auto& contents = fs.files().at("/data/magic/collection.json"); + const auto j = nlohmann::json::parse(contents); + REQUIRE(j.contains("17")); + CHECK(j.at("17").at("id") == 17); + } +} diff --git a/tests/json_set_repository_tests.cpp b/tests/json_set_repository_tests.cpp new file mode 100644 index 0000000..d23e35c --- /dev/null +++ b/tests/json_set_repository_tests.cpp @@ -0,0 +1,52 @@ +#include + +#include "ccm/infra/JsonSetRepository.hpp" +#include "ccm/services/ConfigService.hpp" + +#include "fakes/InMemoryFileSystem.hpp" + +#include + +using namespace ccm; +using ccm::testing::InMemoryFileSystem; + +namespace { +std::string dirNameFn(Game g) { return g == Game::Magic ? "magic" : "pokemon"; } + +ConfigService makeConfig(InMemoryFileSystem& fs, const std::string& dataDir) { + Configuration c; + c.dataStorage = dataDir; + c.defaultGame = Game::Magic; + fs.writeText("/app/config.json", nlohmann::json(c).dump()); + ConfigService cfg{fs, "/app/config.json", dataDir}; + cfg.initialize(); + return cfg; +} +} // namespace + +TEST_SUITE("JsonSetRepository") { + TEST_CASE("save then load returns identical sets") { + InMemoryFileSystem fs; + auto cfg = makeConfig(fs, "/data"); + JsonSetRepository repo{fs, cfg, dirNameFn}; + + const std::vector sets = { + {"lea", "Limited Edition Alpha", "1993/08/05"}, + {"leb", "Limited Edition Beta", "1993/10/04"}, + }; + REQUIRE(repo.save(Game::Magic, sets).isOk()); + + const auto loaded = repo.load(Game::Magic); + REQUIRE(loaded.isOk()); + CHECK(loaded.value() == sets); + } + + TEST_CASE("load before any save reports a clear error") { + InMemoryFileSystem fs; + auto cfg = makeConfig(fs, "/data"); + JsonSetRepository repo{fs, cfg, dirNameFn}; + + const auto loaded = repo.load(Game::Pokemon); + CHECK(loaded.isErr()); + } +} diff --git a/tests/magic_card_preview_source_tests.cpp b/tests/magic_card_preview_source_tests.cpp new file mode 100644 index 0000000..ccc1453 --- /dev/null +++ b/tests/magic_card_preview_source_tests.cpp @@ -0,0 +1,112 @@ +#include + +#include "ccm/games/magic/MagicCardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +#include + +using namespace ccm; + +namespace { + +class FixedHttpClient final : public IHttpClient { +public: + std::string lastUrl; + std::string body; + bool ok = true; + Result get(std::string_view url) override { + lastUrl = std::string(url); + return ok ? Result::ok(body) + : Result::err("offline"); + } +}; + +} // namespace + +TEST_SUITE("MagicCardPreviewSource::buildSearchUrl") { + TEST_CASE("simple name and set produce a percent-encoded query") { + const auto url = MagicCardPreviewSource::buildSearchUrl("Lightning Bolt", "lea"); + // Spaces -> %20, quotes -> %22, colons -> %3A. setId stays as-is when + // it only contains unreserved chars. + CHECK(url.find("https://api.scryfall.com/cards/search?q=") == 0); + CHECK(url.find("%22Lightning%20Bolt%22") != std::string::npos); + CHECK(url.find("set%3Alea") != std::string::npos); + } + + TEST_CASE("ampersand in card name is replaced with 'and' before encoding") { + const auto url = MagicCardPreviewSource::buildSearchUrl("Fire & Ice", "abc"); + CHECK(url.find("Fire%20and%20Ice") != std::string::npos); + CHECK(url.find("%26") == std::string::npos); + } + + TEST_CASE("unreserved characters in setId are preserved") { + const auto url = MagicCardPreviewSource::buildSearchUrl("X", "swsh10"); + CHECK(url.find("set%3Aswsh10") != std::string::npos); + } +} + +TEST_SUITE("MagicCardPreviewSource::parseResponse") { + TEST_CASE("happy path returns image_uris.normal") { + const std::string json = R"({ + "data": [ + { + "name": "Lightning Bolt", + "image_uris": { + "small": "https://img.scryfall.io/small.jpg", + "normal": "https://img.scryfall.io/normal.jpg", + "large": "https://img.scryfall.io/large.jpg" + } + } + ] + })"; + const auto out = MagicCardPreviewSource::parseResponse(json); + REQUIRE(out.isOk()); + CHECK(out.value() == "https://img.scryfall.io/normal.jpg"); + } + + TEST_CASE("empty data array returns an error") { + const auto out = MagicCardPreviewSource::parseResponse(R"({"data":[]})"); + CHECK(out.isErr()); + } + + TEST_CASE("missing data array returns an error") { + const auto out = MagicCardPreviewSource::parseResponse(R"({"meta":{}})"); + CHECK(out.isErr()); + } + + TEST_CASE("entry without image_uris returns an error (double-faced cards)") { + const std::string json = R"({ + "data": [ + {"name":"DoubleFace","card_faces":[{"image_uris":{"normal":"x"}}]} + ] + })"; + const auto out = MagicCardPreviewSource::parseResponse(json); + CHECK(out.isErr()); + } + + TEST_CASE("invalid JSON returns an error") { + const auto out = MagicCardPreviewSource::parseResponse("{not json"); + CHECK(out.isErr()); + } +} + +TEST_SUITE("MagicCardPreviewSource::fetchImageUrl") { + TEST_CASE("network error is surfaced as a Result error") { + FixedHttpClient http; + http.ok = false; + MagicCardPreviewSource src{http}; + CHECK(src.fetchImageUrl("Lightning Bolt", "lea", "").isErr()); + } + + TEST_CASE("network success is parsed end-to-end and uses the encoded URL") { + FixedHttpClient http; + http.ok = true; + http.body = R"({"data":[{"image_uris":{"normal":"https://img/normal.jpg"}}]})"; + MagicCardPreviewSource src{http}; + const auto out = src.fetchImageUrl("Lightning Bolt", "lea", ""); + REQUIRE(out.isOk()); + CHECK(out.value() == "https://img/normal.jpg"); + CHECK(http.lastUrl.find("%22Lightning%20Bolt%22") != std::string::npos); + CHECK(http.lastUrl.find("set%3Alea") != std::string::npos); + } +} diff --git a/tests/magic_set_source_tests.cpp b/tests/magic_set_source_tests.cpp new file mode 100644 index 0000000..deb1cb0 --- /dev/null +++ b/tests/magic_set_source_tests.cpp @@ -0,0 +1,83 @@ +#include + +#include "ccm/games/magic/MagicSetSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +using namespace ccm; + +namespace { + +class FixedHttpClient final : public IHttpClient { +public: + std::string body; + bool ok = true; + Result get(std::string_view) override { + return ok ? Result::ok(body) + : Result::err("offline"); + } +}; + +} // namespace + +TEST_SUITE("MagicSetSource::parseResponse") { + TEST_CASE("filters digital sets and converts release date format") { + const std::string json = R"({ + "data": [ + {"code":"lea","name":"Alpha","released_at":"1993-08-05","digital":false}, + {"code":"mtgo","name":"Online Promo","released_at":"2010-01-01","digital":true}, + {"code":"leb","name":"Beta","released_at":"1993-10-04","digital":false} + ] + })"; + + const auto out = MagicSetSource::parseResponse(json); + REQUIRE(out.isOk()); + REQUIRE(out.value().size() == 2); + CHECK(out.value()[0].id == "lea"); + CHECK(out.value()[0].releaseDate == "1993/08/05"); + CHECK(out.value()[1].id == "leb"); + CHECK(out.value()[1].releaseDate == "1993/10/04"); + } + + TEST_CASE("sorts by release date ascending") { + const std::string json = R"({ + "data": [ + {"code":"newer","name":"N","released_at":"2024-01-01","digital":false}, + {"code":"older","name":"O","released_at":"2010-01-01","digital":false} + ] + })"; + const auto out = MagicSetSource::parseResponse(json); + REQUIRE(out.isOk()); + CHECK(out.value().front().id == "older"); + CHECK(out.value().back().id == "newer"); + } + + TEST_CASE("missing data array returns an error") { + const auto out = MagicSetSource::parseResponse(R"({"meta":{}})"); + CHECK(out.isErr()); + } + + TEST_CASE("invalid JSON returns an error") { + const auto out = MagicSetSource::parseResponse("{not json"); + CHECK(out.isErr()); + } +} + +TEST_SUITE("MagicSetSource::fetchAll") { + TEST_CASE("network error is surfaced as a Result error") { + FixedHttpClient http; + http.ok = false; + MagicSetSource src{http}; + CHECK(src.fetchAll().isErr()); + } + + TEST_CASE("network success is parsed end-to-end") { + FixedHttpClient http; + http.ok = true; + http.body = R"({"data":[{"code":"x","name":"X","released_at":"2020-01-01","digital":false}]})"; + MagicSetSource src{http}; + const auto out = src.fetchAll(); + REQUIRE(out.isOk()); + CHECK(out.value().front().id == "x"); + CHECK(out.value().front().releaseDate == "2020/01/01"); + } +} diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 0000000..0a3f254 --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,2 @@ +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include diff --git a/tests/pokemon_card_preview_source_tests.cpp b/tests/pokemon_card_preview_source_tests.cpp new file mode 100644 index 0000000..ffb6b3a --- /dev/null +++ b/tests/pokemon_card_preview_source_tests.cpp @@ -0,0 +1,130 @@ +#include + +#include "ccm/games/pokemon/PokemonCardPreviewSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +#include + +using namespace ccm; + +namespace { + +class FixedHttpClient final : public IHttpClient { +public: + std::string lastUrl; + std::string body; + bool ok = true; + Result get(std::string_view url) override { + lastUrl = std::string(url); + return ok ? Result::ok(body) + : Result::err("offline"); + } +}; + +} // namespace + +TEST_SUITE("PokemonCardPreviewSource::buildSearchUrl") { + TEST_CASE("name and setId produce a percent-encoded query") { + const auto url = PokemonCardPreviewSource::buildSearchUrl( + "Pikachu", "base1", ""); + CHECK(url.find("https://api.pokemontcg.io/v2/cards?q=") == 0); + CHECK(url.find("%22Pikachu%22") != std::string::npos); + CHECK(url.find("set.id%3Abase1") != std::string::npos); + // No number term when setNo is empty. + CHECK(url.find("number") == std::string::npos); + } + + TEST_CASE("setNo is appended as a number: clause") { + const auto url = PokemonCardPreviewSource::buildSearchUrl( + "Charizard", "base1", "4"); + CHECK(url.find("number%3A4") != std::string::npos); + } + + TEST_CASE("setNo with a slash is normalized to the printed number") { + // Pokemon collection numbers are commonly stored as "4/102" — the + // Pokemon TCG search API only accepts the printed-number portion. + const auto url = PokemonCardPreviewSource::buildSearchUrl( + "Charizard", "base1", "4/102"); + CHECK(url.find("number%3A4") != std::string::npos); + CHECK(url.find("102") == std::string::npos); + } + + TEST_CASE("name with spaces is percent-encoded") { + const auto url = PokemonCardPreviewSource::buildSearchUrl( + "Mr. Mime", "base1", ""); + CHECK(url.find("%22Mr.%20Mime%22") != std::string::npos); + } +} + +TEST_SUITE("PokemonCardPreviewSource::parseResponse") { + TEST_CASE("returns images.large when present") { + const std::string json = R"({ + "data": [ + { + "name": "Pikachu", + "images": { + "small": "https://images.pokemontcg.io/small.png", + "large": "https://images.pokemontcg.io/large.png" + } + } + ] + })"; + const auto out = PokemonCardPreviewSource::parseResponse(json); + REQUIRE(out.isOk()); + CHECK(out.value() == "https://images.pokemontcg.io/large.png"); + } + + TEST_CASE("falls back to images.small when large is absent") { + const std::string json = R"({ + "data": [ + {"name":"Pikachu","images":{"small":"https://small.only/img.png"}} + ] + })"; + const auto out = PokemonCardPreviewSource::parseResponse(json); + REQUIRE(out.isOk()); + CHECK(out.value() == "https://small.only/img.png"); + } + + TEST_CASE("empty data array returns an error") { + const auto out = PokemonCardPreviewSource::parseResponse(R"({"data":[]})"); + CHECK(out.isErr()); + } + + TEST_CASE("missing data array returns an error") { + const auto out = PokemonCardPreviewSource::parseResponse(R"({"meta":{}})"); + CHECK(out.isErr()); + } + + TEST_CASE("entry without images returns an error") { + const auto out = PokemonCardPreviewSource::parseResponse( + R"({"data":[{"name":"Pikachu"}]})"); + CHECK(out.isErr()); + } + + TEST_CASE("invalid JSON returns an error") { + const auto out = PokemonCardPreviewSource::parseResponse("{not json"); + CHECK(out.isErr()); + } +} + +TEST_SUITE("PokemonCardPreviewSource::fetchImageUrl") { + TEST_CASE("network error is surfaced as a Result error") { + FixedHttpClient http; + http.ok = false; + PokemonCardPreviewSource src{http}; + CHECK(src.fetchImageUrl("Pikachu", "base1", "").isErr()); + } + + TEST_CASE("network success is parsed end-to-end and uses the encoded URL") { + FixedHttpClient http; + http.ok = true; + http.body = R"({"data":[{"images":{"large":"https://l/x.png"}}]})"; + PokemonCardPreviewSource src{http}; + const auto out = src.fetchImageUrl("Pikachu", "base1", "25"); + REQUIRE(out.isOk()); + CHECK(out.value() == "https://l/x.png"); + CHECK(http.lastUrl.find("%22Pikachu%22") != std::string::npos); + CHECK(http.lastUrl.find("set.id%3Abase1") != std::string::npos); + CHECK(http.lastUrl.find("number%3A25") != std::string::npos); + } +} diff --git a/tests/pokemon_set_source_tests.cpp b/tests/pokemon_set_source_tests.cpp new file mode 100644 index 0000000..2af5d95 --- /dev/null +++ b/tests/pokemon_set_source_tests.cpp @@ -0,0 +1,94 @@ +#include + +#include "ccm/games/pokemon/PokemonSetSource.hpp" +#include "ccm/ports/IHttpClient.hpp" + +using namespace ccm; + +namespace { + +class FixedHttpClient final : public IHttpClient { +public: + std::string lastUrl; + std::string body; + bool ok = true; + Result get(std::string_view url) override { + lastUrl = std::string(url); + return ok ? Result::ok(body) + : Result::err("offline"); + } +}; + +} // namespace + +TEST_SUITE("PokemonSetSource::parseResponse") { + TEST_CASE("happy path: maps id/name/releaseDate without rewriting separators") { + // The Pokemon TCG API returns releaseDate already in YYYY/MM/DD form, + // unlike Scryfall's released_at YYYY-MM-DD. + const std::string json = R"({ + "data": [ + {"id":"base1","name":"Base","releaseDate":"1999/01/09"}, + {"id":"jungle","name":"Jungle","releaseDate":"1999/06/16"} + ] + })"; + + const auto out = PokemonSetSource::parseResponse(json); + REQUIRE(out.isOk()); + REQUIRE(out.value().size() == 2); + CHECK(out.value()[0].id == "base1"); + CHECK(out.value()[0].name == "Base"); + CHECK(out.value()[0].releaseDate == "1999/01/09"); + CHECK(out.value()[1].id == "jungle"); + CHECK(out.value()[1].releaseDate == "1999/06/16"); + } + + TEST_CASE("sorts by release date ascending") { + const std::string json = R"({ + "data": [ + {"id":"newer","name":"N","releaseDate":"2024/01/01"}, + {"id":"older","name":"O","releaseDate":"2010/01/01"} + ] + })"; + const auto out = PokemonSetSource::parseResponse(json); + REQUIRE(out.isOk()); + CHECK(out.value().front().id == "older"); + CHECK(out.value().back().id == "newer"); + } + + TEST_CASE("empty data array returns an empty list (not an error)") { + const auto out = PokemonSetSource::parseResponse(R"({"data":[]})"); + REQUIRE(out.isOk()); + CHECK(out.value().empty()); + } + + TEST_CASE("missing data array returns an error") { + const auto out = PokemonSetSource::parseResponse(R"({"meta":{}})"); + CHECK(out.isErr()); + } + + TEST_CASE("invalid JSON returns an error") { + const auto out = PokemonSetSource::parseResponse("{not json"); + CHECK(out.isErr()); + } +} + +TEST_SUITE("PokemonSetSource::fetchAll") { + TEST_CASE("network error is surfaced as a Result error") { + FixedHttpClient http; + http.ok = false; + PokemonSetSource src{http}; + CHECK(src.fetchAll().isErr()); + } + + TEST_CASE("network success is parsed end-to-end and hits the public endpoint") { + FixedHttpClient http; + http.ok = true; + http.body = R"({"data":[{"id":"x","name":"X","releaseDate":"2020/01/01"}]})"; + PokemonSetSource src{http}; + const auto out = src.fetchAll(); + REQUIRE(out.isOk()); + CHECK(out.value().front().id == "x"); + CHECK(out.value().front().releaseDate == "2020/01/01"); + CHECK(http.lastUrl == "https://api.pokemontcg.io/v2/sets"); + } +} diff --git a/tests/set_service_tests.cpp b/tests/set_service_tests.cpp new file mode 100644 index 0000000..70739f8 --- /dev/null +++ b/tests/set_service_tests.cpp @@ -0,0 +1,119 @@ +#include + +#include "ccm/games/IGameModule.hpp" +#include "ccm/ports/ISetRepository.hpp" +#include "ccm/services/SetService.hpp" + +#include + +using namespace ccm; + +namespace { + +class FakeSetSource final : public ISetSource { +public: + Result> result = Result>::err("not set"); + int calls = 0; + Result> fetchAll() override { + ++calls; + return result; + } +}; + +class FakeGameModule final : public IGameModule { +public: + FakeSetSource source; + Game gameId; + explicit FakeGameModule(Game id) : gameId(id) {} + Game id() const noexcept override { return gameId; } + std::string dirName() const override { return gameId == Game::Magic ? "magic" : "pokemon"; } + std::string displayName() const override { return dirName(); } + ISetSource& setSource() override { return source; } +}; + +class InMemSetRepo final : public ISetRepository { +public: + std::vector stored; + bool hasStored = false; + Result> load(Game) override { + if (!hasStored) return Result>::err("no cache"); + return Result>::ok(stored); + } + Result save(Game, const std::vector& s) override { + stored = s; + hasStored = true; + return Result::ok(); + } +}; + +} // namespace + +TEST_SUITE("SetService") { + TEST_CASE("updateSets fetches via the registered module and persists the result") { + InMemSetRepo repo; + SetService svc{repo}; + + FakeGameModule magic{Game::Magic}; + magic.source.result = Result>::ok({ + {"lea", "Alpha", "1993/08/05"}, + }); + svc.registerModule(&magic); + + const auto out = svc.updateSets(Game::Magic); + REQUIRE(out.isOk()); + CHECK(out.value().size() == 1); + CHECK(magic.source.calls == 1); + + // Cache is now warm. + const auto cached = svc.getSets(Game::Magic); + REQUIRE(cached.isOk()); + CHECK(cached.value() == out.value()); + } + + TEST_CASE("updateSets fails cleanly for unregistered games") { + InMemSetRepo repo; + SetService svc{repo}; + const auto out = svc.updateSets(Game::Pokemon); + CHECK(out.isErr()); + } + + TEST_CASE("propagates upstream fetch errors without persisting") { + InMemSetRepo repo; + SetService svc{repo}; + + FakeGameModule pokemon{Game::Pokemon}; + pokemon.source.result = Result>::err("upstream is down"); + svc.registerModule(&pokemon); + + const auto out = svc.updateSets(Game::Pokemon); + CHECK(out.isErr()); + CHECK_FALSE(repo.hasStored); + } + + TEST_CASE("Pokemon module is routed independently of Magic") { + // Both modules registered; updating Pokemon must hit the Pokemon + // source and persist under the Pokemon Game key without disturbing + // a previously cached Magic list. + InMemSetRepo repo; + SetService svc{repo}; + + FakeGameModule magic{Game::Magic}; + magic.source.result = Result>::ok({ + {"lea", "Alpha", "1993/08/05"}, + }); + FakeGameModule pokemon{Game::Pokemon}; + pokemon.source.result = Result>::ok({ + {"base1", "Base", "1999/01/09"}, + }); + svc.registerModule(&magic); + svc.registerModule(&pokemon); + + REQUIRE(svc.updateSets(Game::Magic).isOk()); + const auto poke = svc.updateSets(Game::Pokemon); + REQUIRE(poke.isOk()); + REQUIRE(poke.value().size() == 1); + CHECK(poke.value().front().id == "base1"); + CHECK(magic.source.calls == 1); + CHECK(pokemon.source.calls == 1); + } +} diff --git a/ui_wx/AGENTS.md b/ui_wx/AGENTS.md new file mode 100644 index 0000000..fe12826 --- /dev/null +++ b/ui_wx/AGENTS.md @@ -0,0 +1,93 @@ +# ui_wx/AGENTS.md + +`ccm_ui_wx` static library — wxWidgets adapter. The **only** target that may include `wx/...` headers. Read the root `AGENTS.md` first. + +## Layer pointers + +- `include/ccm/ui/AppContext.hpp` — the boundary type. A struct of references to shared core services + per-game modules and a `std::vector` of all UI bundles. UI code talks to core only through this struct (and the typed pointers go through `IGameView`, never directly). +- `include/ccm/ui/IGameView.hpp` — abstract base class for per-game UI bundles. `MainFrame` only ever sees `IGameView` references; this is the seam that lets the frame swap between Magic, Pokemon, and any future TCG without knowing their card types. +- `include/ccm/ui/MainFrame.hpp` + `src/MainFrame.cpp` — top-level window, menu strip (`File` / `Game` / `Sets` / `Help`), toolbar (Add / Edit / Delete + filter input), and the splitter that swaps the active `IGameView`'s panels. The `Game` and `Sets` menus are built dynamically from `AppContext::gameViews` so adding a new game lights up its menu entries automatically. Filter and toolbar actions forward to `activeView()`. `EVT_PREVIEW_STATUS` (preview fetch outcome → status label; empty string resets to `"Ready"`) is the only event the frame binds; `EVT_CARD_SELECTED` is bound *per view* (each `IGameView` connects its typed list panel to its typed selected panel internally). About is a custom themed dialog (not `wxAboutBox`) so dark mode behavior stays consistent. +- `include/ccm/ui/BaseCardListPanel.hpp` — header-only template `BaseCardListPanel` that owns ALL the non-game-specific `wxListCtrl` machinery: hidden zero-width spacer column (legacy of the MSW comctl32 image-list gutter workaround, kept to preserve column-index math), themed header row (clickable to sort, edge-drag to resize, divider double-click to autosize), per-icon-column cached `wxBitmap` pairs (normal + selected color) consumed by `IconListCtrl::MSWOnNotify` so row icons are pixel-perfect centered under the themed-header icons, rebuild guard so DESELECTED/SELECTED storms collapse into a single bubbled `EVT_CARD_SELECTED`, case-insensitive substring filter via `setFilter(...)`, per-column toggle-direction sort. Subclasses fill in column descriptors + per-row text + per-icon-column flag predicates + dispatch hooks (`sortBy`, `matchesFilter`). +- `include/ccm/ui/IconListCtrl.hpp` + `src/IconListCtrl.cpp` — small `wxListCtrl` subclass that intercepts `NM_CUSTOMDRAW` on Windows and paints flag-icon sub-items at the exact center of each cell. It owns a `HIMAGELIST` (built from the cached `wxBitmap` pairs via straight-RGBA 32 bpp DIB sections) and draws each cell's icon with `ImageList_Draw(ILD_TRANSPARENT)` onto the native `HDC` from `NMLVCUSTOMDRAW`. This is the same low-level pixel path `wxImageList` uses internally, which is the only rendering path that has reliably preserved SVG transparency + correct fill color across light/dark themes on MSW. Two earlier attempts — `wxGraphicsContext::DrawBitmap` and a manually-premultiplied-DIB `AlphaBlend` — both rendered runtime-fill SVG icons as solid white in light mode and were abandoned (see convention 11). The custom-draw is purely about positioning; pixel format handling is delegated to comctl32. +- `include/ccm/ui/BaseSelectedCardPanel.hpp` — header-only template `BaseSelectedCardPanel` that owns the right-hand-side detail panel: preview image fetched via `CardPreviewService` (with the `shared_ptr` + `std::atomic alive`/`currentGen` cancellation pattern), 2-column detail grid, flag-icon strip that collapses when no flags are set, image list with double-click viewer. If preview lookup fails or returns empty bytes, the panel falls back to a per-game card-back image URL (Magic/Pokemon parity with CCM2) instead of leaving the preview empty. Subclasses describe the detail rows / flag icons / preview lookup `(name, setId, setNo)` and own a `Game` constant. +- `include/ccm/ui/BaseCardEditDialog.hpp` — header-only template `BaseCardEditDialog` that owns the standard Add/Edit form: Name, Set picker (read-only `wxComboBox` with prefix-match typeahead and case-insensitive id matching for legacy data), Amount spin, Language and Condition choices, Note, image management (Add multiple via `wxFD_MULTIPLE`, Remove, double-click to view), OK/Cancel + validation. Subclasses build the flags row (`buildFlagsRow`), append game-specific extra rows (e.g. Pokemon's `Set #`) via `appendExtraRows`, and copy values in/out of the typed card (`readExtraFromCard` / `writeExtraToCard`). +- `include/ccm/ui/Magic*.hpp` + `src/Magic*.cpp` — Magic implementations: `MagicCardListPanel`, `MagicSelectedCardPanel`, `MagicCardEditDialog`, `MagicGameView`. Each is ~50–100 lines of hook overrides on top of the matching base template. +- `include/ccm/ui/Pokemon*.hpp` + `src/Pokemon*.cpp` — Pokemon implementations: `PokemonCardListPanel`, `PokemonSelectedCardPanel`, `PokemonCardEditDialog`, `PokemonGameView`. Same shape as the Magic ones; differences are limited to the Set # field, the Holo / 1. Edition flags, and the Pokemon TCG preview lookup key (which includes `setNo`). +- `include/ccm/ui/SvgIcons.hpp` + `src/SvgIcons.cpp` — embedded SVG templates with a `@FILL@` placeholder. Magic flags: `kSvgFoil` / `kSvgSigned` / `kSvgAltered`. Pokemon flags: `kSvgHolo` (sparkle, mirroring the original `IconHolo` from `PokemonTable.tsx`) and `kSvgFirstEdition` (themed "1" inside an outlined badge, rebuilt from the original `IconPokemonFirstEdition.tsx` — every fill/stroke uses `@FILL@` so the icon themes alongside the others). Toolbar glyphs: `kSvgToolbarAdd` / `kSvgToolbarEdit` / `kSvgToolbarDelete` (vscode-codicons). `svgIconBitmap` / `paddedSvgIcon` helpers backed by `wxBitmapBundle::FromSVG`. Bitmaps from `svgIconBitmap` go straight to `wxStaticBitmap` / `wxBitmapButton::SetBitmap` cleanly; for the row-icon path `IconListCtrl` packs them into a private premultiplied-BGRA `HIMAGELIST` and draws with `ImageList_Draw`. See convention 11 for the full pitfall write-up. +- `src/BaseEvents.cpp` — single-translation-unit definitions for `EVT_CARD_SELECTED` and `EVT_PREVIEW_STATUS`. Both events are template-instantiation-agnostic so all per-game panels share the same event types. +- `include/ccm/ui/SettingsDialog.hpp` + `src/SettingsDialog.cpp` — edits `Configuration` via `ConfigService::store`. +- `include/ccm/ui/ImageViewerDialog.hpp` + `src/ImageViewerDialog.cpp` — full-size viewer with prev/next. +- `include/ccm/ui/Theme.hpp` + `src/Theme.cpp` — shared theme helpers and popup helpers (`showThemedMessageDialog`, `showThemedConfirmDialog`) for consistent dark/light dialogs. + +## Conventions + +1. **Only consume core through `AppContext`.** Do not include any header from `ccm/infra/` here. The set of allowed `ccm/...` includes is `domain/`, `services/`, `games/IGameModule.hpp`, `ports/ICardPreviewSource.hpp`, and `util/Result.hpp`. +2. **Image decoding lives here, not in core.** Use `wxImage::LoadFile(path.string())` against the path returned by `IImageStore::resolvePath`. Core stays free of any image library. +3. **Ownership**: dialogs and panels are heap-allocated and parented to a `wxWindow`. wxWidgets owns the lifetime — do **not** wrap them in `unique_ptr`. `IGameView` instances themselves are owned by `app/main.cpp` (`std::unique_ptr<>`); the panels owned by the views become children of the `MainFrame` splitter on first mount. +4. **Custom events**: `EVT_CARD_SELECTED` is fired by the list panel on itself (not its parent). Each `IGameView` binds it on its typed list panel inside the panel's first construction so the typed selection flows directly into the typed selected panel — `MainFrame` never sees a `MagicCard` or a `PokemonCard`. Do not move that binding back into `MainFrame`. +5. **wxFont modifications** mutate in place: `font.MakeBold().MakeLarger()` — do not call `Scale` (it does not exist on wxFont 3.2; use `MakeLarger` / `SetPointSize`). +6. **Single-active-game UX.** `MainFrame` only ever shows one game's panels at a time; the splitter swaps `listPanel()` / `selectedPanel()` when the user picks a different `Game` menu entry. Do not stand up parallel side-by-side tabs for different games. +7. **No `ccm_warnings`.** This target intentionally does **not** link the strict warning interface — wxWidgets headers trip `-Wpedantic` / `-Wshadow`. Keep it that way; do not add the link. +8. **Async background work** must not capture `this` raw. Use the pattern from `BaseSelectedCardPanel`: a `std::shared_ptr` holding `std::atomic alive`, `std::atomic currentGen`, and a back-pointer to the panel; spawn a detached `std::thread`, then deliver the result with `wxTheApp->CallAfter([state, gen, ...]() { if (!state->alive) return; if (state->currentGen != gen) return; ... })`. Flip `alive=false` in the panel destructor so late callbacks become no-ops. +9. **Icons come from `SvgIcons.hpp`.** Don't inline new SVG strings in panel sources; add them to `SvgIcons.{hpp,cpp}` so all panels stay in sync. Always pass a runtime fill color (`wxSystemSettings::GetColour(...).GetAsString(wxC2S_HTML_SYNTAX)`); never bake one into the SVG. +10. **Sort key != display key.** When you add a new column to a list panel, follow the existing pattern: the `wxListCtrl` cell text is one thing; the *sort* comparator lives in `ccm::services::CardSorter` and may key off a different field (the canonical case is `set.name` shown but `set.releaseDate` sorted, so collections list chronologically). New columns must extend `MagicSortColumn` / `PokemonSortColumn` and add a corresponding `case` in `sortMagicCards` / `sortPokemonCards`. +11. **`wxListCtrl` + flag-icon centering (MSW comctl32):** + - Native `LVS_REPORT` sub-item image rendering on MSW left-anchors the bitmap with a small built-in inset, regardless of `wxLIST_FORMAT_CENTER`. It can never align pixel-perfect with our wx-sizer-centered themed header icons, especially after column resize. Don't try to compensate by padding the image-list bitmap or nudging it horizontally — that path was tried and abandoned. + - **Authoritative path:** flag-icon sub-items go through `IconListCtrl::MSWOnNotify` (`NM_CUSTOMDRAW`). It computes the live sub-item rect via `LVM_GETSUBITEMRECT(LVIR_BOUNDS)` and composites the cell's icon at the rect center with `AlphaBlend(... AC_SRC_OVER | AC_SRC_ALPHA)` straight onto `cd->nmcd.hdc`. Each (icon, selection-state) pair has its own pre-built premultiplied 32 bpp BGRA DIB section in `dibBitmaps_`; index `i` holds the normal variant and index `i + iconColCount` holds the selected variant. The cache rebuilds whenever the theme changes (via `setIconBitmaps(...)` from `BaseCardListPanel::rebuildIconBitmaps`). + - We deliberately do **not** route through `ImageList_Draw` / `HIMAGELIST` here. On the verified MinGW-w64 + comctl32 v6 stack, `ImageList_Draw` on an `ILC_COLOR32` list with `ILD_TRANSPARENT` ignored the alpha channel of the bitmap and the "transparent" canvas around each glyph painted as opaque black behind the icon — every row flag rendered as a black rectangle with a white glyph regardless of theme. `AlphaBlend` directly on the listctrl's HDC works in every case we've tested. + - **Bitmap format pitfall — `AlphaBlend` requires PREMULTIPLIED BGRA**, not straight alpha. With straight RGBA the function returns `FALSE` (or, depending on the driver, paints garbage). `makePremultipliedDib` in `IconListCtrl.cpp` does the per-pixel premultiply with the rounded form `(c * a + 127) / 255`. **Do not** simplify that to `c * a / 255` (loss of precision on `c=0xFF, a=0xFF`) and **do not** skip the divide-by-255 entirely (`c * a` overflows the byte and renders the icon as solid white — that was the original failure mode that made an earlier dev abandon premultiplication for a while). Hardcoded-fill SVGs (e.g. baked-in black/white badges) happen to look correct on every path and are **not** a useful sanity check on their own — always verify rendering against a runtime-fill icon (foil / signed / altered / holo) on both light and dark themes. + - The hidden zero-width spacer column at index 0 stays. It's no longer load-bearing for any image-list gutter, but it keeps every other column index stable across the codebase. Start real columns at index 1. + - Insert each row through the spacer column with a `wxListItem` whose mask includes `wxLIST_MASK_IMAGE` and image `-1` so MSW doesn't try to render an item icon for column 0 if a public image list ever gets attached again. + - `AlphaBlend` lives in `msimg32.lib`; `ui_wx/CMakeLists.txt` links `msimg32` on `WIN32`. Don't rely on `gdi32` being enough — `AlphaBlend@44` is **not** in `gdi32`. +12. **Startup/dialog responsiveness rules:** + - Keep first paint fast: avoid heavy synchronous work in window/dialog constructors. + - In `MainFrame`, defer initial collection load with `CallAfter(...)` so the frame paints before I/O/parsing. + - Keep startup's "first row selected" behavior, but schedule initial selection with `CallAfter(...)` in `BaseCardListPanel` to avoid blocking first render. + - Avoid reloading/reparsing sets on each Add/Edit open: each `IGameView` caches its own set list and passes it into the dialog by pointer. + - Pass preloaded sets into `BaseCardEditDialog` by pointer/reference (not by value) to avoid vector copies per open. + - For heavy dialog setup, wrap constructor-time UI population in `Freeze()` / `Thaw()` and append choice items in bulk via `wxArrayString` (`BaseCardEditDialog::buildAndPopulate` does this). +13. **String encoding on Windows (avoid mojibake):** + - Domain/service strings are UTF-8 `std::string`. Do not rely on implicit `std::string <-> wxString` conversions on Windows; those can route through the active ANSI codepage and render `Pokémon` as `Pokémon`. + - UI display path (`std::string` -> wx control): always convert with `wxString::FromUTF8(str.c_str())` before `SetLabelText`, `SetItem`, `Append`, control constructors, etc. + - UI write-back path (wx control -> `std::string`): always convert with `ToStdString(wxConvUTF8)` so persisted/domain text stays UTF-8. + - Apply this rule consistently in shared templates (`BaseCardListPanel`, `BaseSelectedCardPanel`, `BaseCardEditDialog`) because a single implicit conversion in those bases affects every game view. +14. **Theme consistency rules (Windows):** + - Treat dialog roots as `panelBg`, not a separate shade, otherwise label rows can look like mismatched darker boxes. + - Theme dialogs before `ShowModal()` with `applyThemeToWindowTree(...)`; this includes Settings, Create/Edit dialogs, image viewer, About, and custom popup dialogs. + - Do not use native `wxMessageBox` / `wxAboutBox` for app-facing flows that must match dark mode. Use themed popup helpers (or a custom themed `wxDialog`) so body/buttons stay in sync with the app palette. + - Center popup dialogs on the app window (`CentreOnParent()`) so confirmations/info boxes open relative to the current app window. + - Include `wxSpinCtrl` in themed input controls (Amount field) or it will keep a mismatched native background. + - Do not call `applyNativeClassTheme(..., "DarkMode_Explorer", "Explorer")` for `wxTextCtrl`; on some Windows builds this causes black typed text in dark mode. Keep text inputs palette-driven (`SetThemeEnabled(false)` in dark/high-contrast as needed). + - If a specific text field still renders wrong while typing (notably `MainFrame`'s filter box), enforce text/background in `MainFrame::MSWWindowProc` via `WM_CTLCOLOREDIT` for that control handle. + - Keep toolbar button behavior stable under dark/high-contrast: avoid changes that break click/tooltip affordances while experimenting with hover contrast fixes. + - For dark/high-contrast button readability, do not trust native hover/pressed rendering on Windows; custom state painting in `Theme.cpp` is allowed when native visuals ignore configured colors. + - Button event handlers must use per-button state that is refreshed when theme changes. Avoid one-time captures of theme colors/mode in lambdas; these can leak dark-mode behavior into light mode. + - In High Contrast, use stronger hover/pressed deltas than regular dark mode and keep the button border in the foreground/text color for visibility (currently yellow in this palette). + - When validating UI theming changes, rebuild and run `ccm` (the executable), not just `ccm_ui_wx`. +15. **Preview fallback behavior (CCM2 parity):** + - Keep unresolved external previews user-visible by showing a per-game card-back image in `BaseSelectedCardPanel` instead of a blank/transparent bitmap. + - Current fallback URLs are intentionally aligned with CCM2: Magic uses `Magic_card_back.jpg`, Pokemon uses `Cardback.jpg`. + - If you change fallback sourcing (URL -> local asset, etc.), keep the "always show a reasonable card-back fallback" behavior intact for both games. + +## Required follow-ups + +- After adding a new dialog/panel `.cpp` you **must** add it to `ui_wx/CMakeLists.txt`. +- After adding a new menu action you **must** allocate an `Ids::*` value in `MainFrame.hpp` (don't reuse `wxID_HIGHEST` math inline) and `Bind` it in `buildMenuBar`. The dynamic Game / Sets menus consume the `IdGameMenuBase` / `IdSetsMenuBase` ranges; do not stomp on those id ranges. +- After changing `AppContext` you **must** update `app/main.cpp` so the composition root populates the new field. +- After adding a new icon to `SvgIcons.{hpp,cpp}` you **must** keep the `@FILL@` placeholder so both light- and dark-variant rendering keeps working, and add a small unit-test-equivalent visual check by running the binary (no automated UI tests in this repo). +- After changing one of the `Base*` template hooks (or adding a new one) you **must** keep `docs/adding-a-new-game.md` in sync — the per-game derived classes are the readers of that contract and the doc is what onboarding agents read first. + +## Adding a new game UI + +1. Implement three derived classes under `include/ccm/ui/` mirroring the Magic / Pokemon trio: + - `CardListPanel : public BaseCardListPanel<Card, SortColumn>` — override `declareTextColumns()`, `declareIconColumns()`, `renderTextCell()`, `isIconColumnSet()`, `sortBy()`, `matchesFilter()`. + - `SelectedCardPanel : public BaseSelectedCardPanel<Card>` — override `declareDetailRows()`, `declareFlagIcons()`, `detailValueFor()`, `isFlagSet()`, `previewKey()`, `gameId()`. Define a local `enum` of `DetailKey` constants for clarity. + - `CardEditDialog : public BaseCardEditDialog<Card>` — override `buildFlagsRow()`, optionally `appendExtraRows()`, `readExtraFromCard()`, `writeExtraToCard()`, `updateMenuName()`. +2. Add a `GameView : public IGameView` that owns those panels and the typed `CollectionService<Card>&`. Bind `EVT_CARD_SELECTED` on the list panel inside `listPanel(parent)` to push the typed selection into the selected panel. The `MagicGameView` / `PokemonGameView` pair is the canonical reference. +3. Re-add the new view to `AppContext::gameViews` in the composition root (`app/main.cpp`). The `Game` and `Sets` menus pick it up automatically. +4. Add SVG glyphs for any new flag columns to `SvgIcons.{hpp,cpp}` (with the `@FILL@` placeholder). +5. Register all new `.cpp` files in `ui_wx/CMakeLists.txt`. + +## Commands + +Build UI only: `cmake --build build --target ccm_ui_wx` diff --git a/ui_wx/CMakeLists.txt b/ui_wx/CMakeLists.txt new file mode 100644 index 0000000..13416f0 --- /dev/null +++ b/ui_wx/CMakeLists.txt @@ -0,0 +1,55 @@ +# ccm_ui_wx: wxWidgets adapter. The only target that depends on wx::wx. +# Replace this directory with a different toolkit (Qt, Dear ImGui, ...) without +# touching ccm_core. + +add_library(ccm_ui_wx STATIC + src/MainFrame.cpp + src/BaseEvents.cpp + + src/MagicCardListPanel.cpp + src/MagicSelectedCardPanel.cpp + src/MagicCardEditDialog.cpp + src/MagicGameView.cpp + + src/PokemonCardListPanel.cpp + src/PokemonSelectedCardPanel.cpp + src/PokemonCardEditDialog.cpp + src/PokemonGameView.cpp + + src/SettingsDialog.cpp + src/ImageViewerDialog.cpp + src/IconListCtrl.cpp + src/SvgIcons.cpp + src/Theme.cpp +) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/include/ccm/ui/AppVersion.hpp.in + ${CMAKE_CURRENT_BINARY_DIR}/generated/ccm/ui/AppVersion.hpp + @ONLY +) + +target_include_directories(ccm_ui_wx + PUBLIC + $ + $ +) + +target_link_libraries(ccm_ui_wx + PUBLIC + ccm_core + wx::wx + # Intentionally NOT linking ccm_warnings here: wxWidgets headers raise + # spurious diagnostics under -Wpedantic / -Wshadow that we'd have to + # suppress per-call. The strict warning set is reserved for ccm_core. +) + +# IconListCtrl uses AlphaBlend (msimg32) directly in NM_CUSTOMDRAW to render +# the per-row flag glyphs with proper transparency. Without msimg32 linked +# explicitly the linker fails on `AlphaBlend@44` even though gdi32 is pulled +# in transitively by wxWidgets. +if (WIN32) + target_link_libraries(ccm_ui_wx PRIVATE msimg32) +endif() + +target_compile_features(ccm_ui_wx PUBLIC cxx_std_20) diff --git a/ui_wx/include/ccm/ui/AppContext.hpp b/ui_wx/include/ccm/ui/AppContext.hpp new file mode 100644 index 0000000..bbda406 --- /dev/null +++ b/ui_wx/include/ccm/ui/AppContext.hpp @@ -0,0 +1,34 @@ +#pragma once + +// AppContext: the only thing that crosses the UI boundary. Holds references +// to the shared core services and to the per-game `IGameView` instances. The +// wxWidgets layer never sees a concrete adapter type or a typed +// `CollectionService` - swap in a Qt/imgui frontend by reimplementing +// the consumers of this struct only. + +#include "ccm/games/IGameModule.hpp" +#include "ccm/services/CardPreviewService.hpp" +#include "ccm/services/ConfigService.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/services/SetService.hpp" + +#include + +namespace ccm::ui { + +class IGameView; + +struct AppContext { + ConfigService& config; + SetService& sets; + ImageService& images; + CardPreviewService& cardPreview; + IGameModule& magicModule; + IGameModule& pokemonModule; + // Active per-game UI bundles. The order is the order shown in the + // Game menu; the composition root constructs them and hands raw + // pointers in. `MainFrame` does not own these — `app/main.cpp` does. + std::vector gameViews; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/AppVersion.hpp.in b/ui_wx/include/ccm/ui/AppVersion.hpp.in new file mode 100644 index 0000000..e583441 --- /dev/null +++ b/ui_wx/include/ccm/ui/AppVersion.hpp.in @@ -0,0 +1,7 @@ +#pragma once + +namespace ccm::ui { + +inline constexpr const char* kAppVersion = "@CCM_APP_VERSION@"; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/BaseCardEditDialog.hpp b/ui_wx/include/ccm/ui/BaseCardEditDialog.hpp new file mode 100644 index 0000000..5462449 --- /dev/null +++ b/ui_wx/include/ccm/ui/BaseCardEditDialog.hpp @@ -0,0 +1,524 @@ +#pragma once + +// BaseCardEditDialog +// +// Header-only template for the modal create/edit form. Owns the parts every +// game shares — Name, Set picker (read-only combo with prefix typeahead), +// Amount spin, Language and Condition choices, Note, Image list with +// Add/Remove/double-click-to-view, OK/Cancel — and exposes hooks the +// subclass uses to: +// +// - declare a flags row (`Foil` for Magic, `Holo` + `1. Edition` for Pokemon, ...) +// - declare any extra game-specific text fields (`Set #` for Pokemon) +// - read/write the typed `TCard` +// +// New games extend this template — see `MagicCardEditDialog` and +// `PokemonCardEditDialog` for the canonical patterns. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/services/SetService.hpp" +#include "ccm/ui/ImageViewerDialog.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __WXMSW__ +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ccm::ui { + +enum class EditMode { Create, Edit }; + +template +class BaseCardEditDialog : public wxDialog { +public: + using card_type = TCard; + + [[nodiscard]] const TCard& card() const noexcept { return card_; } + +protected: + BaseCardEditDialog(wxWindow* parent, + const wxString& title, + ImageService& imageService, + SetService& setService, + EditMode mode, + TCard initial, + Game game, + const std::vector* preloadedSets = nullptr) + : wxDialog(parent, wxID_ANY, title, + wxDefaultPosition, wxSize(560, 540), + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), + imageService_(imageService), + setService_(setService), + mode_(mode), + card_(std::move(initial)), + game_(game), + preloadedSets_(preloadedSets) {} + + // Subclass calls this from its constructor body once it can answer the + // virtual hooks below. + void buildAndPopulate() { + Freeze(); + if (preloadedSets_ == nullptr) { + readSets(); + } + buildLayout(); + populateChoices(); + Thaw(); + } + + // Hooks ------------------------------------------------------------------- + + // Subclass appends its game-specific check boxes / inputs onto `flagsBox` + // (a horizontal `wxBoxSizer`). Build and bind the widgets the subclass + // wants; the base only owns the surrounding label. + virtual void buildFlagsRow(wxBoxSizer* flagsBox) = 0; + + // Subclass adds any extra game-specific labelled rows just below the + // standard rows but above the Note row, by calling `appendRow(label, ctrl)` + // (provided as a parameter). Default does nothing. + using AppendRowFn = void (*)(BaseCardEditDialog*, const wxString&, wxWindow*); + virtual void appendExtraRows(wxFlexGridSizer* /*grid*/) {} + + // Subclass copies the extra fields it owns from `card_` into its widgets. + virtual void readExtraFromCard() {} + + // Subclass copies the extra fields it owns from its widgets back into `card_`. + virtual void writeExtraToCard() {} + + [[nodiscard]] virtual std::string updateMenuName() const { return "Update Sets"; } + + // Display name passed into errors and the dialog title hints. + [[nodiscard]] virtual std::string emptySetMessage() const { + return "(no sets cached - use Sets > " + updateMenuName() + ")"; + } + + // Common helpers ---------------------------------------------------------- + + void appendRow(wxFlexGridSizer* grid, const wxString& label, wxWindow* ctrl) { + grid->Add(new wxStaticText(this, wxID_ANY, label), + 0, wxALIGN_CENTER_VERTICAL); + grid->Add(ctrl, 1, wxEXPAND); + } + + [[nodiscard]] TCard& mutableCard() noexcept { return card_; } + [[nodiscard]] const TCard& constCard() const noexcept { return card_; } + +private: + void readSets() { + auto loaded = setService_.getSets(game_); + if (loaded.isOk()) { + sets_ = std::move(loaded).value(); + } + } + + [[nodiscard]] const std::vector& availableSets() const noexcept { + return preloadedSets_ != nullptr ? *preloadedSets_ : sets_; + } + + void buildLayout() { + auto* root = new wxBoxSizer(wxVERTICAL); + auto* grid = new wxFlexGridSizer(2, 6, 8); + grid->AddGrowableCol(1, 1); + + nameCtrl_ = new wxTextCtrl(this, wxID_ANY, wxString::FromUTF8(card_.name.c_str())); + appendRow(grid, "Name", nameCtrl_); + + setCombo_ = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, + nullptr, wxCB_READONLY); + appendRow(grid, "Set", setCombo_); + + // Subclass extra rows go between Set and Amount (Pokemon adds Set #). + appendExtraRows(grid); + + amountCtrl_ = new wxSpinCtrl(this, wxID_ANY, "", wxDefaultPosition, + wxDefaultSize, wxSP_ARROW_KEYS, 1, 255, card_.amount); + appendRow(grid, "Amount", amountCtrl_); + + languageChoice_ = new wxChoice(this, wxID_ANY); + appendRow(grid, "Language", languageChoice_); + + conditionChoice_ = new wxChoice(this, wxID_ANY); + appendRow(grid, "Condition", conditionChoice_); + + noteCtrl_ = new wxTextCtrl(this, wxID_ANY, wxString::FromUTF8(card_.note.c_str()), + wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE); + appendRow(grid, "Note", noteCtrl_); + + auto* flagsBox = new wxBoxSizer(wxHORIZONTAL); + buildFlagsRow(flagsBox); + grid->Add(new wxStaticText(this, wxID_ANY, "Flags"), + 0, wxALIGN_CENTER_VERTICAL); + grid->Add(flagsBox, 1, wxEXPAND); + + root->Add(grid, 0, wxALL | wxEXPAND, 10); + + auto* imgBox = new wxStaticBoxSizer(wxVERTICAL, this, "Images"); + imagesList_ = new wxListBox(this, wxID_ANY); + for (const auto& name : card_.images) imagesList_->Append(wxString::FromUTF8(name.c_str())); + imgBox->Add(imagesList_, 1, wxEXPAND | wxALL, 4); + + auto* imgButtons = new wxBoxSizer(wxHORIZONTAL); + auto* addBtn = new wxButton(this, wxID_ANY, "Add image..."); + auto* rmBtn = new wxButton(this, wxID_ANY, "Remove image"); + imgButtons->Add(addBtn, 0, wxRIGHT, 6); + imgButtons->Add(rmBtn, 0); + imgBox->Add(imgButtons, 0, wxALL, 4); + root->Add(imgBox, 1, wxEXPAND | wxLEFT | wxRIGHT, 10); + + addBtn->Bind(wxEVT_BUTTON, &BaseCardEditDialog::onAddImage, this); + rmBtn->Bind (wxEVT_BUTTON, &BaseCardEditDialog::onRemoveImage, this); + imagesList_->Bind(wxEVT_LISTBOX_DCLICK, &BaseCardEditDialog::onImageActivated, this); + + auto* btns = CreateButtonSizer(wxOK | wxCANCEL); + if (btns) { + root->Add(btns, 0, wxLEFT | wxTOP | wxRIGHT | wxEXPAND, 10); + root->AddSpacer(24); + } + + Bind(wxEVT_BUTTON, &BaseCardEditDialog::onOk, this, wxID_OK); + + setCombo_->Bind(wxEVT_CHAR, &BaseCardEditDialog::onSetComboChar, this); + setCombo_->Bind(wxEVT_KILL_FOCUS, &BaseCardEditDialog::onSetComboKillFocus, this); + + SetSizer(root); + + readExtraFromCard(); + + CallAfter([this]() { + if (nameCtrl_) { + nameCtrl_->SetInsertionPoint(0); + nameCtrl_->ShowPosition(0); + } + if (noteCtrl_) { + noteCtrl_->SetInsertionPoint(0); + noteCtrl_->ShowPosition(0); + } + }); + } + + void populateChoices() { + const auto& available = availableSets(); + setTypeaheadPrefix_.clear(); + setCombo_->Clear(); + auto lowerAscii = [](std::string s) { + std::transform(s.begin(), s.end(), s.begin(), + [](unsigned char ch) { return static_cast(std::tolower(ch)); }); + return s; + }; + const std::string selectedSetId = lowerAscii(card_.set.id); + int selectIdx = wxNOT_FOUND; + wxArrayString setNames; + setNames.Alloc(available.size()); + for (std::size_t i = 0; i < available.size(); ++i) { + setNames.Add(wxString::FromUTF8(available[i].name.c_str())); + if (!selectedSetId.empty() && lowerAscii(available[i].id) == selectedSetId) { + selectIdx = static_cast(i); + } + } + if (!setNames.empty()) { + setCombo_->Append(setNames); + } + if (selectIdx == wxNOT_FOUND && !available.empty()) selectIdx = 0; + if (selectIdx != wxNOT_FOUND) setCombo_->SetSelection(selectIdx); + if (available.empty()) { + setCombo_->Append(emptySetMessage()); + setCombo_->SetSelection(0); + setCombo_->Disable(); + } + + languageChoice_->Clear(); + int langIdx = 0; + int i = 0; + wxArrayString langs; + langs.Alloc(allLanguages().size()); + for (auto l : allLanguages()) { + const std::string lang = std::string(to_string(l)); + langs.Add(wxString::FromUTF8(lang.c_str())); + if (l == card_.language) langIdx = i; + ++i; + } + if (!langs.empty()) { + languageChoice_->Append(langs); + } + languageChoice_->SetSelection(langIdx); + + conditionChoice_->Clear(); + int condIdx = 0; + i = 0; + wxArrayString conditions; + conditions.Alloc(allConditions().size()); + for (auto c : allConditions()) { + const std::string cond = std::string(to_string(c)); + conditions.Add(wxString::FromUTF8(cond.c_str())); + if (c == card_.condition) condIdx = i; + ++i; + } + if (!conditions.empty()) { + conditionChoice_->Append(conditions); + } + conditionChoice_->SetSelection(condIdx); + } + + void writeFromControls() { + const auto& available = availableSets(); + card_.name = nameCtrl_->GetValue().ToStdString(wxConvUTF8); + card_.amount = static_cast(amountCtrl_->GetValue()); + card_.note = noteCtrl_->GetValue().ToStdString(wxConvUTF8); + + if (!available.empty() && setCombo_->IsEnabled()) { + const int sel = setCombo_->GetSelection(); + if (sel >= 0 && static_cast(sel) < available.size()) { + card_.set = available[static_cast(sel)]; + } + } + if (auto l = languageFromString(languageChoice_->GetStringSelection().ToStdString(wxConvUTF8))) { + card_.language = *l; + } + if (auto c = conditionFromString(conditionChoice_->GetStringSelection().ToStdString(wxConvUTF8))) { + card_.condition = *c; + } + + writeExtraToCard(); + } + + void onAddImage(wxCommandEvent&) { + wxFileDialog dlg(this, "Choose image(s)", + wxEmptyString, wxEmptyString, + "Image files (*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg", + wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); + if (dlg.ShowModal() != wxID_OK) return; + + writeFromControls(); + if (card_.name.empty() || card_.set.id.empty()) { + showThemedMessageDialog(this, "Set the card name and set before adding images.", + "Add image", wxOK | wxICON_INFORMATION); + return; + } + wxArrayString paths; + dlg.GetPaths(paths); + + std::vector failed; + failed.reserve(static_cast(paths.size())); + + for (const auto& path : paths) { + auto added = imageService_.addImage(game_, + std::filesystem::path(path.ToStdString()), + mode_ == EditMode::Create, + card_.id, + card_.set.name, + card_.name, + card_.images); + if (!added) { + failed.push_back(path.ToStdString() + " (" + added.error() + ")"); + continue; + } + card_.images.push_back(added.value()); + imagesList_->Append(added.value()); + } + + if (!failed.empty()) { + std::string msg = "Some images could not be added:\n\n"; + for (const auto& err : failed) { + msg += "- " + err + '\n'; + } + showThemedMessageDialog(this, msg, "Add image", wxOK | wxICON_WARNING); + } + } + + void onRemoveImage(wxCommandEvent&) { + const int sel = imagesList_->GetSelection(); + if (sel == wxNOT_FOUND) return; + const std::string name = imagesList_->GetString(sel).ToStdString(wxConvUTF8); + auto rm = imageService_.removeImage(game_, name); + if (!rm) { + showThemedMessageDialog(this, "Failed to remove image: " + rm.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + card_.images.erase(card_.images.begin() + sel); + imagesList_->Delete(static_cast(sel)); + } + + void onImageActivated(wxCommandEvent& event) { + const int sel = event.GetSelection(); + if (sel < 0 || static_cast(sel) >= card_.images.size()) return; + + std::vector paths; + paths.reserve(card_.images.size()); + for (const auto& name : card_.images) { + paths.push_back(imageService_.resolveImagePath(game_, name)); + } + ImageViewerDialog dlg(this, std::move(paths), static_cast(sel)); + const Theme theme = inferThemeFromWindow(this); + applyThemeToWindowTree(&dlg, paletteForTheme(theme), theme); + dlg.ShowModal(); + } + + void onOk(wxCommandEvent& ev) { + writeFromControls(); + if (card_.name.empty()) { + showThemedMessageDialog(this, "Name is required.", "Add card", + wxOK | wxICON_INFORMATION); + return; + } + if (card_.set.id.empty()) { + showThemedMessageDialog(this, "Pick a set first (use Sets > " + updateMenuName() + " if the list is empty).", + "Add card", wxOK | wxICON_INFORMATION); + return; + } + ev.Skip(); + } + + [[nodiscard]] bool setComboTypingSurfaceActive() const { + wxWindow* focus = wxWindow::FindFocus(); + if (!setCombo_) return false; + + auto enclosedBy = [](wxWindow* root, wxWindow* leaf) -> bool { + if (!root || !leaf) return false; + for (wxWindow* w = leaf; w != nullptr; w = w->GetParent()) { + if (w == root) return true; + } + return false; + }; + + if (enclosedBy(setCombo_, focus)) return true; + +#ifdef __WXMSW__ + static constexpr UINT kCbGetDroppedState = 0x0157; // CB_GETDROPPEDSTATE + WXHWND wxh = setCombo_->GetHandle(); + const HWND h = reinterpret_cast(wxh); + return h != nullptr && ::SendMessageW(h, kCbGetDroppedState, 0, 0) != 0; +#else + return false; +#endif + } + + void applySetTypeaheadSelection() { + const auto& available = availableSets(); + if (!setCombo_ || available.empty()) return; + wxString pref = setTypeaheadPrefix_; + pref.MakeLower(); + if (pref.empty()) return; + for (std::size_t i = 0; i < available.size(); ++i) { + wxString name(wxString::FromUTF8(available[i].name)); + name.MakeLower(); + if (name.StartsWith(pref)) { + setCombo_->SetSelection(static_cast(i)); + return; + } + } + } + + void onSetComboChar(wxKeyEvent& ev) { + if (!setCombo_->IsEnabled() || availableSets().empty()) { + ev.Skip(); + return; + } + + const int mods = ev.GetModifiers(); + if ((mods & (wxMOD_CONTROL | wxMOD_ALT | wxMOD_META)) != 0) { + ev.Skip(); + return; + } + + const auto now = std::chrono::steady_clock::now(); + if (!setTypeaheadPrefix_.empty() && + now - setTypeaheadLastKey_ > kSetTypeaheadResetMs) { + setTypeaheadPrefix_.clear(); + } + setTypeaheadLastKey_ = now; + + const int code = ev.GetKeyCode(); + + if (code == WXK_BACK) { + if (!setTypeaheadPrefix_.empty()) + setTypeaheadPrefix_.RemoveLast(); + applySetTypeaheadSelection(); + ev.Skip(false); + return; + } + + if (code == WXK_TAB || code == WXK_RETURN || code == WXK_ESCAPE || + code == WXK_UP || code == WXK_DOWN || code == WXK_LEFT || code == WXK_RIGHT || + code == WXK_HOME || code == WXK_END || code == WXK_PAGEUP || code == WXK_PAGEDOWN || + code == WXK_NUMPAD_ENTER || code == WXK_INSERT || code == WXK_DELETE || + code == WXK_F4 || (code >= WXK_F1 && code <= WXK_F24)) { + ev.Skip(); + return; + } + + wxChar uc = static_cast(ev.GetUnicodeKey()); + if (uc == WXK_NONE && code == WXK_SPACE) + uc = wxT(' '); + if (uc == WXK_NONE && code >= 32 && code < 127) + uc = static_cast(code); + + if (uc == WXK_NONE || static_cast(uc) < 32u) { + ev.Skip(); + return; + } + + wxString chunk(uc); + chunk.MakeLower(); + setTypeaheadPrefix_ += chunk; + applySetTypeaheadSelection(); + ev.Skip(false); + } + + void onSetComboKillFocus(wxFocusEvent& ev) { + if (!setComboTypingSurfaceActive()) { + setTypeaheadPrefix_.clear(); + } + ev.Skip(); + } + + ImageService& imageService_; + SetService& setService_; + EditMode mode_; + TCard card_; + Game game_; + + std::vector sets_; + const std::vector* preloadedSets_{nullptr}; + + wxTextCtrl* nameCtrl_{nullptr}; + wxComboBox* setCombo_{nullptr}; + wxSpinCtrl* amountCtrl_{nullptr}; + wxChoice* languageChoice_{nullptr}; + wxChoice* conditionChoice_{nullptr}; + wxTextCtrl* noteCtrl_{nullptr}; + wxListBox* imagesList_{nullptr}; + + wxString setTypeaheadPrefix_; + std::chrono::steady_clock::time_point setTypeaheadLastKey_{}; + static constexpr std::chrono::milliseconds kSetTypeaheadResetMs{1000}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/BaseCardListPanel.hpp b/ui_wx/include/ccm/ui/BaseCardListPanel.hpp new file mode 100644 index 0000000..dba1d9d --- /dev/null +++ b/ui_wx/include/ccm/ui/BaseCardListPanel.hpp @@ -0,0 +1,681 @@ +#pragma once + +// BaseCardListPanel +// +// Header-only template that owns ALL the non-game-specific machinery for the +// `wxListCtrl`-backed card table: +// +// - hidden zero-width spacer column (MSW comctl32 image-list gutter +// workaround; see `ui_wx/AGENTS.md` for the rationale) +// - app-owned themed header row (clickable to sort, edge-drag to resize, +// divider double-click to autosize) - native `wxListCtrl` header is +// unreliable in Windows dark mode +// - custom-drawn flag-icon sub-items via `IconListCtrl` so row icons sit +// pixel-perfect centered under the themed-header icons regardless of +// column width (native `LVS_REPORT` sub-item images left-anchor with an +// inset and would never align with our centered header icons) +// - rebuild guard so DESELECTED/SELECTED storms during rebuild collapse +// into a single bubbled `EVT_CARD_SELECTED` event +// - case-insensitive substring filter via `setFilter(...)` and per-column +// toggle-direction sort via the header click +// +// Game-specific behavior is exposed as virtual hooks the derived class fills +// in (template method pattern): +// +// declareTextColumns() -> spec list (label, width, format) for the leading +// "value-key" columns and the trailing Note column +// declareIconColumns() -> spec list (svg, width, sortColumn) for icon-only +// flag columns (foil/signed/altered, holo, ...) +// renderTextCell(card, idx) -> cell string for text column `idx` +// isIconColumnSet(card, idx) -> whether the n-th icon column shows for this card +// sortColumnForListIdx(col) -> map physical wxListCtrl column to sort key +// sortBy(col, asc) -> in-place stable sort of `cards_` +// matchesFilter(card, f) -> case-insensitive row matcher +// +// New games extend this template — see `MagicCardListPanel` and +// `PokemonCardListPanel` for the canonical patterns. + +#include "ccm/ui/IconListCtrl.hpp" +#include "ccm/ui/SvgIcons.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ccm::ui { + +// Single shared selection-changed event. The base panel raises this on the +// parent every time the active card changes (after a rebuild settles, after a +// user click, etc.). Defined once in `BaseEvents.cpp` so the wxEvent table is +// not duplicated per template instantiation. +wxDECLARE_EVENT(EVT_CARD_SELECTED, wxCommandEvent); + +template +class BaseCardListPanel : public wxPanel { +public: + using card_type = TCard; + using sort_column_type = TSortColumn; + + // Replace the displayed rows. Selection is reset (the panel will pick + // the first row on the next idle turn — see rebuildRows()). + void setCards(std::vector cards) { + cards_ = std::move(cards); + // Drop sort state when the underlying data is replaced - the indicator + // shown in the header should match the order actually rendered, and + // wxListCtrl keeps the indicator across DeleteAllItems(). + nextDirByCol_.clear(); + list_->RemoveSortIndicator(); + rebuildRows(); + if (!autoSizedOnce_ && !cards_.empty()) { + autoSizeAllColumns(); + autoSizedOnce_ = true; + } + } + + // Update the filter string and rebuild the visible rows in place. The + // panel preserves the previously-selected card across the rebuild when + // it still matches the new filter; otherwise the first remaining row is + // selected, or none if the filter excluded everything. A single + // EVT_CARD_SELECTED is emitted afterwards so the parent re-syncs. + void setFilter(std::string_view filter) { + if (filter_ == filter) return; + filter_.assign(filter); + std::optional keepId; + if (auto sel = selected()) keepId = sel->id; + rebuildRows(keepId); + } + + void applyTheme(const ThemePalette& palette) { + list_->SetBackgroundColour(palette.inputBg); + list_->SetForegroundColour(palette.inputText); + SetBackgroundColour(palette.panelBg); + SetForegroundColour(palette.text); + rebuildIconBitmaps(palette.inputText, wxColour(255, 255, 255)); + refreshHeaderTheme(palette); + std::optional keepId; + if (auto sel = selected()) keepId = sel->id; + rebuildRows(keepId); + Refresh(); + } + + [[nodiscard]] const std::vector& cards() const noexcept { return cards_; } + [[nodiscard]] const std::string& filter() const noexcept { return filter_; } + [[nodiscard]] std::optional selected() const { + const long sel = list_->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (const TCard* c = cardForRow(sel)) return *c; + return std::nullopt; + } + + // Ensure the selected row is actively focused so Windows uses the active + // highlight color (blue in light mode), keeping selected-row icons legible. + void activateSelection() { + if (list_ == nullptr || list_->GetItemCount() <= 0) return; + long row = list_->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (row < 0) row = 0; + list_->SetItemState(row, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); + list_->EnsureVisible(row); + list_->SetFocus(); + } + +protected: + // Column descriptor types ------------------------------------------------- + + struct TextColumnSpec { + std::string label; + int width; + wxListColumnFormat format; // wxLIST_FORMAT_LEFT / RIGHT / CENTER + std::optional sortColumn; // none = not sortable + }; + + struct IconColumnSpec { + const char* svg; + int width; + std::optional sortColumn; + }; + + // Subclass hooks ---------------------------------------------------------- + + // Subclass declares its leading text columns (Name, Set, ...). Order + // matches the on-screen left-to-right ordering. The trailing "Note" column + // is also returned here as the last entry — it is added AFTER the icon + // columns by the base. + [[nodiscard]] virtual std::vector declareTextColumns() const = 0; + + // Subclass declares the icon flag columns (Foil/Signed/Altered, etc.). + // These render between the leading text columns and the trailing Note. + [[nodiscard]] virtual std::vector declareIconColumns() const = 0; + + [[nodiscard]] virtual std::string renderTextCell(const TCard& card, std::size_t idx) const = 0; + [[nodiscard]] virtual bool isIconColumnSet(const TCard& card, std::size_t idx) const = 0; + + virtual void sortBy(TSortColumn column, bool ascending) = 0; + [[nodiscard]] virtual bool matchesFilter(const TCard& card, std::string_view filter) const = 0; + + // Construction ------------------------------------------------------------ + + explicit BaseCardListPanel(wxWindow* parent) : wxPanel(parent, wxID_ANY) {} + + // Subclass calls this once from its constructor body (after virtual hooks + // are reachable) to wire up columns + the header row + custom-draw hooks. + void buildLayout() { + list_ = new IconListCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, + wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER); + + textCols_ = declareTextColumns(); + iconCols_ = declareIconColumns(); + + // Note must be the *last* text column. We render it after the icons. + // Layout: [hidden spacer] [textCols_-1 leading text cols] [icon cols] [last text col]. + if (textCols_.empty()) { + // No text columns at all is unsupported; the trailing note column + // is required by the panel layout. + textCols_.push_back({"Note", 220, wxLIST_FORMAT_LEFT, std::nullopt}); + } + + buildHeaderRow(); + + // Column 0 is a hidden spacer kept for historical reasons (it used + // to swallow MSW's mandatory item-icon gutter when we had an image + // list). It is harmless now that row icons go through NM_CUSTOMDRAW + // and is preserved so existing column-index math stays correct. + list_->AppendColumn("", wxLIST_FORMAT_LEFT, 0); + + // Leading text columns (everything except the last). + for (std::size_t i = 0; i + 1 < textCols_.size(); ++i) { + list_->AppendColumn(textCols_[i].label, textCols_[i].format, textCols_[i].width); + } + // Icon columns. Format is irrelevant here — we paint the icon + // ourselves, exactly centered, in `IconListCtrl::MSWOnNotify`. + for (const auto& ic : iconCols_) { + list_->AppendColumn("", wxLIST_FORMAT_CENTER, ic.width); + } + rebuildIconBitmaps(wxColour(20, 20, 20), wxColour(255, 255, 255)); + // Trailing Note column. + const auto& last = textCols_.back(); + list_->AppendColumn(last.label, last.format, last.width); + + // Wire NM_CUSTOMDRAW callbacks so row icons render centered in their + // sub-item rect. The predicate maps a (row, iconIdx) back through the + // filtered card vector so we ask the same `isIconColumnSet(...)` hook + // the rest of the panel uses. The bitmap cache was already pushed + // into `list_` by `rebuildIconBitmaps(...)` above. + list_->setIconColumns(firstIconColIdx(), iconColCount()); + list_->setIconPredicate([this](long row, int iconIdx) { + const TCard* c = cardForRow(row); + if (c == nullptr) return false; + if (iconIdx < 0 || static_cast(iconIdx) >= iconCols_.size()) { + return false; + } + return isIconColumnSet(*c, static_cast(iconIdx)); + }); + + auto* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(headerRow_, 0, wxEXPAND); + sizer->Add(list_, 1, wxEXPAND); + SetSizer(sizer); + + list_->Bind(wxEVT_LIST_ITEM_SELECTED, &BaseCardListPanel::onSelectionChanged, this); + list_->Bind(wxEVT_LIST_ITEM_DESELECTED, &BaseCardListPanel::onSelectionChanged, this); + } + + // Forwarded helpers ------------------------------------------------------ + + // wxListCtrl column indices for derived helpers. + [[nodiscard]] int firstTextColIdx() const noexcept { return 1; } + [[nodiscard]] int firstIconColIdx() const noexcept { + return 1 + static_cast(textCols_.size()) - 1; + } + [[nodiscard]] int noteColIdx() const noexcept { + return firstIconColIdx() + static_cast(iconCols_.size()); + } + [[nodiscard]] int textColCount() const noexcept { + return static_cast(textCols_.size()); + } + [[nodiscard]] int iconColCount() const noexcept { + return static_cast(iconCols_.size()); + } + + [[nodiscard]] wxListCtrl* listCtrl() const noexcept { return list_; } + + // Mutable access to the underlying vector for the typed `sortBy` hook + // (the sort runs in-place on the same vector the base owns, so we can't + // hand the subclass a copy). + [[nodiscard]] std::vector& mutableCards() noexcept { return cards_; } + +private: + // ----- header row construction ------------------------------------------- + + void buildHeaderRow() { + headerRow_ = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + auto* s = new wxBoxSizer(wxHORIZONTAL); + headerCells_.clear(); + headerCellToCol_.clear(); + headerIcons_.clear(); + + auto bindHeaderEvents = [this](wxWindow* hit, int col) { + hit->Bind(wxEVT_LEFT_DOWN, [this, col](wxMouseEvent& ev) { onHeaderMouseDown(col, ev); }); + hit->Bind(wxEVT_MOTION, [this, col](wxMouseEvent& ev) { onHeaderMouseMove(col, ev); }); + hit->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& ev) { onHeaderMouseUp(ev); }); + hit->Bind(wxEVT_LEFT_DCLICK, + [this, col](wxMouseEvent& ev) { onHeaderDoubleClick(col, ev); }); + }; + auto addText = [&](const wxString& label, int width, int col) { + auto* p = new wxPanel(headerRow_, wxID_ANY, wxDefaultPosition, wxSize(width, -1), wxBORDER_NONE); + auto* ps = new wxBoxSizer(wxHORIZONTAL); + auto* t = new wxStaticText(p, wxID_ANY, label); + ps->Add(t, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 4); + p->SetSizer(ps); + p->SetMinSize(wxSize(width, -1)); + bindHeaderEvents(p, col); + bindHeaderEvents(t, col); + s->Add(p, 0, wxEXPAND); + headerCells_.push_back(p); + headerCellToCol_[p] = col; + }; + auto addIcon = [&](const char* svg, int width, int col) { + auto* p = new wxPanel(headerRow_, wxID_ANY, wxDefaultPosition, wxSize(width, -1), wxBORDER_NONE); + auto* ps = new wxBoxSizer(wxHORIZONTAL); + auto bmp = svgIconBitmap(svg, kFlagIconSize, "#E6E6E6"); + auto* b = new wxStaticBitmap(p, wxID_ANY, bmp); + ps->AddStretchSpacer(1); + ps->Add(b, 0, wxALIGN_CENTER_VERTICAL); + ps->AddStretchSpacer(1); + p->SetSizer(ps); + p->SetMinSize(wxSize(width, -1)); + bindHeaderEvents(p, col); + bindHeaderEvents(b, col); + s->Add(p, 0, wxEXPAND); + headerCells_.push_back(p); + headerCellToCol_[p] = col; + headerIcons_.push_back({b, svg}); + }; + + const int firstText = firstTextColIdx(); + // Leading text columns. + for (std::size_t i = 0; i + 1 < textCols_.size(); ++i) { + addText(textCols_[i].label, textCols_[i].width, firstText + static_cast(i)); + } + const int firstIcon = firstIconColIdx(); + for (std::size_t i = 0; i < iconCols_.size(); ++i) { + addIcon(iconCols_[i].svg, iconCols_[i].width, firstIcon + static_cast(i)); + } + const int noteCol = noteColIdx(); + addText(textCols_.back().label, textCols_.back().width, noteCol); + + headerRow_->SetSizer(s); + } + + // ----- header drag-resize / sort hit-test --------------------------------- + + [[nodiscard]] bool isResizeGripHit(int col, int x) const { + const int firstText = firstTextColIdx(); + if (col < firstText || col > noteColIdx()) return false; + const std::size_t idx = static_cast(col - firstText); + if (idx >= headerCells_.size() || headerCells_[idx] == nullptr) return false; + const int w = headerCells_[idx]->GetSize().GetWidth(); + return x >= (w - kResizeGripPx); + } + + void setColumnWidth(int col, int width) { + // Icon columns get a tighter min so they don't grow when dragged. + const int firstIcon = firstIconColIdx(); + const int lastIcon = firstIcon + iconColCount() - 1; + const int minWidth = (col >= firstIcon && col <= lastIcon) ? 24 : 40; + const int nextWidth = std::max(minWidth, width); + list_->SetColumnWidth(col, nextWidth); + const std::size_t idx = static_cast(col - firstTextColIdx()); + if (idx < headerCells_.size() && headerCells_[idx] != nullptr) { + headerCells_[idx]->SetMinSize(wxSize(nextWidth, -1)); + } + // Row icons are drawn from the live sub-item rect via NM_CUSTOMDRAW, + // so column resizing automatically re-centers them on the next paint + // — no image-list rebuild needed. + headerRow_->Layout(); + } + + void autoSizeColumn(int col) { + list_->SetColumnWidth(col, wxLIST_AUTOSIZE); + const int contentWidth = list_->GetColumnWidth(col); + list_->SetColumnWidth(col, wxLIST_AUTOSIZE_USEHEADER); + const int headerWidth = list_->GetColumnWidth(col); + setColumnWidth(col, std::max(contentWidth, headerWidth)); + } + + void autoSizeAllColumns() { + for (int col = firstTextColIdx(); col <= noteColIdx(); ++col) { + autoSizeColumn(col); + } + } + + void onHeaderMouseDown(int col, wxMouseEvent& ev) { + wxWindow* src = dynamic_cast(ev.GetEventObject()); + wxWindow* cell = src; + while (cell != nullptr && cell->GetParent() != headerRow_) { + cell = cell->GetParent(); + } + if (cell == nullptr) return; + const wxPoint posInCell = cell->ScreenToClient(src->ClientToScreen(ev.GetPosition())); + if (!isResizeGripHit(col, posInCell.x)) return; + + resizingCol_ = true; + activeResizeCol_ = col; + resizeStartScreenX_ = wxGetMousePosition().x; + resizeStartWidth_ = list_->GetColumnWidth(col); + cell->CaptureMouse(); + } + + void onHeaderMouseMove(int col, wxMouseEvent& ev) { + wxWindow* src = dynamic_cast(ev.GetEventObject()); + wxWindow* cell = src; + while (cell != nullptr && cell->GetParent() != headerRow_) { + cell = cell->GetParent(); + } + if (cell == nullptr) return; + + if (resizingCol_ && activeResizeCol_ == col && cell->HasCapture()) { + const int delta = wxGetMousePosition().x - resizeStartScreenX_; + setColumnWidth(col, resizeStartWidth_ + delta); + return; + } + + const wxPoint posInCell = cell->ScreenToClient(src->ClientToScreen(ev.GetPosition())); + cell->SetCursor(isResizeGripHit(col, posInCell.x) + ? wxCursor(wxCURSOR_SIZEWE) + : wxCursor(wxCURSOR_ARROW)); + } + + void onHeaderMouseUp(wxMouseEvent& ev) { + const bool wasResizing = resizingCol_; + wxWindow* src = dynamic_cast(ev.GetEventObject()); + wxWindow* cell = src; + while (cell != nullptr && cell->GetParent() != headerRow_) { + cell = cell->GetParent(); + } + if (cell != nullptr && cell->HasCapture()) { + cell->ReleaseMouse(); + } + resizingCol_ = false; + if (suppressNextHeaderClick_) { + suppressNextHeaderClick_ = false; + activeResizeCol_ = -1; + return; + } + if (!wasResizing && cell != nullptr) { + auto it = headerCellToCol_.find(cell); + if (it != headerCellToCol_.end()) { + onHeaderClick(it->second); + } + } + activeResizeCol_ = -1; + } + + void onHeaderDoubleClick(int col, wxMouseEvent& ev) { + wxWindow* src = dynamic_cast(ev.GetEventObject()); + wxWindow* cell = src; + while (cell != nullptr && cell->GetParent() != headerRow_) { + cell = cell->GetParent(); + } + if (cell == nullptr) return; + + const wxPoint posInCell = cell->ScreenToClient(src->ClientToScreen(ev.GetPosition())); + if (isResizeGripHit(col, posInCell.x)) { + suppressNextHeaderClick_ = true; + autoSizeColumn(col); + } + } + + // Map a physical wxListCtrl column to a sort column. Looks at the + // declared TextColumnSpec/IconColumnSpec lists to find the optional + // `sortColumn` for each column. Returns nullopt for non-sortable columns + // (the spacer column 0 or any text/icon column without a sort key). + [[nodiscard]] std::optional sortColumnForListIdx(int listColIdx) const { + if (listColIdx <= 0) return std::nullopt; + const int firstIcon = firstIconColIdx(); + const int noteCol = noteColIdx(); + if (listColIdx < firstIcon) { + const std::size_t i = static_cast(listColIdx - firstTextColIdx()); + if (i < textCols_.size() - 1) return textCols_[i].sortColumn; + } else if (listColIdx < noteCol) { + const std::size_t i = static_cast(listColIdx - firstIcon); + if (i < iconCols_.size()) return iconCols_[i].sortColumn; + } else if (listColIdx == noteCol) { + return textCols_.back().sortColumn; + } + return std::nullopt; + } + + void onHeaderClick(int col) { + if (resizingCol_) return; + const auto sortCol = sortColumnForListIdx(col); + if (!sortCol) return; + + // Per-column toggle, faithful to TableTemplate.tsx::sortByField. + auto it = nextDirByCol_.find(*sortCol); + const bool ascending = (it == nextDirByCol_.end()) ? true : it->second; + nextDirByCol_[*sortCol] = !ascending; + + std::optional keepId; + if (auto sel = selected()) keepId = sel->id; + + sortBy(*sortCol, ascending); + rebuildRows(keepId); + } + + // ----- cached icon bitmaps for NM_CUSTOMDRAW ----------------------------- + + // Pre-renders the per-icon-column bitmaps used by the custom-draw path in + // `IconListCtrl`. Two color variants per column: the `normal` color for + // unselected rows (paired with the panel's themed text color) and the + // `selected` color drawn on the highlighted row. After rebuilding, the + // bitmaps are pushed into `IconListCtrl` which converts them into a + // single `HIMAGELIST` for `ImageList_Draw` from `NM_CUSTOMDRAW`. See + // `ui_wx/AGENTS.md` convention 11 for why earlier `wxGraphicsContext:: + // DrawBitmap` and raw `AlphaBlend` paths were abandoned. + void rebuildIconBitmaps(const wxColour& normal, const wxColour& selected) { + iconBitmapsNormal_.clear(); + iconBitmapsSelected_.clear(); + iconBitmapsNormal_.reserve(iconCols_.size()); + iconBitmapsSelected_.reserve(iconCols_.size()); + const std::string normalHex = normal.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + const std::string selectedHex = selected.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + for (const auto& ic : iconCols_) { + iconBitmapsNormal_.push_back( + svgIconBitmap(ic.svg, kFlagIconSize, normalHex.c_str())); + iconBitmapsSelected_.push_back( + svgIconBitmap(ic.svg, kFlagIconSize, selectedHex.c_str())); + } + if (list_ != nullptr) { + list_->setIconBitmaps(iconBitmapsNormal_, iconBitmapsSelected_); + } + } + + void refreshHeaderTheme(const ThemePalette& palette) { + headerRow_->SetBackgroundColour(palette.inputBg); + headerRow_->SetForegroundColour(palette.inputText); + headerRow_->SetOwnBackgroundColour(palette.inputBg); + headerRow_->SetOwnForegroundColour(palette.inputText); + for (wxWindow* cell : headerCells_) { + if (cell == nullptr) continue; + cell->SetBackgroundColour(palette.inputBg); + cell->SetForegroundColour(palette.inputText); + cell->SetOwnBackgroundColour(palette.inputBg); + cell->SetOwnForegroundColour(palette.inputText); + const wxWindowList& children = cell->GetChildren(); + for (wxWindowList::compatibility_iterator it = children.GetFirst(); it; it = it->GetNext()) { + wxWindow* child = it->GetData(); + if (child == nullptr) continue; + child->SetBackgroundColour(palette.inputBg); + child->SetForegroundColour(palette.inputText); + child->SetOwnBackgroundColour(palette.inputBg); + child->SetOwnForegroundColour(palette.inputText); + } + } + const std::string iconHex = palette.inputText.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + for (auto& it : headerIcons_) { + if (it.first == nullptr || it.second == nullptr) continue; + it.first->SetBitmap(svgIconBitmap(it.second, kFlagIconSize, iconHex.c_str())); + } + headerRow_->Refresh(); + } + + // ----- row rendering ----------------------------------------------------- + + void rebuildRows(std::optional keepId = std::nullopt) { + // Suppress wxListCtrl's natural DESELECTED (from DeleteAllItems) and + // SELECTED (from the SetItemState below) events while we churn through + // the rebuild. See `ui_wx/AGENTS.md` for the rate-limit rationale. + inRebuild_ = true; + list_->DeleteAllItems(); + + filteredIndices_.clear(); + filteredIndices_.reserve(cards_.size()); + for (std::size_t i = 0; i < cards_.size(); ++i) { + if (matchesFilter(cards_[i], filter_)) { + filteredIndices_.push_back(i); + } + } + + long row = 0; + long rowToSelect = -1; + const int firstText = firstTextColIdx(); + const int noteCol = noteColIdx(); + for (std::size_t srcIdx : filteredIndices_) { + const auto& c = cards_[srcIdx]; + // Insert via the hidden column-0 spacer. We never set sub-item + // images: row icons are drawn through `IconListCtrl` custom-draw + // straight onto the device context, exactly centered in the cell. + wxListItem spacerItem; + spacerItem.SetId(row); + spacerItem.SetText(""); + spacerItem.SetImage(-1); + spacerItem.SetMask(wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE); + const long idx = list_->InsertItem(spacerItem); + + // Leading text columns. + for (std::size_t i = 0; i + 1 < textCols_.size(); ++i) { + const std::string cell = renderTextCell(c, i); + list_->SetItem(idx, firstText + static_cast(i), + wxString::FromUTF8(cell.c_str())); + } + // Trailing Note text column. Icon columns intentionally have no + // text and no image — the custom-draw paints them. + const std::string note = renderTextCell(c, textCols_.size() - 1); + list_->SetItem(idx, noteCol, wxString::FromUTF8(note.c_str())); + + if (keepId && c.id == *keepId) rowToSelect = idx; + ++row; + } + bool deferredInitialSelect = false; + if (!filteredIndices_.empty() && rowToSelect >= 0) { + list_->SetItemState(rowToSelect, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); + list_->EnsureVisible(rowToSelect); + } else if (!filteredIndices_.empty() && !keepId.has_value()) { + // Defer the initial selection to the next event turn so first + // paint stays responsive. + deferredInitialSelect = true; + CallAfter([this]() { + if (list_ == nullptr || list_->GetItemCount() <= 0) return; + const long sel = list_->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (sel >= 0) return; + list_->SetItemState(0, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, + wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); + list_->EnsureVisible(0); + }); + } + + inRebuild_ = false; + if (!deferredInitialSelect) { + notifySelectionChanged(); + } + } + + void notifySelectionChanged() { + // Fires the event on the panel itself. The owning IGameView binds + // directly to its typed list panel so the typed selection wiring stays + // local (MainFrame only sees IGameView, never MagicCard / PokemonCard). + wxCommandEvent ev(EVT_CARD_SELECTED, GetId()); + ev.SetEventObject(this); + ProcessWindowEvent(ev); + } + + [[nodiscard]] const TCard* cardForRow(long row) const noexcept { + if (row < 0) return nullptr; + const auto r = static_cast(row); + if (r >= filteredIndices_.size()) return nullptr; + const std::size_t srcIdx = filteredIndices_[r]; + if (srcIdx >= cards_.size()) return nullptr; + return &cards_[srcIdx]; + } + + void onSelectionChanged(wxListEvent& event) { + // wxListCtrl invalidates the row when its selection state changes, + // which re-fires NM_CUSTOMDRAW with the new `CDIS_SELECTED` flag. + // The icon bitmap provider returns the selected-color variant, so + // no per-row icon swap is required here. + (void)event; + if (inRebuild_) return; + notifySelectionChanged(); + } + + // ----- members ---------------------------------------------------------- + + static constexpr int kFlagIconSize = 14; + static constexpr int kResizeGripPx = 5; + + wxPanel* headerRow_{nullptr}; + std::vector headerCells_; + std::vector> headerIcons_; + std::unordered_map headerCellToCol_; + IconListCtrl* list_{nullptr}; + + std::vector textCols_; + std::vector iconCols_; + + bool resizingCol_{false}; + bool suppressNextHeaderClick_{false}; + bool autoSizedOnce_{false}; + int activeResizeCol_{-1}; + int resizeStartScreenX_{0}; + int resizeStartWidth_{0}; + + std::vector cards_; + std::vector filteredIndices_; + std::string filter_; + + // Rebuild guard - see ui_wx/AGENTS.md for the burst-suppression rationale. + bool inRebuild_{false}; + + std::map nextDirByCol_; + + // Per-icon-column cached bitmaps consumed by `IconListCtrl`'s NM_CUSTOMDRAW + // path. Index aligns with `iconCols_`. + std::vector iconBitmapsNormal_; + std::vector iconBitmapsSelected_; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/BaseSelectedCardPanel.hpp b/ui_wx/include/ccm/ui/BaseSelectedCardPanel.hpp new file mode 100644 index 0000000..84dbbc4 --- /dev/null +++ b/ui_wx/include/ccm/ui/BaseSelectedCardPanel.hpp @@ -0,0 +1,500 @@ +#pragma once + +// BaseSelectedCardPanel +// +// Header-only template for the right-hand-side card detail panel: +// +// - top: external preview image fetched by `CardPreviewService` +// - middle: 2-column "label | value" detail grid (Name / Set / ...) +// - flag-icon row (collapses to nothing when no flags are set) +// - bottom: "Image N" list box with double-click viewer +// +// All of the threading/cancellation machinery for the preview fetch is here +// (the `shared_ptr` + `std::atomic alive` / `currentGen` pattern from +// `ui_wx/AGENTS.md`). Subclasses just describe which detail rows to show, the +// flag-icon strip, and how to extract `(name, setId, setNo)` for the preview +// lookup key. +// +// New games extend this template — see `MagicSelectedCardPanel` and +// `PokemonSelectedCardPanel` for the canonical patterns. + +#include "ccm/domain/Enums.hpp" +#include "ccm/services/CardPreviewService.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/ui/ImageViewerDialog.hpp" +#include "ccm/ui/SvgIcons.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ccm::ui { + +// Single shared event raised whenever a preview fetch resolves. +// `event.GetString()` carries the human-readable status (empty on success, +// non-empty on failure). Defined once in `BaseEvents.cpp`. +wxDECLARE_EVENT(EVT_PREVIEW_STATUS, wxCommandEvent); + +template +class BaseSelectedCardPanel : public wxPanel { +public: + using card_type = TCard; + + void setCard(std::optional card) { + const std::optional newId = + card ? std::optional{card->id} : std::nullopt; + const bool fetchTargetChanged = (newId != lastFetchedId_); + + card_ = std::move(card); + + auto applyFlagsRow = [this](bool any) { + flagsRow_->Layout(); + flagsLabel_->Show(any); + flagsRow_->Show(any); + }; + + auto applyNote = [this](const std::string& note) { + const bool has = !note.empty(); + noteValue_->SetLabelText(wxString::FromUTF8(note.c_str())); + noteLabel_->Show(has); + noteValue_->Show(has); + }; + + if (!card_) { + for (auto& row : detailRows_) { + row.value->SetLabelText(row.emptyLabel); + } + applyNote(""); + for (auto& fi : flagIcons_) fi.icon->Show(false); + applyFlagsRow(false); + if (fetchTargetChanged) { + state_->currentGen.fetch_add(1); + lastFetchedId_.reset(); + clearPreview(); + previewStatus_->SetLabelText(""); + emitPreviewStatus(""); + } + } else { + const auto& c = *card_; + // First row is "Name" by convention; we paint it before others so + // it appears at the top with the literal card name. + for (auto& row : detailRows_) { + const std::string value = detailValueFor(c, row.key); + row.value->SetLabelText(wxString::FromUTF8(value.c_str())); + } + applyNote(detailValueFor(c, kNoteKey)); + bool anyFlag = false; + for (auto& fi : flagIcons_) { + const bool on = isFlagSet(c, fi.key); + fi.icon->Show(on); + if (on) anyFlag = true; + } + applyFlagsRow(anyFlag); + if (fetchTargetChanged) startPreviewFetch(c); + } + rebuildImageList(); + Layout(); + } + + void applyTheme(const ThemePalette& palette) { + SetBackgroundColour(palette.panelBg); + SetForegroundColour(palette.text); + if (previewStatus_ != nullptr) { + previewStatus_->SetBackgroundColour(palette.panelBg); + previewStatus_->SetForegroundColour(palette.text); + } + for (auto& row : detailRows_) { + if (row.label != nullptr) { + row.label->SetBackgroundColour(palette.panelBg); + row.label->SetForegroundColour(palette.text); + } + if (row.value != nullptr) { + row.value->SetBackgroundColour(palette.panelBg); + row.value->SetForegroundColour(palette.text); + } + } + flagsRow_->SetBackgroundColour(palette.panelBg); + flagsRow_->SetForegroundColour(palette.text); + if (flagsLabel_ != nullptr) { + flagsLabel_->SetBackgroundColour(palette.panelBg); + flagsLabel_->SetForegroundColour(palette.text); + } + if (noteLabel_ != nullptr) { + noteLabel_->SetBackgroundColour(palette.panelBg); + noteLabel_->SetForegroundColour(palette.text); + } + if (noteValue_ != nullptr) { + noteValue_->SetBackgroundColour(palette.panelBg); + noteValue_->SetForegroundColour(palette.text); + } + imageList_->SetBackgroundColour(palette.inputBg); + imageList_->SetForegroundColour(palette.inputText); + + const std::string textHex = palette.text.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + for (auto& fi : flagIcons_) { + fi.icon->SetBitmap(svgIconBitmap(fi.svg, kFlagIconSize, textHex.c_str())); + } + Layout(); + Refresh(); + } + + ~BaseSelectedCardPanel() override { + // Detach any in-flight worker: late `CallAfter` lambdas check `alive` + // before touching `panel` so they become no-ops after destruction. + if (state_) { + state_->alive.store(false); + state_->panel = nullptr; + } + } + +protected: + // Hook descriptors -------------------------------------------------------- + + // Detail row keys are integers chosen by the subclass; the base just + // forwards them to `detailValueFor`. Reserve negatives for built-ins. + using DetailKey = int; + static constexpr DetailKey kNoteKey = -1; + + struct DetailRowSpec { + std::string label; + DetailKey key; + std::string emptyLabel; // shown when `card_ == nullopt` + }; + + struct FlagIconSpec { + const char* svg; + const char* tooltip; + DetailKey key; + }; + + // Subclass declares the labelled value rows of the detail grid (excluding + // the trailing "Note" row; that one is always present and conventionally + // appended right before the image list). + [[nodiscard]] virtual std::vector declareDetailRows() const = 0; + + // Subclass declares the flag-icon strip. Order matters — icons render + // left-to-right in the same order as this list. + [[nodiscard]] virtual std::vector declareFlagIcons() const = 0; + + // Look up the string value for a detail-row key. The base also calls this + // with `kNoteKey` to fetch the note for the bottom row. + [[nodiscard]] virtual std::string detailValueFor(const TCard& card, DetailKey key) const = 0; + + [[nodiscard]] virtual bool isFlagSet(const TCard& card, DetailKey key) const = 0; + + // Lookup key for the preview API: (name, setId, setNo). setNo can be + // empty for games that don't use it (Magic). + [[nodiscard]] virtual std::tuple + previewKey(const TCard& card) const = 0; + + [[nodiscard]] virtual Game gameId() const noexcept = 0; + + // Construction ------------------------------------------------------------ + + BaseSelectedCardPanel(wxWindow* parent, + ImageService& imageService, + CardPreviewService& cardPreview) + : wxPanel(parent, wxID_ANY), + imageService_(imageService), + cardPreview_(cardPreview), + state_(std::make_shared()) { + state_->panel = this; + } + + // Subclass calls this once from its constructor after the virtual hooks + // are reachable. + void buildLayout() { + auto* root = new wxBoxSizer(wxVERTICAL); + + previewBitmap_ = new wxStaticBitmap(this, wxID_ANY, makePreviewPlaceholder()); + previewStatus_ = new wxStaticText(this, wxID_ANY, ""); + root->Add(previewBitmap_, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP | wxBOTTOM, 6); + root->Add(previewStatus_, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 4); + + buildInfoGrid(root); + + SetSizer(root); + setCard(std::nullopt); + } + +private: + // Shared state for the async preview fetcher. + struct PreviewState { + std::atomic alive{true}; + std::atomic currentGen{0}; + BaseSelectedCardPanel* panel; + }; + + struct DetailRow { + wxStaticText* label; + wxStaticText* value; + DetailKey key; + std::string emptyLabel; + }; + + struct FlagIcon { + wxStaticBitmap* icon; + const char* svg; + DetailKey key; + }; + + static constexpr int kPreviewWidth = 250; + static constexpr int kPreviewHeight = 350; + static constexpr int kImageListWidth = 0; + static constexpr int kImageListHeight = 80; + static constexpr int kFlagIconSize = 14; + + static wxBitmap makePreviewPlaceholder() { + wxImage img(kPreviewWidth, kPreviewHeight); + img.SetAlpha(); + if (auto* alpha = img.GetAlpha()) { + std::fill(alpha, alpha + kPreviewWidth * kPreviewHeight, 0); + } + return wxBitmap(img); + } + + static std::string fallbackImageUrlForGame(Game game) { + switch (game) { + case Game::Magic: + // Mirrors CCM2's unresolved-preview fallback image. + return "https://gamepedia.cursecdn.com/mtgsalvation_gamepedia/f/f8/Magic_card_back.jpg"; + case Game::Pokemon: + // Mirrors CCM2's unresolved-preview fallback image. + return "https://archives.bulbagarden.net/media/upload/1/17/Cardback.jpg"; + default: + return {}; + } + } + + void buildInfoGrid(wxBoxSizer* root) { + auto* grid = new wxFlexGridSizer(/*cols=*/2, /*vgap=*/4, /*hgap=*/12); + grid->AddGrowableCol(1, 1); + + auto makeBoldLabel = [this](const wxString& text) { + auto* lbl = new wxStaticText(this, wxID_ANY, text); + wxFont lf = lbl->GetFont(); + lf.MakeBold(); + lbl->SetFont(lf); + return lbl; + }; + + auto specs = declareDetailRows(); + detailRows_.reserve(specs.size()); + for (const auto& spec : specs) { + auto* lbl = makeBoldLabel(spec.label); + auto* val = new wxStaticText(this, wxID_ANY, ""); + grid->Add(lbl, 0, wxALIGN_TOP | wxALIGN_LEFT); + grid->Add(val, 1, wxEXPAND | wxALIGN_LEFT); + detailRows_.push_back({lbl, val, spec.key, spec.emptyLabel}); + } + + // Flags row: empty label cell, value cell holds the icon strip. + flagsLabel_ = new wxStaticText(this, wxID_ANY, ""); + flagsRow_ = new wxPanel(this, wxID_ANY); + auto* flagsSizer = new wxBoxSizer(wxHORIZONTAL); + const std::string textHex = + wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT) + .GetAsString(wxC2S_HTML_SYNTAX) + .ToStdString(); + auto flagSpecs = declareFlagIcons(); + flagIcons_.reserve(flagSpecs.size()); + for (const auto& fs : flagSpecs) { + auto* ico = new wxStaticBitmap(flagsRow_, wxID_ANY, + svgIconBitmap(fs.svg, kFlagIconSize, textHex.c_str())); + ico->SetToolTip(fs.tooltip); + flagsSizer->Add(ico, 0, wxRIGHT, 6); + flagIcons_.push_back({ico, fs.svg, fs.key}); + } + flagsRow_->SetSizer(flagsSizer); + grid->Add(flagsLabel_, 0, wxALIGN_TOP | wxALIGN_LEFT); + grid->Add(flagsRow_, 0, wxEXPAND); + + // Note row. + noteLabel_ = makeBoldLabel("Note"); + noteValue_ = new wxStaticText(this, wxID_ANY, ""); + grid->Add(noteLabel_, 0, wxALIGN_TOP | wxALIGN_LEFT); + grid->Add(noteValue_, 1, wxEXPAND | wxALIGN_LEFT); + + // Image list row. + imageList_ = new wxListBox(this, wxID_ANY, + wxDefaultPosition, + wxSize(kImageListWidth, kImageListHeight), + 0, nullptr, wxLB_SINGLE); + imageList_->Bind(wxEVT_LISTBOX_DCLICK, &BaseSelectedCardPanel::onImageActivated, this); + grid->Add(makeBoldLabel("Images"), 0, wxALIGN_TOP | wxALIGN_LEFT); + grid->Add(imageList_, 1, wxEXPAND); + + root->Add(grid, 1, wxEXPAND | wxALL, 8); + } + + void clearPreview() { + previewBitmap_->SetBitmap(makePreviewPlaceholder()); + } + + void startPreviewFetch(const TCard& card) { + clearPreview(); + previewStatus_->SetLabelText("Loading preview..."); + emitPreviewStatus(""); + lastFetchedId_ = card.id; + Layout(); + + const unsigned gen = state_->currentGen.fetch_add(1) + 1; + + auto state = state_; + CardPreviewService* svcPtr = &cardPreview_; + auto [name, setId, setNo] = previewKey(card); + const Game game = gameId(); + + std::thread([state, gen, svcPtr, name = std::move(name), + setId = std::move(setId), setNo = std::move(setNo), game]() { + auto bytes = svcPtr->fetchPreviewBytes(game, name, setId, setNo); + bool ok = bytes.isOk(); + bool usedFallback = false; + std::string payload = ok ? std::move(bytes).value() : std::string{}; + std::string err = ok ? std::string{} : bytes.error(); + + if (!ok || payload.empty()) { + const std::string fallbackUrl = fallbackImageUrlForGame(game); + if (!fallbackUrl.empty()) { + auto fallbackBytes = svcPtr->fetchImageBytesByUrl(fallbackUrl); + if (fallbackBytes.isOk()) { + payload = std::move(fallbackBytes).value(); + ok = !payload.empty(); + if (ok) { + usedFallback = true; + err.clear(); + } + } + } + } + + wxTheApp->CallAfter( + [state, gen, ok, usedFallback, + payload = std::move(payload), err = std::move(err)]() mutable { + if (!state->alive.load()) return; + if (state->currentGen.load() != gen) return; + if (state->panel == nullptr) return; + state->panel->onPreviewBytes(gen, ok, usedFallback, + std::move(payload), std::move(err)); + }); + }).detach(); + } + + void onPreviewBytes(unsigned gen, bool ok, bool usedFallback, + std::string bytes, std::string err) { + if (gen != state_->currentGen.load()) return; + if (!ok || bytes.empty()) { + previewStatus_->SetLabelText("(no preview available)"); + clearPreview(); + Layout(); + wxString detail = err.empty() + ? wxString("no preview returned") + : wxString::FromUTF8(err); + emitPreviewStatus("Preview unavailable: " + detail); + return; + } + + wxMemoryInputStream stream(bytes.data(), bytes.size()); + wxImage img; + if (!img.LoadFile(stream, wxBITMAP_TYPE_ANY)) { + previewStatus_->SetLabelText("(preview decode failed)"); + clearPreview(); + Layout(); + emitPreviewStatus("Preview unavailable: image decode failed"); + return; + } + if (img.GetWidth() != kPreviewWidth || img.GetHeight() != kPreviewHeight) { + img.Rescale(kPreviewWidth, kPreviewHeight, wxIMAGE_QUALITY_HIGH); + } + previewBitmap_->SetBitmap(wxBitmap(img)); + if (usedFallback) { + previewStatus_->SetLabelText("(image preview unavailable)"); + emitPreviewStatus("Preview unavailable: showing fallback card-back image."); + } else { + previewStatus_->SetLabelText(""); + emitPreviewStatus(""); + } + Layout(); + } + + void emitPreviewStatus(const wxString& message) { + wxCommandEvent ev(EVT_PREVIEW_STATUS, GetId()); + ev.SetEventObject(this); + ev.SetString(message); + if (auto* parent = GetParent()) { + parent->GetEventHandler()->ProcessEvent(ev); + } else { + ProcessWindowEvent(ev); + } + } + + void rebuildImageList() { + imageList_->Clear(); + if (!card_) return; + for (std::size_t i = 0; i < card_->images.size(); ++i) { + imageList_->Append(wxString::Format("Image %zu", i + 1)); + } + } + + void onImageActivated(wxCommandEvent& event) { + if (!card_) return; + const int sel = event.GetSelection(); + if (sel < 0 || static_cast(sel) >= card_->images.size()) return; + + std::vector paths; + paths.reserve(card_->images.size()); + for (const auto& name : card_->images) { + paths.push_back(imageService_.resolveImagePath(gameId(), name)); + } + ImageViewerDialog dlg(this, std::move(paths), static_cast(sel)); + const Theme theme = inferThemeFromWindow(this); + applyThemeToWindowTree(&dlg, paletteForTheme(theme), theme); + dlg.ShowModal(); + } + + ImageService& imageService_; + CardPreviewService& cardPreview_; + std::optional card_; + + wxStaticBitmap* previewBitmap_{nullptr}; + wxStaticText* previewStatus_{nullptr}; + + std::vector detailRows_; + + wxStaticText* flagsLabel_{nullptr}; + wxPanel* flagsRow_{nullptr}; + std::vector flagIcons_; + + wxStaticText* noteLabel_{nullptr}; + wxStaticText* noteValue_{nullptr}; + + wxListBox* imageList_{nullptr}; + + std::shared_ptr state_; + std::optional lastFetchedId_; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/IGameView.hpp b/ui_wx/include/ccm/ui/IGameView.hpp new file mode 100644 index 0000000..cb145ff --- /dev/null +++ b/ui_wx/include/ccm/ui/IGameView.hpp @@ -0,0 +1,63 @@ +#pragma once + +// IGameView: per-game UI bundle that `MainFrame` swaps in/out when the user +// switches games. Each implementation owns its typed list panel + selected +// panel + Add/Edit/Delete dialogs and the cached set list. Common services +// (config, sets, images, card preview) come from the shared `AppContext`, +// so a new game implementation does not need its own copy of any of them. +// +// New games extend this interface — see `MagicGameView` and +// `PokemonGameView` for the canonical patterns. + +#include "ccm/domain/Enums.hpp" +#include "ccm/domain/Set.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include + +class wxPanel; +class wxWindow; + +namespace ccm::ui { + +class IGameView { +public: + virtual ~IGameView() = default; + + [[nodiscard]] virtual Game gameId() const noexcept = 0; + [[nodiscard]] virtual std::string displayName() const = 0; + + // The two panels owned by this view. They are constructed lazily — the + // first call must accept `parent` so the panels become children of the + // splitter. Subsequent calls return the cached pointers. + virtual wxPanel* listPanel(wxWindow* parent) = 0; + virtual wxPanel* selectedPanel(wxWindow* parent) = 0; + + // Reload the active collection from disk and refresh the panels. The + // selected card is preserved when possible. + virtual void refreshCollection() = 0; + + // Toolbar actions. `parentWindow` is the dialog owner for any modal we + // open (typically the `MainFrame`). + virtual void onAddCard(wxWindow* parentWindow) = 0; + virtual void onEditCard(wxWindow* parentWindow) = 0; + virtual void onDeleteCard(wxWindow* parentWindow) = 0; + + // Sets menu action ("Update Magic" / "Update Pokemon"). Returns the + // user-visible status string for the parent's status bar. + virtual std::string onUpdateSets(wxWindow* parentWindow) = 0; + + // Forwarded by `MainFrame` whenever the filter input changes. + virtual void setFilter(std::string_view filter) = 0; + + // Apply the active palette to all panels owned by this view. + virtual void applyTheme(const ThemePalette& palette) = 0; + + // The Sets menu label suffix ("Magic" / "Pokemon"), used for the + // dynamically built "Update " menu entry. + [[nodiscard]] virtual std::string updateSetsMenuLabel() const = 0; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/IconListCtrl.hpp b/ui_wx/include/ccm/ui/IconListCtrl.hpp new file mode 100644 index 0000000..87bac77 --- /dev/null +++ b/ui_wx/include/ccm/ui/IconListCtrl.hpp @@ -0,0 +1,92 @@ +#pragma once + +// IconListCtrl +// +// `wxListCtrl` subclass that custom-draws icon sub-items so they are +// pixel-perfect centered within the cell, matching our themed-header icon +// centering exactly even after column resize. +// +// Why we need this: +// - Native MSW `LVS_REPORT` sub-item image rendering anchors the image at +// the cell's left edge with a small built-in inset. The header icons in +// this app are centered via wx sizers, so the two never line up. +// - We override `NM_CUSTOMDRAW` to paint icons ourselves at the exact +// center of each icon sub-item rect. +// - Default text cell rendering is left untouched. +// +// Rendering path (MSW): +// We keep one premultiplied 32 bpp BGRA DIB section per (iconIdx, selected) +// variant and composite it onto the listctrl's HDC with `AlphaBlend` +// (`AC_SRC_OVER` + `AC_SRC_ALPHA`) from `NM_CUSTOMDRAW`. We deliberately +// do **not** route through `ImageList_Draw` / `HIMAGELIST`: in our test +// environment `ImageList_Draw` on an `ILC_COLOR32` list ignored the alpha +// channel and the "transparent" canvas around each glyph painted as +// opaque black behind the icon — see `ui_wx/AGENTS.md` convention 11. +// +// Usage: +// 1) Construct with the same wxListCtrl flags as before. +// 2) Call `setIconColumns(firstIconCol, count)` so the subclass knows which +// sub-item indices it owns. +// 3) Call `setIconPredicate(...)` with a callback that decides if the icon +// should be drawn for a given (row, iconIdx). +// 4) Call `setIconBitmaps(normal, selected)` with two equally-sized vectors +// of pre-rendered icon bitmaps — one variant per selection state. +// +// This class is MSW-specific in behavior (NM_CUSTOMDRAW). On other platforms +// `MSWOnNotify` is a no-op override and the listctrl falls back to default +// rendering — which is fine because this app only ships on Windows. + +#include +#include + +#include +#include +#include + +namespace ccm::ui { + +class IconListCtrl : public wxListCtrl { +public: + using wxListCtrl::wxListCtrl; + + using IconPredicate = std::function; + + ~IconListCtrl() override; + + void setIconColumns(int firstIconCol, int iconCount) noexcept { + firstIconCol_ = firstIconCol; + iconColCount_ = iconCount; + } + void setIconPredicate(IconPredicate p) { predicate_ = std::move(p); } + + // Replace the cached icon bitmaps. Both vectors must have the same size + // (one entry per icon column). Internal premultiplied DIB cache rebuilds. + void setIconBitmaps(std::vector normal, + std::vector selected); + +protected: +#ifdef __WXMSW__ + bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result) override; +#endif + +private: + int firstIconCol_{-1}; + int iconColCount_{0}; + IconPredicate predicate_; + std::vector normalBmps_; + std::vector selectedBmps_; + + // Premultiplied BGRA DIB sections used as the source for `AlphaBlend`. + // Stored as `void*` (HBITMAP) so the header stays free of ``. + // Index layout: + // [0 .. iconColCount_) -> normal variants + // [iconColCount_ .. 2 * iconColCount_) -> selected variants + std::vector dibBitmaps_; + int dibWidth_{0}; + int dibHeight_{0}; + + void rebuildDibCache(); + void destroyDibCache(); +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/ImageViewerDialog.hpp b/ui_wx/include/ccm/ui/ImageViewerDialog.hpp new file mode 100644 index 0000000..85dd1ee --- /dev/null +++ b/ui_wx/include/ccm/ui/ImageViewerDialog.hpp @@ -0,0 +1,42 @@ +#pragma once + +// ImageViewerDialog: full-size image viewer with prev/next navigation. + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace ccm::ui { + +class ImageViewerDialog : public wxDialog { +public: + ImageViewerDialog(wxWindow* parent, + std::vector imagePaths, + std::size_t startIndex); + +private: + bool loadImageAt(std::size_t index); + void prefetchNeighbors(); + void show(std::size_t index); + void onPrev(wxCommandEvent&); + void onNext(wxCommandEvent&); + + std::vector paths_; + std::size_t index_{0}; + std::vector imageCache_; + std::vector imageCacheReady_; + + wxPanel* imageHost_{nullptr}; + wxStaticText* caption_{nullptr}; + wxButton* prevButton_{nullptr}; + wxButton* nextButton_{nullptr}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/MagicCardEditDialog.hpp b/ui_wx/include/ccm/ui/MagicCardEditDialog.hpp new file mode 100644 index 0000000..4684dc4 --- /dev/null +++ b/ui_wx/include/ccm/ui/MagicCardEditDialog.hpp @@ -0,0 +1,33 @@ +#pragma once + +// MagicCardEditDialog: typed Add/Edit form for a `MagicCard`. Inherits the +// shared layout, set picker, and image management from +// `BaseCardEditDialog` and only overrides the flags row. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/ui/BaseCardEditDialog.hpp" + +namespace ccm::ui { + +class MagicCardEditDialog final : public BaseCardEditDialog { +public: + MagicCardEditDialog(wxWindow* parent, + ImageService& imageService, + SetService& setService, + EditMode mode, + MagicCard initial, + const std::vector* preloadedSets = nullptr); + +protected: + void buildFlagsRow(wxBoxSizer* flagsBox) override; + void readExtraFromCard() override; + void writeExtraToCard() override; + [[nodiscard]] std::string updateMenuName() const override { return "Update Magic"; } + +private: + wxCheckBox* foilCheck_{nullptr}; + wxCheckBox* signedCheck_{nullptr}; + wxCheckBox* alteredCheck_{nullptr}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/MagicCardListPanel.hpp b/ui_wx/include/ccm/ui/MagicCardListPanel.hpp new file mode 100644 index 0000000..1dcaf8a --- /dev/null +++ b/ui_wx/include/ccm/ui/MagicCardListPanel.hpp @@ -0,0 +1,34 @@ +#pragma once + +// MagicCardListPanel: typed view of the Magic collection. Inherits all +// `wxListCtrl`/themed-header machinery from `BaseCardListPanel`; this header only declares the per-game hook overrides +// (column layout, sort/filter dispatch, cell rendering). +// +// The legacy `EVT_MAGIC_CARD_SELECTED` alias is kept as a deprecated typedef +// so any out-of-tree callers keep building; new code should bind the shared +// `EVT_CARD_SELECTED` event from `BaseCardListPanel.hpp`. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/services/CardSorter.hpp" +#include "ccm/ui/BaseCardListPanel.hpp" + +namespace ccm::ui { + +// Backwards-compatible alias for callers that bound the old event symbol. +inline const auto& EVT_MAGIC_CARD_SELECTED = EVT_CARD_SELECTED; + +class MagicCardListPanel final : public BaseCardListPanel { +public: + explicit MagicCardListPanel(wxWindow* parent); + +protected: + [[nodiscard]] std::vector declareTextColumns() const override; + [[nodiscard]] std::vector declareIconColumns() const override; + [[nodiscard]] std::string renderTextCell(const MagicCard& card, std::size_t idx) const override; + [[nodiscard]] bool isIconColumnSet(const MagicCard& card, std::size_t idx) const override; + void sortBy(MagicSortColumn column, bool ascending) override; + [[nodiscard]] bool matchesFilter(const MagicCard& card, std::string_view filter) const override; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/MagicGameView.hpp b/ui_wx/include/ccm/ui/MagicGameView.hpp new file mode 100644 index 0000000..fc3d7bb --- /dev/null +++ b/ui_wx/include/ccm/ui/MagicGameView.hpp @@ -0,0 +1,67 @@ +#pragma once + +// MagicGameView: IGameView for Magic the Gathering. Owns its three panels +// (list, selected, edit-dialog state) and delegates persistence to the +// typed `CollectionService` reference handed in by the +// composition root. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/games/IGameModule.hpp" +#include "ccm/services/CardPreviewService.hpp" +#include "ccm/services/CollectionService.hpp" +#include "ccm/services/ConfigService.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/services/SetService.hpp" +#include "ccm/ui/IGameView.hpp" + +#include +#include +#include + +namespace ccm::ui { + +class MagicCardListPanel; +class MagicSelectedCardPanel; + +class MagicGameView final : public IGameView { +public: + MagicGameView(ConfigService& config, + CollectionService& collection, + SetService& sets, + ImageService& images, + CardPreviewService& cardPreview, + IGameModule& module); + + [[nodiscard]] Game gameId() const noexcept override { return Game::Magic; } + [[nodiscard]] std::string displayName() const override { return "Magic"; } + + wxPanel* listPanel(wxWindow* parent) override; + wxPanel* selectedPanel(wxWindow* parent) override; + + void refreshCollection() override; + void onAddCard(wxWindow* parentWindow) override; + void onEditCard(wxWindow* parentWindow) override; + void onDeleteCard(wxWindow* parentWindow) override; + std::string onUpdateSets(wxWindow* parentWindow) override; + void setFilter(std::string_view filter) override; + void applyTheme(const ThemePalette& palette) override; + [[nodiscard]] std::string updateSetsMenuLabel() const override { return "Update Magic"; } + +private: + void ensureSetsLoaded(); + const std::vector& setsForDialog(); + + ConfigService& config_; + CollectionService& collection_; + SetService& sets_; + ImageService& images_; + CardPreviewService& cardPreview_; + IGameModule& module_; + + MagicCardListPanel* listPanel_{nullptr}; + MagicSelectedCardPanel* selectedPanel_{nullptr}; + std::vector setsCache_; + bool attemptedInitialSetLoad_{false}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/MagicSelectedCardPanel.hpp b/ui_wx/include/ccm/ui/MagicSelectedCardPanel.hpp new file mode 100644 index 0000000..abdcb8c --- /dev/null +++ b/ui_wx/include/ccm/ui/MagicSelectedCardPanel.hpp @@ -0,0 +1,28 @@ +#pragma once + +// MagicSelectedCardPanel: typed view of the right-hand-side detail panel for +// Magic. Inherits the preview-fetch / detail-grid / image-list machinery from +// `BaseSelectedCardPanel` and only overrides the per-game hooks. + +#include "ccm/domain/MagicCard.hpp" +#include "ccm/ui/BaseSelectedCardPanel.hpp" + +namespace ccm::ui { + +class MagicSelectedCardPanel final : public BaseSelectedCardPanel { +public: + MagicSelectedCardPanel(wxWindow* parent, + ImageService& imageService, + CardPreviewService& cardPreview); + +protected: + [[nodiscard]] std::vector declareDetailRows() const override; + [[nodiscard]] std::vector declareFlagIcons() const override; + [[nodiscard]] std::string detailValueFor(const MagicCard& card, DetailKey key) const override; + [[nodiscard]] bool isFlagSet(const MagicCard& card, DetailKey key) const override; + [[nodiscard]] std::tuple + previewKey(const MagicCard& card) const override; + [[nodiscard]] Game gameId() const noexcept override { return Game::Magic; } +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/MainFrame.hpp b/ui_wx/include/ccm/ui/MainFrame.hpp new file mode 100644 index 0000000..f4323cb --- /dev/null +++ b/ui_wx/include/ccm/ui/MainFrame.hpp @@ -0,0 +1,86 @@ +#pragma once + +// MainFrame: top-level window. Hosts the menu bar (File / Game / Sets), the +// toolbar (Add / Edit / Delete + filter input), and the splitter that swaps +// the active `IGameView`'s panels in and out as the user switches games. + +#include "ccm/domain/Enums.hpp" +#include "ccm/ui/AppContext.hpp" + +#include +#include + +#include + +class wxTextCtrl; +class wxBitmapButton; +class wxStaticText; +class wxPanel; +class wxSplitterWindow; + +namespace ccm::ui { + +class IGameView; + +class MainFrame : public wxFrame { +public: + explicit MainFrame(AppContext& ctx); + +private: + void buildMenuBar(); + void buildLayout(); + void applyTheme(); + void refreshToolbarIcons(); + void setStatusTextUi(const wxString& text); + void onOpenFileMenu(); + void onOpenGameMenu(); + void onOpenSetsMenu(); + void onOpenHelpMenu(); + void switchGame(Game g); + void mountActiveView(); + + void onSettings(wxCommandEvent&); + void onQuit(wxCommandEvent&); + void onSwitchGame(wxCommandEvent& ev); + void onUpdateSetsForGame(wxCommandEvent& ev); + void onAbout(wxCommandEvent&); + + void onCreate(wxCommandEvent&); + void onEdit(wxCommandEvent&); + void onDelete(wxCommandEvent&); + + [[nodiscard]] IGameView* activeView(); + +#ifdef __WXMSW__ + WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) override; +#endif + + AppContext& ctx_; + Game activeGame_{Game::Magic}; + + wxSplitterWindow* splitter_{nullptr}; + wxTextCtrl* filterInput_{nullptr}; + wxPanel* menuStrip_{nullptr}; + wxStaticText* statusText_{nullptr}; + std::array toolbarButtons_{{nullptr, nullptr, nullptr}}; + + // Tracks the dynamic Game / Sets menu item ids for the current popup. + // We allocate a contiguous block per menu open so the event handler can + // map back to a `Game` value without a per-game member id. + std::unordered_map menuIdToGame_; + + enum Ids : int { + IdSettings = wxID_HIGHEST + 1, + IdCreate, + IdEdit, + IdDelete, + IdAbout, + // 8 dynamic ids for game-switch (max 4) and update-sets (max 4) entries. + IdGameMenuBase, + IdGameMenuLast = IdGameMenuBase + 8, + IdSetsMenuBase, + IdSetsMenuLast = IdSetsMenuBase + 8, + }; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/PokemonCardEditDialog.hpp b/ui_wx/include/ccm/ui/PokemonCardEditDialog.hpp new file mode 100644 index 0000000..80541af --- /dev/null +++ b/ui_wx/include/ccm/ui/PokemonCardEditDialog.hpp @@ -0,0 +1,38 @@ +#pragma once + +// PokemonCardEditDialog: typed Add/Edit form for a `PokemonCard`. Inherits +// the shared layout, set picker, and image management from +// `BaseCardEditDialog` and adds: +// - a `Set #` text input (between the Set picker and the Amount spin) +// - `Holo`, `1. Edition`, `Signed`, `Altered` check boxes in the flags row + +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/ui/BaseCardEditDialog.hpp" + +namespace ccm::ui { + +class PokemonCardEditDialog final : public BaseCardEditDialog { +public: + PokemonCardEditDialog(wxWindow* parent, + ImageService& imageService, + SetService& setService, + EditMode mode, + PokemonCard initial, + const std::vector* preloadedSets = nullptr); + +protected: + void buildFlagsRow(wxBoxSizer* flagsBox) override; + void appendExtraRows(wxFlexGridSizer* grid) override; + void readExtraFromCard() override; + void writeExtraToCard() override; + [[nodiscard]] std::string updateMenuName() const override { return "Update Pokemon"; } + +private: + wxTextCtrl* setNoCtrl_{nullptr}; + wxCheckBox* holoCheck_{nullptr}; + wxCheckBox* firstEditionCheck_{nullptr}; + wxCheckBox* signedCheck_{nullptr}; + wxCheckBox* alteredCheck_{nullptr}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/PokemonCardListPanel.hpp b/ui_wx/include/ccm/ui/PokemonCardListPanel.hpp new file mode 100644 index 0000000..6355b2f --- /dev/null +++ b/ui_wx/include/ccm/ui/PokemonCardListPanel.hpp @@ -0,0 +1,26 @@ +#pragma once + +// PokemonCardListPanel: typed view of the Pokemon collection. Inherits all +// `wxListCtrl`/themed-header machinery from `BaseCardListPanel` and only overrides the per-game hooks. + +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/services/CardSorter.hpp" +#include "ccm/ui/BaseCardListPanel.hpp" + +namespace ccm::ui { + +class PokemonCardListPanel final : public BaseCardListPanel { +public: + explicit PokemonCardListPanel(wxWindow* parent); + +protected: + [[nodiscard]] std::vector declareTextColumns() const override; + [[nodiscard]] std::vector declareIconColumns() const override; + [[nodiscard]] std::string renderTextCell(const PokemonCard& card, std::size_t idx) const override; + [[nodiscard]] bool isIconColumnSet(const PokemonCard& card, std::size_t idx) const override; + void sortBy(PokemonSortColumn column, bool ascending) override; + [[nodiscard]] bool matchesFilter(const PokemonCard& card, std::string_view filter) const override; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/PokemonGameView.hpp b/ui_wx/include/ccm/ui/PokemonGameView.hpp new file mode 100644 index 0000000..f9af24d --- /dev/null +++ b/ui_wx/include/ccm/ui/PokemonGameView.hpp @@ -0,0 +1,67 @@ +#pragma once + +// PokemonGameView: IGameView for the Pokemon TCG. Mirrors `MagicGameView` — +// owns the Pokemon-typed list, selected, and edit-dialog widgets and +// delegates persistence to a `CollectionService` reference +// supplied by the composition root. + +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/games/IGameModule.hpp" +#include "ccm/services/CardPreviewService.hpp" +#include "ccm/services/CollectionService.hpp" +#include "ccm/services/ConfigService.hpp" +#include "ccm/services/ImageService.hpp" +#include "ccm/services/SetService.hpp" +#include "ccm/ui/IGameView.hpp" + +#include +#include +#include + +namespace ccm::ui { + +class PokemonCardListPanel; +class PokemonSelectedCardPanel; + +class PokemonGameView final : public IGameView { +public: + PokemonGameView(ConfigService& config, + CollectionService& collection, + SetService& sets, + ImageService& images, + CardPreviewService& cardPreview, + IGameModule& module); + + [[nodiscard]] Game gameId() const noexcept override { return Game::Pokemon; } + [[nodiscard]] std::string displayName() const override { return "Pokemon"; } + + wxPanel* listPanel(wxWindow* parent) override; + wxPanel* selectedPanel(wxWindow* parent) override; + + void refreshCollection() override; + void onAddCard(wxWindow* parentWindow) override; + void onEditCard(wxWindow* parentWindow) override; + void onDeleteCard(wxWindow* parentWindow) override; + std::string onUpdateSets(wxWindow* parentWindow) override; + void setFilter(std::string_view filter) override; + void applyTheme(const ThemePalette& palette) override; + [[nodiscard]] std::string updateSetsMenuLabel() const override { return "Update Pokemon"; } + +private: + void ensureSetsLoaded(); + const std::vector& setsForDialog(); + + ConfigService& config_; + CollectionService& collection_; + SetService& sets_; + ImageService& images_; + CardPreviewService& cardPreview_; + IGameModule& module_; + + PokemonCardListPanel* listPanel_{nullptr}; + PokemonSelectedCardPanel* selectedPanel_{nullptr}; + std::vector setsCache_; + bool attemptedInitialSetLoad_{false}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/PokemonSelectedCardPanel.hpp b/ui_wx/include/ccm/ui/PokemonSelectedCardPanel.hpp new file mode 100644 index 0000000..8a41bc0 --- /dev/null +++ b/ui_wx/include/ccm/ui/PokemonSelectedCardPanel.hpp @@ -0,0 +1,30 @@ +#pragma once + +// PokemonSelectedCardPanel: typed view of the right-hand-side detail panel +// for Pokemon TCG cards. Inherits from `BaseSelectedCardPanel` +// and only overrides per-game hooks (detail rows now include `Set #`, +// flag strip is `Holo` / `1. Ed` / `Signed` / `Altered`, preview lookup +// includes the collector number). + +#include "ccm/domain/PokemonCard.hpp" +#include "ccm/ui/BaseSelectedCardPanel.hpp" + +namespace ccm::ui { + +class PokemonSelectedCardPanel final : public BaseSelectedCardPanel { +public: + PokemonSelectedCardPanel(wxWindow* parent, + ImageService& imageService, + CardPreviewService& cardPreview); + +protected: + [[nodiscard]] std::vector declareDetailRows() const override; + [[nodiscard]] std::vector declareFlagIcons() const override; + [[nodiscard]] std::string detailValueFor(const PokemonCard& card, DetailKey key) const override; + [[nodiscard]] bool isFlagSet(const PokemonCard& card, DetailKey key) const override; + [[nodiscard]] std::tuple + previewKey(const PokemonCard& card) const override; + [[nodiscard]] Game gameId() const noexcept override { return Game::Pokemon; } +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/SettingsDialog.hpp b/ui_wx/include/ccm/ui/SettingsDialog.hpp new file mode 100644 index 0000000..caa174c --- /dev/null +++ b/ui_wx/include/ccm/ui/SettingsDialog.hpp @@ -0,0 +1,28 @@ +#pragma once + +// SettingsDialog: edits the live Configuration via ConfigService. + +#include "ccm/services/ConfigService.hpp" + +#include +#include +#include + +namespace ccm::ui { + +class SettingsDialog : public wxDialog { +public: + SettingsDialog(wxWindow* parent, ConfigService& config); + +private: + void onBrowse(wxCommandEvent&); + void onOk(wxCommandEvent&); + + ConfigService& config_; + + wxTextCtrl* dataDirCtrl_{nullptr}; + wxChoice* defaultGameChoice_{nullptr}; + wxChoice* themeChoice_{nullptr}; +}; + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/SvgIcons.hpp b/ui_wx/include/ccm/ui/SvgIcons.hpp new file mode 100644 index 0000000..36bf18a --- /dev/null +++ b/ui_wx/include/ccm/ui/SvgIcons.hpp @@ -0,0 +1,51 @@ +#pragma once + +// Small utility for converting embedded SVG icons into wxBitmap. Used by the +// side panel and the magic card list to render the foil / signed / altered +// flag icons (sourced from react-icons artwork). Also hosts the +// toolbar glyphs (vscode-codicons, matching react-icons/vsc-style buttons). + +#include + +namespace ccm::ui { + +// SVG templates for the per-game flag icons. Original sources: +// - foil -> IoSparklesSharp (Ionicons 5, MIT) [Magic] +// - signed -> BsPencilFill (Bootstrap Icons, MIT) +// - altered -> BsPaletteFill (Bootstrap Icons, MIT) +// - holo -> IoSparklesSharp (Ionicons 5, MIT) [Pokemon, mirrors original +// IconHolo from PokemonTable.tsx] +// - firstEdition -> rebuilt 1. Edition badge (CCM2 IconPokemonFirstEdition.tsx) +// The fill color is parameterized via a `@FILL@` placeholder so callers can +// choose the actual color at render time (e.g. system text vs. system +// highlight-text). NanoSVG cannot resolve CSS `currentColor`, so we have to +// bake the color into the SVG ourselves before parsing. +extern const char* const kSvgFoil; +extern const char* const kSvgSigned; +extern const char* const kSvgAltered; +extern const char* const kSvgHolo; +extern const char* const kSvgFirstEdition; + +// Toolbar actions — glyphs match the original `src/pages/index.tsx` imports from +// `react-icons/vsc` (VscAdd / VscEdit / VscTrash). Embedded SVGs are sourced +// from Microsoft's vscode-codicons (MIT), same vector artwork as VS Code's +// codicon font used by react-icons. +extern const char* const kSvgToolbarAdd; +extern const char* const kSvgToolbarEdit; +extern const char* const kSvgToolbarDelete; + +// Rasterize an SVG template into a wxBitmap of `size`x`size` pixels. The +// `@FILL@` placeholder in the template is replaced with `fillHex` (any CSS +// color string accepted by NanoSVG, e.g. "#000000" or "white"). +// Backed by wxBitmapBundle::FromSVG, which uses NanoSVG (built in to our +// wxWidgets - configure log: `wxUSE_NANOSVG: builtin`). +wxBitmap svgIconBitmap(const char* svg, int size, const char* fillHex = "#000000"); + +// Same SVG, rasterized at `iconSize` and composited onto a transparent +// `container` canvas with the icon centered. Useful for wxListCtrl image +// lists where header bitmaps render left-anchored on MSW: padding the +// bitmap to the column width visually centers the icon under the header. +wxBitmap paddedSvgIcon(const char* svg, int iconSize, wxSize container, + const char* fillHex = "#000000", int xOffsetPx = 0); + +} // namespace ccm::ui diff --git a/ui_wx/include/ccm/ui/Theme.hpp b/ui_wx/include/ccm/ui/Theme.hpp new file mode 100644 index 0000000..5b3b3b5 --- /dev/null +++ b/ui_wx/include/ccm/ui/Theme.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "ccm/domain/Enums.hpp" + +#include + +class wxWindow; +class wxString; + +namespace ccm::ui { + +struct ThemePalette { + wxColour windowBg; + wxColour panelBg; + wxColour text; + wxColour inputBg; + wxColour inputText; + wxColour buttonBg; + wxColour buttonText; +}; + +ThemePalette paletteForTheme(Theme theme); +Theme inferThemeFromWindow(const wxWindow* window); +void applyThemeToWindowTree(wxWindow* root, const ThemePalette& palette, Theme theme); +int showThemedMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption, long style); +int showThemedConfirmDialog(wxWindow* parent, const wxString& message, const wxString& caption); + +} // namespace ccm::ui diff --git a/ui_wx/src/BaseEvents.cpp b/ui_wx/src/BaseEvents.cpp new file mode 100644 index 0000000..8cc8ed5 --- /dev/null +++ b/ui_wx/src/BaseEvents.cpp @@ -0,0 +1,14 @@ +// Definitions for events shared by the per-game UI templates. The events are +// declared in the corresponding base headers (BaseCardListPanel.hpp, +// BaseSelectedCardPanel.hpp) and defined exactly once here, so that template +// instantiations (Magic, Pokemon, ...) all use the same event type tag. + +#include "ccm/ui/BaseCardListPanel.hpp" +#include "ccm/ui/BaseSelectedCardPanel.hpp" + +namespace ccm::ui { + +wxDEFINE_EVENT(EVT_CARD_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_PREVIEW_STATUS, wxCommandEvent); + +} // namespace ccm::ui diff --git a/ui_wx/src/IconListCtrl.cpp b/ui_wx/src/IconListCtrl.cpp new file mode 100644 index 0000000..dd5d17d --- /dev/null +++ b/ui_wx/src/IconListCtrl.cpp @@ -0,0 +1,243 @@ +#include "ccm/ui/IconListCtrl.hpp" + +#include + +#ifdef __WXMSW__ +#include +#include +#endif + +namespace ccm::ui { + +#ifdef __WXMSW__ + +namespace { + +// Convert a `wxBitmap` to a fresh 32 bpp BGRA DIB section with PREMULTIPLIED +// alpha, suitable for use as the source bitmap in a `AlphaBlend` call with +// `AC_SRC_OVER | AC_SRC_ALPHA`. +// +// Going through `wxImage` gives us a known-good straight-RGBA payload +// regardless of how the source `wxBitmap` was originally constructed +// (notably bitmaps from `wxBitmapBundle::FromSVG`). We then premultiply +// once, rounded. +// +// Math notes: +// - The rounded form `(c * a + 127) / 255` is required. Plain `c * a` (no +// divide) overflows the byte and pushes every channel toward 0xFF — the +// "white icons" regression an earlier dev ran into when they tried to +// premultiply manually. `(c * a) / 255` is also wrong for `c=a=0xFF` +// (rounds to 254 instead of 255 and creates 1-bit dimming on opaque +// pixels). The +127 form is the standard premultiply rounding. +HBITMAP makePremultipliedDib(const wxBitmap& bmp) { + if (!bmp.IsOk()) return NULL; + + wxImage img = bmp.ConvertToImage(); + if (!img.IsOk()) return NULL; + if (!img.HasAlpha()) img.InitAlpha(); + + const int w = img.GetWidth(); + const int h = img.GetHeight(); + if (w <= 0 || h <= 0) return NULL; + + BITMAPINFO bi{}; + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bi.bmiHeader.biWidth = w; + bi.bmiHeader.biHeight = -h; // top-down + bi.bmiHeader.biPlanes = 1; + bi.bmiHeader.biBitCount = 32; + bi.bmiHeader.biCompression = BI_RGB; + + HDC screenDc = ::GetDC(NULL); + void* dibPixels = nullptr; + HBITMAP dib = ::CreateDIBSection(screenDc, &bi, DIB_RGB_COLORS, + &dibPixels, NULL, 0); + ::ReleaseDC(NULL, screenDc); + if (dib == NULL || dibPixels == nullptr) { + if (dib != NULL) ::DeleteObject(dib); + return NULL; + } + + const unsigned char* rgb = img.GetData(); + const unsigned char* alpha = img.GetAlpha(); + auto* dest = static_cast(dibPixels); + const int pixels = w * h; + const auto premul = [](unsigned c, unsigned a) -> unsigned char { + return static_cast((c * a + 127) / 255); + }; + for (int p = 0; p < pixels; ++p) { + const unsigned char r = rgb[p * 3 + 0]; + const unsigned char g = rgb[p * 3 + 1]; + const unsigned char b = rgb[p * 3 + 2]; + const unsigned char a = (alpha != nullptr) ? alpha[p] : 255; + dest[p * 4 + 0] = premul(b, a); + dest[p * 4 + 1] = premul(g, a); + dest[p * 4 + 2] = premul(r, a); + dest[p * 4 + 3] = a; + } + return dib; +} + +} // namespace + +IconListCtrl::~IconListCtrl() { + destroyDibCache(); +} + +void IconListCtrl::setIconBitmaps(std::vector normal, + std::vector selected) { + normalBmps_ = std::move(normal); + selectedBmps_ = std::move(selected); + rebuildDibCache(); +} + +void IconListCtrl::destroyDibCache() { + for (void* p : dibBitmaps_) { + if (p != nullptr) ::DeleteObject(static_cast(p)); + } + dibBitmaps_.clear(); + dibWidth_ = 0; + dibHeight_ = 0; +} + +void IconListCtrl::rebuildDibCache() { + destroyDibCache(); + if (normalBmps_.empty() || normalBmps_.size() != selectedBmps_.size()) { + return; + } + dibWidth_ = normalBmps_.front().IsOk() ? normalBmps_.front().GetWidth() : 0; + dibHeight_ = normalBmps_.front().IsOk() ? normalBmps_.front().GetHeight() : 0; + if (dibWidth_ <= 0 || dibHeight_ <= 0) return; + + dibBitmaps_.reserve(normalBmps_.size() + selectedBmps_.size()); + for (const auto& b : normalBmps_) { + dibBitmaps_.push_back(static_cast(makePremultipliedDib(b))); + } + for (const auto& b : selectedBmps_) { + dibBitmaps_.push_back(static_cast(makePremultipliedDib(b))); + } +} + +bool IconListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result) { + auto* hdr = reinterpret_cast(lParam); + if (hdr != nullptr && hdr->code == NM_CUSTOMDRAW) { + auto* cd = reinterpret_cast(lParam); + switch (cd->nmcd.dwDrawStage) { + case CDDS_PREPAINT: + *result = CDRF_NOTIFYITEMDRAW; + return true; + + case CDDS_ITEMPREPAINT: + *result = CDRF_NOTIFYSUBITEMDRAW; + return true; + + case CDDS_SUBITEM | CDDS_ITEMPREPAINT: { + const int col = cd->iSubItem; + if (col >= firstIconCol_ && col < firstIconCol_ + iconColCount_) { + // Let the default first paint background/selection, then we + // overlay the centered icon in POSTPAINT. + *result = CDRF_NOTIFYPOSTPAINT; + return true; + } + *result = CDRF_DODEFAULT; + return true; + } + + case CDDS_SUBITEM | CDDS_ITEMPOSTPAINT: { + const int col = cd->iSubItem; + if (col < firstIconCol_ || col >= firstIconCol_ + iconColCount_) { + *result = CDRF_DODEFAULT; + return true; + } + if (!predicate_ || dibBitmaps_.empty()) { + *result = CDRF_DODEFAULT; + return true; + } + const long row = static_cast(cd->nmcd.dwItemSpec); + const int iconIdx = col - firstIconCol_; + if (iconIdx < 0 || iconIdx >= iconColCount_) { + *result = CDRF_DODEFAULT; + return true; + } + if (!predicate_(row, iconIdx)) { + *result = CDRF_DODEFAULT; + return true; + } + const HWND lcHwnd = reinterpret_cast(GetHandle()); + // `cd->nmcd.uItemState & CDIS_SELECTED` is unreliable in the + // CDDS_SUBITEM | CDDS_ITEMPOSTPAINT stage on Windows — comctl32 + // does not always propagate the item's CDIS_* flags down into + // sub-item draw stages, so we'd silently fall back to the normal + // (dark) variant on selected rows. Query LVIS_SELECTED directly + // off the listview, which is always accurate. + const UINT lvState = ListView_GetItemState(lcHwnd, row, LVIS_SELECTED); + const bool selected = (lvState & LVIS_SELECTED) != 0; + + // Sub-item bounds in client coords. Initialize the request as + // documented for LVM_GETSUBITEMRECT: rc.top = sub-item index, + // rc.left = which rect (LVIR_BOUNDS). + RECT rc; + rc.top = col; + rc.left = LVIR_BOUNDS; + ::SendMessageW(lcHwnd, + LVM_GETSUBITEMRECT, + static_cast(row), + reinterpret_cast(&rc)); + + const int cellCx = (rc.left + rc.right) / 2; + const int cellCy = (rc.top + rc.bottom) / 2; + const int x = cellCx - dibWidth_ / 2; + const int y = cellCy - dibHeight_ / 2; + + const std::size_t imgIdx = + static_cast(iconIdx) + + (selected ? static_cast(iconColCount_) : 0); + if (imgIdx >= dibBitmaps_.size() || dibBitmaps_[imgIdx] == nullptr) { + *result = CDRF_DODEFAULT; + return true; + } + HBITMAP src = static_cast(dibBitmaps_[imgIdx]); + + HDC dstDc = cd->nmcd.hdc; + HDC memDc = ::CreateCompatibleDC(dstDc); + HGDIOBJ oldBmp = ::SelectObject(memDc, src); + + BLENDFUNCTION bf{}; + bf.BlendOp = AC_SRC_OVER; + bf.BlendFlags = 0; + bf.SourceConstantAlpha = 0xFF; + bf.AlphaFormat = AC_SRC_ALPHA; + + ::AlphaBlend(dstDc, x, y, dibWidth_, dibHeight_, + memDc, 0, 0, dibWidth_, dibHeight_, bf); + + ::SelectObject(memDc, oldBmp); + ::DeleteDC(memDc); + + *result = CDRF_DODEFAULT; + return true; + } + + default: + break; + } + } + return wxListCtrl::MSWOnNotify(idCtrl, lParam, result); +} + +#else // !__WXMSW__ + +IconListCtrl::~IconListCtrl() = default; + +void IconListCtrl::setIconBitmaps(std::vector normal, + std::vector selected) { + normalBmps_ = std::move(normal); + selectedBmps_ = std::move(selected); +} + +void IconListCtrl::destroyDibCache() {} +void IconListCtrl::rebuildDibCache() {} + +#endif // __WXMSW__ + +} // namespace ccm::ui diff --git a/ui_wx/src/ImageViewerDialog.cpp b/ui_wx/src/ImageViewerDialog.cpp new file mode 100644 index 0000000..8b5f278 --- /dev/null +++ b/ui_wx/src/ImageViewerDialog.cpp @@ -0,0 +1,163 @@ +#include "ccm/ui/ImageViewerDialog.hpp" + +#include +#include +#include +#include +#include +#include + +namespace ccm::ui { + +namespace { + +class ImageCanvas : public wxPanel { +public: + explicit ImageCanvas(wxWindow* parent) : wxPanel(parent, wxID_ANY) { + SetBackgroundStyle(wxBG_STYLE_PAINT); + Bind(wxEVT_PAINT, &ImageCanvas::onPaint, this); + Bind(wxEVT_SIZE, [this](wxSizeEvent& ev) { Refresh(); ev.Skip(); }); + } + + void setImage(const wxImage& img) { + original_ = img; + cachedScaled_ = wxBitmap(); + cachedScaledFor_ = wxSize(-1, -1); + Refresh(); + } + +private: + void onPaint(wxPaintEvent&) { + wxPaintDC dc(this); + dc.Clear(); + if (!original_.IsOk()) return; + + const wxSize ws = GetClientSize(); + if (ws.GetWidth() <= 0 || ws.GetHeight() <= 0) return; + + const double scale = std::min( + static_cast(ws.GetWidth()) / original_.GetWidth(), + static_cast(ws.GetHeight()) / original_.GetHeight()); + const int w = std::max(1, static_cast(original_.GetWidth() * scale)); + const int h = std::max(1, static_cast(original_.GetHeight() * scale)); + const wxSize scaledSize(w, h); + if (!cachedScaled_.IsOk() || cachedScaledFor_ != scaledSize) { + // Use normal quality for very large reductions to keep navigation snappy. + const long long srcPixels = static_cast(original_.GetWidth()) * original_.GetHeight(); + const long long dstPixels = static_cast(w) * h; + const bool heavyDownscale = dstPixels > 0 && srcPixels > (dstPixels * 4); + const wxImageResizeQuality quality = + heavyDownscale ? wxIMAGE_QUALITY_NORMAL : wxIMAGE_QUALITY_HIGH; + wxImage scaled = original_.Scale(w, h, quality); + cachedScaled_ = wxBitmap(scaled); + cachedScaledFor_ = scaledSize; + } + dc.DrawBitmap(cachedScaled_, + (ws.GetWidth() - w) / 2, + (ws.GetHeight() - h) / 2, + true); + } + + wxImage original_; + wxBitmap cachedScaled_; + wxSize cachedScaledFor_{-1, -1}; +}; + +} // namespace + +ImageViewerDialog::ImageViewerDialog(wxWindow* parent, + std::vector imagePaths, + std::size_t startIndex) + : wxDialog(parent, wxID_ANY, "Image", + wxDefaultPosition, wxSize(700, 900), + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), + paths_(std::move(imagePaths)), + index_(startIndex < paths_.size() ? startIndex : 0) { + imageCache_.resize(paths_.size()); + imageCacheReady_.assign(paths_.size(), false); + + auto* root = new wxBoxSizer(wxVERTICAL); + + imageHost_ = new ImageCanvas(this); + root->Add(imageHost_, 1, wxEXPAND | wxALL, 6); + + caption_ = new wxStaticText(this, wxID_ANY, ""); + caption_->SetForegroundColour(*wxBLACK); + root->Add(caption_, 0, wxALL, 6); + + auto* nav = new wxBoxSizer(wxHORIZONTAL); + prevButton_ = new wxButton(this, wxID_ANY, "<< Prev"); + nextButton_ = new wxButton(this, wxID_ANY, "Next >>"); + auto* prev = prevButton_; + auto* next = nextButton_; + nav->Add(prev, 0, wxRIGHT, 6); + nav->Add(next, 0); + nav->AddStretchSpacer(1); + nav->Add(new wxButton(this, wxID_OK, "Close"), 0); + // Reserve bottom-right space for the dark resize-grip overlay on Windows. + root->Add(nav, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 6); + root->AddSpacer(24); + + prev->Bind(wxEVT_BUTTON, &ImageViewerDialog::onPrev, this); + next->Bind(wxEVT_BUTTON, &ImageViewerDialog::onNext, this); + + SetSizer(root); + show(index_); +} + +bool ImageViewerDialog::loadImageAt(std::size_t index) { + if (index >= paths_.size()) return false; + if (imageCacheReady_[index]) return imageCache_[index].IsOk(); + + wxImage img; + if (!img.LoadFile(paths_[index].string())) { + imageCacheReady_[index] = true; + return false; + } + + imageCache_[index] = std::move(img); + imageCacheReady_[index] = true; + return true; +} + +void ImageViewerDialog::prefetchNeighbors() { + if (paths_.size() < 2) return; + const std::size_t prev = (index_ + paths_.size() - 1) % paths_.size(); + const std::size_t next = (index_ + 1) % paths_.size(); + loadImageAt(prev); + loadImageAt(next); +} + +void ImageViewerDialog::show(std::size_t index) { + if (paths_.empty()) { + caption_->SetLabelText("(no images)"); + return; + } + index_ = index % paths_.size(); + if (loadImageAt(index_)) static_cast(imageHost_)->setImage(imageCache_[index_]); + caption_->SetLabelText(paths_[index_].filename().string() + + " (" + std::to_string(index_ + 1) + + "/" + std::to_string(paths_.size()) + ")"); + prefetchNeighbors(); + Layout(); +} + +void ImageViewerDialog::onPrev(wxCommandEvent&) { + if (paths_.empty()) return; + if (imageHost_ != nullptr) imageHost_->SetFocus(); + const std::size_t target = (index_ + paths_.size() - 1) % paths_.size(); + CallAfter([this, target]() { + if (!IsBeingDeleted()) show(target); + }); +} + +void ImageViewerDialog::onNext(wxCommandEvent&) { + if (paths_.empty()) return; + if (imageHost_ != nullptr) imageHost_->SetFocus(); + const std::size_t target = (index_ + 1) % paths_.size(); + CallAfter([this, target]() { + if (!IsBeingDeleted()) show(target); + }); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/MagicCardEditDialog.cpp b/ui_wx/src/MagicCardEditDialog.cpp new file mode 100644 index 0000000..7742596 --- /dev/null +++ b/ui_wx/src/MagicCardEditDialog.cpp @@ -0,0 +1,39 @@ +#include "ccm/ui/MagicCardEditDialog.hpp" + +namespace ccm::ui { + +MagicCardEditDialog::MagicCardEditDialog(wxWindow* parent, + ImageService& imageService, + SetService& setService, + EditMode mode, + MagicCard initial, + const std::vector* preloadedSets) + : BaseCardEditDialog( + parent, + mode == EditMode::Create ? "Add Magic Card" : "Edit Magic Card", + imageService, setService, mode, std::move(initial), Game::Magic, preloadedSets) { + buildAndPopulate(); +} + +void MagicCardEditDialog::buildFlagsRow(wxBoxSizer* flagsBox) { + foilCheck_ = new wxCheckBox(this, wxID_ANY, "Foil"); + signedCheck_ = new wxCheckBox(this, wxID_ANY, "Signed"); + alteredCheck_ = new wxCheckBox(this, wxID_ANY, "Altered"); + flagsBox->Add(foilCheck_, 0, wxRIGHT, 12); + flagsBox->Add(signedCheck_, 0, wxRIGHT, 12); + flagsBox->Add(alteredCheck_, 0, wxRIGHT, 12); +} + +void MagicCardEditDialog::readExtraFromCard() { + if (foilCheck_) foilCheck_->SetValue(constCard().foil); + if (signedCheck_) signedCheck_->SetValue(constCard().signed_); + if (alteredCheck_) alteredCheck_->SetValue(constCard().altered); +} + +void MagicCardEditDialog::writeExtraToCard() { + if (foilCheck_) mutableCard().foil = foilCheck_->IsChecked(); + if (signedCheck_) mutableCard().signed_ = signedCheck_->IsChecked(); + if (alteredCheck_) mutableCard().altered = alteredCheck_->IsChecked(); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/MagicCardListPanel.cpp b/ui_wx/src/MagicCardListPanel.cpp new file mode 100644 index 0000000..2509790 --- /dev/null +++ b/ui_wx/src/MagicCardListPanel.cpp @@ -0,0 +1,70 @@ +#include "ccm/ui/MagicCardListPanel.hpp" + +#include "ccm/services/CardFilter.hpp" +#include "ccm/ui/SvgIcons.hpp" + +#include + +namespace ccm::ui { + +MagicCardListPanel::MagicCardListPanel(wxWindow* parent) + : BaseCardListPanel(parent) { + buildLayout(); +} + +std::vector +MagicCardListPanel::declareTextColumns() const { + return { + {"Name", 220, wxLIST_FORMAT_LEFT, MagicSortColumn::Name}, + {"Set", 180, wxLIST_FORMAT_LEFT, MagicSortColumn::SetReleaseDate}, + {"Amount", 70, wxLIST_FORMAT_RIGHT, MagicSortColumn::Amount}, + {"Condition", 100, wxLIST_FORMAT_LEFT, MagicSortColumn::Condition}, + {"Language", 100, wxLIST_FORMAT_LEFT, MagicSortColumn::Language}, + // Trailing Note column, always last. + {"Note", 220, wxLIST_FORMAT_LEFT, MagicSortColumn::Note}, + }; +} + +std::vector +MagicCardListPanel::declareIconColumns() const { + constexpr int kFlagColWidth = 36; + return { + {kSvgFoil, kFlagColWidth, MagicSortColumn::Foil}, + {kSvgSigned, kFlagColWidth, MagicSortColumn::Signed}, + {kSvgAltered, kFlagColWidth, MagicSortColumn::Altered}, + }; +} + +std::string MagicCardListPanel::renderTextCell(const MagicCard& card, + std::size_t idx) const { + switch (idx) { + case 0: return card.name; + case 1: return card.set.name; + case 2: return std::to_string(card.amount); + case 3: return std::string(to_string(card.condition)); + case 4: return std::string(to_string(card.language)); + case 5: return card.note; + } + return {}; +} + +bool MagicCardListPanel::isIconColumnSet(const MagicCard& card, + std::size_t idx) const { + switch (idx) { + case 0: return card.foil; + case 1: return card.signed_; + case 2: return card.altered; + } + return false; +} + +void MagicCardListPanel::sortBy(MagicSortColumn column, bool ascending) { + sortMagicCards(mutableCards(), column, ascending); +} + +bool MagicCardListPanel::matchesFilter(const MagicCard& card, + std::string_view filter) const { + return matchesMagicFilter(card, filter); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/MagicGameView.cpp b/ui_wx/src/MagicGameView.cpp new file mode 100644 index 0000000..eb3db0e --- /dev/null +++ b/ui_wx/src/MagicGameView.cpp @@ -0,0 +1,201 @@ +#include "ccm/ui/MagicGameView.hpp" + +#include "ccm/ui/MagicCardEditDialog.hpp" +#include "ccm/ui/MagicCardListPanel.hpp" +#include "ccm/ui/MagicSelectedCardPanel.hpp" + +#include + +#include +#include + +namespace ccm::ui { + +MagicGameView::MagicGameView(ConfigService& config, + CollectionService& collection, + SetService& sets, + ImageService& images, + CardPreviewService& cardPreview, + IGameModule& module) + : config_(config), + collection_(collection), + sets_(sets), + images_(images), + cardPreview_(cardPreview), + module_(module) {} + +void MagicGameView::ensureSetsLoaded() { + if (attemptedInitialSetLoad_) return; + attemptedInitialSetLoad_ = true; + + auto cached = sets_.getSets(Game::Magic); + if (cached) { + setsCache_ = std::move(cached).value(); + if (!setsCache_.empty()) return; + } else { + setsCache_.clear(); + } + + auto refreshed = sets_.updateSets(Game::Magic); + if (refreshed) { + setsCache_ = std::move(refreshed).value(); + } +} + +wxPanel* MagicGameView::listPanel(wxWindow* parent) { + if (listPanel_ == nullptr) { + listPanel_ = new MagicCardListPanel(parent); + // Selection in the list -> push the typed card to the selected panel. + // Binding here (in the view, not in MainFrame) keeps the typed wiring + // local to the per-game implementation - MainFrame only sees IGameView. + listPanel_->Bind(EVT_CARD_SELECTED, [this](wxCommandEvent&) { + if (selectedPanel_ != nullptr && listPanel_ != nullptr) { + selectedPanel_->setCard(listPanel_->selected()); + } + }); + } + return listPanel_; +} + +wxPanel* MagicGameView::selectedPanel(wxWindow* parent) { + if (selectedPanel_ == nullptr) { + selectedPanel_ = new MagicSelectedCardPanel(parent, images_, cardPreview_); + } + return selectedPanel_; +} + +void MagicGameView::refreshCollection() { + if (listPanel_ == nullptr) return; + auto loaded = collection_.list(Game::Magic); + if (!loaded) { + showThemedMessageDialog(nullptr, "Failed to load Magic collection: " + loaded.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + listPanel_->setCards(std::move(loaded).value()); + listPanel_->activateSelection(); + if (selectedPanel_) selectedPanel_->setCard(listPanel_->selected()); +} + +const std::vector& MagicGameView::setsForDialog() { + ensureSetsLoaded(); + if (!setsCache_.empty()) return setsCache_; + auto loaded = sets_.getSets(Game::Magic); + if (loaded) setsCache_ = std::move(loaded).value(); + else setsCache_.clear(); + return setsCache_; +} + +void MagicGameView::onAddCard(wxWindow* parentWindow) { + MagicCard fresh; + fresh.amount = 1; + fresh.language = Language::English; + fresh.condition = Condition::NearMint; + + MagicCardEditDialog dlg(parentWindow, images_, sets_, EditMode::Create, fresh, + &setsForDialog()); + { + const Theme currentTheme = config_.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + } + if (dlg.ShowModal() != wxID_OK) return; + + auto added = collection_.add(Game::Magic, dlg.card()); + if (!added) { + showThemedMessageDialog(parentWindow, "Failed to add card: " + added.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + + MagicCard persisted = dlg.card(); + persisted.id = added.value(); + auto normalized = images_.normalizeNamesForPersistedCard( + Game::Magic, persisted.id, persisted.set.name, persisted.name, persisted.images); + if (normalized) { + if (normalized.value() != persisted.images) { + persisted.images = std::move(normalized).value(); + auto updated = collection_.update(Game::Magic, persisted); + if (!updated) { + showThemedMessageDialog(parentWindow, "Card added, but image name normalization failed to persist: " + updated.error(), + "Warning", wxOK | wxICON_WARNING); + } + } + } else { + showThemedMessageDialog(parentWindow, "Card added, but image rename to ID-prefixed format failed: " + normalized.error(), + "Warning", wxOK | wxICON_WARNING); + } + refreshCollection(); +} + +void MagicGameView::onEditCard(wxWindow* parentWindow) { + if (listPanel_ == nullptr) return; + auto sel = listPanel_->selected(); + if (!sel) { + showThemedMessageDialog(parentWindow, "Select a card first.", "Edit", wxOK | wxICON_INFORMATION); + return; + } + MagicCardEditDialog dlg(parentWindow, images_, sets_, EditMode::Edit, *sel, + &setsForDialog()); + { + const Theme currentTheme = config_.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + } + if (dlg.ShowModal() != wxID_OK) return; + auto updated = collection_.update(Game::Magic, dlg.card()); + if (!updated) { + showThemedMessageDialog(parentWindow, "Failed to update card: " + updated.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + refreshCollection(); +} + +void MagicGameView::onDeleteCard(wxWindow* parentWindow) { + if (listPanel_ == nullptr) return; + auto sel = listPanel_->selected(); + if (!sel) { + showThemedMessageDialog(parentWindow, "Select a card first.", "Delete", wxOK | wxICON_INFORMATION); + return; + } + if (showThemedConfirmDialog(parentWindow, "Delete \"" + sel->name + "\"?", + "Confirm") != wxID_YES) { + return; + } + auto removed = collection_.remove(Game::Magic, sel->id); + if (!removed) { + showThemedMessageDialog(parentWindow, "Failed to delete card: " + removed.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + refreshCollection(); +} + +std::string MagicGameView::onUpdateSets(wxWindow* parentWindow) { + auto out = sets_.updateSets(Game::Magic); + if (!out) { + showThemedMessageDialog(parentWindow, "Failed to update sets: " + out.error(), + "Error", wxOK | wxICON_ERROR); + return "Update failed"; + } + setsCache_ = out.value(); + showThemedMessageDialog(parentWindow, "Updated " + std::to_string(out.value().size()) + " Magic sets.", + "Sets updated", wxOK | wxICON_INFORMATION); + return "Magic sets updated."; +} + +void MagicGameView::setFilter(std::string_view filter) { + if (listPanel_) listPanel_->setFilter(filter); +} + +void MagicGameView::applyTheme(const ThemePalette& palette) { + if (listPanel_) listPanel_->applyTheme(palette); + if (selectedPanel_) selectedPanel_->applyTheme(palette); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/MagicSelectedCardPanel.cpp b/ui_wx/src/MagicSelectedCardPanel.cpp new file mode 100644 index 0000000..3005cd0 --- /dev/null +++ b/ui_wx/src/MagicSelectedCardPanel.cpp @@ -0,0 +1,77 @@ +#include "ccm/ui/MagicSelectedCardPanel.hpp" + +#include "ccm/ui/SvgIcons.hpp" + +#include + +namespace ccm::ui { + +namespace { +// Detail-row keys local to the Magic implementation. +enum MagicDetailKey : int { + kName = 0, + kSet, + kLanguage, + kCondition, + kAmount, + kFoil, + kSigned, + kAltered, +}; +} // namespace + +MagicSelectedCardPanel::MagicSelectedCardPanel(wxWindow* parent, + ImageService& imageService, + CardPreviewService& cardPreview) + : BaseSelectedCardPanel(parent, imageService, cardPreview) { + buildLayout(); +} + +std::vector +MagicSelectedCardPanel::declareDetailRows() const { + return { + {"Name", kName, "(no card selected)"}, + {"Set", kSet, ""}, + {"Language", kLanguage, ""}, + {"Condition", kCondition, ""}, + {"Amount", kAmount, ""}, + }; +} + +std::vector +MagicSelectedCardPanel::declareFlagIcons() const { + return { + {kSvgFoil, "Foil", kFoil}, + {kSvgSigned, "Signed", kSigned}, + {kSvgAltered, "Altered", kAltered}, + }; +} + +std::string MagicSelectedCardPanel::detailValueFor(const MagicCard& card, + DetailKey key) const { + switch (key) { + case kName: return card.name; + case kSet: return card.set.name; + case kLanguage: return std::string(to_string(card.language)); + case kCondition: return std::string(to_string(card.condition)); + case kAmount: return std::to_string(card.amount); + case kNoteKey: return card.note; + } + return {}; +} + +bool MagicSelectedCardPanel::isFlagSet(const MagicCard& card, DetailKey key) const { + switch (key) { + case kFoil: return card.foil; + case kSigned: return card.signed_; + case kAltered: return card.altered; + } + return false; +} + +std::tuple +MagicSelectedCardPanel::previewKey(const MagicCard& card) const { + return {card.name, card.set.id, std::string{}}; +} + +} // namespace ccm::ui diff --git a/ui_wx/src/MainFrame.cpp b/ui_wx/src/MainFrame.cpp new file mode 100644 index 0000000..eaf4b8c --- /dev/null +++ b/ui_wx/src/MainFrame.cpp @@ -0,0 +1,446 @@ +#include "ccm/ui/MainFrame.hpp" + +// BaseSelectedCardPanel.hpp is included for the shared EVT_PREVIEW_STATUS +// declaration so MainFrame can subscribe to preview-status updates from any +// active selected panel without depending on a specific game's view. +#include "ccm/ui/BaseSelectedCardPanel.hpp" +#include "ccm/ui/IGameView.hpp" +#include "ccm/ui/AppVersion.hpp" +#include "ccm/ui/SettingsDialog.hpp" +#include "ccm/ui/SvgIcons.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef __WXMSW__ +#include +#endif + +namespace ccm::ui { + +namespace { +constexpr int kToolbarIconPx = 18; +constexpr const char kFilterInputHint[] = "Filter"; + +std::string dirNameForGame(Game g) { + switch (g) { + case Game::Magic: return "magic"; + case Game::Pokemon: return "pokemon"; + } + return "magic"; +} + +void ensureDataStorageScaffold(const Configuration& cfg) { + namespace fs = std::filesystem; + const fs::path root(cfg.dataStorage); + std::error_code ec; + fs::create_directories(root, ec); + if (ec) return; + + const fs::path dataConfigPath = root / "config.json"; + if (!fs::exists(dataConfigPath, ec)) { + std::ofstream out(dataConfigPath.string(), std::ios::out | std::ios::trunc); + if (out.is_open()) { + // Marker file so moved data folders are self-contained on disk. + out << "{\n" + << " \"dataStorage\": \"" << cfg.dataStorage << "\",\n" + << " \"defaultGame\": \"" << to_string(cfg.defaultGame) << "\",\n" + << " \"theme\": \"" << to_string(cfg.theme) << "\"\n" + << "}\n"; + } + } + + for (Game game : {Game::Magic, Game::Pokemon}) { + const fs::path gameRoot = root / dirNameForGame(game); + fs::create_directories(gameRoot / "images", ec); + if (ec) continue; + + const fs::path collectionPath = gameRoot / "collection.json"; + if (!fs::exists(collectionPath, ec)) { + std::ofstream out(collectionPath.string(), std::ios::out | std::ios::trunc); + if (out.is_open()) out << "{}\n"; + } + } +} +} // namespace + +MainFrame::MainFrame(AppContext& ctx) + : wxFrame(nullptr, wxID_ANY, "Card Collection Manager 3", + wxDefaultPosition, wxSize(1210, 700)), + ctx_(ctx), + activeGame_(ctx.config.current().defaultGame) { + buildMenuBar(); + buildLayout(); + applyTheme(); + setStatusTextUi("Ready"); + + setStatusTextUi("Loading collection..."); + CallAfter([this]() { + mountActiveView(); + if (auto* view = activeView()) view->refreshCollection(); + }); +} + +void MainFrame::buildMenuBar() { + Bind(wxEVT_MENU, &MainFrame::onSettings, this, IdSettings); + Bind(wxEVT_MENU, &MainFrame::onQuit, this, wxID_EXIT); + Bind(wxEVT_MENU, &MainFrame::onAbout, this, IdAbout); + Bind(wxEVT_MENU, &MainFrame::onSwitchGame, this, IdGameMenuBase, IdGameMenuLast); + Bind(wxEVT_MENU, &MainFrame::onUpdateSetsForGame, this, IdSetsMenuBase, IdSetsMenuLast); +} + +void MainFrame::buildLayout() { + auto* root = new wxBoxSizer(wxVERTICAL); + + menuStrip_ = new wxPanel(this, wxID_ANY); + auto* menuSizer = new wxBoxSizer(wxHORIZONTAL); + auto* fileLbl = new wxStaticText(menuStrip_, wxID_ANY, "File"); + auto* gameLbl = new wxStaticText(menuStrip_, wxID_ANY, "Game"); + auto* setsLbl = new wxStaticText(menuStrip_, wxID_ANY, "Sets"); + auto* helpLbl = new wxStaticText(menuStrip_, wxID_ANY, "Help"); + fileLbl->SetCursor(wxCursor(wxCURSOR_HAND)); + gameLbl->SetCursor(wxCursor(wxCURSOR_HAND)); + setsLbl->SetCursor(wxCursor(wxCURSOR_HAND)); + helpLbl->SetCursor(wxCursor(wxCURSOR_HAND)); + fileLbl->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { onOpenFileMenu(); }); + gameLbl->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { onOpenGameMenu(); }); + setsLbl->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { onOpenSetsMenu(); }); + helpLbl->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { onOpenHelpMenu(); }); + menuSizer->Add(fileLbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxTOP | wxBOTTOM | wxRIGHT, 4); + menuSizer->Add(gameLbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxTOP | wxBOTTOM | wxRIGHT, 8); + menuSizer->Add(setsLbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxTOP | wxBOTTOM | wxRIGHT, 8); + menuSizer->Add(helpLbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxTOP | wxBOTTOM | wxRIGHT, 8); + menuStrip_->SetSizer(menuSizer); + root->Add(menuStrip_, 0, wxEXPAND); + + auto* toolbar = new wxBoxSizer(wxHORIZONTAL); + auto makeToolBtn = [&](int id, const char* svg, const wxString& tip) { + wxBitmap bmp = svgIconBitmap(svg, kToolbarIconPx, "#000000"); + auto* b = new wxBitmapButton(this, id, bmp, wxDefaultPosition, + wxDefaultSize, + wxBU_EXACTFIT); + b->SetToolTip(tip); + return b; + }; + toolbarButtons_[0] = makeToolBtn(IdCreate, kSvgToolbarAdd, "Add Card"); + toolbarButtons_[1] = makeToolBtn(IdEdit, kSvgToolbarEdit, "Edit"); + toolbarButtons_[2] = makeToolBtn(IdDelete, kSvgToolbarDelete, "Delete"); + toolbar->AddSpacer(4); + toolbar->Add(toolbarButtons_[0], 0, wxALIGN_CENTER_VERTICAL | wxALL, 4); + toolbar->Add(toolbarButtons_[1], 0, wxALIGN_CENTER_VERTICAL | wxALL, 4); + toolbar->Add(toolbarButtons_[2], 0, wxALIGN_CENTER_VERTICAL | wxALL, 4); + toolbar->AddStretchSpacer(1); + filterInput_ = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, + wxSize(260, -1)); + filterInput_->SetHint(kFilterInputHint); + toolbar->Add(filterInput_, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxTOP | wxBOTTOM, 4); + root->Add(toolbar, 0, wxEXPAND); + + splitter_ = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, + wxDefaultSize, wxSP_LIVE_UPDATE); + splitter_->SetMinimumPaneSize(280); + root->Add(splitter_, 1, wxEXPAND); + + auto* statusPanel = new wxPanel(this, wxID_ANY); + auto* statusSizer = new wxBoxSizer(wxHORIZONTAL); + statusText_ = new wxStaticText(statusPanel, wxID_ANY, "Ready"); + statusSizer->Add(statusText_, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 6); + statusPanel->SetSizer(statusSizer); + root->Add(statusPanel, 0, wxEXPAND | wxTOP, 2); + + SetSizer(root); + + Bind(wxEVT_BUTTON, &MainFrame::onCreate, this, IdCreate); + Bind(wxEVT_BUTTON, &MainFrame::onEdit, this, IdEdit); + Bind(wxEVT_BUTTON, &MainFrame::onDelete, this, IdDelete); + + filterInput_->Bind(wxEVT_TEXT, [this](wxCommandEvent&) { + if (auto* view = activeView()) { + view->setFilter(filterInput_->GetValue().ToStdString()); + } + }); + + // Selection changes are handled per-view (each IGameView binds + // EVT_CARD_SELECTED on its own typed list panel and pushes the typed + // selection into its selected panel). MainFrame only reacts to preview + // status updates from any active selected panel. + Bind(EVT_PREVIEW_STATUS, [this](wxCommandEvent& ev) { + const wxString msg = ev.GetString(); + setStatusTextUi(msg.IsEmpty() ? wxString("Ready") : msg); + }); +} + +IGameView* MainFrame::activeView() { + for (auto* v : ctx_.gameViews) { + if (v != nullptr && v->gameId() == activeGame_) return v; + } + return nullptr; +} + +void MainFrame::mountActiveView() { + auto* view = activeView(); + if (view == nullptr || splitter_ == nullptr) return; + + // Hide every other view's panels so wx doesn't double-paint them. + for (auto* other : ctx_.gameViews) { + if (other == nullptr || other == view) continue; + if (auto* lp = other->listPanel(splitter_)) lp->Hide(); + if (auto* sp = other->selectedPanel(splitter_)) sp->Hide(); + } + + auto* listPanel = view->listPanel(splitter_); + auto* selectedPanel = view->selectedPanel(splitter_); + if (listPanel == nullptr || selectedPanel == nullptr) return; + listPanel->Show(); + selectedPanel->Show(); + + if (splitter_->IsSplit()) { + splitter_->ReplaceWindow(splitter_->GetWindow1(), selectedPanel); + splitter_->ReplaceWindow(splitter_->GetWindow2(), listPanel); + } else { + splitter_->SplitVertically(selectedPanel, listPanel, 360); + } + + const ThemePalette palette = paletteForTheme(ctx_.config.current().theme); + view->applyTheme(palette); + applyThemeToWindowTree(selectedPanel, palette, ctx_.config.current().theme); + applyThemeToWindowTree(listPanel, palette, ctx_.config.current().theme); +} + +void MainFrame::switchGame(Game g) { + if (g == activeGame_) return; + activeGame_ = g; + mountActiveView(); + if (auto* view = activeView()) { + if (filterInput_ != nullptr) { + filterInput_->ChangeValue(wxString{}); + filterInput_->SetHint(kFilterInputHint); + filterInput_->Refresh(); + } + view->setFilter(""); + view->refreshCollection(); + setStatusTextUi(view->displayName()); + } +} + +void MainFrame::refreshToolbarIcons() { + const ThemePalette palette = paletteForTheme(ctx_.config.current().theme); + const std::string tbHex = palette.buttonText.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + if (toolbarButtons_[0]) toolbarButtons_[0]->SetBitmap(svgIconBitmap(kSvgToolbarAdd, kToolbarIconPx, tbHex.c_str())); + if (toolbarButtons_[1]) toolbarButtons_[1]->SetBitmap(svgIconBitmap(kSvgToolbarEdit, kToolbarIconPx, tbHex.c_str())); + if (toolbarButtons_[2]) toolbarButtons_[2]->SetBitmap(svgIconBitmap(kSvgToolbarDelete, kToolbarIconPx, tbHex.c_str())); +} + +void MainFrame::applyTheme() { + const Theme currentTheme = ctx_.config.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(this, palette, currentTheme); + SetBackgroundColour(palette.windowBg); + SetForegroundColour(palette.text); + if (filterInput_ != nullptr) { + filterInput_->SetBackgroundColour(palette.inputBg); + filterInput_->SetForegroundColour(palette.inputText); + filterInput_->SetOwnBackgroundColour(palette.inputBg); + filterInput_->SetOwnForegroundColour(palette.inputText); + filterInput_->Refresh(); + } + for (auto* view : ctx_.gameViews) { + if (view != nullptr) view->applyTheme(palette); + } + refreshToolbarIcons(); + Refresh(); + Update(); +} + +void MainFrame::setStatusTextUi(const wxString& text) { + if (statusText_ != nullptr) { + statusText_->SetLabelText(text); + } +} + +void MainFrame::onOpenFileMenu() { + wxMenu menu; + menu.Append(IdSettings, "Settings...\tCtrl+,", "Open application settings"); + menu.AppendSeparator(); + menu.Append(wxID_EXIT, "Quit\tCtrl+Q", "Exit the application"); + if (menuStrip_ != nullptr) { + menuStrip_->PopupMenu(&menu, 4, menuStrip_->GetSize().GetHeight()); + } +} + +void MainFrame::onOpenGameMenu() { + wxMenu menu; + menuIdToGame_.clear(); + int id = IdGameMenuBase; + for (auto* view : ctx_.gameViews) { + if (view == nullptr) continue; + menu.AppendRadioItem(id, view->displayName()); + menu.Check(id, view->gameId() == activeGame_); + menuIdToGame_[id] = view->gameId(); + ++id; + } + if (menuStrip_ != nullptr) { + menuStrip_->PopupMenu(&menu, 44, menuStrip_->GetSize().GetHeight()); + } +} + +void MainFrame::onOpenSetsMenu() { + wxMenu menu; + menuIdToGame_.clear(); + int id = IdSetsMenuBase; + for (auto* view : ctx_.gameViews) { + if (view == nullptr) continue; + menu.Append(id, view->updateSetsMenuLabel(), + "Refresh set list from the game's API"); + menuIdToGame_[id] = view->gameId(); + ++id; + } + if (menuStrip_ != nullptr) { + menuStrip_->PopupMenu(&menu, 92, menuStrip_->GetSize().GetHeight()); + } +} + +void MainFrame::onOpenHelpMenu() { + wxMenu menu; + menu.Append(IdAbout, "About", "About Card Collection Manager 3"); + if (menuStrip_ != nullptr) { + menuStrip_->PopupMenu(&menu, 136, menuStrip_->GetSize().GetHeight()); + } +} + +// Menu handlers --------------------------------------------------------------- + +void MainFrame::onSettings(wxCommandEvent&) { + const Theme beforeTheme = ctx_.config.current().theme; + const std::string beforeDataStorage = ctx_.config.current().dataStorage; + SettingsDialog dlg(this, ctx_.config); + { + const Theme currentTheme = ctx_.config.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + } + if (dlg.ShowModal() == wxID_OK) { + const bool dataDirChanged = ctx_.config.current().dataStorage != beforeDataStorage; + if (dataDirChanged) { + ensureDataStorageScaffold(ctx_.config.current()); + for (auto* view : ctx_.gameViews) { + if (view != nullptr) view->refreshCollection(); + } + } + if (ctx_.config.current().theme != beforeTheme) { + applyTheme(); + } + } +} + +void MainFrame::onQuit(wxCommandEvent&) { Close(true); } + +void MainFrame::onSwitchGame(wxCommandEvent& ev) { + const auto it = menuIdToGame_.find(ev.GetId()); + if (it == menuIdToGame_.end()) return; + switchGame(it->second); +} + +void MainFrame::onUpdateSetsForGame(wxCommandEvent& ev) { + const auto it = menuIdToGame_.find(ev.GetId()); + if (it == menuIdToGame_.end()) return; + IGameView* targetView = nullptr; + for (auto* v : ctx_.gameViews) { + if (v != nullptr && v->gameId() == it->second) { targetView = v; break; } + } + if (targetView == nullptr) return; + + setStatusTextUi("Updating " + targetView->displayName() + " sets..."); + Update(); + const auto status = targetView->onUpdateSets(this); + setStatusTextUi(status); +} + +void MainFrame::onAbout(wxCommandEvent&) { + wxDialog dlg(this, wxID_ANY, "About Card Collection Manager 3", + wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); + + auto* root = new wxBoxSizer(wxVERTICAL); + auto* name = new wxStaticText(&dlg, wxID_ANY, "Card Collection Manager 3"); + auto* version = new wxStaticText(&dlg, wxID_ANY, wxString("Version: ") + kAppVersion); + auto* desc = new wxStaticText(&dlg, wxID_ANY, + "Desktop card collection manager for Magic and Pokemon."); + wxFont titleFont = name->GetFont(); + titleFont.MakeBold().MakeLarger(); + name->SetFont(titleFont); + + root->Add(name, 0, wxALL, 10); + root->Add(version, 0, wxLEFT | wxRIGHT | wxBOTTOM, 10); + root->Add(desc, 0, wxLEFT | wxRIGHT | wxBOTTOM, 10); + if (auto* buttons = dlg.CreateButtonSizer(wxOK)) { + root->Add(buttons, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 10); + } + + dlg.SetSizerAndFit(root); + const wxSize fitSize = dlg.GetSize(); + dlg.SetSize(fitSize.GetWidth(), static_cast(fitSize.GetHeight() * 1.10)); + const Theme currentTheme = ctx_.config.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + dlg.CentreOnParent(); + dlg.ShowModal(); +} + +// Toolbar handlers ------------------------------------------------------------ + +void MainFrame::onCreate(wxCommandEvent&) { + if (auto* view = activeView()) view->onAddCard(this); +} + +void MainFrame::onEdit(wxCommandEvent&) { + if (auto* view = activeView()) view->onEditCard(this); +} + +void MainFrame::onDelete(wxCommandEvent&) { + if (auto* view = activeView()) view->onDeleteCard(this); +} + +#ifdef __WXMSW__ +WXLRESULT MainFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { + if (message == WM_CTLCOLOREDIT && filterInput_ != nullptr) { + const HWND target = reinterpret_cast(lParam); + const HWND filterHwnd = reinterpret_cast(filterInput_->GetHandle()); + if (target != nullptr && filterHwnd != nullptr && target == filterHwnd) { + const ThemePalette palette = paletteForTheme(ctx_.config.current().theme); + HDC hdc = reinterpret_cast(wParam); + ::SetTextColor(hdc, RGB(palette.inputText.Red(), palette.inputText.Green(), + palette.inputText.Blue())); + ::SetBkColor(hdc, RGB(palette.inputBg.Red(), palette.inputBg.Green(), + palette.inputBg.Blue())); + ::SetDCBrushColor(hdc, RGB(palette.inputBg.Red(), palette.inputBg.Green(), + palette.inputBg.Blue())); + return reinterpret_cast(::GetStockObject(DC_BRUSH)); + } + } + return wxFrame::MSWWindowProc(message, wParam, lParam); +} +#endif + +} // namespace ccm::ui diff --git a/ui_wx/src/PokemonCardEditDialog.cpp b/ui_wx/src/PokemonCardEditDialog.cpp new file mode 100644 index 0000000..4550c52 --- /dev/null +++ b/ui_wx/src/PokemonCardEditDialog.cpp @@ -0,0 +1,50 @@ +#include "ccm/ui/PokemonCardEditDialog.hpp" + +namespace ccm::ui { + +PokemonCardEditDialog::PokemonCardEditDialog(wxWindow* parent, + ImageService& imageService, + SetService& setService, + EditMode mode, + PokemonCard initial, + const std::vector* preloadedSets) + : BaseCardEditDialog( + parent, + mode == EditMode::Create ? "Add Pokemon Card" : "Edit Pokemon Card", + imageService, setService, mode, std::move(initial), Game::Pokemon, preloadedSets) { + buildAndPopulate(); +} + +void PokemonCardEditDialog::buildFlagsRow(wxBoxSizer* flagsBox) { + holoCheck_ = new wxCheckBox(this, wxID_ANY, "Holo"); + firstEditionCheck_ = new wxCheckBox(this, wxID_ANY, "1. Edition"); + signedCheck_ = new wxCheckBox(this, wxID_ANY, "Signed"); + alteredCheck_ = new wxCheckBox(this, wxID_ANY, "Altered"); + flagsBox->Add(holoCheck_, 0, wxRIGHT, 12); + flagsBox->Add(firstEditionCheck_, 0, wxRIGHT, 12); + flagsBox->Add(signedCheck_, 0, wxRIGHT, 12); + flagsBox->Add(alteredCheck_, 0, wxRIGHT, 12); +} + +void PokemonCardEditDialog::appendExtraRows(wxFlexGridSizer* grid) { + setNoCtrl_ = new wxTextCtrl(this, wxID_ANY, constCard().setNo); + appendRow(grid, "Set #", setNoCtrl_); +} + +void PokemonCardEditDialog::readExtraFromCard() { + if (setNoCtrl_) setNoCtrl_->ChangeValue(constCard().setNo); + if (holoCheck_) holoCheck_->SetValue(constCard().holo); + if (firstEditionCheck_) firstEditionCheck_->SetValue(constCard().firstEdition); + if (signedCheck_) signedCheck_->SetValue(constCard().signed_); + if (alteredCheck_) alteredCheck_->SetValue(constCard().altered); +} + +void PokemonCardEditDialog::writeExtraToCard() { + if (setNoCtrl_) mutableCard().setNo = setNoCtrl_->GetValue().ToStdString(); + if (holoCheck_) mutableCard().holo = holoCheck_->IsChecked(); + if (firstEditionCheck_) mutableCard().firstEdition = firstEditionCheck_->IsChecked(); + if (signedCheck_) mutableCard().signed_ = signedCheck_->IsChecked(); + if (alteredCheck_) mutableCard().altered = alteredCheck_->IsChecked(); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/PokemonCardListPanel.cpp b/ui_wx/src/PokemonCardListPanel.cpp new file mode 100644 index 0000000..f866c3a --- /dev/null +++ b/ui_wx/src/PokemonCardListPanel.cpp @@ -0,0 +1,75 @@ +#include "ccm/ui/PokemonCardListPanel.hpp" + +#include "ccm/services/CardFilter.hpp" +#include "ccm/ui/SvgIcons.hpp" + +#include + +namespace ccm::ui { + +PokemonCardListPanel::PokemonCardListPanel(wxWindow* parent) + : BaseCardListPanel(parent) { + buildLayout(); +} + +std::vector +PokemonCardListPanel::declareTextColumns() const { + // Order mirrors the Magic table for visual parity. Pokemon adds two + // additional flag-icon columns (Holo, FirstEdition) but keeps the same + // leading text-column shape. setNo is not displayed in the table; it + // appears in the detail panel and is searchable through the filter. + return { + {"Name", 220, wxLIST_FORMAT_LEFT, PokemonSortColumn::Name}, + {"Set", 180, wxLIST_FORMAT_LEFT, PokemonSortColumn::SetReleaseDate}, + {"Amount", 70, wxLIST_FORMAT_RIGHT, PokemonSortColumn::Amount}, + {"Condition", 100, wxLIST_FORMAT_LEFT, PokemonSortColumn::Condition}, + {"Language", 100, wxLIST_FORMAT_LEFT, PokemonSortColumn::Language}, + {"Note", 220, wxLIST_FORMAT_LEFT, PokemonSortColumn::Note}, + }; +} + +std::vector +PokemonCardListPanel::declareIconColumns() const { + constexpr int kFlagColWidth = 36; + return { + {kSvgHolo, kFlagColWidth, PokemonSortColumn::Holo}, + {kSvgFirstEdition, kFlagColWidth, PokemonSortColumn::FirstEdition}, + {kSvgSigned, kFlagColWidth, PokemonSortColumn::Signed}, + {kSvgAltered, kFlagColWidth, PokemonSortColumn::Altered}, + }; +} + +std::string PokemonCardListPanel::renderTextCell(const PokemonCard& card, + std::size_t idx) const { + switch (idx) { + case 0: return card.name; + case 1: return card.set.name; + case 2: return std::to_string(card.amount); + case 3: return std::string(to_string(card.condition)); + case 4: return std::string(to_string(card.language)); + case 5: return card.note; + } + return {}; +} + +bool PokemonCardListPanel::isIconColumnSet(const PokemonCard& card, + std::size_t idx) const { + switch (idx) { + case 0: return card.holo; + case 1: return card.firstEdition; + case 2: return card.signed_; + case 3: return card.altered; + } + return false; +} + +void PokemonCardListPanel::sortBy(PokemonSortColumn column, bool ascending) { + sortPokemonCards(mutableCards(), column, ascending); +} + +bool PokemonCardListPanel::matchesFilter(const PokemonCard& card, + std::string_view filter) const { + return matchesPokemonFilter(card, filter); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/PokemonGameView.cpp b/ui_wx/src/PokemonGameView.cpp new file mode 100644 index 0000000..344ccd5 --- /dev/null +++ b/ui_wx/src/PokemonGameView.cpp @@ -0,0 +1,198 @@ +#include "ccm/ui/PokemonGameView.hpp" + +#include "ccm/ui/PokemonCardEditDialog.hpp" +#include "ccm/ui/PokemonCardListPanel.hpp" +#include "ccm/ui/PokemonSelectedCardPanel.hpp" + +#include + +#include +#include + +namespace ccm::ui { + +PokemonGameView::PokemonGameView(ConfigService& config, + CollectionService& collection, + SetService& sets, + ImageService& images, + CardPreviewService& cardPreview, + IGameModule& module) + : config_(config), + collection_(collection), + sets_(sets), + images_(images), + cardPreview_(cardPreview), + module_(module) {} + +void PokemonGameView::ensureSetsLoaded() { + if (attemptedInitialSetLoad_) return; + attemptedInitialSetLoad_ = true; + + auto cached = sets_.getSets(Game::Pokemon); + if (cached) { + setsCache_ = std::move(cached).value(); + if (!setsCache_.empty()) return; + } else { + setsCache_.clear(); + } + + auto refreshed = sets_.updateSets(Game::Pokemon); + if (refreshed) { + setsCache_ = std::move(refreshed).value(); + } +} + +wxPanel* PokemonGameView::listPanel(wxWindow* parent) { + if (listPanel_ == nullptr) { + listPanel_ = new PokemonCardListPanel(parent); + listPanel_->Bind(EVT_CARD_SELECTED, [this](wxCommandEvent&) { + if (selectedPanel_ != nullptr && listPanel_ != nullptr) { + selectedPanel_->setCard(listPanel_->selected()); + } + }); + } + return listPanel_; +} + +wxPanel* PokemonGameView::selectedPanel(wxWindow* parent) { + if (selectedPanel_ == nullptr) { + selectedPanel_ = new PokemonSelectedCardPanel(parent, images_, cardPreview_); + } + return selectedPanel_; +} + +void PokemonGameView::refreshCollection() { + if (listPanel_ == nullptr) return; + auto loaded = collection_.list(Game::Pokemon); + if (!loaded) { + showThemedMessageDialog(nullptr, "Failed to load Pokemon collection: " + loaded.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + listPanel_->setCards(std::move(loaded).value()); + listPanel_->activateSelection(); + if (selectedPanel_) selectedPanel_->setCard(listPanel_->selected()); +} + +const std::vector& PokemonGameView::setsForDialog() { + ensureSetsLoaded(); + if (!setsCache_.empty()) return setsCache_; + auto loaded = sets_.getSets(Game::Pokemon); + if (loaded) setsCache_ = std::move(loaded).value(); + else setsCache_.clear(); + return setsCache_; +} + +void PokemonGameView::onAddCard(wxWindow* parentWindow) { + PokemonCard fresh; + fresh.amount = 1; + fresh.language = Language::English; + fresh.condition = Condition::NearMint; + + PokemonCardEditDialog dlg(parentWindow, images_, sets_, EditMode::Create, fresh, + &setsForDialog()); + { + const Theme currentTheme = config_.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + } + if (dlg.ShowModal() != wxID_OK) return; + + auto added = collection_.add(Game::Pokemon, dlg.card()); + if (!added) { + showThemedMessageDialog(parentWindow, "Failed to add card: " + added.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + + PokemonCard persisted = dlg.card(); + persisted.id = added.value(); + auto normalized = images_.normalizeNamesForPersistedCard( + Game::Pokemon, persisted.id, persisted.set.name, persisted.name, persisted.images); + if (normalized) { + if (normalized.value() != persisted.images) { + persisted.images = std::move(normalized).value(); + auto updated = collection_.update(Game::Pokemon, persisted); + if (!updated) { + showThemedMessageDialog(parentWindow, "Card added, but image name normalization failed to persist: " + updated.error(), + "Warning", wxOK | wxICON_WARNING); + } + } + } else { + showThemedMessageDialog(parentWindow, "Card added, but image rename to ID-prefixed format failed: " + normalized.error(), + "Warning", wxOK | wxICON_WARNING); + } + refreshCollection(); +} + +void PokemonGameView::onEditCard(wxWindow* parentWindow) { + if (listPanel_ == nullptr) return; + auto sel = listPanel_->selected(); + if (!sel) { + showThemedMessageDialog(parentWindow, "Select a card first.", "Edit", wxOK | wxICON_INFORMATION); + return; + } + PokemonCardEditDialog dlg(parentWindow, images_, sets_, EditMode::Edit, *sel, + &setsForDialog()); + { + const Theme currentTheme = config_.current().theme; + const ThemePalette palette = paletteForTheme(currentTheme); + applyThemeToWindowTree(&dlg, palette, currentTheme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + } + if (dlg.ShowModal() != wxID_OK) return; + auto updated = collection_.update(Game::Pokemon, dlg.card()); + if (!updated) { + showThemedMessageDialog(parentWindow, "Failed to update card: " + updated.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + refreshCollection(); +} + +void PokemonGameView::onDeleteCard(wxWindow* parentWindow) { + if (listPanel_ == nullptr) return; + auto sel = listPanel_->selected(); + if (!sel) { + showThemedMessageDialog(parentWindow, "Select a card first.", "Delete", wxOK | wxICON_INFORMATION); + return; + } + if (showThemedConfirmDialog(parentWindow, "Delete \"" + sel->name + "\"?", + "Confirm") != wxID_YES) { + return; + } + auto removed = collection_.remove(Game::Pokemon, sel->id); + if (!removed) { + showThemedMessageDialog(parentWindow, "Failed to delete card: " + removed.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + refreshCollection(); +} + +std::string PokemonGameView::onUpdateSets(wxWindow* parentWindow) { + auto out = sets_.updateSets(Game::Pokemon); + if (!out) { + showThemedMessageDialog(parentWindow, "Failed to update sets: " + out.error(), + "Error", wxOK | wxICON_ERROR); + return "Update failed"; + } + setsCache_ = out.value(); + showThemedMessageDialog(parentWindow, "Updated " + std::to_string(out.value().size()) + " Pokemon sets.", + "Sets updated", wxOK | wxICON_INFORMATION); + return "Pokemon sets updated."; +} + +void PokemonGameView::setFilter(std::string_view filter) { + if (listPanel_) listPanel_->setFilter(filter); +} + +void PokemonGameView::applyTheme(const ThemePalette& palette) { + if (listPanel_) listPanel_->applyTheme(palette); + if (selectedPanel_) selectedPanel_->applyTheme(palette); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/PokemonSelectedCardPanel.cpp b/ui_wx/src/PokemonSelectedCardPanel.cpp new file mode 100644 index 0000000..ceecdde --- /dev/null +++ b/ui_wx/src/PokemonSelectedCardPanel.cpp @@ -0,0 +1,82 @@ +#include "ccm/ui/PokemonSelectedCardPanel.hpp" + +#include "ccm/ui/SvgIcons.hpp" + +#include + +namespace ccm::ui { + +namespace { +enum PokemonDetailKey : int { + kName = 0, + kSet, + kSetNo, + kLanguage, + kCondition, + kAmount, + kHolo, + kFirstEdition, + kSigned, + kAltered, +}; +} // namespace + +PokemonSelectedCardPanel::PokemonSelectedCardPanel(wxWindow* parent, + ImageService& imageService, + CardPreviewService& cardPreview) + : BaseSelectedCardPanel(parent, imageService, cardPreview) { + buildLayout(); +} + +std::vector +PokemonSelectedCardPanel::declareDetailRows() const { + return { + {"Name", kName, "(no card selected)"}, + {"Set", kSet, ""}, + {"Set #", kSetNo, ""}, + {"Language", kLanguage, ""}, + {"Condition", kCondition, ""}, + {"Amount", kAmount, ""}, + }; +} + +std::vector +PokemonSelectedCardPanel::declareFlagIcons() const { + return { + {kSvgHolo, "Holo", kHolo}, + {kSvgFirstEdition, "1. Edition", kFirstEdition}, + {kSvgSigned, "Signed", kSigned}, + {kSvgAltered, "Altered", kAltered}, + }; +} + +std::string PokemonSelectedCardPanel::detailValueFor(const PokemonCard& card, + DetailKey key) const { + switch (key) { + case kName: return card.name; + case kSet: return card.set.name; + case kSetNo: return card.setNo; + case kLanguage: return std::string(to_string(card.language)); + case kCondition: return std::string(to_string(card.condition)); + case kAmount: return std::to_string(card.amount); + case kNoteKey: return card.note; + } + return {}; +} + +bool PokemonSelectedCardPanel::isFlagSet(const PokemonCard& card, DetailKey key) const { + switch (key) { + case kHolo: return card.holo; + case kFirstEdition: return card.firstEdition; + case kSigned: return card.signed_; + case kAltered: return card.altered; + } + return false; +} + +std::tuple +PokemonSelectedCardPanel::previewKey(const PokemonCard& card) const { + return {card.name, card.set.id, card.setNo}; +} + +} // namespace ccm::ui diff --git a/ui_wx/src/SettingsDialog.cpp b/ui_wx/src/SettingsDialog.cpp new file mode 100644 index 0000000..1e985a2 --- /dev/null +++ b/ui_wx/src/SettingsDialog.cpp @@ -0,0 +1,97 @@ +#include "ccm/ui/SettingsDialog.hpp" +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include + +namespace ccm::ui { + +SettingsDialog::SettingsDialog(wxWindow* parent, ConfigService& config) + : wxDialog(parent, wxID_ANY, "Settings", + wxDefaultPosition, wxSize(560, 200), + wxDEFAULT_DIALOG_STYLE), + config_(config) { + auto* root = new wxBoxSizer(wxVERTICAL); + + auto* dirRow = new wxBoxSizer(wxHORIZONTAL); + dirRow->Add(new wxStaticText(this, wxID_ANY, "Data directory:"), + 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + dataDirCtrl_ = new wxTextCtrl(this, wxID_ANY, config_.current().dataStorage); + dirRow->Add(dataDirCtrl_, 1, wxEXPAND | wxRIGHT, 6); + auto* browse = new wxButton(this, wxID_ANY, "Browse..."); + browse->Bind(wxEVT_BUTTON, &SettingsDialog::onBrowse, this); + dirRow->Add(browse, 0); + root->Add(dirRow, 0, wxEXPAND | wxALL, 10); + + auto* gameRow = new wxBoxSizer(wxHORIZONTAL); + gameRow->Add(new wxStaticText(this, wxID_ANY, "Default game:"), + 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + defaultGameChoice_ = new wxChoice(this, wxID_ANY); + defaultGameChoice_->Append("Magic"); + defaultGameChoice_->Append("Pokemon"); + defaultGameChoice_->SetSelection(config_.current().defaultGame == Game::Magic ? 0 : 1); + gameRow->Add(defaultGameChoice_, 0); + root->Add(gameRow, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); + + auto* themeRow = new wxBoxSizer(wxHORIZONTAL); + themeRow->Add(new wxStaticText(this, wxID_ANY, "Theme:"), + 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + themeChoice_ = new wxChoice(this, wxID_ANY); + themeChoice_->Append("Light"); + themeChoice_->Append("Dark"); + switch (config_.current().theme) { + case Theme::Dark: themeChoice_->SetSelection(1); break; + case Theme::Light: + default: themeChoice_->SetSelection(0); break; + } + themeRow->Add(themeChoice_, 0); + root->Add(themeRow, 0, wxEXPAND | wxALL, 10); + + auto* btns = CreateButtonSizer(wxOK | wxCANCEL); + if (btns) root->Add(btns, 0, wxALL | wxEXPAND, 10); + Bind(wxEVT_BUTTON, &SettingsDialog::onOk, this, wxID_OK); + + SetSizer(root); + + // Ensure long paths are initially shown from the start, not scrolled right. + CallAfter([this]() { + if (dataDirCtrl_) { + dataDirCtrl_->SetInsertionPoint(0); + dataDirCtrl_->ShowPosition(0); + } + }); +} + +void SettingsDialog::onBrowse(wxCommandEvent&) { + wxDirDialog dlg(this, "Choose data directory", + dataDirCtrl_->GetValue(), + wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + if (dlg.ShowModal() == wxID_OK) { + dataDirCtrl_->SetValue(dlg.GetPath()); + } +} + +void SettingsDialog::onOk(wxCommandEvent& ev) { + Configuration next = config_.current(); + next.dataStorage = dataDirCtrl_->GetValue().ToStdString(); + next.defaultGame = defaultGameChoice_->GetSelection() == 0 ? Game::Magic : Game::Pokemon; + switch (themeChoice_->GetSelection()) { + case 1: next.theme = Theme::Dark; break; + case 0: + default: + next.theme = Theme::Light; + break; + } + auto stored = config_.store(std::move(next)); + if (!stored) { + showThemedMessageDialog(this, "Failed to save settings: " + stored.error(), + "Error", wxOK | wxICON_ERROR); + return; + } + ev.Skip(); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/SvgIcons.cpp b/ui_wx/src/SvgIcons.cpp new file mode 100644 index 0000000..e16dcf7 --- /dev/null +++ b/ui_wx/src/SvgIcons.cpp @@ -0,0 +1,118 @@ +#include "ccm/ui/SvgIcons.hpp" + +#include +#include + +#include +#include +#include +#include + +namespace ccm::ui { + +const char* const kSvgFoil = R"SVG( + + +)SVG"; + +const char* const kSvgSigned = R"SVG( + + +)SVG"; + +const char* const kSvgAltered = R"SVG( + + +)SVG"; + +// Pokemon Holo: the original `PokemonTable.tsx` reuses `IoSparklesSharp` from +// react-icons/io5 (the same path used for Magic foil). We keep one SVG per +// concept here so future divergence (e.g. a unique Pokemon holographic glyph) +// can swap kSvgHolo without touching kSvgFoil. +const char* const kSvgHolo = R"SVG( + + +)SVG"; + +// Pokemon 1st Edition: a circular badge enclosing a stylised "1." digit. +// All strokes/fills go through `@FILL@` so the icon themes alongside foil / +// signed / altered (transparent background, content takes the runtime +// fill color). The digit is built from rounded rects rather than a `` +// element because NanoSVG (the SVG backend behind `wxBitmapBundle::FromSVG`) +// does not render text nodes. +const char* const kSvgFirstEdition = R"SVG( + + + + +)SVG"; + +// vscode-codicons — MIT License (Microsoft). Paths mirror VscAdd / +// VscEdit / VscTrash from react-icons/vsc. +const char* const kSvgToolbarAdd = R"SVG( + + +)SVG"; + +const char* const kSvgToolbarEdit = R"SVG( + + +)SVG"; + +const char* const kSvgToolbarDelete = R"SVG( + + +)SVG"; + +namespace { + +// Substitute every "@FILL@" occurrence in `tmpl` with `fill`. +std::string applyFill(const char* tmpl, const char* fill) { + std::string s(tmpl); + constexpr std::string_view kPlaceholder = "@FILL@"; + for (std::string::size_type pos = s.find(kPlaceholder); + pos != std::string::npos; + pos = s.find(kPlaceholder, pos + std::strlen(fill))) { + s.replace(pos, kPlaceholder.size(), fill); + } + return s; +} + +} // namespace + +wxBitmap svgIconBitmap(const char* svg, int size, const char* fillHex) { + const auto filled = applyFill(svg, fillHex); + const auto bundle = wxBitmapBundle::FromSVG( + reinterpret_cast(filled.data()), + filled.size(), + wxSize(size, size)); + if (!bundle.IsOk()) { + wxImage img(size, size); + img.SetAlpha(); + if (auto* a = img.GetAlpha()) std::fill(a, a + size * size, 0); + return wxBitmap(img); + } + return bundle.GetBitmap(wxSize(size, size)); +} + +wxBitmap paddedSvgIcon(const char* svg, int iconSize, wxSize container, + const char* fillHex, int xOffsetPx) { + const int cw = container.GetWidth(); + const int ch = container.GetHeight(); + + wxImage canvas(cw, ch); + canvas.SetAlpha(); + if (auto* a = canvas.GetAlpha()) std::fill(a, a + cw * ch, 0); + + wxBitmap iconBmp = svgIconBitmap(svg, iconSize, fillHex); + wxImage iconImg = iconBmp.ConvertToImage(); + if (!iconImg.HasAlpha()) iconImg.InitAlpha(); + + int dx = (cw - iconSize) / 2 + xOffsetPx; + dx = std::clamp(dx, 0, std::max(0, cw - iconSize)); + const int dy = (ch - iconSize) / 2; + canvas.Paste(iconImg, dx, dy, wxIMAGE_ALPHA_BLEND_COMPOSE); + return wxBitmap(canvas); +} + +} // namespace ccm::ui diff --git a/ui_wx/src/Theme.cpp b/ui_wx/src/Theme.cpp new file mode 100644 index 0000000..fad3983 --- /dev/null +++ b/ui_wx/src/Theme.cpp @@ -0,0 +1,684 @@ +#include "ccm/ui/Theme.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef __WXMSW__ +#include +#include +#endif + +namespace ccm::ui { + +namespace { +std::unordered_set gButtonHoverBound; +std::unordered_set gDialogGripLayoutBound; +struct ButtonVisualState { + wxColour normalBg; + wxColour hoverBg; + wxColour pressedBg; + wxColour text; + bool darkLike{false}; + bool hovered{false}; + bool pressed{false}; + bool focused{false}; +}; +std::unordered_map gButtonVisualStates; +struct GripVisualState { + wxColour bg; + wxColour line; +}; +std::unordered_map gGripVisualStates; + +wxColour lightenTowardWhite(const wxColour& c, int amount) { + auto lift = [amount](unsigned char channel) -> unsigned char { + const int raised = static_cast(channel) + amount; + return static_cast(raised > 255 ? 255 : raised); + }; + return wxColour(lift(c.Red()), lift(c.Green()), lift(c.Blue())); +} + +bool isDarkLikeTheme(Theme theme) { + return theme == Theme::Dark; +} + +void ensureDarkDialogResizeGrip(wxWindow* window, const ThemePalette& palette, Theme theme) { + auto* dialog = dynamic_cast(window); + if (dialog == nullptr) return; + if ((dialog->GetWindowStyleFlag() & wxRESIZE_BORDER) == 0) return; + + constexpr int kGripSize = 16; + const wxString kGripName = "ccm_dark_resize_grip_overlay"; + wxWindow* grip = wxWindow::FindWindowByName(kGripName, dialog); + + if (!isDarkLikeTheme(theme)) { + if (grip != nullptr) { + gGripVisualStates.erase(grip); + grip->Destroy(); + } + return; + } + + if (grip == nullptr) { + grip = new wxWindow(dialog, wxID_ANY, wxDefaultPosition, wxSize(kGripSize, kGripSize), + wxBORDER_NONE); + grip->SetName(kGripName); + grip->SetCursor(wxCursor(wxCURSOR_SIZENWSE)); + grip->SetBackgroundStyle(wxBG_STYLE_PAINT); + + grip->Bind(wxEVT_ERASE_BACKGROUND, [](wxEraseEvent&) {}); + grip->Bind(wxEVT_PAINT, [grip](wxPaintEvent&) { + wxAutoBufferedPaintDC dc(grip); + const auto it = gGripVisualStates.find(grip); + const wxColour bg = (it != gGripVisualStates.end()) ? it->second.bg : wxColour(45, 45, 45); + const wxColour line = (it != gGripVisualStates.end()) ? it->second.line : wxColour(110, 110, 110); + + const wxRect rect = grip->GetClientRect(); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(bg)); + dc.DrawRectangle(rect); + + dc.SetPen(wxPen(line, 1)); + const int r = rect.GetRight(); + const int b = rect.GetBottom(); + dc.DrawLine(r - 11, b, r, b - 11); + dc.DrawLine(r - 7, b, r, b - 7); + dc.DrawLine(r - 3, b, r, b - 3); + }); +#ifdef __WXMSW__ + grip->Bind(wxEVT_LEFT_DOWN, [dialog](wxMouseEvent&) { + const HWND hwnd = reinterpret_cast(dialog->GetHandle()); + if (hwnd == nullptr) return; + ::ReleaseCapture(); + ::SendMessageW(hwnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0); + }); +#endif + grip->Bind(wxEVT_DESTROY, [grip](wxWindowDestroyEvent& ev) { + gGripVisualStates.erase(grip); + ev.Skip(); + }); + } + + gGripVisualStates[grip] = GripVisualState{ + palette.panelBg, + lightenTowardWhite(palette.panelBg, 48), + }; + + auto placeGrip = [dialog, grip]() { + const wxSize cs = dialog->GetClientSize(); + const int w = kGripSize; + const int h = kGripSize; + grip->SetSize(std::max(0, cs.GetWidth() - w), std::max(0, cs.GetHeight() - h), w, h); + grip->Raise(); + }; + placeGrip(); + grip->Show(); + grip->Refresh(); + + if (!gDialogGripLayoutBound.count(dialog)) { + gDialogGripLayoutBound.insert(dialog); + dialog->Bind(wxEVT_SIZE, [dialog](wxSizeEvent& ev) { + if (wxWindow* w = wxWindow::FindWindowByName("ccm_dark_resize_grip_overlay", dialog)) { + constexpr int kSize = 16; + const wxSize cs = dialog->GetClientSize(); + w->SetSize(std::max(0, cs.GetWidth() - kSize), std::max(0, cs.GetHeight() - kSize), kSize, kSize); + w->Raise(); + } + ev.Skip(); + }); + dialog->Bind(wxEVT_DESTROY, [dialog](wxWindowDestroyEvent& ev) { + gDialogGripLayoutBound.erase(dialog); + ev.Skip(); + }); + } +} +} + +#ifdef __WXMSW__ +namespace { + +using SetWindowThemeFn = HRESULT(WINAPI*)(HWND, LPCWSTR, LPCWSTR); +using DwmSetWindowAttributeFn = HRESULT(WINAPI*)(HWND, DWORD, LPCVOID, DWORD); +using AllowDarkModeForWindowFn = BOOL(WINAPI*)(HWND, BOOL); +enum class PreferredAppMode : int { + Default = 0, + AllowDark = 1, + ForceDark = 2, + ForceLight = 3, + Max = 4 +}; +using SetPreferredAppModeFn = PreferredAppMode(WINAPI*)(PreferredAppMode); +using FlushMenuThemesFn = VOID(WINAPI*)(); + +#ifndef HDM_SETBKCOLOR +#define HDM_SETBKCOLOR (HDM_FIRST + 19) +#endif +#ifndef HDM_SETTEXTCOLOR +#define HDM_SETTEXTCOLOR (HDM_FIRST + 20) +#endif + +SetWindowThemeFn resolveSetWindowTheme() { + static HMODULE uxthemeModule = ::LoadLibraryW(L"uxtheme.dll"); + static auto setWindowTheme = reinterpret_cast( + uxthemeModule ? ::GetProcAddress(uxthemeModule, "SetWindowTheme") : nullptr); + return setWindowTheme; +} + +AllowDarkModeForWindowFn resolveAllowDarkModeForWindow() { + static HMODULE uxthemeModule = ::LoadLibraryW(L"uxtheme.dll"); + static auto fn = reinterpret_cast( + uxthemeModule ? ::GetProcAddress(uxthemeModule, MAKEINTRESOURCEA(133)) : nullptr); + return fn; +} + +SetPreferredAppModeFn resolveSetPreferredAppMode() { + static HMODULE uxthemeModule = ::LoadLibraryW(L"uxtheme.dll"); + static auto fn = reinterpret_cast( + uxthemeModule ? ::GetProcAddress(uxthemeModule, MAKEINTRESOURCEA(135)) : nullptr); + return fn; +} + +FlushMenuThemesFn resolveFlushMenuThemes() { + static HMODULE uxthemeModule = ::LoadLibraryW(L"uxtheme.dll"); + static auto fn = reinterpret_cast( + uxthemeModule ? ::GetProcAddress(uxthemeModule, MAKEINTRESOURCEA(136)) : nullptr); + return fn; +} + +void applyNativeClassTheme(wxWindow* window, Theme theme, const wchar_t* darkClass, const wchar_t* lightClass) { + if (window == nullptr) return; + const HWND hwnd = reinterpret_cast(window->GetHandle()); + if (hwnd == nullptr) return; + + const auto setWindowTheme = resolveSetWindowTheme(); + if (setWindowTheme == nullptr) return; + + const bool dark = (theme == Theme::Dark); + setWindowTheme(hwnd, dark ? darkClass : lightClass, nullptr); +} + +COLORREF toColorRef(const wxColour& c) { + return RGB(c.Red(), c.Green(), c.Blue()); +} + +void applyListHeaderTheme(wxWindow* window, Theme theme, const ThemePalette& palette) { + auto* list = dynamic_cast(window); + if (list == nullptr) return; + + const HWND listHwnd = reinterpret_cast(list->GetHandle()); + if (listHwnd == nullptr) return; + + const auto setWindowTheme = resolveSetWindowTheme(); + if (setWindowTheme == nullptr) return; + + const HWND header = ListView_GetHeader(listHwnd); + if (header == nullptr) return; + + const bool dark = (theme == Theme::Dark); + if (auto allowDarkModeForWindow = resolveAllowDarkModeForWindow()) { + allowDarkModeForWindow(header, dark ? TRUE : FALSE); + } + if (dark) { + // Different Windows builds react to different class tokens. + setWindowTheme(header, L"DarkMode_ItemsView", nullptr); + setWindowTheme(header, L"DarkMode_Explorer", nullptr); + setWindowTheme(header, L"ItemsView", nullptr); + } else { + setWindowTheme(header, L"Header", nullptr); + setWindowTheme(header, L"ItemsView", nullptr); + } + + // Force the native header colors to match the selected app theme. + ::SendMessageW(header, HDM_SETBKCOLOR, 0, static_cast(toColorRef(palette.inputBg))); + ::SendMessageW(header, HDM_SETTEXTCOLOR, 0, static_cast(toColorRef(palette.inputText))); + InvalidateRect(header, nullptr, TRUE); +} + +void applyFrameTitlebarTheme(wxWindow* window, Theme theme) { + if (dynamic_cast(window) == nullptr) return; + + const HWND hwnd = reinterpret_cast(window->GetHandle()); + if (hwnd == nullptr) return; + + static HMODULE dwmModule = ::LoadLibraryW(L"dwmapi.dll"); + static auto dwmSetWindowAttribute = reinterpret_cast( + dwmModule ? ::GetProcAddress(dwmModule, "DwmSetWindowAttribute") : nullptr); + if (dwmSetWindowAttribute == nullptr) return; + + const bool darkLike = (theme == Theme::Dark); + const BOOL useDark = darkLike ? TRUE : FALSE; + constexpr DWORD kDwmUseImmersiveDarkModeOld = 19; + constexpr DWORD kDwmUseImmersiveDarkModeNew = 20; + dwmSetWindowAttribute(hwnd, kDwmUseImmersiveDarkModeOld, &useDark, sizeof(useDark)); + dwmSetWindowAttribute(hwnd, kDwmUseImmersiveDarkModeNew, &useDark, sizeof(useDark)); + + // Ask uxtheme to use dark menu rendering for the top menu strip. + if (auto setPreferredAppMode = resolveSetPreferredAppMode()) { + setPreferredAppMode(darkLike ? PreferredAppMode::ForceDark : PreferredAppMode::Default); + } + if (auto allowDarkModeForWindow = resolveAllowDarkModeForWindow()) { + allowDarkModeForWindow(hwnd, useDark); + } + if (auto setWindowTheme = resolveSetWindowTheme()) { + // Ensure top-level non-client rendering (including resize grip/corner) + // uses a dark-capable class theme when the app is in dark mode. + setWindowTheme(hwnd, darkLike ? L"DarkMode_Explorer" : L"Explorer", nullptr); + } + if (auto flushMenuThemes = resolveFlushMenuThemes()) { + flushMenuThemes(); + } + DrawMenuBar(hwnd); +} + +void applyTopLevelSizeGripTheme(wxWindow* window, Theme theme) { + if (dynamic_cast(window) == nullptr) return; + + const HWND top = reinterpret_cast(window->GetHandle()); + if (top == nullptr) return; + + const auto setWindowTheme = resolveSetWindowTheme(); + if (setWindowTheme == nullptr) return; + + const bool dark = (theme == Theme::Dark); + const BOOL useDark = dark ? TRUE : FALSE; + + std::pair enumCtx{theme, setWindowTheme}; + + ::EnumChildWindows( + top, + [](HWND child, LPARAM lParam) -> BOOL { + auto* ctx = reinterpret_cast*>(lParam); + if (ctx == nullptr || ctx->second == nullptr) return TRUE; + + wchar_t className[64] = {}; + if (::GetClassNameW(child, className, static_cast(sizeof(className) / sizeof(className[0]))) <= 0) { + return TRUE; + } + const LONG_PTR style = ::GetWindowLongPtrW(child, GWL_STYLE); + const bool isScrollbarClass = (::wcscmp(className, L"SCROLLBAR") == 0); + const bool isStatusbarClass = (::wcscmp(className, STATUSCLASSNAMEW) == 0); + const bool isSizeGrip = + (style & SBS_SIZEGRIP) != 0 || + (style & SBS_SIZEBOX) != 0 || + (style & SBS_SIZEBOXBOTTOMRIGHTALIGN) != 0 || + (style & SBS_SIZEBOXTOPLEFTALIGN) != 0 || + (style & SBARS_SIZEGRIP) != 0; + if (!isSizeGrip) return TRUE; + if (!isScrollbarClass && !isStatusbarClass) return TRUE; + + + const bool darkLocal = (ctx->first == Theme::Dark); + if (auto allowDarkModeForWindow = resolveAllowDarkModeForWindow()) { + allowDarkModeForWindow(child, darkLocal ? TRUE : FALSE); + } + const wchar_t* darkClass = isStatusbarClass ? L"DarkMode_StatusBar" : L"DarkMode_Explorer"; + const wchar_t* lightClass = isStatusbarClass ? L"Status" : L"Explorer"; + ctx->second(child, darkLocal ? darkClass : lightClass, nullptr); + ::InvalidateRect(child, nullptr, TRUE); + return TRUE; + }, + reinterpret_cast(&enumCtx)); + + if (auto allowDarkModeForWindow = resolveAllowDarkModeForWindow()) { + allowDarkModeForWindow(top, useDark); + } +} + +} // namespace +#endif + +ThemePalette paletteForTheme(Theme theme) { + switch (theme) { + case Theme::Dark: + return ThemePalette{ + wxColour(30, 30, 30), + wxColour(45, 45, 45), + wxColour(230, 230, 230), + wxColour(60, 60, 60), + wxColour(230, 230, 230), + wxColour(75, 75, 75), + wxColour(240, 240, 240), + }; + case Theme::Light: + default: + return ThemePalette{ + wxColour(248, 248, 248), + wxColour(255, 255, 255), + wxColour(20, 20, 20), + wxColour(255, 255, 255), + wxColour(20, 20, 20), + wxColour(245, 245, 245), + wxColour(20, 20, 20), + }; + } +} + +Theme inferThemeFromWindow(const wxWindow* window) { + if (window == nullptr) return Theme::Light; + + const wxWindow* probe = window; + wxColour bg; + while (probe != nullptr) { + bg = probe->GetBackgroundColour(); + if (bg.IsOk()) break; + probe = probe->GetParent(); + } + if (!bg.IsOk()) { + bg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + } + + const int luminance = + (299 * bg.Red() + 587 * bg.Green() + 114 * bg.Blue()) / 1000; + return luminance < 128 ? Theme::Dark : Theme::Light; +} + +void applyThemeToWindowTree(wxWindow* root, const ThemePalette& palette, Theme theme) { + if (root == nullptr) return; + + root->SetForegroundColour(palette.text); + root->SetBackgroundColour(palette.panelBg); + root->SetOwnForegroundColour(palette.text); + root->SetOwnBackgroundColour(palette.panelBg); + +#ifdef __WXMSW__ + applyFrameTitlebarTheme(root, theme); + applyTopLevelSizeGripTheme(root, theme); +#endif + ensureDarkDialogResizeGrip(root, palette, theme); + + if (dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr) { + if (auto* text = dynamic_cast(root)) { + // On Windows, themed EDIT controls can ignore wx foreground color + // while typing in dark mode; disable native theming there so the + // control consistently uses palette-driven text/background colors. + text->SetThemeEnabled(!isDarkLikeTheme(theme)); + } + root->SetBackgroundColour(palette.inputBg); + root->SetForegroundColour(palette.inputText); + root->SetOwnBackgroundColour(palette.inputBg); + root->SetOwnForegroundColour(palette.inputText); +#ifdef __WXMSW__ + if (dynamic_cast(root) != nullptr) { + // Keep both native list scrollbars and the SysHeader32 control themed. + applyNativeClassTheme(root, theme, L"DarkMode_Explorer", L"Explorer"); + applyListHeaderTheme(root, theme, palette); + } else if (dynamic_cast(root) != nullptr) { + // Do not apply Explorer class theming to edit controls: on some + // Windows builds it forces black typed text in dark mode. + // Keep text fields palette-driven via wx colors instead. + } else { + applyNativeClassTheme(root, theme, L"DarkMode_Explorer", L"Explorer"); + } +#endif + } + + if (dynamic_cast(root) != nullptr) { + root->SetBackgroundColour(palette.panelBg); + root->SetForegroundColour(palette.text); + root->SetOwnBackgroundColour(palette.panelBg); + root->SetOwnForegroundColour(palette.text); +#ifdef __WXMSW__ + applyNativeClassTheme(root, theme, L"DarkMode_StatusBar", L"Status"); +#endif + } + + if (dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr) { + const bool darkLike = isDarkLikeTheme(theme); + root->SetThemeEnabled(!darkLike); + root->SetBackgroundColour(palette.buttonBg); + root->SetForegroundColour(palette.buttonText); + root->SetOwnBackgroundColour(palette.buttonBg); + root->SetOwnForegroundColour(palette.buttonText); + + const wxColour normalBg = palette.buttonBg; + const int hoverLift = 18; + const int pressedLift = 30; + const wxColour hoverBg = darkLike ? lightenTowardWhite(normalBg, hoverLift) : normalBg; + const wxColour pressedBg = darkLike ? lightenTowardWhite(normalBg, pressedLift) : normalBg; + const wxColour btnFg = palette.buttonText; + gButtonVisualStates[root] = ButtonVisualState{ + normalBg, hoverBg, pressedBg, btnFg, darkLike, false, false, false + }; + + if (!gButtonHoverBound.count(root)) { + gButtonHoverBound.insert(root); + + root->Bind(wxEVT_ENTER_WINDOW, [root](wxMouseEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.hovered = true; + const wxColour bg = it->second.pressed ? it->second.pressedBg : it->second.hoverBg; + root->SetBackgroundColour(bg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + }); + root->Bind(wxEVT_LEAVE_WINDOW, [root](wxMouseEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.hovered = false; + const wxColour bg = it->second.focused ? it->second.hoverBg : it->second.normalBg; + root->SetBackgroundColour(bg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + }); + root->Bind(wxEVT_LEFT_DOWN, [root](wxMouseEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.pressed = true; + root->SetBackgroundColour(it->second.pressedBg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + event.Skip(); + }); + root->Bind(wxEVT_LEFT_UP, [root](wxMouseEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.pressed = false; + const wxPoint mousePos = wxGetMousePosition(); + const wxPoint localPos = root->ScreenToClient(mousePos); + const bool inside = root->GetClientRect().Contains(localPos); + it->second.hovered = inside; + const wxColour bg = (inside || it->second.focused) ? it->second.hoverBg : it->second.normalBg; + root->SetBackgroundColour(bg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + event.Skip(); + }); + root->Bind(wxEVT_SET_FOCUS, [root](wxFocusEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.focused = true; + root->SetBackgroundColour(it->second.hoverBg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + event.Skip(); + }); + root->Bind(wxEVT_KILL_FOCUS, [root](wxFocusEvent& event) { + auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + it->second.focused = false; + it->second.pressed = false; + const wxColour bg = it->second.hovered ? it->second.hoverBg : it->second.normalBg; + root->SetBackgroundColour(bg); + root->SetForegroundColour(it->second.text); + root->Refresh(); + event.Skip(); + }); + root->SetBackgroundStyle(wxBG_STYLE_PAINT); + root->Bind(wxEVT_ERASE_BACKGROUND, [](wxEraseEvent&) {}); + root->Bind(wxEVT_PAINT, [root](wxPaintEvent& event) { + const auto it = gButtonVisualStates.find(root); + if (it == gButtonVisualStates.end() || !it->second.darkLike) { + event.Skip(); + return; + } + wxAutoBufferedPaintDC dc(root); + const wxRect rect = root->GetClientRect(); + wxColour bg = it->second.normalBg; + if (it->second.pressed) { + bg = it->second.pressedBg; + } else if (it->second.hovered || it->second.focused) { + bg = it->second.hoverBg; + } + const wxColour fg = it->second.text; + + dc.SetBrush(wxBrush(bg)); + dc.SetPen(wxPen(lightenTowardWhite(bg, 28))); + dc.DrawRectangle(rect); + + if (auto* bmpBtn = dynamic_cast(root)) { + const wxBitmap bmp = bmpBtn->GetBitmap(); + if (bmp.IsOk()) { + const int x = (rect.GetWidth() - bmp.GetWidth()) / 2; + const int y = (rect.GetHeight() - bmp.GetHeight()) / 2; + dc.DrawBitmap(bmp, x, y, true); + } + } else { + dc.SetTextForeground(fg); + const wxString label = root->GetLabel(); + dc.DrawLabel(label, rect, wxALIGN_CENTER); + } + }); + root->Bind(wxEVT_DESTROY, [root](wxWindowDestroyEvent& event) { + gButtonHoverBound.erase(root); + gButtonVisualStates.erase(root); + event.Skip(); + }); + } +#ifdef __WXMSW__ + if (darkLike) { + // Disable native visual-style painting in dark mode only, + // otherwise light theme buttons should stay fully native. + applyNativeClassTheme(root, theme, L"", L""); + } +#endif + } + + if (dynamic_cast(root) != nullptr || + dynamic_cast(root) != nullptr) { + root->SetForegroundColour(palette.text); + root->SetBackgroundColour(palette.panelBg); + root->SetOwnForegroundColour(palette.text); + root->SetOwnBackgroundColour(palette.panelBg); + } + + const wxWindowList& children = root->GetChildren(); + for (wxWindowList::compatibility_iterator it = children.GetFirst(); it; it = it->GetNext()) { + applyThemeToWindowTree(it->GetData(), palette, theme); + } +} + +int showThemedMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption, long style) { + wxDialog dlg(parent, wxID_ANY, caption, wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); + auto* root = new wxBoxSizer(wxVERTICAL); + auto* label = new wxStaticText(&dlg, wxID_ANY, message); + root->Add(label, 0, wxALL | wxEXPAND, 12); + + const bool yesNo = (style & wxYES_NO) != 0; + if (yesNo) { + auto* buttons = new wxStdDialogButtonSizer(); + auto* yesBtn = new wxButton(&dlg, wxID_YES); + auto* noBtn = new wxButton(&dlg, wxID_NO); + yesBtn->SetLabelText("Yes"); + noBtn->SetLabelText("No"); + yesBtn->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(wxID_YES); }); + noBtn->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(wxID_NO); }); + yesBtn->SetDefault(); + buttons->AddButton(yesBtn); + buttons->AddButton(noBtn); + buttons->Realize(); + root->Add(buttons, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 12); + } else { + if (auto* buttons = dlg.CreateButtonSizer(wxOK)) { + root->Add(buttons, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 12); + } + } + + dlg.SetSizerAndFit(root); + const wxSize fitSize = dlg.GetSize(); + dlg.SetSize(fitSize.GetWidth(), static_cast(fitSize.GetHeight() * 1.10)); + const Theme theme = inferThemeFromWindow(parent); + const ThemePalette palette = paletteForTheme(theme); + applyThemeToWindowTree(&dlg, palette, theme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + dlg.CentreOnParent(); + return dlg.ShowModal(); +} + +int showThemedConfirmDialog(wxWindow* parent, const wxString& message, const wxString& caption) { + wxDialog dlg(parent, wxID_ANY, caption, wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); + auto* root = new wxBoxSizer(wxVERTICAL); + auto* label = new wxStaticText(&dlg, wxID_ANY, message); + root->Add(label, 0, wxALL | wxEXPAND, 12); + + auto* buttons = new wxStdDialogButtonSizer(); + auto* yesBtn = new wxButton(&dlg, wxID_YES); + auto* noBtn = new wxButton(&dlg, wxID_NO); + yesBtn->SetLabelText("Yes"); + noBtn->SetLabelText("No"); + yesBtn->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(wxID_YES); }); + noBtn->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(wxID_NO); }); + yesBtn->SetDefault(); + buttons->AddButton(yesBtn); + buttons->AddButton(noBtn); + buttons->Realize(); + root->Add(buttons, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 12); + + dlg.SetSizerAndFit(root); + const wxSize fitSize = dlg.GetSize(); + dlg.SetSize(fitSize.GetWidth(), static_cast(fitSize.GetHeight() * 1.10)); + const Theme theme = inferThemeFromWindow(parent); + const ThemePalette palette = paletteForTheme(theme); + applyThemeToWindowTree(&dlg, palette, theme); + dlg.SetBackgroundColour(palette.panelBg); + dlg.SetForegroundColour(palette.text); + dlg.CentreOnParent(); + + return dlg.ShowModal(); +} + +} // namespace ccm::ui

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 Rxse1oAewp_7_~b={|AP8QDp!C literal 0 HcmV?d00001 diff --git a/docs/assets/images/demo-pkm.png b/docs/assets/images/demo-pkm.png new file mode 100644 index 0000000000000000000000000000000000000000..83715628b2ed7782f79640e0a49285eab6426e80 GIT binary patch literal 663357 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 z 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