diff --git a/.ci/compile.sh b/.ci/compile.sh index 72a017f33..d76d32bcc 100755 --- a/.ci/compile.sh +++ b/.ci/compile.sh @@ -306,7 +306,11 @@ fi if [[ $MAKE_TEST ]]; then echo "::group::Run tests" - ctest -C "$BUILDTYPE" --output-on-failure + # Every TEST() is its own CTest entry, so the suite is process-spawn bound rather than CPU + # bound and -j recovers nearly all of the per-process overhead. The test binaries are safe to + # run concurrently: the only one that claims a fixed resource is single_instance_manager_test, + # which already scopes its local socket name to its own pid so parallel copies cannot collide. + ctest -C "$BUILDTYPE" --output-on-failure -j "${CTEST_JOBS:-4}" echo "::endgroup::" fi @@ -353,15 +357,21 @@ if [[ $MAKE_PACKAGE ]]; then fi echo "Installer content is clean" - # Fail the build if the installer is missing a Qt runtime the applications - # link against. The DLLs reach the package by globbing every *.dll out of - # the build output directories, so a module the client links statically - # (Qt6Multimedia.dll, Qt6QuickWidgets.dll) can be left out without anything - # else noticing, and the only symptom is a client that refuses to start - # after an update. required-qt-runtime.txt is written by the top level - # CMakeLists.txt from the same module list the targets are built against. - if [[ ! -f required-qt-runtime.txt ]]; then - echo "::error file=$0::required-qt-runtime.txt not found in the build dir, cannot verify the Qt runtime" + # Fail the build if the installer does not carry the runtime the + # applications link against - a file that must be there, or a DLL that must + # not be. The runtime DLLs reach the package by globbing every *.dll out of + # the build output directories, so anything that build produced can ride + # along and nothing else in the build objects to it: a Qt module the client + # links statically (Qt6Multimedia.dll, Qt6QuickWidgets.dll) can be left out, + # and the test framework's gtest.dll can be shipped. Either only surfaces on + # a user's machine after an update has already replaced their install, as + # "The code execution cannot proceed because Qt6Multimedia.dll was not + # found" or "abseil_dll.dll is either not designed to run on Windows or it + # contains an error". required-runtime.txt is written by the top level + # CMakeLists.txt from the same module lists the targets are built against + # plus the vcpkg bin directory the app-local copies come from. + if [[ ! -f required-runtime.txt ]]; then + echo "::error file=$0::required-runtime.txt not found in the build dir, cannot verify the runtime" exit 1 fi # 7-Zip writes CRLF on Windows, so the \r has to come off before any @@ -371,7 +381,7 @@ if [[ $MAKE_PACKAGE ]]; then # being a wildcard; -i because that is how the installed tree behaves - # the uninstaller clears both $INSTDIR\plugins and $INSTDIR\Plugins. # The archive side and the manifest side have to agree on line endings. - # CMake writes required-qt-runtime.txt with the platform's line ending and + # CMake writes required-runtime.txt with the platform's line ending and # 7-Zip writes CRLF on Windows, so a trailing \r survives on $entry and # defeats the whole-line match - every entry then reads as missing even # though the listing holds it verbatim. @@ -380,7 +390,7 @@ if [[ $MAKE_PACKAGE ]]; then installer_paths="$("$seven_zip" l -slt "$package" | tr -d '\r' | sed -n 's/^Path = //p' | sed -e 's|\\|/|g' -e 's|^[$]INSTDIR/||' -e 's|^[$]OUTDIR/||' -e 's|^[$]PLUGINSDIR/||' -e 's|^\./||' -e 's|^/||')" - manifest="$(tr -d '\r' . Used to record the DLL inventory +; before and after the upgrade purge, which is what shows whether Qt6Gui.dll was +; on disk and what (if anything) survived the deletes. +!macro CockLogListing label mask + Push "${label}" + Push "$INSTDIR\${mask}" + Call CockLogListing +!macroend + +Function CockLogListing + Pop $LogMatchPattern + Pop $LogMatchLabel + !insertmacro CockLog "listing [$LogMatchLabel] pattern=$LogMatchPattern" + FindFirst $LogFindHandle $LogFindName "$LogMatchPattern" + ${If} $LogFindHandle == "" + !insertmacro CockLog "listing [$LogMatchLabel] (no matches)" + Return + ${EndIf} + log_listing_loop: + !insertmacro CockLog "listing [$LogMatchLabel] $LogFindName" + ClearErrors + FindNext $LogFindHandle $LogFindName + IfErrors 0 log_listing_loop + FindClose $LogFindHandle +FunctionEnd + Function .onInit +StrCpy $InstallLogPath "$TEMP\Cockatrice-installer.log" +; Start each run from a clean file so the log that gets sent back is the last +; run, not every past run glued together. +FileOpen $LogHandle "$InstallLogPath" w +FileClose $LogHandle +!insertmacro CockLog "==================================================================" +!insertmacro CockLog "installer start: @CPACK_PACKAGE_NAME@ @CPACK_PACKAGE_VERSION@" + ${If} ${NSIS_IS_64_BIT} == 1 #NSIS 64bit ${IfNot} ${RunningX64} MessageBox MB_OK|MB_ICONSTOP "This version of Cockatrice requires a 64-bit Windows system." @@ -158,6 +224,13 @@ ${EndIf} ; Now that $PortableMode reflects reality, commit InstDir into the correct slot Call SetModeDestinationFromInstdir +!insertmacro CockLog "options: InstDir=$InstDir PortableMode=$PortableMode ReinstallMode=$ReinstallMode WaitPid=$WaitPid" +${If} ${Silent} + !insertmacro CockLog "options: running silently" +${Else} + !insertmacro CockLog "options: interactive" +${EndIf} + ; Wait for the process that launched this installer to exit before anything is ; replaced or deleted. It goes first because it is the one check here that needs ; no powershell.exe: on a machine where the process lookup cannot run at all, the @@ -175,12 +248,14 @@ Call SetModeDestinationFromInstdir ; interactive installs the section re-checks after the directory page, when ; $INSTDIR is the directory the user actually picked. ${If} $ReinstallMode = 1 + !insertmacro CockLog "reinstall: waiting for launcher and other instances" Call WaitForLauncherToExit Call EnsureAppsNotRunning ${EndIf} ${If} $ReinstallMode = 1 ${AndIf} $PortableMode = 0 + !insertmacro CockLog "reinstall: auto-uninstalling previous version" Call AutoUninstallIfNeeded ${EndIf} @@ -226,13 +301,22 @@ Function AutoUninstallIfNeeded SetShellVarContext all +; _?=$INSTDIR keeps the old uninstaller running in place. An NSIS uninstaller +; normally copies itself to %TEMP% and runs from there so that it can delete its +; own directory, and the process we started exits at once. ExecWait then returns +; before the uninstall has run, and the temp copy's "RMDir /r $INSTDIR" executes +; while the section below is still writing the new payload. _?= disables the copy +; and makes ExecWait block until the uninstall finishes. It must be the last +; argument and must not be quoted, even when the path contains spaces. +; ; --- 32-bit uninstall --- SetRegView 32 ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString" +!insertmacro CockLog "uninstall (32-bit): '$R0 _?=$INSTDIR'" StrCmp $R0 "" done32 DetailPrint "Removing previous version (32-bit)..." -ExecWait '$R0' +ExecWait '$R0 _?=$INSTDIR' done32: @@ -241,9 +325,10 @@ ${If} ${RunningX64} SetRegView 64 ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString" + !insertmacro CockLog "uninstall (64-bit): '$R0 _?=$INSTDIR'" StrCmp $R0 "" done64 DetailPrint "Removing previous version (64-bit)..." - ExecWait '$R0' + ExecWait '$R0 _?=$INSTDIR' done64: ${EndIf} @@ -360,6 +445,7 @@ Function WaitForAppToClose ; usage: set $R1 to the display name (e.g. "cockatrice.exe") and $R2 to the ; base image name (e.g. "cockatrice") Call IsAppRunning + !insertmacro CockLog "guard $R1: state=$R0 (dir=$GuardDir)" ; Only a definite "running" is worth waiting for. "Not running" is done, and ; "could not determine" must not keep the installer waiting on an answer it ; will never get - but it cannot simply be waved through either, see @@ -384,6 +470,7 @@ Function WaitForAppToClose Sleep 500 Call IsAppRunning ${If} $R0 = 0 + !insertmacro CockLog "guard $R1: closed gracefully" DetailPrint "$R1 closed." Return ${EndIf} @@ -402,6 +489,7 @@ Function WaitForAppToClose ; deck, and nothing has been replaced yet, so aborting just defers the ; update and preserves the user's data. ${If} $AllowForceClose = 0 + !insertmacro CockLog "guard $R1: still running after 60s, aborting (no force close)" DetailPrint "$R1 is still running after 60 s; aborting the update so that no data is lost." StrCpy $AbortReason \ "$R1 did not close within 60 seconds, so the installation was aborted to avoid losing unsaved data.$\r$\n$\r$\nPlease close $R1 and run the installer again." @@ -410,11 +498,13 @@ Function WaitForAppToClose ; Oracle and Servatrice are console applications: CloseMainWindow() ; returned false for them and waiting longer cannot help. They hold no ; unsaved user data, so stop them by PID. + !insertmacro CockLog "guard $R1: still running after 60s, force-stopping" DetailPrint "Force-stopping $R1 ..." Call ForceCloseApps Sleep 2000 Call IsAppRunning ${If} $R0 = 0 + !insertmacro CockLog "guard $R1: force-stopped" DetailPrint "$R1 closed." Return ${EndIf} @@ -422,6 +512,7 @@ Function WaitForAppToClose Call HandleUnknownAppState Return ${EndIf} + !insertmacro CockLog "guard $R1: could not be stopped, aborting" DetailPrint "$R1 is still running after 60 s; aborting the update." StrCpy $AbortReason \ "$R1 could not be stopped, so the installation was aborted.$\r$\n$\r$\nPlease close $R1 and run the installer again." @@ -486,8 +577,16 @@ FunctionEnd ; Only the first of those two gets a dialog; the second reports through the log ; and the exit code. Function AbortInstall - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONEXCLAMATION "$AbortReason" + !insertmacro CockLog "ABORT: $AbortReason" + !insertmacro CockLog "full installer log: $InstallLogPath" + ; Show a dialog whenever someone is at the keyboard to see it: an interactive + ; install, or the in-app updater's /R upgrade. The /R upgrade is silent, but + ; the client that launched the installer has already quit, so the user is + ; still there. Only a /S install without /R is attended by a package manager + ; and must go straight to the exit code. + ${If} $ReinstallMode = 1 + ${OrIfNot} ${Silent} + MessageBox MB_OK|MB_ICONEXCLAMATION "$AbortReason$\r$\n$\r$\nA detailed installer log was written to:$\r$\n$InstallLogPath" ${EndIf} SetErrorLevel 1 Abort @@ -510,17 +609,33 @@ FunctionEnd ; falls back to the name based guard. Function WaitForLauncherToExit StrCpy $LauncherExited 0 + !insertmacro CockLog "wait-launcher: pid='$WaitPid'" ${If} $WaitPid == "" + !insertmacro CockLog "wait-launcher: no pid given, falling back to name check" Return ${EndIf} ; PROCESS_SYNCHRONIZE is the only access this needs - enough to wait on the ; handle, and the least likely to be refused for a reason that has nothing to ; do with the upgrade. + ; + ; System.dll maps its output registers so that .rN writes $N and .RN writes + ; $RN. The caller reads $R0/$R1, so the uppercase .RN form is required; the + ; original .r0/.r1 wrote $0/$1 and left $R1 empty, which made the "did not + ; exit" test below compare "" against "0" and abort on every /PID= upgrade. ClearErrors - System::Call 'kernel32::OpenProcess(i 0x00100000, i 0, i $WaitPid) p.r0' + System::Call 'kernel32::OpenProcess(i 0x00100000, i 0, i $WaitPid) p.R0' + ; OpenProcess returns a null handle for a process that is already gone. The + ; System plugin does not raise the NSIS error flag from a called function's + ; return value, so ${Errors} alone never saw that case and the null handle was + ; passed straight to WaitForSingleObject. Fold a plugin failure into the same + ; null-handle case instead of reading a handle that was never written. ${If} ${Errors} + StrCpy $R0 0 + ${EndIf} + ${If} $R0 == 0 ; The launcher is gone - OpenProcess cannot open a dead process - which is ; exactly the state the wait was for. + !insertmacro CockLog "wait-launcher: already exited" DetailPrint "The application that started this installer has already exited." StrCpy $LauncherExited 1 Return @@ -529,14 +644,16 @@ Function WaitForLauncherToExit ; Same 60 s grace period the name based check uses, so a client that is slow ; to flush its card database does not get less room than it used to. ; WAIT_OBJECT_0 is 0; WAIT_TIMEOUT is 258 and a failed wait reports 0xFFFFFFFF. - System::Call 'kernel32::WaitForSingleObject(p r0, i 60000) i.r1' - System::Call 'kernel32::CloseHandle(p r0)' + System::Call 'kernel32::WaitForSingleObject(p R0, i 60000) i.R1' + System::Call 'kernel32::CloseHandle(p R0)' ${If} $R1 != 0 + !insertmacro CockLog "wait-launcher: did not exit within 60s (wait=$R1)" DetailPrint "The application that started this installer did not exit within 60 s." StrCpy $AbortReason \ "The application that started this update has not exited yet, so the installation was cancelled rather than replace files it is still using.$\r$\n$\r$\nPlease close Cockatrice and run the installer again." Call AbortInstall ${EndIf} + !insertmacro CockLog "wait-launcher: launcher exited" DetailPrint "The application that started this installer has exited." StrCpy $LauncherExited 1 FunctionEnd @@ -562,9 +679,11 @@ FunctionEnd Function GuardAppsNotRunning ; usage: set $GuardDir to the directory to guard, then call this Call IsProcessLookupAvailable + !insertmacro CockLog "guard: powershell available=$R0 dir=$GuardDir launcherExited=$LauncherExited" ${If} $R0 = 0 ; Without PowerShell we cannot tell whether a running instance is ; holding locks on the files we are about to replace. + !insertmacro CockLog "guard: powershell unavailable, skipping instance check" DetailPrint "Could not start powershell.exe; skipping the running instance check. Close Cockatrice, Oracle and Servatrice manually if the installation reports a problem." ; On a silent upgrade that used to be a warning and nothing more, which ; left the very process that launched the installer free to go on @@ -587,7 +706,8 @@ Function GuardAppsNotRunning ${EndIf} ; The user has to be told to close the applications by hand, but a /S ; install without /R is unattended and would block on this forever. - ${IfNot} ${Silent} + ${If} $ReinstallMode = 1 + ${OrIfNot} ${Silent} MessageBox MB_OK|MB_ICONEXCLAMATION "This installer could not check whether Cockatrice is still running, because powershell.exe could not be started.$\r$\n$\r$\nPlease close Cockatrice, Oracle and Servatrice manually before continuing." ${EndIf} Return @@ -633,7 +753,11 @@ Function IsExistingCockatriceInstall ; there to prove that it is one. Every Qt module Cockatrice links is part of ; the payload, so match them all: probing only Qt6Core.dll would miss a ; directory where that one file happened to be deletable and the others - ; were not. + ; were not. Qt6*.dll rather than *.dll on purpose: this function decides + ; whether a directory is ours, and a folder that merely holds some DLLs of + ; its own must not be purged. Qt6*.dll is enough even when only the protobuf + ; runtime survived, because the whole Qt set is mapped by the same process + ; that maps abseil_dll.dll and so is locked or free with it. StrCpy $R3 "Qt6*.dll" Call CheckStaleRuntimeMask ${If} ${FileExists} "$INSTDIR\qt.conf" @@ -645,36 +769,23 @@ FunctionEnd ; the purge. NSIS silently skips whatever it cannot delete, so one surviving file ; is enough to prove that something still holds a lock on the install directory. ; -; The masks below have to cover the purge above one for one. A check that only -; probed named files could not see a locked Qt6Multimedia.dll or a Plugins -; directory the purge was unable to remove, so the exact files that broke the -; install were also the ones this check was blind to. +; Any DLL at all counts, not a list of expected ones. The purge removes every +; top-level DLL, so after it has run the only DLL that can still be there is one +; it failed to delete, whatever its name. A mask per library family (Qt, then +; OpenSSL, then zlib) is what let abseil_dll.dll through: it is in neither the +; purge nor this check, so it survived a 3.0.2 to 3.1 update untouched, the new +; executables were written next to it, and the client then failed to start with +; "abseil_dll.dll is either not designed to run on Windows or it contains an +; error". Probing *.dll has no list to fall out of date when the next +; transitive dependency appears. Function HasStaleRuntimeFiles StrCpy $R0 0 - StrCpy $R3 "Qt*.dll" + StrCpy $R3 "*.dll" Call CheckStaleRuntimeMask - StrCpy $R3 "libcrypto*.dll" - Call CheckStaleRuntimeMask - StrCpy $R3 "libssl*.dll" - Call CheckStaleRuntimeMask - StrCpy $R3 "zlib*.dll" - Call CheckStaleRuntimeMask - StrCpy $R3 "icu*.dll" - Call CheckStaleRuntimeMask - StrCpy $R3 "libeay32.dll" - Call CheckStaleRuntimeMask - StrCpy $R3 "ssleay32.dll" - Call CheckStaleRuntimeMask - ${If} $R0 = 1 - Return - ${EndIf} - ${If} ${FileExists} "$INSTDIR\libmysql.dll" - StrCpy $R0 1 - Return - ${EndIf} ; IfFileExists takes wildcards, so a Plugins directory the purge could not ; remove counts as a leftover too. ${If} ${FileExists} "$INSTDIR\Plugins\*.*" + !insertmacro CockLog "stale-runtime: Plugins directory survived the purge" StrCpy $R0 1 ${EndIf} FunctionEnd @@ -687,6 +798,7 @@ Function CheckStaleRuntimeMask ${EndIf} FindFirst $StaleFindHandle $StaleFindName "$INSTDIR\$R3" ${If} $StaleFindHandle != "" + !insertmacro CockLog "stale-runtime: '$StaleFindName' matched $R3 in $INSTDIR" StrCpy $R0 1 FindClose $StaleFindHandle ${EndIf} @@ -925,9 +1037,10 @@ ${If} $PortableMode = 0 ; directory before letting it delete anything. The uninstall string is ; stashed away first, the check works on $R0. StrCpy $OldUninstallString $R0 + !insertmacro CockLog "componentsPagePre: old 32-bit uninstall '$OldUninstallString _?=$INSTDIR'" Call EnsureOldInstallNotRunning ClearErrors - ExecWait "$OldUninstallString" + ExecWait "$OldUninstallString _?=$INSTDIR" done32: @@ -947,9 +1060,10 @@ ${If} $PortableMode = 0 uninst64: StrCpy $OldUninstallString $R0 + !insertmacro CockLog "componentsPagePre: old 64-bit uninstall '$OldUninstallString _?=$INSTDIR'" Call EnsureOldInstallNotRunning ClearErrors - ExecWait "$OldUninstallString" + ExecWait "$OldUninstallString _?=$INSTDIR" done64: ${EndIf} @@ -964,15 +1078,19 @@ Section "Application" SecApplication SetShellVarContext all SetOutPath "$INSTDIR" +!insertmacro CockLog "section: InstDir=$INSTDIR PortableMode=$PortableMode ReinstallMode=$ReinstallMode" + ; No application instance may be running while any file below is deleted or ; replaced: both upgrade blocks start by removing the old executables and ; runtime DLLs, and NSIS silently skips whatever is locked, which is how an -; install ends up with a mix of old and new Qt DLLs next to the new executable -; ("The procedure entry point X could not be located in the dynamic link -; library ...Qt6Network.dll"). So the check has to come before the first -; Delete/RMDir and not after it - an interactive install into an existing -; portable directory with cockatrice.exe still running would otherwise delete -; the old files under its feet. +; install ends up with a mix of old and new runtimes next to the new executable. +; The next start then fails with "The procedure entry point X could not be +; located in the dynamic link library ...Qt6Network.dll" for the Qt ones, or +; "abseil_dll.dll is either not designed to run on Windows or it contains an +; error" for the protobuf ones. So the check has to come before the first +; Delete/RMDir and not after it: an interactive install into an existing portable +; directory with cockatrice.exe still running would otherwise delete the old +; files under its feet. ; ; It is skipped on the /R path: .onInit already ran it before ; AutoUninstallIfNeeded removed the previous installation, so by the time this @@ -987,6 +1105,8 @@ ${EndIf} ${If} $PortableMode = 1 ${AndIf} ${FileExists} "$INSTDIR\portable.dat" ; upgrade portable mode + !insertmacro CockLog "section: portable upgrade purge" + !insertmacro CockLogListing "before-portable-purge" "*.dll" RMDir /r "$INSTDIR\plugins" RMDir /r "$INSTDIR\sounds" RMDir /r "$INSTDIR\themes" @@ -995,24 +1115,24 @@ ${AndIf} ${FileExists} "$INSTDIR\portable.dat" Delete "$INSTDIR\cockatrice.exe" Delete "$INSTDIR\oracle.exe" Delete "$INSTDIR\servatrice.exe" - Delete "$INSTDIR\Qt*.dll" - Delete "$INSTDIR\libmysql.dll" - Delete "$INSTDIR\icu*.dll" - Delete "$INSTDIR\libcrypto*.dll" - Delete "$INSTDIR\libssl*.dll" - Delete "$INSTDIR\libeay32.dll" - Delete "$INSTDIR\ssleay32.dll" + ; Every top-level DLL, not a list of expected ones. The payload is written + ; after this block, so a DLL the new build still needs is put straight back; + ; what this has to guarantee is that nothing from the previous build is left + ; to be loaded next to the new executables. Naming the families by hand is + ; what let abseil_dll.dll through; see HasStaleRuntimeFiles. + Delete "$INSTDIR\*.dll" Delete "$INSTDIR\qt.conf" Delete "$INSTDIR\qdebug.txt" Delete "$INSTDIR\servatrice.sql" Delete "$INSTDIR\servatrice.ini.example" - Delete "$INSTDIR\zlib*.dll" RMDir "$INSTDIR" + !insertmacro CockLogListing "after-portable-purge" "*.dll" ${EndIf} ; Remove any runtime DLLs left over from older versions, so a mismatched -; Qt/OpenSSL set cannot survive next to the new executables. +; Qt/OpenSSL/protobuf set cannot survive next to the new executables. Call IsExistingCockatriceInstall +!insertmacro CockLog "section: IsExistingCockatriceInstall=$R0" ; Remembered because the stale-runtime check below must only ever fire for a ; directory this installer recognised as a Cockatrice install. Scanning for ; leftovers in an unrelated directory (a first-time install into a folder that @@ -1021,48 +1141,48 @@ Call IsExistingCockatriceInstall StrCpy $IsUpgrade $R0 ${If} $PortableMode = 0 ${AndIf} $R0 = 1 + !insertmacro CockLog "section: non-portable upgrade purge" + !insertmacro CockLogListing "before-purge" "*.dll" RMDir /r "$INSTDIR\Plugins" - Delete "$INSTDIR\Qt*.dll" - Delete "$INSTDIR\libcrypto*.dll" - Delete "$INSTDIR\libssl*.dll" - Delete "$INSTDIR\zlib*.dll" - Delete "$INSTDIR\libmysql.dll" - Delete "$INSTDIR\icu*.dll" - Delete "$INSTDIR\libeay32.dll" - Delete "$INSTDIR\ssleay32.dll" + Delete "$INSTDIR\*.dll" + !insertmacro CockLogListing "after-purge" "*.dll" + !insertmacro CockLogListing "after-plugins" "Plugins\*.*" ${EndIf} -; Whatever was locked during the purge - by an instance that started while the +; Whatever was locked during the purge (by an instance that started while the ; installer was running, or because the running instance check could not be -; performed at all - is still on disk, and the new executables are about to be +; performed at all) is still on disk, and the new executables are about to be ; written next to it. That mix is exactly what makes the next start fail with ; "The procedure entry point X could not be located in the dynamic link library -; ...Qt6QuickWidgets.dll" or "The code execution cannot proceed because -; Qt6Multimedia.dll was not found", so stop here instead of compounding it. -; Nothing of the new payload has been written at this point, so the next run - -; with the applications closed - gets a clean install. +; ...Qt6QuickWidgets.dll", "The code execution cannot proceed because +; Qt6Multimedia.dll was not found", or "abseil_dll.dll is either not designed to +; run on Windows or it contains an error", so stop here instead of compounding +; it. Nothing of the new payload has been written at this point, so the next run, +; with the applications closed, gets a clean install. ${If} $IsUpgrade = 1 Call HasStaleRuntimeFiles + !insertmacro CockLog "section: HasStaleRuntimeFiles=$R0" ${Else} StrCpy $R0 0 ${EndIf} ${If} $R0 = 1 + !insertmacro CockLog "section: aborting, files of a previous version survived the purge" DetailPrint "Files of a previous version could not be removed; aborting the installation." ; The in-app updater runs this installer silent and detached and never looks ; at its exit code, so the user has to be told what happened. A /S install - ; without /R is unattended - a package manager, for instance - and a message + ; without /R is unattended (a package manager, for instance) and a message ; box there would block forever, so that case only reports through the log - ; and the exit code. - ${IfNot} ${Silent} - MessageBox MB_OK|MB_ICONEXCLAMATION \ - "The installation could not remove all files of a previous version of Cockatrice, most likely because it is still running or was started as administrator, and was cancelled rather than leave a mismatched install behind.$\r$\n$\r$\nPlease close Cockatrice, Oracle and Servatrice and run the installer again." - ${EndIf} - SetErrorLevel 1 - Abort + ; and the exit code. AbortInstall owns that decision. + StrCpy $AbortReason \ + "The installation could not remove all files of a previous version of Cockatrice, most likely because it is still running or was started as administrator, and was cancelled rather than leave a mismatched install behind.$\r$\n$\r$\nPlease close Cockatrice, Oracle and Servatrice and run the installer again." + Call AbortInstall ${EndIf} @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ +!insertmacro CockLog "section: writing payload to $INSTDIR" @CPACK_NSIS_FULL_INSTALL@ +!insertmacro CockLog "section: payload written" +!insertmacro CockLogListing "final" "Qt6*.dll" ${If} $PortableMode = 0 WriteUninstaller "$INSTDIR\uninstall.exe" @@ -1126,6 +1246,7 @@ ${If} $ReinstallMode = 1 Exec '"$INSTDIR\cockatrice.exe"' ${EndIf} +!insertmacro CockLog "section: application install complete" SectionEnd Section "Start menu item" SecStartMenu diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 1760d86b8..32b81cf61 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -140,6 +140,10 @@ set(cockatrice_SOURCES src/game_graphics/zones/view_zone.cpp src/game_graphics/zones/view_zone_widget.cpp src/game_graphics/board/abstract_graphics_item.cpp + src/interface/card_database_update/card_database_update_status_bar.cpp + src/interface/card_database_update/card_database_update_status_bar.h + src/interface/card_database_update/card_update_progress.cpp + src/interface/card_database_update/card_update_progress.h src/interface/card_picture_loader/card_picture_loader.cpp src/interface/card_picture_loader/card_picture_loader_local.cpp src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp @@ -687,7 +691,7 @@ if(WIN32) # import table, and the glob above only sees DLLs that were already copied next # to the executable. Qt6::Concurrent is linked but never imported - QtConcurrent::run # and QFutureWatcher are header-only in Qt 6 - so neither step ships - # Qt6Concurrent.dll, even though required-qt-runtime.txt lists it and the + # Qt6Concurrent.dll, even though required-runtime.txt lists it and the # Windows package check then fails on a package that is fine to run. # Qt6::ShaderTools is skipped for the same reason. # diff --git a/cockatrice/cockatrice.desktop b/cockatrice/cockatrice.desktop index 4b15fa9c1..70db9d472 100644 --- a/cockatrice/cockatrice.desktop +++ b/cockatrice/cockatrice.desktop @@ -6,5 +6,4 @@ Name=Cockatrice Exec=cockatrice %U Icon=cockatrice Categories=Game;CardGame; -MimeType=application/x-cockatrice; -X-Scheme-Handler/cockatrice=true +MimeType=application/x-cockatrice;x-scheme-handler/cockatrice; diff --git a/cockatrice/src/client/lag_monitor.cpp b/cockatrice/src/client/lag_monitor.cpp index 383d64644..6b72087ec 100644 --- a/cockatrice/src/client/lag_monitor.cpp +++ b/cockatrice/src/client/lag_monitor.cpp @@ -1,7 +1,10 @@ #include "lag_monitor.h" +#include #include +#include #include +#include #include LagMonitor::LagMonitor(QObject *parent) : QObject(parent) diff --git a/cockatrice/src/client/lag_monitor.h b/cockatrice/src/client/lag_monitor.h index 9fdf6b283..0bb98c25e 100644 --- a/cockatrice/src/client/lag_monitor.h +++ b/cockatrice/src/client/lag_monitor.h @@ -6,15 +6,15 @@ #ifndef LAG_MONITOR_H #define LAG_MONITOR_H -#include #include #include #include #include +#include +#include inline Q_LOGGING_CATEGORY(LagMonitorLog, "lag_monitor"); -class QEvent; class QTimer; /** diff --git a/cockatrice/src/client/latency_graph_widget.cpp b/cockatrice/src/client/latency_graph_widget.cpp index 46d6ccdd3..72df3ce6c 100644 --- a/cockatrice/src/client/latency_graph_widget.cpp +++ b/cockatrice/src/client/latency_graph_widget.cpp @@ -5,7 +5,11 @@ #include "latency_graph_widget.h" +#include #include +#include +#include +#include LatencyGraphWidget::LatencyGraphWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/client/latency_graph_widget.h b/cockatrice/src/client/latency_graph_widget.h index 4f6f38f8b..31a7022b2 100644 --- a/cockatrice/src/client/latency_graph_widget.h +++ b/cockatrice/src/client/latency_graph_widget.h @@ -8,6 +8,8 @@ #include #include +#include +#include /** * @brief Bar graph of recent network round-trip samples. diff --git a/cockatrice/src/client/latency_status_widget.cpp b/cockatrice/src/client/latency_status_widget.cpp index 779c726eb..940074581 100644 --- a/cockatrice/src/client/latency_status_widget.cpp +++ b/cockatrice/src/client/latency_status_widget.cpp @@ -6,11 +6,15 @@ #include "latency_status_widget.h" #include "latency_graph_widget.h" +#include "latency_tracker.h" #include #include #include +#include +#include #include +#include LatencyStatusWidget::LatencyStatusWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/client/latency_status_widget.h b/cockatrice/src/client/latency_status_widget.h index d9e1d130c..24d6fda4d 100644 --- a/cockatrice/src/client/latency_status_widget.h +++ b/cockatrice/src/client/latency_status_widget.h @@ -7,8 +7,10 @@ #define LATENCY_STATUS_WIDGET_H #include +#include #include #include +#include class QLabel; class LatencyGraphWidget; diff --git a/cockatrice/src/client/network/connection_controller/remote_connection_controller.cpp b/cockatrice/src/client/network/connection_controller/remote_connection_controller.cpp index c1598bd25..7480da27e 100644 --- a/cockatrice/src/client/network/connection_controller/remote_connection_controller.cpp +++ b/cockatrice/src/client/network/connection_controller/remote_connection_controller.cpp @@ -8,14 +8,25 @@ #include "../interface/widgets/dialogs/dlg_forgot_password_reset.h" #include "../interface/widgets/dialogs/dlg_register.h" #include "../interface/widgets/utility/get_text_with_max.h" +#include "libcockatrice/protocol/pb/event_connection_closed.pb.h" +#include "libcockatrice/protocol/pb/event_server_shutdown.pb.h" +#include #include +#include #include +#include #include +#include +#include +#include #include #include #include #include +#include + +class QWidget; ConnectionController::ConnectionController(QWidget *dialogParent, QObject *parent) : QObject(parent), dialogParent(dialogParent) diff --git a/cockatrice/src/client/network/connection_controller/remote_connection_controller.h b/cockatrice/src/client/network/connection_controller/remote_connection_controller.h index bae99a3e0..d4a832c75 100644 --- a/cockatrice/src/client/network/connection_controller/remote_connection_controller.h +++ b/cockatrice/src/client/network/connection_controller/remote_connection_controller.h @@ -2,17 +2,22 @@ #define COCKATRICE_REMOTE_CONNECTION_CONTROLLER_H #include "abstract_client.h" +#include "latency_tracker.h" #include #include #include -#include -#include -#include +#include +#include class RemoteClient; class ServerInfo_User; class DlgConnect; +class Event_ConnectionClosed; +class Event_ServerShutdown; +class QThread; +class QWidget; +template class QList; /** * Owns the RemoteClient and its worker thread. diff --git a/cockatrice/src/client/network/interfaces/deck_stats_interface.cpp b/cockatrice/src/client/network/interfaces/deck_stats_interface.cpp index 42292b2aa..d5cfdbbc9 100644 --- a/cockatrice/src/client/network/interfaces/deck_stats_interface.cpp +++ b/cockatrice/src/client/network/interfaces/deck_stats_interface.cpp @@ -1,11 +1,22 @@ #include "deck_stats_interface.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" + +#include #include #include +#include #include #include #include +#include +#include +#include +#include #include +#include #include #include #include diff --git a/cockatrice/src/client/network/interfaces/deck_stats_interface.h b/cockatrice/src/client/network/interfaces/deck_stats_interface.h index 09bf998de..e7791075c 100644 --- a/cockatrice/src/client/network/interfaces/deck_stats_interface.h +++ b/cockatrice/src/client/network/interfaces/deck_stats_interface.h @@ -7,7 +7,8 @@ #ifndef DECKSTATS_INTERFACE_H #define DECKSTATS_INTERFACE_H -#include +#include +#include class QByteArray; class QNetworkAccessManager; diff --git a/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp b/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp index 627b7fe34..30044c2b6 100644 --- a/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp +++ b/cockatrice/src/client/network/interfaces/tapped_out_interface.cpp @@ -1,11 +1,28 @@ #include "tapped_out_interface.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" + +#include +#include #include +#include #include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include diff --git a/cockatrice/src/client/network/interfaces/tapped_out_interface.h b/cockatrice/src/client/network/interfaces/tapped_out_interface.h index 32f9369d5..615991b07 100644 --- a/cockatrice/src/client/network/interfaces/tapped_out_interface.h +++ b/cockatrice/src/client/network/interfaces/tapped_out_interface.h @@ -9,6 +9,7 @@ #include #include +#include inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface"); diff --git a/cockatrice/src/client/network/parsers/deck_link_to_api_transformer.cpp b/cockatrice/src/client/network/parsers/deck_link_to_api_transformer.cpp index 010b63684..7127b0a29 100644 --- a/cockatrice/src/client/network/parsers/deck_link_to_api_transformer.cpp +++ b/cockatrice/src/client/network/parsers/deck_link_to_api_transformer.cpp @@ -1,6 +1,7 @@ #include "deck_link_to_api_transformer.h" #include +#include namespace DeckLinkToApiTransformer { diff --git a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp index dae633717..ae5e92d6c 100644 --- a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp +++ b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.cpp @@ -1,21 +1,35 @@ #include "spoiler_background_updater.h" -#include "../../../../interface/window_main.h" #include "../../../../main.h" #include "../../../settings/cache_settings.h" +#include #include #include #include +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include #include -#include +#include +#include +#include #include #include #include #include +#include +#include #include #define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled" diff --git a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h index 03d4897a2..a6c4ed00f 100644 --- a/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h +++ b/cockatrice/src/client/network/update/card_spoiler/spoiler_background_updater.h @@ -10,7 +10,11 @@ #include #include #include -#include +#include +#include + +class QProcess; +class QUrl; inline Q_LOGGING_CATEGORY(SpoilerBackgroundUpdaterLog, "spoiler_background_updater"); diff --git a/cockatrice/src/client/network/update/client/client_update_checker.h b/cockatrice/src/client/network/update/client/client_update_checker.h index 1a89de533..16cbd0369 100644 --- a/cockatrice/src/client/network/update/client/client_update_checker.h +++ b/cockatrice/src/client/network/update/client/client_update_checker.h @@ -6,9 +6,12 @@ #ifndef CLIENT_UPDATE_CHECKER_H #define CLIENT_UPDATE_CHECKER_H -#include +#include "release_channel.h" -class Release; +#include +#include +#include +#include /** * We use a singleton instance of UpdateChannel, which can cause interference and feedback loops when multiple objects diff --git a/cockatrice/src/client/network/update/client/release_channel.cpp b/cockatrice/src/client/network/update/client/release_channel.cpp index f401dfd00..45c503623 100644 --- a/cockatrice/src/client/network/update/client/release_channel.cpp +++ b/cockatrice/src/client/network/update/client/release_channel.cpp @@ -2,15 +2,27 @@ #include "version_string.h" +#include +#include #include #include #include -#include +#include +#include +#include +#include +#include #include +#include #include -#include +#include +#include +#include +#include #include #include +#include +#include #if defined(Q_OS_MACOS) #include diff --git a/cockatrice/src/client/network/update/client/release_channel.h b/cockatrice/src/client/network/update/client/release_channel.h index e038cb2f4..183a766ab 100644 --- a/cockatrice/src/client/network/update/client/release_channel.h +++ b/cockatrice/src/client/network/update/client/release_channel.h @@ -11,8 +11,9 @@ #include #include #include -#include +#include #include +#include #include inline Q_LOGGING_CATEGORY(ReleaseChannelLog, "release_channel"); diff --git a/cockatrice/src/client/network/update/client/update_downloader.cpp b/cockatrice/src/client/network/update/client/update_downloader.cpp index a71bcf8f8..c86972d60 100644 --- a/cockatrice/src/client/network/update/client/update_downloader.cpp +++ b/cockatrice/src/client/network/update/client/update_downloader.cpp @@ -1,6 +1,14 @@ #include "update_downloader.h" +#include +#include +#include +#include +#include +#include +#include #include +#include UpdateDownloader::UpdateDownloader(QObject *parent) : QObject(parent), response(nullptr) { diff --git a/cockatrice/src/client/network/update/client/update_downloader.h b/cockatrice/src/client/network/update/client/update_downloader.h index 9a0caccbc..8aeefb22a 100644 --- a/cockatrice/src/client/network/update/client/update_downloader.h +++ b/cockatrice/src/client/network/update/client/update_downloader.h @@ -7,8 +7,14 @@ #ifndef COCKATRICE_UPDATEDOWNLOADER_H #define COCKATRICE_UPDATEDOWNLOADER_H +#include #include -#include +#include +#include +#include +#include + +class QNetworkAccessManager; class UpdateDownloader : public QObject { diff --git a/cockatrice/src/client/settings/cache_settings.cpp b/cockatrice/src/client/settings/cache_settings.cpp index 0f8693f2d..15a41e7e1 100644 --- a/cockatrice/src/client/settings/cache_settings.cpp +++ b/cockatrice/src/client/settings/cache_settings.cpp @@ -2,15 +2,20 @@ #include "../network/update/client/release_channel.h" #include "card_counter_settings.h" +#include "libcockatrice/interfaces/interface_card_database_path_provider.h" #include "shortcuts_settings.h" -#include "version_string.h" +#include #include #include #include #include +#include #include +#include #include +#include +#include #include #include #include diff --git a/cockatrice/src/client/settings/cache_settings.h b/cockatrice/src/client/settings/cache_settings.h index 7a90d82f1..5f699247d 100644 --- a/cockatrice/src/client/settings/cache_settings.h +++ b/cockatrice/src/client/settings/cache_settings.h @@ -7,11 +7,13 @@ #ifndef SETTINGSCACHE_H #define SETTINGSCACHE_H +#include #include +#include #include #include #include -#include +#include inline Q_LOGGING_CATEGORY(SettingsCacheLog, "settings_cache"); diff --git a/cockatrice/src/client/settings/card_counter_settings.cpp b/cockatrice/src/client/settings/card_counter_settings.cpp index d4030c174..4bdd581b5 100644 --- a/cockatrice/src/client/settings/card_counter_settings.cpp +++ b/cockatrice/src/client/settings/card_counter_settings.cpp @@ -1,8 +1,15 @@ #include "card_counter_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include #include #include +#include #include +#include + +class QObject; CardCounterSettings::CardCounterSettings(const QString &settingsPath, QObject *parent) : SettingsManager(settingsPath + "card_counters.ini", "cards", "counters", parent) diff --git a/cockatrice/src/client/settings/card_counter_settings.h b/cockatrice/src/client/settings/card_counter_settings.h index 2ac658177..e5ca0a9bb 100644 --- a/cockatrice/src/client/settings/card_counter_settings.h +++ b/cockatrice/src/client/settings/card_counter_settings.h @@ -7,10 +7,12 @@ #ifndef CARD_COUNTER_SETTINGS_H #define CARD_COUNTER_SETTINGS_H +#include #include +#include -class QSettings; class QColor; +class QObject; class CardCounterSettings : public SettingsManager { diff --git a/cockatrice/src/client/settings/shortcut_treeview.cpp b/cockatrice/src/client/settings/shortcut_treeview.cpp index b909d47ac..4a5bafb01 100644 --- a/cockatrice/src/client/settings/shortcut_treeview.cpp +++ b/cockatrice/src/client/settings/shortcut_treeview.cpp @@ -3,7 +3,24 @@ #include "cache_settings.h" #include "shortcuts_settings.h" +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QObject; +class QWidget; ShortcutFilterProxyModel::ShortcutFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { diff --git a/cockatrice/src/client/settings/shortcut_treeview.h b/cockatrice/src/client/settings/shortcut_treeview.h index afaf7e7ed..53f3fa0ef 100644 --- a/cockatrice/src/client/settings/shortcut_treeview.h +++ b/cockatrice/src/client/settings/shortcut_treeview.h @@ -8,8 +8,13 @@ #define SHORTCUT_TREEVIEW_H #include -#include +#include #include +#include + +class QObject; +class QStandardItemModel; +class QWidget; /** * Custom implementation of QSortFilterProxyModel that appends the source and parent strings together when filtering diff --git a/cockatrice/src/client/settings/shortcuts_settings.cpp b/cockatrice/src/client/settings/shortcuts_settings.cpp index 2ff65ab6f..ffb4afcac 100644 --- a/cockatrice/src/client/settings/shortcuts_settings.cpp +++ b/cockatrice/src/client/settings/shortcuts_settings.cpp @@ -2,9 +2,13 @@ #include #include +#include #include +#include +#include +#include #include -#include +#include ShortcutKey::ShortcutKey(const QString &_name, QList _sequence, ShortcutGroup::Groups _group) : QList(_sequence), name(_name), group(_group) diff --git a/cockatrice/src/client/settings/shortcuts_settings.h b/cockatrice/src/client/settings/shortcuts_settings.h index f4ebc204e..24790a407 100644 --- a/cockatrice/src/client/settings/shortcuts_settings.h +++ b/cockatrice/src/client/settings/shortcuts_settings.h @@ -8,9 +8,18 @@ #define SHORTCUTSSETTINGS_H #include +#include +#include +#include #include +#include #include -#include +#include +#include +#include +#include +#include +#include inline Q_LOGGING_CATEGORY(ShortcutsSettingsLog, "shortcuts_settings"); diff --git a/cockatrice/src/client/sound_engine.cpp b/cockatrice/src/client/sound_engine.cpp index 96cafa3d3..4ac142cf4 100644 --- a/cockatrice/src/client/sound_engine.cpp +++ b/cockatrice/src/client/sound_engine.cpp @@ -4,8 +4,15 @@ #include #include +#include #include +#include +#include #include +#include +#include +#include +#include #include #define DEFAULT_THEME_NAME "Default" diff --git a/cockatrice/src/client/sound_engine.h b/cockatrice/src/client/sound_engine.h index 0c201523a..8167c71b5 100644 --- a/cockatrice/src/client/sound_engine.h +++ b/cockatrice/src/client/sound_engine.h @@ -7,17 +7,17 @@ #ifndef SOUNDENGINE_H #define SOUNDENGINE_H -#include #include #include -#include #include #include +#include + +class QAudioOutput; +class QMediaPlayer; inline Q_LOGGING_CATEGORY(SoundEngineLog, "sound_engine"); -class QBuffer; - typedef QMap QStringMap; class SoundEngine : public QObject diff --git a/cockatrice/src/database/interface/settings_card_preference_provider.h b/cockatrice/src/database/interface/settings_card_preference_provider.h index 64502e3a7..1feb2006b 100644 --- a/cockatrice/src/database/interface/settings_card_preference_provider.h +++ b/cockatrice/src/database/interface/settings_card_preference_provider.h @@ -13,11 +13,6 @@ public: { return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName); } - - [[nodiscard]] bool getIncludeRebalancedCards() const override - { - return SettingsCache::instance().cardsDisplay().getIncludeRebalancedCards(); - } }; #endif // COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H diff --git a/cockatrice/src/filters/deck_filter_string.cpp b/cockatrice/src/filters/deck_filter_string.cpp index a2b7519a8..616311750 100644 --- a/cockatrice/src/filters/deck_filter_string.cpp +++ b/cockatrice/src/filters/deck_filter_string.cpp @@ -1,9 +1,27 @@ #include "deck_filter_string.h" +#include "../interface/deck_loader/loaded_deck.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" + +#include +#include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include static peg::parser search(R"( Start <- QueryPartList diff --git a/cockatrice/src/filters/deck_filter_string.h b/cockatrice/src/filters/deck_filter_string.h index 5b1419004..76b891b59 100644 --- a/cockatrice/src/filters/deck_filter_string.h +++ b/cockatrice/src/filters/deck_filter_string.h @@ -7,13 +7,14 @@ #ifndef DECK_FILTER_STRING_H #define DECK_FILTER_STRING_H -#include "../interface/deck_loader/loaded_deck.h" - #include #include #include #include +struct CardSearchLanguage; +struct LoadedDeck; + inline Q_LOGGING_CATEGORY(DeckFilterStringLog, "deck_filter_string"); /** diff --git a/cockatrice/src/filters/filter_builder.cpp b/cockatrice/src/filters/filter_builder.cpp index f109fbcd3..6cc893224 100644 --- a/cockatrice/src/filters/filter_builder.cpp +++ b/cockatrice/src/filters/filter_builder.cpp @@ -5,8 +5,15 @@ #include #include +#include #include +#include +#include +#include +#include +#include #include +#include FilterBuilder::FilterBuilder(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/filters/filter_builder.h b/cockatrice/src/filters/filter_builder.h index 98fe3fd02..2aa38c992 100644 --- a/cockatrice/src/filters/filter_builder.h +++ b/cockatrice/src/filters/filter_builder.h @@ -8,8 +8,8 @@ #define FILTERBUILDER_H #include +#include -class QCheckBox; class QComboBox; class LineEditUnfocusable; class CardFilter; diff --git a/cockatrice/src/filters/filter_tree_model.cpp b/cockatrice/src/filters/filter_tree_model.cpp index 33b54530e..b3bf307f1 100644 --- a/cockatrice/src/filters/filter_tree_model.cpp +++ b/cockatrice/src/filters/filter_tree_model.cpp @@ -1,8 +1,15 @@ #include "filter_tree_model.h" +#include #include +#include +#include +#include #include #include +#include + +class QObject; FilterTreeModel::FilterTreeModel(QObject *parent) : QAbstractItemModel(parent) { diff --git a/cockatrice/src/filters/filter_tree_model.h b/cockatrice/src/filters/filter_tree_model.h index 7452f7a61..826fcc941 100644 --- a/cockatrice/src/filters/filter_tree_model.h +++ b/cockatrice/src/filters/filter_tree_model.h @@ -8,11 +8,15 @@ #define FILTERTREEMODEL_H #include +#include +#include #include +#include +#include class FilterTree; -class CardFilter; class FilterTreeNode; +class QObject; class FilterTreeModel : public QAbstractItemModel { diff --git a/cockatrice/src/filters/syntax_help.cpp b/cockatrice/src/filters/syntax_help.cpp index fa5338a41..baf5764d0 100644 --- a/cockatrice/src/filters/syntax_help.cpp +++ b/cockatrice/src/filters/syntax_help.cpp @@ -1,8 +1,21 @@ #include "syntax_help.h" +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include /** * Creates the card search syntax help window diff --git a/cockatrice/src/filters/syntax_help.h b/cockatrice/src/filters/syntax_help.h index d06fe03e5..52c878691 100644 --- a/cockatrice/src/filters/syntax_help.h +++ b/cockatrice/src/filters/syntax_help.h @@ -8,9 +8,10 @@ #ifndef SEARCH_SYNTAX_HELP_H #define SEARCH_SYNTAX_HELP_H -#include #include -#include + +class QLineEdit; +class QTextBrowser; inline Q_LOGGING_CATEGORY(SyntaxHelpLog, "syntax_help"); diff --git a/cockatrice/src/game/abstract_game.cpp b/cockatrice/src/game/abstract_game.cpp index 6aa2ab28f..efc575eff 100644 --- a/cockatrice/src/game/abstract_game.cpp +++ b/cockatrice/src/game/abstract_game.cpp @@ -1,7 +1,18 @@ #include "abstract_game.h" -#include "../interface/widgets/tabs/tab_game.h" +#include "game_event_handler.h" +#include "game_meta_info.h" +#include "game_state.h" +#include "libcockatrice/protocol/pb/game_replay.pb.h" +#include "player/player_info.h" #include "player/player_logic.h" +#include "player/player_manager.h" +#include "zones/card_zone_logic.h" + +#include +#include + +class AbstractClient; AbstractGame::AbstractGame(QObject *_parent) : QObject(_parent) { diff --git a/cockatrice/src/game/abstract_game.h b/cockatrice/src/game/abstract_game.h index fcf764492..326af8ac9 100644 --- a/cockatrice/src/game/abstract_game.h +++ b/cockatrice/src/game/abstract_game.h @@ -7,15 +7,18 @@ #ifndef COCKATRICE_ABSTRACT_GAME_H #define COCKATRICE_ABSTRACT_GAME_H -#include "game_event_handler.h" -#include "game_meta_info.h" -#include "game_state.h" -#include "player/player_manager.h" - #include -#include +#include +#include class CardItem; +class AbstractClient; +class GameEventHandler; +class GameMetaInfo; +class GameReplay; +class GameState; +class PlayerManager; + class AbstractGame : public QObject { Q_OBJECT diff --git a/cockatrice/src/game/arrow_registry.cpp b/cockatrice/src/game/arrow_registry.cpp index 286764b3b..c05134a75 100644 --- a/cockatrice/src/game/arrow_registry.cpp +++ b/cockatrice/src/game/arrow_registry.cpp @@ -1,6 +1,9 @@ #include "arrow_registry.h" #include "../game_graphics/board/arrow_item.h" +#include "board/arrow_data.h" + +#include void ArrowRegistry::insert(QSharedPointer data, ArrowItem *arrow) { diff --git a/cockatrice/src/game/arrow_registry.h b/cockatrice/src/game/arrow_registry.h index ef98229a2..ca3b04090 100644 --- a/cockatrice/src/game/arrow_registry.h +++ b/cockatrice/src/game/arrow_registry.h @@ -1,13 +1,13 @@ #ifndef COCKATRICE_ARROW_REGISTRY_H #define COCKATRICE_ARROW_REGISTRY_H -#include "board/arrow_data.h" - +#include #include #include -#include class ArrowItem; +struct ArrowData; +template class QSharedPointer; struct ArrowKey { diff --git a/cockatrice/src/game/board/arrow_data.cpp b/cockatrice/src/game/board/arrow_data.cpp index 9e89deed0..d5accd16e 100644 --- a/cockatrice/src/game/board/arrow_data.cpp +++ b/cockatrice/src/game/board/arrow_data.cpp @@ -1,5 +1,8 @@ #include "arrow_data.h" +#include "libcockatrice/protocol/pb/serverinfo_arrow.pb.h" +#include "libcockatrice/utility/color.h" + ArrowData ArrowData::fromProto(const ServerInfo_Arrow &arrow, int creatorId, bool isLocalCreator) { ArrowData data; diff --git a/cockatrice/src/game/board/arrow_data.h b/cockatrice/src/game/board/arrow_data.h index 2752f97e3..00217512f 100644 --- a/cockatrice/src/game/board/arrow_data.h +++ b/cockatrice/src/game/board/arrow_data.h @@ -3,8 +3,8 @@ #include #include -#include -#include + +class ServerInfo_Arrow; struct ArrowData { diff --git a/cockatrice/src/game/board/card_list.cpp b/cockatrice/src/game/board/card_list.cpp index 0080b5ae6..94bae67cd 100644 --- a/cockatrice/src/game/board/card_list.cpp +++ b/cockatrice/src/game/board/card_list.cpp @@ -1,9 +1,14 @@ #include "card_list.h" #include "../../game_graphics/board/card_item.h" +#include "libcockatrice/card/printing/exact_card.h" +#include #include +#include +#include #include +#include #include CardList::CardList(bool _contentsKnown) : QList(), contentsKnown(_contentsKnown) diff --git a/cockatrice/src/game/board/card_list.h b/cockatrice/src/game/board/card_list.h index 85a6848b7..b5427df0d 100644 --- a/cockatrice/src/game/board/card_list.h +++ b/cockatrice/src/game/board/card_list.h @@ -9,6 +9,8 @@ #include #include +#include +#include inline Q_LOGGING_CATEGORY(CardListLog, "card_list"); diff --git a/cockatrice/src/game/board/card_state.cpp b/cockatrice/src/game/board/card_state.cpp index 4319400d7..3f879a849 100644 --- a/cockatrice/src/game/board/card_state.cpp +++ b/cockatrice/src/game/board/card_state.cpp @@ -1,5 +1,7 @@ #include "card_state.h" +#include + void CardState::resetState(bool keepAnnotations) { attacking = false; diff --git a/cockatrice/src/game/board/card_state.h b/cockatrice/src/game/board/card_state.h index 0498b1aa2..ca7aaf927 100644 --- a/cockatrice/src/game/board/card_state.h +++ b/cockatrice/src/game/board/card_state.h @@ -3,9 +3,12 @@ #include #include +#include +#include class CardZoneLogic; class CardItem; + class CardState : public QObject { Q_OBJECT diff --git a/cockatrice/src/game/board/counter_state.cpp b/cockatrice/src/game/board/counter_state.cpp index 0970e4272..5d8c73d5b 100644 --- a/cockatrice/src/game/board/counter_state.cpp +++ b/cockatrice/src/game/board/counter_state.cpp @@ -1,5 +1,7 @@ #include "counter_state.h" +#include "libcockatrice/protocol/pb/serverinfo_counter.pb.h" + #include CounterState::CounterState(int id, const QString &name, const QColor &color, int radius, int value, QObject *parent) diff --git a/cockatrice/src/game/board/counter_state.h b/cockatrice/src/game/board/counter_state.h index 4c7b34473..8badc6217 100644 --- a/cockatrice/src/game/board/counter_state.h +++ b/cockatrice/src/game/board/counter_state.h @@ -4,7 +4,9 @@ #include #include #include -#include +#include + +class ServerInfo_Counter; class CounterState : public QObject { diff --git a/cockatrice/src/game/game.cpp b/cockatrice/src/game/game.cpp index 4c8b109c2..7343d052a 100644 --- a/cockatrice/src/game/game.cpp +++ b/cockatrice/src/game/game.cpp @@ -1,9 +1,17 @@ #include "game.h" -#include "../interface/widgets/tabs/tab_game.h" +#include "game_meta_info.h" +#include "game_state.h" +#include "player/player_manager.h" +#include +#include +#include #include +class AbstractClient; +class QObject; + Game::Game(QObject *_parent, bool isLocalGame, QList &_clients, diff --git a/cockatrice/src/game/game.h b/cockatrice/src/game/game.h index 4f912664c..6a309cfb2 100644 --- a/cockatrice/src/game/game.h +++ b/cockatrice/src/game/game.h @@ -9,7 +9,14 @@ #include "abstract_game.h" -#include +#include + +class AbstractClient; +class Event_GameJoined; +class QObject; +class QString; +template class QMap; +template class QList; class Game : public AbstractGame { diff --git a/cockatrice/src/game/game_event_handler.cpp b/cockatrice/src/game/game_event_handler.cpp index f146cdbb4..b86f661bb 100644 --- a/cockatrice/src/game/game_event_handler.cpp +++ b/cockatrice/src/game/game_event_handler.cpp @@ -1,9 +1,30 @@ #include "game_event_handler.h" -#include "../game_graphics/log/message_log_widget.h" -#include "../interface/widgets/tabs/tab_game.h" #include "abstract_game.h" +#include "game_meta_info.h" +#include "game_state.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/game_commands.pb.h" +#include "libcockatrice/protocol/pb/game_event.pb.h" +#include "libcockatrice/protocol/pb/game_event_context.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_player.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "player/player_event_handler.h" +#include "player/player_info.h" +#include "player/player_logic.h" +#include "player/player_manager.h" +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -13,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -28,6 +48,8 @@ #include #include #include +#include +#include GameEventHandler::GameEventHandler(AbstractGame *_game) : QObject(_game), game(_game) { diff --git a/cockatrice/src/game/game_event_handler.h b/cockatrice/src/game/game_event_handler.h index 99277abb7..30021d295 100644 --- a/cockatrice/src/game/game_event_handler.h +++ b/cockatrice/src/game/game_event_handler.h @@ -19,23 +19,29 @@ #include #include +#include +#include +#include #include +#include + +// IWYU pragma: keep +// GameEventContext, ServerInfo_Player and ServerInfo_User are passed by value +// to signals and slots, so the moc-generated code needs the complete types. +#include #include +#include class AbstractClient; class AbstractGame; -class CommandContainer; -class GameCommand; class GameEventContainer; class GameEventContext; class PendingCommand; class PlayerLogic; class Response; - class Event_GameStateChanged; class Event_PlayerPropertiesChanged; class Event_Join; -class Event_Leave; class Event_GameHostChanged; class Event_GameClosed; class Event_SetActivePlayer; @@ -44,6 +50,15 @@ class Event_GameSay; class Event_Kicked; class Event_ReverseTurn; class Event_Ping; +class ServerInfo_PlayerProperties; +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google +template class QList; inline Q_LOGGING_CATEGORY(GameEventHandlerLog, "game_event_handler"); diff --git a/cockatrice/src/game/game_meta_info.h b/cockatrice/src/game/game_meta_info.h index cdba1605f..ef8f0c08e 100644 --- a/cockatrice/src/game/game_meta_info.h +++ b/cockatrice/src/game/game_meta_info.h @@ -9,13 +9,16 @@ #include #include +#include #include +#include // Translation layer class to expose protobuf safely and hook it up to Qt Signals. // This class de-couples the domain object (i.e. the GameMetaInfo) from the network object. // If the network object changes, only this class needs to be adjusted. class AbstractGame; + class GameMetaInfo : public QObject { Q_OBJECT diff --git a/cockatrice/src/game/game_state.cpp b/cockatrice/src/game/game_state.cpp index dc9ba02a3..e3bbbec00 100644 --- a/cockatrice/src/game/game_state.cpp +++ b/cockatrice/src/game/game_state.cpp @@ -2,6 +2,11 @@ #include "abstract_game.h" +#include +#include + +class AbstractClient; + GameState::GameState(AbstractGame *parent, int _secondsElapsed, int _hostId, diff --git a/cockatrice/src/game/game_state.h b/cockatrice/src/game/game_state.h index 94bbb853c..55784fb91 100644 --- a/cockatrice/src/game/game_state.h +++ b/cockatrice/src/game/game_state.h @@ -7,12 +7,14 @@ #ifndef COCKATRICE_GAME_STATE_H #define COCKATRICE_GAME_STATE_H -#include -#include +#include +#include +#include +#include class AbstractGame; -class ServerInfo_PlayerProperties; -class ServerInfo_User; +class AbstractClient; +class QTimer; class GameState : public QObject { diff --git a/cockatrice/src/game/phase.cpp b/cockatrice/src/game/phase.cpp index 7fb1700a5..f56228279 100644 --- a/cockatrice/src/game/phase.cpp +++ b/cockatrice/src/game/phase.cpp @@ -1,5 +1,10 @@ #include "phase.h" +#include +#include +#include +#include + Phase::Phase(const QString &_name, const QString &_color, const QString &_soundFileName) : name(_name), color(_color), soundFileName(_soundFileName) { diff --git a/cockatrice/src/game/phase.h b/cockatrice/src/game/phase.h index a888ad43b..b4eaa6e46 100644 --- a/cockatrice/src/game/phase.h +++ b/cockatrice/src/game/phase.h @@ -7,8 +7,9 @@ #ifndef PHASE_H #define PHASE_H -#include +#include #include +#include class Phase { diff --git a/cockatrice/src/game/player/player_actions.cpp b/cockatrice/src/game/player/player_actions.cpp index 67c3295d6..35682ede8 100644 --- a/cockatrice/src/game/player/player_actions.cpp +++ b/cockatrice/src/game/player/player_actions.cpp @@ -1,14 +1,54 @@ #include "player_actions.h" +#include "../../client/settings/cache_settings.h" +#include "../../game_graphics/board/card_item.h" +#include "../../game_graphics/dialogs/dlg_create_token.h" #include "../../game_graphics/dialogs/dlg_move_top_cards_until.h" -#include "../../game_graphics/dialogs/dlg_roll_dice.h" #include "../../game_graphics/player/card_menu_action_type.h" -#include "../../game_graphics/zones/hand_zone.h" #include "../../game_graphics/zones/table_zone.h" -#include "../../interface/widgets/tabs/tab_game.h" -#include "../../interface/widgets/utility/get_text_with_max.h" +#include "../../interface/deck_loader/loaded_deck.h" +#include "../abstract_game.h" +#include "../board/counter_state.h" +#include "../game_event_handler.h" +#include "../zones/card_zone_logic.h" +#include "../zones/hand_zone_logic.h" +#include "../zones/pile_zone_logic.h" +#include "../zones/table_zone_logic.h" #include "../zones/view_zone_logic.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/relation/card_relation_type.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/filters/filter_string.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" +#include "libcockatrice/protocol/pb/game_commands.pb.h" +#include "libcockatrice/settings/cards_display_settings.h" +#include "player_info.h" +#include "player_logic.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -26,13 +66,16 @@ #include #include #include -#include #include #include #include #include #include #include +#include +#include +#include +#include // milliseconds in between triggers of the move top cards until action static constexpr int MOVE_TOP_CARD_UNTIL_INTERVAL = 100; diff --git a/cockatrice/src/game/player/player_actions.h b/cockatrice/src/game/player/player_actions.h index fa4d54110..8fff81635 100644 --- a/cockatrice/src/game/player/player_actions.h +++ b/cockatrice/src/game/player/player_actions.h @@ -8,17 +8,25 @@ #ifndef COCKATRICE_PLAYER_ACTIONS_H #define COCKATRICE_PLAYER_ACTIONS_H -#include "../../game_graphics/board/card_item.h" +#include "../../game_graphics/board/card_item.h" // IWYU pragma: keep - moc instantiates the metatype for QList, which Qt 6.4 needs complete #include "../../game_graphics/dialogs/dlg_create_token.h" #include "../../game_graphics/dialogs/dlg_move_top_cards_until.h" #include "../../game_graphics/player/card_menu_action_type.h" -#include "event_processing_options.h" -#include "player_logic.h" +#include "../board/card_list.h" +#include "libcockatrice/card/card_info.h" -#include #include +#include +#include #include #include +#include + +class CardItem; +class CardRelation; +class QAction; +class QTimer; +template class QList; namespace google { @@ -29,9 +37,9 @@ class Message; } // namespace google class Command_MoveCard; -class GameEventContext; class PendingCommand; class PlayerLogic; + class PlayerActions : public QObject { Q_OBJECT diff --git a/cockatrice/src/game/player/player_event_handler.cpp b/cockatrice/src/game/player/player_event_handler.cpp index 277b8b1d4..18f6573df 100644 --- a/cockatrice/src/game/player/player_event_handler.cpp +++ b/cockatrice/src/game/player/player_event_handler.cpp @@ -1,15 +1,32 @@ #include "player_event_handler.h" -#include "../../game_graphics/board/arrow_item.h" #include "../../game_graphics/board/card_item.h" #include "../../game_graphics/zones/view_zone.h" -#include "../../interface/widgets/tabs/tab_game.h" +#include "../abstract_game.h" #include "../board/arrow_data.h" #include "../board/card_list.h" +#include "../board/counter_state.h" +#include "../zones/card_zone_logic.h" +#include "../zones/hand_zone_logic.h" +#include "../zones/pile_zone_logic.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" +#include "libcockatrice/protocol/pb/game_event.pb.h" +#include "libcockatrice/protocol/pb/game_event_context.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_card.pb.h" +#include "libcockatrice/utility/card_ref.h" #include "player_actions.h" +#include "player_info.h" #include "player_logic.h" +#include "player_manager.h" -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -32,8 +49,9 @@ #include #include #include -#include #include +#include +#include PlayerEventHandler::PlayerEventHandler(PlayerLogic *_player) : QObject(_player), player(_player) { diff --git a/cockatrice/src/game/player/player_event_handler.h b/cockatrice/src/game/player/player_event_handler.h index 300cacd08..88254119b 100644 --- a/cockatrice/src/game/player/player_event_handler.h +++ b/cockatrice/src/game/player/player_event_handler.h @@ -22,14 +22,14 @@ #include "event_processing_options.h" #include -#include +#include #include -#include +#include +#include class CardItem; class CardZoneLogic; class PlayerLogic; - class Event_AttachCard; class Event_ChangeZoneProperties; class Event_CreateArrow; @@ -50,6 +50,9 @@ class Event_SetCardCounter; class Event_SetCounter; class Event_Shuffle; class Event_GameLogNotice; +class GameEventContext; +enum CardAttribute : int; +template class QList; /** * @class PlayerEventHandler diff --git a/cockatrice/src/game/player/player_info.cpp b/cockatrice/src/game/player/player_info.cpp index c4debde0f..aef0d82aa 100644 --- a/cockatrice/src/game/player/player_info.cpp +++ b/cockatrice/src/game/player/player_info.cpp @@ -1,5 +1,7 @@ #include "player_info.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" + PlayerInfo::PlayerInfo(const ServerInfo_User &info, int _id, bool _local, bool _judge) : id(_id), local(_local), judge(_judge) { diff --git a/cockatrice/src/game/player/player_info.h b/cockatrice/src/game/player/player_info.h index 4ec39edbd..58e877f8e 100644 --- a/cockatrice/src/game/player/player_info.h +++ b/cockatrice/src/game/player/player_info.h @@ -7,10 +7,10 @@ #ifndef COCKATRICE_PLAYER_INFO_H #define COCKATRICE_PLAYER_INFO_H -#include "../../game_graphics/player/player_target.h" - #include +#include #include +#include class PlayerInfo : public QObject { diff --git a/cockatrice/src/game/player/player_logic.cpp b/cockatrice/src/game/player/player_logic.cpp index 143df5c57..b545b7088 100644 --- a/cockatrice/src/game/player/player_logic.cpp +++ b/cockatrice/src/game/player/player_logic.cpp @@ -1,33 +1,37 @@ #include "player_logic.h" -#include "../../game_graphics/board/arrow_item.h" #include "../../game_graphics/board/card_item.h" -#include "../../game_graphics/board/counter_general.h" -#include "../../game_graphics/game_scene.h" -#include "../../game_graphics/player/player_target.h" -#include "../../game_graphics/zones/hand_zone.h" -#include "../../game_graphics/zones/pile_zone.h" -#include "../../game_graphics/zones/stack_zone.h" -#include "../../game_graphics/zones/table_zone.h" -#include "../../interface/theme_manager.h" -#include "../../interface/widgets/tabs/tab_game.h" -#include "../board/card_list.h" +#include "../abstract_game.h" +#include "../board/arrow_data.h" +#include "../board/counter_state.h" +#include "../game_meta_info.h" +#include "../zones/hand_zone_logic.h" +#include "../zones/pile_zone_logic.h" +#include "../zones/stack_zone_logic.h" +#include "../zones/table_zone_logic.h" +#include "libcockatrice/protocol/pb/serverinfo_card.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_counter.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/utility/zone_names.h" #include "player_actions.h" +#include "player_event_handler.h" +#include "player_info.h" +#include "player_manager.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include PlayerLogic::PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent) : QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)), diff --git a/cockatrice/src/game/player/player_logic.h b/cockatrice/src/game/player/player_logic.h index 6923b3afe..59da7cc32 100644 --- a/cockatrice/src/game/player/player_logic.h +++ b/cockatrice/src/game/player/player_logic.h @@ -7,57 +7,48 @@ #ifndef PLAYER_H #define PLAYER_H -#include "../../game_graphics/player/player_area.h" -#include "../../interface/widgets/menus/tearoff_menu.h" -#include "../board/arrow_data.h" -#include "../interface/deck_loader/loaded_deck.h" +#include "../zones/card_zone_logic.h" #include "../zones/hand_zone_logic.h" #include "../zones/pile_zone_logic.h" #include "../zones/stack_zone_logic.h" #include "../zones/table_zone_logic.h" -#include "player_event_handler.h" -#include "player_info.h" -#include "player_manager.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" +#include #include +#include #include #include -#include -#include -#include -#include +#include +#include #include +#include + +// IWYU pragma: keep +// ServerInfo_Card appears inside QList<...> in signal and slot +// signatures, which the moc-generated code needs to be complete. +#include + +class CardItem; +class CounterState; +class QWidget; +class ServerInfo_PlayerProperties; +struct ArrowData; +struct LoadedDeck; +template class QSharedPointer; inline Q_LOGGING_CATEGORY(PlayerLog, "player"); - -namespace google -{ -namespace protobuf -{ -class Message; -} -} // namespace google class AbstractCardItem; class AbstractGame; -class ArrowItem; -class ArrowTarget; -class CardDatabase; -class CardZone; -class CommandContainer; -class GameCommand; -class GameEvent; class PlayerInfo; class PlayerEventHandler; class PlayerActions; -class PlayerMenu; -class QAction; -class QMenu; -class ServerInfo_Arrow; class ServerInfo_Card; class ServerInfo_Counter; class ServerInfo_Player; class ServerInfo_User; -class TabGame; const int MAX_TOKENS_PER_DIALOG = 99; diff --git a/cockatrice/src/game/player/player_manager.cpp b/cockatrice/src/game/player/player_manager.cpp index 8486efbeb..4730805ad 100644 --- a/cockatrice/src/game/player/player_manager.cpp +++ b/cockatrice/src/game/player/player_manager.cpp @@ -1,8 +1,14 @@ #include "player_manager.h" #include "../abstract_game.h" +#include "../game_state.h" +#include "player_info.h" #include "player_logic.h" +#include +#include +#include + PlayerManager::PlayerManager(AbstractGame *_game, int _localPlayerId, bool _localPlayerIsJudge, diff --git a/cockatrice/src/game/player/player_manager.h b/cockatrice/src/game/player/player_manager.h index 504e65396..7a9f7645b 100644 --- a/cockatrice/src/game/player/player_manager.h +++ b/cockatrice/src/game/player/player_manager.h @@ -7,12 +7,17 @@ #ifndef COCKATRICE_PLAYER_MANAGER_H #define COCKATRICE_PLAYER_MANAGER_H +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" + #include #include +#include #include +#include class AbstractGame; class PlayerLogic; + class PlayerManager : public QObject { Q_OBJECT diff --git a/cockatrice/src/game/replay.cpp b/cockatrice/src/game/replay.cpp index dcf3e9b9b..4ab4a6321 100644 --- a/cockatrice/src/game/replay.cpp +++ b/cockatrice/src/game/replay.cpp @@ -1,6 +1,13 @@ #include "replay.h" -#include "../interface/widgets/tabs/tab_game.h" +#include "game_meta_info.h" +#include "game_state.h" +#include "player/player_manager.h" + +#include + +class GameReplay; +class QObject; Replay::Replay(QObject *_parent, const GameReplay *_replay, bool isLocalGame) : AbstractGame(_parent) { diff --git a/cockatrice/src/game/replay.h b/cockatrice/src/game/replay.h index 1c269b273..cc995dbac 100644 --- a/cockatrice/src/game/replay.h +++ b/cockatrice/src/game/replay.h @@ -10,6 +10,11 @@ #include "abstract_game.h" +#include + +class GameReplay; +class QObject; + class Replay : public AbstractGame { Q_OBJECT diff --git a/cockatrice/src/game/zones/card_zone_logic.cpp b/cockatrice/src/game/zones/card_zone_logic.cpp index 7e0585f4e..d997ab9ad 100644 --- a/cockatrice/src/game/zones/card_zone_logic.cpp +++ b/cockatrice/src/game/zones/card_zone_logic.cpp @@ -1,16 +1,25 @@ #include "card_zone_logic.h" +#include "../../client/translation.h" #include "../../game_graphics/board/card_item.h" +#include "../../game_graphics/zones/card_zone.h" #include "../../game_graphics/zones/view_zone.h" +#include "../board/card_list.h" #include "../player/player_actions.h" +#include "../player/player_info.h" #include "../player/player_logic.h" +#include "libcockatrice/card/database/card_database.h" #include "view_zone_logic.h" #include #include +#include +#include +#include #include #include #include +#include /** * @param _player the player that the zone belongs to diff --git a/cockatrice/src/game/zones/card_zone_logic.h b/cockatrice/src/game/zones/card_zone_logic.h index ae97719a9..2e232b258 100644 --- a/cockatrice/src/game/zones/card_zone_logic.h +++ b/cockatrice/src/game/zones/card_zone_logic.h @@ -10,17 +10,18 @@ #include "../../client/translation.h" #include "../board/card_list.h" +#include #include #include +#include +#include + +class CardItem; inline Q_LOGGING_CATEGORY(CardZoneLogicLog, "card_zone_logic"); class PlayerLogic; class ZoneViewZone; -class QMenu; -class QAction; -class QPainter; -class CardDragItem; class CardZoneLogic : public QObject { diff --git a/cockatrice/src/game/zones/hand_zone_logic.cpp b/cockatrice/src/game/zones/hand_zone_logic.cpp index 3bdd15902..cea17d031 100644 --- a/cockatrice/src/game/zones/hand_zone_logic.cpp +++ b/cockatrice/src/game/zones/hand_zone_logic.cpp @@ -3,6 +3,9 @@ #include "../../game_graphics/board/card_item.h" #include "card_zone_algorithms.h" +class PlayerLogic; +class QObject; + HandZoneLogic::HandZoneLogic(PlayerLogic *_player, const QString &_name, bool _hasCardAttr, diff --git a/cockatrice/src/game/zones/hand_zone_logic.h b/cockatrice/src/game/zones/hand_zone_logic.h index 400506248..c7d63bc0d 100644 --- a/cockatrice/src/game/zones/hand_zone_logic.h +++ b/cockatrice/src/game/zones/hand_zone_logic.h @@ -8,6 +8,12 @@ #define COCKATRICE_HAND_ZONE_LOGIC_H #include "card_zone_logic.h" +#include +#include + +class PlayerLogic; +class QObject; + class HandZoneLogic : public CardZoneLogic { Q_OBJECT diff --git a/cockatrice/src/game/zones/pile_zone_logic.cpp b/cockatrice/src/game/zones/pile_zone_logic.cpp index 0f374fb84..40af25cc5 100644 --- a/cockatrice/src/game/zones/pile_zone_logic.cpp +++ b/cockatrice/src/game/zones/pile_zone_logic.cpp @@ -1,6 +1,10 @@ #include "pile_zone_logic.h" #include "../../game_graphics/board/card_item.h" +#include "../board/card_list.h" + +class PlayerLogic; +class QObject; PileZoneLogic::PileZoneLogic(PlayerLogic *_player, const QString &_name, diff --git a/cockatrice/src/game/zones/pile_zone_logic.h b/cockatrice/src/game/zones/pile_zone_logic.h index 522d99b89..ed6841b75 100644 --- a/cockatrice/src/game/zones/pile_zone_logic.h +++ b/cockatrice/src/game/zones/pile_zone_logic.h @@ -8,6 +8,12 @@ #define COCKATRICE_PILE_ZONE_LOGIC_H #include "card_zone_logic.h" +#include +#include + +class PlayerLogic; +class QObject; + class PileZoneLogic : public CardZoneLogic { diff --git a/cockatrice/src/game/zones/stack_zone_logic.cpp b/cockatrice/src/game/zones/stack_zone_logic.cpp index 341d4b0e4..454274971 100644 --- a/cockatrice/src/game/zones/stack_zone_logic.cpp +++ b/cockatrice/src/game/zones/stack_zone_logic.cpp @@ -3,6 +3,9 @@ #include "../../game_graphics/board/card_item.h" #include "card_zone_algorithms.h" +class PlayerLogic; +class QObject; + StackZoneLogic::StackZoneLogic(PlayerLogic *_player, const QString &_name, bool _hasCardAttr, diff --git a/cockatrice/src/game/zones/stack_zone_logic.h b/cockatrice/src/game/zones/stack_zone_logic.h index cce4bd0fa..657d44ecf 100644 --- a/cockatrice/src/game/zones/stack_zone_logic.h +++ b/cockatrice/src/game/zones/stack_zone_logic.h @@ -8,6 +8,12 @@ #define COCKATRICE_STACK_ZONE_LOGIC_H #include "card_zone_logic.h" +#include +#include + +class PlayerLogic; +class QObject; + class StackZoneLogic : public CardZoneLogic { Q_OBJECT diff --git a/cockatrice/src/game/zones/table_zone_logic.cpp b/cockatrice/src/game/zones/table_zone_logic.cpp index a4f033819..07e4a759b 100644 --- a/cockatrice/src/game/zones/table_zone_logic.cpp +++ b/cockatrice/src/game/zones/table_zone_logic.cpp @@ -1,6 +1,13 @@ #include "table_zone_logic.h" #include "../../game_graphics/board/card_item.h" +#include "../board/card_list.h" +#include "libcockatrice/card/card_info.h" + +#include + +class PlayerLogic; +class QObject; TableZoneLogic::TableZoneLogic(PlayerLogic *_player, const QString &_name, diff --git a/cockatrice/src/game/zones/table_zone_logic.h b/cockatrice/src/game/zones/table_zone_logic.h index 6d8d64a20..8078bfd05 100644 --- a/cockatrice/src/game/zones/table_zone_logic.h +++ b/cockatrice/src/game/zones/table_zone_logic.h @@ -8,6 +8,12 @@ #define COCKATRICE_TABLE_ZONE_LOGIC_H #include "card_zone_logic.h" +#include +#include + +class PlayerLogic; +class QObject; + class TableZoneLogic : public CardZoneLogic { Q_OBJECT diff --git a/cockatrice/src/game/zones/view_zone_logic.cpp b/cockatrice/src/game/zones/view_zone_logic.cpp index de00581d1..eb3b7715f 100644 --- a/cockatrice/src/game/zones/view_zone_logic.cpp +++ b/cockatrice/src/game/zones/view_zone_logic.cpp @@ -2,8 +2,14 @@ #include "../../client/settings/cache_settings.h" #include "../../game_graphics/board/card_item.h" +#include "../board/card_list.h" +#include #include + +class PlayerLogic; +class QObject; + /** * @param _player the player that the cards are revealed to. * @param _origZone the zone the cards were revealed from. diff --git a/cockatrice/src/game/zones/view_zone_logic.h b/cockatrice/src/game/zones/view_zone_logic.h index e3080d044..6fae301e4 100644 --- a/cockatrice/src/game/zones/view_zone_logic.h +++ b/cockatrice/src/game/zones/view_zone_logic.h @@ -8,6 +8,11 @@ #define COCKATRICE_VIEW_ZONE_LOGIC_H #include "card_zone_logic.h" +#include + +class PlayerLogic; +class QObject; + class ZoneViewZoneLogic : public CardZoneLogic { Q_OBJECT diff --git a/cockatrice/src/game_graphics/board/abstract_card_drag_item.cpp b/cockatrice/src/game_graphics/board/abstract_card_drag_item.cpp index 2f43591ac..2e18fca2d 100644 --- a/cockatrice/src/game_graphics/board/abstract_card_drag_item.cpp +++ b/cockatrice/src/game_graphics/board/abstract_card_drag_item.cpp @@ -2,12 +2,20 @@ #include "../../client/settings/cache_settings.h" #include "../z_values.h" +#include "abstract_card_item.h" +#include +#include #include -#include #include #include +#include +#include +#include #include +#include + +class QPointF; const QColor GHOST_MASK = QColor(255, 255, 255, 50); diff --git a/cockatrice/src/game_graphics/board/abstract_card_drag_item.h b/cockatrice/src/game_graphics/board/abstract_card_drag_item.h index 1cbeb4fe7..18afdcbb8 100644 --- a/cockatrice/src/game_graphics/board/abstract_card_drag_item.h +++ b/cockatrice/src/game_graphics/board/abstract_card_drag_item.h @@ -7,11 +7,17 @@ #ifndef ABSTRACTCARDDRAGITEM_H #define ABSTRACTCARDDRAGITEM_H -#include "abstract_card_item.h" +#include "../card_dimensions.h" +#include "graphics_item_type.h" -class QGraphicsScene; -class CardZone; -class CardInfo; +#include +#include +#include +#include +#include +#include + +class AbstractCardItem; class AbstractCardDragItem : public QObject, public QGraphicsItem { diff --git a/cockatrice/src/game_graphics/board/abstract_card_item.cpp b/cockatrice/src/game_graphics/board/abstract_card_item.cpp index 3969b7d03..a79c5873e 100644 --- a/cockatrice/src/game_graphics/board/abstract_card_item.cpp +++ b/cockatrice/src/game_graphics/board/abstract_card_item.cpp @@ -3,19 +3,42 @@ #include "../../client/settings/cache_settings.h" #include "../../interface/card_localization.h" #include "../../interface/card_picture_loader/card_picture_loader.h" +#include "../card_dimensions.h" #include "../game_scene.h" #include "../z_values.h" +#include "abstract_graphics_item.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/card_ref.h" +#include +#include #include +#include +#include #include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include #include #include #include #include +#include + +class QSizeF; AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, PlayerLogic *_owner, int _id) : ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0), diff --git a/cockatrice/src/game_graphics/board/abstract_card_item.h b/cockatrice/src/game_graphics/board/abstract_card_item.h index 8cbe95282..385f9c32f 100644 --- a/cockatrice/src/game_graphics/board/abstract_card_item.h +++ b/cockatrice/src/game_graphics/board/abstract_card_item.h @@ -8,14 +8,22 @@ #define ABSTRACTCARDITEM_H #include "../animated_item.h" -#include "../card_dimensions.h" #include "arrow_target.h" #include "graphics_item_type.h" +#include +#include +#include +#include +#include #include #include +#include class PlayerLogic; +class CardInfo; +class QPainter; +class QPoint; class AbstractCardItem : public ArrowTarget, public IAnimatedItem { diff --git a/cockatrice/src/game_graphics/board/abstract_counter.cpp b/cockatrice/src/game_graphics/board/abstract_counter.cpp index 4ba04804f..8500b9c51 100644 --- a/cockatrice/src/game_graphics/board/abstract_counter.cpp +++ b/cockatrice/src/game_graphics/board/abstract_counter.cpp @@ -2,21 +2,33 @@ #include "../../client/settings/cache_settings.h" #include "../../client/settings/shortcuts_settings.h" +#include "../../game/board/counter_state.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" #include "../../game_graphics/board/translate_counter_name.h" -#include "../../interface/widgets/tabs/tab_game.h" +#include "../../interface/widgets/menus/tearoff_menu.h" #include #include +#include +#include +#include #include #include #include -#include +#include +#include +#include #include +#include +#include #include #include #include +#include + +class QWidget; AbstractCounter::AbstractCounter(CounterState *state, PlayerLogic *_player, diff --git a/cockatrice/src/game_graphics/board/abstract_counter.h b/cockatrice/src/game_graphics/board/abstract_counter.h index 67b5b4074..7ba686a93 100644 --- a/cockatrice/src/game_graphics/board/abstract_counter.h +++ b/cockatrice/src/game_graphics/board/abstract_counter.h @@ -7,18 +7,21 @@ #ifndef COUNTER_H #define COUNTER_H -#include "../../game/board/counter_state.h" #include "../../interface/widgets/menus/tearoff_menu.h" #include "../player/menu/abstract_player_component.h" +#include #include #include +#include +#include +#include class PlayerLogic; class QAction; -class QKeyEvent; class QMenu; -class QString; +class CounterState; +class QWidget; class AbstractCounter : public QObject, public QGraphicsItem, public AbstractPlayerComponent { diff --git a/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp b/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp index 8da8ab708..50e80d359 100644 --- a/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp +++ b/cockatrice/src/game_graphics/board/abstract_graphics_item.cpp @@ -1,6 +1,14 @@ #include "abstract_graphics_item.h" +#include +#include +#include #include +#include +#include +#include +#include +#include void AbstractGraphicsItem::paintNumberEllipse(int number, int fontSize, diff --git a/cockatrice/src/game_graphics/board/abstract_graphics_item.h b/cockatrice/src/game_graphics/board/abstract_graphics_item.h index 287c2c0b3..ebc2a3761 100644 --- a/cockatrice/src/game_graphics/board/abstract_graphics_item.h +++ b/cockatrice/src/game_graphics/board/abstract_graphics_item.h @@ -7,7 +7,12 @@ #ifndef ABSTRACTGRAPHICSITEM_H #define ABSTRACTGRAPHICSITEM_H -#include +#include +#include +#include + +class QGraphicsItem; +class QPainter; /** * Parent class of all objects that appear in a game. diff --git a/cockatrice/src/game_graphics/board/arrow_item.cpp b/cockatrice/src/game_graphics/board/arrow_item.cpp index 664d44ecc..c5a9b9c5e 100644 --- a/cockatrice/src/game_graphics/board/arrow_item.cpp +++ b/cockatrice/src/game_graphics/board/arrow_item.cpp @@ -2,28 +2,42 @@ #include "arrow_item.h" #include "../../client/settings/cache_settings.h" +#include "../../game/board/arrow_data.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" #include "../game_scene.h" #include "../player/player_target.h" #include "../z_values.h" -#include "../zones/card_zone.h" #include "card_item.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/protocol/pb/color.pb.h" -#include +#include #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 { diff --git a/cockatrice/src/game_graphics/board/arrow_item.h b/cockatrice/src/game_graphics/board/arrow_item.h index 76a2d5d6c..2395165fc 100644 --- a/cockatrice/src/game_graphics/board/arrow_item.h +++ b/cockatrice/src/game_graphics/board/arrow_item.h @@ -6,15 +6,23 @@ #include "arrow_target.h" #include "graphics_item_type.h" +#include #include #include +#include +#include +#include #include +#include #include +#include #include +#include +#include class CardItem; -class QGraphicsSceneMouseEvent; class PlayerLogic; +template class QSharedPointer; class ArrowItem : public QObject, public QGraphicsItem, public IAnimatedItem { diff --git a/cockatrice/src/game_graphics/board/arrow_target.cpp b/cockatrice/src/game_graphics/board/arrow_target.cpp index 79b21d921..024479ee6 100644 --- a/cockatrice/src/game_graphics/board/arrow_target.cpp +++ b/cockatrice/src/game_graphics/board/arrow_target.cpp @@ -1,7 +1,8 @@ #include "arrow_target.h" -#include "../../game/player/player_logic.h" -#include "arrow_item.h" +#include + +class QGraphicsItem; ArrowTarget::ArrowTarget(PlayerLogic *_owner, QGraphicsItem *parent) : AbstractGraphicsItem(parent), owner(_owner) { diff --git a/cockatrice/src/game_graphics/board/arrow_target.h b/cockatrice/src/game_graphics/board/arrow_target.h index bf89c5456..5c55e0e5d 100644 --- a/cockatrice/src/game_graphics/board/arrow_target.h +++ b/cockatrice/src/game_graphics/board/arrow_target.h @@ -9,10 +9,10 @@ #include "abstract_graphics_item.h" -#include +#include class PlayerLogic; -class ArrowItem; +class QGraphicsItem; class ArrowTarget : public AbstractGraphicsItem { diff --git a/cockatrice/src/game_graphics/board/card_drag_item.cpp b/cockatrice/src/game_graphics/board/card_drag_item.cpp index 49467c5c9..265ea759c 100644 --- a/cockatrice/src/game_graphics/board/card_drag_item.cpp +++ b/cockatrice/src/game_graphics/board/card_drag_item.cpp @@ -6,9 +6,20 @@ #include "../zones/view_zone.h" #include "card_item.h" +#include +#include #include +#include +#include #include +#include +#include #include +#include +#include +#include + +class CardZoneLogic; CardDragItem::CardDragItem(CardItem *_item, int _id, diff --git a/cockatrice/src/game_graphics/board/card_drag_item.h b/cockatrice/src/game_graphics/board/card_drag_item.h index 74d25ad04..d5e9a9e83 100644 --- a/cockatrice/src/game_graphics/board/card_drag_item.h +++ b/cockatrice/src/game_graphics/board/card_drag_item.h @@ -9,7 +9,11 @@ #include "abstract_card_drag_item.h" +#include +#include + class CardItem; +class CardZone; class CardDragItem : public AbstractCardDragItem { diff --git a/cockatrice/src/game_graphics/board/card_item.cpp b/cockatrice/src/game_graphics/board/card_item.cpp index c2dc455cc..a04d86c15 100644 --- a/cockatrice/src/game_graphics/board/card_item.cpp +++ b/cockatrice/src/game_graphics/board/card_item.cpp @@ -1,26 +1,52 @@ #include "card_item.h" #include "../../client/settings/cache_settings.h" -#include "../../client/settings/card_counter_settings.h" +#include "../../game/abstract_game.h" +#include "../../game/board/card_state.h" +#include "../../game/game_state.h" #include "../../game/phase.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/player/player_manager.h" +#include "../../game/zones/card_zone_logic.h" +#include "../../game/zones/table_zone_logic.h" #include "../../game/zones/view_zone_logic.h" -#include "../../interface/widgets/tabs/tab_game.h" +#include "../card_dimensions.h" #include "../game_scene.h" -#include "../zones/table_zone.h" -#include "../zones/view_zone.h" #include "arrow_item.h" #include "card_drag_item.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/protocol/pb/serverinfo_cardcounter.pb.h" #include <../../client/settings/card_counter_settings.h> #include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include + +struct CardRef; CardItem::CardItem(PlayerLogic *_owner, QGraphicsItem *parent, diff --git a/cockatrice/src/game_graphics/board/card_item.h b/cockatrice/src/game_graphics/board/card_item.h index 2ba43d03d..df79ef378 100644 --- a/cockatrice/src/game_graphics/board/card_item.h +++ b/cockatrice/src/game_graphics/board/card_item.h @@ -8,18 +8,24 @@ #define CARDITEM_H #include "../../game/board/card_state.h" -#include "../../game/zones/card_zone_logic.h" #include "abstract_card_item.h" +#include "graphics_item_type.h" -#include +#include +#include +#include +#include +#include +#include -class CardDatabase; class CardDragItem; -class CardZone; class ServerInfo_Card; class PlayerLogic; -class QAction; class QColor; +class CardZoneLogic; +class QGraphicsItem; +struct CardRef; +template class QMap; const int ROTATION_DEGREES_PER_FRAME = 10; diff --git a/cockatrice/src/game_graphics/board/counter_general.cpp b/cockatrice/src/game_graphics/board/counter_general.cpp index 379c6f837..4a8bbd6a4 100644 --- a/cockatrice/src/game_graphics/board/counter_general.cpp +++ b/cockatrice/src/game_graphics/board/counter_general.cpp @@ -3,7 +3,20 @@ #include "../../interface/pixel_map_generator.h" #include "abstract_graphics_item.h" +#include #include +#include +#include +#include +#include +#include +#include +#include +#include + +class CounterState; +class PlayerLogic; +class QGraphicsItem; GeneralCounter::GeneralCounter(CounterState *state, PlayerLogic *player, bool useNameForShortcut, QGraphicsItem *parent) : AbstractCounter(state, player, true, useNameForShortcut, parent) diff --git a/cockatrice/src/game_graphics/board/counter_general.h b/cockatrice/src/game_graphics/board/counter_general.h index 0a2e882ce..2e49f11d7 100644 --- a/cockatrice/src/game_graphics/board/counter_general.h +++ b/cockatrice/src/game_graphics/board/counter_general.h @@ -9,6 +9,12 @@ #include "abstract_counter.h" +#include + +class CounterState; +class PlayerLogic; +class QGraphicsItem; + class GeneralCounter : public AbstractCounter { Q_OBJECT diff --git a/cockatrice/src/game_graphics/board/translate_counter_name.cpp b/cockatrice/src/game_graphics/board/translate_counter_name.cpp index 4f1c97657..3a2a5c7c8 100644 --- a/cockatrice/src/game_graphics/board/translate_counter_name.cpp +++ b/cockatrice/src/game_graphics/board/translate_counter_name.cpp @@ -1,5 +1,8 @@ #include "translate_counter_name.h" +#include +#include + const QMap TranslateCounterName::translated = { {"life", QT_TRANSLATE_NOOP("TranslateCounterName", "Life")}, {"w", QT_TRANSLATE_NOOP("TranslateCounterName", "White")}, diff --git a/cockatrice/src/game_graphics/board/translate_counter_name.h b/cockatrice/src/game_graphics/board/translate_counter_name.h index ba3a94fa5..e7e42e5fc 100644 --- a/cockatrice/src/game_graphics/board/translate_counter_name.h +++ b/cockatrice/src/game_graphics/board/translate_counter_name.h @@ -7,8 +7,10 @@ #ifndef TRANSLATECOUNTERNAME_H #define TRANSLATECOUNTERNAME_H +#include +#include +#include #include -#include class TranslateCounterName { diff --git a/cockatrice/src/game_graphics/deckview/deck_view.cpp b/cockatrice/src/game_graphics/deckview/deck_view.cpp index 1acd02a75..c86bc9925 100644 --- a/cockatrice/src/game_graphics/deckview/deck_view.cpp +++ b/cockatrice/src/game_graphics/deckview/deck_view.cpp @@ -2,15 +2,47 @@ #include "../../client/settings/cache_settings.h" #include "../../interface/theme_manager.h" +#include "../board/abstract_card_drag_item.h" +#include "../card_dimensions.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "libcockatrice/protocol/pb/move_card_to_zone.pb.h" #include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include #include #include +#include +#include +#include +#include + +class QObject; +class QRectF; +class QWidget; +struct CardRef; DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, diff --git a/cockatrice/src/game_graphics/deckview/deck_view.h b/cockatrice/src/game_graphics/deckview/deck_view.h index f996fd4da..3b5b4b6f4 100644 --- a/cockatrice/src/game_graphics/deckview/deck_view.h +++ b/cockatrice/src/game_graphics/deckview/deck_view.h @@ -8,17 +8,30 @@ #define DECKVIEW_H #include "../board/abstract_card_drag_item.h" +#include "../board/abstract_card_item.h" +#include "../board/graphics_item_type.h" +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include class DeckList; -class InnerDecklistNode; -class CardInfo; class DeckViewCardContainer; class DeckViewCardDragItem; -class MoveCardToZone; +class QObject; +class QWidget; +struct CardRef; class DeckViewCard : public AbstractCardItem { diff --git a/cockatrice/src/game_graphics/deckview/deck_view_container.cpp b/cockatrice/src/game_graphics/deckview/deck_view_container.cpp index bc07ac183..c97767ec7 100644 --- a/cockatrice/src/game_graphics/deckview/deck_view_container.cpp +++ b/cockatrice/src/game_graphics/deckview/deck_view_container.cpp @@ -2,18 +2,36 @@ #include "../../client/settings/cache_settings.h" #include "../../client/settings/shortcuts_settings.h" +#include "../../game/abstract_game.h" +#include "../../game/game_event_handler.h" +#include "../../game/game_state.h" #include "../../interface/card_picture_loader/card_picture_loader.h" +#include "../../interface/deck_loader/deck_file_format.h" #include "../../interface/deck_loader/deck_loader.h" +#include "../../interface/deck_loader/loaded_deck.h" #include "../../interface/widgets/dialogs/dlg_load_deck.h" #include "../../interface/widgets/dialogs/dlg_load_deck_from_clipboard.h" #include "../../interface/widgets/dialogs/dlg_load_deck_from_website.h" #include "../../interface/widgets/dialogs/dlg_load_remote_deck.h" #include "../../interface/widgets/tabs/tab_game.h" #include "../../interface/widgets/visual_deck_storage/visual_deck_storage_widget.h" +#include "../board/abstract_card_item.h" #include "deck_view.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/protocol/pb/move_card_to_zone.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/utility/card_ref.h" +#include +#include #include -#include +#include +#include +#include +#include #include #include #include @@ -26,6 +44,9 @@ #include #include #include +#include +#include +#include ToggleButton::ToggleButton(QWidget *parent) : QPushButton(parent), state(false) { diff --git a/cockatrice/src/game_graphics/deckview/deck_view_container.h b/cockatrice/src/game_graphics/deckview/deck_view_container.h index b5317c39a..80b82b6e5 100644 --- a/cockatrice/src/game_graphics/deckview/deck_view_container.h +++ b/cockatrice/src/game_graphics/deckview/deck_view_container.h @@ -7,14 +7,17 @@ #ifndef DECK_VIEW_CONTAINER_H #define DECK_VIEW_CONTAINER_H -#include "../../interface/deck_loader/deck_loader.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/utility/playmat_params.h" #include +#include +#include +#include class QVBoxLayout; class AbstractCardItem; class VisualDeckStorageWidget; -class DeckPreviewWidget; class Response; class TabGame; class DeckView; diff --git a/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.cpp b/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.cpp index 2ffb214f7..90cbed9a1 100644 --- a/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.cpp +++ b/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.cpp @@ -1,7 +1,15 @@ #include "tabbed_deck_view_container.h" -#include "../../interface/widgets/tabs/tab_game.h" +#include "../board/abstract_card_item.h" #include "deck_view.h" +#include "deck_view_container.h" + +#include +#include +#include + +class DeckList; +class TabGame; TabbedDeckViewContainer::TabbedDeckViewContainer(int _playerId, TabGame *parent) : QTabWidget(nullptr), playerId(_playerId), parentGame(parent) diff --git a/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.h b/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.h index 7cfa8c9aa..7d73b78a2 100644 --- a/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.h +++ b/cockatrice/src/game_graphics/deckview/tabbed_deck_view_container.h @@ -6,9 +6,15 @@ #ifndef TABBED_DECK_VIEW_CONTAINER_H #define TABBED_DECK_VIEW_CONTAINER_H -#include "deck_view_container.h" - +#include +#include #include +#include + +class DeckList; +class DeckView; +class DeckViewContainer; +class TabGame; class TabbedDeckViewContainer : public QTabWidget { diff --git a/cockatrice/src/game_graphics/dialogs/dlg_create_token.cpp b/cockatrice/src/game_graphics/dialogs/dlg_create_token.cpp index 6d8ad0534..5ce050380 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_create_token.cpp +++ b/cockatrice/src/game_graphics/dialogs/dlg_create_token.cpp @@ -2,23 +2,30 @@ #include "../../client/settings/cache_settings.h" #include "../../interface/widgets/cards/card_info_picture_widget.h" -#include "../../main.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include +#include #include #include #include #include #include #include -#include #include +#include #include #include +#include #include +#include +#include #include +#include +#include #include #include -#include #include #include #include @@ -26,6 +33,10 @@ #include #include #include +#include + +class QModelIndex; +class QWidget; DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *parent) : QDialog(parent), predefinedTokens(_predefinedTokens) diff --git a/cockatrice/src/game_graphics/dialogs/dlg_create_token.h b/cockatrice/src/game_graphics/dialogs/dlg_create_token.h index 281e161fc..a03a1046b 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_create_token.h +++ b/cockatrice/src/game_graphics/dialogs/dlg_create_token.h @@ -8,19 +8,22 @@ #define DLG_CREATETOKEN_H #include +#include +#include +#include +#include class QLabel; class QLineEdit; class QComboBox; class QCheckBox; -class QPushButton; class QRadioButton; -class QCloseEvent; class QTreeView; -class DeckList; class CardDatabaseModel; class TokenDisplayModel; class CardInfoPictureWidget; +class QModelIndex; +class QWidget; struct TokenInfo { diff --git a/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.cpp b/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.cpp index 41c907163..b7cd73d79 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.cpp +++ b/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.cpp @@ -1,17 +1,24 @@ #include "dlg_move_top_cards_until.h" +#include "libcockatrice/card/card_info.h" + +#include +#include #include #include +#include #include -#include #include #include #include #include -#include +#include #include #include #include +#include + +class QWidget; DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, const MoveTopCardsUntilOptions &options) : QDialog(parent) { diff --git a/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.h b/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.h index ac9d41a94..b9080bcc1 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.h +++ b/cockatrice/src/game_graphics/dialogs/dlg_move_top_cards_until.h @@ -7,14 +7,19 @@ #ifndef DLG_MOVE_TOP_CARDS_UNTIL_H #define DLG_MOVE_TOP_CARDS_UNTIL_H -#include -#include #include -#include -#include -#include +#include +#include +#include +#include class FilterString; +class QCheckBox; +class QComboBox; +class QDialogButtonBox; +class QLabel; +class QSpinBox; +class QWidget; struct MoveTopCardsUntilOptions { diff --git a/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.cpp b/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.cpp index 4f5d5b861..b17881211 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.cpp +++ b/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.cpp @@ -1,12 +1,15 @@ #include "dlg_roll_dice.h" #include +#include #include #include +#include #include -#include #include +class QWidget; + DlgRollDice::DlgRollDice(QWidget *parent) : QDialog(parent) { numberOfSidesLabel = new QLabel(tr("Number of sides:")); diff --git a/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.h b/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.h index 15f7dc1ba..4c146a054 100644 --- a/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.h +++ b/cockatrice/src/game_graphics/dialogs/dlg_roll_dice.h @@ -8,9 +8,13 @@ #define DLG_ROLL_DICE_H #include -#include -#include -#include +#include +#include + +class QDialogButtonBox; +class QLabel; +class QSpinBox; +class QWidget; class DlgRollDice : public QDialog { diff --git a/cockatrice/src/game_graphics/game_scene.cpp b/cockatrice/src/game_graphics/game_scene.cpp index e4466f95d..cc3f9f1d3 100644 --- a/cockatrice/src/game_graphics/game_scene.cpp +++ b/cockatrice/src/game_graphics/game_scene.cpp @@ -2,25 +2,50 @@ #include "../client/settings/cache_settings.h" #include "../game/abstract_game.h" +#include "../game/arrow_registry.h" +#include "../game/board/arrow_data.h" #include "../game/player/player_actions.h" +#include "../game/player/player_event_handler.h" +#include "../game/player/player_info.h" #include "../game/player/player_logic.h" -#include "../game_graphics/player/player_graphics_item.h" +#include "../game/zones/card_zone_logic.h" +#include "../game/zones/view_zone_logic.h" +#include "animated_item.h" +#include "board/abstract_card_item.h" +#include "board/arrow_item.h" #include "board/card_item.h" #include "phases_toolbar.h" #include "player/menu/player_menu.h" #include "player/player_graphics_item.h" +#include "player/player_target.h" +#include "zones/card_zone.h" #include "zones/select_zone.h" #include "zones/view_zone.h" #include "zones/view_zone_widget.h" #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include #include +#include + +class ArrowTarget; /** * @brief Constructs the GameScene. diff --git a/cockatrice/src/game_graphics/game_scene.h b/cockatrice/src/game_graphics/game_scene.h index cf81eec9d..c7cae1e76 100644 --- a/cockatrice/src/game_graphics/game_scene.h +++ b/cockatrice/src/game_graphics/game_scene.h @@ -2,16 +2,33 @@ #define GAMESCENE_H #include "../game/arrow_registry.h" -#include "../game/board/arrow_data.h" -#include "../game/zones/card_zone_logic.h" -#include "animated_item.h" -#include "board/arrow_item.h" #include #include #include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include + +// IWYU pragma: keep +// ServerInfo_Card appears inside QList<...> in signal and slot +// signatures, which the moc-generated code needs to be complete. +#include + +class CardZoneLogic; +class IAnimatedItem; +class QGraphicsItem; +class QPoint; +struct ArrowData; +template class QSharedPointer; inline Q_LOGGING_CATEGORY(GameSceneLog, "game_scene"); inline Q_LOGGING_CATEGORY(GameScenePlayerAdditionRemovalLog, "game_scene.player_addition_removal"); diff --git a/cockatrice/src/game_graphics/game_view.cpp b/cockatrice/src/game_graphics/game_view.cpp index ed6355157..1c92d74ae 100644 --- a/cockatrice/src/game_graphics/game_view.cpp +++ b/cockatrice/src/game_graphics/game_view.cpp @@ -5,13 +5,24 @@ #include "game_scene.h" #include +#include +#include +#include +#include #include #include -#include +#include +#include +#include #include #include +#include +#include +#include +#include #include #include +#include // QRubberBand calls raise() in showEvent() and changeEvent() to stay on top of siblings. // This subclass disables that behavior so dragCountLabel can appear above it. diff --git a/cockatrice/src/game_graphics/game_view.h b/cockatrice/src/game_graphics/game_view.h index a23655513..e57267734 100644 --- a/cockatrice/src/game_graphics/game_view.h +++ b/cockatrice/src/game_graphics/game_view.h @@ -10,11 +10,19 @@ #include "tally/tally.h" #include +#include +#include +#include +#include +#include +#include class GameScene; class QGridLayout; class QLabel; class QRubberBand; +class QAction; +class QWidget; class GameView : public QGraphicsView { diff --git a/cockatrice/src/game_graphics/hand_counter.cpp b/cockatrice/src/game_graphics/hand_counter.cpp index 8dcbcfdaa..9320c1295 100644 --- a/cockatrice/src/game_graphics/hand_counter.cpp +++ b/cockatrice/src/game_graphics/hand_counter.cpp @@ -1,11 +1,22 @@ #include "hand_counter.h" +#include "../game/board/card_list.h" +#include "../game/zones/card_zone_logic.h" #include "../interface/pixel_map_generator.h" -#include "zones/card_zone.h" #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include + +class QGraphicsItem; HandCounter::HandCounter(QGraphicsItem *parent) : AbstractGraphicsItem(parent), number(0) { diff --git a/cockatrice/src/game_graphics/hand_counter.h b/cockatrice/src/game_graphics/hand_counter.h index 9aa65d514..c1f5d09d8 100644 --- a/cockatrice/src/game_graphics/hand_counter.h +++ b/cockatrice/src/game_graphics/hand_counter.h @@ -10,10 +10,10 @@ #include "board/abstract_graphics_item.h" #include "board/graphics_item_type.h" -#include +#include -class QPainter; -class QPixmap; +class QGraphicsItem; +class QPoint; class HandCounter : public AbstractGraphicsItem { diff --git a/cockatrice/src/game_graphics/log/message_log_widget.cpp b/cockatrice/src/game_graphics/log/message_log_widget.cpp index b998a3650..4a9750fca 100644 --- a/cockatrice/src/game_graphics/log/message_log_widget.cpp +++ b/cockatrice/src/game_graphics/log/message_log_widget.cpp @@ -3,20 +3,39 @@ #include "../../client/settings/cache_settings.h" #include "../../client/settings/card_counter_settings.h" #include "../../client/sound_engine.h" +#include "../../client/translation.h" +#include "../../game/abstract_game.h" +#include "../../game/board/card_list.h" #include "../../game/game_state.h" #include "../../game/phase.h" +#include "../../game/player/player_event_handler.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/player/player_manager.h" +#include "../../game/zones/card_zone_logic.h" #include "../../interface/card_localization.h" -#include "../../interface/widgets/tabs/tab_game.h" +#include "../../interface/widgets/server/chat_view/chat_view.h" #include "../board/card_item.h" #include "../board/translate_counter_name.h" +#include "libcockatrice/protocol/pb/game_event_context.pb.h" +#include +#include +#include +#include +#include #include #include #include #include +#include +#include #include +class QWidget; +class ServerInfo_User; +class TabSupervisor; + static QString sanitizeHtml(QString dirty) { return dirty.replace("&", "&").replace("<", "<").replace(">", ">").replace("\"", """); diff --git a/cockatrice/src/game_graphics/log/message_log_widget.h b/cockatrice/src/game_graphics/log/message_log_widget.h index 375c6df4d..6800ba8ed 100644 --- a/cockatrice/src/game_graphics/log/message_log_widget.h +++ b/cockatrice/src/game_graphics/log/message_log_widget.h @@ -7,14 +7,23 @@ #ifndef MESSAGELOGWIDGET_H #define MESSAGELOGWIDGET_H -#include "../../game/zones/card_zone_logic.h" #include "../../interface/widgets/server/chat_view/chat_view.h" +#include +#include +#include +#include + class AbstractGame; class CardItem; class GameEventContext; class PlayerLogic; class PlayerEventHandler; +class CardZoneLogic; +class QWidget; +class ServerInfo_User; +class TabSupervisor; +template class QList; class MessageLogWidget : public ChatView { diff --git a/cockatrice/src/game_graphics/phases_toolbar.cpp b/cockatrice/src/game_graphics/phases_toolbar.cpp index 3361f9d55..d0a3f74fd 100644 --- a/cockatrice/src/game_graphics/phases_toolbar.cpp +++ b/cockatrice/src/game_graphics/phases_toolbar.cpp @@ -1,17 +1,26 @@ #include "phases_toolbar.h" #include "../interface/pixel_map_generator.h" +#include "board/abstract_graphics_item.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" #include -#include +#include #include -#include +#include +#include +#include #include +#include +#include +#include #include #include #include #include #include +#include +#include PhaseButton::PhaseButton(const QString &_name, QGraphicsItem *parent, QAction *_doubleClickAction, bool _highlightable) : QObject(), QGraphicsItem(parent), name(_name), active(false), highlightable(_highlightable), diff --git a/cockatrice/src/game_graphics/phases_toolbar.h b/cockatrice/src/game_graphics/phases_toolbar.h index 39884ef75..376775284 100644 --- a/cockatrice/src/game_graphics/phases_toolbar.h +++ b/cockatrice/src/game_graphics/phases_toolbar.h @@ -8,11 +8,14 @@ #ifndef PHASESTOOLBAR_H #define PHASESTOOLBAR_H -#include "board/abstract_graphics_item.h" - -#include -#include +#include #include +#include +#include +#include + +class QAction; +class QTimer; namespace google { @@ -21,8 +24,6 @@ namespace protobuf class Message; } } // namespace google -class PlayerLogic; -class GameCommand; class PhaseButton : public QObject, public QGraphicsItem { diff --git a/cockatrice/src/game_graphics/player/menu/card_menu.cpp b/cockatrice/src/game_graphics/player/menu/card_menu.cpp index 75ca1b28b..137ec2ed1 100644 --- a/cockatrice/src/game_graphics/player/menu/card_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/card_menu.cpp @@ -1,21 +1,43 @@ #include "card_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/card_counter_settings.h" #include "../../../client/settings/shortcuts_settings.h" -#include "../../../interface/widgets/tabs/tab_game.h" +#include "../../../game/abstract_game.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_manager.h" +#include "../../../game/zones/card_zone_logic.h" #include "../../board/card_item.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../../game/zones/view_zone_logic.h" +#include "../../game_scene.h" #include "../card_menu_action_type.h" #include "../player_graphics_item.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/utility/card_ref.h" #include "move_menu.h" #include "pt_menu.h" +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include /** * @brief Creates a circular icon filled with the specified color. diff --git a/cockatrice/src/game_graphics/player/menu/card_menu.h b/cockatrice/src/game_graphics/player/menu/card_menu.h index d67ef3876..337d77b3e 100644 --- a/cockatrice/src/game_graphics/player/menu/card_menu.h +++ b/cockatrice/src/game_graphics/player/menu/card_menu.h @@ -7,12 +7,18 @@ #ifndef COCKATRICE_CARD_MENU_H #define COCKATRICE_CARD_MENU_H +#include #include -#include +#include +#include +#include class CardItem; class PlayerGraphicsItem; class PlayerLogic; +class QAction; +struct CardRef; + class CardMenu : public QMenu { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/custom_zone_menu.cpp b/cockatrice/src/game_graphics/player/menu/custom_zone_menu.cpp index 743746cc8..e16ebc112 100644 --- a/cockatrice/src/game_graphics/player/menu/custom_zone_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/custom_zone_menu.cpp @@ -1,8 +1,14 @@ #include "custom_zone_menu.h" +#include "../../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game_scene.h" #include "../player_graphics_item.h" +#include +#include +#include + CustomZoneMenu::CustomZoneMenu(PlayerGraphicsItem *_player) : player(_player) { menuAction()->setVisible(false); diff --git a/cockatrice/src/game_graphics/player/menu/custom_zone_menu.h b/cockatrice/src/game_graphics/player/menu/custom_zone_menu.h index 46dd58db6..07f5510ca 100644 --- a/cockatrice/src/game_graphics/player/menu/custom_zone_menu.h +++ b/cockatrice/src/game_graphics/player/menu/custom_zone_menu.h @@ -10,8 +10,11 @@ #include "abstract_player_component.h" #include +#include +#include class PlayerGraphicsItem; + class CustomZoneMenu : public QMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/grave_menu.cpp b/cockatrice/src/game_graphics/player/menu/grave_menu.cpp index 6d9364579..580d2642e 100644 --- a/cockatrice/src/game_graphics/player/menu/grave_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/grave_menu.cpp @@ -1,15 +1,28 @@ #include "grave_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_manager.h" +#include "../../../game/zones/pile_zone_logic.h" +#include "../../../interface/widgets/menus/tearoff_menu.h" #include "../../game/abstract_game.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" #include +#include +#include +#include #include +#include +#include +#include #include +class QWidget; + GraveyardMenu::GraveyardMenu(PlayerGraphicsItem *_player, QWidget *parent) : TearOffMenu(parent), player(_player) { createMoveActions(); diff --git a/cockatrice/src/game_graphics/player/menu/grave_menu.h b/cockatrice/src/game_graphics/player/menu/grave_menu.h index 116261e9b..fa285409f 100644 --- a/cockatrice/src/game_graphics/player/menu/grave_menu.h +++ b/cockatrice/src/game_graphics/player/menu/grave_menu.h @@ -10,10 +10,13 @@ #include "../../../interface/widgets/menus/tearoff_menu.h" #include "abstract_player_component.h" -#include -#include +#include class PlayerGraphicsItem; +class QAction; +class QMenu; +class QWidget; + class GraveyardMenu : public TearOffMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/hand_menu.cpp b/cockatrice/src/game_graphics/player/menu/hand_menu.cpp index ba0702f07..141542cb4 100644 --- a/cockatrice/src/game_graphics/player/menu/hand_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/hand_menu.cpp @@ -2,16 +2,28 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" -#include "../../../game_graphics/zones/hand_zone.h" +#include "../../../game/board/card_list.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_manager.h" +#include "../../../game/zones/hand_zone_logic.h" +#include "../../../interface/widgets/menus/tearoff_menu.h" #include "../../game/abstract_game.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" #include +#include +#include +#include #include +#include +#include +#include #include +class QWidget; + HandMenu::HandMenu(PlayerGraphicsItem *_player, QWidget *parent) : TearOffMenu(parent), player(_player) { auto *actions = player->getLogic()->getPlayerActions(); diff --git a/cockatrice/src/game_graphics/player/menu/hand_menu.h b/cockatrice/src/game_graphics/player/menu/hand_menu.h index d5204612b..de7726064 100644 --- a/cockatrice/src/game_graphics/player/menu/hand_menu.h +++ b/cockatrice/src/game_graphics/player/menu/hand_menu.h @@ -10,11 +10,12 @@ #include "../../../interface/widgets/menus/tearoff_menu.h" #include "abstract_player_component.h" -#include -#include +#include class PlayerGraphicsItem; -class PlayerActions; +class QAction; +class QMenu; +class QWidget; class HandMenu : public TearOffMenu, public AbstractPlayerComponent { diff --git a/cockatrice/src/game_graphics/player/menu/library_menu.cpp b/cockatrice/src/game_graphics/player/menu/library_menu.cpp index 4c15e09ec..aa389006e 100644 --- a/cockatrice/src/game_graphics/player/menu/library_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/library_menu.cpp @@ -2,15 +2,29 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" -#include "../../../interface/widgets/tabs/tab_game.h" +#include "../../../game/board/card_list.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_manager.h" +#include "../../../game/zones/pile_zone_logic.h" +#include "../../../interface/widgets/menus/tearoff_menu.h" #include "../../game/abstract_game.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include + +class QWidget; LibraryMenu::LibraryMenu(PlayerGraphicsItem *_player, QWidget *parent) : TearOffMenu(parent), player(_player) { diff --git a/cockatrice/src/game_graphics/player/menu/library_menu.h b/cockatrice/src/game_graphics/player/menu/library_menu.h index bc0e6fb8e..72e90d0ba 100644 --- a/cockatrice/src/game_graphics/player/menu/library_menu.h +++ b/cockatrice/src/game_graphics/player/menu/library_menu.h @@ -11,11 +11,11 @@ #include "abstract_player_component.h" #include -#include +#include class PlayerGraphicsItem; -class PlayerLogic; -class PlayerActions; +class QMenu; +class QWidget; class LibraryMenu : public TearOffMenu, public AbstractPlayerComponent { diff --git a/cockatrice/src/game_graphics/player/menu/move_menu.cpp b/cockatrice/src/game_graphics/player/menu/move_menu.cpp index 632e0ddda..2991100ec 100644 --- a/cockatrice/src/game_graphics/player/menu/move_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/move_menu.cpp @@ -1,11 +1,15 @@ #include "move_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" +#include "../../game_scene.h" #include "../card_menu_action_type.h" #include "../player_graphics_item.h" +#include + MoveMenu::MoveMenu(PlayerGraphicsItem *player) : QMenu(tr("Move to")) { aMoveToTopLibrary = new QAction(this); diff --git a/cockatrice/src/game_graphics/player/menu/move_menu.h b/cockatrice/src/game_graphics/player/menu/move_menu.h index 150bdbd3c..f1f239abd 100644 --- a/cockatrice/src/game_graphics/player/menu/move_menu.h +++ b/cockatrice/src/game_graphics/player/menu/move_menu.h @@ -7,8 +7,11 @@ #ifndef COCKATRICE_MOVE_MENU_H #define COCKATRICE_MOVE_MENU_H #include +#include class PlayerGraphicsItem; +class QAction; + class MoveMenu : public QMenu { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/player_menu.cpp b/cockatrice/src/game_graphics/player/menu/player_menu.cpp index 7c90211df..44b184cfe 100644 --- a/cockatrice/src/game_graphics/player/menu/player_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/player_menu.cpp @@ -1,16 +1,31 @@ #include "player_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../../game/abstract_game.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_logic.h" +#include "../../../game/player/player_manager.h" #include "../../../game_graphics/zones/hand_zone.h" #include "../../../game_graphics/zones/pile_zone.h" #include "../../../game_graphics/zones/table_zone.h" -#include "../../../interface/widgets/tabs/tab_game.h" +#include "../../../interface/widgets/menus/tearoff_menu.h" #include "../../board/card_item.h" #include "../player_graphics_item.h" +#include "abstract_player_component.h" #include "card_menu.h" +#include "custom_zone_menu.h" +#include "grave_menu.h" #include "hand_menu.h" +#include "library_menu.h" +#include "rfg_menu.h" +#include "say_menu.h" +#include "sideboard_menu.h" +#include "tally_menu.h" +#include "utility_menu.h" -#include +#include +#include PlayerMenu::PlayerMenu(PlayerGraphicsItem *_player) : QObject(_player), player(_player) { diff --git a/cockatrice/src/game_graphics/player/menu/player_menu.h b/cockatrice/src/game_graphics/player/menu/player_menu.h index a6e89fab0..97dd2fc56 100644 --- a/cockatrice/src/game_graphics/player/menu/player_menu.h +++ b/cockatrice/src/game_graphics/player/menu/player_menu.h @@ -8,24 +8,28 @@ #define COCKATRICE_PLAYER_MENU_H #include "../../../interface/widgets/menus/tearoff_menu.h" -#include "custom_zone_menu.h" -#include "grave_menu.h" -#include "hand_menu.h" -#include "library_menu.h" -#include "rfg_menu.h" -#include "say_menu.h" -#include "sideboard_menu.h" -#include "tally_menu.h" -#include "utility_menu.h" #include -#include #include -#include +#include +#include class CardItem; class CardMenu; class PlayerGraphicsItem; +class AbstractPlayerComponent; +class CustomZoneMenu; +class GraveyardMenu; +class HandMenu; +class LibraryMenu; +class QMenu; +class RfgMenu; +class SayMenu; +class SideboardMenu; +class TallyMenu; +class UtilityMenu; +struct CardRef; + class PlayerMenu : public QObject { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/pt_menu.cpp b/cockatrice/src/game_graphics/player/menu/pt_menu.cpp index 152461c18..b4f852b43 100644 --- a/cockatrice/src/game_graphics/player/menu/pt_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/pt_menu.cpp @@ -1,10 +1,14 @@ #include "pt_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" +#include "../../game_scene.h" #include "../player_graphics_item.h" +#include + PtMenu::PtMenu(PlayerGraphicsItem *player) : QMenu(tr("Power / toughness")) { PlayerActions *playerActions = player->getLogic()->getPlayerActions(); diff --git a/cockatrice/src/game_graphics/player/menu/pt_menu.h b/cockatrice/src/game_graphics/player/menu/pt_menu.h index 72f828801..aaf17cead 100644 --- a/cockatrice/src/game_graphics/player/menu/pt_menu.h +++ b/cockatrice/src/game_graphics/player/menu/pt_menu.h @@ -7,8 +7,11 @@ #ifndef COCKATRICE_PT_MENU_H #define COCKATRICE_PT_MENU_H #include +#include class PlayerGraphicsItem; +class QAction; + class PtMenu : public QMenu { diff --git a/cockatrice/src/game_graphics/player/menu/rfg_menu.cpp b/cockatrice/src/game_graphics/player/menu/rfg_menu.cpp index 45abadbf7..98514280f 100644 --- a/cockatrice/src/game_graphics/player/menu/rfg_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/rfg_menu.cpp @@ -1,11 +1,21 @@ #include "rfg_menu.h" +#include "../../../game/player/player_info.h" +#include "../../../game/zones/pile_zone_logic.h" +#include "../../../interface/widgets/menus/tearoff_menu.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" +#include +#include +#include +#include +#include #include +class QWidget; + RfgMenu::RfgMenu(PlayerGraphicsItem *_player, QWidget *parent) : TearOffMenu(parent), player(_player) { createMoveActions(); diff --git a/cockatrice/src/game_graphics/player/menu/rfg_menu.h b/cockatrice/src/game_graphics/player/menu/rfg_menu.h index f5dd888e4..8e1460316 100644 --- a/cockatrice/src/game_graphics/player/menu/rfg_menu.h +++ b/cockatrice/src/game_graphics/player/menu/rfg_menu.h @@ -10,10 +10,13 @@ #include "../../../interface/widgets/menus/tearoff_menu.h" #include "abstract_player_component.h" -#include -#include +#include class PlayerGraphicsItem; +class QAction; +class QMenu; +class QWidget; + class RfgMenu : public TearOffMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/say_menu.cpp b/cockatrice/src/game_graphics/player/menu/say_menu.cpp index e7b0b3826..d467c6469 100644 --- a/cockatrice/src/game_graphics/player/menu/say_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/say_menu.cpp @@ -5,7 +5,12 @@ #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" +#include +#include +#include +#include #include + SayMenu::SayMenu(PlayerGraphicsItem *_player) : player(_player) { connect(&SettingsCache::instance().messages(), &MessageSettings::messageMacrosChanged, this, &SayMenu::initSayMenu); diff --git a/cockatrice/src/game_graphics/player/menu/say_menu.h b/cockatrice/src/game_graphics/player/menu/say_menu.h index 3ff160d05..72169d18f 100644 --- a/cockatrice/src/game_graphics/player/menu/say_menu.h +++ b/cockatrice/src/game_graphics/player/menu/say_menu.h @@ -10,8 +10,10 @@ #include "abstract_player_component.h" #include +#include class PlayerGraphicsItem; + class SayMenu : public QMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/sideboard_menu.cpp b/cockatrice/src/game_graphics/player/menu/sideboard_menu.cpp index 6753f743e..1eef3604f 100644 --- a/cockatrice/src/game_graphics/player/menu/sideboard_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/sideboard_menu.cpp @@ -1,10 +1,15 @@ #include "sideboard_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../../game/player/player_info.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" #include "../player_graphics_item.h" +#include +#include + SideboardMenu::SideboardMenu(PlayerGraphicsItem *player, QMenu *playerMenu) : QMenu(playerMenu) { aViewSideboard = new QAction(this); diff --git a/cockatrice/src/game_graphics/player/menu/sideboard_menu.h b/cockatrice/src/game_graphics/player/menu/sideboard_menu.h index b3b547291..3e6501c90 100644 --- a/cockatrice/src/game_graphics/player/menu/sideboard_menu.h +++ b/cockatrice/src/game_graphics/player/menu/sideboard_menu.h @@ -10,8 +10,11 @@ #include "abstract_player_component.h" #include +#include class PlayerGraphicsItem; +class QAction; + class SideboardMenu : public QMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/menu/tally_menu.cpp b/cockatrice/src/game_graphics/player/menu/tally_menu.cpp index 08cb6cac9..7ae5b36ce 100644 --- a/cockatrice/src/game_graphics/player/menu/tally_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/tally_menu.cpp @@ -1,7 +1,10 @@ #include "tally_menu.h" #include "../../../client/settings/cache_settings.h" +#include "../../tally/tally.h" +#include "libcockatrice/settings/interface_settings.h" +#include #include TallyMenu::TallyMenu() diff --git a/cockatrice/src/game_graphics/player/menu/tally_menu.h b/cockatrice/src/game_graphics/player/menu/tally_menu.h index 11802fd20..75bd41ac0 100644 --- a/cockatrice/src/game_graphics/player/menu/tally_menu.h +++ b/cockatrice/src/game_graphics/player/menu/tally_menu.h @@ -2,10 +2,13 @@ #define COCKATRICE_TALLY_MENU_H #include "../../../interface/widgets/menus/tearoff_menu.h" -#include "../../tally/tally.h" #include "abstract_player_component.h" -#include +#include + +class QAction; +class QActionGroup; +enum class TallyType; class TallyMenu : public TearOffMenu, public AbstractPlayerComponent { diff --git a/cockatrice/src/game_graphics/player/menu/utility_menu.cpp b/cockatrice/src/game_graphics/player/menu/utility_menu.cpp index a7ea38d9a..7c18b3f4c 100644 --- a/cockatrice/src/game_graphics/player/menu/utility_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/utility_menu.cpp @@ -1,12 +1,17 @@ #include "utility_menu.h" +#include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" -#include "../../../interface/deck_loader/deck_loader.h" +#include "../../../game/player/player_info.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" +#include "../../game_scene.h" #include "../player_graphics_item.h" -#include "player_menu.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/deck_list/deck_list.h" +#include +#include #include #include diff --git a/cockatrice/src/game_graphics/player/menu/utility_menu.h b/cockatrice/src/game_graphics/player/menu/utility_menu.h index bdc2a81a5..009e4aca3 100644 --- a/cockatrice/src/game_graphics/player/menu/utility_menu.h +++ b/cockatrice/src/game_graphics/player/menu/utility_menu.h @@ -9,10 +9,16 @@ #include "abstract_player_component.h" +#include +#include #include +#include +#include #include +#include class PlayerGraphicsItem; + class UtilityMenu : public QMenu, public AbstractPlayerComponent { Q_OBJECT diff --git a/cockatrice/src/game_graphics/player/player_area.cpp b/cockatrice/src/game_graphics/player/player_area.cpp index 86b8c2d1b..2af642eb5 100644 --- a/cockatrice/src/game_graphics/player/player_area.cpp +++ b/cockatrice/src/game_graphics/player/player_area.cpp @@ -2,6 +2,7 @@ #include "../../interface/theme_manager.h" +#include #include PlayerArea::PlayerArea(QGraphicsItem *parentItem) : QObject(), QGraphicsItem(parentItem) diff --git a/cockatrice/src/game_graphics/player/player_area.h b/cockatrice/src/game_graphics/player/player_area.h index d73547f81..7370a78be 100644 --- a/cockatrice/src/game_graphics/player/player_area.h +++ b/cockatrice/src/game_graphics/player/player_area.h @@ -8,7 +8,14 @@ #define COCKATRICE_PLAYER_AREA_H #include "../board/graphics_item_type.h" -#include "QGraphicsItem" + +#include +#include +#include +#include +#include + +class QGraphicsItem; /** * The entire graphical area belonging to a single player. diff --git a/cockatrice/src/game_graphics/player/player_dialogs.cpp b/cockatrice/src/game_graphics/player/player_dialogs.cpp index 95c225812..74f5de601 100644 --- a/cockatrice/src/game_graphics/player/player_dialogs.cpp +++ b/cockatrice/src/game_graphics/player/player_dialogs.cpp @@ -1,12 +1,21 @@ #include "player_dialogs.h" +#include "../../client/settings/cache_settings.h" #include "../../client/settings/card_counter_settings.h" +#include "../../game/player/player_actions.h" +#include "../../game/player/player_logic.h" #include "../../interface/widgets/utility/get_text_with_max.h" +#include "../board/abstract_counter.h" #include "../board/card_item.h" +#include "../dialogs/dlg_create_token.h" +#include "../dialogs/dlg_move_top_cards_until.h" #include "../dialogs/dlg_roll_dice.h" +#include "../game_scene.h" #include "../player/player_graphics_item.h" +#include #include +#include #include #include diff --git a/cockatrice/src/game_graphics/player/player_dialogs.h b/cockatrice/src/game_graphics/player/player_dialogs.h index f87704f2d..86d7282a2 100644 --- a/cockatrice/src/game_graphics/player/player_dialogs.h +++ b/cockatrice/src/game_graphics/player/player_dialogs.h @@ -1,12 +1,26 @@ #ifndef COCKATRICE_PLAYER_DIALOGS_H #define COCKATRICE_PLAYER_DIALOGS_H -#include "../../game/player/player_actions.h" #include "player_graphics_item.h" -#include -#include +// IWYU pragma: keep +// MoveTopCardsUntilOptions is passed by value to a slot, so the moc-generated +// code needs the complete type. +#include "../dialogs/dlg_move_top_cards_until.h" + +#include +#include +#include +#include +#include +#include +#include + +class CardItem; +class CardRelation; +class PlayerActions; +class QWidget; +struct MoveTopCardsUntilOptions; -class PlayerGraphicsItem; class PlayerDialogs : public QObject { diff --git a/cockatrice/src/game_graphics/player/player_graphics_item.cpp b/cockatrice/src/game_graphics/player/player_graphics_item.cpp index 122ab83be..419816087 100644 --- a/cockatrice/src/game_graphics/player/player_graphics_item.cpp +++ b/cockatrice/src/game_graphics/player/player_graphics_item.cpp @@ -1,26 +1,53 @@ #include "player_graphics_item.h" +#include "../../client/settings/cache_settings.h" +#include "../../game/board/counter_state.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" +#include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" +#include "../../game/zones/hand_zone_logic.h" +#include "../../game/zones/pile_zone_logic.h" +#include "../../game/zones/stack_zone_logic.h" +#include "../../game/zones/table_zone_logic.h" #include "../../interface/card_picture_loader/card_picture_loader.h" #include "../../interface/widgets/cards/art_crop_attribution.h" #include "../../interface/widgets/cards/card_art_utils.h" #include "../../interface/widgets/playmat/playmat_utils.h" -#include "../../interface/widgets/tabs/tab_game.h" -#include "../board/abstract_card_item.h" +#include "../board/abstract_counter.h" #include "../board/counter_general.h" +#include "../card_dimensions.h" #include "../hand_counter.h" #include "../zones/hand_zone.h" #include "../zones/pile_zone.h" #include "../zones/stack_zone.h" #include "../zones/table_zone.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/utility/card_ref.h" #include "menu/player_menu.h" +#include "player_area.h" #include "player_dialogs.h" +#include "player_target.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include PlayerGraphicsItem::PlayerGraphicsItem(PlayerLogic *_player) : player(_player) { diff --git a/cockatrice/src/game_graphics/player/player_graphics_item.h b/cockatrice/src/game_graphics/player/player_graphics_item.h index e5ae59a61..e1ca0a036 100644 --- a/cockatrice/src/game_graphics/player/player_graphics_item.h +++ b/cockatrice/src/game_graphics/player/player_graphics_item.h @@ -6,12 +6,20 @@ #ifndef COCKATRICE_PLAYER_GRAPHICS_ITEM_H #define COCKATRICE_PLAYER_GRAPHICS_ITEM_H -#include "../../game/player/player_logic.h" -#include "../board/abstract_counter.h" +#include "../board/graphics_item_type.h" #include "../game_scene.h" +#include "libcockatrice/utility/playmat_params.h" #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include class HandZone; class PileZone; @@ -20,7 +28,12 @@ class PlayerMenu; class PlayerTarget; class StackZone; class TableZone; -class ZoneViewZone; +class AbstractCounter; +class CardZone; +class CounterState; +class PlayerArea; +class PlayerLogic; +struct CardRef; class PlayerGraphicsItem : public QGraphicsObject { diff --git a/cockatrice/src/game_graphics/player/player_list_widget.cpp b/cockatrice/src/game_graphics/player/player_list_widget.cpp index a7ec2e4a9..7b358010f 100644 --- a/cockatrice/src/game_graphics/player/player_list_widget.cpp +++ b/cockatrice/src/game_graphics/player/player_list_widget.cpp @@ -2,16 +2,30 @@ #include "../../interface/pixel_map_generator.h" #include "../../interface/widgets/server/user/user_context_menu.h" -#include "../../interface/widgets/server/user/user_list_manager.h" -#include "../../interface/widgets/server/user/user_list_widget.h" -#include "../../interface/widgets/tabs/tab_game.h" -#include "../../interface/widgets/tabs/tab_supervisor.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "user_level.h" -#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include -#include +#include + +class QModelIndex; +class QObject; +class QPoint; +class QWidget; PlayerListItemDelegate::PlayerListItemDelegate(QObject *const parent) : QStyledItemDelegate(parent) { diff --git a/cockatrice/src/game_graphics/player/player_list_widget.h b/cockatrice/src/game_graphics/player/player_list_widget.h index f2f0be5fd..b070fe312 100644 --- a/cockatrice/src/game_graphics/player/player_list_widget.h +++ b/cockatrice/src/game_graphics/player/player_list_widget.h @@ -7,18 +7,23 @@ #ifndef PLAYERLISTWIDGET_H #define PLAYERLISTWIDGET_H -#include "../../game/player/player_logic.h" - #include #include +#include #include #include +#include +#include class ServerInfo_PlayerProperties; class TabSupervisor; class AbstractClient; class AbstractGame; class UserContextMenu; +class QModelIndex; +class QObject; +class QPoint; +class QWidget; class PlayerListItemDelegate : public QStyledItemDelegate { diff --git a/cockatrice/src/game_graphics/player/player_target.cpp b/cockatrice/src/game_graphics/player/player_target.cpp index d6c28370d..24734cd42 100644 --- a/cockatrice/src/game_graphics/player/player_target.cpp +++ b/cockatrice/src/game_graphics/player/player_target.cpp @@ -1,16 +1,43 @@ #include "player_target.h" #include "../../client/settings/cache_settings.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" #include "../../interface/pixel_map_generator.h" +#include "../board/abstract_counter.h" +#include "../board/abstract_graphics_item.h" +#include "../board/arrow_target.h" #include "../game_scene.h" +#include "libcockatrice/settings/interface_settings.h" +#include "user_level.h" -#include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include + +class CounterState; +class QGraphicsItem; PlayerCounter::PlayerCounter(CounterState *state, PlayerLogic *player, QGraphicsItem *parent) : AbstractCounter(state, player, false, false, parent) diff --git a/cockatrice/src/game_graphics/player/player_target.h b/cockatrice/src/game_graphics/player/player_target.h index 1d06c6274..7780104d2 100644 --- a/cockatrice/src/game_graphics/player/player_target.h +++ b/cockatrice/src/game_graphics/player/player_target.h @@ -14,8 +14,12 @@ #include #include +#include +#include class PlayerLogic; +class CounterState; +class QGraphicsItem; class PlayerCounter : public AbstractCounter, public IAnimatedItem { diff --git a/cockatrice/src/game_graphics/tally/stats_tally.cpp b/cockatrice/src/game_graphics/tally/stats_tally.cpp index 7e05c3fb1..28e280c02 100644 --- a/cockatrice/src/game_graphics/tally/stats_tally.cpp +++ b/cockatrice/src/game_graphics/tally/stats_tally.cpp @@ -4,6 +4,11 @@ #include #include +#include +#include +#include +#include +#include #include static int sumPowers(const QList &cards) diff --git a/cockatrice/src/game_graphics/tally/stats_tally.h b/cockatrice/src/game_graphics/tally/stats_tally.h index e499587eb..cb0bdf81b 100644 --- a/cockatrice/src/game_graphics/tally/stats_tally.h +++ b/cockatrice/src/game_graphics/tally/stats_tally.h @@ -2,6 +2,10 @@ #define COCKATRICE_STATS_TALLY_H #include "tally.h" +#include + +class CardItem; + /** * @brief Extracts and tallies stats from selected cards. */ diff --git a/cockatrice/src/game_graphics/tally/subtype_tally.cpp b/cockatrice/src/game_graphics/tally/subtype_tally.cpp index 2241eb3b2..ccd727405 100644 --- a/cockatrice/src/game_graphics/tally/subtype_tally.cpp +++ b/cockatrice/src/game_graphics/tally/subtype_tally.cpp @@ -1,9 +1,18 @@ #include "subtype_tally.h" #include "../board/card_item.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" #include +#include +#include +#include +#include #include +#include +#include +#include namespace { diff --git a/cockatrice/src/game_graphics/tally/subtype_tally.h b/cockatrice/src/game_graphics/tally/subtype_tally.h index 9926528e0..019a797d4 100644 --- a/cockatrice/src/game_graphics/tally/subtype_tally.h +++ b/cockatrice/src/game_graphics/tally/subtype_tally.h @@ -4,7 +4,6 @@ #include "tally.h" #include -#include class CardItem; diff --git a/cockatrice/src/game_graphics/tally/tally.h b/cockatrice/src/game_graphics/tally/tally.h index 84c54918f..5699758e7 100644 --- a/cockatrice/src/game_graphics/tally/tally.h +++ b/cockatrice/src/game_graphics/tally/tally.h @@ -1,5 +1,6 @@ #ifndef COCKATRICE_TALLY_H #define COCKATRICE_TALLY_H +#include #include class CardItem; diff --git a/cockatrice/src/game_graphics/zones/card_zone.cpp b/cockatrice/src/game_graphics/zones/card_zone.cpp index 3457b681e..d09bb588c 100644 --- a/cockatrice/src/game_graphics/zones/card_zone.cpp +++ b/cockatrice/src/game_graphics/zones/card_zone.cpp @@ -1,10 +1,18 @@ #include "card_zone.h" +#include "../../game/board/card_list.h" +#include "../../game/zones/card_zone_logic.h" +#include "../board/abstract_graphics_item.h" #include "../board/card_item.h" -#include "view_zone.h" +#include #include #include +#include + +class QGraphicsItem; +class QPoint; +class QPointF; CardZone::CardZone(CardZoneLogic *_logic, QGraphicsItem *parent) : AbstractGraphicsItem(parent), menu(nullptr), doubleClickAction(0), logic(_logic) @@ -40,7 +48,7 @@ void CardZone::mouseDoubleClickEvent(QGraphicsSceneMouseEvent * /*event*/) bool CardZone::showContextMenu(const QPoint &screenPos) { if (menu) { - menu->exec(screenPos); + menu->popup(screenPos); return true; } return false; diff --git a/cockatrice/src/game_graphics/zones/card_zone.h b/cockatrice/src/game_graphics/zones/card_zone.h index 4cef6ca80..def3eee14 100644 --- a/cockatrice/src/game_graphics/zones/card_zone.h +++ b/cockatrice/src/game_graphics/zones/card_zone.h @@ -7,12 +7,21 @@ #ifndef CARDZONE_H #define CARDZONE_H -#include "../../game/zones/card_zone_logic.h" #include "../board/abstract_graphics_item.h" #include "../board/graphics_item_type.h" #include -#include +#include +#include + +class CardDragItem; +class CardItem; +class CardZoneLogic; +class QAction; +class QGraphicsItem; +class QMenu; +class QPoint; +template class QList; inline Q_LOGGING_CATEGORY(CardZoneLog, "card_zone"); diff --git a/cockatrice/src/game_graphics/zones/hand_zone.cpp b/cockatrice/src/game_graphics/zones/hand_zone.cpp index 1a8f7a910..3e527c081 100644 --- a/cockatrice/src/game_graphics/zones/hand_zone.cpp +++ b/cockatrice/src/game_graphics/zones/hand_zone.cpp @@ -2,14 +2,27 @@ #include "../../client/settings/cache_settings.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" +#include "../../game/zones/hand_zone_logic.h" #include "../../interface/theme_manager.h" #include "../board/card_drag_item.h" #include "../board/card_item.h" +#include "../card_dimensions.h" +#include +#include #include +#include +#include +#include +#include #include #include +#include + +class QGraphicsItem; HandZone::HandZone(HandZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent) : SelectZone(_logic, parent), zoneHeight(_zoneHeight) diff --git a/cockatrice/src/game_graphics/zones/hand_zone.h b/cockatrice/src/game_graphics/zones/hand_zone.h index c3f3f252b..5c91d684d 100644 --- a/cockatrice/src/game_graphics/zones/hand_zone.h +++ b/cockatrice/src/game_graphics/zones/hand_zone.h @@ -7,9 +7,16 @@ #ifndef HANDZONE_H #define HANDZONE_H -#include "../../game/zones/hand_zone_logic.h" +#include "../../game/board/card_list.h" #include "select_zone.h" +#include +#include + +class HandZoneLogic; +class QGraphicsItem; +template class QList; + class HandZone : public SelectZone { Q_OBJECT diff --git a/cockatrice/src/game_graphics/zones/pile_zone.cpp b/cockatrice/src/game_graphics/zones/pile_zone.cpp index abdf262f4..77a87a4af 100644 --- a/cockatrice/src/game_graphics/zones/pile_zone.cpp +++ b/cockatrice/src/game_graphics/zones/pile_zone.cpp @@ -1,18 +1,33 @@ #include "pile_zone.h" #include "../../client/settings/cache_settings.h" +#include "../../game/board/card_list.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" #include "../../game/zones/pile_zone_logic.h" #include "../board/card_drag_item.h" #include "../board/card_item.h" -#include "view_zone.h" +#include "../card_dimensions.h" #include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include PileZone::PileZone(PileZoneLogic *_logic, QGraphicsItem *parent) : CardZone(_logic, parent) { diff --git a/cockatrice/src/game_graphics/zones/pile_zone.h b/cockatrice/src/game_graphics/zones/pile_zone.h index 099bc6f60..b2d8d0cd2 100644 --- a/cockatrice/src/game_graphics/zones/pile_zone.h +++ b/cockatrice/src/game_graphics/zones/pile_zone.h @@ -7,9 +7,13 @@ #ifndef PILEZONE_H #define PILEZONE_H -#include "../../game/zones/pile_zone_logic.h" #include "card_zone.h" +#include + +class PileZoneLogic; +class QGraphicsItem; + /** * A CardZone where the cards are in a single pile instead of being laid out. * Usually only top card is accessible by clicking. diff --git a/cockatrice/src/game_graphics/zones/select_zone.cpp b/cockatrice/src/game_graphics/zones/select_zone.cpp index 470c70fcf..d69ec32f5 100644 --- a/cockatrice/src/game_graphics/zones/select_zone.cpp +++ b/cockatrice/src/game_graphics/zones/select_zone.cpp @@ -1,13 +1,25 @@ #include "select_zone.h" #include "../../client/settings/cache_settings.h" +#include "../../game/board/card_list.h" +#include "../../game/zones/card_zone_logic.h" #include "../board/card_item.h" #include "../game_scene.h" +#include +#include #include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include static qreal stackingOffset(qreal cardHeight) { diff --git a/cockatrice/src/game_graphics/zones/select_zone.h b/cockatrice/src/game_graphics/zones/select_zone.h index b5d3ca37a..8a56949e3 100644 --- a/cockatrice/src/game_graphics/zones/select_zone.h +++ b/cockatrice/src/game_graphics/zones/select_zone.h @@ -9,10 +9,16 @@ #include "card_zone.h" +#include #include +#include #include +#include class QGraphicsRectItem; +class CardItem; +class CardZoneLogic; +class QGraphicsItem; /** * A CardZone where the cards are laid out, with each card directly interactable by clicking. diff --git a/cockatrice/src/game_graphics/zones/stack_zone.cpp b/cockatrice/src/game_graphics/zones/stack_zone.cpp index ff62097c7..de1ff8ba9 100644 --- a/cockatrice/src/game_graphics/zones/stack_zone.cpp +++ b/cockatrice/src/game_graphics/zones/stack_zone.cpp @@ -1,15 +1,27 @@ #include "stack_zone.h" +#include "../../game/board/card_list.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" #include "../../game/zones/stack_zone_logic.h" #include "../../interface/theme_manager.h" #include "../board/card_drag_item.h" #include "../board/card_item.h" #include "../card_dimensions.h" +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include StackZone::StackZone(StackZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent) : SelectZone(_logic, parent), zoneHeight(_zoneHeight) diff --git a/cockatrice/src/game_graphics/zones/stack_zone.h b/cockatrice/src/game_graphics/zones/stack_zone.h index 96b3f96a6..5dea481b6 100644 --- a/cockatrice/src/game_graphics/zones/stack_zone.h +++ b/cockatrice/src/game_graphics/zones/stack_zone.h @@ -7,9 +7,14 @@ #ifndef STACKZONE_H #define STACKZONE_H -#include "../../game/zones/stack_zone_logic.h" #include "select_zone.h" +#include +#include + +class QGraphicsItem; +class StackZoneLogic; + class StackZone : public SelectZone { Q_OBJECT diff --git a/cockatrice/src/game_graphics/zones/table_zone.cpp b/cockatrice/src/game_graphics/zones/table_zone.cpp index 88e9abe6c..b704b79e0 100644 --- a/cockatrice/src/game_graphics/zones/table_zone.cpp +++ b/cockatrice/src/game_graphics/zones/table_zone.cpp @@ -1,23 +1,50 @@ #include "table_zone.h" #include "../../client/settings/cache_settings.h" +#include "../../game/board/card_list.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" #include "../../game/zones/table_zone_logic.h" #include "../../interface/theme_manager.h" -#include "../board/arrow_item.h" +#include "../board/abstract_card_item.h" #include "../board/card_drag_item.h" #include "../board/card_item.h" #include "../game_scene.h" #include "../z_values.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include + +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100); const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80); diff --git a/cockatrice/src/game_graphics/zones/table_zone.h b/cockatrice/src/game_graphics/zones/table_zone.h index 92915a2ed..ccd1d8e81 100644 --- a/cockatrice/src/game_graphics/zones/table_zone.h +++ b/cockatrice/src/game_graphics/zones/table_zone.h @@ -7,12 +7,26 @@ #ifndef TABLEZONE_H #define TABLEZONE_H -#include "../../game/zones/table_zone_logic.h" #include "../animated_item.h" -#include "../board/abstract_card_item.h" +#include "../card_dimensions.h" #include "select_zone.h" #include +#include +#include +#include +#include +#include +#include + +class CardDragItem; +class CardItem; +class CardZoneLogic; +class QColor; +class QGraphicsItem; +class QPainter; +class TableZoneLogic; +template class QList; /** * @brief TableZone is the grid based rect where CardItems may be placed. diff --git a/cockatrice/src/game_graphics/zones/view_zone.cpp b/cockatrice/src/game_graphics/zones/view_zone.cpp index 5bd5d262f..a2aa124dc 100644 --- a/cockatrice/src/game_graphics/zones/view_zone.cpp +++ b/cockatrice/src/game_graphics/zones/view_zone.cpp @@ -2,16 +2,29 @@ #include "../../client/settings/cache_settings.h" #include "../../game/player/player_actions.h" +#include "../../game/player/player_info.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" #include "../../game/zones/view_zone_logic.h" #include "../board/card_drag_item.h" #include "../board/card_item.h" +#include "../card_dimensions.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/filters/filter_string.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_zone.pb.h" +#include "libcockatrice/utility/card_ref.h" #include +#include #include -#include +#include +#include #include +#include +#include #include +#include #include #include #include @@ -19,6 +32,9 @@ #include #include #include +#include + +class QGraphicsItem; /** * @param parent the parent QGraphicsWidget containing the reveal zone diff --git a/cockatrice/src/game_graphics/zones/view_zone.h b/cockatrice/src/game_graphics/zones/view_zone.h index 9dfa00ce2..4032da760 100644 --- a/cockatrice/src/game_graphics/zones/view_zone.h +++ b/cockatrice/src/game_graphics/zones/view_zone.h @@ -7,17 +7,29 @@ #ifndef ZONEVIEWERZONE_H #define ZONEVIEWERZONE_H -#include "../../game/zones/view_zone_logic.h" +#include "../../game/board/card_list.h" #include "select_zone.h" #include +#include #include +#include +#include +#include #include -#include +#include +#include + +// IWYU pragma: keep +// ServerInfo_Card appears inside QList<...> in signal and slot +// signatures, which the moc-generated code needs to be complete. +#include + +class QGraphicsItem; +class ZoneViewZoneLogic; inline Q_LOGGING_CATEGORY(ViewZoneLog, "view_zone"); -class ZoneViewWidget; class Response; class ServerInfo_Card; class QGraphicsSceneWheelEvent; diff --git a/cockatrice/src/game_graphics/zones/view_zone_widget.cpp b/cockatrice/src/game_graphics/zones/view_zone_widget.cpp index fa6733413..49d9955e0 100644 --- a/cockatrice/src/game_graphics/zones/view_zone_widget.cpp +++ b/cockatrice/src/game_graphics/zones/view_zone_widget.cpp @@ -1,32 +1,63 @@ #include "view_zone_widget.h" #include "../../client/settings/cache_settings.h" +#include "../../client/translation.h" #include "../../filters/syntax_help.h" +#include "../../game/board/card_list.h" #include "../../game/player/player_actions.h" #include "../../game/player/player_logic.h" +#include "../../game/zones/card_zone_logic.h" +#include "../../game/zones/view_zone_logic.h" #include "../../interface/pixel_map_generator.h" -#include "../board/card_item.h" -#include "../game_scene.h" +#include "../card_dimensions.h" #include "../z_values.h" +#include "libcockatrice/utility/macros.h" #include "view_zone.h" +#include #include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #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 { -constexpr qreal kTitleBarHeight = 24.0; +qreal titleBarHeight(QWidget *styleWidget) +{ + if (styleWidget) { + return static_cast(styleWidget->style()->pixelMetric(QStyle::PM_TitleBarHeight, nullptr, styleWidget)); + } + return 24.0; +} constexpr qreal kMinVisibleWidth = 100.0; } // namespace @@ -290,7 +321,8 @@ QRectF ZoneViewWidget::closeButtonRect(QWidget *styleWidget) const // query the style for the close button position (handles macOS top-left placement) // Title bar rect MUST be local (0,0-based) for QStyle - const QRect titleBarRect(0, 0, static_cast(frameRectF.width()), static_cast(kTitleBarHeight)); + const qreal tbh = titleBarHeight(styleWidget); + const QRect titleBarRect(0, 0, static_cast(frameRectF.width()), static_cast(tbh)); if (styleWidget) { QStyleOptionTitleBar opt; @@ -319,7 +351,7 @@ QRectF ZoneViewWidget::closeButtonRect(QWidget *styleWidget) const } // Fallback: frame-relative top-right - return QRectF(frameRectF.right() - kTitleBarHeight, frameRectF.top(), kTitleBarHeight, kTitleBarHeight); + return QRectF(frameRectF.right() - tbh, frameRectF.top(), tbh, tbh); } QGraphicsView *ZoneViewWidget::findDragView(QWidget *eventWidget) const @@ -443,8 +475,9 @@ QVariant ZoneViewWidget::itemChange(GraphicsItemChange change, const QVariant &v const qreal minX = sceneRect.left(); const qreal maxX = qMax(minX, sceneRect.right() - kMinVisibleWidth); - const qreal minY = sceneRect.top() + kTitleBarHeight; - const qreal maxY = qMax(minY, sceneRect.bottom() - kTitleBarHeight); + const qreal tbh = titleBarHeight(nullptr); + const qreal minY = sceneRect.top() + tbh; + const qreal maxY = qMax(minY, sceneRect.bottom() - tbh); desiredPos.setX(qBound(minX, desiredPos.x(), maxX)); desiredPos.setY(qBound(minY, desiredPos.y(), maxY)); diff --git a/cockatrice/src/game_graphics/zones/view_zone_widget.h b/cockatrice/src/game_graphics/zones/view_zone_widget.h index de5ad28d5..9fe022b27 100644 --- a/cockatrice/src/game_graphics/zones/view_zone_widget.h +++ b/cockatrice/src/game_graphics/zones/view_zone_widget.h @@ -6,30 +6,34 @@ #ifndef ZONEVIEWWIDGET_H #define ZONEVIEWWIDGET_H -#include "../../game/zones/card_zone_logic.h" - #include #include #include #include #include +#include +#include +#include #include +#include +#include #include +#include + +// IWYU pragma: keep +// ServerInfo_Card appears inside QList<...> in signal and slot +// signatures, which the moc-generated code needs to be complete. +#include -class QLabel; -class QPushButton; -class CardZone; class ZoneViewZone; class PlayerLogic; -class CardDatabase; class QScrollBar; -class GameScene; class ServerInfo_Card; class QGraphicsSceneMouseEvent; class QGraphicsSceneWheelEvent; -class QStyleOption; class QGraphicsView; class QWidget; +class CardZoneLogic; class ScrollableGraphicsProxyWidget : public QGraphicsProxyWidget { diff --git a/cockatrice/src/interface/card_database_update/card_database_update_status_bar.cpp b/cockatrice/src/interface/card_database_update/card_database_update_status_bar.cpp new file mode 100644 index 000000000..721fdd6c8 --- /dev/null +++ b/cockatrice/src/interface/card_database_update/card_database_update_status_bar.cpp @@ -0,0 +1,117 @@ +#include "card_database_update_status_bar.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace +{ +/** + * @brief Translated name of one updater stage. + * @param fallback shown when the stage is unknown or not reported yet + */ +QString stageName(CardUpdateStage stage, const QString &fallback) +{ + switch (stage) { + case CardUpdateStage::Download: + return QCoreApplication::translate("CardDatabaseUpdateStatusBar", "Downloading"); + case CardUpdateStage::Scan: + return QCoreApplication::translate("CardDatabaseUpdateStatusBar", "Parsing"); + case CardUpdateStage::Import: + return QCoreApplication::translate("CardDatabaseUpdateStatusBar", "Importing"); + case CardUpdateStage::Unknown: + return fallback; + } + return fallback; +} +} // namespace + +CardDatabaseUpdateStatusBar::CardDatabaseUpdateStatusBar(QWidget *parent) : QWidget(parent) +{ + layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + + stageLabel = new QLabel(this); + progressBar = new QProgressBar(this); + progressBar->setMinimumWidth(120); + + layout->addWidget(stageLabel); + layout->addWidget(progressBar); + + setLayout(layout); + refresh(); + hide(); +} + +QString CardDatabaseUpdateStatusBar::statusText() const +{ + if (!active) { + return {}; + } + const QString name = stageName(progress.stage, tr("Updating the card database")); + if (progress.total <= 0) { + return name; + } + const int percent = static_cast((100.0 * progress.done) / progress.total); + return tr("%1 (%2%)").arg(name).arg(percent); +} + +void CardDatabaseUpdateStatusBar::updateStarted() +{ + active = true; + progress = {}; + refresh(); + show(); +} + +void CardDatabaseUpdateStatusBar::updateProgress(const CardUpdateProgress &progress) +{ + active = true; + this->progress = progress; + refresh(); +} + +void CardDatabaseUpdateStatusBar::updateFinished() +{ + active = false; + progress = {}; + refresh(); + hide(); +} + +void CardDatabaseUpdateStatusBar::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) { + refresh(); + } + QWidget::changeEvent(event); +} + +void CardDatabaseUpdateStatusBar::refresh() +{ + const QString name = stageName(progress.stage, tr("Updating the card database")); + stageLabel->setText(name); + + const qint64 cappedTotal = qMin(progress.total, INT_MAX); + const qint64 cappedDone = qMin(progress.done, INT_MAX); + const int minimum = 0; + const int maximum = static_cast(cappedTotal); + if (progressBar->minimum() != minimum || progressBar->maximum() != maximum) { + // A zero range is the busy indicator, used until the first report arrives. + progressBar->setRange(minimum, maximum); + } + progressBar->setValue(static_cast(cappedDone)); + + if (active && progress.total > 0) { + const int percent = static_cast((100.0 * progress.done) / progress.total); + setToolTip(tr("Card database update in progress: %1 (%2%)").arg(name).arg(percent)); + } else if (active) { + setToolTip(tr("Card database update in progress.")); + } else { + setToolTip({}); + } +} diff --git a/cockatrice/src/interface/card_database_update/card_database_update_status_bar.h b/cockatrice/src/interface/card_database_update/card_database_update_status_bar.h new file mode 100644 index 000000000..6db3bd225 --- /dev/null +++ b/cockatrice/src/interface/card_database_update/card_database_update_status_bar.h @@ -0,0 +1,68 @@ +#ifndef CARD_DATABASE_UPDATE_STATUS_BAR_H +#define CARD_DATABASE_UPDATE_STATUS_BAR_H + +#include "card_update_progress.h" + +#include +#include +#include + +class QEvent; +class QHBoxLayout; +class QLabel; +class QProgressBar; + +/** + * @class CardDatabaseUpdateStatusBar + * @brief Status bar widget showing what the card database updater (Oracle) is doing. + * + * The updater runs as a separate process, so this widget is the in-client view of + * its progress: it appears when an update starts, tracks the download/scan/import + * stages reported by the updater, and disappears when the update finishes. + */ +class CardDatabaseUpdateStatusBar : public QWidget +{ + Q_OBJECT +public: + /** + * @brief Constructs a hidden progress widget. + * @param parent Parent widget + */ + explicit CardDatabaseUpdateStatusBar(QWidget *parent = nullptr); + + /** + * @brief Human readable description of the running stage, e.g. "Downloading (42%)". + * @return the description, or an empty string when no update is running + */ + QString statusText() const; + +public slots: + /** + * @brief Shows the widget and resets it to the indeterminate state. + */ + void updateStarted(); + + /** + * @brief Shows the progress of one update stage. + */ + void updateProgress(const CardUpdateProgress &progress); + + /** + * @brief Hides the widget and clears the reported progress. + */ + void updateFinished(); + +protected: + void changeEvent(QEvent *event) override; + +private: + void refresh(); + + QHBoxLayout *layout; ///< Horizontal layout holding the stage label and the progress bar + QLabel *stageLabel; ///< Name of the stage currently running + QProgressBar *progressBar; ///< Progress within the current stage + CardUpdateProgress progress; ///< Last reported progress + bool active = false; ///< Whether an update is currently running +}; + +#endif // CARD_DATABASE_UPDATE_STATUS_BAR_H diff --git a/cockatrice/src/interface/card_database_update/card_update_progress.cpp b/cockatrice/src/interface/card_database_update/card_update_progress.cpp new file mode 100644 index 000000000..1f8e500d0 --- /dev/null +++ b/cockatrice/src/interface/card_database_update/card_update_progress.cpp @@ -0,0 +1,59 @@ +#include "card_update_progress.h" + +#include + +namespace +{ +CardUpdateStage parseStage(const QByteArray &token) +{ + if (token == "download") { + return CardUpdateStage::Download; + } + if (token == "scan") { + return CardUpdateStage::Scan; + } + if (token == "import") { + return CardUpdateStage::Import; + } + return CardUpdateStage::Unknown; +} +} // namespace + +std::optional CardUpdateProgress::fromProtocolLine(const QByteArray &line) +{ + const QByteArray trimmed = line.trimmed(); + if (!trimmed.startsWith("PROGRESS ")) { + return std::nullopt; + } + const QList parts = trimmed.split(' '); + if (parts.size() != 4) { + return std::nullopt; + } + bool doneOk = false; + bool totalOk = false; + const qint64 done = parts.at(2).toLongLong(&doneOk); + const qint64 total = parts.at(3).toLongLong(&totalOk); + if (!doneOk || !totalOk || done < 0 || total < 0) { + return std::nullopt; + } + CardUpdateProgress progress; + progress.stage = parseStage(parts.at(1)); + progress.done = done; + progress.total = total; + return progress; +} + +QString CardUpdateProgress::stageToken() const +{ + switch (stage) { + case CardUpdateStage::Download: + return QStringLiteral("download"); + case CardUpdateStage::Scan: + return QStringLiteral("scan"); + case CardUpdateStage::Import: + return QStringLiteral("import"); + case CardUpdateStage::Unknown: + return QStringLiteral("unknown"); + } + return QStringLiteral("unknown"); +} diff --git a/cockatrice/src/interface/card_database_update/card_update_progress.h b/cockatrice/src/interface/card_database_update/card_update_progress.h new file mode 100644 index 000000000..743f32209 --- /dev/null +++ b/cockatrice/src/interface/card_database_update/card_update_progress.h @@ -0,0 +1,42 @@ +#ifndef CARD_UPDATE_PROGRESS_H +#define CARD_UPDATE_PROGRESS_H + +#include +#include +#include +#include + +/** + * @brief One stage of the card database updater's progress protocol. + */ +enum class CardUpdateStage +{ + Download, ///< downloading the source data + Scan, ///< parsing the downloaded data + Import, ///< importing cards into the database + Unknown, ///< a stage the client does not recognize +}; + +/** + * @brief One progress line read from the card database updater's stdout. + */ +struct CardUpdateProgress +{ + /** + * @brief Parses one line of the updater stdout protocol: "PROGRESS ". + * @param line a single stdout line, with or without its trailing newline + * @return the parsed progress, or @c std::nullopt when the line is not a valid progress line + */ + static std::optional fromProtocolLine(const QByteArray &line); + + /** + * @brief Protocol token of the stage ("download", "scan", "import" or "unknown"), for logging. + */ + QString stageToken() const; + + CardUpdateStage stage = CardUpdateStage::Unknown; + qint64 done = 0; + qint64 total = 0; +}; + +#endif // CARD_UPDATE_PROGRESS_H diff --git a/cockatrice/src/interface/card_localization.h b/cockatrice/src/interface/card_localization.h index 1a1e7be5d..39cbd7700 100644 --- a/cockatrice/src/interface/card_localization.h +++ b/cockatrice/src/interface/card_localization.h @@ -6,6 +6,7 @@ #include #include #include +#include #include namespace CardLocalization diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp index 8e34942e1..4f77c7096 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader.cpp @@ -4,27 +4,45 @@ #include "../pixel_map_generator.h" #include "card_picture_loader_cache_method.h" #include "card_picture_loader_local_schemes.h" +#include "card_picture_loader_status_bar.h" +#include "card_picture_loader_worker.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" #include -#include +#include +#include +#include #include #include +#include #include +#include +#include +#include #include +#include #include -#include -#include -#include +#include +#include #include #include +#include +#include #include +#include +#include #include -#include +#include +#include +#include #include #include #include #include -#include +#include // never cache more than 300 cards at once for a single deck #define CACHED_CARD_PER_DECK_MAX 300 diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader.h index 6224befbf..c6d91570b 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader.h @@ -1,12 +1,20 @@ #ifndef CARD_PICTURE_LOADER_H #define CARD_PICTURE_LOADER_H -#include "card_picture_loader_status_bar.h" -#include "card_picture_loader_worker.h" - -#include #include #include +#include +#include + +class CardPictureLoaderStatusBar; +class CardPictureLoaderWorker; +class ExactCard; +class QDateTime; +class QImage; +class QPixmap; +class QSize; +class QString; +template class QList; inline Q_LOGGING_CATEGORY(CardPictureLoaderLog, "card_picture_loader"); inline Q_LOGGING_CATEGORY(CardPictureLoaderCardBackCacheFailLog, "card_picture_loader.card_back_cache_fail"); diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp index 12165e8f3..1437e23f4 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp @@ -2,11 +2,21 @@ #include "../../client/settings/cache_settings.h" #include "card_picture_loader_local_schemes.h" -#include "card_picture_to_load.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include static constexpr int REFRESH_INTERVAL_MS = 10 * 1000; diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h index 44163d1db..009897acc 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.h @@ -1,8 +1,15 @@ #ifndef PICTURE_LOADER_LOCAL_H #define PICTURE_LOADER_LOCAL_H -#include -#include +#include +#include +#include +#include +#include +#include + +class ExactCard; +class QTimer; inline Q_LOGGING_CATEGORY(CardPictureLoaderLocalLog, "card_picture_loader.local"); diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp index d1895af06..98364e3cb 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp @@ -1,5 +1,11 @@ #include "card_picture_loader_request_status_display_widget.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" + +#include +#include + CardPictureLoaderRequestStatusDisplayWidget::CardPictureLoaderRequestStatusDisplayWidget(QWidget *parent, const QUrl &_url, const ExactCard &card, diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h index c9a272b68..58051cc1e 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.h @@ -1,11 +1,16 @@ #ifndef PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H #define PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H -#include +#include #include -#include +#include +#include #include -#include +#include + +class ExactCard; +class QHBoxLayout; +class QUrl; /** * @class CardPictureLoaderRequestStatusDisplayWidget diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.cpp index 9e7e645bd..3b26c8033 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.cpp @@ -1,7 +1,19 @@ #include "card_picture_loader_status_bar.h" +#include "../widgets/quick_settings/settings_button_widget.h" +#include "../widgets/quick_settings/settings_popup_widget.h" #include "card_picture_loader_request_status_display_widget.h" +#include +#include +#include +#include +#include +#include +#include + +class ExactCard; + CardPictureLoaderStatusBar::CardPictureLoaderStatusBar(QWidget *parent) : QWidget(parent) { layout = new QHBoxLayout(this); diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h index 7f1f509db..2ba386c42 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_status_bar.h @@ -1,12 +1,16 @@ #ifndef PICTURE_LOADER_STATUS_BAR_H #define PICTURE_LOADER_STATUS_BAR_H -#include "../../interface/widgets/quick_settings/settings_button_widget.h" -#include "card_picture_loader_worker_work.h" - -#include -#include +#include #include +#include + +class ExactCard; +class QHBoxLayout; +class QProgressBar; +class QTimer; +class QUrl; +class SettingsButtonWidget; /** * @class CardPictureLoaderStatusBar diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp index 0fd6a42d5..150b4c544 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.cpp @@ -4,15 +4,34 @@ #include "card_picture_loader_cache_method.h" #include "card_picture_loader_local.h" #include "card_picture_loader_worker_work.h" +#include "card_picture_to_load.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/server_rate_limiter.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include #include #include diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.h index 8b136f309..4b42c6e59 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker.h @@ -1,21 +1,25 @@ #ifndef PICTURE_LOADER_WORKER_H #define PICTURE_LOADER_WORKER_H -#include "card_picture_loader_local.h" -#include "card_picture_loader_worker_work.h" -#include "card_picture_to_load.h" - -#include #include #include -#include -#include -#include #include +#include #include +#include +#include #include -#include -#include +#include +#include + +class CardPictureLoaderLocal; +class ExactCard; +class QDateTime; +class QImage; +class QNetworkAccessManager; +class QNetworkDiskCache; +class QNetworkReply; +class QThread; #define REDIRECT_HEADER_NAME "redirects" #define REDIRECT_ORIGINAL_URL "original" diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.cpp index 19c6be469..92524384a 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.cpp @@ -2,19 +2,35 @@ #include "../../client/settings/cache_settings.h" #include "card_picture_loader_worker.h" +#include "card_picture_to_load.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/server_rate_limiter.h" #include -#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include #include -#include -#include +#include +#include #include +#include +#include ServerRateLimiter CardPictureLoaderWorkerWork::s_rateLimiter; +#include #include +#include +#include // Card back returned by gatherer when card is not found static const QStringList MD5_BLACKLIST = { diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.h b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.h index 84a7dafdb..c3dbcc6e8 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_loader_worker_work.h @@ -1,19 +1,18 @@ #ifndef PICTURE_LOADER_WORKER_WORK_H #define PICTURE_LOADER_WORKER_WORK_H -#include "card_picture_loader_worker.h" #include "card_picture_to_load.h" -#include +#include #include -#include -#include #include -#include #include -#include -#include -#include +#include + +class ExactCard; +class QNetworkReply; +class QUrl; +class ServerRateLimiter; inline Q_LOGGING_CATEGORY(CardPictureLoaderWorkerWorkLog, "card_picture_loader.worker"); diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_to_load.cpp b/cockatrice/src/interface/card_picture_loader/card_picture_to_load.cpp index 4f933207e..e35c417c8 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_to_load.cpp +++ b/cockatrice/src/interface/card_picture_loader/card_picture_to_load.cpp @@ -1,12 +1,22 @@ #include "card_picture_to_load.h" #include "../../client/settings/cache_settings.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" -#include #include +#include +#include +#include #include +#include +#include +#include #include +#include #include +#include #include #include #include diff --git a/cockatrice/src/interface/card_picture_loader/card_picture_to_load.h b/cockatrice/src/interface/card_picture_loader/card_picture_to_load.h index 9e0e7449c..fe56dc4c6 100644 --- a/cockatrice/src/interface/card_picture_loader/card_picture_to_load.h +++ b/cockatrice/src/interface/card_picture_loader/card_picture_to_load.h @@ -1,6 +1,12 @@ #ifndef PICTURE_TO_LOAD_H #define PICTURE_TO_LOAD_H +#include "libcockatrice/card/card_info.h" + +#include +#include +#include +#include #include inline Q_LOGGING_CATEGORY(CardPictureToLoadLog, "card_picture_loader.picture_to_load"); diff --git a/cockatrice/src/interface/deck_loader/card_node_function.cpp b/cockatrice/src/interface/deck_loader/card_node_function.cpp index 9441fe428..8d59a6c15 100644 --- a/cockatrice/src/interface/deck_loader/card_node_function.cpp +++ b/cockatrice/src/interface/deck_loader/card_node_function.cpp @@ -1,5 +1,12 @@ #include "card_node_function.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" + +#include +#include +#include #include #include #include @@ -8,13 +15,14 @@ void CardNodeFunction::SetProviderIdToPreferred::operator()(const InnerDecklistN { Q_UNUSED(node); PrintingInfo preferredPrinting = CardDatabaseManager::query()->getPreferredPrinting(card->getName()); - QString providerId = preferredPrinting.getUuid(); - QString setShortName = preferredPrinting.getSet()->getShortName(); - QString collectorNumber = preferredPrinting.getProperty("num"); + CardSetPtr preferredSet = preferredPrinting.getSet(); + if (!preferredSet) { + return; + } - card->setCardProviderId(providerId); - card->setCardCollectorNumber(collectorNumber); - card->setCardSetShortName(setShortName); + card->setCardProviderId(preferredPrinting.getUuid()); + card->setCardCollectorNumber(preferredPrinting.getProperty("num")); + card->setCardSetShortName(preferredSet->getShortName()); } void CardNodeFunction::ClearPrintingData::operator()(const InnerDecklistNode *node, DecklistCardNode *card) const diff --git a/cockatrice/src/interface/deck_loader/deck_file_format.cpp b/cockatrice/src/interface/deck_loader/deck_file_format.cpp index 3c88cde4e..ba5a44e4c 100644 --- a/cockatrice/src/interface/deck_loader/deck_file_format.cpp +++ b/cockatrice/src/interface/deck_loader/deck_file_format.cpp @@ -1,5 +1,7 @@ #include "deck_file_format.h" +#include + DeckFileFormat::Format DeckFileFormat::getFormatFromName(const QString &fileName) { if (fileName.endsWith(".cod", Qt::CaseInsensitive)) { diff --git a/cockatrice/src/interface/deck_loader/deck_loader.cpp b/cockatrice/src/interface/deck_loader/deck_loader.cpp index f29b4eed2..d413a6c04 100644 --- a/cockatrice/src/interface/deck_loader/deck_loader.cpp +++ b/cockatrice/src/interface/deck_loader/deck_loader.cpp @@ -1,26 +1,51 @@ #include "deck_loader.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" + #include #include +#include #include #include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include +#include +#include #include #include +#include #include #include +#include +#include +#include #include -#include +#include #include #include #include #include +#include + +class QTextLength; const QStringList DeckLoader::ACCEPTED_FILE_EXTENSIONS = {"*.cod", "*.dec", "*.dek", "*.txt", "*.mwDeck"}; diff --git a/cockatrice/src/interface/deck_loader/deck_loader.h b/cockatrice/src/interface/deck_loader/deck_loader.h index be0df311d..16402b14b 100644 --- a/cockatrice/src/interface/deck_loader/deck_loader.h +++ b/cockatrice/src/interface/deck_loader/deck_loader.h @@ -7,13 +7,23 @@ #ifndef DECK_LOADER_H #define DECK_LOADER_H +#include "deck_file_format.h" #include "loaded_deck.h" #include -#include -#include -#include +#include +#include +#include #include +#include + +class DeckList; +class DecklistCardNode; +class InnerDecklistNode; +class QPrinter; +class QTextCursor; +class QTextStream; +template class QList; inline Q_LOGGING_CATEGORY(DeckLoaderLog, "deck_loader"); diff --git a/cockatrice/src/interface/intents/intent.h b/cockatrice/src/interface/intents/intent.h index 5d9fdd3d6..ad8d4b5af 100644 --- a/cockatrice/src/interface/intents/intent.h +++ b/cockatrice/src/interface/intents/intent.h @@ -2,6 +2,8 @@ #define COCKATRICE_INTENT_H #include +#include +#include class Intent : public QObject { diff --git a/cockatrice/src/interface/intents/intent_connect_to_server.cpp b/cockatrice/src/interface/intents/intent_connect_to_server.cpp index 1cccc5a23..42ddc97cc 100644 --- a/cockatrice/src/interface/intents/intent_connect_to_server.cpp +++ b/cockatrice/src/interface/intents/intent_connect_to_server.cpp @@ -1,8 +1,14 @@ #include "intent_connect_to_server.h" +#include "contexts/context_connect_to_server.h" #include "intent_disconnect_from_server.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "remote_client.h" #include +#include + +template class QList; IntentConnectToServer::IntentConnectToServer(RemoteClient *_remoteClient, ContextConnectToServer *_context) : Intent(), remoteClient(_remoteClient), context(_context) diff --git a/cockatrice/src/interface/intents/intent_connect_to_server.h b/cockatrice/src/interface/intents/intent_connect_to_server.h index eab4d1a21..50d7f088b 100644 --- a/cockatrice/src/interface/intents/intent_connect_to_server.h +++ b/cockatrice/src/interface/intents/intent_connect_to_server.h @@ -1,9 +1,14 @@ #ifndef COCKATRICE_INTENT_CONNECT_TO_SERVER_H #define COCKATRICE_INTENT_CONNECT_TO_SERVER_H -#include "contexts/context_connect_to_server.h" +#include "abstract_client.h" #include "intent.h" -#include "remote_client.h" + +#include +#include + +class RemoteClient; +struct ContextConnectToServer; class IntentConnectToServer : public Intent { diff --git a/cockatrice/src/interface/intents/intent_disconnect_from_server.cpp b/cockatrice/src/interface/intents/intent_disconnect_from_server.cpp index cb39d7bab..e865c4a2b 100644 --- a/cockatrice/src/interface/intents/intent_disconnect_from_server.cpp +++ b/cockatrice/src/interface/intents/intent_disconnect_from_server.cpp @@ -1,5 +1,7 @@ #include "intent_disconnect_from_server.h" +#include "remote_client.h" + IntentDisconnectFromServer::IntentDisconnectFromServer(RemoteClient *_remoteClient) : Intent(), remoteClient(_remoteClient) { diff --git a/cockatrice/src/interface/intents/intent_disconnect_from_server.h b/cockatrice/src/interface/intents/intent_disconnect_from_server.h index 6e1dfd0c1..5425e973b 100644 --- a/cockatrice/src/interface/intents/intent_disconnect_from_server.h +++ b/cockatrice/src/interface/intents/intent_disconnect_from_server.h @@ -1,8 +1,12 @@ #ifndef COCKATRICE_INTENT_DISCONNECT_FROM_SERVER_H #define COCKATRICE_INTENT_DISCONNECT_FROM_SERVER_H +#include "abstract_client.h" #include "intent.h" -#include "remote_client.h" + +#include + +class RemoteClient; class IntentDisconnectFromServer : public Intent { diff --git a/cockatrice/src/interface/intents/intent_join_server_game.cpp b/cockatrice/src/interface/intents/intent_join_server_game.cpp index b22b200ed..52e02b276 100644 --- a/cockatrice/src/interface/intents/intent_join_server_game.cpp +++ b/cockatrice/src/interface/intents/intent_join_server_game.cpp @@ -3,9 +3,17 @@ #include "../widgets/server/game_selector.h" #include "../widgets/tabs/tab_room.h" #include "../widgets/tabs/tab_supervisor.h" +#include "abstract_client.h" +#include "contexts/context_connect_to_server.h" +#include "contexts/context_join_room.h" #include "intent_join_server_room.h" +#include "remote_client.h" +#include +#include +#include #include +#include IntentJoinServerGame::IntentJoinServerGame(TabSupervisor *_tabSupervisor, RemoteClient *_remoteClient, diff --git a/cockatrice/src/interface/intents/intent_join_server_game.h b/cockatrice/src/interface/intents/intent_join_server_game.h index 5e196df38..5abb31fc5 100644 --- a/cockatrice/src/interface/intents/intent_join_server_game.h +++ b/cockatrice/src/interface/intents/intent_join_server_game.h @@ -3,13 +3,14 @@ #include "contexts/context_join_game.h" #include "intent.h" -#include "remote_client.h" #include #include +#include class TabRoom; class TabSupervisor; +class RemoteClient; class IntentJoinServerGame : public Intent { diff --git a/cockatrice/src/interface/intents/intent_join_server_room.cpp b/cockatrice/src/interface/intents/intent_join_server_room.cpp index d25bc8d17..24349cadf 100644 --- a/cockatrice/src/interface/intents/intent_join_server_room.cpp +++ b/cockatrice/src/interface/intents/intent_join_server_room.cpp @@ -3,8 +3,15 @@ #include "../widgets/tabs/tab_room.h" #include "../widgets/tabs/tab_server.h" #include "../widgets/tabs/tab_supervisor.h" +#include "abstract_client.h" +#include "contexts/context_connect_to_server.h" +#include "contexts/context_join_room.h" #include "intent_connect_to_server.h" +#include "remote_client.h" +#include +#include +#include #include #include diff --git a/cockatrice/src/interface/intents/intent_join_server_room.h b/cockatrice/src/interface/intents/intent_join_server_room.h index 4a5599896..b4febae7b 100644 --- a/cockatrice/src/interface/intents/intent_join_server_room.h +++ b/cockatrice/src/interface/intents/intent_join_server_room.h @@ -1,11 +1,13 @@ #ifndef COCKATRICE_INTENT_JOIN_SERVER_ROOM_H #define COCKATRICE_INTENT_JOIN_SERVER_ROOM_H -#include "contexts/context_join_room.h" #include "intent.h" -#include "remote_client.h" + +#include class TabSupervisor; +class RemoteClient; +struct ContextJoinRoom; class IntentJoinServerRoom : public Intent { diff --git a/cockatrice/src/interface/intents/intent_login.cpp b/cockatrice/src/interface/intents/intent_login.cpp index 7beb63e1d..0d8390015 100644 --- a/cockatrice/src/interface/intents/intent_login.cpp +++ b/cockatrice/src/interface/intents/intent_login.cpp @@ -2,9 +2,13 @@ #include "../../client/settings/cache_settings.h" #include "../widgets/dialogs/dlg_login_prompt.h" +#include "contexts/context_connect_to_server.h" #include "libcockatrice/settings/servers_settings.h" #include +#include +#include +#include IntentGetLoginCredentials::IntentGetLoginCredentials(ContextConnectToServer *_context, bool _promptForMissingCredentials) diff --git a/cockatrice/src/interface/intents/intent_login.h b/cockatrice/src/interface/intents/intent_login.h index 8ffd91a0a..a805f1d75 100644 --- a/cockatrice/src/interface/intents/intent_login.h +++ b/cockatrice/src/interface/intents/intent_login.h @@ -1,9 +1,12 @@ #ifndef COCKATRICE_INTENT_LOGIN_H #define COCKATRICE_INTENT_LOGIN_H -#include "contexts/context_connect_to_server.h" #include "intent.h" +#include + +struct ContextConnectToServer; + class IntentGetLoginCredentials : public Intent { Q_OBJECT diff --git a/cockatrice/src/interface/intents/intent_open_local_deck.cpp b/cockatrice/src/interface/intents/intent_open_local_deck.cpp index 2457bec72..5b673d106 100644 --- a/cockatrice/src/interface/intents/intent_open_local_deck.cpp +++ b/cockatrice/src/interface/intents/intent_open_local_deck.cpp @@ -2,10 +2,14 @@ #include "../deck_loader/deck_file_format.h" #include "../deck_loader/deck_loader.h" +#include "../deck_loader/loaded_deck.h" #include "../widgets/tabs/tab_supervisor.h" #include "intent_wait_for_database_load.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" #include +#include IntentOpenLocalDeck::IntentOpenLocalDeck(TabSupervisor *_tabSupervisor, const QString &_file) : Intent(), tabSupervisor(_tabSupervisor), file(_file) diff --git a/cockatrice/src/interface/intents/intent_open_local_deck.h b/cockatrice/src/interface/intents/intent_open_local_deck.h index 97f875e39..0338e9384 100644 --- a/cockatrice/src/interface/intents/intent_open_local_deck.h +++ b/cockatrice/src/interface/intents/intent_open_local_deck.h @@ -4,6 +4,7 @@ #include "intent.h" #include +#include class TabSupervisor; diff --git a/cockatrice/src/interface/intents/intent_open_server_room_by_name.cpp b/cockatrice/src/interface/intents/intent_open_server_room_by_name.cpp index d50f509a0..63aef004b 100644 --- a/cockatrice/src/interface/intents/intent_open_server_room_by_name.cpp +++ b/cockatrice/src/interface/intents/intent_open_server_room_by_name.cpp @@ -2,13 +2,22 @@ #include "../widgets/tabs/tab_room.h" #include "../widgets/tabs/tab_supervisor.h" +#include "contexts/context_connect_to_server.h" #include "intent_connect_to_server.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_room.pb.h" +#include "remote_client.h" +#include +#include #include #include #include #include +class CommandContainer; +class QVariant; + IntentOpenServerRoomByName::IntentOpenServerRoomByName(TabSupervisor *_tabSupervisor, RemoteClient *_remoteClient, std::unique_ptr _context, diff --git a/cockatrice/src/interface/intents/intent_open_server_room_by_name.h b/cockatrice/src/interface/intents/intent_open_server_room_by_name.h index 2f9e716af..e163796fc 100644 --- a/cockatrice/src/interface/intents/intent_open_server_room_by_name.h +++ b/cockatrice/src/interface/intents/intent_open_server_room_by_name.h @@ -1,19 +1,21 @@ #ifndef COCKATRICE_INTENT_OPEN_SERVER_ROOM_BY_NAME_H #define COCKATRICE_INTENT_OPEN_SERVER_ROOM_BY_NAME_H +#include "abstract_client.h" #include "contexts/context_join_room.h" #include "intent.h" -#include "remote_client.h" #include #include #include #include +#include -class TabRoom; class TabSupervisor; class Event_ListRooms; class ServerInfo_Room; +class RemoteClient; +class Response; /** * @brief Connects to the configured server and opens a room identified by its name. diff --git a/cockatrice/src/interface/intents/intent_open_shared_deck.cpp b/cockatrice/src/interface/intents/intent_open_shared_deck.cpp index 016de63e6..8abad3d88 100644 --- a/cockatrice/src/interface/intents/intent_open_shared_deck.cpp +++ b/cockatrice/src/interface/intents/intent_open_shared_deck.cpp @@ -3,11 +3,17 @@ #include "../deck_loader/deck_loader.h" #include "../widgets/dialogs/dlg_shared_decks_preview.h" #include "../widgets/tabs/tab_supervisor.h" +#include "abstract_client.h" +#include "contexts/context_connect_to_server.h" #include "intent_connect_to_server.h" +#include "remote_client.h" +#include #include +#include #include -#include +#include +#include #include #include #include @@ -15,6 +21,11 @@ #include #include #include +#include +#include +#include + +class CommandContainer; IntentOpenSharedDeck::IntentOpenSharedDeck(TabSupervisor *_tabSupervisor, RemoteClient *_remoteClient, diff --git a/cockatrice/src/interface/intents/intent_open_shared_deck.h b/cockatrice/src/interface/intents/intent_open_shared_deck.h index 87812bdea..afce2370f 100644 --- a/cockatrice/src/interface/intents/intent_open_shared_deck.h +++ b/cockatrice/src/interface/intents/intent_open_shared_deck.h @@ -1,20 +1,24 @@ #ifndef COCKATRICE_INTENT_OPEN_SHARED_DECK_H #define COCKATRICE_INTENT_OPEN_SHARED_DECK_H +#include "../deck_loader/loaded_deck.h" #include "contexts/context_open_deck.h" #include "intent.h" -#include "remote_client.h" #include #include #include +#include #include +#include class TabSupervisor; -struct LoadedDeck; class CardDatabaseQuerier; class DlgSharedDecksPreview; class QTimer; +class CommandContainer; +class RemoteClient; +class Response; class IntentOpenSharedDeck : public Intent { diff --git a/cockatrice/src/interface/intents/intent_wait_for_database_load.cpp b/cockatrice/src/interface/intents/intent_wait_for_database_load.cpp index c36378818..7a7da90a4 100644 --- a/cockatrice/src/interface/intents/intent_wait_for_database_load.cpp +++ b/cockatrice/src/interface/intents/intent_wait_for_database_load.cpp @@ -1,5 +1,8 @@ #include "intent_wait_for_database_load.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" + #include bool IntentWaitForDatabaseLoad::checkPrecondition() const diff --git a/cockatrice/src/interface/intents/intent_wait_for_database_load.h b/cockatrice/src/interface/intents/intent_wait_for_database_load.h index 72f4a1ffc..715918f04 100644 --- a/cockatrice/src/interface/intents/intent_wait_for_database_load.h +++ b/cockatrice/src/interface/intents/intent_wait_for_database_load.h @@ -3,6 +3,8 @@ #include "intent.h" +#include + class IntentWaitForDatabaseLoad : public Intent { Q_OBJECT diff --git a/cockatrice/src/interface/intents/url_parser.cpp b/cockatrice/src/interface/intents/url_parser.cpp index 707863354..966fd1213 100644 --- a/cockatrice/src/interface/intents/url_parser.cpp +++ b/cockatrice/src/interface/intents/url_parser.cpp @@ -4,22 +4,34 @@ #include "../widgets/tabs/tab_room.h" #include "../widgets/tabs/tab_supervisor.h" #include "../window_main.h" +#include "contexts/context_connect_to_server.h" #include "contexts/context_join_game.h" +#include "contexts/context_join_room.h" #include "contexts/context_open_deck.h" #include "intent.h" #include "intent_join_server_game.h" #include "intent_login.h" #include "intent_open_shared_deck.h" +#include "remote_client.h" #include #include +#include #include +#include +#include +#include #include #include +#include +#include #include #include #include #include +#include +#include +#include inline Q_LOGGING_CATEGORY(UrlParserLog, "url_parser"); diff --git a/cockatrice/src/interface/intents/url_parser.h b/cockatrice/src/interface/intents/url_parser.h index ea29fed53..9b8594275 100644 --- a/cockatrice/src/interface/intents/url_parser.h +++ b/cockatrice/src/interface/intents/url_parser.h @@ -2,8 +2,11 @@ #define COCKATRICE_URL_PARSER_H #include +#include #include +#include #include +#include class Intent; class MainWindow; diff --git a/cockatrice/src/interface/key_signals.cpp b/cockatrice/src/interface/key_signals.cpp index a78997cc2..4c3074139 100644 --- a/cockatrice/src/interface/key_signals.cpp +++ b/cockatrice/src/interface/key_signals.cpp @@ -1,6 +1,9 @@ #include "key_signals.h" +#include +#include #include +#include bool KeySignals::eventFilter(QObject * /*object*/, QEvent *event) { diff --git a/cockatrice/src/interface/key_signals.h b/cockatrice/src/interface/key_signals.h index 30dcee0ba..dbe147ad8 100644 --- a/cockatrice/src/interface/key_signals.h +++ b/cockatrice/src/interface/key_signals.h @@ -8,8 +8,8 @@ #ifndef KEYSIGNALS_H #define KEYSIGNALS_H -#include #include +#include class KeySignals : public QObject { diff --git a/cockatrice/src/interface/layouts/flow_layout.cpp b/cockatrice/src/interface/layouts/flow_layout.cpp index 0d03b7789..ba5e492e3 100644 --- a/cockatrice/src/interface/layouts/flow_layout.cpp +++ b/cockatrice/src/interface/layouts/flow_layout.cpp @@ -15,13 +15,18 @@ #include "flow_layout.h" -#include "../widgets/general/layout_containers/flow_widget.h" - #include #include -#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include FlowLayout::FlowLayout(QWidget *parent, const Qt::Orientation flowDirection, diff --git a/cockatrice/src/interface/layouts/flow_layout.h b/cockatrice/src/interface/layouts/flow_layout.h index 9adcd8bb5..a6e015e3e 100644 --- a/cockatrice/src/interface/layouts/flow_layout.h +++ b/cockatrice/src/interface/layouts/flow_layout.h @@ -12,8 +12,14 @@ #include #include #include +#include #include -#include +#include +#include +#include + +class QLayoutItem; +class QWidget; inline Q_LOGGING_CATEGORY(FlowLayoutLog, "flow_layout", QtInfoMsg); diff --git a/cockatrice/src/interface/layouts/overlap_layout.cpp b/cockatrice/src/interface/layouts/overlap_layout.cpp index a4c13518a..2b4da9138 100644 --- a/cockatrice/src/interface/layouts/overlap_layout.cpp +++ b/cockatrice/src/interface/layouts/overlap_layout.cpp @@ -1,7 +1,15 @@ #include "overlap_layout.h" #include +#include +#include +#include +#include +#include +#include +#include #include +#include /** * @class OverlapLayout diff --git a/cockatrice/src/interface/layouts/overlap_layout.h b/cockatrice/src/interface/layouts/overlap_layout.h index c1b6a8e51..32c74c18a 100644 --- a/cockatrice/src/interface/layouts/overlap_layout.h +++ b/cockatrice/src/interface/layouts/overlap_layout.h @@ -10,7 +10,11 @@ #include #include #include -#include +#include +#include + +class QLayoutItem; +class QWidget; inline Q_LOGGING_CATEGORY(OverlapLayoutLog, "overlap_layout"); diff --git a/cockatrice/src/interface/logger.cpp b/cockatrice/src/interface/logger.cpp index 3e00a0b24..87fdcbd8c 100644 --- a/cockatrice/src/interface/logger.cpp +++ b/cockatrice/src/interface/logger.cpp @@ -5,9 +5,16 @@ #include #include #include +#include +#include #include +#include +#include +#include #include #include +#include +#include #define LOGGER_MAX_ENTRIES 128 #define LOGGER_FILENAME "qdebug.txt" diff --git a/cockatrice/src/interface/logger.h b/cockatrice/src/interface/logger.h index fc6dd70be..2287da804 100644 --- a/cockatrice/src/interface/logger.h +++ b/cockatrice/src/interface/logger.h @@ -8,10 +8,15 @@ #define LOGGER_H #include +#include #include +#include #include #include -#include +#include +#include +#include +#include #if defined(Q_PROCESSOR_X86_32) #define BUILD_ARCHITECTURE "32-bit" diff --git a/cockatrice/src/interface/palette_editor/color_button.cpp b/cockatrice/src/interface/palette_editor/color_button.cpp index e1a490d20..a7db23d31 100644 --- a/cockatrice/src/interface/palette_editor/color_button.cpp +++ b/cockatrice/src/interface/palette_editor/color_button.cpp @@ -1,7 +1,19 @@ #include "color_button.h" +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include + +class QWidget; ColorButton::ColorButton(QWidget *parent) : QToolButton(parent) { diff --git a/cockatrice/src/interface/palette_editor/color_button.h b/cockatrice/src/interface/palette_editor/color_button.h index 4b139ef68..f9991ec6b 100644 --- a/cockatrice/src/interface/palette_editor/color_button.h +++ b/cockatrice/src/interface/palette_editor/color_button.h @@ -3,6 +3,9 @@ #include #include +#include + +class QWidget; class ColorButton : public QToolButton { diff --git a/cockatrice/src/interface/palette_editor/palette_editor_dialog.cpp b/cockatrice/src/interface/palette_editor/palette_editor_dialog.cpp index d5a168708..20e16614a 100644 --- a/cockatrice/src/interface/palette_editor/palette_editor_dialog.cpp +++ b/cockatrice/src/interface/palette_editor/palette_editor_dialog.cpp @@ -1,5 +1,6 @@ #include "palette_editor_dialog.h" +#include "../theme_config.h" #include "../theme_manager.h" #include "palette_generator.h" #include "palette_grid_widget.h" @@ -9,12 +10,22 @@ #include #include #include +#include #include #include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include +#include +#include PaletteEditorDialog::PaletteEditorDialog(const QString &_themeDirPath, const QString &_themeName, QWidget *parent) : QDialog(parent), themeDirPath(_themeDirPath), themeName(_themeName) diff --git a/cockatrice/src/interface/palette_editor/palette_editor_dialog.h b/cockatrice/src/interface/palette_editor/palette_editor_dialog.h index 953902c06..e29a70cb0 100644 --- a/cockatrice/src/interface/palette_editor/palette_editor_dialog.h +++ b/cockatrice/src/interface/palette_editor/palette_editor_dialog.h @@ -3,18 +3,21 @@ #include "../theme_config.h" +#include #include -#include #include +#include +#include class QTimer; - class QLabel; class QComboBox; class QDialogButtonBox; class QPushButton; class PaletteGridWidget; class QuickSetupPanel; +class QFrame; +class QWidget; class PaletteEditorDialog : public QDialog { diff --git a/cockatrice/src/interface/palette_editor/palette_generator.cpp b/cockatrice/src/interface/palette_editor/palette_generator.cpp index 822e57250..c98dcbe03 100644 --- a/cockatrice/src/interface/palette_editor/palette_generator.cpp +++ b/cockatrice/src/interface/palette_editor/palette_generator.cpp @@ -1,6 +1,13 @@ #include "palette_generator.h" +#include "../theme_config.h" + #include +#include +#include +#include +#include +#include // ════════════════════════════════════════════════════════════════════════════ // PaletteGenerator::fromAccent diff --git a/cockatrice/src/interface/palette_editor/palette_grid_widget.cpp b/cockatrice/src/interface/palette_editor/palette_grid_widget.cpp index 97d28b731..de069bc80 100644 --- a/cockatrice/src/interface/palette_editor/palette_grid_widget.cpp +++ b/cockatrice/src/interface/palette_editor/palette_grid_widget.cpp @@ -1,14 +1,25 @@ #include "palette_grid_widget.h" +#include "../theme_config.h" #include "../theme_manager.h" +#include "color_button.h" #include +#include +#include +#include +#include #include #include #include #include +#include +#include #include #include +#include +#include +#include static QList allRoles() { diff --git a/cockatrice/src/interface/palette_editor/palette_grid_widget.h b/cockatrice/src/interface/palette_editor/palette_grid_widget.h index 77cbf1c62..f1ff41ec2 100644 --- a/cockatrice/src/interface/palette_editor/palette_grid_widget.h +++ b/cockatrice/src/interface/palette_editor/palette_grid_widget.h @@ -2,15 +2,19 @@ #define COCKATRICE_PALETTE_GRID_WIDGET_H #include "../theme_config.h" -#include "color_button.h" +#include #include #include -#include +#include #include +#include class QLabel; class QScrollArea; +class ColorButton; +class QVBoxLayout; + // Scrollable grid of ColorButtons — one per (ColorGroup × ColorRole) cell. // Owns the load/read round-trip for PaletteConfig but has no file I/O itself. class PaletteGridWidget : public QWidget diff --git a/cockatrice/src/interface/palette_editor/quick_setup_panel.cpp b/cockatrice/src/interface/palette_editor/quick_setup_panel.cpp index 85098bde5..04f98dcc3 100644 --- a/cockatrice/src/interface/palette_editor/quick_setup_panel.cpp +++ b/cockatrice/src/interface/palette_editor/quick_setup_panel.cpp @@ -1,9 +1,15 @@ #include "quick_setup_panel.h" +#include "color_button.h" + #include +#include #include #include +#include #include +#include +#include QuickSetupPanel::QuickSetupPanel(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/palette_editor/quick_setup_panel.h b/cockatrice/src/interface/palette_editor/quick_setup_panel.h index c83e27cf2..ea402086f 100644 --- a/cockatrice/src/interface/palette_editor/quick_setup_panel.h +++ b/cockatrice/src/interface/palette_editor/quick_setup_panel.h @@ -1,13 +1,14 @@ #ifndef COCKATRICE_QUICK_SETUP_PANEL_H #define COCKATRICE_QUICK_SETUP_PANEL_H -#include "color_button.h" - +#include #include +#include class QHBoxLayout; class QLabel; class QSlider; +class ColorButton; /** * @class QuickSetupPanel diff --git a/cockatrice/src/interface/pixel_map_generator.cpp b/cockatrice/src/interface/pixel_map_generator.cpp index b70dc576f..2f5c4b6dd 100644 --- a/cockatrice/src/interface/pixel_map_generator.cpp +++ b/cockatrice/src/interface/pixel_map_generator.cpp @@ -1,15 +1,37 @@ #include "pixel_map_generator.h" +#include "libcockatrice/network/server/remote/user_level.h" #include "theme_manager.h" #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include #include +#include #define DEFAULT_COLOR_UNREGISTERED "#32c8ec"; #define DEFAULT_COLOR_REGISTERED "#5ed900"; diff --git a/cockatrice/src/interface/pixel_map_generator.h b/cockatrice/src/interface/pixel_map_generator.h index b6e822fd9..7c01bb332 100644 --- a/cockatrice/src/interface/pixel_map_generator.h +++ b/cockatrice/src/interface/pixel_map_generator.h @@ -7,14 +7,20 @@ #ifndef PIXMAPGENERATOR_H #define PIXMAPGENERATOR_H +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" + #include #include #include #include #include +#include +#include #include #include +class QSize; + inline Q_LOGGING_CATEGORY(PixelMapGeneratorLog, "pixel_map_generator"); class PhasePixmapGenerator diff --git a/cockatrice/src/interface/theme_config.cpp b/cockatrice/src/interface/theme_config.cpp index 8293a82cf..652e322c8 100644 --- a/cockatrice/src/interface/theme_config.cpp +++ b/cockatrice/src/interface/theme_config.cpp @@ -1,9 +1,17 @@ #include "theme_config.h" +#include +#include #include #include +#include +#include +#include #include +#include #include +#include +#include bool ThemeConfig::isEmpty() const { diff --git a/cockatrice/src/interface/theme_config.h b/cockatrice/src/interface/theme_config.h index 567aeccda..8b91613f5 100644 --- a/cockatrice/src/interface/theme_config.h +++ b/cockatrice/src/interface/theme_config.h @@ -3,9 +3,10 @@ #include #include -#include #include +#include #include +#include // Application-specific color roles, layered on top of the fixed QPalette role // set. Stored in the same palette-.toml under an [AppColors] section diff --git a/cockatrice/src/interface/theme_manager.cpp b/cockatrice/src/interface/theme_manager.cpp index 08374c8fd..9a96b3e45 100644 --- a/cockatrice/src/interface/theme_manager.cpp +++ b/cockatrice/src/interface/theme_manager.cpp @@ -2,25 +2,40 @@ #include "../../client/settings/cache_settings.h" #include "pixel_map_generator.h" +#include "theme_config.h" #include +#include #include #include +#include #include #include -#include +#include +#include +#include +#include +#include #include +#include #include #include +#include #include -#include +#include #include +#include +#include #include #include #include +#include #include #include +#include #include +#include +#include #define SYSTEM_THEME_NAME "System" #define LEGACY_SYSTEM_THEME_NAME "Default" @@ -96,12 +111,17 @@ struct PaletteColorInfo static QString usableDefaultStyle(const QString &style) { - // The Windows 11 native style is broken: dragging cards across zones can + // Only the OS/default ("System") style is sanitized: the Windows 11 and + // Windows Vista native styles are broken (dragging cards across zones can // shrink the board to a tiny grey window that is unfixable without - // rejoining. It is never usable, so guard against it no matter how it was - // requested (OS default or an explicit "windows11" theme choice) and fall - // back to the Vista style. - return style.compare("windows11", Qt::CaseInsensitive) == 0 ? QStringLiteral("windowsvista") : style; + // rejoining), so a "System" choice falls through to the built-in "windows" + // style (QWindowsStyle) instead. They remain selectable by hand, where the + // settings page warns about them. + if (style.compare("windows11", Qt::CaseInsensitive) == 0 || + style.compare("windowsvista", Qt::CaseInsensitive) == 0) { + return QStringLiteral("windows"); + } + return style; } ThemeManager::ThemeManager(QObject *parent) : QObject(parent) @@ -481,14 +501,13 @@ void ThemeManager::applyStyleAndPalette(const QString &themeName, if (themeName == FUSION_THEME_NAME) { styleName = "Fusion"; } else { + // "System" resolves through the guard, which steers the broken + // Windows native styles to "windows". An explicitly chosen style + // name is honored as-is. styleName = usableDefaultStyle(defaultStyleName); } } - // The Windows 11 style is broken even when selected explicitly in a theme, - // so sanitize the resolved name here rather than trusting the theme config. - styleName = usableDefaultStyle(styleName); - QStyle *style = QStyleFactory::create(styleName); if (!style) { style = QStyleFactory::create(usableDefaultStyle(defaultStyleName)); diff --git a/cockatrice/src/interface/theme_manager.h b/cockatrice/src/interface/theme_manager.h index 4c9d070dc..c1ab65685 100644 --- a/cockatrice/src/interface/theme_manager.h +++ b/cockatrice/src/interface/theme_manager.h @@ -10,21 +10,21 @@ #include "theme_config.h" #include -#include +#include #include #include #include -#include +#include #include +#include #include +#include inline Q_LOGGING_CATEGORY(ThemeManagerLog, "theme_manager"); typedef QMap QStringMap; typedef QMap QBrushMap; -class QApplication; - class ThemeManager : public QObject { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp index 2199faf30..ef7fb0e0e 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp @@ -1,15 +1,24 @@ #include "color_identity_widget.h" #include "../../../../client/settings/cache_settings.h" +#include "libcockatrice/card/card_info.h" #include "mana_symbol_widget.h" +#include #include -#include +#include +#include +#include #include +#include +#include #include +#include #include +#include #include #include +#include ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, const QString &_colorIdentity) : QWidget(parent), colorIdentity(_colorIdentity) diff --git a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h index 315ac07d6..3caf1a964 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h +++ b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h @@ -7,9 +7,13 @@ #ifndef COLOR_IDENTITY_WIDGET_H #define COLOR_IDENTITY_WIDGET_H -#include +#include +#include #include #include +#include + +class QHBoxLayout; class ColorIdentityWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/additional_info/deck_color_identity.cpp b/cockatrice/src/interface/widgets/cards/additional_info/deck_color_identity.cpp index 62b01511e..13c185a79 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/deck_color_identity.cpp +++ b/cockatrice/src/interface/widgets/cards/additional_info/deck_color_identity.cpp @@ -1,6 +1,11 @@ #include "deck_color_identity.h" +#include "libcockatrice/card/card_info.h" + +#include +#include #include +#include #include #include #include diff --git a/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.cpp b/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.cpp index fcbb69c2e..7da97f88c 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.cpp @@ -1,12 +1,16 @@ #include "mana_cost_widget.h" +#include "libcockatrice/card/card_info.h" #include "mana_symbol_widget.h" #include -#include +#include +#include +#include +#include #include #include -#include +#include ManaCostWidget::ManaCostWidget(QWidget *parent, CardInfoPtr _card) : QWidget(parent), card(_card) { diff --git a/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.h b/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.h index 8bd2e9bc0..a181f1148 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.h +++ b/cockatrice/src/interface/widgets/cards/additional_info/mana_cost_widget.h @@ -7,9 +7,13 @@ #ifndef MANA_COST_WIDGET_H #define MANA_COST_WIDGET_H -#include +#include +#include #include #include +#include + +class QHBoxLayout; class ManaCostWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp b/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp index 18011909f..80dc11852 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp @@ -3,8 +3,16 @@ #include "../../../../client/settings/cache_settings.h" #include "../../../pixel_map_generator.h" +#include +#include #include +#include +#include +#include #include +#include + +class QWidget; ManaSymbolWidget::ManaSymbolWidget(QWidget *parent, QString _symbol, bool _isActive, bool _mayBeToggled) : QLabel(parent), symbol(std::move(_symbol)), isActive(_isActive), mayBeToggled(_mayBeToggled) diff --git a/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.h b/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.h index 705873dff..8dad15785 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.h +++ b/cockatrice/src/interface/widgets/cards/additional_info/mana_symbol_widget.h @@ -7,8 +7,13 @@ #ifndef MANA_SYMBOL_WIDGET_H #define MANA_SYMBOL_WIDGET_H -#include +#include #include +#include +#include + +class QGraphicsOpacityEffect; +class QWidget; class ManaSymbolWidget : public QLabel { diff --git a/cockatrice/src/interface/widgets/cards/art_crop_attribution.cpp b/cockatrice/src/interface/widgets/cards/art_crop_attribution.cpp index 8ab18ddd9..c4b347047 100644 --- a/cockatrice/src/interface/widgets/cards/art_crop_attribution.cpp +++ b/cockatrice/src/interface/widgets/cards/art_crop_attribution.cpp @@ -1,8 +1,17 @@ #include "art_crop_attribution.h" +#include "libcockatrice/card/printing/printing_info.h" + +#include +#include #include #include #include +#include +#include +#include +#include +#include #include QString buildArtAttribution(const ExactCard &card) diff --git a/cockatrice/src/interface/widgets/cards/art_crop_attribution.h b/cockatrice/src/interface/widgets/cards/art_crop_attribution.h index 0b3fb3d56..b4acbef26 100644 --- a/cockatrice/src/interface/widgets/cards/art_crop_attribution.h +++ b/cockatrice/src/interface/widgets/cards/art_crop_attribution.h @@ -1,7 +1,8 @@ #ifndef COCKATRICE_ART_CROP_ATTRIBUTION_H #define COCKATRICE_ART_CROP_ATTRIBUTION_H -#include +#include +#include class ExactCard; class QPainter; diff --git a/cockatrice/src/interface/widgets/cards/card_art_utils.cpp b/cockatrice/src/interface/widgets/cards/card_art_utils.cpp index b26b73593..ebf79282e 100644 --- a/cockatrice/src/interface/widgets/cards/card_art_utils.cpp +++ b/cockatrice/src/interface/widgets/cards/card_art_utils.cpp @@ -1,7 +1,10 @@ #include "card_art_utils.h" +#include "libcockatrice/card/card_info.h" + #include #include +#include namespace CardArtUtils { diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp index 8df3700c3..b15ac5d23 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp @@ -1,13 +1,33 @@ #include "card_group_display_widget.h" #include "../../../../client/settings/cache_settings.h" +#include "../../general/display/banner_widget.h" +#include "../card_info_picture_widget.h" #include "../card_info_picture_with_text_overlay_widget.h" +#include "../card_size_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent, DeckListModel *_deckListModel, diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.h b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.h index e5f7c7ee2..f4a555766 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.h @@ -7,15 +7,24 @@ #ifndef CARD_GROUP_DISPLAY_WIDGET_H #define CARD_GROUP_DISPLAY_WIDGET_H -#include "../../general/display/banner_widget.h" -#include "../card_info_picture_with_text_overlay_widget.h" -#include "../card_size_widget.h" - -#include -#include +#include +#include +#include +#include +#include +#include #include +#include #include -#include +#include + +class BannerWidget; +class CardSizeWidget; +class DeckListModel; +class ExactCard; +class QItemSelection; +class QItemSelectionModel; +class QModelIndex; class CardGroupDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp index a192d13d8..3256e0ca8 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp @@ -1,10 +1,20 @@ #include "flat_card_group_display_widget.h" -#include -#include +#include "../../general/display/banner_widget.h" +#include "../../general/layout_containers/flow_widget.h" + +#include +#include +#include +#include +#include #include +#include #include +class CardSizeWidget; +class QItemSelectionModel; + FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent, DeckListModel *_deckListModel, QItemSelectionModel *_selectionModel, diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.h b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.h index 0772c1ab4..d13dcddb5 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.h @@ -10,6 +10,16 @@ #include "../../general/layout_containers/flow_widget.h" #include "card_group_display_widget.h" +#include +#include +#include +#include + +class CardSizeWidget; +class DeckListModel; +class QItemSelectionModel; +class QWidget; + class FlatCardGroupDisplayWidget : public CardGroupDisplayWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.cpp b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.cpp index dca8ee2a5..6e923cdbe 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.cpp @@ -1,8 +1,20 @@ #include "overlapped_card_group_display_widget.h" +#include "../../general/display/banner_widget.h" +#include "../../general/layout_containers/overlap_widget.h" +#include "../card_size_widget.h" + +#include +#include +#include #include -#include +#include +#include +#include #include +#include + +class QItemSelectionModel; OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *parent, DeckListModel *_deckListModel, diff --git a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h index 5b4b80d6b..76be3069f 100644 --- a/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h @@ -10,6 +10,16 @@ #include "../../general/layout_containers/overlap_widget.h" #include "card_group_display_widget.h" +#include +#include +#include +#include + +class CardSizeWidget; +class DeckListModel; +class QItemSelectionModel; +class QWidget; + class OverlappedCardGroupDisplayWidget : public CardGroupDisplayWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/cards/card_info_display_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_display_widget.cpp index 577dafe0a..7ec2ee38e 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_display_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_display_widget.cpp @@ -1,14 +1,25 @@ #include "card_info_display_widget.h" -#include "../../../game_graphics/board/card_item.h" +#include "../../../game_graphics/board/abstract_card_item.h" +#include "../../../game_graphics/card_dimensions.h" #include "card_info_picture_widget.h" #include "card_info_text_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/card_ref.h" -#include +#include +#include +#include #include +#include +#include #include #include +class QWidget; + CardInfoDisplayWidget::CardInfoDisplayWidget(const CardRef &cardRef, QWidget *parent, Qt::WindowFlags flags) : QFrame(parent, flags), aspectRatio(CardDimensions::HEIGHT_F / CardDimensions::WIDTH_F) { diff --git a/cockatrice/src/interface/widgets/cards/card_info_display_widget.h b/cockatrice/src/interface/widgets/cards/card_info_display_widget.h index f8f33f3d4..65965a63e 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_display_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_display_widget.h @@ -7,15 +7,17 @@ #ifndef CARDINFOWIDGET_H #define CARDINFOWIDGET_H -#include #include -#include +#include #include -#include +#include +#include class CardInfoPictureWidget; class CardInfoTextWidget; class AbstractCardItem; +class QWidget; +struct CardRef; class CardInfoDisplayWidget : public QFrame { diff --git a/cockatrice/src/interface/widgets/cards/card_info_frame_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_frame_widget.cpp index fcccf445a..0f66eb209 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_frame_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_frame_widget.cpp @@ -1,16 +1,27 @@ #include "card_info_frame_widget.h" #include "../../../client/settings/cache_settings.h" -#include "../../../game_graphics/board/card_item.h" -#include "card_info_display_widget.h" +#include "../../../game_graphics/board/abstract_card_item.h" #include "card_info_picture_widget.h" #include "card_info_text_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include +#include +#include #include #include +#include +#include #include #include #include +#include +#include + +struct CardRef; CardInfoFrameWidget::CardInfoFrameWidget(QWidget *parent) : QTabWidget(parent), viewTransformationButton(nullptr), cardTextOnly(false) diff --git a/cockatrice/src/interface/widgets/cards/card_info_frame_widget.h b/cockatrice/src/interface/widgets/cards/card_info_frame_widget.h index e766fac7a..1f8143785 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_frame_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_frame_widget.h @@ -7,16 +7,19 @@ #ifndef CARDFRAME_H #define CARDFRAME_H -#include +#include #include #include -#include +#include class AbstractCardItem; class CardInfoPictureWidget; class CardInfoTextWidget; class QVBoxLayout; class QSplitter; +class QPushButton; +class QWidget; +struct CardRef; class CardInfoFrameWidget : public QTabWidget { diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.cpp index e5b0c4872..5ec4c8a25 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.cpp @@ -1,6 +1,12 @@ #include "card_info_picture_art_crop_widget.h" #include "../../../interface/card_picture_loader/card_picture_loader.h" +#include "libcockatrice/card/printing/exact_card.h" + +#include +#include + +class QWidget; CardInfoPictureArtCropWidget::CardInfoPictureArtCropWidget(QWidget *parent) : CardInfoPictureWidget(parent, false, false) diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.h b/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.h index ce22a1a44..540b0c2fa 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_art_crop_widget.h @@ -9,6 +9,11 @@ #include "card_info_picture_widget.h" +#include +#include + +class QWidget; + class CardInfoPictureArtCropWidget : public CardInfoPictureWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.cpp index 40bef3df3..ba10d4a0f 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.cpp @@ -2,10 +2,17 @@ #include "../../../client/settings/cache_settings.h" #include "../../../interface/card_picture_loader/card_picture_loader.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" #include +#include +#include +#include #include +#include #include +#include /** * @brief Constructs a CardPictureEnlargedWidget. diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.h b/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.h index a158ac6cf..f5ead2a18 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_enlarged_widget.h @@ -8,8 +8,12 @@ #ifndef CARD_PICTURE_ENLARGED_WIDGET_H #define CARD_PICTURE_ENLARGED_WIDGET_H +#include #include #include +#include + +class QSize; class CardInfoPictureEnlargedWidget final : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_picture_widget.cpp index 2dd21e78a..3c1e1b77f 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_widget.cpp @@ -1,21 +1,47 @@ #include "card_info_picture_widget.h" #include "../../../client/settings/cache_settings.h" -#include "../../../game_graphics/board/card_item.h" #include "../../../interface/card_picture_loader/card_picture_loader.h" #include "../../../interface/widgets/tabs/tab_supervisor.h" #include "../../window_main.h" +#include "../tabs/abstract_tab_deck_editor.h" #include "card_art_utils.h" +#include "card_info_picture_enlarged_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include +#include #include +#include #include +#include +#include #include #include #include -#include +#include +#include static constexpr qreal MTG_CARD_ASPECT_RATIO = 1.396; // static constexpr qreal YUGIOH_CARD_ASPECT_RATIO = 1.457; diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_widget.h b/cockatrice/src/interface/widgets/cards/card_info_picture_widget.h index 4fe84ed0b..8d2d63736 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_widget.h @@ -7,15 +7,20 @@ #ifndef CARD_INFO_PICTURE_H #define CARD_INFO_PICTURE_H -#include "card_info_picture_enlarged_widget.h" - -#include +#include +#include +#include +#include #include #include +#include + +class CardInfoPictureEnlargedWidget; +class QPropertyAnimation; +class QTimer; inline Q_LOGGING_CATEGORY(CardInfoPictureWidgetLog, "card_info_picture_widget"); -class AbstractCardItem; class QMenu; class CardInfoPictureWidget : public QWidget diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.cpp index 000a88b2f..04fe9ab69 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.cpp @@ -1,8 +1,24 @@ #include "card_info_picture_with_text_overlay_widget.h" +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +class QWidget; /** * @brief Constructs a CardPictureWithTextOverlay widget. diff --git a/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.h b/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.h index ba978498d..6c547dc13 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.h @@ -11,8 +11,14 @@ #include "card_info_picture_widget.h" #include -#include +#include #include +#include +#include + +class QPainter; +class QRect; +class QWidget; class CardInfoPictureWithTextOverlayWidget : public CardInfoPictureWidget { diff --git a/cockatrice/src/interface/widgets/cards/card_info_text_widget.cpp b/cockatrice/src/interface/widgets/cards/card_info_text_widget.cpp index e98c3c02a..fa6cde311 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_text_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_info_text_widget.cpp @@ -1,15 +1,26 @@ #include "card_info_text_widget.h" -#include "../../../game_graphics/board/card_item.h" +#include "../../../client/settings/cache_settings.h" #include "../../card_localization.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/settings/cards_display_settings.h" #include #include +#include #include #include +#include +#include +#include #include +#include #include #include +#include +#include CardInfoTextWidget::CardInfoTextWidget(QWidget *parent) : QFrame(parent) { diff --git a/cockatrice/src/interface/widgets/cards/card_info_text_widget.h b/cockatrice/src/interface/widgets/cards/card_info_text_widget.h index 683be5ab5..8223093fe 100644 --- a/cockatrice/src/interface/widgets/cards/card_info_text_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_info_text_widget.h @@ -10,10 +10,13 @@ #include "libcockatrice/card/printing/exact_card.h" #include -#include +#include +#include + class QLabel; class QScrollArea; class QTextEdit; +class QWidget; class CardInfoTextWidget : public QFrame { diff --git a/cockatrice/src/interface/widgets/cards/card_size_widget.cpp b/cockatrice/src/interface/widgets/cards/card_size_widget.cpp index 9cdfd4bce..ab1840591 100644 --- a/cockatrice/src/interface/widgets/cards/card_size_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/card_size_widget.cpp @@ -1,10 +1,19 @@ #include "card_size_widget.h" -#include "../printing_selector/printing_selector.h" -#include "../visual_deck_storage/visual_deck_storage_widget.h" +#include "../general/layout_containers/flow_widget.h" +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include /** * @class CardSizeWidget diff --git a/cockatrice/src/interface/widgets/cards/card_size_widget.h b/cockatrice/src/interface/widgets/cards/card_size_widget.h index 46883e792..7de97a5e9 100644 --- a/cockatrice/src/interface/widgets/cards/card_size_widget.h +++ b/cockatrice/src/interface/widgets/cards/card_size_widget.h @@ -9,15 +9,15 @@ #ifndef CARD_SIZE_WIDGET_H #define CARD_SIZE_WIDGET_H -#include "../general/layout_containers/flow_widget.h" - -#include -#include -#include #include #include +#include class QWheelEvent; +class FlowWidget; +class QHBoxLayout; +class QLabel; +class QSlider; class CardSizeWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.cpp b/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.cpp index a4b4eaf54..911e35285 100644 --- a/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.cpp @@ -1,14 +1,38 @@ #include "deck_card_zone_display_widget.h" #include "../../../client/settings/cache_settings.h" +#include "../general/display/banner_widget.h" +#include "../visual_deck_editor/visual_deck_editor_widget.h" +#include "card_group_display_widgets/card_group_display_widget.h" #include "card_group_display_widgets/flat_card_group_display_widget.h" #include "card_group_display_widgets/overlapped_card_group_display_widget.h" +#include "libcockatrice/card/card_info.h" #include "libcockatrice/card/database/card_database_manager.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" #include "libcockatrice/settings/cards_display_settings.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +class CardSizeWidget; +class QMouseEvent; DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent, DeckListModel *_deckListModel, diff --git a/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.h b/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.h index f25108834..b7dc3ed3e 100644 --- a/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.h +++ b/cockatrice/src/interface/widgets/cards/deck_card_zone_display_widget.h @@ -7,16 +7,27 @@ #ifndef DECK_CARD_ZONE_DISPLAY_WIDGET_H #define DECK_CARD_ZONE_DISPLAY_WIDGET_H -#include "../general/display/banner_widget.h" -#include "../general/layout_containers/overlap_widget.h" #include "../visual_deck_editor/visual_deck_editor_widget.h" -#include "card_group_display_widgets/card_group_display_widget.h" -#include "card_info_picture_with_text_overlay_widget.h" -#include "card_size_widget.h" -#include +#include +#include +#include +#include +#include +#include #include -#include +#include + +class BannerWidget; +class CardGroupDisplayWidget; +class CardSizeWidget; +class DeckListModel; +class ExactCard; +class OverlapWidget; +class QItemSelection; +class QItemSelectionModel; +class QModelIndex; +class QVBoxLayout; class DeckCardZoneDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.cpp b/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.cpp index 147143e7f..186c55755 100644 --- a/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.cpp @@ -1,15 +1,15 @@ #include "deck_preview_card_picture_widget.h" #include "../../../client/settings/cache_settings.h" +#include "card_info_picture_widget.h" #include -#include -#include #include -#include -#include +#include #include +class QWidget; + /** * @brief Constructs a CardPictureWithTextOverlay widget. * @param parent The parent widget. diff --git a/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.h b/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.h index 7571bc256..9643c7364 100644 --- a/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.h +++ b/cockatrice/src/interface/widgets/cards/deck_preview_card_picture_widget.h @@ -11,9 +11,12 @@ #include "card_info_picture_with_text_overlay_widget.h" #include -#include -#include -#include +#include +#include +#include + +class QTimer; +class QWidget; class DeckPreviewCardPictureWidget final : public CardInfoPictureWithTextOverlayWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp index 483fc71b0..730043d95 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp @@ -1,9 +1,16 @@ #include "abstract_analytics_panel_widget.h" #include "../../pixel_map_generator.h" +#include "../general/display/banner_widget.h" #include "deck_list_statistics_analyzer.h" +#include +#include #include +#include +#include +#include +#include AbstractAnalyticsPanelWidget::AbstractAnalyticsPanelWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer) : QWidget(parent), analyzer(analyzer) diff --git a/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.h b/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.h index 23374a9e1..c1afb78d0 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.h @@ -3,12 +3,16 @@ #include "../general/display/banner_widget.h" -#include #include -#include +#include #include +#include class DeckListStatisticsAnalyzer; +class QDialog; +class QHBoxLayout; +class QPushButton; +class QVBoxLayout; class AbstractAnalyticsPanelWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp index c83e6d982..f1ed5767c 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp @@ -3,8 +3,11 @@ #include "analytics_panel_widget_factory.h" #include +#include #include +class QWidget; + AddAnalyticsPanelDialog::AddAnalyticsPanelDialog(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("Add Analytics Panel")); diff --git a/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.h index aa44734c2..f70c1d8f5 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/add_analytics_panel_dialog.h @@ -2,12 +2,15 @@ #ifndef COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H #define COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H -#include "analytics_panel_widget_factory.h" - #include #include -#include -#include +#include +#include +#include + +class QDialogButtonBox; +class QVBoxLayout; +class QWidget; class AddAnalyticsPanelDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp index e807e9d47..79dda527d 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp @@ -2,6 +2,8 @@ #include "abstract_analytics_panel_widget.h" +#include + AnalyticsPanelWidgetFactory &AnalyticsPanelWidgetFactory::instance() { static AnalyticsPanelWidgetFactory f; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.h b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.h index 6c5856d70..598498980 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_factory.h @@ -1,9 +1,9 @@ #ifndef COCKATRICE_DECK_ANALYTICS_WIDGET_FACTORY_H #define COCKATRICE_DECK_ANALYTICS_WIDGET_FACTORY_H +#include #include #include -#include #include #include diff --git a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.h b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.h index 70d6df94f..99a6daf5d 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.h @@ -3,6 +3,8 @@ #include "analytics_panel_widget_factory.h" +#include + class AnalyticsPanelWidgetRegistrar { public: diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp index 51129a4b4..1c61116e3 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp @@ -1,5 +1,8 @@ #include "draw_probability_config.h" +#include +#include + QJsonObject DrawProbabilityConfig::toJson() const { QJsonObject o; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.cpp index 71f88c0fc..28fd4c841 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.cpp @@ -5,6 +5,10 @@ #include #include #include +#include +#include + +class QWidget; DrawProbabilityConfigDialog::DrawProbabilityConfigDialog(QWidget *parent) : QDialog(parent) { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.h index 44b1f0eec..3553db75d 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.h @@ -3,11 +3,13 @@ #include "draw_probability_config.h" #include -#include +#include class QComboBox; class QSpinBox; class QLabel; +class QFormLayout; +class QWidget; class DrawProbabilityConfigDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.cpp index 0107294c7..90d9f58ef 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.cpp @@ -1,21 +1,40 @@ #include "draw_probability_widget.h" +#include "../../../general/display/banner_widget.h" +#include "../../../general/layout_containers/flow_widget.h" +#include "../../abstract_analytics_panel_widget.h" +#include "../../deck_list_statistics_analyzer.h" +#include "deck_list_model.h" #include "draw_probability_config_dialog.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include +#include #include #include -#include -#include -#include #include +#include #include +#include #include +#include +#include +#include #include +#include +#include +#include #include -#include +#include +#include +#include #include #include #include +#include + +class QWidget; DrawProbabilityWidget::DrawProbabilityWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer) : AbstractAnalyticsPanelWidget(parent, analyzer) diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.h index 9f7b971b1..7c7bdb50a 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.h @@ -1,16 +1,19 @@ #ifndef COCKATRICE_DRAW_PROBABILITY_WIDGET_H #define COCKATRICE_DRAW_PROBABILITY_WIDGET_H -#include "../../../../layouts/flow_layout.h" -#include "../../../general/layout_containers/flow_widget.h" #include "../../abstract_analytics_panel_widget.h" -#include "../../deck_list_statistics_analyzer.h" #include "draw_probability_config.h" -#include -#include -#include -#include +#include + +class DeckListStatisticsAnalyzer; +class FlowWidget; +class QComboBox; +class QLabel; +class QLineEdit; +class QSpinBox; +class QTableWidget; +class QWidget; class DrawProbabilityWidget : public AbstractAnalyticsPanelWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.cpp index 2f9f60752..41ebdec1e 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.cpp @@ -1,5 +1,9 @@ #include "mana_base_config.h" +#include +#include +#include + QJsonObject ManaBaseConfig::toJson() const { QJsonObject jsonObject; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.h index d01f88b8b..5fd45af62 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.h @@ -2,8 +2,9 @@ #ifndef COCKATRICE_MANA_BASE_CONFIG_H #define COCKATRICE_MANA_BASE_CONFIG_H -#include #include +#include +#include #include struct ManaBaseConfig diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.cpp index 83e35d57d..32b54c485 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.cpp @@ -1,6 +1,19 @@ #include "mana_base_config_dialog.h" +#include "../../deck_list_statistics_analyzer.h" + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include + +class QWidget; ManaBaseConfigDialog::ManaBaseConfigDialog(DeckListStatisticsAnalyzer *analyzer, ManaBaseConfig initial, diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.h index a816f154f..b0ae77076 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.h @@ -2,18 +2,20 @@ #ifndef COCKATRICE_MANA_BASE_ADD_DIALOG_H #define COCKATRICE_MANA_BASE_ADD_DIALOG_H -#include "../../deck_list_statistics_analyzer.h" #include "mana_base_config.h" -#include -#include #include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +class DeckListStatisticsAnalyzer; +class QComboBox; +class QDialogButtonBox; +class QLabel; +class QListWidget; +class QVBoxLayout; +class QWidget; class ManaBaseConfigDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.cpp index 0093c360b..fc7914b94 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.cpp @@ -3,12 +3,27 @@ #include "../../../general/display/charts/bars/bar_widget.h" #include "../../../general/display/charts/bars/color_bar.h" #include "../../../general/display/charts/pies/color_pie.h" +#include "../../abstract_analytics_panel_widget.h" #include "../../analytics_panel_widget_registrar.h" +#include "../../deck_list_statistics_analyzer.h" #include "mana_base_config_dialog.h" +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include namespace { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.h index 85b2a13b3..7ec5ecefe 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.h @@ -7,16 +7,17 @@ #ifndef MANA_BASE_WIDGET_H #define MANA_BASE_WIDGET_H -#include "../../../general/display/banner_widget.h" #include "../../abstract_analytics_panel_widget.h" -#include "../../deck_list_statistics_analyzer.h" #include "mana_base_config.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include + +class DeckListStatisticsAnalyzer; +class QHBoxLayout; +class QWidget; class ManaBaseWidget : public AbstractAnalyticsPanelWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp index a0ccedc74..7e15058a4 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp @@ -1,9 +1,21 @@ #include "mana_curve_category_widget.h" +#include "../../../general/display/charts/bars/bar_chart_widget.h" #include "libcockatrice/utility/color.h" #include "libcockatrice/utility/qt_utils.h" #include "mana_curve_config.h" -#include "mana_curve_total_widget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include constexpr int MIN_ROW_HEIGHT = 100; // Minimum readable height per row diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.h index c6aa6f1f0..1794d5cab 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.h @@ -1,12 +1,14 @@ #ifndef COCKATRICE_MANA_CURVE_CATEGORY_WIDGET_H #define COCKATRICE_MANA_CURVE_CATEGORY_WIDGET_H -#include "../../../general/display/charts/bars/bar_chart_widget.h" -#include "mana_curve_config.h" - -#include -#include +#include #include +#include + +class QString; +class QVBoxLayout; +struct ManaCurveConfig; +template class QHash; class ManaCurveCategoryWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.cpp index 0dfef1b66..190642ad9 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.cpp @@ -1,5 +1,9 @@ #include "mana_curve_config.h" +#include +#include +#include + QJsonObject ManaCurveConfig::toJson() const { QJsonObject jsonObject; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.h index 55222dd98..28224db03 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.h @@ -2,8 +2,9 @@ #ifndef COCKATRICE_MANA_CURVE_CONFIG_H #define COCKATRICE_MANA_CURVE_CONFIG_H -#include #include +#include +#include #include struct ManaCurveConfig diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.cpp index 9e9ae98a6..c5498ff3e 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.cpp @@ -1,12 +1,22 @@ #include "mana_curve_config_dialog.h" +#include "../../deck_list_statistics_analyzer.h" + +#include #include #include #include +#include #include +#include #include +#include +#include +#include #include +class QWidget; + ManaCurveConfigDialog::ManaCurveConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent) : QDialog(parent), analyzer(analyzer) { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.h index 17e6776e5..47ce1b8c2 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.h @@ -1,16 +1,18 @@ #ifndef COCKATRICE_MANA_CURVE_ADD_DIALOG_H #define COCKATRICE_MANA_CURVE_ADD_DIALOG_H -#include "../../deck_list_statistics_analyzer.h" #include "mana_curve_config.h" #include -#include -#include +#include class QListWidget; class QCheckBox; class QComboBox; +class DeckListStatisticsAnalyzer; +class QDialogButtonBox; +class QLabel; +class QWidget; class ManaCurveConfigDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp index c04767015..f1d9ea8c7 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp @@ -2,10 +2,18 @@ #include "../../../general/display/charts/bars/bar_chart_widget.h" #include "libcockatrice/utility/color.h" -#include "libcockatrice/utility/qt_utils.h" #include "mana_curve_config.h" #include +#include +#include +#include +#include +#include +#include +#include +#include +#include ManaCurveTotalWidget::ManaCurveTotalWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.h index 203f75345..0eaecec96 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.h @@ -1,11 +1,15 @@ #ifndef COCKATRICE_MANA_CURVE_TOTAL_WIDGET_H #define COCKATRICE_MANA_CURVE_TOTAL_WIDGET_H -#include "../../../general/display/charts/bars/bar_chart_widget.h" -#include "mana_curve_config.h" - -#include -#include +#include +#include #include +#include + +class BarChartWidget; +class QHBoxLayout; +class QLabel; +struct ManaCurveConfig; +template class QMap; class ManaCurveTotalWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.cpp index b182bf954..6d93bde54 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.cpp @@ -1,19 +1,23 @@ #include "mana_curve_widget.h" -#include "../../../general/display/charts/bars/bar_chart_background_widget.h" -#include "../../../general/display/charts/bars/bar_chart_widget.h" -#include "../../../general/display/charts/bars/segmented_bar_widget.h" +#include "../../abstract_analytics_panel_widget.h" #include "../../analytics_panel_widget_registrar.h" #include "../../deck_list_statistics_analyzer.h" -#include "libcockatrice/utility/color.h" -#include "libcockatrice/utility/qt_utils.h" +#include "mana_curve_category_widget.h" #include "mana_curve_config_dialog.h" +#include "mana_curve_total_widget.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QWidget; namespace { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.h index d3e56d44c..14c445717 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.h @@ -8,14 +8,17 @@ #define MANA_CURVE_WIDGET_H #include "../../abstract_analytics_panel_widget.h" -#include "mana_curve_category_widget.h" #include "mana_curve_config.h" -#include "mana_curve_total_widget.h" -#include +#include +#include +#include +#include -class SegmentedBarWidget; class DeckListStatisticsAnalyzer; +class ManaCurveCategoryWidget; +class ManaCurveTotalWidget; +class QWidget; class ManaCurveWidget : public AbstractAnalyticsPanelWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.cpp index ee57cb1e2..7a6f0b51a 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.cpp @@ -1,5 +1,9 @@ #include "mana_devotion_config.h" +#include +#include +#include + QJsonObject ManaDevotionConfig::toJson() const { QJsonObject jsonObject; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.h index 08be146e5..480b2151c 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.h @@ -1,8 +1,9 @@ #ifndef COCKATRICE_MANA_DEVOTION_CONFIG_H #define COCKATRICE_MANA_DEVOTION_CONFIG_H -#include #include +#include +#include #include struct ManaDevotionConfig diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.cpp index b01c33ba5..0d70fc24d 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.cpp @@ -1,5 +1,19 @@ #include "mana_devotion_config_dialog.h" +#include "../../deck_list_statistics_analyzer.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QWidget; + ManaDevotionConfigDialog::ManaDevotionConfigDialog(DeckListStatisticsAnalyzer *analyzer, ManaDevotionConfig initial, QWidget *parent) diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.h index fd804e2af..9c37ec5ad 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.h @@ -2,16 +2,20 @@ #ifndef COCKATRICE_MANA_DEVOTION_ADD_DIALOG_H #define COCKATRICE_MANA_DEVOTION_ADD_DIALOG_H -#include "../../deck_list_statistics_analyzer.h" #include "mana_devotion_config.h" -#include -#include #include -#include -#include -#include -#include +#include +#include +#include + +class DeckListStatisticsAnalyzer; +class QComboBox; +class QDialogButtonBox; +class QLabel; +class QListWidget; +class QVBoxLayout; +class QWidget; class ManaDevotionConfigDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.cpp index 709577ff2..7e1f0c211 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.cpp @@ -3,12 +3,26 @@ #include "../../../general/display/charts/bars/bar_widget.h" #include "../../../general/display/charts/bars/color_bar.h" #include "../../../general/display/charts/pies/color_pie.h" +#include "../../abstract_analytics_panel_widget.h" #include "../../analytics_panel_widget_registrar.h" #include "../../deck_list_statistics_analyzer.h" #include "mana_devotion_config_dialog.h" +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.h index af0215305..2b0182c1e 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.h @@ -6,11 +6,17 @@ #ifndef MANA_DEVOTION_WIDGET_H #define MANA_DEVOTION_WIDGET_H -#include "../../../general/display/banner_widget.h" #include "../../abstract_analytics_panel_widget.h" #include "mana_devotion_config.h" -#include +#include +#include +#include +#include + +class DeckListStatisticsAnalyzer; +class QHBoxLayout; +class QWidget; class ManaDevotionWidget : public AbstractAnalyticsPanelWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.cpp index 01af9329c..ab321661e 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.cpp @@ -1,5 +1,9 @@ #include "mana_distribution_config.h" +#include +#include +#include + QJsonObject ManaDistributionConfig::toJson() const { QJsonObject o; diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.h index d1aa0f48e..012b0f4a7 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.h @@ -1,8 +1,8 @@ #ifndef COCKATRICE_MANA_DISTRIBUTION_CONFIG_H #define COCKATRICE_MANA_DISTRIBUTION_CONFIG_H -#include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.cpp index 325c70028..24b71bae0 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.cpp @@ -1,12 +1,19 @@ #include "mana_distribution_config_dialog.h" +#include #include #include #include #include +#include #include +#include +#include +#include #include +class QWidget; + static const QStringList kColors = {"W", "U", "B", "R", "G", "C"}; ManaDistributionConfigDialog::ManaDistributionConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent) diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.h index 57c88e29d..3d21b6bee 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.h @@ -4,14 +4,15 @@ #include "mana_distribution_config.h" #include -#include -#include -#include +#include class QComboBox; class QListWidget; class QCheckBox; class DeckListStatisticsAnalyzer; +class QDialogButtonBox; +class QLabel; +class QWidget; class ManaDistributionConfigDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.cpp index 8a5e14858..4faa105e6 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.cpp @@ -2,7 +2,10 @@ #include "../../../cards/additional_info/mana_symbol_widget.h" +#include +#include #include +#include ManaDistributionSingleDisplayWidget::ManaDistributionSingleDisplayWidget(const QString &colorSymbol, QWidget *parent) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.h index e33d0cec1..2fd3efb2d 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.h @@ -1,10 +1,12 @@ #ifndef COCKATRICE_MANA_DISTRIBUTION_SINGLE_DISPLAY_WIDGET_H #define COCKATRICE_MANA_DISTRIBUTION_SINGLE_DISPLAY_WIDGET_H -#include -#include -#include +#include #include +#include + +class QLabel; +class QProgressBar; class ManaDistributionSingleDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.cpp index 8eaea1426..5543c64df 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.cpp @@ -1,12 +1,21 @@ #include "mana_distribution_widget.h" +#include "../../../general/display/charts/bars/color_bar.h" +#include "../../../general/display/charts/pies/color_pie.h" +#include "../../abstract_analytics_panel_widget.h" #include "../../analytics_panel_widget_registrar.h" +#include "../../deck_list_statistics_analyzer.h" #include "mana_distribution_config_dialog.h" +#include "mana_distribution_single_display_widget.h" -#include -#include -#include +#include +#include +#include +#include +#include +#include #include +#include namespace { diff --git a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.h b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.h index 2d834f3af..6230e0201 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.h @@ -1,17 +1,21 @@ #ifndef COCKATRICE_MANA_DISTRIBUTION_WIDGET_H #define COCKATRICE_MANA_DISTRIBUTION_WIDGET_H -#include "../../../general/display/charts/bars/color_bar.h" -#include "../../../general/display/charts/pies/color_pie.h" #include "../../abstract_analytics_panel_widget.h" -#include "../../deck_list_statistics_analyzer.h" #include "mana_distribution_config.h" -#include "mana_distribution_single_display_widget.h" -#include +#include #include -#include -#include +#include +#include + +class ColorBar; +class ColorPie; +class DeckListStatisticsAnalyzer; +class ManaDistributionSingleDisplayWidget; +class QHBoxLayout; +class QVBoxLayout; +class QWidget; class ManaDistributionWidget : public AbstractAnalyticsPanelWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.cpp b/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.cpp index 76552ea2f..9f6257930 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.cpp @@ -1,5 +1,6 @@ #include "deck_analytics_widget.h" +#include "../general/layout_containers/flow_widget.h" #include "abstract_analytics_panel_widget.h" #include "add_analytics_panel_dialog.h" #include "analytics_panel_widget_factory.h" @@ -9,13 +10,19 @@ #include "deck_list_statistics_analyzer.h" #include "resizable_panel.h" +#include +#include #include +#include #include #include +#include #include #include #include #include +#include +#include DeckAnalyticsWidget::DeckAnalyticsWidget(QWidget *parent, DeckListStatisticsAnalyzer *_statsAnalyzer) : QWidget(parent), statsAnalyzer(_statsAnalyzer) diff --git a/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.h b/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.h index 3c73deca2..f1e071ff6 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.h +++ b/cockatrice/src/interface/widgets/deck_analytics/deck_analytics_widget.h @@ -7,19 +7,22 @@ #ifndef DECK_ANALYTICS_WIDGET_H #define DECK_ANALYTICS_WIDGET_H -#include "../general/layout_containers/flow_widget.h" -#include "abstract_analytics_panel_widget.h" -#include "deck_list_statistics_analyzer.h" -#include "resizable_panel.h" - -#include #include -#include -#include +#include +#include #include #include +#include class LayoutInspector; +class AbstractAnalyticsPanelWidget; +class DeckListStatisticsAnalyzer; +class FlowWidget; +class QCheckBox; +class QPushButton; +class QScrollArea; +class QVBoxLayout; +class ResizablePanel; class DeckAnalyticsWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp b/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp index add13ff21..c2f70759e 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp @@ -1,11 +1,19 @@ #include "deck_list_statistics_analyzer.h" #include "deck_list_model.h" -#include "deck_list_statistics_analyzer.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include #include +#include +#include +#include +#include #include -#include +#include DeckListStatisticsAnalyzer::DeckListStatisticsAnalyzer(QObject *parent, DeckListModel *_model, diff --git a/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.h b/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.h index 52ae751bf..c3643d65f 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.h +++ b/cockatrice/src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.h @@ -1,10 +1,12 @@ #ifndef COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H #define COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H -#include "deck_list_model.h" - #include +#include #include +#include +#include +#include #include class DeckListModel; diff --git a/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.cpp b/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.cpp index 250fe1ad3..f46679406 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.cpp +++ b/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.cpp @@ -1,11 +1,34 @@ #include "resizable_panel.h" +#include "abstract_analytics_panel_widget.h" #include "libcockatrice/utility/qt_utils.h" +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include ResizablePanel::ResizablePanel(const QString &_typeId, AbstractAnalyticsPanelWidget *analyticsPanel, QWidget *parent) : QWidget(parent), panel(analyticsPanel), typeId(_typeId) diff --git a/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.h b/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.h index d958ec64d..809703847 100644 --- a/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.h +++ b/cockatrice/src/interface/widgets/deck_analytics/resizable_panel.h @@ -1,19 +1,15 @@ #ifndef COCKATRICE_RESIZABLE_PANEL_H #define COCKATRICE_RESIZABLE_PANEL_H -#include "abstract_analytics_panel_widget.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include #include +#include + +class AbstractAnalyticsPanelWidget; +class QFrame; +class QPushButton; +class QTimer; class ResizablePanel : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_editor/card_database_view.cpp b/cockatrice/src/interface/widgets/deck_editor/card_database_view.cpp index 00388a3cd..e8f6398f7 100644 --- a/cockatrice/src/interface/widgets/deck_editor/card_database_view.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/card_database_view.cpp @@ -1,17 +1,35 @@ #include "card_database_view.h" #include "../../../client/settings/cache_settings.h" +#include "../../key_signals.h" #include "card_database_display_model.h" #include "card_database_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include + +class QWidget; static bool canBeCommander(const CardInfo &cardInfo) { diff --git a/cockatrice/src/interface/widgets/deck_editor/card_database_view.h b/cockatrice/src/interface/widgets/deck_editor/card_database_view.h index 668444199..c095c544d 100644 --- a/cockatrice/src/interface/widgets/deck_editor/card_database_view.h +++ b/cockatrice/src/interface/widgets/deck_editor/card_database_view.h @@ -3,12 +3,19 @@ #include "../../key_signals.h" +#include +#include +#include #include #include #include +#include -class CardDatabaseModel; class CardDatabaseDisplayModel; +class QModelIndex; +class QPoint; +class QWidget; +template class QList; /** * @brief The card database table. diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp index 6269f0323..57ae6eadd 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp @@ -2,10 +2,23 @@ #include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" #include "card_database_view.h" +#include "deck_editor_database_display_widget.h" +#include "deck_list_model.h" #include "deck_state_manager.h" #include "deck_zone_dialog.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include DeckEditorCardDatabaseDockWidget::DeckEditorCardDatabaseDockWidget(AbstractTabDeckEditor *parent) : QDockWidget(parent) { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h index 6af2e4432..b73843bc7 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h @@ -1,12 +1,10 @@ #ifndef COCKATRICE_DECK_EDITOR_CARD_DATABASE_DOCK_WIDGET_H #define COCKATRICE_DECK_EDITOR_CARD_DATABASE_DOCK_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" - #include +#include class AbstractTabDeckEditor; -class CardDatabase; class DeckEditorDatabaseDisplayWidget; class FilterTree; diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp index a78a9c9c5..1b920ea1d 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp @@ -1,8 +1,14 @@ #include "deck_editor_card_info_dock_widget.h" #include "../cards/card_info_frame_widget.h" +#include "../tabs/abstract_tab_deck_editor.h" +#include #include +#include +#include + +class ExactCard; DeckEditorCardInfoDockWidget::DeckEditorCardInfoDockWidget(AbstractTabDeckEditor *parent) : QDockWidget(parent), deckEditor(parent) diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h index 086ca2ca4..2f204306d 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h @@ -8,12 +8,13 @@ #ifndef DECK_EDITOR_CARD_INFO_DOCK_WIDGET_H #define DECK_EDITOR_CARD_INFO_DOCK_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../cards/card_info_frame_widget.h" - #include +#include class AbstractTabDeckEditor; +class CardInfoFrameWidget; +class ExactCard; + class DeckEditorCardInfoDockWidget : public QDockWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp index a83e25f5f..7ed398535 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp @@ -2,19 +2,30 @@ #include "../../../client/settings/cache_settings.h" #include "../../../filters/syntax_help.h" -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../../../interface/widgets/tabs/tab_supervisor.h" +#include "../../key_signals.h" #include "../../pixel_map_generator.h" +#include "../utility/custom_line_edit.h" +#include "card_database_display_model.h" +#include "card_database_model.h" #include "card_database_view.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" -#include -#include +#include +#include +#include +#include +#include #include -#include +#include #include #include -#include #include +#include +#include + +class FilterTree; DeckEditorDatabaseDisplayWidget::DeckEditorDatabaseDisplayWidget(QWidget *parent, CardDatabaseModel *databaseModel) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h index 5de4d211d..e9edec125 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_database_display_widget.h @@ -8,16 +8,21 @@ #ifndef DECK_EDITOR_DATABASE_DISPLAY_WIDGET_H #define DECK_EDITOR_DATABASE_DISPLAY_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../utility/custom_line_edit.h" +#include "libcockatrice/card/card_info.h" -#include +#include #include -#include -#include +#include class CardDatabaseView; -class AbstractTabDeckEditor; +class CardDatabaseDisplayModel; +class CardDatabaseModel; +class ExactCard; +class FilterTree; +class QAction; +class QHBoxLayout; +class QVBoxLayout; +class SearchLineEdit; class DeckEditorDatabaseDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp index 4b141e255..37dd57459 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp @@ -2,28 +2,75 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../key_signals.h" #include "../../pixel_map_generator.h" #include "../playmat/playmat_settings_dialog.h" -#include "../settings_page/user_interface_settings_page.h" +#include "../quick_settings/settings_button_widget.h" +#include "../tabs/abstract_tab_deck_editor.h" #include "../tabs/api/commander_spellbook/commander_bracket_widget.h" +#include "../utility/custom_line_edit.h" +#include "../visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h" +#include "deck_list_history_manager_widget.h" +#include "deck_list_model.h" #include "deck_list_style_proxy.h" #include "deck_state_manager.h" #include "deck_zone_dialog.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" +#include +#include +#include +#include #include +#include +#include #include +#include +#include #include +#include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include -#include #include #include +#include +#include static int findRestoreIndex(const CardRef &wanted, const QComboBox *combo) { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.h index 1e5f4e677..97ab8823e 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.h @@ -8,27 +8,36 @@ #ifndef DECK_EDITOR_DECK_DOCK_WIDGET_H #define DECK_EDITOR_DECK_DOCK_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" #include "../../key_signals.h" -#include "../utility/custom_line_edit.h" -#include "../visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h" -#include "deck_list_history_manager_widget.h" -#include "deck_list_style_proxy.h" +#include "libcockatrice/card/printing/exact_card.h" -#include -#include #include -#include -#include -#include -#include +#include +#include #include -#include -#include +#include class CommanderBracketWidget; class DeckListModel; class AbstractTabDeckEditor; +class DeckListHistoryManagerWidget; +class DeckListStyleProxy; +class DeckPreviewDeckTagsDisplayWidget; +class DeckStateManager; +class LineEditUnfocusable; +class QAction; +class QCheckBox; +class QComboBox; +class QItemSelectionModel; +class QLabel; +class QMenu; +class QModelIndex; +class QPoint; +class QPushButton; +class QTextEdit; +class QTimer; +class SettingsButtonWidget; + class DeckEditorDeckDockWidget : public QDockWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.cpp index c6b6e4416..0a47333fa 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.cpp @@ -4,11 +4,31 @@ #include "../../../client/settings/shortcuts_settings.h" #include "../../../filters/filter_builder.h" #include "../../../filters/filter_tree_model.h" +#include "../../key_signals.h" #include "../../pixel_map_generator.h" +#include "../tabs/abstract_tab_deck_editor.h" +#include "libcockatrice/filters/filter_card.h" +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include DeckEditorFilterDockWidget::DeckEditorFilterDockWidget(AbstractTabDeckEditor *parent) : QDockWidget(parent), deckEditor(parent) diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.h index b61fc72b5..7bb9c0045 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.h @@ -8,13 +8,18 @@ #ifndef DECK_EDITOR_FILTER_DOCK_WIDGET_H #define DECK_EDITOR_FILTER_DOCK_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" #include "../../key_signals.h" #include +#include class FilterTreeModel; class AbstractTabDeckEditor; +class QAction; +class QPoint; +class QTreeView; +class QWidget; + class DeckEditorFilterDockWidget : public QDockWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp index 06d8d1de7..d45e951ba 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp @@ -2,10 +2,15 @@ #include "../../../client/settings/cache_settings.h" #include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" +#include "../printing_selector/printing_selector.h" +#include "deck_editor_deck_dock_widget.h" #include "printing_disabled_info_widget.h" +#include #include +#include #include +#include DeckEditorPrintingSelectorDockWidget::DeckEditorPrintingSelectorDockWidget(AbstractTabDeckEditor *parent) : QDockWidget(parent), deckEditor(parent) diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.h index 1037b55fb..e20ae932d 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.h @@ -7,13 +7,13 @@ #ifndef DECK_EDITOR_PRINTING_SELECTOR_DOCK_WIDGET_H #define DECK_EDITOR_PRINTING_SELECTOR_DOCK_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../printing_selector/printing_selector.h" - #include +#include class PrintingDisabledInfoWidget; -class TabDeckEditor; +class AbstractTabDeckEditor; +class PrintingSelector; +class QWidget; class DeckEditorPrintingSelectorDockWidget : public QDockWidget { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp index c93f12b34..209dc7273 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp @@ -1,7 +1,28 @@ #include "deck_list_history_manager_widget.h" #include "../../pixel_map_generator.h" +#include "../quick_settings/settings_button_widget.h" #include "deck_state_manager.h" +#include "libcockatrice/deck_list/deck_list_history_manager.h" +#include "libcockatrice/deck_list/deck_list_memento.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class DeckListStyleProxy; DeckListHistoryManagerWidget::DeckListHistoryManagerWidget(DeckStateManager *_deckStateManager, DeckListStyleProxy *_styleProxy, diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.h b/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.h index ab53912e2..5ed44b0fd 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_list_history_manager_widget.h @@ -1,18 +1,20 @@ #ifndef COCKATRICE_DECK_EDITOR_DECK_LIST_HISTORY_MANAGER_WIDGET_H #define COCKATRICE_DECK_EDITOR_DECK_LIST_HISTORY_MANAGER_WIDGET_H +#include + +class DeckListStyleProxy; +class QAction; +class QHBoxLayout; +class QLabel; +class QListWidget; +class QListWidgetItem; +class QToolButton; +class SettingsButtonWidget; #ifndef COCKATRICE_DECK_UNDO_WIDGET_H #define COCKATRICE_DECK_UNDO_WIDGET_H -#include "../quick_settings/settings_button_widget.h" -#include "deck_list_style_proxy.h" - -#include -#include -#include #include -#include -#include class DeckStateManager; diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.cpp index e41529b22..1e1aefe58 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.cpp @@ -3,7 +3,10 @@ #include #include #include +#include +#include #include +#include QVariant DeckListStyleProxy::data(const QModelIndex &index, int role) const { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.h b/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.h index 52b7eea10..e4d1de4f4 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_list_style_proxy.h @@ -2,6 +2,7 @@ #define COCKATRICE_DECK_LIST_STYLE_PROXY_H #include +#include class DeckListStyleProxy : public QIdentityProxyModel { diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp index cfe989e9f..d4715c8d5 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp @@ -1,11 +1,28 @@ #include "deck_state_manager.h" #include "../../../client/settings/cache_settings.h" +#include "../../deck_loader/loaded_deck.h" +#include "deck_list_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/deck_list_memento.h" +#include "libcockatrice/deck_list/deck_list_node_tree.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" +#include +#include #include #include #include #include +#include + +class QModelIndex; DeckStateManager::DeckStateManager(QObject *parent) : QObject(parent), deckList(QSharedPointer(new DeckList)), diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.h b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.h index 2c8b34a39..98876947b 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.h @@ -2,13 +2,22 @@ #define COCKATRICE_DECK_STATE_MANAGER_H #include "../../deck_loader/loaded_deck.h" -#include "deck_list_model.h" +#include +#include #include +#include +#include #include #include +#include class DeckListHistoryManager; +class DeckListModel; +class DecklistNodeTree; +class ExactCard; +struct CardRef; +struct PlaymatInfo; /** * @brief This class centralizes the management of the state of the deck in the deck editor tab. diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.cpp index 9a0be2570..cb9667603 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.cpp @@ -2,10 +2,14 @@ #include #include +#include +#include #include #include +#include #include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.h b/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.h index 6f55617a8..f4c9c0f9d 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.h +++ b/cockatrice/src/interface/widgets/deck_editor/deck_zone_dialog.h @@ -8,9 +8,9 @@ #define DECK_ZONE_DIALOG_H #include -#include #include #include +#include class QComboBox; class QDialogButtonBox; diff --git a/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.cpp b/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.cpp index 23670b1b3..b2c4dd303 100644 --- a/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.cpp @@ -3,10 +3,13 @@ #include "../dialogs/override_printing_warning.h" #include +#include #include #include +#include #include -#include +#include +#include PrintingDisabledInfoWidget::PrintingDisabledInfoWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.h b/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.h index 0851ccfad..c14c758ff 100644 --- a/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.h +++ b/cockatrice/src/interface/widgets/deck_editor/printing_disabled_info_widget.h @@ -1,6 +1,7 @@ #ifndef COCKATRICE_PRINTING_DISABLED_INFO_WIDGET_H #define COCKATRICE_PRINTING_DISABLED_INFO_WIDGET_H #include +#include class QPushButton; class QLabel; diff --git a/cockatrice/src/interface/widgets/deck_share/deck_share_utils.cpp b/cockatrice/src/interface/widgets/deck_share/deck_share_utils.cpp index 4343f0aab..0ebdc0647 100644 --- a/cockatrice/src/interface/widgets/deck_share/deck_share_utils.cpp +++ b/cockatrice/src/interface/widgets/deck_share/deck_share_utils.cpp @@ -3,9 +3,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include diff --git a/cockatrice/src/interface/widgets/deck_share/share_bar_widget.h b/cockatrice/src/interface/widgets/deck_share/share_bar_widget.h index ede9fb41b..f97cc6788 100644 --- a/cockatrice/src/interface/widgets/deck_share/share_bar_widget.h +++ b/cockatrice/src/interface/widgets/deck_share/share_bar_widget.h @@ -7,7 +7,9 @@ #ifndef SHARE_BAR_WIDGET_H #define SHARE_BAR_WIDGET_H +#include #include +#include class QLabel; class QLineEdit; diff --git a/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.cpp b/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.cpp index 21ec80e08..3bb829089 100644 --- a/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.cpp +++ b/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.cpp @@ -2,14 +2,20 @@ #include "../cards/additional_info/color_identity_widget.h" #include "../cards/deck_preview_card_picture_widget.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/card_ref.h" #include +#include #include #include #include #include +#include +#include #include #include +#include SharedDeckPreviewWidget::SharedDeckPreviewWidget(QWidget *parent, const CardDatabaseQuerier *querier, diff --git a/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.h b/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.h index bd4c4ee5f..bff7de743 100644 --- a/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.h +++ b/cockatrice/src/interface/widgets/deck_share/shared_deck_preview_widget.h @@ -7,15 +7,15 @@ #ifndef SHARED_DECK_PREVIEW_WIDGET_H #define SHARED_DECK_PREVIEW_WIDGET_H +#include #include +#include class ColorIdentityWidget; class DeckPreviewCardPictureWidget; class QCheckBox; class QFrame; -class QKeyEvent; class QLabel; -class QResizeEvent; class CardDatabaseQuerier; /** diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_connect.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_connect.cpp index 700012d45..7a7e31a58 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_connect.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_connect.cpp @@ -2,19 +2,34 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" +#include "../server/handle_public_servers.h" +#include "../server/user/user_info_connection.h" +#include "libcockatrice/utility/macros.h" #include #include +#include #include #include #include -#include +#include +#include #include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include #include +#include + +class QWidget; DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent) { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_connect.h b/cockatrice/src/interface/widgets/dialogs/dlg_connect.h index 083dad0ad..10cb5366a 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_connect.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_connect.h @@ -7,12 +7,13 @@ #ifndef DLG_CONNECT_H #define DLG_CONNECT_H -#include "../interface/widgets/server/handle_public_servers.h" -#include "../interface/widgets/server/user/user_info_connection.h" - #include #include +#include +#include #include +#include +#include class QCheckBox; class QComboBox; @@ -23,6 +24,9 @@ class QLabel; class QPushButton; class QRadioButton; class QVBoxLayout; +class HandlePublicServers; +class QWidget; +class UserConnection_Information; class DlgConnect : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp index a4a31d78d..f2dd8c1e4 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp @@ -1,7 +1,7 @@ #include "dlg_convert_deck_to_cod_format.h" #include "../../../client/settings/cache_settings.h" -#include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/deck_file_format.h" #include #include @@ -10,6 +10,7 @@ #include #include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.h b/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.h index 526582135..de2fb9a63 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.h @@ -8,14 +8,17 @@ #ifndef DIALOG_CONVERT_DECK_TO_COD_FORMAT_H #define DIALOG_CONVERT_DECK_TO_COD_FORMAT_H -#include #include -#include -#include -#include +#include +#include #include +#include class QWidget; +class QCheckBox; +class QDialogButtonBox; +class QLabel; +class QVBoxLayout; class DialogConvertDeckToCodFormat : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_create_game.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_create_game.cpp index 59f3e033d..104b695e6 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_create_game.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_create_game.cpp @@ -2,23 +2,35 @@ #include "../../../client/settings/cache_settings.h" #include "../interface/widgets/tabs/tab_room.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/utility/macros.h" -#include #include +#include #include #include #include #include #include +#include #include #include #include #include +#include +#include #include +#include #include #include #include #include +#include +#include + +class QWidget; void DlgCreateGame::sharedCtor() { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_create_game.h b/cockatrice/src/interface/widgets/dialogs/dlg_create_game.h index 61925286d..71b09997c 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_create_game.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_create_game.h @@ -9,7 +9,9 @@ #include #include +#include #include +#include class QCheckBox; class QDialogButtonBox; @@ -22,6 +24,7 @@ class QSpinBox; class Response; class ServerInfo_Game; class TabRoom; +class QWidget; class DlgCreateGame : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.cpp index e9c73b025..9eb064beb 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.cpp @@ -2,9 +2,20 @@ #include "../../../client/settings/cache_settings.h" +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include +#include #include DlgDefaultTagsEditor::DlgDefaultTagsEditor(QWidget *parent) : QDialog(parent) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.h b/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.h index e584d0731..081701485 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_default_tags_editor.h @@ -9,9 +9,15 @@ #define DLG_DEFAULT_TAGS_EDITOR_H #include -#include -#include -#include +#include + +class QHBoxLayout; +class QLineEdit; +class QListWidget; +class QListWidgetItem; +class QPushButton; +class QVBoxLayout; +class QWidget; class DlgDefaultTagsEditor : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.cpp index 120e20f3e..520ece007 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.cpp @@ -3,12 +3,22 @@ #include #include #include +#include #include +#include +#include #include #include +#include +#include #include +#include +#include #include #include +#include + +class QWidget; DlgEditAvatar::DlgEditAvatar(QWidget *parent) : QDialog(parent), image() { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.h b/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.h index 9ac774b24..4df45711c 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_avatar.h @@ -7,16 +7,18 @@ #ifndef DLG_EDITAVATAR_H #define DLG_EDITAVATAR_H -#include +#include #include -#include +#include #include +#include + +class QWidget; inline Q_LOGGING_CATEGORY(DlgEditAvatarLog, "dlg_edit_avatar"); class QLabel; class QPushButton; -class QCheckBox; class DlgEditAvatar : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.cpp index 4310c03fc..59f80c79c 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.cpp @@ -4,12 +4,17 @@ #include #include -#include #include #include +#include +#include +#include #include #include +class QVBoxLayout; +class QWidget; + DlgEditPassword::DlgEditPassword(QWidget *parent) : QDialog(parent) { oldPasswordLabel = new QLabel(tr("Old password:")); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.h b/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.h index 85c72233d..e80ede3f3 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_password.h @@ -9,10 +9,11 @@ #include #include +#include +#include class QLabel; -class QPushButton; -class QCheckBox; +class QWidget; class DlgEditPassword : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.cpp index a56aa8e35..cbf61a394 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.cpp @@ -2,25 +2,41 @@ #include "../../pixel_map_generator.h" #include "../interface/widgets/utility/get_text_with_max.h" +#include "card_database_display_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" #include +#include #include #include #include #include #include +#include #include -#include +#include #include #include #include +#include +#include +#include #include #include +#include +#include +#include #include #include #include #include #include +#include + +class QWidget; DlgEditTokens::DlgEditTokens(QWidget *parent) : QDialog(parent), currentCard(nullptr) { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.h b/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.h index 202212e98..cde89d22b 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_tokens.h @@ -8,7 +8,11 @@ #define DLG_EDIT_TOKENS_H #include +#include +#include +#include #include +#include class QModelIndex; class CardDatabaseModel; @@ -17,6 +21,7 @@ class QLabel; class QComboBox; class QLineEdit; class QTreeView; +class QWidget; class DlgEditTokens : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.cpp index 85b95f335..ffe8391a0 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.cpp @@ -4,10 +4,18 @@ #include #include -#include #include +#include +#include +#include +#include +#include +#include #include +class QVBoxLayout; +class QWidget; + DlgEditUser::DlgEditUser(QWidget *parent, QString email, QString country, QString realName) : QDialog(parent) { emailLabel = new QLabel(tr("Email:")); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.h b/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.h index 35a8bfb46..0385c2bbe 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_edit_user.h @@ -10,10 +10,11 @@ #include #include #include +#include +#include class QLabel; -class QPushButton; -class QCheckBox; +class QWidget; class DlgEditUser : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.cpp index 7e174a228..cd3c3893e 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.cpp @@ -1,15 +1,25 @@ #include "dlg_filter_games.h" +#include "../server/games_model.h" + #include #include -#include #include #include #include +#include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include + +class QWidget; DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, const GamesProxyModel *_gamesProxyModel, diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.h b/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.h index 1cf822b89..d7c11d0f1 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_filter_games.h @@ -7,20 +7,23 @@ #ifndef DLG_FILTER_GAMES_H #define DLG_FILTER_GAMES_H -#include "../interface/widgets/server/games_model.h" +#include "../server/game_filter_configs.h" -#include -#include #include #include #include +#include +#include #include +#include class QCheckBox; class QComboBox; class QGroupBox; class QLineEdit; class QSpinBox; +class GamesProxyModel; +class QWidget; class DlgFilterGames : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp index c21955373..3ee74faab 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp @@ -4,12 +4,16 @@ #include #include -#include +#include #include #include +#include +#include #include #include +class QWidget; + DlgForgotPasswordChallenge::DlgForgotPasswordChallenge(QWidget *parent) : QDialog(parent) { QString lastfphost; diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.h b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.h index d32e2fc3e..f5678af17 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_challenge.h @@ -7,13 +7,13 @@ #ifndef DLG_FORGOTPASSWORDCHALLENGE_H #define DLG_FORGOTPASSWORDCHALLENGE_H -#include #include #include +#include +#include class QLabel; -class QPushButton; -class QCheckBox; +class QWidget; class DlgForgotPasswordChallenge : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.cpp index 4ee0c9c88..0cb1773b6 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.cpp @@ -4,12 +4,16 @@ #include #include -#include +#include #include #include +#include +#include #include #include +class QWidget; + DlgForgotPasswordRequest::DlgForgotPasswordRequest(QWidget *parent) : QDialog(parent) { QString lastfphost; diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.h b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.h index 2cf352e0d..ff255c748 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_request.h @@ -7,13 +7,13 @@ #ifndef DLG_FORGOTPASSWORDREQUEST_H #define DLG_FORGOTPASSWORDREQUEST_H -#include #include #include +#include +#include class QLabel; -class QPushButton; -class QCheckBox; +class QWidget; class DlgForgotPasswordRequest : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp index 2800d5c0c..6c1b95b43 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp @@ -4,12 +4,18 @@ #include #include -#include +#include #include #include +#include +#include +#include #include #include +class QVBoxLayout; +class QWidget; + DlgForgotPasswordReset::DlgForgotPasswordReset(QWidget *parent) : QDialog(parent) { QString lastfphost; diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.h b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.h index 8a443b906..995d67359 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_forgot_password_reset.h @@ -7,13 +7,13 @@ #ifndef DLG_FORGOTPASSWORDRESET_H #define DLG_FORGOTPASSWORDRESET_H -#include #include #include +#include +#include class QLabel; -class QPushButton; -class QCheckBox; +class QWidget; class DlgForgotPasswordReset : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.cpp index b5451bb2c..cf503856f 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.cpp @@ -6,13 +6,18 @@ #include #include -#include #include #include +#include #include +#include #include #include #include +#include +#include + +class QWidget; DlgInviteToGame::DlgInviteToGame(TabSupervisor *_tabSupervisor, const QString &_inviteUrl, diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.h b/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.h index bbb589bdb..cfcc48733 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_invite_to_game.h @@ -8,12 +8,16 @@ #define DLG_INVITE_TO_GAME_H #include +#include +#include #include +#include class QLineEdit; class QPushButton; class TabSupervisor; class UserListWidget; +class QWidget; class DlgInviteToGame : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.cpp index 626ebed50..cbf24db87 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.cpp @@ -3,8 +3,13 @@ #include "../../../client/settings/cache_settings.h" #include "../../deck_loader/deck_loader.h" +#include +#include #include #include + +class QWidget; + DlgLoadDeck::DlgLoadDeck(QWidget *parent) : QFileDialog(parent, tr("Load Deck")) { QString startingDir = SettingsCache::instance().recents().getLatestDeckDirPath(); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.h b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.h index 27d658902..5ba07c01d 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck.h @@ -9,6 +9,9 @@ #define DLG_LOAD_DECK_H #include +#include + +class QWidget; /** * The file dialog for "Load Deck" operations. diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp index a3242c797..2c0fd3f6f 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp @@ -9,12 +9,19 @@ #include #include #include +#include +#include +#include #include #include #include #include #include +#include #include +#include + +class QWidget; /** * Creates the main layout and connects the signals that are common to all versions of this window diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.h b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.h index dce9d712c..f3cbb7b62 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.h @@ -8,13 +8,16 @@ #ifndef DLG_LOAD_DECK_FROM_CLIPBOARD_H #define DLG_LOAD_DECK_FROM_CLIPBOARD_H -#include "../../deck_loader/loaded_deck.h" +#include "libcockatrice/deck_list/deck_list.h" -#include #include +#include +#include class QPlainTextEdit; class QPushButton; +class QCheckBox; +class QWidget; /** * Base class for dialog windows for actions that involve loading decks from text input. diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp index ba00873d9..88b7e2bb3 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp @@ -1,16 +1,37 @@ #include "dlg_load_deck_from_website.h" +#include "../../deck_loader/card_node_function.h" +#include "parsers/deck_link_to_api_transformer.h" +#include "parsers/interface_json_deck_parser.h" + #include +#include #include +#include #include #include #include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include #include +class QWidget; + DlgLoadDeckFromWebsite::DlgLoadDeckFromWebsite(QWidget *parent) : QDialog(parent) { nam = new QNetworkAccessManager(this); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.h b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.h index 2890148b9..3f6e759f2 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_deck_from_website.h @@ -8,15 +8,21 @@ #ifndef DLG_LOAD_DECK_FROM_WEBSITE_H #define DLG_LOAD_DECK_FROM_WEBSITE_H -#include "../client/network/parsers/deck_link_to_api_transformer.h" #include "../client/network/parsers/interface_json_deck_parser.h" +#include "libcockatrice/deck_list/deck_list.h" #include -#include -#include #include -#include -#include +#include +#include + +class QLabel; +class QLineEdit; +class QNetworkAccessManager; +class QVBoxLayout; +class QWidget; +enum class DeckProvider; +template class QSharedPointer; inline Q_LOGGING_CATEGORY(DlgLoadDeckFromWebsiteLog, "dlg_load_deck_from_website"); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.cpp index ffe08bec9..a56009fe4 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.cpp @@ -3,9 +3,13 @@ #include "../interface/widgets/server/remote/remote_decklist_tree_widget.h" #include +#include #include +#include #include +class QWidget; + DlgLoadRemoteDeck::DlgLoadRemoteDeck(AbstractClient *_client, QWidget *parent) : QDialog(parent), client(_client) { dirView = new RemoteDeckList_TreeWidget(client); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.h b/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.h index 9c81e9ae3..cfec16d90 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_load_remote_deck.h @@ -9,12 +9,13 @@ #define DLG_STARTGAME_H #include +#include class RemoteDeckList_TreeWidget; class QModelIndex; class AbstractClient; -class QPushButton; class QDialogButtonBox; +class QWidget; class DlgLoadRemoteDeck : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.cpp index eca0ec658..858deb751 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.cpp @@ -7,10 +7,13 @@ #include #include #include +#include #include #include #include +class QWidget; + DlgLocalGameOptions::DlgLocalGameOptions(QWidget *parent) : QDialog(parent) { numberPlayersLabel = new QLabel(tr("Players:"), this); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.h b/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.h index 4307581a4..0725a08db 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_local_game_options.h @@ -11,6 +11,9 @@ #define DLG_LOCAL_GAME_OPTIONS_H #include +#include + +class QWidget; struct LocalGameOptions { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.cpp index 86647ef26..0a18a759f 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.cpp @@ -7,6 +7,8 @@ #include #include +class QWidget; + DlgLoginPrompt::DlgLoginPrompt(const QString &serverText, QWidget *parent) : QDialog(parent) { setWindowTitle(tr("Sign in")); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.h b/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.h index e47924058..47bf3bcf4 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_login_prompt.h @@ -8,9 +8,12 @@ #define DLG_LOGIN_PROMPT_H #include +#include +#include class QCheckBox; class QLineEdit; +class QWidget; /** * @brief Small sign-in dialog used when a cockatrice:// link needs credentials diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp index 556c270be..dbfe38e26 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp @@ -4,21 +4,42 @@ #include "../../pixel_map_generator.h" #include "../interface/card_picture_loader/card_picture_loader.h" #include "../interface/widgets/utility/custom_line_edit.h" +#include "libcockatrice/card/database/card_database.h" +#include +#include +#include #include +#include #include +#include #include #include #include #include #include +#include #include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include #include +#include +#include #include #include #include @@ -157,12 +178,6 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) sortWarning->setLayout(sortWarningLayout); sortWarning->setVisible(false); - includeRebalancedCards = SettingsCache::instance().cardsDisplay().getIncludeRebalancedCards(); - QCheckBox *includeRebalancedCardsCheckBox = - new QCheckBox(tr("Include cards rebalanced for Alchemy [requires restart]")); - includeRebalancedCardsCheckBox->setChecked(includeRebalancedCards); - connect(includeRebalancedCardsCheckBox, &QAbstractButton::toggled, this, &WndSets::includeRebalancedCardsChanged); - buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, &QDialogButtonBox::accepted, this, &WndSets::actSave); connect(buttonBox, &QDialogButtonBox::rejected, this, &WndSets::actRestore); @@ -176,9 +191,8 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) mainLayout->addWidget(enableSomeButton, 2, 1); mainLayout->addWidget(disableSomeButton, 2, 2); mainLayout->addWidget(sortWarning, 3, 1, 1, 2); - mainLayout->addWidget(includeRebalancedCardsCheckBox, 4, 1, 1, 2); - mainLayout->addWidget(hintsGroupBox, 5, 1, 1, 2); - mainLayout->addWidget(buttonBox, 6, 1, 1, 2); + mainLayout->addWidget(hintsGroupBox, 4, 1, 1, 2); + mainLayout->addWidget(buttonBox, 5, 1, 1, 2); mainLayout->setColumnStretch(1, 1); mainLayout->setColumnStretch(2, 1); @@ -249,15 +263,9 @@ void WndSets::resetSort() sortWarning->setVisible(false); } -void WndSets::includeRebalancedCardsChanged(bool _includeRebalancedCards) -{ - includeRebalancedCards = _includeRebalancedCards; -} - void WndSets::actSave() { model->save(CardDatabaseManager::getInstance()); - SettingsCache::instance().cardsDisplay().setIncludeRebalancedCards(includeRebalancedCards); CardPictureLoader::clearPixmapCache(); const auto reloadOk1 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->reloadCardDatabasesAndNotify(); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h index 2ed5eca0f..67b4c90b1 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h @@ -7,12 +7,11 @@ #ifndef DLG_MANAGE_SETS_H #define DLG_MANAGE_SETS_H -#include -#include -#include #include +#include +#include +#include -class CardDatabase; class LineEditUnfocusable; class QGroupBox; class QItemSelection; @@ -20,7 +19,14 @@ class QPushButton; class QTreeView; class SetsDisplayModel; class SetsModel; -class SetsProxyModel; +class QAction; +class QDialogButtonBox; +class QGridLayout; +class QHBoxLayout; +class QLabel; +class QToolBar; +class QWidget; +template class QSet; class WndSets : public QMainWindow { @@ -46,7 +52,6 @@ private: int sortIndex; Qt::SortOrder sortOrder; bool setOrderIsSorted; - bool includeRebalancedCards; enum { NO_SETS_SELECTED, @@ -81,7 +86,6 @@ private slots: void actDisableResetButton(const QString &filterText); void actSort(int index); void actIgnoreWarning(); - void includeRebalancedCardsChanged(bool _includeRebalancedCardsChanged); }; #endif diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.cpp index 1af83bfb5..52c9eaef0 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.cpp @@ -2,7 +2,11 @@ #include "../utility/report_utils.h" #include "abstract_client.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_report.pb.h" +#include +#include #include #include #include @@ -10,16 +14,22 @@ #include #include #include -#include +#include #include +#include #include #include +#include #include #include #include #include #include #include +#include +#include + +class QWidget; namespace { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.h b/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.h index 09b1963dd..dc9f90d2d 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_my_reports.h @@ -3,8 +3,9 @@ #include #include -#include +#include #include +#include class AbstractClient; class QTableWidget; @@ -12,6 +13,8 @@ class QTextEdit; class QLineEdit; class QPushButton; class QLabel; +class QWidget; +class Response; class DlgMyReports : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_register.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_register.cpp index 6d022861c..9e32e87d1 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_register.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_register.cpp @@ -10,14 +10,23 @@ #include #include #include +#include #include +#include #include +#include #include #include +#include +#include +#include #include +#include #include #include +class QWidget; + DlgRegister::DlgRegister(QWidget *parent) : QDialog(parent) { // ── Server picker ────────────────────────────────────────────────── diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_register.h b/cockatrice/src/interface/widgets/dialogs/dlg_register.h index ce14eb427..10ea98543 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_register.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_register.h @@ -5,12 +5,16 @@ #include #include #include +#include +#include +#include class HandlePublicServers; class QLabel; class QPushButton; class QRadioButton; class UserConnection_Information; +class QWidget; class DlgRegister : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_report_user.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_report_user.cpp index 7b855af96..b1ae479fe 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_report_user.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_report_user.cpp @@ -1,21 +1,31 @@ #include "dlg_report_user.h" #include "abstract_client.h" +#include "libcockatrice/protocol/pb/response.pb.h" #include #include +#include #include #include #include #include +#include #include +#include #include #include +#include #include #include +#include #include #include #include +#include +#include + +class QWidget; DlgReportUser::DlgReportUser(AbstractClient *_client, const QString &_reportedUser, diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_report_user.h b/cockatrice/src/interface/widgets/dialogs/dlg_report_user.h index f8d5938ce..c7fce055d 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_report_user.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_report_user.h @@ -2,7 +2,8 @@ #define COCKATRICE_DLG_REPORT_USER_H #include -#include +#include +#include class AbstractClient; class QComboBox; @@ -10,6 +11,8 @@ class QDialogButtonBox; class QLineEdit; class QTextEdit; class QLabel; +class QWidget; +class Response; class DlgReportUser : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp index 8eed083e1..55c6569f7 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp @@ -1,26 +1,59 @@ #include "dlg_select_set_for_cards.h" #include "../../deck_loader/card_node_function.h" -#include "../../deck_loader/deck_loader.h" #include "../deck_editor/deck_state_manager.h" #include "../interface/widgets/cards/card_info_picture_widget.h" #include "../interface/widgets/general/layout_containers/flow_widget.h" +#include "deck_list_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include #include #include +#include +#include #include +#include #include -#include -#include +#include +#include +#include +#include DlgSelectSetForCards::DlgSelectSetForCards(QWidget *parent, DeckStateManager *deckStateManger) : QDialog(parent), deckStateManager(deckStateManger) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h index 4528552d0..89cc43662 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h @@ -7,19 +7,23 @@ #ifndef DLG_SELECT_SET_FOR_CARDS_H #define DLG_SELECT_SET_FOR_CARDS_H -#include "../interface/widgets/general/layout_containers/flow_widget.h" - -#include #include -#include -#include +#include #include -#include -#include -#include +#include +#include +#include +#include class DeckStateManager; class SetEntryWidget; // Forward declaration +class FlowWidget; +class QCheckBox; +class QLabel; +class QListWidget; +class QPushButton; +class QScrollArea; +class QVBoxLayout; class DlgSelectSetForCards : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_settings.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_settings.cpp index 581920dbc..d41c948eb 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_settings.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_settings.cpp @@ -8,6 +8,7 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" #include "../main.h" +#include "../settings_page/abstract_settings_page.h" #include "../settings_page/appearance_settings_page.h" #include "../settings_page/deck_editor_settings_page.h" #include "../settings_page/general_settings_page.h" @@ -18,33 +19,59 @@ #include "../settings_page/sound_settings_page.h" #include "../settings_page/storage_settings_page.h" #include "../settings_page/user_interface_settings_page.h" +#include "libcockatrice/card/database/card_database.h" #include "libcockatrice/card/database/card_database_loader.h" #include "libcockatrice/card/database/card_database_manager.h" +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include #include #include #include +#include #include +#include #include #include #include +#include +#include +#include +#include +#include #include #include +#include #include #include #include #include #include +#include +#include #include #include +#include #include #include +#include +#include #include #include +#include + +class QModelIndex; /** * @brief Wraps a widget in a scroll area for long settings pages diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_settings.h b/cockatrice/src/interface/widgets/dialogs/dlg_settings.h index 845c0b4d6..1f15e76d5 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_settings.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_settings.h @@ -7,9 +7,15 @@ #define DLG_SETTINGS_H #include +#include #include +#include +#include +#include class QPushButton; +class QModelIndex; +class QWidget; inline Q_LOGGING_CATEGORY(DlgSettingsLog, "dlg_settings"); @@ -17,7 +23,6 @@ class QStackedWidget; class QToolButton; class QListView; class QLineEdit; - class AbstractSettingsPage; class SettingsSearchModel; class SettingsSearchDelegate; diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.cpp index 897d32062..eec80a7e8 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.cpp @@ -9,16 +9,21 @@ #include #include #include +#include #include #include +#include #include #include #include #include #include -#include #include #include +#include + +class QWidget; +template class QSharedPointer; DlgShareDeck::DlgShareDeck(AbstractClient *_client, const QSharedPointer &_deck, QWidget *_parent) : QDialog(_parent), client(_client), deck(_deck), shareTimeoutTimer(new QTimer(this)) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.h b/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.h index 162fa3677..108a8c38b 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_share_deck.h @@ -9,6 +9,7 @@ #include #include +#include class AbstractClient; class CommandContainer; @@ -17,6 +18,8 @@ class QDialogButtonBox; class QLineEdit; class QTimer; class Response; +class QWidget; +template class QSharedPointer; /** * @brief Slim dialog to create a temporary share for the deck open in the editor. diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.cpp index cd7ecdcdd..8ad91dcaf 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.cpp @@ -3,14 +3,19 @@ #include "../deck_share/shared_deck_preview_widget.h" #include "../general/layout_containers/flow_widget.h" -#include +#include #include #include +#include #include #include +#include #include -#include +#include #include +#include + +class QWidget; DlgSharedDecksPreview::DlgSharedDecksPreview(QWidget *parent, const CardDatabaseQuerier *querier, diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.h b/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.h index 31820e3a0..fab7ba6bf 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_shared_decks_preview.h @@ -3,14 +3,17 @@ #include #include +#include +#include +#include class FlowWidget; -class QCloseEvent; class QLabel; class QPushButton; class ServerInfo_DeckShareItem; class SharedDeckPreviewWidget; class CardDatabaseQuerier; +class QWidget; /** * @brief Non-modal preview of the decks contained in a shared-deck link. diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.cpp index 4322beb8c..3d50480cc 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.cpp @@ -2,9 +2,17 @@ #include "../../../client/settings/cache_settings.h" +#include #include +#include +#include +#include +#include +#include #include +class QWidget; + DlgStartupCardCheck::DlgStartupCardCheck(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("Card Update Check")); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.h b/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.h index d26610983..0d0fb6670 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_startup_card_check.h @@ -7,12 +7,15 @@ #ifndef DLG_STARTUP_CARD_CHECK_H #define DLG_STARTUP_CARD_CHECK_H -#include #include -#include -#include -#include -#include +#include + +class QButtonGroup; +class QDialogButtonBox; +class QLabel; +class QRadioButton; +class QVBoxLayout; +class QWidget; class DlgStartupCardCheck : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp index 3d3619bf0..511ff1c7d 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp @@ -7,9 +7,19 @@ #include #include #include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #define MIN_TIP_IMAGE_HEIGHT 200 #define MIN_TIP_IMAGE_WIDTH 200 diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.h b/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.h index e493481d0..689814115 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_tip_of_the_day.h @@ -7,12 +7,15 @@ #ifndef DLG_TIPOFDAY_H #define DLG_TIPOFDAY_H -#include #include -#include -#include #include -#include +#include + +class QDialogButtonBox; +class QHBoxLayout; +class QPixmap; +class QVBoxLayout; +class QWidget; inline Q_LOGGING_CATEGORY(DlgTipOfTheDayLog, "dlg_tip_of_the_day"); diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp index bac270580..76bb13248 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp @@ -4,18 +4,33 @@ #include "../client/network/update/client/client_update_checker.h" #include "../client/network/update/client/release_channel.h" #include "../interface/window_main.h" +#include "update/client/update_downloader.h" +#include +#include #include +#include +#include #include +#include #include #include #include +#include +#include #include +#include +#include +#include #include #include +#include +#include +#include #include #include -#include +#include +#include #include // Executable that, when it sits next to the downloaded update installer, is installed instead of diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_update.h b/cockatrice/src/interface/widgets/dialogs/dlg_update.h index 2cef46e70..026a54a8c 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_update.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_update.h @@ -7,17 +7,24 @@ #ifndef DLG_UPDATE_H #define DLG_UPDATE_H -#include "../client/network/update/client/update_downloader.h" +#include "../../../client/network/update/client/release_channel.h" -#include +#include #include -#include -#include +#include +#include +#include +#include + +class QDialogButtonBox; +class QLabel; +class QProgressBar; +class QPushButton; +class QWidget; +class UpdateDownloader; inline Q_LOGGING_CATEGORY(DlgUpdateLog, "dlg_update"); -class Release; - class DlgUpdate : public QDialog { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_view_log.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_view_log.cpp index 957e039c0..d55e800a1 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_view_log.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_view_log.cpp @@ -4,13 +4,18 @@ #include "../../logger.h" #include +#include #include +#include +#include #include #include #include #include #include +class QWidget; + DlgViewLog::DlgViewLog(QWidget *parent) : QDialog(parent) { logArea = new QPlainTextEdit; diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_view_log.h b/cockatrice/src/interface/widgets/dialogs/dlg_view_log.h index 5c7315b50..d63ff5ffc 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_view_log.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_view_log.h @@ -7,11 +7,14 @@ #ifndef DLG_VIEWLOG_H #define DLG_VIEWLOG_H -#include #include +#include +#include class QPlainTextEdit; -class QCloseEvent; +class QCheckBox; +class QPushButton; +class QWidget; class DlgViewLog : public QDialog { diff --git a/cockatrice/src/interface/widgets/dialogs/override_printing_warning.cpp b/cockatrice/src/interface/widgets/dialogs/override_printing_warning.cpp index 33d102f5e..57f7ff7f5 100644 --- a/cockatrice/src/interface/widgets/dialogs/override_printing_warning.cpp +++ b/cockatrice/src/interface/widgets/dialogs/override_printing_warning.cpp @@ -3,7 +3,13 @@ #include "../../card_picture_loader/card_picture_loader.h" #include "../../client/settings/cache_settings.h" +#include +#include +#include #include + +class QWidget; + bool OverridePrintingWarning::execMessageBox(QWidget *parent, bool enable) { QString message; diff --git a/cockatrice/src/interface/widgets/dialogs/override_printing_warning.h b/cockatrice/src/interface/widgets/dialogs/override_printing_warning.h index f2c926fc3..6c5891373 100644 --- a/cockatrice/src/interface/widgets/dialogs/override_printing_warning.h +++ b/cockatrice/src/interface/widgets/dialogs/override_printing_warning.h @@ -1,6 +1,7 @@ #ifndef COCKATRICE_OVERRIDE_PRINTING_WARN_H #define COCKATRICE_OVERRIDE_PRINTING_WARN_H -#include + +class QWidget; namespace OverridePrintingWarning { diff --git a/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.cpp b/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.cpp index 66170792a..3463fe6df 100644 --- a/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.cpp +++ b/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.cpp @@ -2,11 +2,20 @@ #include #include -#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include #include +class QObject; + #define TIPDDBMODEL_COLUMNS 3 TipOfTheDay::TipOfTheDay(QString _title, QString _content, QString _imagePath, QDate _date) diff --git a/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.h b/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.h index 9cda07e2b..4e6e23567 100644 --- a/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.h +++ b/cockatrice/src/interface/widgets/dialogs/tip_of_the_day.h @@ -9,6 +9,12 @@ #include #include +#include +#include +#include + +class QObject; +template class QList; class TipOfTheDay { diff --git a/cockatrice/src/interface/widgets/general/background_sources.h b/cockatrice/src/interface/widgets/general/background_sources.h index 423111bb6..775d55895 100644 --- a/cockatrice/src/interface/widgets/general/background_sources.h +++ b/cockatrice/src/interface/widgets/general/background_sources.h @@ -9,7 +9,10 @@ #include #include +#include #include +#include +#include class BackgroundSources { diff --git a/cockatrice/src/interface/widgets/general/display/background_plate_widget.cpp b/cockatrice/src/interface/widgets/general/display/background_plate_widget.cpp index aad259900..fd9ad67a8 100644 --- a/cockatrice/src/interface/widgets/general/display/background_plate_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/background_plate_widget.cpp @@ -1,9 +1,9 @@ #include "background_plate_widget.h" -#include #include #include -#include +#include +#include BackgroundPlateWidget::BackgroundPlateWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/general/display/background_plate_widget.h b/cockatrice/src/interface/widgets/general/display/background_plate_widget.h index 1fc1bc3ba..6634069c4 100644 --- a/cockatrice/src/interface/widgets/general/display/background_plate_widget.h +++ b/cockatrice/src/interface/widgets/general/display/background_plate_widget.h @@ -2,6 +2,7 @@ #define COCKATRICE_BACKGROUND_PLATE_WIDGET_H #include +#include class BackgroundPlateWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/banner_widget.cpp b/cockatrice/src/interface/widgets/general/display/banner_widget.cpp index 31f384cac..baf46bbba 100644 --- a/cockatrice/src/interface/widgets/general/display/banner_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/banner_widget.cpp @@ -2,10 +2,15 @@ #include "../../../pixel_map_generator.h" +#include +#include +#include #include -#include #include -#include +#include +#include +#include +#include BannerWidget::BannerWidget(QWidget *parent, const QString &text, Qt::Orientation orientation, int transparency_) : QWidget(parent), gradientOrientation(orientation), transparency(qBound(0, transparency_, 100)) diff --git a/cockatrice/src/interface/widgets/general/display/banner_widget.h b/cockatrice/src/interface/widgets/general/display/banner_widget.h index 77a05abb6..06556089b 100644 --- a/cockatrice/src/interface/widgets/general/display/banner_widget.h +++ b/cockatrice/src/interface/widgets/general/display/banner_widget.h @@ -10,8 +10,10 @@ #define BANNER_WIDGET_H #include -#include +#include #include +#include +#include class BannerWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.cpp index f7ca669f3..3ea2df6bd 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.cpp @@ -1,5 +1,17 @@ #include "bar_chart_background_widget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + BarChartBackgroundWidget::BarChartBackgroundWidget(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.h b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.h index 06a17c7c6..1fc8a3bde 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.h @@ -1,8 +1,8 @@ #ifndef COCKATRICE_BAR_CHART_BACKGROUND_WIDGET_H #define COCKATRICE_BAR_CHART_BACKGROUND_WIDGET_H -#include #include +#include class BarChartBackgroundWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.cpp index 04315d0ce..484ac861d 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.cpp @@ -1,9 +1,20 @@ #include "bar_chart_widget.h" +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include +#include BarChartWidget::BarChartWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.h b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.h index e80a3f8e8..a596c094a 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_chart_widget.h @@ -2,9 +2,12 @@ #define COCKATRICE_BAR_CHART_WIDGET_H #include +#include #include +#include #include #include +#include struct BarSegment { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.cpp index 2194b6b03..82d15d5be 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.cpp @@ -2,6 +2,10 @@ #include #include +#include +#include +#include +#include BarWidget::BarWidget(QString label, int value, int total, QColor barColor, QWidget *parent) : QWidget(parent), label(std::move(label)), value(value), total(total), barColor(barColor) diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.h b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.h index 05814f15b..18da1f939 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/bar_widget.h @@ -8,7 +8,11 @@ #ifndef BAR_WIDGET_H #define BAR_WIDGET_H +#include +#include #include +#include +#include class BarWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.cpp index 1087c621e..28118cc9c 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.cpp @@ -2,10 +2,21 @@ #include "libcockatrice/utility/color.h" +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include ColorBar::ColorBar(const QMap &_colors, QWidget *parent) : QWidget(parent), colors(GameSpecificColors::MTG::sortManaMapWUBRGCFirst(_colors)) diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.h b/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.h index 1d435cec1..3acb7f97f 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/color_bar.h @@ -2,9 +2,13 @@ #define COCKATRICE_COLOR_BAR_H #include -#include +#include +#include #include #include +#include + +template class QMap; /** * @class ColorBar diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.cpp index 3726dd061..33195a518 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.cpp @@ -1,5 +1,13 @@ #include "percent_bar_widget.h" +#include +#include +#include +#include +#include +#include +#include + PercentBarWidget::PercentBarWidget(QWidget *parent, double initialValue) : QWidget(parent), valueToDisplay(initialValue) { setMinimumSize(50, 10); diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.h b/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.h index 9cd6039c8..f12cb8ae7 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/percent_bar_widget.h @@ -8,8 +8,9 @@ #ifndef PERCENT_BAR_WIDGET_H #define PERCENT_BAR_WIDGET_H -#include #include +#include +#include class PercentBarWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.cpp b/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.cpp index 03c69373a..5a3130964 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.cpp @@ -1,9 +1,19 @@ #include "segmented_bar_widget.h" +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include +#include SegmentedBarWidget::SegmentedBarWidget(QString label, QVector segments, int total, QWidget *parent) : QWidget(parent), label(std::move(label)), segments(std::move(segments)), total(total) diff --git a/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.h b/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.h index 4df54e42e..c8c7dc2b9 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.h +++ b/cockatrice/src/interface/widgets/general/display/charts/bars/segmented_bar_widget.h @@ -2,8 +2,12 @@ #define COCKATRICE_SEGMENTED_BAR_WIDGET_H #include +#include +#include +#include #include #include +#include class SegmentedBarWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.cpp b/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.cpp index bd4641981..82542a663 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.cpp +++ b/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.cpp @@ -2,10 +2,22 @@ #include "libcockatrice/utility/color.h" +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include ColorPie::ColorPie(const QMap &_colors, QWidget *parent) : QWidget(parent), colors(GameSpecificColors::MTG::sortManaMapWUBRGCFirst(_colors)) diff --git a/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.h b/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.h index 60d8e18f2..0fe023f63 100644 --- a/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.h +++ b/cockatrice/src/interface/widgets/general/display/charts/pies/color_pie.h @@ -1,6 +1,12 @@ #ifndef COCKATRICE_COLOR_PIE_H #define COCKATRICE_COLOR_PIE_H +#include +#include +#include +#include + +class QPoint; #ifndef COLOR_PIE_H #define COLOR_PIE_H diff --git a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.cpp b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.cpp index f485e0040..0609eb16a 100644 --- a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.cpp +++ b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.cpp @@ -1,7 +1,16 @@ #include "dynamic_font_size_label.h" -#define FONT_PRECISION (0.5) -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FONT_PRECISION (0.5) DynamicFontSizeLabel::DynamicFontSizeLabel(QWidget *parent, Qt::WindowFlags f) : QLabel(parent, f) { diff --git a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.h b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.h index c9b159b02..cd029902a 100644 --- a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.h +++ b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_label.h @@ -9,6 +9,12 @@ #include #include +#include +#include +#include +#include + +class QWidget; class DynamicFontSizeLabel : public QLabel { diff --git a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.cpp b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.cpp index 653b2cd5c..25e8ca48f 100644 --- a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.cpp +++ b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.cpp @@ -2,7 +2,14 @@ #include "dynamic_font_size_label.h" +#include +#include +#include #include +#include +#include +#include +#include DynamicFontSizePushButton::DynamicFontSizePushButton(QWidget *parent) : QPushButton(parent) { diff --git a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.h b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.h index 540abfe6b..dfbb03d20 100644 --- a/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.h +++ b/cockatrice/src/interface/widgets/general/display/dynamic_font_size_push_button.h @@ -7,9 +7,12 @@ #ifndef DYNAMICFONTSIZEPUSHBUTTON_H #define DYNAMICFONTSIZEPUSHBUTTON_H -#include +#include #include -#include +#include +#include + +class QWidget; class DynamicFontSizePushButton : public QPushButton { diff --git a/cockatrice/src/interface/widgets/general/display/labeled_input.cpp b/cockatrice/src/interface/widgets/general/display/labeled_input.cpp index ee26c78d9..40ee91bcc 100644 --- a/cockatrice/src/interface/widgets/general/display/labeled_input.cpp +++ b/cockatrice/src/interface/widgets/general/display/labeled_input.cpp @@ -1,5 +1,12 @@ #include "labeled_input.h" +#include +#include +#include +#include +#include +#include + LabeledInput::LabeledInput(QWidget *parent, const QString &labelText) : QWidget(parent) { label = new QLabel(labelText, this); diff --git a/cockatrice/src/interface/widgets/general/display/labeled_input.h b/cockatrice/src/interface/widgets/general/display/labeled_input.h index 838dfb280..a07d50dbb 100644 --- a/cockatrice/src/interface/widgets/general/display/labeled_input.h +++ b/cockatrice/src/interface/widgets/general/display/labeled_input.h @@ -7,11 +7,15 @@ #ifndef LABELED_INPUT_H #define LABELED_INPUT_H -#include -#include -#include -#include +#include +#include #include +#include + +class QComboBox; +class QHBoxLayout; +class QLabel; +class QSpinBox; class LabeledInput final : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/display/shadow_background_label.cpp b/cockatrice/src/interface/widgets/general/display/shadow_background_label.cpp index 7db18c57d..e1218a6fb 100644 --- a/cockatrice/src/interface/widgets/general/display/shadow_background_label.cpp +++ b/cockatrice/src/interface/widgets/general/display/shadow_background_label.cpp @@ -1,7 +1,13 @@ #include "shadow_background_label.h" -#include +#include +#include #include +#include +#include +#include + +class QWidget; /** * @class ShadowBackgroundLabel diff --git a/cockatrice/src/interface/widgets/general/display/shadow_background_label.h b/cockatrice/src/interface/widgets/general/display/shadow_background_label.h index 69232691e..e64b9ca5b 100644 --- a/cockatrice/src/interface/widgets/general/display/shadow_background_label.h +++ b/cockatrice/src/interface/widgets/general/display/shadow_background_label.h @@ -8,6 +8,10 @@ #define STYLEDLABEL_H #include +#include +#include + +class QWidget; class ShadowBackgroundLabel : public QLabel { diff --git a/cockatrice/src/interface/widgets/general/home_styled_button.cpp b/cockatrice/src/interface/widgets/general/home_styled_button.cpp index c7bdd1e5e..7f23827bc 100644 --- a/cockatrice/src/interface/widgets/general/home_styled_button.cpp +++ b/cockatrice/src/interface/widgets/general/home_styled_button.cpp @@ -1,9 +1,19 @@ #include "home_styled_button.h" +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QWidget; HomeStyledButton::HomeStyledButton(const QString &text, QPair _gradientColors, QWidget *parent) : QPushButton(text, parent), gradientColors(_gradientColors) diff --git a/cockatrice/src/interface/widgets/general/home_styled_button.h b/cockatrice/src/interface/widgets/general/home_styled_button.h index f8d97e9aa..55ac5550f 100644 --- a/cockatrice/src/interface/widgets/general/home_styled_button.h +++ b/cockatrice/src/interface/widgets/general/home_styled_button.h @@ -6,7 +6,13 @@ #ifndef HOME_STYLED_BUTTON_H #define HOME_STYLED_BUTTON_H +#include +#include #include +#include +#include + +class QWidget; class HomeStyledButton : public QPushButton { diff --git a/cockatrice/src/interface/widgets/general/home_widget.cpp b/cockatrice/src/interface/widgets/general/home_widget.cpp index 648d315f9..c77fd76fd 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.cpp +++ b/cockatrice/src/interface/widgets/general/home_widget.cpp @@ -2,25 +2,68 @@ #include "../../../client/settings/cache_settings.h" #include "../../../interface/widgets/tabs/tab_supervisor.h" +#include "../../deck_loader/deck_file_format.h" +#include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/loaded_deck.h" #include "../../pixel_map_generator.h" +#include "../../theme_config.h" #include "../../theme_manager.h" #include "../../window_main.h" #include "../cards/art_crop_attribution.h" +#include "../cards/card_info_picture_art_crop_widget.h" +#include "abstract_client.h" #include "background_sources.h" #include "home_styled_button.h" #include "home_tab_button_color.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/utility/card_ref.h" +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include #include +#include +#include +#include +#include HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor) : QWidget(parent), tabSupervisor(_tabSupervisor), background(themePixmap(QStringLiteral("backgrounds/home"))) diff --git a/cockatrice/src/interface/widgets/general/home_widget.h b/cockatrice/src/interface/widgets/general/home_widget.h index 1cadc4a67..fb9566cad 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.h +++ b/cockatrice/src/interface/widgets/general/home_widget.h @@ -7,16 +7,23 @@ #ifndef HOME_WIDGET_H #define HOME_WIDGET_H -#include "../../../interface/widgets/tabs/tab_supervisor.h" -#include "../cards/card_info_picture_art_crop_widget.h" -#include "home_styled_button.h" +#include "libcockatrice/deck_list/deck_list.h" -#include +#include +#include +#include #include #include +#include class QGridLayout; class QLabel; +class CardInfoPictureArtCropWidget; +class ExactCard; +class HomeStyledButton; +class QGroupBox; +class QTimer; +class TabSupervisor; class HomeWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.cpp b/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.cpp index 01c9ac34e..6a6025ec2 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.cpp +++ b/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.cpp @@ -6,10 +6,17 @@ #include "flow_widget.h" +#include "../../../layouts/flow_layout.h" + +#include #include #include +#include +#include +#include #include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.h b/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.h index 4d52db3f1..dbf33d07f 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.h +++ b/cockatrice/src/interface/widgets/general/layout_containers/flow_widget.h @@ -8,13 +8,17 @@ #ifndef FLOW_WIDGET_H #define FLOW_WIDGET_H -#include "../../../layouts/flow_layout.h" - -#include -#include #include -#include #include +#include +#include +#include + +class FlowLayout; +class QHBoxLayout; +class QKeyEvent; +class QLayoutItem; +class QScrollArea; inline Q_LOGGING_CATEGORY(FlowWidgetLog, "flow_widget", QtInfoMsg); inline Q_LOGGING_CATEGORY(FlowWidgetSizeLog, "flow_widget.size", QtInfoMsg); diff --git a/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.cpp b/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.cpp index 97068978d..8cfe190e2 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.cpp +++ b/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.cpp @@ -1,7 +1,11 @@ #include "overlap_control_widget.h" +#include "../display/labeled_input.h" #include "overlap_widget.h" +#include +#include + OverlapControlWidget::OverlapControlWidget(int overlapPercentage, int maxColumns, int maxRows, diff --git a/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.h b/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.h index 104a97da9..c5639110f 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.h +++ b/cockatrice/src/interface/widgets/general/layout_containers/overlap_control_widget.h @@ -6,12 +6,14 @@ #ifndef OVERLAP_CONTROL_WIDGET_H #define OVERLAP_CONTROL_WIDGET_H -#include "../display/labeled_input.h" -#include "overlap_widget.h" - -#include -#include #include +#include +#include + +class LabeledInput; +class OverlapWidget; +class QHBoxLayout; +class QSlider; class OverlapControlWidget final : public QWidget { diff --git a/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.cpp b/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.cpp index 1c4ee30ab..03240211c 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.cpp +++ b/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.cpp @@ -1,9 +1,9 @@ #include "overlap_widget.h" -#include "../../../layouts/flow_layout.h" +#include "../../../layouts/overlap_layout.h" +#include #include -#include /** * @class OverlapWidget diff --git a/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.h b/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.h index 62c620201..c103c5f80 100644 --- a/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.h +++ b/cockatrice/src/interface/widgets/general/layout_containers/overlap_widget.h @@ -7,9 +7,12 @@ #ifndef OVERLAP_WIDGET_H #define OVERLAP_WIDGET_H -#include "../../../layouts/overlap_layout.h" - +#include #include +#include +#include + +class OverlapLayout; class OverlapWidget final : public QWidget { diff --git a/cockatrice/src/interface/widgets/menus/deck_editor_menu.cpp b/cockatrice/src/interface/widgets/menus/deck_editor_menu.cpp index 6e27b4e42..b0503ec22 100644 --- a/cockatrice/src/interface/widgets/menus/deck_editor_menu.cpp +++ b/cockatrice/src/interface/widgets/menus/deck_editor_menu.cpp @@ -2,9 +2,14 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../deck_editor/deck_editor_filter_dock_widget.h" #include "../tabs/abstract_tab_deck_editor.h" +#include +#include +#include #include + DeckEditorMenu::DeckEditorMenu(AbstractTabDeckEditor *parent) : QMenu(parent), deckEditor(parent) { aNewDeck = new QAction(QString(), this); diff --git a/cockatrice/src/interface/widgets/menus/deck_editor_menu.h b/cockatrice/src/interface/widgets/menus/deck_editor_menu.h index 08ce7bba1..904fbb6f4 100644 --- a/cockatrice/src/interface/widgets/menus/deck_editor_menu.h +++ b/cockatrice/src/interface/widgets/menus/deck_editor_menu.h @@ -8,8 +8,11 @@ #define DECK_EDITOR_MENU_H #include +#include class AbstractTabDeckEditor; +class QAction; + class DeckEditorMenu : public QMenu { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/onboarding/first_run_wizard.cpp b/cockatrice/src/interface/widgets/onboarding/first_run_wizard.cpp index 4af02fe4f..426811ec2 100644 --- a/cockatrice/src/interface/widgets/onboarding/first_run_wizard.cpp +++ b/cockatrice/src/interface/widgets/onboarding/first_run_wizard.cpp @@ -10,7 +10,6 @@ #include "shader_banner_widget.h" #include "step_indicator_widget.h" -#include #include #include #include @@ -18,6 +17,10 @@ #include #include #include +#include +#include + +class QWidget; FirstRunWizard::FirstRunWizard(QWidget *parent) : QDialog(parent) { @@ -182,10 +185,10 @@ void FirstRunWizard::onCardDatabaseUpdateFinished(bool success) } } -void FirstRunWizard::onCardDatabaseUpdateProgress(const QString &stage, qint64 done, qint64 total) +void FirstRunWizard::onCardDatabaseUpdateProgress(const CardUpdateProgress &progress) { if (cardDatabasePage) { - cardDatabasePage->onUpdateProgress(stage, done, total); + cardDatabasePage->onUpdateProgress(progress); } } diff --git a/cockatrice/src/interface/widgets/onboarding/first_run_wizard.h b/cockatrice/src/interface/widgets/onboarding/first_run_wizard.h index 21d7b6e06..812985a9f 100644 --- a/cockatrice/src/interface/widgets/onboarding/first_run_wizard.h +++ b/cockatrice/src/interface/widgets/onboarding/first_run_wizard.h @@ -1,8 +1,13 @@ #ifndef FIRST_RUN_WIZARD_H #define FIRST_RUN_WIZARD_H +#include "../../card_database_update/card_update_progress.h" + #include #include +#include +#include +#include class BannerHost; class FirstRunWizardPage; @@ -11,6 +16,7 @@ class CardDatabaseSetupPage; class QLabel; class QPushButton; class QStackedWidget; +class QWidget; /** @brief Polished first-run onboarding flow: card database setup, theme * selection, server account setup, and a handful of key preferences. @@ -38,7 +44,7 @@ public slots: void onCardDatabaseUpdateFinished(bool success); /** @brief Forwarded from MainWindow while the background card database update process runs. */ - void onCardDatabaseUpdateProgress(const QString &stage, qint64 done, qint64 total); + void onCardDatabaseUpdateProgress(const CardUpdateProgress &progress); protected: void closeEvent(QCloseEvent *event) override; diff --git a/cockatrice/src/interface/widgets/onboarding/first_run_wizard_page.h b/cockatrice/src/interface/widgets/onboarding/first_run_wizard_page.h index bdcd123bd..e7b818810 100644 --- a/cockatrice/src/interface/widgets/onboarding/first_run_wizard_page.h +++ b/cockatrice/src/interface/widgets/onboarding/first_run_wizard_page.h @@ -1,7 +1,9 @@ #ifndef FIRST_RUN_WIZARD_PAGE_H #define FIRST_RUN_WIZARD_PAGE_H +#include #include +#include /** @brief Base class for a single step of FirstRunWizard. * diff --git a/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.cpp index 2107ea8bf..16a1d2254 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.cpp @@ -1,8 +1,14 @@ #include "account_setup_page.h" +#include "../first_run_wizard_page.h" + #include #include +#include #include +#include + +class QWidget; AccountSetupPage::AccountSetupPage(QWidget *parent) : FirstRunWizardPage(parent) { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.h b/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.h index 0d9b76699..344b4e41a 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/account_setup_page.h @@ -3,8 +3,11 @@ #include "../first_run_wizard_page.h" +#include + class QLabel; class QPushButton; +class QWidget; /** @brief First-run account step. Does NOT embed DlgRegister's fields: they exist * to be handed to ConnectionController's network registration flow, which diff --git a/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.cpp index 50e8ff63d..cb53a25f3 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.cpp @@ -1,23 +1,31 @@ #include "card_database_setup_page.h" #include "../../client/settings/cache_settings.h" +#include "../first_run_wizard_page.h" +#include "libcockatrice/card/database/card_database.h" #include #include #include #include +#include #include #include #include #include #include +#include #include #include #include #include +#include +#include +#include #include #include #include +#include CardDatabaseSetupPage::CardDatabaseSetupPage(QWidget *parent) : FirstRunWizardPage(parent) { @@ -180,21 +188,29 @@ void CardDatabaseSetupPage::onUpdateFinished(bool success) } } -void CardDatabaseSetupPage::onUpdateProgress(const QString &stage, qint64 done, qint64 total) +void CardDatabaseSetupPage::onUpdateProgress(const CardUpdateProgress &progress) { if (state != State::Running) { return; } + const qint64 total = progress.total; + const qint64 done = progress.done; progressBar->setRange(0, total > 0 ? static_cast(qMin(total, INT_MAX)) : 0); progressBar->setValue(static_cast(qMin(done, INT_MAX))); if (total > 0) { const int percent = static_cast((100.0 * done) / total); - if (stage == QLatin1String("download")) { - statusLabel->setText(tr("Downloading the card database (%1%)…").arg(percent)); - } else if (stage == QLatin1String("scan")) { - statusLabel->setText(tr("Parsing the card database (%1%)…").arg(percent)); - } else if (stage == QLatin1String("import")) { - statusLabel->setText(tr("Importing cards (%1%)…").arg(percent)); + switch (progress.stage) { + case CardUpdateStage::Download: + statusLabel->setText(tr("Downloading the card database (%1%)…").arg(percent)); + break; + case CardUpdateStage::Scan: + statusLabel->setText(tr("Parsing the card database (%1%)…").arg(percent)); + break; + case CardUpdateStage::Import: + statusLabel->setText(tr("Importing cards (%1%)…").arg(percent)); + break; + case CardUpdateStage::Unknown: + break; } } } diff --git a/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.h b/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.h index 870e759ea..a84223497 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/card_database_setup_page.h @@ -1,9 +1,13 @@ #ifndef CARD_DATABASE_SETUP_PAGE_H #define CARD_DATABASE_SETUP_PAGE_H +#include "../../../card_database_update/card_update_progress.h" #include "../first_run_wizard_page.h" #include +#include +#include +#include class QComboBox; class QLabel; @@ -30,7 +34,7 @@ public: void retranslateUi() override; void onUpdateFinished(bool success); - void onUpdateProgress(const QString &stage, qint64 done, qint64 total); + void onUpdateProgress(const CardUpdateProgress &progress); signals: void updateRequested(); diff --git a/cockatrice/src/interface/widgets/onboarding/pages/finish_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/finish_page.cpp index 4205fa532..1adf35282 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/finish_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/finish_page.cpp @@ -1,7 +1,13 @@ #include "finish_page.h" +#include "../first_run_wizard_page.h" + #include +#include #include +#include + +class QWidget; FinishPage::FinishPage(QWidget *parent) : FirstRunWizardPage(parent) { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/finish_page.h b/cockatrice/src/interface/widgets/onboarding/pages/finish_page.h index 40ebc6ed0..b78e40ec5 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/finish_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/finish_page.h @@ -3,7 +3,10 @@ #include "../first_run_wizard_page.h" +#include + class QLabel; +class QWidget; class FinishPage : public FirstRunWizardPage { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.cpp index fceb34deb..da08e3a12 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.cpp @@ -2,6 +2,7 @@ #include "../../client/settings/cache_settings.h" #include "../../client/sound_engine.h" +#include "../first_run_wizard_page.h" #include "libcockatrice/settings/interface_settings.h" #include "libcockatrice/settings/sound_settings.h" #include "libcockatrice/settings/tabs_settings.h" @@ -9,10 +10,16 @@ #include #include #include +#include #include #include +#include #include +#include #include +#include +#include +#include namespace { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.h b/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.h index eed1b3aed..18d6c0e8f 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/preferences_setup_page.h @@ -3,10 +3,13 @@ #include "../first_run_wizard_page.h" +#include + class QCheckBox; class QComboBox; class QGroupBox; class QLabel; +class QWidget; /** @brief A curated subset of settings for the user to adjust. **/ diff --git a/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.cpp index 797fe4425..66554d85c 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.cpp @@ -1,10 +1,12 @@ #include "theme_setup_page.h" +#include "../../../theme_config.h" #include "../../client/settings/cache_settings.h" #include "../../interface/palette_editor/palette_generator.h" #include "../../interface/palette_editor/quick_setup_panel.h" #include "../../interface/theme_manager.h" #include "../../interface/widgets/general/background_sources.h" +#include "../first_run_wizard_page.h" #include "libcockatrice/settings/appearance_settings.h" #include @@ -12,12 +14,21 @@ #include #include #include -#include +#include +#include +#include #include +#include #include +#include +#include #include +#include +#include +#include #include -#include + +class QWidget; namespace { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.h b/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.h index 16a3c9a5d..b0d717043 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/theme_setup_page.h @@ -3,9 +3,14 @@ #include "../first_run_wizard_page.h" +#include +#include +#include + class QComboBox; class QGroupBox; class QuickSetupPanel; +class QWidget; /** @brief First-run theme step. Reuses the same building blocks as Appearance * settings and the Palette Editor (ThemeManager, PaletteConfig, diff --git a/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.cpp b/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.cpp index 16e0719d2..71d2fa409 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.cpp +++ b/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.cpp @@ -3,15 +3,23 @@ #include "../../../../main.h" #include "../../client/settings/cache_settings.h" #include "../../settings_page/general_settings_page.h" +#include "../first_run_wizard_page.h" #include "libcockatrice/settings/personal_settings.h" #include +#include #include #include #include +#include #include -#include +#include #include +#include +#include +#include + +class QWidget; WelcomePage::WelcomePage(QWidget *parent) : FirstRunWizardPage(parent) { diff --git a/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.h b/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.h index 93b24d83d..289034ab1 100644 --- a/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.h +++ b/cockatrice/src/interface/widgets/onboarding/pages/welcome_page.h @@ -3,8 +3,11 @@ #include "../first_run_wizard_page.h" +#include + class QComboBox; class QLabel; +class QWidget; class WelcomePage : public FirstRunWizardPage { diff --git a/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.cpp b/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.cpp index 0b9f65783..c17399957 100644 --- a/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.cpp +++ b/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.cpp @@ -1,16 +1,27 @@ #include "shader_banner_widget.h" +#include "../../theme_config.h" #include "../../theme_manager.h" #include "banner_shader_config.h" #include "brand_colors.h" #include +#include +#include +#include #include +#include #include #include #include -#include +#include #include +#include +#include +#include +#include +#include +#include namespace { diff --git a/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.h b/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.h index ac47b1141..6fa0c703f 100644 --- a/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.h +++ b/cockatrice/src/interface/widgets/onboarding/shader_banner_widget.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include class BannerShaderConfig; class QQuickWidget; diff --git a/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.cpp b/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.cpp index d25e8544b..004bdcc11 100644 --- a/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.cpp +++ b/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.cpp @@ -1,7 +1,13 @@ #include "step_indicator_widget.h" +#include +#include #include #include +#include +#include +#include +#include StepIndicatorWidget::StepIndicatorWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.h b/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.h index 1b85be04f..d2b5dfcb5 100644 --- a/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.h +++ b/cockatrice/src/interface/widgets/onboarding/step_indicator_widget.h @@ -2,6 +2,7 @@ #define STEP_INDICATOR_WIDGET_H #include +#include /** @brief Row of dots showing progress through a fixed-length sequence of steps, * in the style of a mobile/OS setup flow. Purely presentational. */ diff --git a/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.cpp b/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.cpp index e970f8413..f77aefb33 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.cpp +++ b/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.cpp @@ -1,6 +1,9 @@ #include "playmat_collection_dialog.h" #include "../../../client/settings/cache_settings.h" +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" #include "playmat_settings_dialog.h" #include @@ -8,10 +11,15 @@ #include #include #include +#include #include +#include #include +#include #include +class QWidget; + PlaymatCollectionDialog::PlaymatCollectionDialog(QWidget *parent) : QDialog(parent) { setMinimumWidth(420); diff --git a/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.h b/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.h index 167893f8e..a04cfdf54 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.h +++ b/cockatrice/src/interface/widgets/playmat/playmat_collection_dialog.h @@ -2,13 +2,15 @@ #define COCKATRICE_PLAYMAT_COLLECTION_DIALOG_H #include +#include #include +#include class QComboBox; class QLabel; class QListWidget; -class QListWidgetItem; class QPushButton; +class QWidget; /** * @brief Dialog for editing the user-level playmat collection. diff --git a/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.cpp b/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.cpp index 130daadf4..881866292 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.cpp +++ b/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.cpp @@ -3,13 +3,22 @@ #include "../cards/art_crop_attribution.h" #include "playmat_utils.h" +#include +#include +#include #include #include #include #include -#include +#include +#include +#include +#include +#include #include +#include #include +#include namespace { diff --git a/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.h b/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.h index 88b9ec41d..5e54e96eb 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.h +++ b/cockatrice/src/interface/widgets/playmat/playmat_preview_widget.h @@ -1,10 +1,15 @@ #ifndef COCKATRICE_PLAYMAT_PREVIEW_WIDGET_H #define COCKATRICE_PLAYMAT_PREVIEW_WIDGET_H -#include +#include "libcockatrice/utility/playmat_params.h" + #include +#include +#include +#include #include -#include +#include +#include /** * @brief Interactive crop surface showing how a playmat card art will appear diff --git a/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.cpp b/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.cpp index 9459c5ea9..5a4457d34 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.cpp +++ b/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.cpp @@ -6,6 +6,11 @@ #include "../utility/completer_utils.h" #include "card_database_display_model.h" #include "card_database_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" #include "playmat_preview_widget.h" #include @@ -15,14 +20,18 @@ #include #include #include -#include #include #include -#include -#include +#include #include +#include +#include +#include #include +#include #include +#include +#include PlaymatSettingsDialog::PlaymatSettingsDialog(const CardRef &initialCard, const PlaymatParams &initialParams, diff --git a/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.h b/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.h index 9ef306a5f..07833af25 100644 --- a/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.h +++ b/cockatrice/src/interface/widgets/playmat/playmat_settings_dialog.h @@ -1,9 +1,14 @@ #ifndef COCKATRICE_PLAYMAT_SETTINGS_DIALOG_H #define COCKATRICE_PLAYMAT_SETTINGS_DIALOG_H +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" + #include +#include #include -#include +#include +#include class QCheckBox; class QComboBox; diff --git a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp index 579106540..bad88ddbb 100644 --- a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp @@ -1,8 +1,21 @@ #include "all_zones_card_amount_widget.h" #include "../general/display/shadow_background_label.h" +#include "card_amount_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include +#include +#include +#include #include +#include +#include +#include + +class DeckStateManager; /** * @brief Constructor for the AllZonesCardAmountWidget class. diff --git a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.h b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.h index 325dd1c1b..cefabe293 100644 --- a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.h @@ -7,11 +7,15 @@ #ifndef ALL_ZONES_CARD_AMOUNT_WIDGET_H #define ALL_ZONES_CARD_AMOUNT_WIDGET_H -#include "../../deck_loader/deck_loader.h" -#include "card_amount_widget.h" - #include -#include +#include + +class CardAmountWidget; +class DeckStateManager; +class ExactCard; +class QLabel; +class QSlider; +class QVBoxLayout; class AllZonesCardAmountWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp index ff47e7b9c..4b5040741 100644 --- a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp @@ -1,9 +1,30 @@ #include "card_amount_widget.h" #include "../deck_editor/deck_state_manager.h" +#include "../general/display/dynamic_font_size_push_button.h" +#include "deck_list_model.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QModelIndex; /** * @brief Constructs a widget for displaying and controlling the card count in a specific zone. diff --git a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.h b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.h index 2780e3ad2..6f5889fc7 100644 --- a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.h @@ -8,15 +8,17 @@ #ifndef CARD_AMOUNT_WIDGET_H #define CARD_AMOUNT_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../general/display/dynamic_font_size_push_button.h" +#include "libcockatrice/card/printing/exact_card.h" -#include -#include -#include +#include #include -#include -#include +#include + +class DeckStateManager; +class DynamicFontSizePushButton; +class QHBoxLayout; +class QLabel; +class QSlider; class CardAmountWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp index f16b4885c..27ae61b94 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp @@ -1,19 +1,38 @@ #include "printing_selector.h" #include "../../../client/settings/cache_settings.h" -#include "../../../interface/card_picture_loader/card_picture_loader.h" -#include "../../../interface/widgets/dialogs/dlg_select_set_for_cards.h" +#include "../cards/card_size_widget.h" #include "../deck_editor/deck_state_manager.h" +#include "../general/layout_containers/flow_widget.h" +#include "../quick_settings/settings_button_widget.h" +#include "../tabs/abstract_tab_deck_editor.h" +#include "deck_list_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" #include "printing_selector_card_display_widget.h" #include "printing_selector_card_search_widget.h" #include "printing_selector_card_selection_widget.h" #include "printing_selector_card_sorting_widget.h" #include "printing_selector_placeholder_widget.h" -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include /** * @brief Constructs a PrintingSelector widget to display and manage card printings. diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h index 14d73f836..b9cb27ecd 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h @@ -7,18 +7,20 @@ #ifndef PRINTING_SELECTOR_H #define PRINTING_SELECTOR_H -#include "../cards/card_size_widget.h" -#include "../general/layout_containers/flow_widget.h" -#include "../quick_settings/settings_button_widget.h" -#include "printing_selector_placeholder_widget.h" - -#include -#include -#include -#include #include #include -#include +#include + +class CardSizeWidget; +class FlowWidget; +class PrintingSelectorPlaceholderWidget; +class QCheckBox; +class QHBoxLayout; +class QString; +class QTimer; +class QVBoxLayout; +class SettingsButtonWidget; +template class QMap; #define BATCH_SIZE 10 @@ -33,8 +35,8 @@ class DeckStateManager; class PrintingSelectorCardSearchWidget; class PrintingSelectorCardSelectionWidget; class PrintingSelectorCardSortingWidget; -class PrintingSelectorViewOptionsWidget; class AbstractTabDeckEditor; + class PrintingSelector : public QWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp index edeba86d1..1c3cb635d 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp @@ -1,11 +1,22 @@ #include "printing_selector_card_display_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "printing_selector.h" #include "printing_selector_card_overlay_widget.h" #include "set_name_and_collectors_number_display_widget.h" -#include +#include +#include +#include +#include #include -#include +#include + +class AbstractTabDeckEditor; +class DeckStateManager; +class QSlider; /** * @brief Constructs a PrintingSelectorCardDisplayWidget to display card information. diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h index 4de561f4f..f0a378fd3 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h @@ -7,12 +7,25 @@ #ifndef PRINTING_SELECTOR_CARD_DISPLAY_WIDGET_H #define PRINTING_SELECTOR_CARD_DISPLAY_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "printing_selector_card_overlay_widget.h" -#include "set_name_and_collectors_number_display_widget.h" +#include "libcockatrice/card/printing/exact_card.h" + +// IWYU pragma: keep +// ZoneCounts appears inside a QMap in a slot signature, so the moc-generated +// code needs the complete type. +#include "printing_selector.h" #include -#include +#include + +class AbstractTabDeckEditor; +class DeckStateManager; +class PrintingSelectorCardOverlayWidget; +class QSlider; +class QString; +class QVBoxLayout; +class SetNameAndCollectorsNumberDisplayWidget; +struct ZoneCounts; +template class QMap; class PrintingSelectorCardDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp index e8816847e..bec9100a6 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp @@ -3,23 +3,46 @@ #include "../../../client/settings/cache_settings.h" #include "../../card_picture_loader/card_picture_loader.h" #include "../cards/card_info_picture_widget.h" -#include "printing_selector_card_display_widget.h" +#include "../tabs/abstract_tab_deck_editor.h" +#include "all_zones_card_amount_widget.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include #include +#include #include +#include +#include #include #include +#include #include #include #include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include #include -#include +#include + +class DeckStateManager; namespace { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.h index fbcfa9230..20d8f7b4b 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.h @@ -7,14 +7,20 @@ #ifndef PRINTING_SELECTOR_CARD_OVERLAY_WIDGET_H #define PRINTING_SELECTOR_CARD_OVERLAY_WIDGET_H -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "all_zones_card_amount_widget.h" -#include "set_name_and_collectors_number_display_widget.h" +#include "libcockatrice/card/printing/exact_card.h" -#include +#include +#include class QAction; class QMenu; +class AbstractTabDeckEditor; +class AllZonesCardAmountWidget; +class CardInfoPictureWidget; +class DeckStateManager; +class QLabel; +class QPoint; +class QSlider; class PrintingSelectorCardOverlayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.cpp index 3c42f06dc..718e24ea0 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.cpp @@ -1,5 +1,11 @@ #include "printing_selector_card_search_widget.h" +#include "printing_selector.h" + +#include +#include +#include + /** * @brief Constructs a PrintingSelectorCardSearchWidget for searching cards by set name or set code. * diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.h index 3efabe13c..d54cf5fbc 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_search_widget.h @@ -7,11 +7,14 @@ #ifndef PRINTING_SELECTOR_CARD_SEARCH_WIDGET_H #define PRINTING_SELECTOR_CARD_SEARCH_WIDGET_H -#include "printing_selector.h" - -#include -#include +#include #include +#include + +class PrintingSelector; +class QHBoxLayout; +class QLineEdit; +class QTimer; class PrintingSelectorCardSearchWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp index 2eb2ef245..da66591b3 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp @@ -1,7 +1,12 @@ #include "printing_selector_card_selection_widget.h" #include "../../../interface/widgets/dialogs/dlg_select_set_for_cards.h" -#include "../tabs/abstract_tab_deck_editor.h" +#include "printing_selector.h" + +#include +#include + +class DeckStateManager; /** * @brief Constructs a PrintingSelectorCardSelectionWidget for navigating through cards in the deck. diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.h index 0aa56c9d8..c619c5327 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.h @@ -7,11 +7,13 @@ #ifndef PRINTING_SELECTOR_CARD_SELECTION_WIDGET_H #define PRINTING_SELECTOR_CARD_SELECTION_WIDGET_H -#include "printing_selector.h" - -#include -#include #include +#include + +class DeckStateManager; +class PrintingSelector; +class QHBoxLayout; +class QPushButton; class PrintingSelectorCardSelectionWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.cpp index f4a05cfc7..f47ba0746 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.cpp @@ -1,11 +1,26 @@ #include "printing_selector_card_sorting_widget.h" #include "../../../client/settings/cache_settings.h" +#include "deck_list_model.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "printing_selector.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include const QString PrintingSelectorCardSortingWidget::SORT_OPTIONS_ALPHABETICAL = tr("Alphabetical"); const QString PrintingSelectorCardSortingWidget::SORT_OPTIONS_PREFERENCE = tr("Preference"); diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.h index bb5b60cdc..1cd99457b 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.h @@ -7,11 +7,20 @@ #ifndef PRINTING_SELECTOR_CARD_SORTING_WIDGET_H #define PRINTING_SELECTOR_CARD_SORTING_WIDGET_H -#include "printing_selector.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/printing_info.h" -#include -#include +#include +#include +#include #include +#include + +class DeckListModel; +class PrintingSelector; +class QComboBox; +class QHBoxLayout; +class QPushButton; class PrintingSelectorCardSortingWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.cpp index aee34bccd..7f9ad66c8 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.cpp @@ -1,5 +1,10 @@ #include "printing_selector_placeholder_widget.h" +#include +#include +#include +#include + PrintingSelectorPlaceholderWidget::PrintingSelectorPlaceholderWidget(QWidget *parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.h index abf030c69..6702d325a 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_placeholder_widget.h @@ -1,9 +1,11 @@ #ifndef COCKATRICE_PRINTING_SELECTOR_PLACEHOLDER_WIDGET_H #define COCKATRICE_PRINTING_SELECTOR_PLACEHOLDER_WIDGET_H -#include -#include #include +#include + +class QLabel; +class QVBoxLayout; class PrintingSelectorPlaceholderWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp index e12775a04..9bc92ad90 100644 --- a/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp @@ -1,6 +1,11 @@ #include "set_name_and_collectors_number_display_widget.h" -#include +#include +#include +#include +#include +#include +#include /** * @class SetNameAndCollectorsNumberDisplayWidget diff --git a/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.h b/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.h index 140f190df..54e580b67 100644 --- a/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.h @@ -8,10 +8,12 @@ #ifndef SET_NAME_AND_COLLECTORS_NUMBER_DISPLAY_WIDGET_H #define SET_NAME_AND_COLLECTORS_NUMBER_DISPLAY_WIDGET_H -#include -#include -#include +#include #include +#include + +class QLabel; +class QVBoxLayout; class SetNameAndCollectorsNumberDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.cpp b/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.cpp index 881c3e3ac..981ed843c 100644 --- a/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.cpp +++ b/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.cpp @@ -1,11 +1,21 @@ #include "settings_button_widget.h" #include "../../pixel_map_generator.h" +#include "settings_popup_widget.h" #include #include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include SettingsButtonWidget::SettingsButtonWidget(QWidget *parent) : QWidget(parent), button(new QToolButton(this)), popup(new SettingsPopupWidget(nullptr)) diff --git a/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.h b/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.h index 1dc52ac72..015300bf8 100644 --- a/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.h +++ b/cockatrice/src/interface/widgets/quick_settings/settings_button_widget.h @@ -8,10 +8,14 @@ #ifndef SETTINGS_BUTTON_WIDGET_H #define SETTINGS_BUTTON_WIDGET_H -#include "settings_popup_widget.h" - -#include +#include #include +#include + +class QHBoxLayout; +class QPixmap; +class QToolButton; +class SettingsPopupWidget; class SettingsButtonWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.cpp b/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.cpp index 8389caea9..7ace155a7 100644 --- a/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.cpp +++ b/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.cpp @@ -1,10 +1,14 @@ #include "settings_popup_widget.h" #include -#include +#include #include +#include #include #include +#include +#include +#include SettingsPopupWidget::SettingsPopupWidget(QWidget *parent) : QWidget(parent, Qt::Popup | Qt::FramelessWindowHint) { diff --git a/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.h b/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.h index 01e86abfe..61b2cb013 100644 --- a/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.h +++ b/cockatrice/src/interface/widgets/quick_settings/settings_popup_widget.h @@ -8,10 +8,11 @@ #ifndef SETTINGS_POPUP_WIDGET_H #define SETTINGS_POPUP_WIDGET_H -#include -#include -#include #include +#include + +class QScrollArea; +class QVBoxLayout; class SettingsPopupWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/replay/replay_manager.cpp b/cockatrice/src/interface/widgets/replay/replay_manager.cpp index c51b96b6c..f3f1da2c4 100644 --- a/cockatrice/src/interface/widgets/replay/replay_manager.cpp +++ b/cockatrice/src/interface/widgets/replay/replay_manager.cpp @@ -1,10 +1,16 @@ #include "replay_manager.h" #include "../../../client/settings/cache_settings.h" +#include "../../../game/player/event_processing_options.h" +#include "libcockatrice/protocol/pb/game_event.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/game_replay.pb.h" #include +#include #include #include +#include static constexpr int TIMER_INTERVAL_MS = 200; static constexpr int EMPTY_SECTION_MARGIN_MS = 500; diff --git a/cockatrice/src/interface/widgets/replay/replay_manager.h b/cockatrice/src/interface/widgets/replay/replay_manager.h index 81e66824d..3b33deada 100644 --- a/cockatrice/src/interface/widgets/replay/replay_manager.h +++ b/cockatrice/src/interface/widgets/replay/replay_manager.h @@ -3,11 +3,14 @@ #include "../../../game/player/event_processing_options.h" +#include #include -#include +#include +#include class GameReplay; class QTimer; +class GameEventContainer; /** * @brief This class handles all logic to do with playing back replays diff --git a/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.cpp b/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.cpp index 5d58705d2..5b3829af2 100644 --- a/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.cpp +++ b/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.cpp @@ -1,10 +1,14 @@ #include "replay_quick_settings_widget.h" #include "../../../client/settings/cache_settings.h" +#include "../quick_settings/settings_button_widget.h" +#include "libcockatrice/utility/macros.h" +#include #include #include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.h b/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.h index a337ea0a6..d0be7d58d 100644 --- a/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.h +++ b/cockatrice/src/interface/widgets/replay/replay_quick_settings_widget.h @@ -5,7 +5,12 @@ #include #include +#include +#include #include +#include + +class QWidget; class ReplayQuickSettingsWidget : public SettingsButtonWidget { diff --git a/cockatrice/src/interface/widgets/replay/replay_timeline_widget.cpp b/cockatrice/src/interface/widgets/replay/replay_timeline_widget.cpp index fe4ac330b..48a43dba8 100644 --- a/cockatrice/src/interface/widgets/replay/replay_timeline_widget.cpp +++ b/cockatrice/src/interface/widgets/replay/replay_timeline_widget.cpp @@ -1,9 +1,15 @@ #include "replay_timeline_widget.h" -#include "../../../client/settings/cache_settings.h" - +#include +#include +#include #include #include +#include +#include +#include +#include +#include static constexpr int BIN_LENGTH = 5000; static constexpr int MIN_RESOLUTION_MS = 1000; diff --git a/cockatrice/src/interface/widgets/replay/replay_timeline_widget.h b/cockatrice/src/interface/widgets/replay/replay_timeline_widget.h index 47d19a741..2c277228f 100644 --- a/cockatrice/src/interface/widgets/replay/replay_timeline_widget.h +++ b/cockatrice/src/interface/widgets/replay/replay_timeline_widget.h @@ -7,13 +7,9 @@ #ifndef REPLAY_TIMELINE_WIDGET #define REPLAY_TIMELINE_WIDGET -#include "../../../game/player/event_processing_options.h" - -#include +#include #include - -class QPaintEvent; -class QTimer; +#include class ReplayTimelineWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/replay/replay_widget.cpp b/cockatrice/src/interface/widgets/replay/replay_widget.cpp index c92771f8c..07b4e72ce 100644 --- a/cockatrice/src/interface/widgets/replay/replay_widget.cpp +++ b/cockatrice/src/interface/widgets/replay/replay_widget.cpp @@ -3,12 +3,21 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" #include "../../pixel_map_generator.h" -#include "../interface/widgets/tabs/tab_game.h" +#include "libcockatrice/settings/interface_settings.h" #include "replay_manager.h" #include "replay_quick_settings_widget.h" +#include "replay_timeline_widget.h" +#include #include +#include +#include +#include +#include #include +#include + +class GameReplay; ReplayWidget::ReplayWidget(QWidget *parent, GameReplay *replay) : QWidget(parent), replayPlayButton(nullptr), replayFastForwardButton(nullptr), aReplaySkipForward(nullptr), diff --git a/cockatrice/src/interface/widgets/replay/replay_widget.h b/cockatrice/src/interface/widgets/replay/replay_widget.h index 6d2b7a043..74aace570 100644 --- a/cockatrice/src/interface/widgets/replay/replay_widget.h +++ b/cockatrice/src/interface/widgets/replay/replay_widget.h @@ -8,15 +8,18 @@ #ifndef REPLAY_WIDGET_H #define REPLAY_WIDGET_H -#include "replay_timeline_widget.h" +#include "../../../game/player/event_processing_options.h" -#include #include -#include +#include class ReplayManager; class ReplayQuickSettingsWidget; -class TabGame; +class GameEventContainer; +class GameReplay; +class QAction; +class QToolButton; +class ReplayTimelineWidget; /** * @brief The top-level widget that is put in the replay dock widget. diff --git a/cockatrice/src/interface/widgets/server/chat_view/chat_view.cpp b/cockatrice/src/interface/widgets/server/chat_view/chat_view.cpp index 91a7cb965..037a4a1e5 100644 --- a/cockatrice/src/interface/widgets/server/chat_view/chat_view.cpp +++ b/cockatrice/src/interface/widgets/server/chat_view/chat_view.cpp @@ -4,22 +4,47 @@ #include "../../client/sound_engine.h" #include "../../interface/card_localization.h" #include "../../interface/pixel_map_generator.h" -#include "../../interface/widgets/tabs/tab_account.h" +#include "../../tabs/tab_supervisor.h" #include "../user/user_context_menu.h" #include "../user/user_list_manager.h" #include "../user/user_list_proxy.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/protocol/pb/event_room_say.pb.h" +#include "room_message_type.h" #include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include +#include #include #include #include +#include +#include +#include + +class QPoint; const QColor DEFAULT_MENTION_COLOR = QColor(194, 31, 47); diff --git a/cockatrice/src/interface/widgets/server/chat_view/chat_view.h b/cockatrice/src/interface/widgets/server/chat_view/chat_view.h index 06e3a0ed8..3fa7224e5 100644 --- a/cockatrice/src/interface/widgets/server/chat_view/chat_view.h +++ b/cockatrice/src/interface/widgets/server/chat_view/chat_view.h @@ -8,22 +8,34 @@ #ifndef CHATVIEW_H #define CHATVIEW_H -#include "../../interface/widgets/tabs/tab_supervisor.h" -#include "../user/user_list_widget.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" -#include #include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include #include #include +#include class AbstractGame; -class QTextTable; -class QMouseEvent; class UserContextMenu; class UserListProxy; +class QAction; +class QPoint; +class QUrl; +class QWidget; +class TabSupervisor; +struct CardRef; +template class QFlags; class UserMessagePosition { diff --git a/cockatrice/src/interface/widgets/server/game_filter_configs.h b/cockatrice/src/interface/widgets/server/game_filter_configs.h index 5cb048669..1b7322c55 100644 --- a/cockatrice/src/interface/widgets/server/game_filter_configs.h +++ b/cockatrice/src/interface/widgets/server/game_filter_configs.h @@ -1,6 +1,11 @@ #ifndef COCKATRICE_GAME_FILTER_CONFIGS_H #define COCKATRICE_GAME_FILTER_CONFIGS_H +#include +#include +#include +#include +#include #include /** diff --git a/cockatrice/src/interface/widgets/server/game_selector.cpp b/cockatrice/src/interface/widgets/server/game_selector.cpp index 659325987..27464e14e 100644 --- a/cockatrice/src/interface/widgets/server/game_selector.cpp +++ b/cockatrice/src/interface/widgets/server/game_selector.cpp @@ -1,32 +1,54 @@ #include "game_selector.h" +#include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" #include "../interface/widgets/dialogs/dlg_create_game.h" #include "../interface/widgets/dialogs/dlg_filter_games.h" -#include "../interface/widgets/tabs/tab_account.h" -#include "../interface/widgets/tabs/tab_game.h" #include "../interface/widgets/tabs/tab_room.h" #include "../interface/widgets/tabs/tab_supervisor.h" #include "../interface/widgets/utility/get_text_with_max.h" #include "game_link.h" +#include "game_selector_quick_filter_toolbar.h" #include "games_model.h" +#include "libcockatrice/protocol/pb/event_add_to_list.pb.h" +#include "libcockatrice/protocol/pb/event_remove_from_list.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "user/user_list_manager.h" +#include #include #include #include #include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include #include +#include +#include +#include #include #include #include #include #include -#include #include +#include +#include +#include + +class QModelIndex; +class QPoint; +class QWidget; +template class QList; GameSelector::GameSelector(AbstractClient *_client, TabSupervisor *_tabSupervisor, diff --git a/cockatrice/src/interface/widgets/server/game_selector.h b/cockatrice/src/interface/widgets/server/game_selector.h index 9af39cf50..01e093b06 100644 --- a/cockatrice/src/interface/widgets/server/game_selector.h +++ b/cockatrice/src/interface/widgets/server/game_selector.h @@ -1,25 +1,34 @@ #ifndef GAMESELECTOR_H #define GAMESELECTOR_H -#include "game_selector_quick_filter_toolbar.h" #include "game_type_map.h" #include -#include -#include -#include +#include +// IWYU pragma: keep +// ServerInfo_User appears by value and inside QList in slot signatures, so the +// moc-generated code needs the complete type. +#include class QTreeView; class GamesModel; class GamesProxyModel; class QPushButton; -class QCheckBox; -class QLabel; class AbstractClient; class TabSupervisor; class TabRoom; class ServerInfo_Game; class Response; +class Event_AddToList; +class Event_RemoveFromList; +class GameSelectorQuickFilterToolBar; +class QModelIndex; +class QPoint; +class QString; +class QWidget; +class ServerInfo_User; +template class QMap; +template class QList; /** * @class GameSelector diff --git a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp index d668b1c33..0fc3d879c 100644 --- a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp +++ b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp @@ -1,12 +1,22 @@ #include "game_selector_quick_filter_toolbar.h" +#include "game_filter_configs.h" #include "games_model.h" -#include "user/user_list_manager.h" #include #include #include #include +#include +#include +#include +#include +#include +#include +#include + +class TabSupervisor; +template class QMap; GameSelectorQuickFilterToolBar::GameSelectorQuickFilterToolBar(QWidget *parent, TabSupervisor *_tabSupervisor, diff --git a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h index 9b7b6e61f..99ed179b5 100644 --- a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h +++ b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h @@ -1,12 +1,19 @@ #ifndef COCKATRICE_GAME_SELECTOR_QUICK_FILTER_TOOLBAR_H #define COCKATRICE_GAME_SELECTOR_QUICK_FILTER_TOOLBAR_H -#include "../tabs/tab_supervisor.h" -#include "games_model.h" - -#include -#include #include +#include +#include + +class GamesProxyModel; +class QCheckBox; +class QComboBox; +class QHBoxLayout; +class QLineEdit; +class QString; +class TabSupervisor; +struct GameFilterConfigs; +template class QMap; class GameSelectorQuickFilterToolBar : public QWidget { diff --git a/cockatrice/src/interface/widgets/server/games_model.cpp b/cockatrice/src/interface/widgets/server/games_model.cpp index 127badbb2..289dbee44 100644 --- a/cockatrice/src/interface/widgets/server/games_model.cpp +++ b/cockatrice/src/interface/widgets/server/games_model.cpp @@ -2,13 +2,26 @@ #include "../../../client/settings/cache_settings.h" #include "../interface/pixel_map_generator.h" -#include "../interface/widgets/tabs/tab_account.h" -#include "user/user_list_manager.h" -#include "user/user_list_widget.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "user/user_list_proxy.h" +#include "user_level.h" +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include diff --git a/cockatrice/src/interface/widgets/server/games_model.h b/cockatrice/src/interface/widgets/server/games_model.h index b5f86c291..9bf54b83a 100644 --- a/cockatrice/src/interface/widgets/server/games_model.h +++ b/cockatrice/src/interface/widgets/server/games_model.h @@ -4,13 +4,18 @@ #include "game_filter_configs.h" #include "game_type_map.h" +#include #include -#include +#include +#include #include -#include +#include #include +#include +#include class UserListProxy; +class QObject; /** * @class GamesModel diff --git a/cockatrice/src/interface/widgets/server/handle_public_servers.cpp b/cockatrice/src/interface/widgets/server/handle_public_servers.cpp index f5d682c36..08b7837dd 100644 --- a/cockatrice/src/interface/widgets/server/handle_public_servers.cpp +++ b/cockatrice/src/interface/widgets/server/handle_public_servers.cpp @@ -2,10 +2,19 @@ #include "../../../client/settings/cache_settings.h" +#include +#include #include +#include +#include #include +#include +#include #include +#include +#include #include +#include #define PUBLIC_SERVERS_JSON "https://cockatrice.github.io/public-servers.json" diff --git a/cockatrice/src/interface/widgets/server/handle_public_servers.h b/cockatrice/src/interface/widgets/server/handle_public_servers.h index fa924b183..bacc7d3bf 100644 --- a/cockatrice/src/interface/widgets/server/handle_public_servers.h +++ b/cockatrice/src/interface/widgets/server/handle_public_servers.h @@ -9,8 +9,17 @@ #include "user/user_info_connection.h" +#include +#include +#include +#include +#include +#include +#include + class QNetworkReply; class QNetworkAccessManager; +class QVariant; /** * This class is used to update the servers.ini file and ensure diff --git a/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp b/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp index df9dfbf53..74e403ea8 100644 --- a/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp +++ b/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp @@ -1,14 +1,23 @@ #include "remote_decklist_tree_widget.h" +#include "libcockatrice/protocol/pb/response.pb.h" + +#include #include #include +#include +#include #include +#include #include #include #include #include #include +class QObject; +class QWidget; + RemoteDeckList_TreeModel::DirectoryNode::DirectoryNode(const QString &_name, RemoteDeckList_TreeModel::DirectoryNode *_parent) : RemoteDeckList_TreeModel::Node(_name, _parent) diff --git a/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.h b/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.h index 2cf09aff7..d553ffe9e 100644 --- a/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.h +++ b/cockatrice/src/interface/widgets/server/remote/remote_decklist_tree_widget.h @@ -8,13 +8,23 @@ #ifndef REMOTEDECKLIST_TREEWIDGET_H #define REMOTEDECKLIST_TREEWIDGET_H +#include #include +#include +#include +#include +#include +#include #include +#include +#include class Response; class AbstractClient; class QSortFilterProxyModel; class ServerInfo_DeckStorage_TreeItem; +class QObject; +class QWidget; class RemoteDeckList_TreeModel : public QAbstractItemModel { @@ -22,6 +32,7 @@ class RemoteDeckList_TreeModel : public QAbstractItemModel public: class DirectoryNode; class FileNode; + class Node { protected: diff --git a/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp b/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp index d62bf81aa..c131c3cbf 100644 --- a/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp +++ b/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp @@ -1,16 +1,27 @@ #include "remote_replay_list_tree_widget.h" #include "../../../pixel_map_generator.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay_match.pb.h" +#include +#include #include #include +#include #include +#include +#include +#include #include #include #include #include #include +class QObject; +class QWidget; + const int RemoteReplayList_TreeModel::numberOfColumns = 6; RemoteReplayList_TreeModel::MatchNode::MatchNode(const ServerInfo_ReplayMatch &_matchInfo) diff --git a/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.h b/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.h index 10e698aee..e99702e60 100644 --- a/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.h +++ b/cockatrice/src/interface/widgets/server/remote/remote_replay_list_tree_widget.h @@ -9,21 +9,30 @@ #ifndef REMOTEREPLAYLIST_TREEWIDGET_H #define REMOTEREPLAYLIST_TREEWIDGET_H -#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include class Response; class AbstractClient; class QSortFilterProxyModel; +class QObject; +class QWidget; class RemoteReplayList_TreeModel : public QAbstractItemModel { Q_OBJECT private: - class MatchNode; class ReplayNode; + class Node { protected: diff --git a/cockatrice/src/interface/widgets/server/user/user_avatar_provider.cpp b/cockatrice/src/interface/widgets/server/user/user_avatar_provider.cpp index c115caa47..cb5f84eef 100644 --- a/cockatrice/src/interface/widgets/server/user/user_avatar_provider.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_avatar_provider.cpp @@ -1,8 +1,15 @@ #include "user_avatar_provider.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" + +#include #include #include #include +#include +#include UserAvatarProvider::UserAvatarProvider(AbstractClient *client, QObject *parent) : QObject(parent), client(client) { diff --git a/cockatrice/src/interface/widgets/server/user/user_avatar_provider.h b/cockatrice/src/interface/widgets/server/user/user_avatar_provider.h index 44491e544..c1e75bc1c 100644 --- a/cockatrice/src/interface/widgets/server/user/user_avatar_provider.h +++ b/cockatrice/src/interface/widgets/server/user/user_avatar_provider.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include class AbstractClient; diff --git a/cockatrice/src/interface/widgets/server/user/user_card_art_provider.cpp b/cockatrice/src/interface/widgets/server/user/user_card_art_provider.cpp index 2ba745715..d84bd5804 100644 --- a/cockatrice/src/interface/widgets/server/user/user_card_art_provider.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_card_art_provider.cpp @@ -2,9 +2,22 @@ #include "../../../card_picture_loader/card_picture_loader.h" #include "../../cards/card_art_utils.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include +#include #include +#include +#include +#include #include +#include +#include static QString makeKey(const QString &user, const QString &card, const QString &providerId) { diff --git a/cockatrice/src/interface/widgets/server/user/user_card_art_provider.h b/cockatrice/src/interface/widgets/server/user/user_card_art_provider.h index e8283a891..ce9225b00 100644 --- a/cockatrice/src/interface/widgets/server/user/user_card_art_provider.h +++ b/cockatrice/src/interface/widgets/server/user/user_card_art_provider.h @@ -1,12 +1,16 @@ #ifndef COCKATRICE_USER_CARD_ART_PROVIDER_H #define COCKATRICE_USER_CARD_ART_PROVIDER_H +#include #include #include #include #include #include -#include +#include +#include + +class ExactCard; class UserCardArtProvider : public QObject { diff --git a/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.cpp b/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.cpp index d49e3d540..f8b57cfc2 100644 --- a/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.cpp @@ -3,30 +3,50 @@ #include "../../../card_picture_loader/card_picture_loader.h" #include "../../cards/art_crop_attribution.h" #include "../../utility/completer_utils.h" -#include "card/card_search_model.h" #include "card_database_display_model.h" #include "card_database_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" #include "user_card_art_provider.h" #include "user_list_painter.h" +#include +#include +#include #include #include #include +#include #include #include -#include #include #include #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 { diff --git a/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.h b/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.h index 24e14dce5..bfba8b007 100644 --- a/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.h +++ b/cockatrice/src/interface/widgets/server/user/user_card_settings_dialog.h @@ -3,24 +3,26 @@ #include "user_list_painter.h" -#include #include +#include #include +#include +#include +#include +#include +#include class QCompleter; -class QFocusEvent; class QGroupBox; -class QKeyEvent; -class QMouseEvent; class QLineEdit; class QDoubleSpinBox; class QLabel; class QPushButton; -class QWheelEvent; class CardDatabaseModel; class CardDatabaseDisplayModel; class CardSearchModel; class CardCompleterProxyModel; +class QComboBox; /** * @brief Interactive preview of the user list banner art. diff --git a/cockatrice/src/interface/widgets/server/user/user_context_menu.cpp b/cockatrice/src/interface/widgets/server/user/user_context_menu.cpp index f95ad88e4..c8fe97cda 100644 --- a/cockatrice/src/interface/widgets/server/user/user_context_menu.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_context_menu.cpp @@ -1,20 +1,42 @@ #include "user_context_menu.h" +#include "../../../../game/abstract_game.h" +#include "../../../../game/game_event_handler.h" +#include "../../../../game/game_meta_info.h" #include "../../dialogs/dlg_report_user.h" -#include "../../interface/widgets/tabs/tab_account.h" -#include "../../interface/widgets/tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_supervisor.h" #include "../chat_view/chat_view.h" +#include "../game_link.h" #include "../game_selector.h" +#include "../game_type_map.h" +#include "libcockatrice/protocol/pb/admin_commands.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_ban.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_gametype.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_room.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_warning.pb.h" #include "user_info_box.h" +#include "user_level.h" #include "user_list_dialog.h" #include "user_list_manager.h" #include "user_list_proxy.h" #include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -27,6 +49,10 @@ #include #include #include +#include +#include + +class QVariant; UserContextMenu::UserContextMenu(TabSupervisor *_tabSupervisor, QWidget *parent, AbstractGame *_game) : QObject(parent), client(_tabSupervisor->getClient()), tabSupervisor(_tabSupervisor), diff --git a/cockatrice/src/interface/widgets/server/user/user_context_menu.h b/cockatrice/src/interface/widgets/server/user/user_context_menu.h index 0922eae94..2536819a4 100644 --- a/cockatrice/src/interface/widgets/server/user/user_context_menu.h +++ b/cockatrice/src/interface/widgets/server/user/user_context_menu.h @@ -11,19 +11,22 @@ #include #include +#include #include #include +#include +#include + class AbstractGame; class UserListProxy; class AbstractClient; class ChatView; class CommandContainer; class QAction; -class QMenu; class QPoint; class Response; -class ServerInfo_User; class TabSupervisor; +class QWidget; class UserContextMenu : public QObject { diff --git a/cockatrice/src/interface/widgets/server/user/user_info_box.cpp b/cockatrice/src/interface/widgets/server/user/user_info_box.cpp index 3d89cecf5..ff3d9a224 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_box.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_info_box.cpp @@ -5,20 +5,36 @@ #include "../../interface/widgets/dialogs/dlg_edit_password.h" #include "../../interface/widgets/dialogs/dlg_edit_user.h" #include "../../interface/widgets/utility/get_text_with_max.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/utility/days_years_between.h" #include "user_card_settings_dialog.h" +#include "user_level.h" +#include "user_list_painter.h" +#include +#include #include +#include +#include +#include #include #include -#include #include +#include +#include #include +#include +#include +#include +#include #include #include #include #include #include #include +#include +#include UserInfoBox::UserInfoBox(AbstractClient *_client, bool _editable, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags), client(_client), editable(_editable) diff --git a/cockatrice/src/interface/widgets/server/user/user_info_box.h b/cockatrice/src/interface/widgets/server/user/user_info_box.h index 955cb9d3d..6bc571a37 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_box.h +++ b/cockatrice/src/interface/widgets/server/user/user_info_box.h @@ -7,13 +7,15 @@ #ifndef USERINFOBOX_H #define USERINFOBOX_H -#include #include +#include #include +#include #include #include #include -#include +#include +#include class AbstractClient; class Response; diff --git a/cockatrice/src/interface/widgets/server/user/user_info_connection.cpp b/cockatrice/src/interface/widgets/server/user/user_info_connection.cpp index f934960f8..d23ac63ba 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_connection.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_info_connection.cpp @@ -2,7 +2,10 @@ #include "../../../../client/settings/cache_settings.h" -#include +#include +#include +#include +#include #include #include diff --git a/cockatrice/src/interface/widgets/server/user/user_info_connection.h b/cockatrice/src/interface/widgets/server/user/user_info_connection.h index 6278815a9..b44d97d42 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_connection.h +++ b/cockatrice/src/interface/widgets/server/user/user_info_connection.h @@ -7,12 +7,11 @@ #ifndef USERCONNECTION_INFORMATION_H #define USERCONNECTION_INFORMATION_H -#include -#include -#include #include -#include -#include +#include +#include +#include +#include inline Q_LOGGING_CATEGORY(UserInfoConnectionLog, "user_info_connection"); diff --git a/cockatrice/src/interface/widgets/server/user/user_info_popup.cpp b/cockatrice/src/interface/widgets/server/user/user_info_popup.cpp index 967de2f2c..c3e880084 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_popup.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_info_popup.cpp @@ -4,26 +4,61 @@ #include "../../interface/pixel_map_generator.h" #include "../../interface/theme_manager.h" #include "../../interface/widgets/tabs/tab_supervisor.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include "user_level.h" #include "user_list_painter.h" #include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include +#include #include #include -#include #include #include +#include +#include +#include + +class QAction; /// Qt stylesheets accept #aarrggbb, which is QColor::name(QColor::HexArgb). static QString colorStr(const QColor &color) diff --git a/cockatrice/src/interface/widgets/server/user/user_info_popup.h b/cockatrice/src/interface/widgets/server/user/user_info_popup.h index ed7320fba..f2a91d025 100644 --- a/cockatrice/src/interface/widgets/server/user/user_info_popup.h +++ b/cockatrice/src/interface/widgets/server/user/user_info_popup.h @@ -1,24 +1,29 @@ #ifndef COCKATRICE_USER_INFO_POPUP_H #define COCKATRICE_USER_INFO_POPUP_H -#include "../../interface/widgets/server/game_type_map.h" #include "user_list_painter.h" +#include #include -#include -#include +#include #include -#include +#include +#include #include -#include -#include -#include #include +#include +#include +#include class AbstractClient; class QLabel; class QPushButton; class TabSupervisor; +class QListView; +class QPoint; +class QStandardItemModel; +class Response; +template class QMap; // ── Roles ───────────────────────────────────────────────────────────────────── diff --git a/cockatrice/src/interface/widgets/server/user/user_list_dialog.cpp b/cockatrice/src/interface/widgets/server/user/user_list_dialog.cpp index fc5b520ad..605c89734 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_dialog.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_list_dialog.cpp @@ -1,17 +1,26 @@ #include "user_list_dialog.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" + #include #include +#include #include +#include #include #include #include #include #include #include +#include #include #include +#include #include +#include + +class QWidget; BanDialog::BanDialog(const ServerInfo_User &info, QWidget *parent) : QDialog(parent) { diff --git a/cockatrice/src/interface/widgets/server/user/user_list_dialog.h b/cockatrice/src/interface/widgets/server/user/user_list_dialog.h index fa7d5de92..e10fca5bb 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_dialog.h +++ b/cockatrice/src/interface/widgets/server/user/user_list_dialog.h @@ -2,7 +2,8 @@ #define COCKATRICE_USER_LIST_DIALOG_H #include -#include +#include +#include class QComboBox; class QLabel; @@ -11,6 +12,8 @@ class QRadioButton; class QSpinBox; class QLineEdit; class QCheckBox; +class QWidget; +class ServerInfo_User; class BanDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/server/user/user_list_manager.cpp b/cockatrice/src/interface/widgets/server/user/user_list_manager.cpp index 216420006..385a969fd 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_manager.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_list_manager.cpp @@ -1,8 +1,11 @@ #include "user_list_manager.h" -#include "../../client/sound_engine.h" -#include "user_info_box.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include +#include +#include #include #include #include diff --git a/cockatrice/src/interface/widgets/server/user/user_list_manager.h b/cockatrice/src/interface/widgets/server/user/user_list_manager.h index 6238f0799..b2ff69286 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_manager.h +++ b/cockatrice/src/interface/widgets/server/user/user_list_manager.h @@ -10,18 +10,22 @@ #include "user_list_proxy.h" #include -#include +#include +#include +#include +// IWYU pragma: keep +// ServerInfo_User appears by value and inside QList in slot signatures, so the +// moc-generated code needs the complete type. #include class AbstractClient; class Event_AddToList; -class Event_ListRooms; class Event_RemoveFromList; class Event_UserJoined; class Event_UserLeft; class Response; class ServerInfo_User; -class TabSupervisor; +template class QList; class UserListManager : public QObject, public UserListProxy { diff --git a/cockatrice/src/interface/widgets/server/user/user_list_painter.cpp b/cockatrice/src/interface/widgets/server/user/user_list_painter.cpp index 34a3d6ae1..08eaaaff7 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_painter.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_list_painter.cpp @@ -1,14 +1,35 @@ #include "user_list_painter.h" #include "../../interface/pixel_map_generator.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include static constexpr int RowHeight = 72; static constexpr int AvatarSize = 36; diff --git a/cockatrice/src/interface/widgets/server/user/user_list_painter.h b/cockatrice/src/interface/widgets/server/user/user_list_painter.h index 352a01f6b..e7293a097 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_painter.h +++ b/cockatrice/src/interface/widgets/server/user/user_list_painter.h @@ -5,16 +5,19 @@ #include #include -#include #include -#include #include +#include #include +#include +#include class QPainter; class QModelIndex; class QStyleOptionViewItem; class ServerInfo_User; +class QPixmap; +template class QMap; struct CardArtParams { diff --git a/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.cpp b/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.cpp index 937058024..78d45d120 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.cpp @@ -1,12 +1,13 @@ #include "user_list_panel_widget.h" #include "../../../../client/settings/cache_settings.h" -#include "user_list_manager.h" #include "user_list_widget.h" #include +#include +#include +#include #include -#include #include namespace diff --git a/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.h b/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.h index 7ae14dfcf..088365bbc 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.h +++ b/cockatrice/src/interface/widgets/server/user/user_list_panel_widget.h @@ -8,7 +8,9 @@ #include "user_list_widget.h" +#include #include +#include class AbstractClient; class QLineEdit; diff --git a/cockatrice/src/interface/widgets/server/user/user_list_widget.cpp b/cockatrice/src/interface/widgets/server/user/user_list_widget.cpp index 3b8fc08b7..b3fd1d1a9 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_widget.cpp +++ b/cockatrice/src/interface/widgets/server/user/user_list_widget.cpp @@ -4,18 +4,64 @@ #include "../../interface/pixel_map_generator.h" #include "../../interface/theme_manager.h" #include "../../interface/widgets/tabs/tab_supervisor.h" +#include "user_avatar_provider.h" +#include "user_card_art_provider.h" #include "user_context_menu.h" +#include "user_info_popup.h" +#include "user_level.h" +#include "user_list_manager.h" #include "user_list_painter.h" +#include "user_list_proxy.h" +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include #include +#include + +class QPixmap; +struct GameInviteOption; namespace UserListRoles { diff --git a/cockatrice/src/interface/widgets/server/user/user_list_widget.h b/cockatrice/src/interface/widgets/server/user/user_list_widget.h index 9802387b2..8093222ea 100644 --- a/cockatrice/src/interface/widgets/server/user/user_list_widget.h +++ b/cockatrice/src/interface/widgets/server/user/user_list_widget.h @@ -7,33 +7,34 @@ #ifndef USERLIST_H #define USERLIST_H -#include "../../cards/card_info_picture_art_crop_widget.h" -#include "../../interface/widgets/server/game_link.h" -#include "user_avatar_provider.h" -#include "user_card_art_provider.h" -#include "user_info_popup.h" -#include "user_list_manager.h" -#include "user_list_painter.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" -#include #include +#include +#include #include +#include #include -#include #include #include -#include -#include +#include +#include -class QTreeWidget; -class ServerInfo_User; class AbstractClient; class TabSupervisor; -class Response; -class CommandContainer; class UserContextMenu; class UserListWidget; -class QShowEvent; +class QModelIndex; +class QPixmap; +class QPoint; +class QTimer; +class QWidget; +class UserAvatarProvider; +class UserCardArtProvider; +class UserInfoPopup; +class UserListManager; +struct CardArtParams; +struct GameInviteOption; class UserListItemDelegate : public QStyledItemDelegate { diff --git a/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.cpp index 9a70e94c5..9c43d1f7b 100644 --- a/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.cpp @@ -2,14 +2,22 @@ #include "settings_search_model.h" +#include #include #include #include #include +#include #include +#include #include +#include #include #include +#include +#include +#include +#include /** * @brief Recursively collects all widgets within a layout diff --git a/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.h b/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.h index 3140f94f3..722a91e62 100644 --- a/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/abstract_settings_page.h @@ -3,6 +3,7 @@ #include #include +#include #define WIKI_CUSTOM_PIC_URL "https://github.com/Cockatrice/Cockatrice/wiki/Custom-Picture-Download-URLs" #define WIKI_CUSTOM_SHORTCUTS "https://github.com/Cockatrice/Cockatrice/wiki/Custom-Keyboard-Shortcuts" diff --git a/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.cpp index 415eef6b9..4c38459c6 100644 --- a/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.cpp @@ -1,29 +1,44 @@ #include "appearance_settings_page.h" #include "../../../client/settings/cache_settings.h" -#include "../../../client/settings/card_counter_settings.h" #include "../../client/settings/card_counter_settings.h" #include "../../palette_editor/palette_editor_dialog.h" +#include "../../theme_config.h" #include "../dialogs/override_printing_warning.h" #include "../general/home_tab_button_color.h" #include "../interface/theme_manager.h" #include "../interface/widgets/general/background_sources.h" #include "../playmat/playmat_collection_dialog.h" -#include "../playmat/playmat_settings_dialog.h" +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/utility/macros.h" +#include #include +#include #include +#include #include +#include #include -#include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include #include #include #include #include +#include AppearanceSettingsPage::AppearanceSettingsPage() { @@ -59,15 +74,10 @@ AppearanceSettingsPage::AppearanceSettingsPage() connect(&schemeCombo, &QComboBox::currentIndexChanged, this, [this] { themeManager->setColorScheme(schemeCombo.currentData().toString()); }); - // Qt widget style; "System" lets the application decide + // Qt widget style; "System" lets the application decide. The broken Windows + // native styles are still offered, but selecting one raises a warning. styleCombo.addItem(tr("System"), QStringLiteral("System")); for (const QString &key : QStyleFactory::keys()) { - // The Windows 11 native style is broken (board rendering glitches when - // moving cards), so never offer it; it is already sanitized at apply - // time in ThemeManager. - if (key.compare("windows11", Qt::CaseInsensitive) == 0) { - continue; - } styleCombo.addItem(key, key); } @@ -77,6 +87,7 @@ AppearanceSettingsPage::AppearanceSettingsPage() connect(&styleCombo, &QComboBox::currentIndexChanged, this, [this] { themeManager->setStyleName(styleCombo.currentData().toString()); }); + connect(&styleCombo, &QComboBox::currentIndexChanged, this, &AppearanceSettingsPage::updateStyleWarning); connect(themeManager, &ThemeManager::themeChanged, this, [this, dirPath] { const QString newDir = themeManager->getAvailableThemes().value(SettingsCache::instance().getThemeName()); @@ -93,6 +104,8 @@ AppearanceSettingsPage::AppearanceSettingsPage() const int styleIdx = currentStyle.isEmpty() ? 0 : styleCombo.findData(currentStyle); styleCombo.setCurrentIndex(styleIdx >= 0 ? styleIdx : 0); styleCombo.blockSignals(false); + + updateStyleWarning(); }); connect(&editPaletteButton, &QPushButton::clicked, this, &AppearanceSettingsPage::editPalette); @@ -105,7 +118,11 @@ AppearanceSettingsPage::AppearanceSettingsPage() themeGrid->addWidget(&schemeCombo, 2, 1); themeGrid->addWidget(&styleComboLabel, 3, 0); themeGrid->addWidget(&styleCombo, 3, 1); - themeGrid->addWidget(&editPaletteButton, 4, 1); + themeGrid->addWidget(&styleWarningLabel, 4, 0, 1, 2); + themeGrid->addWidget(&editPaletteButton, 5, 1); + + styleWarningLabel.setWordWrap(true); + styleWarningLabel.setAlignment(Qt::AlignLeft | Qt::AlignVCenter); themeGroupBox = new QGroupBox; themeGroupBox->setLayout(themeGrid); @@ -450,6 +467,14 @@ void AppearanceSettingsPage::updateHomeTabSettingsVisibility() homeTabDisplayCardNameCheckBox.setVisible(visible); } +void AppearanceSettingsPage::updateStyleWarning() +{ + const QString style = styleCombo.currentData().toString(); + const bool broken = + style.compare("windows11", Qt::CaseInsensitive) == 0 || style.compare("windowsvista", Qt::CaseInsensitive) == 0; + styleWarningLabel.setVisible(broken); +} + void AppearanceSettingsPage::showShortcutsChanged(QT_STATE_CHANGED_T value) { SettingsCache::instance().userInterface().setShowShortcuts(value); @@ -512,6 +537,11 @@ void AppearanceSettingsPage::retranslateUi() schemeComboLabel.setText(tr("Active theme palette:")); styleComboLabel.setText(tr("Active theme style:")); styleCombo.setToolTip(tr("Qt widget style saved to this theme (\"System\" lets the application decide)")); + styleWarningLabel.setText( + tr("Warning: the Windows 11 and Windows Vista styles are buggy and can render controls such as combo boxes " + "unreadable, especially in dark mode. Fusion is the recommended style on every platform: it is Qt's " + "cross-platform style and the one Cockatrice is developed against.")); + updateStyleWarning(); editPaletteButton.setText(tr("Edit theme palette")); homeTabGroupBox->setTitle(tr("Home tab settings")); diff --git a/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.h b/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.h index bec4cd72f..8afd326a3 100644 --- a/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/appearance_settings_page.h @@ -5,11 +5,14 @@ #include #include -#include #include +#include #include #include #include +#include + +class QGroupBox; class AppearanceSettingsPage : public AbstractSettingsPage { @@ -19,6 +22,7 @@ private slots: void openThemeLocation(); void editPalette(); void updateHomeTabSettingsVisibility(); + void updateStyleWarning(); void showShortcutsChanged(QT_STATE_CHANGED_T enabled); void overrideAllCardArtWithPersonalPreferenceToggled(QT_STATE_CHANGED_T enabled); @@ -34,6 +38,7 @@ private: QComboBox schemeCombo; QLabel styleComboLabel; QComboBox styleCombo; + QLabel styleWarningLabel; QPushButton editPaletteButton; QLabel homeTabBackgroundSourceLabel; diff --git a/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.cpp index bdbb38c95..2020b2031 100644 --- a/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.cpp @@ -4,19 +4,39 @@ #include "../../pixel_map_generator.h" #include "update/card_spoiler/spoiler_background_updater.h" +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include #include #include +#include +#include +#include #include #include +#include +#include +#include #include #include +#include +#include #include #include #include #include +#include +#include DeckEditorSettingsPage::DeckEditorSettingsPage() { diff --git a/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.h b/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.h index 23e33fa20..47f840191 100644 --- a/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/deck_editor_settings_page.h @@ -4,10 +4,17 @@ #include "abstract_settings_page.h" #include -#include #include -#include #include +#include +#include + +class QAction; +class QGroupBox; +class QLineEdit; +class QListWidget; +class QListWidgetItem; +class QModelIndex; class DeckEditorSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/settings_page/general_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/general_settings_page.cpp index 57099fb4a..73a0f7be2 100644 --- a/cockatrice/src/interface/widgets/settings_page/general_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/general_settings_page.cpp @@ -6,13 +6,26 @@ #include "../server/user/user_info_connection.h" #include "update/client/release_channel.h" +#include #include +#include +#include #include #include #include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include #include #include #include @@ -22,6 +35,9 @@ #include #include #include +#include +#include +#include enum startupCardUpdateCheckBehaviorIndex { @@ -145,12 +161,18 @@ GeneralSettingsPage::GeneralSettingsPage() newVersionOracleCheckBox.setChecked(settings.updates().getNotifyAboutNewVersion()); + cardDatabaseUpdateTrayNotificationCheckBox.setChecked(settings.updates().getCardDatabaseUpdateTrayNotification()); + + connect(&cardDatabaseUpdateTrayNotificationCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.updates(), + &UpdatesSettings::setCardDatabaseUpdateTrayNotification); + auto *cardDatabaseGrid = new QGridLayout; cardDatabaseGrid->addWidget(&startupCardUpdateCheckBehaviorLabel, 0, 0); cardDatabaseGrid->addWidget(&startupCardUpdateCheckBehaviorSelector, 0, 1); cardDatabaseGrid->addWidget(&cardUpdateCheckIntervalLabel, 1, 0); cardDatabaseGrid->addWidget(&cardUpdateCheckIntervalSpinBox, 1, 1); cardDatabaseGrid->addWidget(&lastCardUpdateCheckDateLabel, 2, 1); + cardDatabaseGrid->addWidget(&cardDatabaseUpdateTrayNotificationCheckBox, 3, 0, 1, 2); cardDatabaseGroupBox = new QGroupBox; cardDatabaseGroupBox->setLayout(cardDatabaseGrid); @@ -549,6 +571,7 @@ void GeneralSettingsPage::retranslateUi() tr("Always update in the background")); cardUpdateCheckIntervalLabel.setText(tr("Check for card database updates every")); cardUpdateCheckIntervalSpinBox.setSuffix(tr(" days")); + cardDatabaseUpdateTrayNotificationCheckBox.setText(tr("Notify in the system tray while the card database updates")); QDate lastCheckDate = settings.updates().getLastCardUpdateCheck(); int daysAgo = lastCheckDate.daysTo(QDate::currentDate()); diff --git a/cockatrice/src/interface/widgets/settings_page/general_settings_page.h b/cockatrice/src/interface/widgets/settings_page/general_settings_page.h index 07e0ba3a9..fcf1c78d0 100644 --- a/cockatrice/src/interface/widgets/settings_page/general_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/general_settings_page.h @@ -5,11 +5,16 @@ #include #include -#include #include #include -#include #include +#include +#include +#include + +class QGroupBox; +class QLineEdit; +class QPushButton; inline Q_LOGGING_CATEGORY(GeneralSettingsPageLog, "general_settings_page"); @@ -70,6 +75,7 @@ private: QLabel cardUpdateCheckIntervalLabel; QSpinBox cardUpdateCheckIntervalSpinBox; QLabel lastCardUpdateCheckDateLabel; + QCheckBox cardDatabaseUpdateTrayNotificationCheckBox; QCheckBox showTipsOnStartup; QLabel startupTabLabel; diff --git a/cockatrice/src/interface/widgets/settings_page/messages_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/messages_settings_page.cpp index 68e3f2ac7..9494155af 100644 --- a/cockatrice/src/interface/widgets/settings_page/messages_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/messages_settings_page.cpp @@ -3,14 +3,27 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" #include "../interface/widgets/utility/get_text_with_max.h" +#include "libcockatrice/utility/macros.h" +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include #include +#include +#include #include #include #include #include +#include MessagesSettingsPage::MessagesSettingsPage() { diff --git a/cockatrice/src/interface/widgets/settings_page/messages_settings_page.h b/cockatrice/src/interface/widgets/settings_page/messages_settings_page.h index 4d491136f..e85e6cca7 100644 --- a/cockatrice/src/interface/widgets/settings_page/messages_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/messages_settings_page.h @@ -4,10 +4,15 @@ #include "abstract_settings_page.h" #include -#include #include -#include +#include #include +#include + +class QAction; +class QGroupBox; +class QLineEdit; +class QListWidget; class MessagesSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.cpp b/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.cpp index 2fdff3bce..bf35b7557 100644 --- a/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.cpp +++ b/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.cpp @@ -7,7 +7,24 @@ #include "settings_search_model.h" +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QObject; SettingsSearchDelegate::SettingsSearchDelegate(QObject *parent) : QStyledItemDelegate(parent) { diff --git a/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.h b/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.h index aa296049a..2e48a3de9 100644 --- a/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.h +++ b/cockatrice/src/interface/widgets/settings_page/settings_search_delegate.h @@ -6,8 +6,14 @@ #ifndef COCKATRICE_SETTINGS_SEARCH_DELEGATE_H #define COCKATRICE_SETTINGS_SEARCH_DELEGATE_H +#include #include +#include +#include #include +#include + +class QObject; /** * @brief Custom paint delegate for settings search result items diff --git a/cockatrice/src/interface/widgets/settings_page/settings_search_model.cpp b/cockatrice/src/interface/widgets/settings_page/settings_search_model.cpp index 71f859d4b..015a7d45d 100644 --- a/cockatrice/src/interface/widgets/settings_page/settings_search_model.cpp +++ b/cockatrice/src/interface/widgets/settings_page/settings_search_model.cpp @@ -6,7 +6,14 @@ #include "settings_search_model.h" #include +#include +#include +#include +#include #include +#include + +class QObject; SettingsSearchModel::SettingsSearchModel(QObject *parent) : QAbstractListModel(parent) { diff --git a/cockatrice/src/interface/widgets/settings_page/settings_search_model.h b/cockatrice/src/interface/widgets/settings_page/settings_search_model.h index 0b590f180..902a29312 100644 --- a/cockatrice/src/interface/widgets/settings_page/settings_search_model.h +++ b/cockatrice/src/interface/widgets/settings_page/settings_search_model.h @@ -7,9 +7,17 @@ #define COCKATRICE_SETTINGS_SEARCH_MODEL_H #include +#include #include +#include +#include #include -#include +#include +#include +#include + +class QObject; +class QWidget; /** * @brief Represents a single searchable setting entry diff --git a/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.cpp index 1277d0e49..ea7ed745c 100644 --- a/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.cpp @@ -8,8 +8,17 @@ #include "../interface/widgets/utility/sequence_edit.h" #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include ShortcutSettingsPage::ShortcutSettingsPage() { diff --git a/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.h b/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.h index 05391df77..6ae7fbfa7 100644 --- a/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/shortcut_settings_page.h @@ -3,14 +3,18 @@ #include "abstract_settings_page.h" -#include -#include -#include -#include +#include +#include class SequenceEdit; class ShortcutTreeView; class SearchLineEdit; +class QGridLayout; +class QGroupBox; +class QHBoxLayout; +class QLabel; +class QPushButton; +class QVBoxLayout; class ShortcutSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/settings_page/sound_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/sound_settings_page.cpp index 2bd776671..05725bb42 100644 --- a/cockatrice/src/interface/widgets/settings_page/sound_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/sound_settings_page.cpp @@ -3,10 +3,21 @@ #include "../../../client/settings/cache_settings.h" #include "../client/sound_engine.h" +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include SoundSettingsPage::SoundSettingsPage() { diff --git a/cockatrice/src/interface/widgets/settings_page/sound_settings_page.h b/cockatrice/src/interface/widgets/settings_page/sound_settings_page.h index f90bcbc5a..acaa4f7c4 100644 --- a/cockatrice/src/interface/widgets/settings_page/sound_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/sound_settings_page.h @@ -5,10 +5,13 @@ #include #include -#include #include #include -#include +#include + +class QGroupBox; +class QSlider; +class QSpinBox; class SoundSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/settings_page/storage_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/storage_settings_page.cpp index 4aad91115..a71296820 100644 --- a/cockatrice/src/interface/widgets/settings_page/storage_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/storage_settings_page.cpp @@ -5,12 +5,21 @@ #include "../../card_picture_loader/card_picture_loader_local_schemes.h" #include "../interface/card_picture_loader/card_picture_loader.h" +#include #include #include +#include +#include +#include #include +#include +#include +#include +#include #include #include #include +#include StorageSettingsPage::StorageSettingsPage() { diff --git a/cockatrice/src/interface/widgets/settings_page/storage_settings_page.h b/cockatrice/src/interface/widgets/settings_page/storage_settings_page.h index 5c8a00981..1c9a35323 100644 --- a/cockatrice/src/interface/widgets/settings_page/storage_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/storage_settings_page.h @@ -3,11 +3,13 @@ #include "abstract_settings_page.h" -#include -#include #include #include #include +#include + +class QComboBox; +class QGroupBox; class StorageSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.cpp b/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.cpp index 03b9455fa..0a5f57e1f 100644 --- a/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.cpp +++ b/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.cpp @@ -3,13 +3,22 @@ #include "../../../client/settings/cache_settings.h" #include "../interface/widgets/tabs/tab_supervisor.h" #include "../tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.h" +#include "libcockatrice/utility/macros.h" +#include #include +#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include enum visualDeckStoragePromptForConversionIndex { diff --git a/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.h b/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.h index 277c5461e..297d80c35 100644 --- a/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.h +++ b/cockatrice/src/interface/widgets/settings_page/user_interface_settings_page.h @@ -5,13 +5,14 @@ #include #include -#include #include #include #include #include -#include #include +#include + +class QGroupBox; class UserInterfaceSettingsPage : public AbstractSettingsPage { diff --git a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp index 6423c581b..4044f03db 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.cpp @@ -11,35 +11,49 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../deck_loader/deck_file_format.h" +#include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/loaded_deck.h" #include "../cards/additional_info/deck_color_identity.h" +#include "../cards/card_info_frame_widget.h" #include "../client/network/interfaces/deck_stats_interface.h" #include "../client/network/interfaces/tapped_out_interface.h" +#include "../deck_editor/deck_editor_card_database_dock_widget.h" +#include "../deck_editor/deck_editor_card_info_dock_widget.h" +#include "../deck_editor/deck_editor_deck_dock_widget.h" +#include "../deck_editor/deck_editor_filter_dock_widget.h" +#include "../deck_editor/deck_editor_printing_selector_dock_widget.h" #include "../deck_editor/deck_state_manager.h" #include "../interface/card_picture_loader/card_picture_loader.h" -#include "../interface/pixel_map_generator.h" #include "../interface/widgets/dialogs/dlg_load_deck.h" #include "../interface/widgets/dialogs/dlg_load_deck_from_clipboard.h" #include "../interface/widgets/dialogs/dlg_load_deck_from_website.h" #include "../interface/widgets/dialogs/dlg_share_deck.h" +#include "../menus/deck_editor_menu.h" +#include "../printing_selector/printing_selector.h" #include "../utility/visibility_change_listener.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/utility/card_ref.h" #include "tab_supervisor.h" #include -#include #include #include +#include #include -#include -#include +#include +#include +#include +#include #include #include #include -#include #include -#include -#include -#include +#include #include +#include #include #include #include @@ -50,6 +64,8 @@ #include #include #include +#include +#include /** * @brief Constructs the AbstractTabDeckEditor. diff --git a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h index dae8f5b0a..1782e7afd 100644 --- a/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h +++ b/cockatrice/src/interface/widgets/tabs/abstract_tab_deck_editor.h @@ -9,48 +9,31 @@ #define TAB_GENERIC_DECK_EDITOR_H #include "../../deck_loader/deck_loader.h" -#include "../interface/widgets/deck_editor/deck_editor_card_database_dock_widget.h" -#include "../interface/widgets/deck_editor/deck_editor_card_info_dock_widget.h" -#include "../interface/widgets/deck_editor/deck_editor_database_display_widget.h" -#include "../interface/widgets/deck_editor/deck_editor_deck_dock_widget.h" -#include "../interface/widgets/deck_editor/deck_editor_filter_dock_widget.h" -#include "../interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.h" -#include "../interface/widgets/menus/deck_editor_menu.h" -#include "../interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h" +#include "libcockatrice/card/card_info.h" #include "tab.h" -#include +#include +#include +#include +#include class DeckStateManager; class CardDatabaseModel; -class CardDatabaseDisplayModel; - -class CardInfoFrameWidget; -class DeckLoader; class DeckEditorMenu; class DeckEditorCardInfoDockWidget; class DeckEditorCardDatabaseDockWidget; class DeckEditorDeckDockWidget; class DeckEditorFilterDockWidget; class DeckEditorPrintingSelectorDockWidget; -class DeckPreviewDeckTagsDisplayWidget; class Response; class FilterTree; -class FilterTreeModel; -class FilterBuilder; - -class QTreeView; -class QTextEdit; -class QLabel; -class QComboBox; -class QGroupBox; class QMessageBox; -class QHBoxLayout; -class QVBoxLayout; -class QPushButton; class QDockWidget; class QMenu; class QAction; +class ExactCard; +class TabSupervisor; +struct LoadedDeck; /** * @class AbstractTabDeckEditor diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp index 40882db04..8d023cd61 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp @@ -2,6 +2,9 @@ #include #include +#include +#include +#include void ArchidektDeckListingApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.h index 723c65ce2..c42bc1315 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.h @@ -4,8 +4,9 @@ #include "deck_listings/archidekt_api_response_deck_listing_container.h" #include -#include +#include #include +#include class ArchidektDeckListingApiResponse { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp index 46c229156..d118301bb 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp @@ -1,5 +1,9 @@ #include "archidekt_api_response_card.h" +#include +#include +#include + void ArchidektApiResponseCard::fromJson(const QJsonObject &json) { id = json.value("id").toInt(); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.h index 559580da2..8e9e0b12a 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.h @@ -3,11 +3,10 @@ #include "archidekt_api_response_edition.h" -#include -#include #include +#include #include -#include +#include class ArchidektApiResponseCard { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp index f51d0f3e7..14b13a4ed 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp @@ -1,5 +1,11 @@ #include "archidekt_api_response_card_entry.h" +#include +#include +#include +#include +#include + void ArchidektApiResponseCardEntry::fromJson(const QJsonObject &json) { id = json.value("id").toInt(); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.h index 118cf5b13..eb7c4190c 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.h @@ -3,11 +3,10 @@ #include "archidekt_api_response_card.h" -#include -#include #include +#include #include -#include +#include struct Category { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp index 122617a22..73836b9c8 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp @@ -1,5 +1,9 @@ #include "archidekt_api_response_edition.h" +#include +#include +#include + void ArchidektApiResponseEdition::fromJson(const QJsonObject &json) { editionCode = json.value("editioncode").toString(); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.h index b898cd816..63d29652f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.h @@ -1,11 +1,8 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_EDITION_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_EDITION_H -#include -#include #include #include -#include class ArchidektApiResponseEdition { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp index a27d8d961..362ac0f63 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp @@ -1,6 +1,13 @@ #include "archidekt_api_response_deck.h" #include "../card/archidekt_api_response_card_entry.h" +#include "../deck_listings/archidekt_api_response_deck_owner.h" + +#include +#include +#include +#include +#include void ArchidektApiResponseDeck::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.h index b539d9dd1..6af0a01c5 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.h @@ -1,15 +1,14 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_H -#include "../card/archidekt_api_response_card.h" #include "../card/archidekt_api_response_card_entry.h" #include "../deck_listings/archidekt_api_response_deck_owner.h" #include "archidekt_api_response_deck_category.h" -#include -#include #include +#include #include +#include #include class ArchidektApiResponseDeck diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp index 990293bc6..0df8b9f68 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp @@ -1,5 +1,9 @@ #include "archidekt_api_response_deck_category.h" +#include +#include +#include + void ArchidektApiResponseDeckCategory::fromJson(const QJsonObject &json) { id = json.value("id").toInt(); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.h index 5e218b6a4..b31743643 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.h @@ -1,15 +1,8 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_CATEGORY_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_CATEGORY_H -#include "../card/archidekt_api_response_card.h" -#include "../card/archidekt_api_response_card_entry.h" -#include "../deck_listings/archidekt_api_response_deck_owner.h" - -#include -#include #include #include -#include class ArchidektApiResponseDeckCategory { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp index 416621b41..0f5290f02 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp @@ -3,8 +3,10 @@ #include "archidekt_api_response_deck_owner.h" #include -#include #include +#include +#include +#include void ArchidektApiResponseDeckListingContainer::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.h index 8924bb3f5..904d6b624 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.h @@ -3,11 +3,11 @@ #include "archidekt_api_response_deck_owner.h" -#include -#include #include +#include +#include #include -#include +#include class ArchidektApiResponseDeckListingContainer { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp index 3d6eac03d..67b80d67a 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp @@ -1,5 +1,9 @@ #include "archidekt_api_response_deck_owner.h" +#include +#include +#include + void ArchidektApiResponseDeckOwner::fromJson(const QJsonObject &json) { id = json.value("id").toInt(); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.h index df3f48fd2..f63d6af0e 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.h @@ -1,11 +1,11 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_OWNER_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_OWNER_H -#include -#include #include +#include #include -#include +#include +#include class ArchidektApiResponseDeckOwner { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp index 657ef3dbe..555ec7ec5 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp @@ -2,16 +2,39 @@ #include "../../../../../../client/settings/cache_settings.h" #include "../../../../../deck_loader/card_node_function.h" -#include "../../../../../deck_loader/deck_loader.h" -#include "../../../../cards/card_size_widget.h" +#include "../../../../../deck_loader/loaded_deck.h" #include "../../../../cards/deck_card_zone_display_widget.h" #include "../../../../visual_deck_editor/visual_deck_display_options_widget.h" +#include "../../../../visual_deck_editor/visual_deck_editor_widget.h" #include "../api_response/archidekt_formats.h" +#include "../api_response/card/archidekt_api_response_card.h" +#include "../api_response/card/archidekt_api_response_card_entry.h" +#include "../api_response/card/archidekt_api_response_edition.h" #include "../api_response/deck/archidekt_api_response_deck.h" +#include "deck_list_model.h" +#include "libcockatrice/deck_list/deck_list.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include +#include + +class CardSizeWidget; ArchidektApiResponseDeckDisplayWidget::ArchidektApiResponseDeckDisplayWidget(QWidget *parent, ArchidektApiResponseDeck _response, diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h index aaf272718..cdacc70b3 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h @@ -1,18 +1,22 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_DISPLAY_WIDGET_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_DISPLAY_WIDGET_H -#include "../../../../../deck_loader/deck_loader.h" -#include "../../../../cards/card_size_widget.h" -#include "../../../../general/layout_containers/flow_widget.h" -#include "../../../../visual_deck_editor/visual_deck_display_options_widget.h" #include "../api_response/deck/archidekt_api_response_deck.h" -#include "deck_list_model.h" -#include -#include -#include -#include +#include +#include +#include #include +#include + +class CardSizeWidget; +class DeckListModel; +class QHBoxLayout; +class QPushButton; +class QScrollArea; +class QVBoxLayout; +class VisualDeckDisplayOptionsWidget; +struct LoadedDeck; /** * @class ArchidektApiResponseDeckDisplayWidget diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp index c35c2d0b8..b5e28fcf5 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp @@ -1,17 +1,30 @@ #include "archidekt_api_response_deck_entry_display_widget.h" #include "../../../../../card_picture_loader/card_picture_loader.h" -#include "../../../../cards/card_info_picture_with_text_overlay_widget.h" #include "../../../../general/display/background_plate_widget.h" #include "../../../../general/display/charts/bars/color_bar.h" +#include "../../../../general/display/shadow_background_label.h" +#include "../api_response/deck_listings/archidekt_api_response_deck_listing_container.h" +#include "../api_response/deck_listings/archidekt_api_response_deck_owner.h" #include "archidekt_deck_preview_image_display_widget.h" -#include +#include +#include +#include #include #include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #define ARCHIDEKT_DEFAULT_IMAGE "https://storage.googleapis.com/topdekt-user/images/archidekt_deck_card_shadow.jpg" diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h index 575a81b5f..e8ed8561d 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.h @@ -1,17 +1,20 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_ENTRY_DISPLAY_WIDGET_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_ENTRY_DISPLAY_WIDGET_H -#include "../../../../cards/card_info_picture_with_text_overlay_widget.h" #include "../api_response/deck_listings/archidekt_api_response_deck_listing_container.h" -#include "archidekt_deck_preview_image_display_widget.h" -#include -#include -#include -#include +#include +#include +#include #include +#include class BackgroundPlateWidget; +class ArchidektDeckPreviewImageDisplayWidget; +class QLabel; +class QNetworkAccessManager; +class QNetworkReply; +class QVBoxLayout; /** * @class ArchidektApiResponseDeckEntryDisplayWidget diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp index 21e8e3f9a..9c4ea59ab 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp @@ -1,8 +1,18 @@ #include "archidekt_api_response_deck_listings_display_widget.h" -#include "../../../../cards/card_info_picture_with_text_overlay_widget.h" +#include "../../../../cards/card_size_widget.h" +#include "../../../../general/layout_containers/flow_widget.h" +#include "../api_response/archidekt_deck_listing_api_response.h" +#include "../api_response/deck_listings/archidekt_api_response_deck_listing_container.h" #include "archidekt_api_response_deck_entry_display_widget.h" +#include +#include +#include +#include +#include +#include + ArchidektApiResponseDeckListingsDisplayWidget::ArchidektApiResponseDeckListingsDisplayWidget( QWidget *parent, ArchidektDeckListingApiResponse response, diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.h index f9a887aa4..a9a7da7a1 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.h @@ -1,15 +1,15 @@ #ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_LISTINGS_DISPLAY_WIDGET_H #define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_LISTINGS_DISPLAY_WIDGET_H -#include "../../../../cards/card_size_widget.h" -#include "../../../../general/layout_containers/flow_widget.h" -#include "../api_response/archidekt_deck_listing_api_response.h" - -#include -#include -#include -#include +#include #include +#include + +class ArchidektDeckListingApiResponse; +class CardSizeWidget; +class FlowWidget; +class QHBoxLayout; +class QNetworkAccessManager; /** * @class ArchidektApiResponseDeckListingsDisplayWidget diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp index ced08491e..97383534f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp @@ -1,7 +1,11 @@ #include "archidekt_deck_preview_image_display_widget.h" -#include -#include +#include "../../../../general/display/shadow_background_label.h" + +#include +#include +#include +#include ArchidektDeckPreviewImageDisplayWidget::ArchidektDeckPreviewImageDisplayWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.h index 053823c45..991f27b6a 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.h @@ -1,10 +1,11 @@ #ifndef COCKATRICE_ARCHIDEKT_DECK_PREVIEW_IMAGE_DISPLAY_WIDGET_H #define COCKATRICE_ARCHIDEKT_DECK_PREVIEW_IMAGE_DISPLAY_WIDGET_H -#include "../../../../general/display/shadow_background_label.h" - -#include #include +#include + +class QLabel; +class ShadowBackgroundLabel; /** * @class ArchidektDeckPreviewImageDisplayWidget diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp index 888197f53..02badf1aa 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp @@ -3,31 +3,54 @@ #include "../../../../../client/settings/cache_settings.h" #include "../../../../pixel_map_generator.h" #include "../../../cards/additional_info/mana_symbol_widget.h" +#include "../../../cards/card_size_widget.h" +#include "../../../quick_settings/settings_button_widget.h" #include "../../../utility/completer_utils.h" +#include "../../tab.h" #include "../../tab_supervisor.h" #include "api_response/archidekt_deck_listing_api_response.h" +#include "api_response/deck/archidekt_api_response_deck.h" +#include "card_database_display_model.h" +#include "card_database_model.h" #include "display/archidekt_api_response_deck_display_widget.h" #include "display/archidekt_api_response_deck_listings_display_widget.h" +#include +#include +#include #include -#include +#include #include -#include #include #include #include #include +#include +#include +#include +#include #include #include +#include +#include #include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include -#include #include +#include +#include #include TabArchidekt::TabArchidekt(TabSupervisor *_tabSupervisor) diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h index e837e672b..015b8590b 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/tab_archidekt.h @@ -1,26 +1,35 @@ #ifndef COCKATRICE_TAB_ARCHIDEKT_H #define COCKATRICE_TAB_ARCHIDEKT_H -#include "../../interface/widgets/cards/card_size_widget.h" -#include "../../interface/widgets/quick_settings/settings_button_widget.h" #include "../../tab.h" -#include "display/archidekt_api_response_deck_listings_display_widget.h" +#include "libcockatrice/card/card_info.h" -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include #include -#include #include -#include -#include -#include -#include +#include +#include + +class ArchidektApiResponseDeckListingsDisplayWidget; +class CardSizeWidget; +class QCheckBox; +class QComboBox; +class QHBoxLayout; +class QLabel; +class QLineEdit; +class QNetworkAccessManager; +class QNetworkReply; +class QPushButton; +class QScrollArea; +class QSpinBox; +class QTimer; +class QVBoxLayout; +class QWidget; +class SettingsButtonWidget; +class TabSupervisor; /** Base API link for Archidekt deck search */ inline QString archidektApiLink = "https://archidekt.com/api/decks/v3/?name="; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.cpp index 3c95a4553..aa892d0d4 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.cpp @@ -1,5 +1,7 @@ #include "card_in_deck_request.h" +#include + CardInDeckRequest CardInDeckRequest::fromJson(const QJsonObject &json) { CardInDeckRequest request; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.h index b7eb96211..6bcaca42f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.h @@ -1,6 +1,7 @@ #ifndef COCKATRICE_CARD_IN_DECK_REQUEST_H #define COCKATRICE_CARD_IN_DECK_REQUEST_H #include +#include struct CardInDeckRequest { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_card_result.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_card_result.cpp index 14558d234..0ae5dd360 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_card_result.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_card_result.cpp @@ -1,5 +1,7 @@ #include "commander_spellbook_card_result.h" +#include + CommanderSpellbookCardResult CommanderSpellbookCardResult::fromJson(const QJsonObject &json) { CommanderSpellbookCardResult result; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.cpp index 166469353..ac259f3aa 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.cpp @@ -1,6 +1,14 @@ #include "commander_spellbook_deck_request.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "libcockatrice/utility/card_ref.h" + #include +#include +#include +#include +#include #include CommanderSpellbookDeckRequest CommanderSpellbookDeckRequest::fromJson(const QJsonObject &json) diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.h index 46d8e053b..002f7666f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.h @@ -1,11 +1,12 @@ #ifndef COCKATRICE_COMMANDER_SPELLBOOK_DECK_REQUEST_H #define COCKATRICE_COMMANDER_SPELLBOOK_DECK_REQUEST_H #include "card_in_deck_request.h" -#include "libcockatrice/deck_list/deck_list.h" #include #include +class DeckList; + struct CommanderSpellbookDeckRequest { static CommanderSpellbookDeckRequest fromJson(const QJsonObject &json); diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.cpp index c3640ce79..35ba954a1 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.cpp @@ -1,5 +1,9 @@ #include "commander_spellbook_estimate_bracket_result.h" +#include +#include +#include + EstimateBracketResult EstimateBracketResult::fromJson(const QJsonObject &json) { EstimateBracketResult result; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.h index bb589a901..c9c152d35 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.h @@ -6,6 +6,7 @@ #include #include +#include struct EstimateBracketResult { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.cpp index bbc23e15e..53630a69e 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.cpp @@ -1,5 +1,7 @@ #include "commander_spellbook_variant_result.h" +#include + CommanderSpellbookVariantResult CommanderSpellbookVariantResult::fromJson(const QJsonObject &json) { CommanderSpellbookVariantResult result; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.h index d908f1299..49f45f92c 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.h @@ -3,6 +3,7 @@ #include #include +#include struct CommanderSpellbookVariantResult { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.cpp index b85129a3f..8e0448faa 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.cpp @@ -4,6 +4,8 @@ #include +class DeckList; + CommanderBracketService &CommanderBracketService::instance() { static CommanderBracketService service; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.h index e0c2a9d55..22962cc95 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.h @@ -1,10 +1,15 @@ #ifndef COCKATRICE_COMMANDER_BRACKET_SERVICE_H #define COCKATRICE_COMMANDER_BRACKET_SERVICE_H +#include "api_response/commander_spellbook_estimate_bracket_result.h" #include "commander_spellbook_api_accessor.h" -#include "libcockatrice/deck_list/deck_list.h" #include +#include +#include +#include + +class DeckList; struct CommanderBracketEstimate { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.cpp index 2cbbedfa4..06a76dd19 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.cpp @@ -3,7 +3,9 @@ #include "../../../../../client/settings/cache_settings.h" #include "../../../../pixel_map_generator.h" #include "commander_bracket_service.h" +#include "libcockatrice/deck_list/deck_list.h" +#include #include #include #include @@ -11,11 +13,17 @@ #include #include #include +#include +#include #include +#include #include #include #include #include +#include + +template class QSharedPointer; CommanderBracketWidget::CommanderBracketWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.h index a45610fcf..f5b2b7958 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.h @@ -4,12 +4,17 @@ #include "commander_spellbook_bracket_explainer.h" #include +#include #include -#include +#include +#include class QLabel; class QToolButton; struct CommanderBracketEstimate; +class DeckList; +class QObject; +template class QSharedPointer; class CommanderBracketWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.cpp index 590692d98..bd8d9379d 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.cpp @@ -1,13 +1,21 @@ #include "commander_spellbook_api_accessor.h" #include "api_response/commander_spellbook_deck_request.h" +#include "api_response/commander_spellbook_estimate_bracket_result.h" +#include #include #include +#include +#include #include +#include #include +#include #include +class DeckList; + static const QUrl ESTIMATE_BRACKET_URL(QStringLiteral("https://backend.commanderspellbook.com/estimate-bracket")); CommanderSpellbookApiAccessor &CommanderSpellbookApiAccessor::instance() diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.h index 682a48524..98e7e3710 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.h @@ -1,12 +1,15 @@ #ifndef COCKATRICE_COMMANDER_SPELLBOOK_API_ACCESSOR_H #define COCKATRICE_COMMANDER_SPELLBOOK_API_ACCESSOR_H -#include "api_response/commander_spellbook_estimate_bracket_result.h" - #include -#include #include -#include +#include +#include +#include + +class DeckList; +class QNetworkReply; +struct EstimateBracketResult; class CommanderSpellbookApiAccessor final : public QObject { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.cpp index fc308ed60..06250f1ea 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.cpp @@ -1,5 +1,9 @@ #include "commander_spellbook_bracket_explainer.h" +#include "api_response/commander_spellbook_card_result.h" +#include "api_response/commander_spellbook_estimate_bracket_result.h" +#include "api_response/commander_spellbook_variant_result.h" + static QString cardList(const QList &cards, int max = 5) { QStringList names; diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.h index 9ed499742..3ab317df9 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.h @@ -1,6 +1,12 @@ #ifndef COCKATRICE_COMMANDER_SPELLBOOK_BRACKET_EXPLAINER_H #define COCKATRICE_COMMANDER_SPELLBOOK_BRACKET_EXPLAINER_H -#include "api_response/commander_spellbook_estimate_bracket_result.h" + +#include +#include +#include +#include + +struct EstimateBracketResult; namespace CommanderBracketNames { diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.cpp b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.cpp index 90b490efe..22200ffa2 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.cpp @@ -2,9 +2,16 @@ #include "../../../../../client/settings/cache_settings.h" +#include #include -#include +#include +#include +#include +#include +#include +#include #include +#include #include static const QUrl COMMANDER_BRACKET_JSON_URL(QStringLiteral("https://cockatrice.github.io/commander-brackets.json")); diff --git a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.h b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.h index b8348b13c..39bddba05 100644 --- a/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.h +++ b/cockatrice/src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.h @@ -1,9 +1,12 @@ #ifndef COCKATRICE_HANDLE_COMMANDER_BRACKETS_H #define COCKATRICE_HANDLE_COMMANDER_BRACKETS_H -#include #include #include +#include +#include + +class QNetworkAccessManager; class HandleCommanderBrackets : public QObject { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp index 145a3fca0..411fdd5ed 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp @@ -3,6 +3,9 @@ #include #include #include +#include +#include +#include void EdhrecApiResponseArchidektLink::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.h index d265c164d..0786550fe 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.h @@ -1,7 +1,9 @@ #ifndef ARCHIDEKTENTRY_H #define ARCHIDEKTENTRY_H +#include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp index 1297fc157..b6ecac0af 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp @@ -1,7 +1,13 @@ #include "edhrec_average_deck_api_response.h" +#include "../archidekt_links/edhrec_api_response_archidekt_links.h" +#include "../cards/edhrec_api_response_card_container.h" +#include "../commander/edhrec_commander_api_response_average_deck_statistics.h" + #include #include +#include +#include void EdhrecAverageDeckApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp index 1cb070c30..324dce52a 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp @@ -1,10 +1,14 @@ #include "edhrec_deck_api_response.h" -#include #include #include -#include +#include +#include +#include +#include +#include #include +#include void EdhrecDeckApiResponse::fromJson(const QJsonArray &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.h index 7bc97c431..a47fcc10b 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.h @@ -7,7 +7,9 @@ #ifndef EDHREC_DECK_API_RESPONSE_H #define EDHREC_DECK_API_RESPONSE_H -#include "../../../../../../deck_loader/deck_loader.h" +#include "libcockatrice/deck_list/deck_list.h" + +#include class EdhrecDeckApiResponse { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp index 1231d147a..26502f1de 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp @@ -1,6 +1,8 @@ #include "edhrec_api_response_card_prices.h" #include +#include +#include void CardPrices::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp index 3fef8be34..8660cac50 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp @@ -3,6 +3,9 @@ #include #include #include +#include +#include +#include void EdhrecApiResponseCardContainer::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.h index d76dda490..70d39474d 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.h @@ -11,6 +11,7 @@ #include "edhrec_commander_api_response_commander_details.h" #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp index a4a746c61..ebf09d2a9 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp @@ -1,6 +1,8 @@ #include "edhrec_api_response_card_details.h" #include +#include +#include EdhrecApiResponseCardDetails::EdhrecApiResponseCardDetails() : synergy(0.0), inclusion(0), numDecks(0), potentialDecks(0) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp index 72d6fe2cc..0cf585ee9 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp @@ -1,6 +1,10 @@ #include "edhrec_api_response_card_list.h" #include +#include +#include +#include +#include EdhrecApiResponseCardList::EdhrecApiResponseCardList() { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.h index 2df29de0c..d6e0d7f75 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.h @@ -9,7 +9,7 @@ #include "edhrec_api_response_card_details.h" -#include +#include #include #include diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp index 7b220603e..7383677c8 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp @@ -1,6 +1,11 @@ #include "edhrec_commander_api_response_commander_details.h" +#include "../card_prices/edhrec_api_response_card_prices.h" + #include +#include +#include +#include void EdhrecCommanderApiResponseCommanderDetails::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.h index 293e9a150..a0858e9d2 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.h @@ -10,6 +10,8 @@ #include "../card_prices/edhrec_api_response_card_prices.h" #include +#include +#include #include #include diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp index da2a9c052..1e0304e8a 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp @@ -1,7 +1,12 @@ #include "edhrec_commander_api_response.h" +#include "../archidekt_links/edhrec_api_response_archidekt_links.h" +#include "../cards/edhrec_api_response_card_container.h" + #include #include +#include +#include void EdhrecCommanderApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp index 74cce5322..996ec3c0c 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp @@ -1,5 +1,7 @@ #include "edhrec_commander_api_response_average_deck_statistics.h" +#include + void EdhrecCommanderApiResponseAverageDeckStatistics::fromJson(const QJsonObject &json) { creature = json.value("creature").toInt(0); diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp index 26122ce89..4df2f3523 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp @@ -1,7 +1,10 @@ #include "edhrec_top_cards_api_response.h" +#include "../cards/edhrec_api_response_card_container.h" + #include -#include +#include +#include void EdhrecTopCardsApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.h index 695498e2b..cdf0d4a71 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.h @@ -9,6 +9,7 @@ #include "../cards/edhrec_api_response_card_container.h" +#include #include class EdhrecTopCardsApiResponse diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp index 83b10c9e5..c1bf71cb2 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp @@ -1,7 +1,10 @@ #include "edhrec_top_commanders_api_response.h" +#include "../cards/edhrec_api_response_card_container.h" + #include -#include +#include +#include void EdhrecTopCommandersApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.h index 10aa51ff4..4579632c6 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.h @@ -9,6 +9,7 @@ #include "../cards/edhrec_api_response_card_container.h" +#include #include class EdhrecTopCommandersApiResponse diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp index 56eb4fa4f..cf6ea5df8 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp @@ -1,7 +1,10 @@ #include "edhrec_top_tags_api_response.h" +#include "../cards/edhrec_api_response_card_container.h" + #include -#include +#include +#include void EdhrecTopTagsApiResponse::fromJson(const QJsonObject &json) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.h index 0337d94f8..e6e25d97b 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.h @@ -9,6 +9,7 @@ #include "../cards/edhrec_api_response_card_container.h" +#include #include class EdhrecTopTagsApiResponse diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp index 75902daad..0ba74fd60 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp @@ -1,5 +1,13 @@ #include "edhrec_api_response_card_prices_display_widget.h" +#include "../../api_response/card_prices/edhrec_api_response_card_prices.h" + +#include +#include +#include +#include +#include + EdhrecApiResponseCardPricesDisplayWidget::EdhrecApiResponseCardPricesDisplayWidget(QWidget *parent, const CardPrices &_cardPrices) : QWidget(parent), cardPrices(_cardPrices) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.h index 8943ae9f3..75fe033dc 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.h @@ -9,9 +9,11 @@ #include "../../api_response/card_prices/edhrec_api_response_card_prices.h" -#include -#include #include +#include + +class QGridLayout; +class QLabel; class EdhrecApiResponseCardPricesDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp index 00c1741df..0728b3154 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp @@ -1,10 +1,21 @@ #include "edhrec_api_response_card_details_display_widget.h" +#include "../../../../../cards/card_info_picture_widget.h" +#include "../../../../../cards/card_size_widget.h" #include "../../../../../general/display/background_plate_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_details.h" #include "../../tab_edhrec_main.h" +#include "edhrec_api_response_card_inclusion_display_widget.h" +#include "edhrec_api_response_card_synergy_display_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include #include +#include +#include +#include #include +#include EdhrecApiResponseCardDetailsDisplayWidget::EdhrecApiResponseCardDetailsDisplayWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.h index b09cc4e04..d738f4685 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.h @@ -7,15 +7,18 @@ #ifndef EDHREC_COMMANDER_API_RESPONSE_CARD_DETAILS_DISPLAY_WIDGET_H #define EDHREC_COMMANDER_API_RESPONSE_CARD_DETAILS_DISPLAY_WIDGET_H -#include "../../../../../cards/card_info_picture_widget.h" -#include "../../../../../general/display/background_plate_widget.h" #include "../../api_response/cards/edhrec_api_response_card_details.h" -#include "edhrec_api_response_card_inclusion_display_widget.h" -#include "edhrec_api_response_card_synergy_display_widget.h" -#include -#include +#include #include +#include + +class BackgroundPlateWidget; +class CardInfoPictureWidget; +class EdhrecApiResponseCardInclusionDisplayWidget; +class EdhrecApiResponseCardSynergyDisplayWidget; +class QLabel; +class QVBoxLayout; class EdhrecApiResponseCardDetailsDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp index 8292b00ea..6786b006e 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp @@ -1,5 +1,13 @@ #include "edhrec_api_response_card_inclusion_display_widget.h" +#include "../../../../../general/display/charts/bars/percent_bar_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_details.h" + +#include +#include +#include +#include + EdhrecApiResponseCardInclusionDisplayWidget::EdhrecApiResponseCardInclusionDisplayWidget( QWidget *parent, const EdhrecApiResponseCardDetails &_toDisplay) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.h index 516d820eb..61a1bd645 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.h @@ -7,12 +7,14 @@ #ifndef EDHREC_API_RESPONSE_CARD_INCLUSION_DISPLAY_WIDGET_H #define EDHREC_API_RESPONSE_CARD_INCLUSION_DISPLAY_WIDGET_H -#include "../../../../../general/display/charts/bars/percent_bar_widget.h" #include "../../api_response/cards/edhrec_api_response_card_details.h" -#include -#include #include +#include + +class PercentBarWidget; +class QLabel; +class QVBoxLayout; class EdhrecApiResponseCardInclusionDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp index 841ef315b..5295b92d5 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp @@ -1,9 +1,19 @@ #include "edhrec_api_response_card_list_display_widget.h" #include "../../../../../general/display/banner_widget.h" +#include "../../../../../general/layout_containers/flow_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_details.h" +#include "../../api_response/cards/edhrec_api_response_card_list.h" #include "edhrec_api_response_card_details_display_widget.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include EdhrecApiResponseCardListDisplayWidget::EdhrecApiResponseCardListDisplayWidget(QWidget *parent, EdhrecApiResponseCardList toDisplay) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.h index 555da6ecf..20bdad8ea 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.h @@ -8,12 +8,14 @@ #define EDHREC_COMMANDER_API_RESPONSE_CARD_LIST_DISPLAY_WIDGET_H #include "../../../../../general/display/banner_widget.h" -#include "../../../../../general/layout_containers/flow_widget.h" -#include "../../api_response/cards/edhrec_api_response_card_list.h" -#include -#include +#include #include +#include + +class EdhrecApiResponseCardList; +class FlowWidget; +class QVBoxLayout; class EdhrecApiResponseCardListDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp index 9d5571a8f..5f4b02327 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp @@ -1,5 +1,13 @@ #include "edhrec_api_response_card_synergy_display_widget.h" +#include "../../../../../general/display/charts/bars/percent_bar_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_details.h" + +#include +#include +#include +#include + EdhrecApiResponseCardSynergyDisplayWidget::EdhrecApiResponseCardSynergyDisplayWidget( QWidget *parent, const EdhrecApiResponseCardDetails &_toDisplay) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.h index 5800b5497..71cca6ca4 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.h @@ -7,12 +7,14 @@ #ifndef EDHREC_API_RESPONSE_CARD_SYNERGY_DISPLAY_WIDGET_H #define EDHREC_API_RESPONSE_CARD_SYNERGY_DISPLAY_WIDGET_H -#include "../../../../../general/display/charts/bars/percent_bar_widget.h" #include "../../api_response/cards/edhrec_api_response_card_details.h" -#include -#include #include +#include + +class PercentBarWidget; +class QLabel; +class QVBoxLayout; class EdhrecApiResponseCardSynergyDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp index 40a803e77..3da050edd 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp @@ -1,11 +1,20 @@ #include "edhrec_api_response_commander_details_display_widget.h" #include "../../../../../cards/card_info_picture_widget.h" +#include "../../../../../cards/card_size_widget.h" +#include "../../api_response/cards/edhrec_commander_api_response_commander_details.h" #include "../../tab_edhrec_main.h" #include "../card_prices/edhrec_api_response_card_prices_display_widget.h" -#include "edhrec_commander_api_response_bracket_navigation_widget.h" +#include "edhrec_commander_api_response_navigation_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include +#include +#include +#include +#include #include +#include EdhrecCommanderResponseCommanderDetailsDisplayWidget::EdhrecCommanderResponseCommanderDetailsDisplayWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.h index 4201ce3b3..197263512 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.h @@ -7,16 +7,19 @@ #ifndef EDHREC_COMMANDER_API_RESPONSE_COMMANDER_DETAILS_DISPLAY_WIDGET_H #define EDHREC_COMMANDER_API_RESPONSE_COMMANDER_DETAILS_DISPLAY_WIDGET_H -#include "../../../../../cards/card_info_picture_widget.h" #include "../../api_response/cards/edhrec_commander_api_response_commander_details.h" -#include "../card_prices/edhrec_api_response_card_prices_display_widget.h" -#include "edhrec_commander_api_response_navigation_widget.h" -#include -#include +#include #include +#include class EdhrecCommanderApiResponseNavigationWidget; +class CardInfoPictureWidget; +class EdhrecApiResponseCardPricesDisplayWidget; +class QHBoxLayout; +class QLabel; +class QVBoxLayout; + class EdhrecCommanderResponseCommanderDetailsDisplayWidget : public QWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp index c3ab23e41..b26a7e574 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp @@ -1,6 +1,12 @@ #include "edhrec_commander_api_response_bracket_navigation_widget.h" +#include +#include +#include +#include #include +#include +#include EdhrecCommanderApiResponseBracketNavigationWidget::EdhrecCommanderApiResponseBracketNavigationWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h index 713ef2791..a741b6696 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h @@ -1,11 +1,16 @@ #ifndef COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BRACKET_NAVIGATION_WIDGET_H #define COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BRACKET_NAVIGATION_WIDGET_H -#include -#include +#include #include -#include +#include +#include #include +#include + +class QGridLayout; +class QLabel; +class QPushButton; class EdhrecCommanderApiResponseBracketNavigationWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp index 1845c020d..48704d010 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp @@ -1,6 +1,12 @@ #include "edhrec_commander_api_response_budget_navigation_widget.h" +#include +#include +#include +#include #include +#include +#include EdhrecCommanderApiResponseBudgetNavigationWidget::EdhrecCommanderApiResponseBudgetNavigationWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h index 666edba16..8013d1d6b 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h @@ -1,11 +1,16 @@ #ifndef COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BUDGET_NAVIGATION_WIDGET_H #define COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BUDGET_NAVIGATION_WIDGET_H -#include -#include +#include #include -#include +#include +#include #include +#include + +class QGridLayout; +class QLabel; +class QPushButton; class EdhrecCommanderApiResponseBudgetNavigationWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp index 230858d6c..111d91b91 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp @@ -1,15 +1,30 @@ #include "edhrec_commander_api_response_display_widget.h" -#include "../../../../../cards/card_info_picture_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_container.h" +#include "../../api_response/cards/edhrec_api_response_card_list.h" #include "../../api_response/commander/edhrec_commander_api_response.h" #include "../cards/edhrec_api_response_card_list_display_widget.h" #include "edhrec_api_response_commander_details_display_widget.h" +#include +#include +#include +#include +#include #include +#include +#include #include #include +#include #include +#include #include +#include +#include +#include + +class QModelIndex; EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget(QWidget *parent, EdhrecCommanderApiResponse response, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.h index 80da8a7f8..5ada40df3 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.h @@ -7,11 +7,14 @@ #ifndef EDHREC_COMMANDER_API_RESPONSE_DISPLAY_WIDGET_H #define EDHREC_COMMANDER_API_RESPONSE_DISPLAY_WIDGET_H -#include "../../api_response/commander/edhrec_commander_api_response.h" - -#include -#include +#include #include +#include + +class EdhrecCommanderApiResponse; +class QHBoxLayout; +class QScrollArea; +class QVBoxLayout; class EdhrecCommanderApiResponseDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp index c42d2ed90..fd02c4261 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp @@ -1,6 +1,12 @@ #include "edhrec_commander_api_response_navigation_widget.h" #include "../../tab_edhrec_main.h" +#include "edhrec_commander_api_response_bracket_navigation_widget.h" +#include "edhrec_commander_api_response_budget_navigation_widget.h" + +#include +#include +#include EdhrecCommanderApiResponseNavigationWidget::EdhrecCommanderApiResponseNavigationWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.h index 9b46b54ba..737558625 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.h @@ -7,14 +7,16 @@ #ifndef EDHREC_COMMANDER_API_RESPONSE_NAVIGATION_WIDGET_H #define EDHREC_COMMANDER_API_RESPONSE_NAVIGATION_WIDGET_H -#include "edhrec_api_response_commander_details_display_widget.h" -#include "edhrec_commander_api_response_bracket_navigation_widget.h" -#include "edhrec_commander_api_response_budget_navigation_widget.h" +#include "../../api_response/cards/edhrec_commander_api_response_commander_details.h" -#include -#include -#include +#include #include +#include + +class EdhrecCommanderApiResponseBracketNavigationWidget; +class EdhrecCommanderApiResponseBudgetNavigationWidget; +class QGridLayout; +class QPushButton; class EdhrecCommanderApiResponseNavigationWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp index ae07c9dc8..6f32db102 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp @@ -1,8 +1,17 @@ #include "edhrec_top_cards_api_response_display_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_container.h" +#include "../../api_response/cards/edhrec_api_response_card_list.h" #include "../../api_response/top_cards/edhrec_top_cards_api_response.h" #include "../cards/edhrec_api_response_card_list_display_widget.h" +#include +#include +#include +#include +#include +#include + EdhrecTopCardsApiResponseDisplayWidget::EdhrecTopCardsApiResponseDisplayWidget(QWidget *parent, EdhrecTopCardsApiResponse response) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.h index 30998391c..8b5ddfad0 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.h @@ -7,12 +7,13 @@ #ifndef EDHREC_TOP_CARDS_API_RESPONSE_DISPLAY_WIDGET_H #define EDHREC_TOP_CARDS_API_RESPONSE_DISPLAY_WIDGET_H -#include "../../api_response/top_cards/edhrec_top_cards_api_response.h" - -#include -#include -#include #include +#include + +class EdhrecTopCardsApiResponse; +class QHBoxLayout; +class QScrollArea; +class QVBoxLayout; class EdhrecTopCardsApiResponseDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp index 13f54a979..4ab333fd4 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp @@ -1,8 +1,20 @@ #include "edhrec_top_commanders_api_response_display_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_container.h" +#include "../../api_response/cards/edhrec_api_response_card_list.h" #include "../../api_response/top_commanders/edhrec_top_commanders_api_response.h" #include "../cards/edhrec_api_response_card_list_display_widget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + EdhrecTopCommandersApiResponseDisplayWidget::EdhrecTopCommandersApiResponseDisplayWidget( QWidget *parent, EdhrecTopCommandersApiResponse response) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.h index 2b9563ea5..8471a8dda 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.h @@ -7,12 +7,13 @@ #ifndef EDHREC_TOP_COMMANDERS_API_RESPONSE_DISPLAY_WIDGET_H #define EDHREC_TOP_COMMANDERS_API_RESPONSE_DISPLAY_WIDGET_H -#include "../../api_response/top_commanders/edhrec_top_commanders_api_response.h" - -#include -#include -#include #include +#include + +class EdhrecTopCommandersApiResponse; +class QHBoxLayout; +class QScrollArea; +class QVBoxLayout; class EdhrecTopCommandersApiResponseDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp index 91a1ce3fa..9c7ce8d06 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp @@ -1,8 +1,17 @@ #include "edhrec_top_tags_api_response_display_widget.h" +#include "../../api_response/cards/edhrec_api_response_card_container.h" +#include "../../api_response/cards/edhrec_api_response_card_list.h" #include "../../api_response/top_tags/edhrec_top_tags_api_response.h" #include "../cards/edhrec_api_response_card_list_display_widget.h" +#include +#include +#include +#include +#include +#include + EdhrecTopTagsApiResponseDisplayWidget::EdhrecTopTagsApiResponseDisplayWidget(QWidget *parent, EdhrecTopTagsApiResponse response) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.h index 4a4fc8991..2c13d069f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.h @@ -7,11 +7,13 @@ #ifndef EDHREC_TOP_TAGS_API_RESPONSE_DISPLAY_WIDGET_H #define EDHREC_TOP_TAGS_API_RESPONSE_DISPLAY_WIDGET_H -#include "../../api_response/top_tags/edhrec_top_tags_api_response.h" - -#include -#include #include +#include + +class EdhrecTopTagsApiResponse; +class QHBoxLayout; +class QScrollArea; +class QVBoxLayout; class EdhrecTopTagsApiResponseDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp index 10389f4eb..3aa395126 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp @@ -1,16 +1,26 @@ #include "tab_edhrec.h" +#include "../../tab.h" #include "api_response/commander/edhrec_commander_api_response.h" #include "display/commander/edhrec_commander_api_response_display_widget.h" +#include "libcockatrice/card/card_info.h" +#include +#include #include #include #include #include +#include #include #include +#include #include -#include +#include +#include +#include + +class TabSupervisor; TabEdhRec::TabEdhRec(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor) { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.h index 5ce36c9cf..4e3c9c8ba 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec.h @@ -8,10 +8,16 @@ #define TAB_EDHREC_H #include "../../tab.h" -#include "display/commander/edhrec_commander_api_response_display_widget.h" -#include +#include +#include #include +#include + +class EdhrecCommanderApiResponseDisplayWidget; +class QNetworkAccessManager; +class QNetworkReply; +class TabSupervisor; class TabEdhRec : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp index 500eab13a..ca575dc02 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp @@ -1,6 +1,9 @@ #include "tab_edhrec_main.h" #include "../../../../../client/settings/cache_settings.h" +#include "../../../../deck_loader/loaded_deck.h" +#include "../../../cards/card_size_widget.h" +#include "../../../quick_settings/settings_button_widget.h" #include "../../../utility/completer_utils.h" #include "../../tab_supervisor.h" #include "api_response/average_deck/edhrec_average_deck_api_response.h" @@ -18,13 +21,17 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include +#include +#include #include #include @@ -134,6 +141,8 @@ void TabEdhRecMain::setCard(CardInfoPtr _cardToQuery, bool isCommander) return; } + emit tabTextChanged(this, getTabText()); + QString cardName = cardToQuery->getName(); QString formattedName = cardName.toLower().replace(" ", "-").remove(QRegularExpression("[^a-z0-9\\-]")); diff --git a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.h b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.h index a7ed83efd..5d0245ed4 100644 --- a/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.h +++ b/cockatrice/src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.h @@ -7,16 +7,25 @@ #ifndef TAB_EDHREC_MAIN_H #define TAB_EDHREC_MAIN_H -#include "../../interface/widgets/cards/card_size_widget.h" -#include "../../interface/widgets/quick_settings/settings_button_widget.h" #include "../../tab.h" -#include "display/commander/edhrec_commander_api_response_display_widget.h" +#include "libcockatrice/card/card_info.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include + +class CardSizeWidget; +class EdhrecCommanderApiResponseDisplayWidget; +class QHBoxLayout; +class QLineEdit; +class QNetworkAccessManager; +class QNetworkReply; +class QPushButton; +class QVBoxLayout; +class QWidget; +class SettingsButtonWidget; +class TabSupervisor; class TabEdhRecMain : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab.cpp b/cockatrice/src/interface/widgets/tabs/tab.cpp index 3dcb3b523..5ef4d18b8 100644 --- a/cockatrice/src/interface/widgets/tabs/tab.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab.cpp @@ -1,12 +1,17 @@ #include "tab.h" #include "../interface/widgets/cards/card_info_display_widget.h" +#include "libcockatrice/utility/card_ref.h" #include "tab_supervisor.h" #include -#include -#include +#include +#include +#include #include +#include +#include +#include Tab::Tab(TabSupervisor *_tabSupervisor) : QMainWindow(_tabSupervisor), tabSupervisor(_tabSupervisor), contentsChanged(false), infoPopup(0) diff --git a/cockatrice/src/interface/widgets/tabs/tab.h b/cockatrice/src/interface/widgets/tabs/tab.h index bddf325e2..e114f9bd9 100644 --- a/cockatrice/src/interface/widgets/tabs/tab.h +++ b/cockatrice/src/interface/widgets/tabs/tab.h @@ -7,12 +7,16 @@ #ifndef TAB_H #define TAB_H +#include #include +#include #include +#include class QMenu; class TabSupervisor; class CardInfoDisplayWidget; +class QPoint; class Tab : public QMainWindow { diff --git a/cockatrice/src/interface/widgets/tabs/tab_account.cpp b/cockatrice/src/interface/widgets/tabs/tab_account.cpp index dbcf50966..e55dc55d0 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_account.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_account.cpp @@ -6,10 +6,17 @@ #include "../interface/widgets/server/user/user_list_manager.h" #include "../interface/widgets/server/user/user_list_widget.h" #include "../interface/widgets/utility/custom_line_edit.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "tab_supervisor.h" +#include +#include +#include #include +#include #include +#include #include #include #include @@ -19,6 +26,7 @@ #include #include #include +#include TabAccount::TabAccount(TabSupervisor *_tabSupervisor, AbstractClient *_client, const ServerInfo_User &userInfo) : Tab(_tabSupervisor), client(_client) diff --git a/cockatrice/src/interface/widgets/tabs/tab_account.h b/cockatrice/src/interface/widgets/tabs/tab_account.h index 68054c7a1..ab2c4b38d 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_account.h +++ b/cockatrice/src/interface/widgets/tabs/tab_account.h @@ -9,11 +9,16 @@ #include "tab.h" +#include +#include +#include +// IWYU pragma: keep +// ServerInfo_User appears by value and inside QList in slot signatures, so the +// moc-generated code needs the complete type. #include class AbstractClient; class Event_AddToList; -class Event_ListRooms; class Event_RemoveFromList; class Event_UserJoined; class Event_UserLeft; @@ -23,6 +28,8 @@ class Response; class ServerInfo_User; class UserInfoBox; class UserListWidget; +class TabSupervisor; +template class QList; class TabAccount : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_admin.cpp b/cockatrice/src/interface/widgets/tabs/tab_admin.cpp index 16f17e03e..cfbd00538 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_admin.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_admin.cpp @@ -1,19 +1,31 @@ #include "tab_admin.h" +#include "libcockatrice/protocol/pb/response.pb.h" + #include #include #include +#include #include #include #include #include #include +#include +#include +#include #include #include #include #include #include #include +#include +#include + +class CommandContainer; +class QVariant; +class TabSupervisor; ShutdownDialog::ShutdownDialog(QWidget *parent) : QDialog(parent) { diff --git a/cockatrice/src/interface/widgets/tabs/tab_admin.h b/cockatrice/src/interface/widgets/tabs/tab_admin.h index 0da098ba5..8eb139a8e 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_admin.h +++ b/cockatrice/src/interface/widgets/tabs/tab_admin.h @@ -10,15 +10,17 @@ #include "tab.h" #include -#include -#include +#include +#include class AbstractClient; - class QGroupBox; class QPushButton; class QSpinBox; class QLineEdit; +class QWidget; +class Response; +class TabSupervisor; class ShutdownDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.cpp b/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.cpp index 999bc3db0..1fc2854ce 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.cpp @@ -1,16 +1,39 @@ #include "tab_card_art_rules.h" #include "../utility/completer_utils.h" +#include "card_database_display_model.h" +#include "card_database_model.h" +#include "libcockatrice/card/card_info.h" #include "libcockatrice/card/database/card_database_manager.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include #include #include +#include + +class QObject; +class TabSupervisor; CardArtRulesModel::CardArtRulesModel(AbstractClient *client, QObject *parent) : QAbstractTableModel(parent), client(client) diff --git a/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.h b/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.h index b9ea2ca83..f34300179 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.h +++ b/cockatrice/src/interface/widgets/tabs/tab_card_art_rules.h @@ -1,16 +1,28 @@ #ifndef COCKATRICE_DLG_CARD_ART_RULES_H #define COCKATRICE_DLG_CARD_ART_RULES_H -#include "card/card_search_model.h" -#include "tab_supervisor.h" +#include "tab.h" #include -#include -#include -#include -#include +#include +#include +#include +#include +#include class AbstractClient; +class CardCompleterProxyModel; +class CardDatabaseDisplayModel; +class CardDatabaseModel; +class CardSearchModel; +class QComboBox; +class QCompleter; +class QLineEdit; +class QObject; +class QPushButton; +class QTableView; +class Response; +class TabSupervisor; class CardArtRulesModel : public QAbstractTableModel { diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp index 8439aef70..7ca179cea 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.cpp @@ -2,28 +2,28 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../deck_editor/deck_editor_card_database_dock_widget.h" +#include "../deck_editor/deck_editor_card_info_dock_widget.h" +#include "../deck_editor/deck_editor_deck_dock_widget.h" +#include "../deck_editor/deck_editor_printing_selector_dock_widget.h" #include "../deck_editor/deck_state_manager.h" -#include "../filters/filter_builder.h" -#include "../interface/pixel_map_generator.h" -#include "../interface/widgets/cards/card_info_frame_widget.h" #include "../interface/widgets/deck_editor/deck_editor_filter_dock_widget.h" #include "../interface/widgets/menus/deck_editor_menu.h" -#include "tab_supervisor.h" #include -#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include +#include + +class TabSupervisor; /** * @brief Constructs a new TabDeckEditor object. diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.h b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.h index 14be59cd7..afe62e962 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_editor.h +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_editor.h @@ -1,17 +1,11 @@ #ifndef WINDOW_DECKEDITOR_H #define WINDOW_DECKEDITOR_H -#include "../../key_signals.h" -#include "../interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h" #include "abstract_tab_deck_editor.h" -#include +#include -class CardDatabaseModel; -class CardDatabaseDisplayModel; -class DeckListModel; - -class QLabel; +class TabSupervisor; /** * @class TabDeckEditor diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp index 41ebb17a2..44d04bd24 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.cpp @@ -1,32 +1,55 @@ #include "tab_deck_storage.h" #include "../../../client/settings/cache_settings.h" +#include "../../deck_loader/deck_file_format.h" #include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/loaded_deck.h" #include "../../pixel_map_generator.h" #include "../cards/additional_info/deck_color_identity.h" #include "../deck_share/deck_share_utils.h" #include "../deck_share/share_bar_widget.h" #include "../interface/widgets/server/remote/remote_decklist_tree_widget.h" #include "../interface/widgets/utility/get_text_with_max.h" +#include "abstract_client.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include +#include #include #include -#include #include #include #include +#include +#include #include +#include #include #include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include +#include +#include #include #include #include @@ -38,12 +61,17 @@ #include #include #include -#include #include #include #include #include #include +#include +#include +#include +#include + +class TabSupervisor; namespace { diff --git a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.h b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.h index f8d585880..35a4649c7 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_deck_storage.h +++ b/cockatrice/src/interface/widgets/tabs/tab_deck_storage.h @@ -11,22 +11,26 @@ #include "../interface/widgets/server/remote/remote_decklist_tree_widget.h" #include "tab.h" +#include +#include #include +#include #include +#include struct LoadedDeck; class ServerInfo_User; -class AbstractClient; class QTreeView; class QFileSystemModel; class QToolBar; -class QTreeWidget; -class QTreeWidgetItem; class QGroupBox; class QTimer; class CommandContainer; class Response; class ShareBarWidget; +class QAction; +class QModelIndex; +class TabSupervisor; class TabDeckStorage : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_developer.cpp b/cockatrice/src/interface/widgets/tabs/tab_developer.cpp index 39652ef7d..d641a1ea5 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_developer.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_developer.cpp @@ -6,21 +6,35 @@ #include "tab_developer.h" +#include "libcockatrice/protocol/pb/response.pb.h" + +#include #include #include +#include #include #include #include +#include #include +#include +#include #include #include +#include #include #include +#include +#include #include +#include #include #include #include #include +#include + +class TabSupervisor; static constexpr int DEFAULT_AUTO_REFRESH_INTERVAL_SECS = 30; diff --git a/cockatrice/src/interface/widgets/tabs/tab_developer.h b/cockatrice/src/interface/widgets/tabs/tab_developer.h index 727a56bcb..1a4e5904f 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_developer.h +++ b/cockatrice/src/interface/widgets/tabs/tab_developer.h @@ -9,6 +9,10 @@ #include "tab.h" +#include +#include +#include + class AbstractClient; class QCheckBox; class QLabel; @@ -17,6 +21,7 @@ class QSpinBox; class QTableWidget; class QTimer; class Response; +class TabSupervisor; class TabDeveloper : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_game.cpp b/cockatrice/src/interface/widgets/tabs/tab_game.cpp index 23976340b..9a6862b2c 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_game.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_game.cpp @@ -2,11 +2,16 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../../game/abstract_game.h" +#include "../../../game/game_event_handler.h" +#include "../../../game/game_meta_info.h" +#include "../../../game/game_state.h" +#include "../../../game/player/player_info.h" +#include "../../../game/player/player_manager.h" +#include "../../../game_graphics/board/abstract_card_item.h" #include "../game/game.h" #include "../game/player/player_logic.h" #include "../game/replay.h" -#include "../game_graphics/board/arrow_item.h" -#include "../game_graphics/board/card_item.h" #include "../game_graphics/deckview/deck_view_container.h" #include "../game_graphics/deckview/tabbed_deck_view_container.h" #include "../game_graphics/game_scene.h" @@ -25,37 +30,48 @@ #include "../interface/widgets/server/user/user_list_manager.h" #include "../interface/widgets/utility/completer_utils.h" #include "../interface/widgets/utility/line_edit_completer.h" -#include "../interface/window_main.h" #include "../main.h" +#include "../menus/tearoff_menu.h" +#include "../replay/replay_widget.h" #include "../utility/visibility_change_listener.h" #include "card/card_completer_proxy_model.h" #include "card/card_search_model.h" #include "card_database_display_model.h" #include "card_database_model.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/utility/card_ref.h" #include "tab_supervisor.h" #include #include #include +#include #include #include #include +#include #include #include +#include #include #include +#include #include #include +#include #include #include +#include #include #include #include -#include +#include #include #include -#include -#include #include #include #include @@ -63,6 +79,18 @@ #include #include #include +#include +#include +#include + +class Event_GameJoined; +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay) : Tab(_tabSupervisor), sayLabel(nullptr), sayEdit(nullptr) diff --git a/cockatrice/src/interface/widgets/tabs/tab_game.h b/cockatrice/src/interface/widgets/tabs/tab_game.h index 29a2f40a3..7bc52202f 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_game.h +++ b/cockatrice/src/interface/widgets/tabs/tab_game.h @@ -9,47 +9,55 @@ #ifndef TAB_GAME_H #define TAB_GAME_H -#include "../game/abstract_game.h" -#include "../game/player/player_logic.h" -#include "../game_graphics/log/message_log_widget.h" -#include "../interface/widgets/menus/tearoff_menu.h" -#include "../interface/widgets/replay/replay_widget.h" #include "tab.h" -#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +// IWYU pragma: keep +// ServerInfo_User appears by value and inside QList in slot signatures, so the +// moc-generated code needs the complete type. +#include class CardMenu; -class ServerInfo_PlayerProperties; class TabbedDeckViewContainer; +class AbstractGame; +class Event_GameJoined; +class GameEventContext; +class MessageLogWidget; +class PlayerLogic; +class QAction; +class QCompleter; +class QStringListModel; +class QWidget; +class ServerInfo_Player; +class ServerInfo_User; +class TabSupervisor; +class TearOffMenu; +struct CardRef; +struct LoadedDeck; + inline Q_LOGGING_CATEGORY(TabGameLog, "tab_game"); class UserListProxy; -class DeckViewContainer; class AbstractClient; -class CardDatabase; class GameView; class GameScene; class ReplayWidget; class CardInfoFrameWidget; -class QTimer; -class QSplitter; class QLabel; class QPushButton; -class QToolButton; class QMenu; -class ZoneViewLayout; -class ZoneViewWidget; class PhasesToolbar; class PlayerListWidget; -class ReplayTimelineWidget; -class CardZone; class AbstractCardItem; -class CardItem; class QVBoxLayout; -class QHBoxLayout; class GameReplay; class LineEditCompleter; class QDockWidget; diff --git a/cockatrice/src/interface/widgets/tabs/tab_home.cpp b/cockatrice/src/interface/widgets/tabs/tab_home.cpp index 7a79b1785..1358645d0 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_home.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_home.cpp @@ -1,5 +1,9 @@ #include "tab_home.h" +#include "../general/home_widget.h" + +class TabSupervisor; + TabHome::TabHome(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_tabSupervisor), client(_client) { homeWidget = new HomeWidget(this, tabSupervisor); diff --git a/cockatrice/src/interface/widgets/tabs/tab_home.h b/cockatrice/src/interface/widgets/tabs/tab_home.h index 3aae19c2b..bc86348cb 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_home.h +++ b/cockatrice/src/interface/widgets/tabs/tab_home.h @@ -7,12 +7,14 @@ #ifndef TAB_HOME_H #define TAB_HOME_H -#include "../interface/widgets/general/home_widget.h" #include "tab.h" -#include +#include +#include class AbstractClient; +class HomeWidget; +class TabSupervisor; class TabHome : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_logs.cpp b/cockatrice/src/interface/widgets/tabs/tab_logs.cpp index f73d06b57..9f17afea2 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_logs.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_logs.cpp @@ -1,23 +1,35 @@ #include "tab_logs.h" #include "../interface/widgets/utility/custom_line_edit.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_chat_message.pb.h" #include #include #include #include #include +#include #include #include #include +#include +#include #include #include #include +#include +#include +#include #include #include #include #include #include +#include +#include + +class TabSupervisor; TabLog::TabLog(TabSupervisor *_tabSupervisor, AbstractClient *_client, bool _canUseDeveloperCommands) : Tab(_tabSupervisor), client(_client), canUseDeveloperCommands(_canUseDeveloperCommands) diff --git a/cockatrice/src/interface/widgets/tabs/tab_logs.h b/cockatrice/src/interface/widgets/tabs/tab_logs.h index 8e914ea64..fc8ef1ea0 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_logs.h +++ b/cockatrice/src/interface/widgets/tabs/tab_logs.h @@ -9,7 +9,8 @@ #include "tab.h" -#include +#include +#include class AbstractClient; class LineEditUnfocusable; @@ -24,9 +25,8 @@ class QWidget; class QGridLayout; class QVBoxLayout; class QTableWidget; -class CommandContainer; class Response; -class AbstractClient; +class TabSupervisor; class TabLog : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_message.cpp b/cockatrice/src/interface/widgets/tabs/tab_message.cpp index 418843178..65186e396 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_message.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_message.cpp @@ -6,12 +6,18 @@ #include "../interface/widgets/server/user/user_list_manager.h" #include "../interface/widgets/utility/custom_line_edit.h" #include "../main.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "tab_supervisor.h" +#include #include -#include +#include #include +#include +#include #include #include +#include #include #include #include @@ -19,6 +25,7 @@ #include #include #include +#include TabMessage::TabMessage(TabSupervisor *_tabSupervisor, AbstractClient *_client, diff --git a/cockatrice/src/interface/widgets/tabs/tab_message.h b/cockatrice/src/interface/widgets/tabs/tab_message.h index 0e6d66d4c..bea58ecb3 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_message.h +++ b/cockatrice/src/interface/widgets/tabs/tab_message.h @@ -10,6 +10,13 @@ #include "tab.h" #include +#include +#include +#include + +class QAction; +class QMenu; +class TabSupervisor; inline Q_LOGGING_CATEGORY(TabMessageLog, "tab_message"); diff --git a/cockatrice/src/interface/widgets/tabs/tab_moderation.cpp b/cockatrice/src/interface/widgets/tabs/tab_moderation.cpp index b9c37f1af..09a640540 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_moderation.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_moderation.cpp @@ -1,8 +1,13 @@ #include "tab_moderation.h" #include "abstract_client.h" -#include "tab_supervisor.h" +#include "libcockatrice/protocol/pb/admin_commands.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_moderator_login.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user_alt.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user_session.pb.h" +#include #include #include #include @@ -10,12 +15,17 @@ #include #include #include +#include #include #include +#include #include +#include #include +#include #include #include +#include #include #include #include @@ -26,6 +36,10 @@ #include #include #include +#include +#include + +class TabSupervisor; namespace { diff --git a/cockatrice/src/interface/widgets/tabs/tab_moderation.h b/cockatrice/src/interface/widgets/tabs/tab_moderation.h index 0a534992b..e352e90bb 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_moderation.h +++ b/cockatrice/src/interface/widgets/tabs/tab_moderation.h @@ -3,7 +3,9 @@ #include "tab.h" -#include +#include +#include +#include class AbstractClient; class QGroupBox; @@ -12,6 +14,8 @@ class QLineEdit; class QPushButton; class QTableWidget; class QTextEdit; +class Response; +class TabSupervisor; /** * Staff investigation tool. Lets moderators look up a user's account data, diff --git a/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp b/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp index d13f9d1e3..6bf3f6be7 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp @@ -2,6 +2,7 @@ #include "../../../client/settings/cache_settings.h" #include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/loaded_deck.h" #include "../cards/card_size_widget.h" #include "../general/layout_containers/flow_widget.h" #include "../visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h" @@ -12,14 +13,21 @@ #include "../visual_deck_storage/visual_deck_storage_tag_filter_widget.h" #include "tab_supervisor.h" -#include +#include +#include +#include +#include #include #include +#include #include #include +#include #include #include #include +#include +#include #include #include #include @@ -27,6 +35,7 @@ #include #include #include +#include TabPublicDecks::TabPublicDecks(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_userName) : Tab(_tabSupervisor), client(_client), userName(_userName) diff --git a/cockatrice/src/interface/widgets/tabs/tab_public_decks.h b/cockatrice/src/interface/widgets/tabs/tab_public_decks.h index 492fdeafa..847479e78 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_public_decks.h +++ b/cockatrice/src/interface/widgets/tabs/tab_public_decks.h @@ -8,11 +8,13 @@ #include "tab.h" +#include +#include + class AbstractClient; class CommandContainer; class DeckPreviewColorIdentityFilterWidget; class FlowWidget; -class PublicDeckPreviewWidget; class QLabel; class QToolButton; class RemotePublicDecksModel; @@ -20,6 +22,7 @@ class Response; class VisualDeckStorageQuickSettingsWidget; class VisualDeckStorageSearchWidget; class VisualDeckStorageTagFilterWidget; +class TabSupervisor; /** * @brief A visual grid of the public decks published by another user. diff --git a/cockatrice/src/interface/widgets/tabs/tab_replays.cpp b/cockatrice/src/interface/widgets/tabs/tab_replays.cpp index e26bea2a3..52bc4cd8f 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_replays.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_replays.cpp @@ -3,22 +3,51 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" #include "../interface/widgets/server/remote/remote_replay_list_tree_widget.h" -#include "tab_game.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay_match.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include +#include #include #include +#include #include +#include #include #include +#include +#include #include +#include #include #include #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include #include #include @@ -32,6 +61,11 @@ #include #include #include +#include +#include +#include + +class TabSupervisor; inline Q_LOGGING_CATEGORY(TabReplaysLog, "replays_tab"); diff --git a/cockatrice/src/interface/widgets/tabs/tab_replays.h b/cockatrice/src/interface/widgets/tabs/tab_replays.h index aa4ec039c..e29e29bd7 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_replays.h +++ b/cockatrice/src/interface/widgets/tabs/tab_replays.h @@ -10,19 +10,26 @@ #include "tab.h" +#include +#include #include +// IWYU pragma: keep +// GameReplay is a protobuf message passed through the openReplay signal, +// so the moc-generated code needs the complete type. +#include +#include class ServerInfo_User; class Response; -class AbstractClient; class QTreeView; class QFileSystemModel; -class QToolBar; class QGroupBox; class RemoteReplayList_TreeWidget; -class GameReplay; class Event_ReplayAdded; class CommandContainer; +class QAction; +class QModelIndex; +class TabSupervisor; class TabReplays : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_report.cpp b/cockatrice/src/interface/widgets/tabs/tab_report.cpp index 0b9108f9b..5f158e9b1 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_report.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_report.cpp @@ -2,11 +2,16 @@ #include "../utility/report_utils.h" #include "abstract_client.h" +#include "libcockatrice/protocol/pb/response.pb.h" #include "tab_supervisor.h" +#include +#include #include #include #include +#include +#include #include #include #include @@ -15,16 +20,19 @@ #include #include #include -#include #include +#include #include #include #include +#include #include #include #include #include +#include #include +#include #include #include #include @@ -41,6 +49,8 @@ #include #include #include +#include +#include namespace { diff --git a/cockatrice/src/interface/widgets/tabs/tab_report.h b/cockatrice/src/interface/widgets/tabs/tab_report.h index b62a99ce2..645f949de 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_report.h +++ b/cockatrice/src/interface/widgets/tabs/tab_report.h @@ -4,8 +4,9 @@ #include "tab.h" #include -#include +#include #include +#include class AbstractClient; class QCheckBox; @@ -19,6 +20,8 @@ class QTableWidget; class QTextEdit; class QTimer; class GameReplay; +class Response; +class TabSupervisor; class TabReport : public Tab { diff --git a/cockatrice/src/interface/widgets/tabs/tab_room.cpp b/cockatrice/src/interface/widgets/tabs/tab_room.cpp index 866324367..67106ba34 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_room.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_room.cpp @@ -11,27 +11,39 @@ #include "../interface/widgets/server/user/user_list_panel_widget.h" #include "../interface/widgets/server/user/user_list_widget.h" #include "../main.h" +#include "../server/game_type_map.h" +#include "../server/user/user_list_proxy.h" #include "../utility/completer_utils.h" +#include "../utility/line_edit_completer.h" #include "card/card_completer_proxy_model.h" #include "card/card_search_model.h" #include "card_database_display_model.h" #include "card_database_model.h" -#include "tab_account.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_gametype.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "tab_supervisor.h" +#include "user_level.h" +#include #include +#include #include +#include +#include +#include +#include #include #include -#include -#include #include #include #include +#include #include #include #include -#include +#include #include #include #include @@ -46,6 +58,8 @@ #include #include #include +#include +#include TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, diff --git a/cockatrice/src/interface/widgets/tabs/tab_room.h b/cockatrice/src/interface/widgets/tabs/tab_room.h index 7d01d5cf6..031056145 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_room.h +++ b/cockatrice/src/interface/widgets/tabs/tab_room.h @@ -8,16 +8,21 @@ #ifndef TAB_ROOM_H #define TAB_ROOM_H -#include "../interface/widgets/utility/line_edit_completer.h" #include "tab.h" -#include -#include +#include #include -#include +#include +#include +#include class UserListProxy; -class UserListManager; +class QAction; +class QGroupBox; +class QMenu; +class QStringListModel; +class TabSupervisor; + namespace google { namespace protobuf @@ -30,12 +35,9 @@ class UserListWidget; class UserListPanelWidget; class QLabel; class ChatView; -class QPushButton; -class QTextTable; class QCompleter; class RoomEvent; class ServerInfo_Room; -class ServerInfo_Game; class Event_ListGames; class Event_JoinRoom; class Event_LeaveRoom; diff --git a/cockatrice/src/interface/widgets/tabs/tab_server.cpp b/cockatrice/src/interface/widgets/tabs/tab_server.cpp index fca32094c..0f3e76c76 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_server.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_server.cpp @@ -1,14 +1,20 @@ #include "tab_server.h" -#include "../interface/widgets/server/user/user_list_widget.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_room.pb.h" #include "tab_supervisor.h" #include #include -#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -16,6 +22,9 @@ #include #include #include +#include + +class TabRoom; RoomSelector::RoomSelector(AbstractClient *_client, QWidget *parent) : QGroupBox(parent), client(_client) { diff --git a/cockatrice/src/interface/widgets/tabs/tab_server.h b/cockatrice/src/interface/widgets/tabs/tab_server.h index 121ff814d..eb2f572fe 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_server.h +++ b/cockatrice/src/interface/widgets/tabs/tab_server.h @@ -12,20 +12,21 @@ #include #include #include -#include -#include +#include +#include +#include class AbstractClient; -class QTextEdit; -class QLabel; -class UserListWidget; class QPushButton; - class Event_ListRooms; class Event_ServerMessage; class Response; class ServerInfo_Room; class CommandContainer; +class QTextBrowser; +class QTreeWidget; +class QWidget; +class TabSupervisor; class RoomSelector : public QGroupBox { diff --git a/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp b/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp index 0dc246eaa..70014ec47 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp @@ -2,14 +2,27 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include "../../../game/abstract_game.h" +#include "../../../game/game_event_handler.h" +#include "../../../game/game_meta_info.h" +#include "../../deck_loader/loaded_deck.h" +#include "../../intents/contexts/context_connect_to_server.h" +#include "../../intents/contexts/context_join_game.h" +#include "../../intents/contexts/context_join_room.h" +#include "../../intents/intent.h" #include "../../intents/intent_join_server_game.h" #include "../interface/pixel_map_generator.h" #include "../interface/widgets/server/game_link.h" #include "../interface/widgets/server/user/user_list_manager.h" -#include "../interface/widgets/server/user/user_list_widget.h" #include "../main.h" +#include "abstract_tab_deck_editor.h" #include "api/archidekt/tab_archidekt.h" +#include "api/edhrec/tab_edhrec.h" #include "api/edhrec/tab_edhrec_main.h" +#include "latency_tracker.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_gametype.pb.h" +#include "tab.h" #include "tab_account.h" #include "tab_admin.h" #include "tab_card_art_rules.h" @@ -27,14 +40,31 @@ #include "tab_room.h" #include "tab_server.h" #include "tab_visual_database_display.h" +#include "user_level.h" #include "visual_deck_editor/tab_deck_editor_visual.h" -#include "visual_deck_editor/tab_deck_editor_visual_tab_widget.h" #include "visual_deck_storage/tab_deck_storage_visual.h" +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include #include @@ -45,11 +75,16 @@ #include #include #include -#include #include #include #include #include +#include +#include +#include +#include + +class QWidget; QRect MacOSTabFixStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const { diff --git a/cockatrice/src/interface/widgets/tabs/tab_supervisor.h b/cockatrice/src/interface/widgets/tabs/tab_supervisor.h index 1a4f7f749..9c7dc48d1 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_supervisor.h +++ b/cockatrice/src/interface/widgets/tabs/tab_supervisor.h @@ -8,29 +8,36 @@ #ifndef TAB_SUPERVISOR_H #define TAB_SUPERVISOR_H -#include "../../deck_loader/deck_loader.h" #include "../interface/widgets/server/game_link.h" -#include "../interface/widgets/server/user/user_list_proxy.h" -#include "abstract_tab_deck_editor.h" -#include "api/archidekt/tab_archidekt.h" -#include "api/edhrec/tab_edhrec.h" -#include "api/edhrec/tab_edhrec_main.h" -#include "tab_visual_database_display.h" -#include "visual_deck_editor/tab_deck_editor_visual.h" -#include "visual_deck_storage/tab_deck_storage_visual.h" +#include "libcockatrice/card/card_info.h" #include +#include #include #include +#include #include +#include +#include #include #include +#include class TabCardArtRules; +class AbstractTabDeckEditor; +class QAction; +class QWidget; +class TabArchidekt; +class TabDeckEditorVisual; +class TabDeckStorageVisual; +class TabEdhRec; +class TabEdhRecMain; +class TabVisualDatabaseDisplay; +struct LoadedDeck; + inline Q_LOGGING_CATEGORY(TabSupervisorLog, "tab_supervisor"); class UserListManager; -class QMenu; class AbstractClient; class Tab; class TabServer; @@ -56,7 +63,6 @@ class Event_NotifyUser; class ServerInfo_Room; class ServerInfo_User; class GameReplay; -class DeckList; class MacOSTabFixStyle : public QProxyStyle { diff --git a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp index 3112e7ada..f4b007072 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.cpp @@ -1,6 +1,7 @@ #include "tab_visual_database_display.h" -#include "tab_deck_editor.h" +#include "../visual_database_display/visual_database_display_widget.h" +#include "card_database_model.h" #include "tab_supervisor.h" #include diff --git a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h index 3a4bcd6ea..31633f10c 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h +++ b/cockatrice/src/interface/widgets/tabs/tab_visual_database_display.h @@ -8,8 +8,14 @@ #define TAB_VISUAL_DATABASE_DISPLAY_H #include "../interface/widgets/visual_database_display/visual_database_display_widget.h" +#include "libcockatrice/card/card_info.h" #include "tab.h" +#include +#include + +class TabSupervisor; + class TabVisualDatabaseDisplay : public Tab { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp index 0f43893d3..be7255dc3 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp @@ -2,37 +2,53 @@ #include "../../../../client/settings/cache_settings.h" #include "../../../../client/settings/shortcuts_settings.h" -#include "../../cards/card_info_display_widget.h" +#include "../../../deck_loader/loaded_deck.h" +#include "../../deck_editor/deck_editor_card_database_dock_widget.h" +#include "../../deck_editor/deck_editor_card_info_dock_widget.h" +#include "../../deck_editor/deck_editor_deck_dock_widget.h" +#include "../../deck_editor/deck_editor_filter_dock_widget.h" +#include "../../deck_editor/deck_editor_printing_selector_dock_widget.h" #include "../../deck_editor/deck_state_manager.h" #include "../../deck_editor/deck_zone_dialog.h" -#include "../../filters/filter_builder.h" -#include "../../interface/pixel_map_generator.h" -#include "../../interface/widgets/cards/card_info_frame_widget.h" #include "../../interface/widgets/deck_analytics/deck_analytics_widget.h" #include "../../interface/widgets/visual_deck_editor/visual_deck_editor_widget.h" -#include "../tab_deck_editor.h" +#include "../../menus/deck_editor_menu.h" +#include "../../visual_database_display/visual_database_display_widget.h" +#include "../../visual_deck_editor/visual_deck_editor_sample_hand_widget.h" #include "../tab_supervisor.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" #include "tab_deck_editor_visual_tab_widget.h" #include -#include -#include -#include +#include +#include +#include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include #include #include #include +#include +#include #include -#include -#include #include #include +#include +#include /** * @brief Constructs the TabDeckEditorVisual instance. diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.h b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.h index fb09578c4..f5eb9981a 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.h +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.h @@ -1,8 +1,19 @@ #ifndef WINDOW_DECKEDITORVISUAL_H #define WINDOW_DECKEDITORVISUAL_H -#include "../tab.h" -#include "tab_deck_editor_visual_tab_widget.h" +#include "../abstract_tab_deck_editor.h" + +#include +#include +#include + +class ExactCard; +class QDockWidget; +class QHBoxLayout; +class QVBoxLayout; +class QWidget; +class TabDeckEditorVisualTabWidget; +class TabSupervisor; /** * @class TabDeckEditorVisual diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp index 5ccfcc28f..8e01ff983 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp @@ -1,7 +1,24 @@ #include "tab_deck_editor_visual_tab_widget.h" +#include "../../deck_analytics/deck_analytics_widget.h" +#include "../../deck_analytics/deck_list_statistics_analyzer.h" +#include "../../deck_editor/deck_editor_deck_dock_widget.h" #include "../../interface/widgets/visual_database_display/visual_database_display_widget.h" +#include "../../visual_deck_editor/visual_deck_editor_sample_hand_widget.h" +#include "../../visual_deck_editor/visual_deck_editor_widget.h" #include "../abstract_tab_deck_editor.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" + +#include +#include +#include +#include +#include + +class CardDatabaseModel; +class DeckListModel; +class QMouseEvent; /** * @brief Constructs the TabDeckEditorVisualTabWidget. diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h index 4f04b51f6..fff978f42 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h @@ -1,16 +1,25 @@ #ifndef TAB_DECK_EDITOR_VISUAL_TAB_WIDGET_H #define TAB_DECK_EDITOR_VISUAL_TAB_WIDGET_H -#include "../../interface/widgets/deck_analytics/deck_analytics_widget.h" -#include "../../interface/widgets/printing_selector/printing_selector.h" -#include "../../interface/widgets/visual_database_display/visual_database_display_widget.h" -#include "../../interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h" -#include "../../interface/widgets/visual_deck_editor/visual_deck_editor_widget.h" -#include "../abstract_tab_deck_editor.h" +#include "libcockatrice/card/card_info.h" +#include +#include #include -#include -#include +#include + +class AbstractTabDeckEditor; +class CardDatabaseModel; +class DeckAnalyticsWidget; +class DeckListModel; +class DeckListStatisticsAnalyzer; +class ExactCard; +class PrintingSelector; +class QVBoxLayout; +class QWidget; +class VisualDatabaseDisplayWidget; +class VisualDeckEditorSampleHandWidget; +class VisualDeckEditorWidget; /** * @class TabDeckEditorVisualTabWidget diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp index 03df76b03..cb6dfab9c 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp @@ -1,23 +1,30 @@ #include "tab_deck_storage_visual.h" #include "../../../../client/settings/cache_settings.h" +#include "../../../deck_loader/deck_file_format.h" #include "../../../deck_loader/deck_loader.h" +#include "../../../deck_loader/loaded_deck.h" #include "../../cards/additional_info/deck_color_identity.h" #include "../../deck_share/deck_share_utils.h" +#include "../../deck_share/share_bar_widget.h" #include "../../interface/widgets/visual_deck_storage/visual_deck_storage_widget.h" +#include "../tab.h" #include "../tab_supervisor.h" #include #include #include +#include +#include #include #include #include #include #include -#include #include #include +#include +#include TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_tabSupervisor), visualDeckStorageWidget(new VisualDeckStorageWidget(this)), client(_client), diff --git a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h index 7cd4e7d17..13a078fce 100644 --- a/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h +++ b/cockatrice/src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.h @@ -10,22 +10,18 @@ #include "../../deck_share/share_bar_widget.h" #include "../tab.h" +#include +#include #include #include +#include struct LoadedDeck; -class AbstractClient; class CommandContainer; -class DeckPreviewWidget; -class QFileSystemModel; -class QGroupBox; class QTimer; -class QToolBar; -class QTreeView; -class QTreeWidget; -class QTreeWidgetItem; class Response; class VisualDeckStorageWidget; +class TabSupervisor; class TabDeckStorageVisual final : public Tab { diff --git a/cockatrice/src/interface/widgets/utility/card_completer_delegate.cpp b/cockatrice/src/interface/widgets/utility/card_completer_delegate.cpp index 29bf2263e..8042fb9fc 100644 --- a/cockatrice/src/interface/widgets/utility/card_completer_delegate.cpp +++ b/cockatrice/src/interface/widgets/utility/card_completer_delegate.cpp @@ -2,18 +2,42 @@ #include "../../pixel_map_generator.h" #include "../cards/additional_info/mana_cost_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/set/card_set.h" +#include +#include +#include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include #include #include #include #include +#include + +class QObject; +template class QSharedPointer; // --------------------------------------------------------------------------- // Internal colour helpers diff --git a/cockatrice/src/interface/widgets/utility/card_completer_delegate.h b/cockatrice/src/interface/widgets/utility/card_completer_delegate.h index 78667f56b..ad81d86e4 100644 --- a/cockatrice/src/interface/widgets/utility/card_completer_delegate.h +++ b/cockatrice/src/interface/widgets/utility/card_completer_delegate.h @@ -9,10 +9,16 @@ #include #include -#include +#include #include +#include class CardInfo; +class QObject; +class QPainter; +class QPoint; +class QRect; +template class QSharedPointer; /** * @brief Paints styled card completer popup rows. diff --git a/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp b/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp index 6794ccbb4..1ddcc4200 100644 --- a/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp +++ b/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp @@ -2,20 +2,37 @@ #include "../cards/card_info_picture_enlarged_widget.h" #include "card_completer_delegate.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" #include "reversed_completer_model.h" +#include #include #include +#include #include #include +#include #include +#include #include +#include #include +#include #include +#include #include +#include +#include +#include +#include #include #include #include +#include +#include + +template class QSharedPointer; namespace { @@ -132,7 +149,9 @@ bool CardCompleterStyler::handlePopupKeyPress(QKeyEvent *event) const int newRow = qBound(0, currentRow + step, rowCount - 1); if (newRow != currentRow) { - popup->setCurrentIndex(completer->completionModel()->index(newRow, completer->completionColumn())); + const QModelIndex newIndex = completer->completionModel()->index(newRow, completer->completionColumn()); + popup->selectionModel()->setCurrentIndex(newIndex, + QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } return true; @@ -161,7 +180,8 @@ void CardCompleterStyler::ensureClosestSelected() const int closestRow = rowCount - 1; if (currentRow != closestRow) { - popup->setCurrentIndex(completionModel->index(closestRow, completer->completionColumn())); + popup->selectionModel()->setCurrentIndex(completionModel->index(closestRow, completer->completionColumn()), + QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } } diff --git a/cockatrice/src/interface/widgets/utility/card_completer_styler.h b/cockatrice/src/interface/widgets/utility/card_completer_styler.h index 616e3fe61..9245c9095 100644 --- a/cockatrice/src/interface/widgets/utility/card_completer_styler.h +++ b/cockatrice/src/interface/widgets/utility/card_completer_styler.h @@ -9,6 +9,7 @@ #include #include +#include class CardInfoPictureEnlargedWidget; class QCompleter; diff --git a/cockatrice/src/interface/widgets/utility/compact_push_button.cpp b/cockatrice/src/interface/widgets/utility/compact_push_button.cpp index cf98bfede..7df105d15 100644 --- a/cockatrice/src/interface/widgets/utility/compact_push_button.cpp +++ b/cockatrice/src/interface/widgets/utility/compact_push_button.cpp @@ -1,5 +1,9 @@ #include "compact_push_button.h" +#include +#include +#include + CompactPushButton::CompactPushButton(QWidget *parent) : QPushButton(parent) { setCheckable(true); diff --git a/cockatrice/src/interface/widgets/utility/compact_push_button.h b/cockatrice/src/interface/widgets/utility/compact_push_button.h index b0017beee..fa8c8080a 100644 --- a/cockatrice/src/interface/widgets/utility/compact_push_button.h +++ b/cockatrice/src/interface/widgets/utility/compact_push_button.h @@ -1,7 +1,12 @@ #ifndef COCKATRICE_COMPACT_PUSH_BUTTON_H #define COCKATRICE_COMPACT_PUSH_BUTTON_H +#include #include +#include +#include + +class QWidget; class CompactPushButton : public QPushButton { diff --git a/cockatrice/src/interface/widgets/utility/completer_utils.cpp b/cockatrice/src/interface/widgets/utility/completer_utils.cpp index 23ddb30b0..f1cd9c6a7 100644 --- a/cockatrice/src/interface/widgets/utility/completer_utils.cpp +++ b/cockatrice/src/interface/widgets/utility/completer_utils.cpp @@ -3,19 +3,66 @@ #include "../../../client/settings/cache_settings.h" #include "card_completer_styler.h" +#include #include #include +#include #include +#include +#include #include +#include #include +#include +#include +#include #include #include #include -#include #include +#include namespace { +/** + * @brief Paints the mention popup's current row with a visible highlight. + * + * A completer popup is a transient window that is usually not the application's + * active window, so the style paints a selected row using the palette's + * Inactive highlight group. Most themes set that colour close to the popup + * background, which hides the current completion entirely. Mirror the active + * highlight into the inactive group so the selection stays visible. + */ +class MentionCompleterDelegate : public QStyledItemDelegate +{ +public: + explicit MentionCompleterDelegate(QAbstractItemView *view) : QStyledItemDelegate(view), view(view) + { + } + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override + { + QStyleOptionViewItem opt = option; + opt.showDecorationSelected = true; + + if (view->currentIndex() == index) { + opt.state |= QStyle::State_HasFocus; + } + + if (opt.state & QStyle::State_Selected) { + opt.palette.setColor(QPalette::Inactive, QPalette::Highlight, + opt.palette.color(QPalette::Active, QPalette::Highlight)); + opt.palette.setColor(QPalette::Inactive, QPalette::HighlightedText, + opt.palette.color(QPalette::Active, QPalette::HighlightedText)); + } + + QStyledItemDelegate::paint(painter, opt, index); + } + +private: + QAbstractItemView *view; +}; + void applyCardSearchLanguage(CardSearchModel *searchModel) { const CardsDisplaySettings &cardsDisplay = SettingsCache::instance().cardsDisplay(); @@ -68,5 +115,11 @@ QCompleter *createMentionCompleter(QStringListModel *model, QObject *parent) completer->setCaseSensitivity(Qt::CaseInsensitive); completer->setMaxVisibleItems(5); completer->setFilterMode(Qt::MatchStartsWith); + + // Force the popup to be created so the highlight delegate can be installed; + // otherwise QCompleter's own delegate hides the selection on most themes. + QAbstractItemView *popup = completer->popup(); + popup->setItemDelegate(new MentionCompleterDelegate(popup)); + return completer; } diff --git a/cockatrice/src/interface/widgets/utility/custom_line_edit.cpp b/cockatrice/src/interface/widgets/utility/custom_line_edit.cpp index 05f56c275..d524041c3 100644 --- a/cockatrice/src/interface/widgets/utility/custom_line_edit.cpp +++ b/cockatrice/src/interface/widgets/utility/custom_line_edit.cpp @@ -3,11 +3,17 @@ #include "../../../client/settings/cache_settings.h" #include "../../../client/settings/shortcuts_settings.h" +#include +#include +#include #include +#include #include -#include +#include +#include #include -#include +#include +#include LineEditUnfocusable::LineEditUnfocusable(QWidget *parent) : QLineEdit(parent) { diff --git a/cockatrice/src/interface/widgets/utility/custom_line_edit.h b/cockatrice/src/interface/widgets/utility/custom_line_edit.h index 8c389b797..4d256d3dc 100644 --- a/cockatrice/src/interface/widgets/utility/custom_line_edit.h +++ b/cockatrice/src/interface/widgets/utility/custom_line_edit.h @@ -8,6 +8,7 @@ #define CUSTOMLINEEDIT_H #include +#include class QTreeView; class QKeyEvent; diff --git a/cockatrice/src/interface/widgets/utility/get_text_with_max.cpp b/cockatrice/src/interface/widgets/utility/get_text_with_max.cpp index 134352eb3..1a1bc924d 100644 --- a/cockatrice/src/interface/widgets/utility/get_text_with_max.cpp +++ b/cockatrice/src/interface/widgets/utility/get_text_with_max.cpp @@ -2,6 +2,8 @@ #include +class QWidget; + QString getTextWithMax(QWidget *parent, const QString &title, const QString &label, diff --git a/cockatrice/src/interface/widgets/utility/get_text_with_max.h b/cockatrice/src/interface/widgets/utility/get_text_with_max.h index 424bb0c6a..f1c89c703 100644 --- a/cockatrice/src/interface/widgets/utility/get_text_with_max.h +++ b/cockatrice/src/interface/widgets/utility/get_text_with_max.h @@ -8,8 +8,11 @@ #define GETTEXTWITHMAX_H #include -#include +#include #include +#include + +class QWidget; QString getTextWithMax(QWidget *parent, const QString &title, diff --git a/cockatrice/src/interface/widgets/utility/line_edit_completer.cpp b/cockatrice/src/interface/widgets/utility/line_edit_completer.cpp index 3a678029d..056887f1a 100644 --- a/cockatrice/src/interface/widgets/utility/line_edit_completer.cpp +++ b/cockatrice/src/interface/widgets/utility/line_edit_completer.cpp @@ -1,8 +1,18 @@ #include "line_edit_completer.h" +#include #include +#include +#include #include +#include #include +#include +#include +#include +#include + +class QWidget; LineEditCompleter::LineEditCompleter(QWidget *parent) : LineEditUnfocusable(parent) { @@ -40,37 +50,80 @@ void LineEditCompleter::focusOutEvent(QFocusEvent *e) { LineEditUnfocusable::focusOutEvent(e); - // Only commit the highlighted completion when focus moves away via Tab. + // Commit completion when focus moves away via Tab if popup is visible. // Other focus losses (e.g. the unfocus shortcut / Escape) must simply close // the popup without inserting anything. - if (e->reason() != Qt::TabFocusReason) { - hideCompleterPopups(); + bool popupWasVisible = false; + for (auto &info : completers) { + if (info.completer->popup()->isVisible()) { + popupWasVisible = true; + const QModelIndex currentIndex = info.completer->popup()->currentIndex(); + QString completionText; + if (currentIndex.isValid()) { + completionText = currentIndex.data().toString(); + } else { + completionText = info.completer->currentCompletion(); + } + if (!completionText.isEmpty()) { + insertCompletion(info.completer, completionText); + } + } + } + hideCompleterPopups(); + + if (popupWasVisible && e->reason() == Qt::TabFocusReason) { + // Refocus the edit so Tab doesn't move focus away + // Use a queued connection to ensure focus is restored after the focus change completes + QMetaObject::invokeMethod(this, "setFocus", Qt::QueuedConnection); + e->accept(); return; } - for (auto &info : completers) { - if (!info.completer->popup()->isVisible()) { - continue; - } - - const QModelIndex currentIndex = info.completer->popup()->currentIndex(); - if (currentIndex.isValid()) { - insertCompletion(info.completer, currentIndex.data().toString()); - } + if (popupWasVisible) { + return; } - - hideCompleterPopups(); } void LineEditCompleter::keyPressEvent(QKeyEvent *event) { - LineEditUnfocusable::keyPressEvent(event); - if (event->key() == Qt::Key_Escape) { - hideCompleterPopups(); + if (hasVisibleCompleterPopup()) { + event->ignore(); + hideCompleterPopups(); + return; + } + LineEditUnfocusable::keyPressEvent(event); return; } + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter || event->key() == Qt::Key_Space) { + for (auto &info : completers) { + if (info.completer->popup()->isVisible()) { + event->ignore(); + const QModelIndex currentIndex = info.completer->popup()->currentIndex(); + QString completionText; + if (currentIndex.isValid()) { + completionText = currentIndex.data().toString(); + } else { + completionText = info.completer->currentCompletion(); + } + if (!completionText.isEmpty()) { + insertCompletion(info.completer, completionText); + } + hideCompleterPopups(); + return; + } + } + } + + if (event->key() == Qt::Key_Tab) { + // Let Tab proceed normally; focusOutEvent will handle completion if popup is visible + LineEditUnfocusable::keyPressEvent(event); + return; + } + + LineEditUnfocusable::keyPressEvent(event); + QString textValue = text(); int cursorPos = cursorPosition(); @@ -124,6 +177,17 @@ void LineEditCompleter::keyPressEvent(QKeyEvent *event) } active->completer->complete(); + + // The popup opens without a current row, so nothing is highlighted and there + // is no visual indication of what Enter will insert. Select the row that + // currentCompletion() would use so the current mention stays visible. + auto *completionModel = active->completer->completionModel(); + const int currentRow = active->completer->currentRow(); + if (currentRow >= 0 && currentRow < completionModel->rowCount()) { + active->completer->popup()->selectionModel()->setCurrentIndex( + completionModel->index(currentRow, active->completer->completionColumn()), + QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + } } void LineEditCompleter::insertCompletion(const QString &completion) diff --git a/cockatrice/src/interface/widgets/utility/line_edit_completer.h b/cockatrice/src/interface/widgets/utility/line_edit_completer.h index 369b7b553..c141682bf 100644 --- a/cockatrice/src/interface/widgets/utility/line_edit_completer.h +++ b/cockatrice/src/interface/widgets/utility/line_edit_completer.h @@ -10,12 +10,12 @@ #include "custom_line_edit.h" -#include -#include -#include #include #include -#include +#include + +class QCompleter; +class QWidget; enum class CompleterTrigger { diff --git a/cockatrice/src/interface/widgets/utility/report_utils.cpp b/cockatrice/src/interface/widgets/utility/report_utils.cpp index aa4558e5c..a581c9837 100644 --- a/cockatrice/src/interface/widgets/utility/report_utils.cpp +++ b/cockatrice/src/interface/widgets/utility/report_utils.cpp @@ -1,12 +1,20 @@ #include "report_utils.h" +#include "libcockatrice/protocol/pb/serverinfo_report.pb.h" + #include #include +#include +#include #include #include +#include #include +#include #include #include +#include +#include namespace report_utils { diff --git a/cockatrice/src/interface/widgets/utility/report_utils.h b/cockatrice/src/interface/widgets/utility/report_utils.h index c6cc96c18..679989486 100644 --- a/cockatrice/src/interface/widgets/utility/report_utils.h +++ b/cockatrice/src/interface/widgets/utility/report_utils.h @@ -2,10 +2,11 @@ #define REPORT_UTILS_H #include -#include +#include class QTableWidget; class QTextEdit; +class ServerInfo_Report; namespace report_utils { diff --git a/cockatrice/src/interface/widgets/utility/reversed_completer_model.cpp b/cockatrice/src/interface/widgets/utility/reversed_completer_model.cpp index 1bc9ba14b..3702798fd 100644 --- a/cockatrice/src/interface/widgets/utility/reversed_completer_model.cpp +++ b/cockatrice/src/interface/widgets/utility/reversed_completer_model.cpp @@ -1,7 +1,10 @@ #include "reversed_completer_model.h" #include +#include +#include #include +#include #include void ReversedCompleterModel::setSourceModel(QAbstractItemModel *sourceModel) diff --git a/cockatrice/src/interface/widgets/utility/reversed_completer_model.h b/cockatrice/src/interface/widgets/utility/reversed_completer_model.h index 64233a1b0..cf4b44974 100644 --- a/cockatrice/src/interface/widgets/utility/reversed_completer_model.h +++ b/cockatrice/src/interface/widgets/utility/reversed_completer_model.h @@ -8,8 +8,8 @@ #define REVERSED_COMPLETER_MODEL_H #include - -class QAbstractItemModel; +#include +#include /** * @brief A completer model that can present its rows bottom-to-top. diff --git a/cockatrice/src/interface/widgets/utility/sequence_edit.cpp b/cockatrice/src/interface/widgets/utility/sequence_edit.cpp index 06561a41d..e92287c9a 100644 --- a/cockatrice/src/interface/widgets/utility/sequence_edit.cpp +++ b/cockatrice/src/interface/widgets/utility/sequence_edit.cpp @@ -4,8 +4,16 @@ #include "../../../client/settings/shortcuts_settings.h" #include "../../pixel_map_generator.h" +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include SequenceEdit::SequenceEdit(const QString &_shortcutName, QWidget *parent) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/utility/sequence_edit.h b/cockatrice/src/interface/widgets/utility/sequence_edit.h index 28e18d42f..0cdd48ceb 100644 --- a/cockatrice/src/interface/widgets/utility/sequence_edit.h +++ b/cockatrice/src/interface/widgets/utility/sequence_edit.h @@ -7,10 +7,15 @@ #ifndef SEQUENCEEDIT_H #define SEQUENCEEDIT_H -#include -#include -#include +#include +#include #include +#include +#include + +class QKeyEvent; +class QLineEdit; +class QPushButton; class SequenceEdit : public QWidget { diff --git a/cockatrice/src/interface/widgets/utility/visibility_change_listener.h b/cockatrice/src/interface/widgets/utility/visibility_change_listener.h index 10928caf6..f154918d6 100644 --- a/cockatrice/src/interface/widgets/utility/visibility_change_listener.h +++ b/cockatrice/src/interface/widgets/utility/visibility_change_listener.h @@ -2,6 +2,9 @@ #define COCKATRICE_VISIBILITY_LISTENER_H #include +#include + +class QWidget; /** * @brief This filter listens to the visibility changes of a target widget, emitting signals whenever the visibility of diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp index 57c6da762..cf815ace0 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp @@ -1,8 +1,19 @@ #include "visual_database_display_color_filter_widget.h" #include "../cards/additional_info/mana_symbol_widget.h" +#include "filter_tree_model.h" +#include "libcockatrice/filters/filter_card.h" +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include /** diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h index 497d25fce..38812b02a 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h @@ -7,11 +7,16 @@ #ifndef VISUAL_DATABASE_DISPLAY_COLOR_FILTER_WIDGET_H #define VISUAL_DATABASE_DISPLAY_COLOR_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" - -#include -#include +#include +#include +#include +#include #include +#include + +class FilterTreeModel; +class QComboBox; +class QHBoxLayout; class VisualDatabaseDisplayColorFilterCircleWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp index 76a611d52..fd005b315 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp @@ -1,13 +1,28 @@ #include "visual_database_display_filter_save_load_widget.h" #include "../../../client/settings/cache_settings.h" +#include "../general/layout_containers/flow_widget.h" +#include "filter_tree_model.h" +#include "libcockatrice/filters/filter_card.h" #include "visual_database_filter_display_widget.h" -#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include #include +#include VisualDatabaseDisplayFilterSaveLoadWidget::VisualDatabaseDisplayFilterSaveLoadWidget(QWidget *parent, FilterTreeModel *_filterModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h index 459633e42..ea8a0ed6b 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h @@ -7,17 +7,19 @@ #ifndef VISUAL_DATABASE_DISPLAY_FILTER_SAVE_LOAD_WIDGET_H #define VISUAL_DATABASE_DISPLAY_FILTER_SAVE_LOAD_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../general/layout_containers/flow_widget.h" - -#include -#include -#include -#include +#include #include -#include -#include +#include +#include +#include #include +#include + +class FilterTreeModel; +class FlowWidget; +class QLineEdit; +class QPushButton; +class QVBoxLayout; class VisualDatabaseDisplayFilterSaveLoadWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp index a59a068dd..3e9d9e525 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp @@ -2,9 +2,36 @@ #include "../../pixel_map_generator.h" #include "../deck_editor/card_database_view.h" +#include "../quick_settings/settings_button_widget.h" +#include "card_database_display_model.h" +#include "visual_database_display_filter_save_load_widget.h" +#include "visual_database_display_format_legality_filter_widget.h" +#include "visual_database_display_main_type_filter_widget.h" +#include "visual_database_display_name_filter_widget.h" +#include "visual_database_display_set_filter_widget.h" +#include "visual_database_display_sub_type_filter_widget.h" #include "visual_database_display_widget.h" +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class DeckListModel; VisualDatabaseDisplayFilterToolbarWidget::VisualDatabaseDisplayFilterToolbarWidget(VisualDatabaseDisplayWidget *_parent, DeckListModel *deckListModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.h index 8a3555455..f97310c1b 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.h @@ -1,14 +1,22 @@ #ifndef COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_TOOLBAR_WIDGET_H #define COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_TOOLBAR_WIDGET_H -#include "visual_database_display_filter_save_load_widget.h" -#include "visual_database_display_format_legality_filter_widget.h" -#include "visual_database_display_main_type_filter_widget.h" -#include "visual_database_display_name_filter_widget.h" -#include "visual_database_display_set_filter_widget.h" -#include "visual_database_display_sub_type_filter_widget.h" +#include "../general/layout_containers/flow_widget.h" + +#include class VisualDatabaseDisplayWidget; +class DeckListModel; +class QComboBox; +class QGroupBox; +class QLabel; +class SettingsButtonWidget; +class VisualDatabaseDisplayFilterSaveLoadWidget; +class VisualDatabaseDisplayFormatLegalityFilterWidget; +class VisualDatabaseDisplayMainTypeFilterWidget; +class VisualDatabaseDisplayNameFilterWidget; +class VisualDatabaseDisplaySetFilterWidget; +class VisualDatabaseDisplaySubTypeFilterWidget; class VisualDatabaseDisplayFilterToolbarWidget : public FlowWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp index 633f07af7..a5725ff3f 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp @@ -1,14 +1,29 @@ #include "visual_database_display_format_legality_filter_widget.h" #include "../../../filters/filter_tree_model.h" +#include "../general/layout_containers/flow_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/filters/filter_card.h" #include "visual_database_display_filter_button.h" +#include +#include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include +#include #include #include +#include +#include VisualDatabaseDisplayFormatLegalityFilterWidget::VisualDatabaseDisplayFormatLegalityFilterWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.h index 1b1a1382e..e94593e67 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.h @@ -1,16 +1,17 @@ #ifndef COCKATRICE_VISUAL_DATABASE_DISPLAY_FORMAT_LEGALITY_FILTER_WIDGET_H #define COCKATRICE_VISUAL_DATABASE_DISPLAY_FORMAT_LEGALITY_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../general/layout_containers/flow_widget.h" - -#include #include -#include -#include -#include -#include +#include #include +#include + +class FilterTreeModel; +class FlowWidget; +class QLabel; +class QPushButton; +class QSpinBox; +class QVBoxLayout; class VisualDatabaseDisplayFormatLegalityFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp index c44489c1b..eff0fe10b 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp @@ -1,14 +1,27 @@ #include "visual_database_display_main_type_filter_widget.h" #include "../../../filters/filter_tree_model.h" +#include "../general/layout_containers/flow_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/filters/filter_card.h" #include "visual_database_display_filter_button.h" +#include +#include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include #include #include +#include VisualDatabaseDisplayMainTypeFilterWidget::VisualDatabaseDisplayMainTypeFilterWidget(QWidget *parent, FilterTreeModel *_filterModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.h index 6dec58319..b5a6f332c 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.h @@ -7,15 +7,17 @@ #ifndef VISUAL_DATABASE_DISPLAY_MAIN_TYPE_FILTER_WIDGET_H #define VISUAL_DATABASE_DISPLAY_MAIN_TYPE_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../general/layout_containers/flow_widget.h" - -#include #include -#include -#include -#include +#include #include +#include + +class FilterTreeModel; +class FlowWidget; +class QLabel; +class QPushButton; +class QSpinBox; +class QVBoxLayout; class VisualDatabaseDisplayMainTypeFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp index 3fa1a782a..d3e497b21 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp @@ -1,11 +1,26 @@ #include "visual_database_display_name_filter_widget.h" #include "../../../interface/widgets/dialogs/dlg_load_deck_from_clipboard.h" -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../deck_editor/deck_state_manager.h" +#include "../general/layout_containers/flow_widget.h" +#include "deck_list_model.h" +#include "filter_tree_model.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/filters/filter_card.h" +#include "libcockatrice/filters/filter_tree.h" #include "visual_database_display_filter_button.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include VisualDatabaseDisplayNameFilterWidget::VisualDatabaseDisplayNameFilterWidget(QWidget *parent, FilterTreeModel *_filterModel, diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.h index 0c10408ae..1629cb93b 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.h @@ -7,14 +7,17 @@ #ifndef VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H #define VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../general/layout_containers/flow_widget.h" - -#include #include -#include +#include #include +#include + +class DeckListModel; +class FilterTreeModel; +class FlowWidget; +class QLineEdit; +class QPushButton; +class QVBoxLayout; class VisualDatabaseDisplayNameFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp index 358c3ed88..3d76fb78a 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp @@ -2,15 +2,35 @@ #include "../../../client/settings/cache_settings.h" #include "../../../filters/filter_tree_model.h" +#include "../general/layout_containers/flow_widget.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/card/set/card_set_list.h" +#include "libcockatrice/filters/filter_card.h" +#include "libcockatrice/utility/macros.h" #include "visual_database_display_filter_button.h" +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include #include #include #include +#include VisualDatabaseDisplayRecentSetFilterSettingsWidget::VisualDatabaseDisplayRecentSetFilterSettingsWidget(QWidget *parent) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.h index bcc5e93c2..468e97e0d 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.h @@ -7,16 +7,19 @@ #ifndef VISUAL_DATABASE_DISPLAY_SET_FILTER_WIDGET_H #define VISUAL_DATABASE_DISPLAY_SET_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../general/layout_containers/flow_widget.h" - -#include -#include #include -#include -#include -#include +#include #include +#include + +class FilterTreeModel; +class FlowWidget; +class QCheckBox; +class QHBoxLayout; +class QLineEdit; +class QPushButton; +class QSpinBox; +class QVBoxLayout; class VisualDatabaseDisplayRecentSetFilterSettingsWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp index 6d4bcb58e..705bb8efa 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp @@ -1,15 +1,28 @@ #include "visual_database_display_sub_type_filter_widget.h" #include "../../../filters/filter_tree_model.h" +#include "../general/layout_containers/flow_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/filters/filter_card.h" #include "visual_database_display_filter_button.h" +#include +#include +#include #include #include +#include +#include #include +#include +#include #include #include +#include +#include #include #include +#include VisualDatabaseDisplaySubTypeFilterWidget::VisualDatabaseDisplaySubTypeFilterWidget(QWidget *parent, FilterTreeModel *_filterModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.h index d713c7f99..7929063fd 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.h @@ -7,14 +7,18 @@ #ifndef VISUAL_DATABASE_DISPLAY_SUB_TYPE_FILTER_WIDGET_H #define VISUAL_DATABASE_DISPLAY_SUB_TYPE_FILTER_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../general/layout_containers/flow_widget.h" - -#include #include -#include -#include +#include #include +#include + +class FilterTreeModel; +class FlowWidget; +class QLabel; +class QLineEdit; +class QPushButton; +class QSpinBox; +class QVBoxLayout; class VisualDatabaseDisplaySubTypeFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp index 6e0fee53f..599ac97b4 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp @@ -3,21 +3,52 @@ #include "../../../client/settings/cache_settings.h" #include "../../../filters/filter_tree_model.h" #include "../../../filters/syntax_help.h" +#include "../../key_signals.h" #include "../../pixel_map_generator.h" +#include "../cards/card_info_picture_widget.h" #include "../cards/card_info_picture_with_text_overlay_widget.h" +#include "../cards/card_size_widget.h" #include "../deck_editor/card_database_view.h" +#include "../general/layout_containers/flow_widget.h" #include "../utility/custom_line_edit.h" +#include "card_database_display_model.h" +#include "card_database_model.h" +#include "deck_list_model.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/filters/filter_card.h" +#include "libcockatrice/filters/filter_tree.h" #include "visual_database_display_color_filter_widget.h" -#include "visual_database_display_filter_save_load_widget.h" -#include "visual_database_display_main_type_filter_widget.h" -#include "visual_database_display_name_filter_widget.h" -#include "visual_database_display_set_filter_widget.h" -#include "visual_database_display_sub_type_filter_widget.h" +#include "visual_database_display_filter_toolbar_widget.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include #include @@ -25,6 +56,8 @@ #include #include +class QMouseEvent; + VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, CardDatabaseModel *database_model, DeckListModel *deckListModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h index d161ce362..9771e55c1 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.h @@ -7,25 +7,38 @@ #ifndef VISUAL_DATABASE_DISPLAY_WIDGET_H #define VISUAL_DATABASE_DISPLAY_WIDGET_H -#include "../../../filters/filter_tree_model.h" -#include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" -#include "../../key_signals.h" -#include "../cards/card_info_picture_with_text_overlay_widget.h" -#include "../cards/card_size_widget.h" -#include "../general/layout_containers/flow_widget.h" -#include "../general/layout_containers/overlap_control_widget.h" -#include "../utility/custom_line_edit.h" -#include "visual_database_display_color_filter_widget.h" -#include "visual_database_display_filter_toolbar_widget.h" +#include "libcockatrice/card/card_info.h" #include -#include -#include +#include +#include +#include #include #include -#include -#include -#include +#include +#include + +class CardDatabaseDisplayModel; +class CardDatabaseModel; +class CardDatabaseView; +class CardSizeWidget; +class DeckList; +class DeckListModel; +class ExactCard; +class FilterTreeModel; +class FlowWidget; +class OverlapControlWidget; +class QLabel; +class QModelIndex; +class QPushButton; +class QScrollArea; +class QTimer; +class QToolButton; +class QVBoxLayout; +class SearchLineEdit; +class VisualDatabaseDisplayColorFilterWidget; +class VisualDatabaseDisplayFilterToolbarWidget; +template class QList; inline Q_LOGGING_CATEGORY(VisualDatabaseDisplayLog, "visual_database_display"); diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp index bb5b333d9..0f6ac51ec 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp @@ -2,13 +2,18 @@ #include "../../../client/settings/cache_settings.h" +#include #include #include #include #include #include +#include #include +#include +#include #include +#include FilterDisplayWidget::FilterDisplayWidget(QWidget *parent, const QString &filename, FilterTreeModel *_filterModel) : QWidget(parent), filterFilename(filename), filterModel(_filterModel) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.h index 5fe29fa2d..6d051bcf7 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_filter_display_widget.h @@ -7,12 +7,12 @@ #ifndef VISUAL_DATABASE_FILTER_DISPLAY_WIDGET_H #define VISUAL_DATABASE_FILTER_DISPLAY_WIDGET_H -#include -#include #include #include +#include class FilterTreeModel; +class QPushButton; class FilterDisplayWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp index 28abe480e..25ba41aa9 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp @@ -1,9 +1,27 @@ #include "visual_deck_display_options_widget.h" #include "../../pixel_map_generator.h" +#include "../deck_editor/deck_editor_deck_dock_widget.h" +#include "../quick_settings/settings_button_widget.h" #include "../tabs/visual_deck_editor/tab_deck_editor_visual.h" +#include "../utility/compact_push_button.h" +#include "deck_list_model.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include VisualDeckDisplayOptionsWidget::VisualDeckDisplayOptionsWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h index bc11884df..96600c587 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h @@ -3,12 +3,18 @@ #include "visual_deck_editor_widget.h" -#include -#include -#include -#include -#include +#include +#include +#include #include +#include + +class CompactPushButton; +class QComboBox; +class QHBoxLayout; +class QLabel; +class QListWidget; +class SettingsButtonWidget; /** * @class VisualDeckDisplayOptionsWidget diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.cpp index da4fe09e5..76c3d0908 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.cpp @@ -1,5 +1,9 @@ #include "visual_deck_editor_placeholder_widget.h" +#include +#include +#include + VisualDeckEditorPlaceholderWidget::VisualDeckEditorPlaceholderWidget(QWidget *parent) : QWidget(parent) { mainLayout = new QVBoxLayout(this); diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.h index de2362a81..84a3142d8 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.h @@ -1,9 +1,11 @@ #ifndef COCKATRICE_VISUAL_DECK_EDITOR_PLACEHOLDER_WIDGET_H #define COCKATRICE_VISUAL_DECK_EDITOR_PLACEHOLDER_WIDGET_H -#include -#include #include +#include + +class QLabel; +class QVBoxLayout; class VisualDeckEditorPlaceholderWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp index cee268228..1554dceb8 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp @@ -1,16 +1,37 @@ #include "visual_deck_editor_sample_hand_widget.h" #include "../../../client/settings/cache_settings.h" -#include "../../deck_loader/deck_loader.h" #include "../cards/card_info_picture_widget.h" +#include "../cards/card_size_widget.h" #include "../deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.h" -#include "../deck_analytics/deck_list_statistics_analyzer.h" +#include "../general/layout_containers/flow_widget.h" +#include "deck_list_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include +class DeckListStatisticsAnalyzer; + VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *parent, DeckListModel *_deckListModel, DeckListStatisticsAnalyzer *_statsAnalyzer) diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h index c6c07dd55..16f343b75 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h @@ -7,16 +7,22 @@ #ifndef VISUAL_DECK_EDITOR_SAMPLE_HAND_WIDGET_H #define VISUAL_DECK_EDITOR_SAMPLE_HAND_WIDGET_H -#include "../cards/card_size_widget.h" -#include "../deck_analytics/deck_list_statistics_analyzer.h" -#include "../general/layout_containers/flow_widget.h" +#include "libcockatrice/card/printing/exact_card.h" -#include -#include +#include #include -#include +#include class DrawProbabilityWidget; +class CardSizeWidget; +class DeckListModel; +class DeckListStatisticsAnalyzer; +class FlowWidget; +class QHBoxLayout; +class QPushButton; +class QSpinBox; +class QVBoxLayout; + class VisualDeckEditorSampleHandWidget : public QWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp index 60e354d6e..74b940586 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp @@ -1,33 +1,48 @@ #include "visual_deck_editor_widget.h" #include "../../../client/settings/cache_settings.h" -#include "../../../main.h" -#include "../../deck_loader/deck_loader.h" -#include "../../layouts/overlap_layout.h" #include "../../pixel_map_generator.h" -#include "../cards/card_info_picture_with_text_overlay_widget.h" +#include "../cards/card_size_widget.h" #include "../cards/deck_card_zone_display_widget.h" #include "../general/layout_containers/flow_widget.h" -#include "../tabs/visual_deck_editor/tab_deck_editor_visual.h" -#include "../tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h" #include "../utility/compact_push_button.h" #include "../utility/completer_utils.h" +#include "card/card_completer_proxy_model.h" +#include "card_database_display_model.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" #include "visual_deck_display_options_widget.h" +#include "visual_deck_editor_placeholder_widget.h" -#include +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include #include #include #include #include -#include +#include VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_deckListModel, diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h index cc045fca2..0b8ff19fb 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h @@ -7,26 +7,35 @@ #ifndef VISUAL_DECK_EDITOR_H #define VISUAL_DECK_EDITOR_H -#include "../cards/card_info_picture_with_text_overlay_widget.h" -#include "../cards/card_size_widget.h" -#include "../general/layout_containers/overlap_control_widget.h" -#include "../quick_settings/settings_button_widget.h" -#include "../utility/compact_push_button.h" -#include "visual_deck_editor_placeholder_widget.h" - -#include -#include -#include +#include +#include +#include +#include +#include #include -#include -#include -#include -#include -#include -#include +#include class VisualDeckDisplayOptionsWidget; class DeckCardZoneDisplayWidget; +class CardCompleterProxyModel; +class CardDatabaseDisplayModel; +class CardDatabaseModel; +class CardSizeWidget; +class CompactPushButton; +class DeckList; +class DeckListModel; +class ExactCard; +class FlowWidget; +class QCompleter; +class QHBoxLayout; +class QItemSelection; +class QItemSelectionModel; +class QLineEdit; +class QModelIndex; +class QScrollArea; +class QVBoxLayout; +class VisualDeckEditorPlaceholderWidget; + enum class DisplayType { Flat, diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp index d1a780c38..1ac4c856c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp @@ -1,8 +1,13 @@ #include "deck_preview_color_identity_filter_widget.h" #include "../../cards/additional_info/mana_symbol_widget.h" +#include "../visual_deck_storage_sort_filter_proxy_model.h" +#include +#include #include +#include +#include DeckPreviewColorIdentityFilterWidget::DeckPreviewColorIdentityFilterWidget(QWidget *parent) : QWidget(parent), layout(new QHBoxLayout(this)) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h index d54984bcf..e0c90034c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h @@ -8,11 +8,14 @@ #include "../visual_deck_storage_sort_filter_proxy_model.h" -#include +#include #include -#include #include #include +#include + +class QHBoxLayout; +class QPushButton; class DeckPreviewColorIdentityFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp index 41d87ccb1..dc619e9fa 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp @@ -1,15 +1,23 @@ #include "deck_preview_deck_tags_display_widget.h" #include "../../../../client/settings/cache_settings.h" +#include "../../../deck_loader/deck_file_format.h" #include "../../../deck_loader/deck_loader.h" +#include "../../../deck_loader/loaded_deck.h" #include "../../general/layout_containers/flow_widget.h" #include "deck_preview_tag_addition_widget.h" #include "deck_preview_tag_dialog.h" #include "deck_preview_tag_display_widget.h" +#include "libcockatrice/deck_list/deck_list.h" +#include +#include #include #include +#include #include +#include +#include DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, const QStringList &_tags) : QWidget(_parent), currentTags(_tags) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h index 64bd5aa1a..a12f6ec3c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h @@ -6,9 +6,12 @@ #ifndef DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H #define DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H +#include +#include #include #include #include +#include class FlowWidget; diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp index fdf4b2a28..82ed6191c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp @@ -1,12 +1,19 @@ #include "deck_preview_tag_addition_widget.h" -#include "../../../../client/settings/cache_settings.h" -#include "../../../../interface/widgets/tabs/abstract_tab_deck_editor.h" - +#include +#include +#include +#include #include #include #include #include +#include +#include +#include +#include +#include +#include #include DeckPreviewTagAdditionWidget::DeckPreviewTagAdditionWidget(QWidget *_parent, QString _tagName) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.h index 7a3a735a2..30ce46249 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.h @@ -7,7 +7,9 @@ #ifndef DECK_PREVIEW_TAG_ADDITION_WIDGET_H #define DECK_PREVIEW_TAG_ADDITION_WIDGET_H -#include "deck_preview_deck_tags_display_widget.h" +#include +#include +#include class DeckPreviewTagAdditionWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp index f27d11d36..2a6a42e9d 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp @@ -8,10 +8,17 @@ #include #include #include +#include +#include #include +#include #include +#include #include +#include +#include #include +#include DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const QStringList &_activeTags, diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h index 4d9040af4..80d5560a0 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.h @@ -9,10 +9,18 @@ #define DECK_PREVIEW_TAG_DIALOG_H #include -#include -#include -#include -#include +#include +#include +#include +#include + +class QHBoxLayout; +class QLabel; +class QLineEdit; +class QListWidget; +class QPushButton; +class QVBoxLayout; +class QWidget; class DeckPreviewTagDialog : public QDialog { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.cpp index a7fef5031..e62570241 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.cpp @@ -1,9 +1,19 @@ #include "deck_preview_tag_display_widget.h" +#include +#include +#include +#include #include #include #include #include +#include +#include +#include +#include +#include +#include DeckPreviewTagDisplayWidget::DeckPreviewTagDisplayWidget(QWidget *parent, const QString &_tagName) : QWidget(parent), tagName(_tagName), state(TagState::NotSelected) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.h index df2a6b404..d3f5e7326 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.h @@ -7,10 +7,12 @@ #ifndef DECK_PREVIEW_TAG_DISPLAY_WIDGET_H #define DECK_PREVIEW_TAG_DISPLAY_WIDGET_H -#include -#include #include #include +#include + +class QLabel; +class QPushButton; enum class TagState { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.cpp index d9ea9fc30..7796f893b 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.cpp @@ -1,5 +1,8 @@ #include "deck_preview_tag_item_widget.h" +#include +#include + DeckPreviewTagItemWidget::DeckPreviewTagItemWidget(const QString &tagName, bool isChecked, QWidget *parent) : QWidget(parent), checkBox_(new QCheckBox(this)) { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.h index a3301799a..a09eb7501 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.h @@ -7,9 +7,11 @@ #ifndef DECK_PREVIEW_TAG_ITEM_WIDGET_H #define DECK_PREVIEW_TAG_ITEM_WIDGET_H -#include -#include +#include #include +#include + +class QCheckBox; class DeckPreviewTagItemWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index 53fe32314..220c55788 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -3,26 +3,51 @@ #include "../../../../client/settings/cache_settings.h" #include "../../../../interface/widgets/dialogs/dlg_convert_deck_to_cod_format.h" #include "../../../deck_loader/deck_loader.h" +#include "../../../deck_loader/loaded_deck.h" #include "../../cards/additional_info/color_identity_widget.h" #include "../../cards/deck_preview_card_picture_widget.h" +#include "../visual_deck_storage_model.h" #include "../visual_deck_storage_quick_settings_widget.h" #include "../visual_deck_storage_tag_filter_widget.h" #include "../visual_deck_storage_widget.h" #include "deck_preview_deck_tags_display_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" +#include "libcockatrice/utility/card_ref.h" +#include +#include +#include +#include #include #include #include #include +#include #include #include +#include #include +#include +#include #include +#include +#include +#include #include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include DeckPreviewWidget::DeckPreviewWidget(QWidget *_parent, VisualDeckStorageWidget *_visualDeckStorageWidget, diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h index f4909eda8..cdeed87c7 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h @@ -6,17 +6,18 @@ #ifndef DECK_PREVIEW_WIDGET_H #define DECK_PREVIEW_WIDGET_H -#include "../../cards/deck_preview_card_picture_widget.h" -#include "../visual_deck_storage_model.h" - #include +#include #include #include #include -#include +#include +#include +#include +#include #include +#include -class QEnterEvent; class QFrame; class QLabel; class QMenu; @@ -26,6 +27,8 @@ class DeckPreviewCardPictureWidget; class DeckPreviewDeckTagsDisplayWidget; class VisualDeckStorageModel; class VisualDeckStorageWidget; +class QVBoxLayout; +struct LoadedDeck; class DeckPreviewWidget final : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.cpp index b49d6f9f4..361747423 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.cpp @@ -4,15 +4,19 @@ #include "../../cards/additional_info/color_identity_widget.h" #include "../../cards/deck_preview_card_picture_widget.h" #include "../../general/layout_containers/flow_widget.h" +#include "../remote_public_decks_model.h" #include "deck_preview_tag_display_widget.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/utility/card_ref.h" +#include #include #include -#include -#include #include #include #include +#include PublicDeckPreviewWidget::PublicDeckPreviewWidget(QWidget *parent, const RemotePublicDecksModel::DeckEntry &entry) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.h index a0e5dd43a..103120c7f 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.h @@ -9,16 +9,15 @@ #include "../remote_public_decks_model.h" #include +#include #include #include +#include class ColorIdentityWidget; class DeckPreviewCardPictureWidget; class FlowWidget; -class QKeyEvent; class QLabel; -class QMouseEvent; -class QResizeEvent; /** * @brief A preview tile for a public deck published by another user. diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.cpp index a1cabd729..9b8daf87c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.cpp @@ -3,7 +3,10 @@ #include "../../../client/settings/cache_settings.h" #include +#include +#include #include +#include #include #include #include @@ -11,6 +14,9 @@ #include #include #include +#include + +class QObject; RemotePublicDecksModel::RemotePublicDecksModel(AbstractClient *_client, QObject *parent) : QAbstractListModel(parent), client(_client) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.h b/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.h index eeb606442..cb1f786e4 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/remote_public_decks_model.h @@ -9,10 +9,15 @@ #include "visual_deck_storage_sort_filter_proxy_model.h" #include +#include #include #include +#include #include +#include #include +#include +#include class AbstractClient; class CommandContainer; @@ -20,6 +25,7 @@ class QTimer; class Response; class ServerInfo_DeckStorage_Folder; class ServerInfo_DeckStorage_TreeItem; +class QObject; /** * @brief Flat, read-only list of the public decks published by another user. diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp index 53f21d1a1..44b7a1a06 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp @@ -2,6 +2,7 @@ #include "../cards/card_info_picture_widget.h" #include "../cards/card_size_widget.h" +#include "../cards/deck_preview_card_picture_widget.h" #include "../general/display/banner_widget.h" #include "../general/layout_containers/flow_widget.h" #include "deck_preview/deck_preview_widget.h" @@ -10,10 +11,20 @@ #include "visual_deck_storage_sort_filter_proxy_model.h" #include "visual_deck_storage_widget.h" +#include +#include +#include #include +#include +#include +#include +#include #include +#include #include #include +#include +#include VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget( QWidget *parent, diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h index 5a81457b0..998619c0b 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h @@ -17,9 +17,12 @@ #define VISUAL_DECK_STORAGE_FOLDER_DISPLAY_WIDGET_H #include +#include #include #include +#include #include +#include class BannerWidget; class DeckPreviewWidget; diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.cpp index daca55fc8..e84631e52 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.cpp @@ -1,19 +1,32 @@ #include "visual_deck_storage_model.h" +#include "../../deck_loader/deck_file_format.h" #include "../../deck_loader/deck_loader.h" +#include "../../deck_loader/loaded_deck.h" #include "../cards/additional_info/deck_color_identity.h" +#include "libcockatrice/deck_list/deck_list.h" +#include #include #include #include #include #include #include +#include +#include #include +#include +#include #include +#include #include +#include +#include #include +class QObject; + namespace { /** diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.h index 330205356..57eaebacf 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_model.h @@ -14,14 +14,20 @@ #define VISUAL_DECK_STORAGE_MODEL_H #include "../../deck_loader/loaded_deck.h" +#include "libcockatrice/utility/card_ref.h" #include #include #include #include +#include +#include #include -#include -#include +#include +#include +#include + +class QObject; namespace VisualDeckStorageRoles { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp index c19ac0fec..9bb6e0fae 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp @@ -2,14 +2,23 @@ #include "../../../client/settings/cache_settings.h" #include "../cards/card_size_widget.h" -#include "visual_deck_storage_widget.h" +#include "../quick_settings/settings_button_widget.h" +#include "libcockatrice/utility/macros.h" #include #include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidget *parent) : SettingsButtonWidget(parent) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h index a85e9e654..7bce34d8c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h @@ -11,11 +11,14 @@ #include "../quick_settings/settings_button_widget.h" +#include + class CardSizeWidget; class QLabel; class QSpinBox; class QCheckBox; class QComboBox; +class QWidget; class VisualDeckStorageQuickSettingsWidget : public SettingsButtonWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp index 406527893..2c03666c1 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp @@ -4,6 +4,10 @@ #include "../../pixel_map_generator.h" #include +#include +#include +#include +#include #include /** diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.h index 7769ea911..87a8dc9f8 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.h @@ -6,11 +6,13 @@ #ifndef VISUAL_DECK_STORAGE_SEARCH_WIDGET_H #define VISUAL_DECK_STORAGE_SEARCH_WIDGET_H -#include -#include +#include #include +#include class QTimer; +class QHBoxLayout; +class QLineEdit; class VisualDeckStorageSearchWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.cpp index 0ad6ebcb2..abe3327af 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.cpp @@ -1,10 +1,20 @@ #include "visual_deck_storage_sort_filter_proxy_model.h" #include "../../../client/settings/cache_settings.h" +#include "../../deck_loader/loaded_deck.h" #include "../../filters/deck_filter_string.h" +#include "visual_deck_storage_model.h" +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.h index a6c40a2d7..51732adc8 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.h @@ -15,11 +15,15 @@ #ifndef VISUAL_DECK_STORAGE_SORT_FILTER_PROXY_MODEL_H #define VISUAL_DECK_STORAGE_SORT_FILTER_PROXY_MODEL_H -#include "visual_deck_storage_model.h" - +#include +#include #include #include #include +#include + +class QObject; +class VisualDeckStorageModel; class VisualDeckStorageSortFilterProxyModel : public QSortFilterProxyModel { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp index 6289a4941..f798a72a9 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp @@ -3,6 +3,9 @@ #include "../../../client/settings/cache_settings.h" #include "visual_deck_storage_widget.h" +#include +#include +#include #include VisualDeckStorageSortWidget::VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent) : QWidget(parent) diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h index 633924d84..df3f39eb5 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h @@ -8,11 +8,13 @@ #include "visual_deck_storage_sort_filter_proxy_model.h" -#include -#include #include +#include class VisualDeckStorageWidget; +class QComboBox; +class QHBoxLayout; + class VisualDeckStorageSortWidget : public QWidget { Q_OBJECT diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp index 6f954b01b..d6b7aedbb 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp @@ -4,6 +4,13 @@ #include "deck_preview/deck_preview_tag_display_widget.h" #include +#include +#include +#include +#include +#include +#include +#include VisualDeckStorageTagFilterWidget::VisualDeckStorageTagFilterWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h index 5e3cb398c..13a27c10a 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h @@ -6,13 +6,16 @@ #ifndef VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H #define VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H -#include +#include #include #include #include +#include class DeckPreviewTagDisplayWidget; class FlowWidget; +class QString; +template class QSet; class VisualDeckStorageTagFilterWidget : public QWidget { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index c7218f195..51e9c70e7 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -2,22 +2,38 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" -#include "../quick_settings/settings_button_widget.h" #include "deck_preview/deck_preview_color_identity_filter_widget.h" #include "deck_preview/deck_preview_widget.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" #include "visual_deck_storage_folder_display_widget.h" +#include "visual_deck_storage_model.h" #include "visual_deck_storage_quick_settings_widget.h" #include "visual_deck_storage_search_widget.h" +#include "visual_deck_storage_sort_filter_proxy_model.h" #include "visual_deck_storage_sort_widget.h" #include "visual_deck_storage_tag_filter_widget.h" +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include +#include +#include #include #include #include #include +#include VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(parent) { diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.h index dfb715bea..b512dd87c 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -6,18 +6,13 @@ #ifndef VISUAL_DECK_STORAGE_WIDGET_H #define VISUAL_DECK_STORAGE_WIDGET_H -#include "visual_deck_storage_model.h" -#include "visual_deck_storage_sort_filter_proxy_model.h" - -#include -#include -#include -#include +#include +#include +#include #include +#include class QLabel; -class QResizeEvent; -class QShowEvent; class QTimer; class DeckPreviewColorIdentityFilterWidget; class VisualDeckStorageFolderDisplayWidget; @@ -25,6 +20,13 @@ class VisualDeckStorageQuickSettingsWidget; class VisualDeckStorageSearchWidget; class VisualDeckStorageSortWidget; class VisualDeckStorageTagFilterWidget; +class QHBoxLayout; +class QScrollArea; +class QToolButton; +class QVBoxLayout; +class VisualDeckStorageModel; +class VisualDeckStorageSortFilterProxyModel; +struct LoadedDeck; class VisualDeckStorageWidget final : public QWidget { diff --git a/cockatrice/src/interface/window_main.cpp b/cockatrice/src/interface/window_main.cpp index 77cc85130..189585d84 100644 --- a/cockatrice/src/interface/window_main.cpp +++ b/cockatrice/src/interface/window_main.cpp @@ -21,7 +21,6 @@ #include "../client/latency_status_widget.h" #include "../client/network/update/client/client_update_checker.h" -#include "../client/network/update/client/release_channel.h" #include "../client/settings/cache_settings.h" #include "../client/settings/shortcuts_settings.h" #include "../interface/widgets/dialogs/dlg_edit_tokens.h" @@ -34,50 +33,66 @@ #include "../interface/widgets/dialogs/dlg_view_log.h" #include "../interface/widgets/onboarding/first_run_wizard.h" #include "../interface/widgets/settings_page/general_settings_page.h" -#include "../interface/widgets/tabs/tab_game.h" #include "../interface/widgets/tabs/tab_server.h" #include "../interface/widgets/tabs/tab_supervisor.h" #include "../main.h" +#include "abstract_client.h" +#include "card_database_update/card_database_update_status_bar.h" +#include "card_database_update/card_update_progress.h" #include "intents/contexts/context_connect_to_server.h" #include "intents/contexts/context_join_room.h" +#include "intents/intent.h" #include "intents/intent_connect_to_server.h" #include "intents/intent_login.h" #include "intents/intent_open_server_room_by_name.h" #include "intents/url_parser.h" +#include "latency_tracker.h" #include "logger.h" #include "pixel_map_generator.h" #include "version_string.h" #include "widgets/dialogs/dlg_connect.h" #include "widgets/server/handle_public_servers.h" +#include "widgets/settings_page/abstract_settings_page.h" #include "widgets/tabs/api/commander_spellbook/handle_commander_brackets.h" -#include "widgets/utility/get_text_with_max.h" #include #include #include #include #include +#include #include +#include +#include #include #include -#include +#include +#include +#include +#include #include #include #include +#include +#include +#include #include +#include +#include #include +#include #include -#include #include -#include -#include -#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include #include #include #include @@ -91,6 +106,14 @@ #include #include #include +#include +#include +#include +#include +#include +#include + +class LocalServerInterface; #define GITHUB_PAGES_URL "https://cockatrice.github.io" #define GITHUB_CONTRIBUTORS_URL "https://github.com/Cockatrice/Cockatrice/graphs/contributors" @@ -555,6 +578,13 @@ MainWindow::MainWindow(QWidget *parent) connect(connectionController, &ConnectionController::pingStatsUpdated, latencyStatus, &LatencyStatusWidget::updateData); + cardUpdateStatusBar = new CardDatabaseUpdateStatusBar(this); + statusBar()->addPermanentWidget(cardUpdateStatusBar); + connect(this, &MainWindow::cardDatabaseUpdateProgress, cardUpdateStatusBar, + &CardDatabaseUpdateStatusBar::updateProgress); + connect(this, &MainWindow::cardDatabaseUpdateFinished, cardUpdateStatusBar, + &CardDatabaseUpdateStatusBar::updateFinished); + connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, &MainWindow::refreshShortcuts); refreshShortcuts(); @@ -877,10 +907,15 @@ void MainWindow::closeEvent(QCloseEvent *event) bClosingDown = true; if (cardUpdateProcess && cardUpdateProcess->state() != QProcess::NotRunning) { - if (QMessageBox::question(this, tr("Are you sure?"), - tr("A card database update is still running. Quitting now will cancel it.\n" - "Are you sure you want to quit?"), - QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) { + const QString runningFor = cardUpdateStatusBar ? cardUpdateStatusBar->statusText() : QString(); + const QString message = runningFor.isEmpty() + ? tr("A card database update is still running. Quitting now will cancel it.\n" + "Are you sure you want to quit?") + : tr("A card database update is still running: %1.\nQuitting now will cancel it.\n" + "Are you sure you want to quit?") + .arg(runningFor); + if (QMessageBox::question(this, tr("Are you sure?"), message, QMessageBox::Yes | QMessageBox::No, + QMessageBox::No) == QMessageBox::No) { event->ignore(); bClosingDown = false; return; @@ -1097,16 +1132,28 @@ void MainWindow::actCheckCardUpdatesBackground() void MainWindow::createCardUpdateProcess(bool background) { if (cardUpdateProcess) { - QMessageBox::information(this, tr("Information"), tr("A card database update is already running.")); + qCDebug(CardDatabaseUpdateLog) << "A card database update is already running; asking it to come to the front"; + if (requestCardUpdateRaise()) { + return; + } + if (background) { + // A hidden run has nothing to raise: keep the user informed without blocking. + announceCardUpdateRunning(); + return; + } + QMessageBox::information(this, tr("Information"), + tr("The card database updater is already open.\n" + "Look for the Oracle window - it may be behind this one.")); return; } cardUpdateProcess = new QProcess(this); connect(cardUpdateProcess, &QProcess::errorOccurred, this, &MainWindow::cardUpdateError); - connect(cardUpdateProcess, qOverload(&QProcess::finished), this, &MainWindow::cardUpdateFinished); + connect(cardUpdateProcess, &QProcess::readyReadStandardOutput, this, &MainWindow::cardUpdateProgressOutput); + connect(cardUpdateProcess, &QProcess::readyReadStandardError, this, &MainWindow::cardUpdateStandardError); // full "run the update" command; leave empty if not present QString updaterCmd; @@ -1151,6 +1198,8 @@ void MainWindow::createCardUpdateProcess(bool background) } if (updaterCmd.isEmpty()) { + qCWarning(CardDatabaseUpdateLog) << "Unable to locate the card database updater; looked for" + << dir.absoluteFilePath(binaryName); QMessageBox::warning(this, tr("Error"), tr("Unable to run the card database updater: ") + dir.absoluteFilePath(binaryName)); exitCardDatabaseUpdate(); @@ -1158,13 +1207,24 @@ void MainWindow::createCardUpdateProcess(bool background) return; } + cardUpdateOutputBuffer.clear(); + cardUpdateErrorOutput.clear(); + cardUpdateErrorPartial.clear(); + cardUpdateLoggedStage = CardUpdateStage::Unknown; + cardUpdateProgressLogTimer.start(); + + qCInfo(CardDatabaseUpdateLog) << "Starting the card database updater" << updaterCmd << "background:" << background; + cardUpdateStatusBar->updateStarted(); + if (!background) { cardUpdateProcess->start(updaterCmd, QStringList()); } else { - cardUpdateOutputBuffer.clear(); - connect(cardUpdateProcess, &QProcess::readyReadStandardOutput, this, &MainWindow::cardUpdateProgressOutput); cardUpdateProcess->start(updaterCmd, QStringList("-b")); statusBar()->showMessage(tr("Card database update running.")); + if (trayIcon && SettingsCache::instance().updates().getCardDatabaseUpdateTrayNotification()) { + trayIcon->showMessage(tr("Card database update started"), + tr("Cockatrice is updating the card database in the background.")); + } } } @@ -1179,24 +1239,43 @@ void MainWindow::cardUpdateProgressOutput() if (newline < 0) { break; } - const QByteArray line = cardUpdateOutputBuffer.left(newline).trimmed(); + const QByteArray line = cardUpdateOutputBuffer.left(newline); cardUpdateOutputBuffer.remove(0, newline + 1); - // Protocol emitted by `oracle -b`: "PROGRESS " - if (!line.startsWith("PROGRESS ")) { + // Protocol emitted by `oracle`: "PROGRESS " + const std::optional progress = CardUpdateProgress::fromProtocolLine(line); + if (!progress.has_value()) { continue; } - const QList parts = line.split(' '); - if (parts.size() != 4) { - continue; + // Log stage changes and, while a stage runs, one line per second at most, so the + // debug log shows liveness without flooding it. + if (progress->stage != cardUpdateLoggedStage || cardUpdateProgressLogTimer.elapsed() >= 1000) { + qCDebug(CardDatabaseUpdateLog) + << "Card database update" << progress->stageToken() << progress->done << "/" << progress->total; + cardUpdateLoggedStage = progress->stage; + cardUpdateProgressLogTimer.restart(); } - bool doneOk = false; - bool totalOk = false; - const qint64 done = parts.at(2).toLongLong(&doneOk); - const qint64 total = parts.at(3).toLongLong(&totalOk); - if (!doneOk || !totalOk || done < 0 || total < 0) { - continue; + emit cardDatabaseUpdateProgress(progress.value()); + } +} + +void MainWindow::cardUpdateStandardError() +{ + if (!cardUpdateProcess) { + return; + } + const QByteArray chunk = cardUpdateProcess->readAllStandardError(); + if (chunk.isEmpty()) { + return; + } + cardUpdateErrorOutput.append(chunk); + cardUpdateErrorPartial.append(chunk); + int newline; + while ((newline = cardUpdateErrorPartial.indexOf('\n')) >= 0) { + const QByteArray line = cardUpdateErrorPartial.left(newline).trimmed(); + cardUpdateErrorPartial.remove(0, newline + 1); + if (!line.isEmpty()) { + qCWarning(CardDatabaseUpdateLog) << "Card database updater:" << line; } - emit cardDatabaseUpdateProgress(QString::fromLatin1(parts.at(1)), done, total); } } @@ -1221,7 +1300,6 @@ void MainWindow::cardUpdateError(QProcess::ProcessError err) break; case QProcess::Crashed: error = tr("The process crashed some time after starting successfully."); - error += "\n\nError output:\n" + cardUpdateProcess->readAllStandardError(); break; case QProcess::Timedout: error = tr("Timed out. The process took too long to respond. The last waitFor...() function timed out."); @@ -1240,6 +1318,12 @@ void MainWindow::cardUpdateError(QProcess::ProcessError err) break; } + if (!cardUpdateErrorOutput.isEmpty()) { + error += "\n\n" + tr("Error output:") + "\n" + QString::fromUtf8(cardUpdateErrorOutput); + cardUpdateErrorOutput.clear(); + } + + qCWarning(CardDatabaseUpdateLog) << "The card database updater exited with an error:" << error; exitCardDatabaseUpdate(); QMessageBox::warning(this, tr("Error"), tr("The card database updater exited with an error:\n%1").arg(error)); emit cardDatabaseUpdateFinished(false); @@ -1247,16 +1331,56 @@ void MainWindow::cardUpdateError(QProcess::ProcessError err) void MainWindow::cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus) { + if (!cardUpdateProcess) { + return; + } cardUpdateProgressOutput(); // drain any progress lines not yet parsed const bool success = (exitStatus == QProcess::NormalExit) && (exitCode == 0); if (exitStatus == QProcess::NormalExit) { SettingsCache::instance().updates().setLastCardUpdateCheck(QDateTime::currentDateTime().date()); } + qCInfo(CardDatabaseUpdateLog) << "The card database updater finished with exit code" << exitCode << "exit status" + << static_cast(exitStatus) << "success:" << success; exitCardDatabaseUpdate(); + notifyCardUpdateFinishedFromTray(success); emit cardDatabaseUpdateFinished(success); } +bool MainWindow::requestCardUpdateRaise() +{ + const QString serverName = scopedLocalServerName(QStringLiteral("CockatriceOracleRaise")); + QLocalSocket socket; + socket.connectToServer(serverName); + if (!socket.waitForConnected(250)) { + return false; + } + socket.write("RAISE\n"); + const bool acked = socket.waitForBytesWritten(250); + socket.disconnectFromServer(); + return acked; +} + +void MainWindow::announceCardUpdateRunning() +{ + if (SettingsCache::instance().userInterface().getShowStatusBar()) { + statusBar()->showMessage(tr("Card database update running.")); + } else if (trayIcon && SettingsCache::instance().updates().getCardDatabaseUpdateTrayNotification()) { + trayIcon->showMessage(tr("Card database update running"), + tr("Cockatrice is updating the card database in the background.")); + } +} + +void MainWindow::notifyCardUpdateFinishedFromTray(bool success) +{ + if (SettingsCache::instance().userInterface().getShowStatusBar() || !trayIcon || + !SettingsCache::instance().updates().getCardDatabaseUpdateTrayNotification()) { + return; + } + trayIcon->showMessage(tr("Card database update finished"), + success ? tr("The card database is up to date.") : tr("The card database update failed.")); +} + void MainWindow::actCheckServerUpdates() { auto hps = new HandlePublicServers(this); diff --git a/cockatrice/src/interface/window_main.h b/cockatrice/src/interface/window_main.h index 1c4dde300..bf68ed72a 100644 --- a/cockatrice/src/interface/window_main.h +++ b/cockatrice/src/interface/window_main.h @@ -26,35 +26,42 @@ #define WINDOW_H #include "../client/lag_monitor.h" +#include "../client/network/update/client/release_channel.h" +#include "card_database_update/card_update_progress.h" #include "connection_controller/remote_connection_controller.h" -#include "widgets/dialogs/dlg_local_game_options.h" +#include +#include +#include #include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include -#include +#include + +class QAction; +class QWidget; +struct LocalGameOptions; inline Q_LOGGING_CATEGORY(WindowMainLog, "window_main"); inline Q_LOGGING_CATEGORY(WindowMainStartupLog, "window_main.startup"); inline Q_LOGGING_CATEGORY(WindowMainStartupVersionLog, "window_main.startup.version"); inline Q_LOGGING_CATEGORY(WindowMainStartupShortcutsLog, "window_main.startup.shortcuts"); inline Q_LOGGING_CATEGORY(WindowMainStartupAutoconnectLog, "window_main.startup.autoconnect"); +inline Q_LOGGING_CATEGORY(CardDatabaseUpdateLog, "card_database.update"); -class Release; -class DlgConnect; class DlgViewLog; class GameReplay; -class HandlePublicServers; -class LocalClient; class LocalServer; -class QLabel; class LatencyStatusWidget; -class QThread; +class CardDatabaseUpdateStatusBar; class RemoteClient; -class ServerInfo_User; class TabSupervisor; class WndSets; class DlgTipOfTheDay; @@ -65,13 +72,13 @@ class MainWindow : public QMainWindow { Q_OBJECT signals: - /** @brief Emitted after the background card-database update subprocess exits. */ + /** @brief Emitted after the card-database update subprocess exits. */ void cardDatabaseUpdateFinished(bool success); - /** @brief Emitted while the background card-database update subprocess runs. - * @p stage is one of "download", "scan" or "import"; @p done/@p total - * are byte counts for the first two stages and set indices for "import". */ - void cardDatabaseUpdateProgress(const QString &stage, qint64 done, qint64 total); + /** @brief Emitted while the card-database update subprocess runs. + * @p progress.done/@p progress.total are byte counts for the first two stages + * and set indices for "import". */ + void cardDatabaseUpdateProgress(const CardUpdateProgress &progress); public slots: void actCheckCardUpdates(); @@ -103,6 +110,7 @@ private slots: void cardUpdateError(QProcess::ProcessError err); void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus); void cardUpdateProgressOutput(); + void cardUpdateStandardError(); void refreshShortcuts(); void cardDatabaseLoadingFailed(); void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames); @@ -147,6 +155,15 @@ private: } void createCardUpdateProcess(bool background = false); void exitCardDatabaseUpdate(); + /** + * @brief Tries to bring the open card database updater window to the front. + * @return true when the updater acknowledged the request + */ + bool requestCardUpdateRaise(); + /** @brief Tells the user an update is running without blocking, honoring a hidden status bar. */ + void announceCardUpdateRunning(); + /** @brief Posts a tray notification when the status bar cannot show progress. */ + void notifyCardUpdateFinishedFromTray(bool success); void startLocalGame(const LocalGameOptions &options); @@ -173,6 +190,11 @@ private: bool firstRunWizardActive = false; QProcess *cardUpdateProcess; QByteArray cardUpdateOutputBuffer; + QByteArray cardUpdateErrorOutput; ///< diagnostic output collected from the updater's stderr + QByteArray cardUpdateErrorPartial; ///< incomplete trailing stderr line, kept for line-based logging + CardUpdateStage cardUpdateLoggedStage = CardUpdateStage::Unknown; ///< stage of the last logged progress update + QElapsedTimer cardUpdateProgressLogTimer; ///< throttles progress logging to the running stage + CardDatabaseUpdateStatusBar *cardUpdateStatusBar = nullptr; ///< status bar widget tracking the card database update DlgViewLog *logviewDialog; GameReplay *replay; DlgTipOfTheDay *tip; diff --git a/cockatrice/src/main.cpp b/cockatrice/src/main.cpp index af519f436..b9cc8dabc 100644 --- a/cockatrice/src/main.cpp +++ b/cockatrice/src/main.cpp @@ -25,36 +25,55 @@ #include "client/sound_engine.h" #include "client/url_scheme_event_filter.h" #include "database/interface/settings_card_preference_provider.h" +#include "interface/intents/intent.h" #include "interface/intents/intent_open_local_deck.h" #include "interface/logger.h" #include "interface/pixel_map_generator.h" #include "interface/theme_manager.h" -#include "interface/widgets/dialogs/dlg_settings.h" -#include "interface/widgets/tabs/tab_supervisor.h" #include "interface/window_main.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/rng/rng_abstract.h" #include "single_instance_manager.h" #include "version_string.h" #include +#include +#include +#include +#include +#include #include -#include #include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include #include #include -#include #include -#include #include #include #include #include #include +#include +#include +#include QTranslator *translator, *qtTranslator; RNG_Abstract *rng; @@ -91,6 +110,7 @@ static void CockatriceLogger(QtMsgType type, const QMessageLogContext &ctx, cons #include #include #include + #pragma comment(lib, "DbgHelp.lib") // Link the DbgHelp library // clang-format on diff --git a/cockatrice/src/main.h b/cockatrice/src/main.h index eee262d2c..3d772915b 100644 --- a/cockatrice/src/main.h +++ b/cockatrice/src/main.h @@ -15,7 +15,6 @@ class CardDatabase; class QString; class QSystemTrayIcon; class QTranslator; -class SoundEngine; extern CardDatabase *db; diff --git a/cockatrice/src/single_instance_manager.cpp b/cockatrice/src/single_instance_manager.cpp index 8d363ff34..08294d72c 100644 --- a/cockatrice/src/single_instance_manager.cpp +++ b/cockatrice/src/single_instance_manager.cpp @@ -1,7 +1,15 @@ #include "single_instance_manager.h" -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include namespace { @@ -17,17 +25,9 @@ SingleInstanceManager::SingleInstanceManager(QObject *parent) : QObject(parent) bool SingleInstanceManager::tryRun(const QStringList &filesToSend) { - // Scope the socket name to the current user. On Linux the default abstract - // namespace is system-wide, so a plain name would let one user's instance + // Scope the socket name to the current user so one user's instance cannot // hijack another user's session. - QString userName = qEnvironmentVariable("USER"); - if (userName.isEmpty()) { - userName = qEnvironmentVariable("USERNAME"); - } - if (userName.isEmpty()) { - userName = QDir::home().dirName(); - } - serverName = QStringLiteral("CockatriceSingleInstance-%1").arg(userName); + serverName = scopedLocalServerName(QStringLiteral("CockatriceSingleInstance")); // Hand off to an already-running primary instance if one exists. Never steal // the socket of a busy primary: it is alive and will act on the payload. diff --git a/cockatrice/src/single_instance_manager.h b/cockatrice/src/single_instance_manager.h index d3884a60f..727994208 100644 --- a/cockatrice/src/single_instance_manager.h +++ b/cockatrice/src/single_instance_manager.h @@ -1,10 +1,12 @@ #ifndef COCKATRICE_SINGLE_INSTANCE_MANAGER_H #define COCKATRICE_SINGLE_INSTANCE_MANAGER_H -#include -#include -#include -#include +#include +#include +#include +#include + +class QLocalServer; class SingleInstanceManager : public QObject { diff --git a/doc/carddatabase_v4/cards.xsd b/doc/carddatabase_v4/cards.xsd index 82aed32ab..df52d6327 100644 --- a/doc/carddatabase_v4/cards.xsd +++ b/doc/carddatabase_v4/cards.xsd @@ -29,8 +29,6 @@ - - diff --git a/doc/doxygen/extra-pages/developer_documentation/network/client/game_event_handler.md b/doc/doxygen/extra-pages/developer_documentation/network/client/game_event_handler.md index fbb298d3a..051823c6c 100644 --- a/doc/doxygen/extra-pages/developer_documentation/network/client/game_event_handler.md +++ b/doc/doxygen/extra-pages/developer_documentation/network/client/game_event_handler.md @@ -90,13 +90,13 @@ This keeps the handler independent of concrete UI implementations. `GameEventHandler` and `PlayerEventHandler` work together but have distinct roles: -| GameEventHandler | PlayerEventHandler | -|------------------|--------------------| -| Global game state | Per-player state | -| Turn / phase flow | Zones and cards | -| Player join/leave | Player actions | -| Spectator events | Player-specific events | -| Chat dispatch | Card and zone updates | +| GameEventHandler | PlayerEventHandler | +| ----------------- | ---------------------- | +| Global game state | Per-player state | +| Turn / phase flow | Zones and cards | +| Player join/leave | Player actions | +| Spectator events | Player-specific events | +| Chat dispatch | Card and zone updates | When a server event is associated with a specific player, `GameEventHandler` routes it to the corresponding `PlayerEventHandler`. Events without a player diff --git a/doc/doxygen/extra-pages/developer_documentation/network/game_event_handler.md b/doc/doxygen/extra-pages/developer_documentation/network/game_event_handler.md deleted file mode 100644 index fbb298d3a..000000000 --- a/doc/doxygen/extra-pages/developer_documentation/network/game_event_handler.md +++ /dev/null @@ -1,170 +0,0 @@ -@page game_event_handler GameEventHandler - -## Overview - -`GameEventHandler` is the central coordinator for **game-wide commands and events**. -It acts as the bridge between the networking layer (protobuf messages received from -the server) and the local game model and UI. - -Unlike `PlayerEventHandler`, which is responsible for player-scoped state and zones, -`GameEventHandler` handles: - -- Global game flow (turns, phases, host changes) -- Player and spectator lifecycle events -- Chat and logging events -- Dispatching incoming events to the appropriate subsystem -- Sending locally initiated commands to the server - -In short, it is the **top-level event dispatcher** for an active game. - ---- - -## Responsibilities - -`GameEventHandler` has four primary responsibilities: - -### 1. Sending game-wide commands - -UI actions that affect the game as a whole (e.g. advancing the turn, changing phases, -sending chat messages) are translated into protobuf commands and sent to the server -via this class. - -Examples include: - -- Advancing or reversing the turn order -- Conceding or unconceding -- Changing the active phase -- Leaving the game -- Sending chat messages - -These commands are wrapped in `PendingCommand` instances so their lifecycle and -responses can be tracked. - ---- - -### 2. Processing incoming game events - -Incoming server messages arrive as a `GameEventContainer`. -`GameEventHandler` is responsible for: - -- Emitting lifecycle signals before and after processing -- Dispatching each event to the correct handler -- Forwarding player-scoped events to `PlayerEventHandler` instances -- Handling spectator-only and game-global events directly - -This design keeps networking concerns isolated from game logic and UI code. - ---- - -### 3. Managing global game state transitions - -Certain events affect the entire game state and require coordinated updates across -multiple subsystems. Examples include: - -- Full game state synchronization -- Active player or phase changes -- Game host changes -- Game closure -- Turn reversal - -`GameEventHandler` ensures these events are processed in a consistent order and -that all interested systems are notified via Qt signals. - ---- - -### 4. Emitting UI and logging signals - -Rather than directly manipulating UI widgets, `GameEventHandler` emits -high-level signals that are consumed by: - -- Game widgets -- Player and spectator lists -- Message and event logs -- Status indicators (ready state, deck selection, connection state) - -This keeps the handler independent of concrete UI implementations. - ---- - -## Relationship to PlayerEventHandler - -`GameEventHandler` and `PlayerEventHandler` work together but have distinct roles: - -| GameEventHandler | PlayerEventHandler | -|------------------|--------------------| -| Global game state | Per-player state | -| Turn / phase flow | Zones and cards | -| Player join/leave | Player actions | -| Spectator events | Player-specific events | -| Chat dispatch | Card and zone updates | - -When a server event is associated with a specific player, `GameEventHandler` -routes it to the corresponding `PlayerEventHandler`. Events without a player -context are handled directly. - ---- - -## Event Processing Flow - -A typical incoming event flow looks like this: - -1. `AbstractClient` receives a `GameEventContainer` -2. `GameEventHandler::processGameEventContainer()` is called -3. `containerProcessingStarted()` is emitted -4. Each event is: - - Handled directly **or** - - Forwarded to a `PlayerEventHandler` -5. Logging and UI signals are emitted as needed -6. `containerProcessingDone()` is emitted - -This structured flow makes it easy to: - -- Suppress UI updates during replays -- Handle reconnections cleanly -- Detect flood protection or error states - ---- - -## Command Lifecycle - -Outgoing commands follow a similar structured path: - -1. UI action triggers a `handle*()` method -2. A protobuf command is constructed -3. The command is wrapped in a `PendingCommand` -4. `sendGameCommand()` sends it to the server -5. `commandFinished()` receives the response -6. Errors or flood conditions are handled centrally - -This approach avoids duplicated error handling across UI code. - ---- - -## Design Goals - -`GameEventHandler` is designed to be: - -- **Centralized** – one entry point for all game-wide events -- **UI-agnostic** – communicates via signals, not widgets -- **Predictable** – well-defined event ordering and lifecycle -- **Composable** – works in concert with `PlayerEventHandler` -- **Testable** – logic is separated from rendering - ---- - -## Related Classes - -- @ref GameEventHandler -- @ref PlayerEventHandler -- `GameEventContainer` -- `PendingCommand` -- `AbstractClient` -- `AbstractGame` - ---- - -## See Also - -- @ref GameLogic -- @ref PlayerEventHandler -- @ref GameState diff --git a/doc/doxygen/extra-pages/developer_documentation/network/player_event_handler.md b/doc/doxygen/extra-pages/developer_documentation/network/player_event_handler.md deleted file mode 100644 index 6878758da..000000000 --- a/doc/doxygen/extra-pages/developer_documentation/network/player_event_handler.md +++ /dev/null @@ -1,199 +0,0 @@ -@page player_event_handler PlayerEventHandler - -## Overview - -`PlayerEventHandler` is responsible for applying **player-scoped game events** -to a single `Player` instance. These events modify the player’s board state, -zones, cards, counters, arrows, and associated UI and logging output. - -Each `PlayerEventHandler` instance is bound **1:1 to a Player** and is invoked -exclusively by @ref GameEventHandler after basic routing and validation of -incoming server events. - -This class represents the lowest-level authoritative application of game state -changes on the client. - ---- - -## Scope and Authority - -`PlayerEventHandler` operates under the following guarantees: - -- All incoming events are **authoritative** and already validated by the server -- Events refer to valid players, zones, and card identifiers -- Ordering is guaranteed by the server and preserved by `GameEventHandler` - -As a result, the handler does **not** perform rule validation or permission -checks. Its responsibility is to *apply* state, not *decide* legality. - ---- - -## Responsibilities - -### 1. Applying player-specific state changes - -The primary responsibility of `PlayerEventHandler` is to mutate player-owned -state, including: - -- Cards (`CardItem`) -- Zones (`CardZoneLogic`) -- Counters (card-level and player-level) -- Attachments and arrows -- Zone configuration flags (reveal / peek behavior) - -Many handlers update both **logical state** and **visual/UI state** in tandem. - ---- - -### 2. Coordinating complex card movement - -Some events—most notably card movement—require coordinated updates across -multiple systems. For example, `eventMoveCard()`: - -- Removes the card from the source zone -- Updates ownership, visibility, and identity -- Handles attachments and arrow cleanup -- Emits undo-draw or move logs -- Inserts the card into the destination zone -- Updates menus, hover state, and graphics - -This makes `PlayerEventHandler` intentionally stateful and tightly coupled to -the board implementation. - ---- - -### 3. Emitting logging signals - -Rather than writing directly to logs or widgets, `PlayerEventHandler` emits -structured Qt signals describing *what happened*, including: - -- Chat messages -- Card movement -- Shuffles and randomization -- Reveals and peeks -- Counter and attribute changes - -These signals are consumed by logging systems and UI components, keeping -presentation concerns out of the handler. - -Logging signals may be emitted **before or after mutation**, depending on -whether later changes would invalidate log data (e.g. card identity). - ---- - -### 4. Handling cross-player interactions - -Although bound to a single player, some events necessarily affect other -players’ state, including: - -- Moving cards between players -- Attaching cards to another player’s permanents -- Creating arrows targeting other players or cards - -In these cases, `PlayerEventHandler` performs the minimal required mutation -while respecting ownership boundaries enforced elsewhere. - ---- - -## Event Dispatch Model - -`PlayerEventHandler` exposes a single public entry point: - -- `processGameEvent()` - -This method: - -1. Receives a generic `GameEvent` -2. Switches on `GameEventType` -3. Extracts the appropriate protobuf extension -4. Forwards the event to a typed handler - -This keeps the event routing centralized and makes it easy to audit coverage -when new game events are introduced. - -Unhandled events are logged as warnings. - ---- - -## Event Categories - -For clarity, event handlers are grouped conceptually into: - -- **Chat and randomization** - - Chat messages - - Shuffles - - Dice rolls - -- **Arrows and targeting** - - Create / delete arrows - -- **Card and token creation** - - Token generation - - Counter creation - -- **Card attributes and counters** - - Tapped state - - Power/toughness - - Annotations - - Card- and player-level counters - -- **Zone-level operations** - - Card movement - - Zone dumps - - Card destruction - - Attachments - -- **Draw and reveal** - - Drawing cards - - Reveals, peeks, and reveal windows - -- **Zone configuration** - - Always-reveal and always-look-at-top-card flags - -This grouping mirrors the structure of the header file and reflects the -conceptual responsibilities of the class. - ---- - -## Relationship to GameEventHandler - -`PlayerEventHandler` is never instantiated or invoked directly by UI code. -Instead: - -1. `GameEventHandler` receives a `GameEventContainer` -2. Player-scoped events are routed to the appropriate `PlayerEventHandler` -3. Global or spectator events are handled elsewhere - -This separation keeps game-wide logic decoupled from player board state and -makes reconnection and replay handling simpler. - ---- - -## Design Intent - -`PlayerEventHandler` is designed to be: - -- **Authoritative** – applies server state exactly as received -- **Stateful** – maintains consistency across cards, zones, and UI -- **Explicit** – one handler per event type -- **UI-aware** – updates views and menus as part of state mutation -- **Auditable** – easy to trace what code handles which event - ---- - -## Related Classes - -- @ref PlayerEventHandler -- @ref GameEventHandler -- `Player` -- `CardItem` -- `CardZoneLogic` -- `GameEvent` -- `GameEventContext` - ---- - -## See Also - -- @ref GameLogicPlayers -- @ref GameLogic diff --git a/doc/doxygen/extra-pages/user_documentation/card_pictures/custom_card_pictures.md b/doc/doxygen/extra-pages/user_documentation/card_pictures/custom_card_pictures.md index 3f1079661..bcea6db8b 100644 --- a/doc/doxygen/extra-pages/user_documentation/card_pictures/custom_card_pictures.md +++ b/doc/doxygen/extra-pages/user_documentation/card_pictures/custom_card_pictures.md @@ -69,17 +69,17 @@ the 'Deck Editor' tab, in the 'URL Download Priority' section. The following reference points are available: -| Reference point | Description | Example | -| ------------------------------- | ------------------------------- | -------------- | -| `!name!` | Card name | `Example Card` | -| `!name_lower!` | Card name, lower case | `example card` | -| `!corrected_name!` | Corrected card name | `ExampleCard` (instead of "Example // Card") | -| `!corrected_name_lower!` | Corrected card name, lower case | `examplecard` | -| `!sflang!` | Scryfall language code for the current client language; defaults to English when the language has no localized images | `en`, `zhs` | -| `!setcode!` / `!setcode_lower!` | Set code | `EXM` / `exm` | -| `!setname!` / `!setname_lower!` | Full set name | `Exemplary Set` / `exemplary set` | -| `!set:!` | A property of this printing, e.g. `muid` (Gatherer multiverse ID), `uuid` (Scryfall UUID), `num` (collector number), `rarity` | `373549` | -| `!prop:!` | A property of the card, e.g. `side` (front/back), `colors`, `cmc`, `coloridentity`, `type`, `pt`, and the format legality statuses | `front` | +| Reference point | Description | Example | +| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| `!name!` | Card name | `Example Card` | +| `!name_lower!` | Card name, lower case | `example card` | +| `!corrected_name!` | Corrected card name | `ExampleCard` (instead of "Example // Card") | +| `!corrected_name_lower!` | Corrected card name, lower case | `examplecard` | +| `!sflang!` | Scryfall language code for the current client language; defaults to English when the language has no localized images | `en`, `zhs` | +| `!setcode!` / `!setcode_lower!` | Set code | `EXM` / `exm` | +| `!setname!` / `!setname_lower!` | Full set name | `Exemplary Set` / `exemplary set` | +| `!set:!` | A property of this printing, e.g. `muid` (Gatherer multiverse ID), `uuid` (Scryfall UUID), `num` (collector number), `rarity` | `373549` | +| `!prop:!` | A property of the card, e.g. `side` (front/back), `colors`, `cmc`, `coloridentity`, `type`, `pt`, and the format legality statuses | `front` | The `!set:...!` and `!prop:...!` reference points support two modifiers: diff --git a/doc/doxygen/extra-pages/user_documentation/troubleshooting/enabling_debug_logs.md b/doc/doxygen/extra-pages/user_documentation/troubleshooting/enabling_debug_logs.md index 7e4196a50..27c4272f5 100644 --- a/doc/doxygen/extra-pages/user_documentation/troubleshooting/enabling_debug_logs.md +++ b/doc/doxygen/extra-pages/user_documentation/troubleshooting/enabling_debug_logs.md @@ -110,6 +110,7 @@ suffix, e.g. `card_picture_loader.*`, to include all sub categories). | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | Card picture loading (URLs, local file hits/misses, downloads, redirects) | `card_picture_loader.*` | | Card database loading and parsing | `card_database`, `card_database.loading`, `card_database.loading.success_or_failure`, `cockatrice_xml.*` | +| Card database update (running Oracle, progress, exit status, errors) | `card_database.update` | | Card, set, and deck information | `card_info`, `card_list`, `deck_loader` | | Startup sequence and update checks | `window_main.startup.*`, `release_channel`, `spoiler_background_updater` | | User interface and themes | `theme_manager`, `sound_engine`, `flow_layout`, `flow_widget.*`, `pixel_map_generator`, `card_info_picture_widget` | @@ -128,6 +129,7 @@ For example, to investigate why a card database update seems to fail, enable the card_database = true card_database.loading = true card_database.loading.success_or_failure = true +card_database.update = true cockatrice_xml.* = true ``` diff --git a/iwyu.sh b/iwyu.sh new file mode 100755 index 000000000..279200adf --- /dev/null +++ b/iwyu.sh @@ -0,0 +1,226 @@ +#!/bin/bash + +# This script runs include-what-you-use on the given source files or +# directories, applies its suggestions (forward declarations, minimal and +# canonical #includes), then reformats the touched files with clang-format. +# +# Uses include-what-you-use, iwyu_tool.py, fix_includes.py, clang-format and +# python3. Requires a build directory configured with +# -DCMAKE_EXPORT_COMPILE_COMMANDS=ON to provide compile_commands.json. +# +# The Qt 6 mapping (qt6.imp) makes IWYU prefer capital includes like +# #include over #include and keeps forward declarations +# where possible. Regenerate it with tools/generate_qt_mappings.py whenever the +# installed Qt version changes. +# +# Usage: +# ./iwyu.sh [-b ] [-m ] [-j ] [-n] +# +# Options: +# -b, --build-dir DIR build dir with compile_commands.json (default: build) +# -m, --mapping FILE IWYU mapping file (default: qt6.imp) +# -j, --jobs N IWYU parallel jobs (default: 2) +# -n, --dry-run only print IWYU output, do not modify any file + +set -o pipefail + +# go to the project root directory, this file should be located in the project root directory +cd "${BASH_SOURCE%/*}/" || exit 2 # could not find path, this could happen with special links etc. + +# defaults +build_dir="build" +mapping="qt6.imp" +jobs=2 +dry_run=0 + +# 3rd party code that must not be touched by IWYU or clang-format +excludes=("libcockatrice_rng/libcockatrice/rng/sfmt/" \ +"libcockatrice_utility/libcockatrice/utility/peglib.h" \ +"oracle/src/lzma/" \ +"oracle/src/qt-json/" \ +"oracle/src/zip/" \ +"servatrice/src/smtp/") + +usage() { + cat <] [-m ] [-j ] [-n] + +Runs include-what-you-use on the given files/directories, applies the +suggested include changes in place, and reformats touched files. + +Options: + -b, --build-dir DIR build dir with compile_commands.json (default: build) + -m, --mapping FILE IWYU mapping file (default: qt6.imp) + -j, --jobs N IWYU parallel jobs (default: 2) + -n, --dry-run only print IWYU output, do not modify any file + -h, --help show this help +EOM +} + +# parse options +while [[ $* ]]; do + case "$1" in + '-b'|'--build-dir') + build_dir=$2 + shift 2 + ;; + '-m'|'--mapping') + mapping=$2 + shift 2 + ;; + '-j'|'--jobs') + jobs=$2 + shift 2 + ;; + '-n'|'--dry-run') + dry_run=1 + shift + ;; + '-h'|'--help') + usage + exit 0 + ;; + *) + targets+=("$1") + shift + ;; + esac +done + +# find the IWYU tools, preferring PATH and falling back to the LLVM dir +find_tool() { + local tool=$1 + local path + if path=$(command -v "$tool" 2>/dev/null); then + echo "$path" + elif [ -x "/usr/lib/llvm/22/bin/$tool" ]; then + echo "/usr/lib/llvm/22/bin/$tool" + else + return 1 + fi +} + +find_tool include-what-you-use > /dev/null || { echo "error: include-what-you-use not found"; exit 1; } +IWYU_TOOL=$(find_tool iwyu_tool.py) || { echo "error: iwyu_tool.py not found"; exit 1; } +FIX_INCLUDES=$(find_tool fix_includes.py) || { echo "error: fix_includes.py not found"; exit 1; } +command -v clang-format >/dev/null 2>&1 || { echo "error: clang-format not found"; exit 1; } + +if [ "${#targets[@]}" -eq 0 ]; then + echo "error: specify at least one source file or directory" >&2 + usage + exit 1 +fi + +if [ ! -f "$mapping" ]; then + echo "error: mapping file '$mapping' not found" >&2 + exit 1 +fi + +if [ ! -f "$build_dir/compile_commands.json" ]; then + echo "error: '$build_dir/compile_commands.json' not found" >&2 + echo "configure the build with -DCMAKE_EXPORT_COMPILE_COMMANDS=ON first" >&2 + exit 1 +fi + +tmpdir=$(mktemp -d /tmp/iwyu.XXXXXX) +trap 'rm -rf "$tmpdir"' EXIT + +# filter the compilation database: drop excluded 3rd party code and strip the +# GCC-only flags that clang/include-what-you-use rejects +root="$PWD" +python3 - "$build_dir/compile_commands.json" "$root" "${excludes[@]}" <<'PYEOF' > "$tmpdir/compile_commands.json" +import json +import os +import re +import sys + +cc_path, root = sys.argv[1], sys.argv[2] +excludes = sys.argv[3:] +root = os.path.normpath(root) +excl_norm = [os.path.normpath(os.path.join(root, e)) for e in excludes] + +out = [] +for entry in json.load(open(cc_path)): + path = os.path.normpath(entry['file']) + if not path.startswith(root + os.sep): + continue + # skip generated code: protobuf output and moc autogen files + if re.search(r'\.pb\.(h|cc)$', path) or '_autogen/' in path: + continue + if any(path.startswith(e + os.sep) or path == e for e in excl_norm): + continue + command = entry.get('command', '') + command = re.sub(r'-mno-direct-extern-access', '', command) + command = re.sub(r'--coverage', '', command) + out.append(dict(entry, command=command)) + +json.dump(out, sys.stdout) +PYEOF + +mapping_abs="$PWD/$mapping" +if [ "$dry_run" = 1 ]; then + python3 "$IWYU_TOOL" -p "$tmpdir" -o iwyu -j "$jobs" "${targets[@]}" \ + -- -Xiwyu "--mapping_file=$mapping_abs" +else + before=$(git diff --name-only 2>/dev/null | sort -u) + + python3 "$IWYU_TOOL" -p "$tmpdir" -o iwyu -j "$jobs" "${targets[@]}" \ + -- -Xiwyu "--mapping_file=$mapping_abs" | + python3 "$FIX_INCLUDES" --nosafe_headers --nocomments --noreorder --basedir="$root" + + # fix_includes can emit absolute paths for headers that the compiler resolved + # through an absolute -I entry. Those are machine-specific and break every + # other checkout and CI, so rewrite them into the project-relative quoted + # form the codebase uses. Must run before clang-format so the regroup/sort + # pass sees the final paths. + python3 - "$root" <<'PYEOF' +import os +import re +import subprocess +import sys + +root = os.path.normpath(sys.argv[1]) +pattern = re.compile(r'^(\s*#\s*include\s*)"(/)') + +# Collect from git so untracked scratch files are left alone. +changed = subprocess.run( + ['git', 'diff', '--name-only', '--diff-filter=ACMR'], + capture_output=True, text=True, check=True).stdout.split() + +for rel in changed: + if not rel.endswith(('.h', '.cpp', '.cc', '.cxx')): + continue + path = os.path.join(root, rel) + if not os.path.isfile(path): + continue + src = open(path, encoding='utf-8').read() + if '"' + os.sep not in src: + continue + out = [] + for line in src.split('\n'): + m = pattern.match(line) + if not m: + out.append(line) + continue + target = os.path.normpath(line[m.end(1) + 1:].rstrip('"')) + if not target.startswith(root + os.sep): + out.append(line) + continue + spelled = os.path.relpath(target, os.path.dirname(path)) + out.append(f'{m.group(1)}"{spelled}"') + new = '\n'.join(out) + if new != src: + open(path, 'w', encoding='utf-8').write(new) +PYEOF + + # reformat every file this IWYU pass modified (fix_includes also touches + # headers pulled in by the requested files) + touched=$(comm -13 <(printf '%s\n' "$before") <(git diff --name-only 2>/dev/null | sort -u)) + for file in $touched; do + case "$file" in + *.h|*.cpp) + clang-format -i "$file" + ;; + esac + done +fi diff --git a/libcockatrice_card/libcockatrice/card/card_info.cpp b/libcockatrice_card/libcockatrice/card/card_info.cpp index 56c737793..bd33f18e7 100644 --- a/libcockatrice_card/libcockatrice/card/card_info.cpp +++ b/libcockatrice_card/libcockatrice/card/card_info.cpp @@ -1,21 +1,17 @@ #include "card_info.h" #include "game_specific_terms.h" +#include "libcockatrice/card/lazy_properties_hash.h" #include "printing/printing_info.h" #include "relation/card_relation.h" #include "set/card_set.h" -#include +#include #include #include #include -#include #include -class CardRelation; -class CardSet; -class CardInfo; - using CardInfoPtr = QSharedPointer; const QHash &CardInfo::getPropertiesHash() const diff --git a/libcockatrice_card/libcockatrice/card/card_info.h b/libcockatrice_card/libcockatrice/card/card_info.h index 17894cec5..356da0546 100644 --- a/libcockatrice_card/libcockatrice/card/card_info.h +++ b/libcockatrice_card/libcockatrice/card/card_info.h @@ -5,15 +5,19 @@ #include "lazy_properties_hash.h" #include "printing/printing_info.h" -#include +#include +#include #include #include #include #include #include -#include +#include +#include #include -#include +#include +#include +#include #include inline Q_LOGGING_CATEGORY(CardInfoLog, "card_info"); @@ -21,7 +25,6 @@ inline Q_LOGGING_CATEGORY(CardInfoLog, "card_info"); class CardInfo; class CardSet; class CardRelation; -class ICardDatabaseParser; typedef QSharedPointer CardInfoPtr; typedef QSharedPointer CardSetPtr; diff --git a/libcockatrice_card/libcockatrice/card/card_info_comparator.cpp b/libcockatrice_card/libcockatrice/card/card_info_comparator.cpp index cc0314e21..d0800e596 100644 --- a/libcockatrice_card/libcockatrice/card/card_info_comparator.cpp +++ b/libcockatrice_card/libcockatrice/card/card_info_comparator.cpp @@ -1,5 +1,11 @@ #include "card_info_comparator.h" +#include "libcockatrice/card/card_info.h" + +#include +#include +#include + CardInfoComparator::CardInfoComparator(const QStringList &properties, Qt::SortOrder order) : m_properties(properties), m_order(order) { diff --git a/libcockatrice_card/libcockatrice/card/card_info_comparator.h b/libcockatrice_card/libcockatrice/card/card_info_comparator.h index b6df8c7a3..b184f5d55 100644 --- a/libcockatrice_card/libcockatrice/card/card_info_comparator.h +++ b/libcockatrice_card/libcockatrice/card/card_info_comparator.h @@ -9,6 +9,9 @@ #include "card_info.h" +#include +#include +#include #include #include diff --git a/libcockatrice_card/libcockatrice/card/card_localization.cpp b/libcockatrice_card/libcockatrice/card/card_localization.cpp index 03c6c659b..4f91bac78 100644 --- a/libcockatrice_card/libcockatrice/card/card_localization.cpp +++ b/libcockatrice_card/libcockatrice/card/card_localization.cpp @@ -1,8 +1,10 @@ #include "card_localization.h" #include +#include #include #include +#include namespace CardLocalization { diff --git a/libcockatrice_card/libcockatrice/card/card_localization.h b/libcockatrice_card/libcockatrice/card/card_localization.h index 1bde506cb..ee2aaa9b7 100644 --- a/libcockatrice_card/libcockatrice/card/card_localization.h +++ b/libcockatrice_card/libcockatrice/card/card_localization.h @@ -1,6 +1,8 @@ #ifndef CARD_LOCALIZATION_H #define CARD_LOCALIZATION_H +#include +#include #include #include diff --git a/libcockatrice_card/libcockatrice/card/database/card_database.cpp b/libcockatrice_card/libcockatrice/card/database/card_database.cpp index 209b9d2c2..469c8d02c 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database.cpp +++ b/libcockatrice_card/libcockatrice/card/database/card_database.cpp @@ -1,17 +1,27 @@ #include "card_database.h" #include "../relation/card_relation.h" -#include "card_database_manager.h" -#include "parser/cockatrice_xml_4.h" +#include "libcockatrice/card/database/card_database_data.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/database/parser/card_database_parser.h" +#include "libcockatrice/card/format/format_legality_rules.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/card/set/card_set_list.h" -#include #include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include +class ICardDatabasePathProvider; +class ICardPreferenceProvider; +class ICardSetPriorityController; + CardDatabase::CardDatabase(QObject *parent, ICardPreferenceProvider *prefs, ICardDatabasePathProvider *pathProvider, @@ -23,7 +33,7 @@ CardDatabase::CardDatabase(QObject *parent, qRegisterMetaType("CardDatabaseData"); // create loader and wire it up - loader = new CardDatabaseLoader(this, this, pathProvider, prefs, setPriorityController); + loader = new CardDatabaseLoader(this, this, pathProvider, setPriorityController); // re-emit loader signals (so other code doesn't need to know about internals) connect(loader, &CardDatabaseLoader::loadingFinished, this, &CardDatabase::cardDatabaseLoadingFinished); connect(loader, &CardDatabaseLoader::loadingFailed, this, &CardDatabase::cardDatabaseLoadingFailed); @@ -68,7 +78,9 @@ void CardDatabase::loadCardDatabases() void CardDatabase::reloadCardDatabasesAndNotify() { - loadCardDatabases(); + // An explicit reload bypasses the binary cache so the files on disk are + // always re-read, even when their size/mtime hash still matches the cache. + loadStatus = loader->loadCardDatabases(/* ignoreCache */ true); if (loadStatus == Ok) { checkUnknownSets(); diff --git a/libcockatrice_card/libcockatrice/card/database/card_database.h b/libcockatrice_card/libcockatrice/card/database/card_database.h index b10e3c726..9f0d67b67 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database.h +++ b/libcockatrice_card/libcockatrice/card/database/card_database.h @@ -2,18 +2,26 @@ #define CARDDATABASE_H #include "../set/card_set_list.h" -#include "card_database_data.h" #include "card_database_loader.h" -#include "card_database_querier.h" + +// IWYU pragma: keep +// CardDatabaseData is passed by value to the swapInDatabaseData() slot, and +// CardInfoPtr is passed by value to the cardAdded()/cardRemoved() signals, so +// the moc-generated code needs the complete types. +#include "card_database_data.h" +#include "libcockatrice/card/card_info.h" #include -#include -#include -#include #include -#include -#include -#include +#include +#include +#include +#include + +class CardDatabaseQuerier; +class ICardDatabasePathProvider; +class ICardPreferenceProvider; +class ICardSetPriorityController; inline Q_LOGGING_CATEGORY(CardDatabaseLog, "card_database"); @@ -169,8 +177,12 @@ public slots: void addFormat(const FormatRulesPtr &format); - /** @brief Loads card databases from configured paths. */ + /** @brief Loads card databases from configured paths, using the binary cache when valid. */ void loadCardDatabases(); + /** + * @brief Reloads card databases from disk, bypassing the binary cache, + * and notifies observers of the fresh state. + */ void reloadCardDatabasesAndNotify(); /** @brief Saves custom tokens to file. diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_cache.cpp b/libcockatrice_card/libcockatrice/card/database/card_database_cache.cpp index 3165ff871..4ab4d1fca 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_cache.cpp +++ b/libcockatrice_card/libcockatrice/card/database/card_database_cache.cpp @@ -4,15 +4,32 @@ #include "../format/format_legality_rules.h" #include "../printing/printing_info.h" #include "../relation/card_relation.h" -#include "../relation/card_relation_type.h" #include "../set/card_set.h" #include "card_database_loader.h" +#include "libcockatrice/card/database/card_database_data.h" +#include "libcockatrice/card/lazy_properties_hash.h" #include +#include #include +#include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include + +class ICardSetPriorityController; +enum class CardRelationType; +template class QHash; namespace { diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_cache.h b/libcockatrice_card/libcockatrice/card/database/card_database_cache.h index 40ff96541..178b3ac6e 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_cache.h +++ b/libcockatrice_card/libcockatrice/card/database/card_database_cache.h @@ -1,10 +1,11 @@ #ifndef CARDDATABASE_CACHE_H #define CARDDATABASE_CACHE_H -#include "card_database_data.h" +#include -#include -#include +class ICardSetPriorityController; +class QByteArray; +struct CardDatabaseData; namespace CardDatabaseCache { diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_loader.cpp b/libcockatrice_card/libcockatrice/card/database/card_database_loader.cpp index 47f7eee6d..194083615 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_loader.cpp +++ b/libcockatrice_card/libcockatrice/card/database/card_database_loader.cpp @@ -2,6 +2,11 @@ #include "card_database.h" #include "card_database_cache.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_data.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/interfaces/interface_card_database_path_provider.h" +#include "libcockatrice/interfaces/interface_card_set_priority_controller.h" #include "parser/card_database_parser.h" #include "parser/cockatrice_xml_3.h" #include "parser/cockatrice_xml_4.h" @@ -9,29 +14,37 @@ #include #include #include +#include #include +#include #include #include #include +#include +#include +#include +#include #include +#include +#include + +class ICardPreferenceProvider; CardDatabaseLoader::CardDatabaseLoader(QObject *parent, CardDatabase *db, ICardDatabasePathProvider *_pathProvider, - ICardPreferenceProvider *_preferenceProvider, ICardSetPriorityController *_priorityController) : QObject(parent), database(db), pathProvider(_pathProvider), priorityController(_priorityController) { // instantiate available parsers here - availableParsers << new CockatriceXml4Parser(_preferenceProvider, _priorityController); + availableParsers << new CockatriceXml4Parser(_priorityController); availableParsers << new CockatriceXml3Parser(_priorityController); // The load path parses into a snapshot and never emits per-card signals; // the finished snapshot is swapped into the live database on the GUI thread. // when SettingsCache's path changes, trigger reloads - connect(pathProvider, &ICardDatabasePathProvider::cardDatabasePathChanged, this, - &CardDatabaseLoader::loadCardDatabases); + connect(pathProvider, &ICardDatabasePathProvider::cardDatabasePathChanged, this, [this] { loadCardDatabases(); }); } CardDatabaseLoader::~CardDatabaseLoader() @@ -76,12 +89,12 @@ LoadStatus CardDatabaseLoader::loadCardDatabase(const QString &path, CardDatabas return tempLoadStatus; } -LoadStatus CardDatabaseLoader::loadCardDatabases() +LoadStatus CardDatabaseLoader::loadCardDatabases(bool ignoreCache) { - return doLoadCardDatabases(); + return doLoadCardDatabases(ignoreCache); } -LoadStatus CardDatabaseLoader::doLoadCardDatabases() +LoadStatus CardDatabaseLoader::doLoadCardDatabases(bool ignoreCache) { QMutexLocker locker(reloadDatabaseMutex); @@ -99,9 +112,14 @@ LoadStatus CardDatabaseLoader::doLoadCardDatabases() LoadStatus loadStatus = NotLoaded; // Try the binary cache first: a cache hit avoids re-parsing the (large) XML. + // An explicit reload skips the lookup so the files on disk are always + // re-read, even when their size/mtime hash still matches the cache. const QStringList customPaths = collectCustomDatabasePaths(); const QByteArray sourceHash = computeSourceHash(customPaths); - if (loadFromCache(data, sourceHash)) { + if (ignoreCache) { + qCInfo(CardDatabaseLoadingLog) << "Ignoring binary cache, re-parsing source files"; + } + if (!ignoreCache && loadFromCache(data, sourceHash)) { qCInfo(CardDatabaseLoadingLog) << "Loaded card database from binary cache"; loadStatus = Ok; } else { @@ -166,6 +184,12 @@ QByteArray CardDatabaseLoader::computeSourceHash(const QStringList &customPaths) hash.addData(QCoreApplication::applicationVersion().toUtf8()); hash.addData(QByteArray(1, '\0')); + // Include parser schema version to invalidate caches when parser behavior changes. + // Increment this if the parser logic changes in a way that affects cached data. + static const char SCHEMA_VERSION[] = "carddb-parse-schema-v1"; + hash.addData(QByteArray(SCHEMA_VERSION, sizeof(SCHEMA_VERSION) - 1)); + hash.addData(QByteArray(1, '\0')); + const QStringList inputs = QStringList() << pathProvider->getCardDatabasePath() << pathProvider->getTokenDatabasePath() << pathProvider->getSpoilerCardDatabasePath() << customPaths; @@ -180,6 +204,17 @@ QByteArray CardDatabaseLoader::computeSourceHash(const QStringList &customPaths) hash.addData(QByteArray(1, '\0')); } } + + // The parsers drop printings of disabled sets at parse time, so the cached + // snapshot depends on enablement: fold the enabled set names in so that + // toggling a set invalidates the cache and forces a re-parse. + if (priorityController) { + const QStringList enabledSets = priorityController->getEnabledSetNames(); + for (const QString &setName : enabledSets) { + hash.addData(setName.toUtf8()); + hash.addData(QByteArray(1, '\0')); + } + } return hash.result(); } diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_loader.h b/libcockatrice_card/libcockatrice/card/database/card_database_loader.h index 6dcb06bf2..fffd31d2f 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_loader.h +++ b/libcockatrice_card/libcockatrice/card/database/card_database_loader.h @@ -2,12 +2,21 @@ #define COCKATRICE_CARD_DATABASE_LOADER_H #include +#include #include #include -#include -#include -#include -#include +#include +#include +#include +#include + +class ICardDatabasePathProvider; +class ICardSetPriorityController; + +// IWYU pragma: keep +// CardDatabaseData is passed by value to the databaseDataReady() signal, so the +// moc-generated code needs the complete type. +#include "card_database_data.h" inline Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading"); inline Q_LOGGING_CATEGORY(CardDatabaseLoadingSuccessOrFailureLog, "card_database.loading.success_or_failure"); @@ -49,12 +58,10 @@ public: * @param parent QObject parent. * @param db Pointer to the CardDatabase to populate (non-owning). * @param pathProvider Provider for card database file paths. - * @param preferenceProvider Optional card preference provider for pinned printings. */ explicit CardDatabaseLoader(QObject *parent, CardDatabase *db, ICardDatabasePathProvider *pathProvider, - ICardPreferenceProvider *preferenceProvider, ICardSetPriorityController *_priorityController); /** @brief Destructor cleans up allocated parsers. */ @@ -66,9 +73,13 @@ public slots: * * Runs synchronously on the calling thread. The caller should ensure * that any signal receivers are already connected before invoking this. + * @param ignoreCache Skip the binary cache lookup and re-parse the source + * files from disk, refreshing the cache afterwards. Used for + * explicit reloads so that edits the source hash cannot see are + * still picked up. * @return Status of the main database load. */ - LoadStatus loadCardDatabases(); + LoadStatus loadCardDatabases(bool ignoreCache = false); /** * @brief Loads a single card database file into the given snapshot. @@ -121,9 +132,10 @@ private: /** * @brief Performs the actual load work synchronously on the calling thread. + * @param ignoreCache Skip the binary cache lookup and re-parse from disk. * @return Status of the main database load. */ - LoadStatus doLoadCardDatabases(); + LoadStatus doLoadCardDatabases(bool ignoreCache); /** * @brief Collects custom card database paths recursively. diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_manager.cpp b/libcockatrice_card/libcockatrice/card/database/card_database_manager.cpp index 614b4a7f8..b06c258fa 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_manager.cpp +++ b/libcockatrice_card/libcockatrice/card/database/card_database_manager.cpp @@ -1,9 +1,16 @@ #include "card_database_manager.h" +#include "libcockatrice/card/database/card_database.h" + #include #include #include +class CardDatabaseQuerier; +class ICardDatabasePathProvider; +class ICardPreferenceProvider; +class ICardSetPriorityController; + ICardPreferenceProvider *CardDatabaseManager::cardPreferenceProvider = new NoopCardPreferenceProvider(); ICardDatabasePathProvider *CardDatabaseManager::pathProvider = new NoopCardDatabasePathProvider(); ICardSetPriorityController *CardDatabaseManager::setPriorityController = new NoopCardSetPriorityController(); diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_manager.h b/libcockatrice_card/libcockatrice/card/database/card_database_manager.h index c7de66a25..074154a41 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_manager.h +++ b/libcockatrice_card/libcockatrice/card/database/card_database_manager.h @@ -2,7 +2,12 @@ #define CARD_DATABASE_ACCESSOR_H #pragma once -#include "card_database.h" + +class CardDatabase; +class CardDatabaseQuerier; +class ICardDatabasePathProvider; +class ICardPreferenceProvider; +class ICardSetPriorityController; /** * @class CardDatabaseManager diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_querier.cpp b/libcockatrice_card/libcockatrice/card/database/card_database_querier.cpp index 5b9c5a4b5..2fad5212d 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_querier.cpp +++ b/libcockatrice_card/libcockatrice/card/database/card_database_querier.cpp @@ -4,8 +4,15 @@ #include "../printing/exact_card.h" #include "../set/card_set_comparator.h" #include "card_database.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/interfaces/interface_card_preference_provider.h" +#include "libcockatrice/utility/card_ref.h" -#include +#include +#include +#include +#include +#include CardDatabaseQuerier::CardDatabaseQuerier(QObject *_parent, const CardDatabase *_db, diff --git a/libcockatrice_card/libcockatrice/card/database/card_database_querier.h b/libcockatrice_card/libcockatrice/card/database/card_database_querier.h index f195a8170..a1409b3cc 100644 --- a/libcockatrice_card/libcockatrice/card/database/card_database_querier.h +++ b/libcockatrice_card/libcockatrice/card/database/card_database_querier.h @@ -3,12 +3,18 @@ #include "../card_info.h" #include "../printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include +#include #include -#include -#include +#include +#include +#include class CardDatabase; +class ICardPreferenceProvider; +struct CardRef; /** * @class CardDatabaseQuerier diff --git a/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.cpp b/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.cpp index 00ed9377d..1374533ca 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.cpp +++ b/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.cpp @@ -1,6 +1,11 @@ #include "card_database_parser.h" -#include +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_data.h" + +#include + +class ICardSetPriorityController; SetNameMap ICardDatabaseParser::sets; diff --git a/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.h b/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.h index 6d9c91260..b82d9aed7 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.h +++ b/libcockatrice_card/libcockatrice/card/database/parser/card_database_parser.h @@ -2,10 +2,17 @@ #define CARDDATABASE_PARSER_H #include "../../card_info.h" -#include "../card_database_data.h" +#include "libcockatrice/card/database/parser/card_database_parser.h" +#include "libcockatrice/card/set/card_set.h" -#include +#include +#include #include +#include + +class ICardSetPriorityController; +class QIODevice; +struct CardDatabaseData; #define COCKATRICE_XML_XSI_NAMESPACE "http://www.w3.org/2001/XMLSchema-instance" diff --git a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.cpp b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.cpp index 64202ab21..b17eb8b5e 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.cpp +++ b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.cpp @@ -2,13 +2,33 @@ #include "../../relation/card_relation.h" #include "../../relation/card_relation_type.h" +#include "libcockatrice/card/database/card_database_data.h" +#include "libcockatrice/card/database/parser/card_database_parser.h" +#include "libcockatrice/card/lazy_properties_hash.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +class ICardSetPriorityController; + #define COCKATRICE_XML3_TAGNAME "cockatrice_carddatabase" #define COCKATRICE_XML3_TAGVER 3 #define COCKATRICE_XML3_SCHEMALOCATION \ diff --git a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.h b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.h index 83b736257..cb76e960d 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.h +++ b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_3.h @@ -2,9 +2,14 @@ #define COCKATRICE_XML3_H #include "card_database_parser.h" +#include "libcockatrice/card/card_info.h" #include -#include +#include +#include + +class ICardSetPriorityController; +class QXmlStreamReader; inline Q_LOGGING_CATEGORY(CockatriceXml3Log, "cockatrice_xml.xml_3_parser"); diff --git a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.cpp b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.cpp index 19e972a7a..4d975e533 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.cpp +++ b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.cpp @@ -1,22 +1,44 @@ #include "cockatrice_xml_4.h" #include "../../relation/card_relation.h" +#include "libcockatrice/card/database/card_database_data.h" +#include "libcockatrice/card/database/parser/card_database_parser.h" +#include "libcockatrice/card/lazy_properties_hash.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/relation/card_relation_type.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/interfaces/interface_card_preference_provider.h" #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include #include +class ICardSetPriorityController; + #define COCKATRICE_XML4_TAGNAME "cockatrice_carddatabase" #define COCKATRICE_XML4_TAGVER 4 #define COCKATRICE_XML4_SCHEMALOCATION \ "https://raw.githubusercontent.com/Cockatrice/Cockatrice/master/doc/carddatabase_v4/cards.xsd" -CockatriceXml4Parser::CockatriceXml4Parser(ICardPreferenceProvider *_cardPreferenceProvider, - ICardSetPriorityController *_cardSetPriorityController) - : ICardDatabaseParser(_cardSetPriorityController), cardPreferenceProvider(_cardPreferenceProvider) +CockatriceXml4Parser::CockatriceXml4Parser(ICardSetPriorityController *_cardSetPriorityController) + : ICardDatabaseParser(_cardSetPriorityController) { } @@ -261,7 +283,6 @@ QHash CockatriceXml4Parser::loadCardPropertiesFromXml(QXmlStre void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml) { - bool includeRebalancedCards = cardPreferenceProvider->getIncludeRebalancedCards(); while (!xml.atEnd()) { if (xml.readNext() == QXmlStreamReader::EndElement) { break; @@ -363,17 +384,7 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml) printingProps.insert(attrName, attr.value().toString()); } PrintingInfo printingInfo(set, LazyPropertiesHash(printingProps)); - - // This is very much a hack and not the right place to - // put this check, as it requires a reload of Cockatrice - // to be apply. - // - // However, this is also true of the `set->getEnabled()` - // check above (which is currently bugged as well), so - // we'll fix both at the same time. - if (includeRebalancedCards || printingInfo.getProperty("isRebalanced") != "true") { - _sets[setName].append(printingInfo); - } + _sets[setName].append(printingInfo); } // related cards } else if (xmlName == "related" || xmlName == "reverse-related") { diff --git a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.h b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.h index 55f7c5a3b..390282796 100644 --- a/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.h +++ b/libcockatrice_card/libcockatrice/card/database/parser/cockatrice_xml_4.h @@ -2,10 +2,15 @@ #define COCKATRICE_XML4_H #include "card_database_parser.h" +#include "libcockatrice/card/card_info.h" +#include #include -#include -#include +#include +#include + +class ICardSetPriorityController; +class QXmlStreamReader; inline Q_LOGGING_CATEGORY(CockatriceXml4Log, "cockatrice_xml.xml_4_parser"); @@ -21,7 +26,6 @@ inline Q_LOGGING_CATEGORY(CockatriceXml4Log, "cockatrice_xml.xml_4_parser"); * @note Differences from v3: * - Card properties are stored in blocks as a QHash. * - Sets can include a element. - * - Supports user preferences via ICardPreferenceProvider (e.g., skipping rebalanced cards). * - Related cards support persistent relations and multiple attach types (e.g., transform). * - More robust serialization; easier to extend schema in the future. */ @@ -29,8 +33,7 @@ class CockatriceXml4Parser : public ICardDatabaseParser { Q_OBJECT public: - explicit CockatriceXml4Parser(ICardPreferenceProvider *cardPreferenceProvider, - ICardSetPriorityController *cardSetPriorityController); + explicit CockatriceXml4Parser(ICardSetPriorityController *cardSetPriorityController); ~CockatriceXml4Parser() override = default; /** @@ -65,8 +68,6 @@ public: const QString &sourceVersion = "unknown") override; private: - ICardPreferenceProvider *cardPreferenceProvider; ///< Interface to handle user preferences - /** * @brief Loads a generic block from a element. * @param xml The open QXmlStreamReader positioned at a element. @@ -77,7 +78,6 @@ private: /** * @brief Load all elements from the XML stream. * @param xml The open QXmlStreamReader positioned at the element. - * Honors the user's preference regarding rebalanced cards. */ void loadCardsFromXml(QXmlStreamReader &xml); diff --git a/libcockatrice_card/libcockatrice/card/format/format_legality_rules.cpp b/libcockatrice_card/libcockatrice/card/format/format_legality_rules.cpp index a6b3bb038..64785759e 100644 --- a/libcockatrice_card/libcockatrice/card/format/format_legality_rules.cpp +++ b/libcockatrice_card/libcockatrice/card/format/format_legality_rules.cpp @@ -1,6 +1,9 @@ #include "format_legality_rules.h" +#include +#include #include +#include bool cardMatchesCondition(const CardInfo &card, const CardCondition &cond) { diff --git a/libcockatrice_card/libcockatrice/card/format/format_legality_rules.h b/libcockatrice_card/libcockatrice/card/format/format_legality_rules.h index 8778ab17e..15ba46728 100644 --- a/libcockatrice_card/libcockatrice/card/format/format_legality_rules.h +++ b/libcockatrice_card/libcockatrice/card/format/format_legality_rules.h @@ -1,11 +1,12 @@ #ifndef COCKATRICE_FORMAT_LEGALITY_RULES_H #define COCKATRICE_FORMAT_LEGALITY_RULES_H -#include +#include #include #include class CardInfo; + using CardInfoPtr = QSharedPointer; struct CardCondition diff --git a/libcockatrice_card/libcockatrice/card/import/card_name_normalizer.cpp b/libcockatrice_card/libcockatrice/card/import/card_name_normalizer.cpp index 91ebd6647..975f7f2d6 100644 --- a/libcockatrice_card/libcockatrice/card/import/card_name_normalizer.cpp +++ b/libcockatrice_card/libcockatrice/card/import/card_name_normalizer.cpp @@ -2,8 +2,14 @@ #include "../database/card_database_manager.h" #include "../printing/exact_card.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include +#include #include +#include +#include +#include /** * @brief Resolves the complete display name of a card. diff --git a/libcockatrice_card/libcockatrice/card/lazy_properties_hash.cpp b/libcockatrice_card/libcockatrice/card/lazy_properties_hash.cpp index 4d903a3bd..a12de469b 100644 --- a/libcockatrice_card/libcockatrice/card/lazy_properties_hash.cpp +++ b/libcockatrice_card/libcockatrice/card/lazy_properties_hash.cpp @@ -1,6 +1,8 @@ #include "lazy_properties_hash.h" -#include +#include +#include +#include LazyPropertiesHash::LazyPropertiesHash() : isMaterialized(true) { diff --git a/libcockatrice_card/libcockatrice/card/lazy_properties_hash.h b/libcockatrice_card/libcockatrice/card/lazy_properties_hash.h index 0ed8c215b..04f5d0251 100644 --- a/libcockatrice_card/libcockatrice/card/lazy_properties_hash.h +++ b/libcockatrice_card/libcockatrice/card/lazy_properties_hash.h @@ -1,8 +1,10 @@ #ifndef COCKATRICE_LAZY_PROPERTIES_HASH_H #define COCKATRICE_LAZY_PROPERTIES_HASH_H +#include #include #include +#include /** * @brief A property map that can lazily deserialize blobs to avoid loading overhead. diff --git a/libcockatrice_card/libcockatrice/card/printing/exact_card.cpp b/libcockatrice_card/libcockatrice/card/printing/exact_card.cpp index 993b5b96e..19e902b27 100644 --- a/libcockatrice_card/libcockatrice/card/printing/exact_card.cpp +++ b/libcockatrice_card/libcockatrice/card/printing/exact_card.cpp @@ -3,6 +3,10 @@ #include "../card_info.h" #include "printing_info.h" +#include +#include +#include + /** * Default constructor. * This will set the CardInfoPtr to null. diff --git a/libcockatrice_card/libcockatrice/card/printing/exact_card.h b/libcockatrice_card/libcockatrice/card/printing/exact_card.h index 74fc75da3..ea49072fb 100644 --- a/libcockatrice_card/libcockatrice/card/printing/exact_card.h +++ b/libcockatrice_card/libcockatrice/card/printing/exact_card.h @@ -2,6 +2,11 @@ #define EXACT_CARD_H #include "../card_info.h" +#include "libcockatrice/card/printing/printing_info.h" + +#include +#include +#include /** * @class ExactCard diff --git a/libcockatrice_card/libcockatrice/card/printing/printing_info.cpp b/libcockatrice_card/libcockatrice/card/printing/printing_info.cpp index 3d185583a..654efac5e 100644 --- a/libcockatrice_card/libcockatrice/card/printing/printing_info.cpp +++ b/libcockatrice_card/libcockatrice/card/printing/printing_info.cpp @@ -2,9 +2,6 @@ #include "../set/card_set.h" -#include -#include - PrintingInfo::PrintingInfo(const CardSetPtr &_set, const LazyPropertiesHash &_properties) : set(_set), properties(_properties) { diff --git a/libcockatrice_card/libcockatrice/card/printing/printing_info.h b/libcockatrice_card/libcockatrice/card/printing/printing_info.h index 974c7bb95..038960e86 100644 --- a/libcockatrice_card/libcockatrice/card/printing/printing_info.h +++ b/libcockatrice_card/libcockatrice/card/printing/printing_info.h @@ -4,9 +4,12 @@ #include "../set/card_set.h" #include "libcockatrice/card/lazy_properties_hash.h" +#include #include #include #include +#include +#include class PrintingInfo; diff --git a/libcockatrice_card/libcockatrice/card/relation/card_relation.cpp b/libcockatrice_card/libcockatrice/card/relation/card_relation.cpp index 8903c892d..410b25682 100644 --- a/libcockatrice_card/libcockatrice/card/relation/card_relation.cpp +++ b/libcockatrice_card/libcockatrice/card/relation/card_relation.cpp @@ -1,7 +1,5 @@ #include "card_relation.h" -#include "card_relation_type.h" - CardRelation::CardRelation(const QString &_name, CardRelationType _attachType, bool _isCreateAllExclusion, diff --git a/libcockatrice_card/libcockatrice/card/relation/card_relation.h b/libcockatrice_card/libcockatrice/card/relation/card_relation.h index a1864f5b2..3a1366f2b 100644 --- a/libcockatrice_card/libcockatrice/card/relation/card_relation.h +++ b/libcockatrice_card/libcockatrice/card/relation/card_relation.h @@ -5,6 +5,7 @@ #include #include +#include /** * @class CardRelation diff --git a/libcockatrice_card/libcockatrice/card/set/card_set.cpp b/libcockatrice_card/libcockatrice/card/set/card_set.cpp index 92060f6c4..e873eeeab 100644 --- a/libcockatrice_card/libcockatrice/card/set/card_set.cpp +++ b/libcockatrice_card/libcockatrice/card/set/card_set.cpp @@ -1,5 +1,7 @@ #include "card_set.h" +#include "libcockatrice/interfaces/interface_card_set_priority_controller.h" + #include #include diff --git a/libcockatrice_card/libcockatrice/card/set/card_set.h b/libcockatrice_card/libcockatrice/card/set/card_set.h index 8e16e01df..538d78852 100644 --- a/libcockatrice_card/libcockatrice/card/set/card_set.h +++ b/libcockatrice_card/libcockatrice/card/set/card_set.h @@ -5,12 +5,14 @@ #include #include #include -#include class CardInfo; +class ICardSetPriorityController; + using CardInfoPtr = QSharedPointer; class CardSet; + using CardSetPtr = QSharedPointer; /** diff --git a/libcockatrice_card/libcockatrice/card/set/card_set_list.cpp b/libcockatrice_card/libcockatrice/card/set/card_set_list.cpp index 8d6aa7365..2e030adab 100644 --- a/libcockatrice_card/libcockatrice/card/set/card_set_list.cpp +++ b/libcockatrice_card/libcockatrice/card/set/card_set_list.cpp @@ -1,5 +1,12 @@ #include "card_set_list.h" +#include "libcockatrice/card/set/card_set.h" + +#include +#include +#include +#include + class CardSetList::KeyCompareFunctor { public: diff --git a/libcockatrice_card/libcockatrice/card/set/card_set_list.h b/libcockatrice_card/libcockatrice/card/set/card_set_list.h index 81d605374..b9c7b2a7a 100644 --- a/libcockatrice_card/libcockatrice/card/set/card_set_list.h +++ b/libcockatrice_card/libcockatrice/card/set/card_set_list.h @@ -4,6 +4,8 @@ #include "card_set.h" #include +#include +#include /** * @class CardSetList diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp index 90f63c09d..821b53dff 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp @@ -2,16 +2,26 @@ #include "deck_list_memento.h" #include "deck_list_plain_text_parser.h" -#include "tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/deck_list_node_tree.h" +#include "libcockatrice/deck_list/sideboard_plan.h" +#include "libcockatrice/utility/playmat_params.h" #include "tree/deck_list_card_node.h" #include "tree/inner_deck_list_node.h" -#include +#include #include -#include #include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include static const QString CURRENT_SIDEBOARD_PLAN_KEY = ""; diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h index 199d3a9a8..6796e9c33 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h @@ -12,20 +12,24 @@ #include "deck_list_memento.h" #include "deck_list_node_tree.h" +#include "libcockatrice/protocol/pb/move_card_to_zone.pb.h" +#include "libcockatrice/utility/card_ref.h" #include "sideboard_plan.h" #include "tree/inner_deck_list_node.h" +#include #include -#include -#include +#include +#include +#include +#include #include -class AbstractDecklistNode; class DecklistCardNode; -class CardDatabase; class QIODevice; class QTextStream; -class InnerDecklistNode; +class QXmlStreamReader; +class QXmlStreamWriter; /** * @class DeckList diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.cpp index b6d0687b4..cba926fd5 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.cpp @@ -1,5 +1,10 @@ #include "deck_list_history_manager.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/deck_list_memento.h" + +#include + void DeckListHistoryManager::save(const DeckListMemento &memento) { undoStack.push(memento); diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.h b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.h index 6acdb199e..dce9e0af8 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_history_manager.h @@ -1,11 +1,13 @@ #ifndef COCKATRICE_DECK_LIST_HISTORY_MANAGER_H #define COCKATRICE_DECK_LIST_HISTORY_MANAGER_H -#include "deck_list.h" #include "deck_list_memento.h" #include #include +#include + +class DeckList; class DeckListHistoryManager : public QObject { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.cpp index 66f228d19..5c26030bf 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.cpp @@ -1,9 +1,19 @@ #include "deck_list_node_tree.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" #include "tree/deck_list_card_node.h" +#include +#include #include #include +#include +#include +#include +#include +#include +#include static constexpr int MAX_DECK_SIZE = 1e5; diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.h b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.h index 2c66b34ff..08b4b0d73 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_node_tree.h @@ -1,11 +1,17 @@ #ifndef COCKATRICE_DECKLIST_NODE_TREE_H #define COCKATRICE_DECKLIST_NODE_TREE_H -#include "libcockatrice/utility/card_ref.h" #include "tree/deck_list_card_node.h" #include "tree/inner_deck_list_node.h" +#include #include +#include +#include + +class AbstractDecklistNode; +class QXmlStreamReader; +class QXmlStreamWriter; class DecklistNodeTree { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.cpp index de50d743b..61af36540 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.cpp @@ -1,10 +1,17 @@ #include "deck_list_plain_text_parser.h" #include "deck_list_node_tree.h" +#include "libcockatrice/deck_list/deck_list.h" #include "tree/inner_deck_list_node.h" +#include +#include #include +#include +#include #include +#include +#include namespace DeckListPlainText { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.h b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.h index e0f456a18..0845f7935 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list_plain_text_parser.h @@ -3,10 +3,11 @@ #include "deck_list.h" -#include #include class QTextStream; +class DecklistNodeTree; +class QString; namespace DeckListPlainText { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.cpp index fd72fea0b..d1d44cca5 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.cpp @@ -1,6 +1,12 @@ #include "playmat_resolver.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/utility/card_ref.h" + +#include #include +#include PlaymatInfo resolveEffectivePlaymat(const DeckList &deck, const PlaymatInfo &force, diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.h b/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.h index 59bc449c8..411ca81fd 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/playmat_resolver.h @@ -1,10 +1,13 @@ #ifndef COCKATRICE_PLAYMAT_RESOLVER_H #define COCKATRICE_PLAYMAT_RESOLVER_H -#include "deck_list.h" +#include "libcockatrice/utility/playmat_params.h" #include +class DeckList; +template class QList; + /** * @brief Resolves the effective playmat for a deck per the resolution chain: * force override > deck-configured playmat > fallback list > none. diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp index 855062c18..3a47bf1a5 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp @@ -1,6 +1,12 @@ #include "sideboard_plan.h" +#include "libcockatrice/protocol/pb/move_card_to_zone.pb.h" + +#include +#include #include +#include +#include namespace { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h index fff4ff2f3..ee29991d6 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h @@ -2,6 +2,7 @@ #define COCKATRICE_SIDEBOARD_PLAN_H #include +#include #include class QXmlStreamWriter; diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.cpp index 685238d53..5c7b4bf84 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.cpp @@ -1,5 +1,10 @@ #include "abstract_deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" + +#include +#include + bool AbstractDecklistCardNode::compare(AbstractDecklistNode *other) const { switch (sortMethod) { diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.h b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.h index 0942a4601..ebfd9a0b6 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.h @@ -13,6 +13,10 @@ #include "abstract_deck_list_node.h" +#include + +class InnerDecklistNode; + /** * @class AbstractDecklistCardNode * @ingroup DeckModels diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_node.h b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_node.h index 38d1d44b8..406c6fb4d 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_node.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_node.h @@ -17,7 +17,9 @@ #ifndef COCKATRICE_ABSTRACT_DECK_LIST_NODE_H #define COCKATRICE_ABSTRACT_DECK_LIST_NODE_H -#include +#include + +class QXmlStreamWriter; /** * @enum DeckSortMethod diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.cpp index 1791c09a6..803737f1e 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.cpp @@ -1,5 +1,9 @@ #include "deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_card_node.h" + +class InnerDecklistNode; + DecklistCardNode::DecklistCardNode(DecklistCardNode *other, InnerDecklistNode *_parent) : AbstractDecklistCardNode(_parent), name(other->getName()), number(other->getNumber()), cardSetShortName(other->getCardSetShortName()), cardSetNumber(other->getCardCollectorNumber()), diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h b/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h index 3bab5405a..c96a764af 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h @@ -14,7 +14,11 @@ #include "abstract_deck_list_card_node.h" +#include #include +#include + +class InnerDecklistNode; /** * @class DecklistCardNode diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.cpp index 86f7f5363..b7b1e0b8f 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.cpp @@ -1,6 +1,18 @@ #include "inner_deck_list_node.h" #include "deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_card_node.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include InnerDecklistNode::InnerDecklistNode(InnerDecklistNode *other, InnerDecklistNode *_parent) : AbstractDecklistNode(_parent), name(other->getName()) diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.h b/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.h index 8404d7116..6086f9efa 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.h @@ -19,7 +19,13 @@ #include "abstract_deck_list_node.h" #include +#include #include +#include +#include +#include + +class QXmlStreamReader; /** @brief Constant for the "main" deck zone name. */ #define DECK_ZONE_MAIN "main" diff --git a/libcockatrice_filters/libcockatrice/filters/filter_card.cpp b/libcockatrice_filters/libcockatrice/filters/filter_card.cpp index 5fdce7ae0..26cddd53c 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_card.cpp +++ b/libcockatrice_filters/libcockatrice/filters/filter_card.cpp @@ -1,6 +1,9 @@ #include "filter_card.h" #include +#include +#include +#include QJsonObject CardFilter::toJson() const { diff --git a/libcockatrice_filters/libcockatrice/filters/filter_card.h b/libcockatrice_filters/libcockatrice/filters/filter_card.h index bb1e0ef53..e6a37ee40 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_card.h +++ b/libcockatrice_filters/libcockatrice/filters/filter_card.h @@ -7,8 +7,10 @@ #ifndef CARDFILTER_H #define CARDFILTER_H +#include #include #include +#include class CardFilter : public QObject { diff --git a/libcockatrice_filters/libcockatrice/filters/filter_string.cpp b/libcockatrice_filters/libcockatrice/filters/filter_string.cpp index df0c70ae7..bc137b0f6 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_string.cpp +++ b/libcockatrice_filters/libcockatrice/filters/filter_string.cpp @@ -1,12 +1,35 @@ #include "filter_string.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/card/set/card_set_list.h" + #include +#include +#include #include +#include +#include #include +#include +#include #include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include static peg::parser search(R"( Start <- QueryPartList diff --git a/libcockatrice_filters/libcockatrice/filters/filter_string.h b/libcockatrice_filters/libcockatrice/filters/filter_string.h index 015df0cf4..2abe95201 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_string.h +++ b/libcockatrice_filters/libcockatrice/filters/filter_string.h @@ -7,15 +7,13 @@ #ifndef FILTER_STRING_H #define FILTER_STRING_H -#include "filter_tree.h" - #include -#include #include #include #include #include -#include + +struct CardSearchLanguage; inline Q_LOGGING_CATEGORY(FilterStringLog, "filter_string"); @@ -29,6 +27,7 @@ namespace peg { template struct AstBase; struct EmptyType; + typedef AstBase Ast; } // namespace peg diff --git a/libcockatrice_filters/libcockatrice/filters/filter_tree.cpp b/libcockatrice_filters/libcockatrice/filters/filter_tree.cpp index a5d91d9d3..742b44e97 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_tree.cpp +++ b/libcockatrice_filters/libcockatrice/filters/filter_tree.cpp @@ -1,8 +1,16 @@ #include "filter_tree.h" #include "filter_card.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include #include +#include +#include +#include +#include template FilterTreeNode *FilterTreeBranch::nodeAt(int i) const { diff --git a/libcockatrice_filters/libcockatrice/filters/filter_tree.h b/libcockatrice_filters/libcockatrice/filters/filter_tree.h index dd47a1ebc..0defd466b 100644 --- a/libcockatrice_filters/libcockatrice/filters/filter_tree.h +++ b/libcockatrice_filters/libcockatrice/filters/filter_tree.h @@ -8,13 +8,16 @@ #define FILTERTREE_H #include "filter_card.h" +#include "libcockatrice/card/card_info.h" #include #include -#include -#include +#include +#include #include +struct CardSearchLanguage; + class FilterTreeNode { private: @@ -120,6 +123,7 @@ public: class FilterItemList; class FilterTree; + class LogicMap : public FilterTreeBranch { @@ -142,6 +146,7 @@ public: }; class FilterItem; + class FilterItemList : public FilterTreeBranch { private: diff --git a/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_preference_provider.h b/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_preference_provider.h index a6cf941fb..2510919ca 100644 --- a/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_preference_provider.h +++ b/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_preference_provider.h @@ -8,7 +8,6 @@ class ICardPreferenceProvider public: virtual ~ICardPreferenceProvider() = default; [[nodiscard]] virtual QString getCardPreferenceOverride(const QString &cardName) const = 0; - [[nodiscard]] virtual bool getIncludeRebalancedCards() const = 0; }; #endif // COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H diff --git a/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_set_priority_controller.h b/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_set_priority_controller.h index 36e748006..6b3e684d7 100644 --- a/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_set_priority_controller.h +++ b/libcockatrice_interfaces/libcockatrice/interfaces/interface_card_set_priority_controller.h @@ -2,6 +2,7 @@ #define COCKATRICE_INTERFACE_CARD_SET_PRIORITY_CONTROLLER_H #include +#include class ICardSetPriorityController { @@ -46,6 +47,16 @@ public: */ virtual SetOptions getSetOptions(QString shortName) const = 0; + /** + * @brief Returns the short names of every set currently marked as enabled. + * + * Callers fold this into the card database cache source hash so that + * toggling set enablement invalidates the cache. + * + * @return The enabled set short names, sorted alphabetically. + */ + virtual QStringList getEnabledSetNames() const = 0; + virtual void saveSets(const QVector &data) = 0; }; diff --git a/libcockatrice_interfaces/libcockatrice/interfaces/interface_cards_display_settings_provider.h b/libcockatrice_interfaces/libcockatrice/interfaces/interface_cards_display_settings_provider.h index 2821fb96e..a5ab4fc37 100644 --- a/libcockatrice_interfaces/libcockatrice/interfaces/interface_cards_display_settings_provider.h +++ b/libcockatrice_interfaces/libcockatrice/interfaces/interface_cards_display_settings_provider.h @@ -14,7 +14,6 @@ public: [[nodiscard]] virtual bool getBumpSetsWithCardsInDeckToTop() const = 0; [[nodiscard]] virtual int getPrintingSelectorSortOrder() const = 0; [[nodiscard]] virtual int getPrintingSelectorCardSize() const = 0; - [[nodiscard]] virtual bool getIncludeRebalancedCards() const = 0; [[nodiscard]] virtual bool getPrintingSelectorNavigationButtonsVisible() const = 0; [[nodiscard]] virtual bool getTapAnimation() const = 0; [[nodiscard]] virtual bool getArrowDrawAnimation() const = 0; diff --git a/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_preference_provider.h b/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_preference_provider.h index 3781f4b63..f846d51e8 100644 --- a/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_preference_provider.h +++ b/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_preference_provider.h @@ -9,11 +9,6 @@ public: { return {}; } - - [[nodiscard]] bool getIncludeRebalancedCards() const override - { - return true; - } }; #endif // COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H diff --git a/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_set_priority_controller.h b/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_set_priority_controller.h index 8cc2011bd..94e1f0c9a 100644 --- a/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_set_priority_controller.h +++ b/libcockatrice_interfaces/libcockatrice/interfaces/noop_card_set_priority_controller.h @@ -34,6 +34,11 @@ public: return {0, true, true}; } + QStringList getEnabledSetNames() const override + { + return {}; + } + void saveSets(const QVector & /* data */) override { } diff --git a/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.cpp b/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.cpp index f31463b50..b99b8b0f7 100644 --- a/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.cpp @@ -1,5 +1,14 @@ #include "card_completer_proxy_model.h" +#include +#include +#include +#include +#include +#include + +class QObject; + CardCompleterProxyModel::CardCompleterProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { } diff --git a/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.h b/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.h index 91dc06335..8aa671af7 100644 --- a/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card/card_completer_proxy_model.h @@ -8,6 +8,9 @@ #define CARD_COMPLETER_PROXY_MODEL_H #include +#include + +class QObject; class CardCompleterProxyModel : public QSortFilterProxyModel { diff --git a/libcockatrice_models/libcockatrice/models/database/card/card_search_model.cpp b/libcockatrice_models/libcockatrice/models/database/card/card_search_model.cpp index 3a734ed37..5bde6e3fc 100644 --- a/libcockatrice_models/libcockatrice/models/database/card/card_search_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card/card_search_model.cpp @@ -3,6 +3,10 @@ #include "../card_database_display_model.h" #include "../card_database_model.h" +#include +#include +#include +#include #include #include diff --git a/libcockatrice_models/libcockatrice/models/database/card/card_search_model.h b/libcockatrice_models/libcockatrice/models/database/card/card_search_model.h index b877a9385..08d0e8636 100644 --- a/libcockatrice_models/libcockatrice/models/database/card/card_search_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card/card_search_model.h @@ -7,9 +7,20 @@ #ifndef CARD_SEARCH_MODEL_H #define CARD_SEARCH_MODEL_H -#include "../card_database_display_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/card_localization.h" #include +#include +#include +#include +#include +#include +#include +#include + +class CardDatabaseDisplayModel; +class QObject; class CardSearchModel : public QAbstractListModel { diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp index 7f89677c8..39bb8314c 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp @@ -1,6 +1,23 @@ #include "card_database_display_model.h" #include "card_database_model.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/filters/filter_string.h" +#include "libcockatrice/filters/filter_tree.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QObject; CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent) : QSortFilterProxyModel(parent), isToken(ShowAll), filterString(nullptr) diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h index e6aadd8c6..d12dd1fb4 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h @@ -8,12 +8,21 @@ #ifndef COCKATRICE_CARD_DATABASE_DISPLAY_MODEL_H #define COCKATRICE_CARD_DATABASE_DISPLAY_MODEL_H +#include "libcockatrice/card/card_info.h" + +#include +#include #include +#include #include #include #include +#include class FilterTree; +class QObject; +template class QMap; + class CardDatabaseDisplayModel : public QSortFilterProxyModel { Q_OBJECT diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_database_model.cpp index ecd26a9f8..1ede554f8 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_database_model.cpp @@ -1,8 +1,16 @@ #include "card_database_model.h" -#include +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" + +#include +#include +#include +#include #include +class QObject; + #define CARDDBMODEL_COLUMNS 6 CardDatabaseModel::CardDatabaseModel(CardDatabase *_db, bool _showOnlyCardsFromEnabledSets, QObject *parent) diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_model.h b/libcockatrice_models/libcockatrice/models/database/card_database_model.h index ad84de6f4..208240109 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card_database_model.h @@ -7,10 +7,17 @@ #ifndef CARDDATABASEMODEL_H #define CARDDATABASEMODEL_H +#include "libcockatrice/card/card_info.h" + #include #include +#include #include -#include +#include +#include + +class CardDatabase; +class QObject; class CardDatabaseModel : public QAbstractListModel { diff --git a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp index 8fd5311f2..1bc1b9e38 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp @@ -1,6 +1,19 @@ #include "card_sets_model.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/interfaces/interface_card_set_priority_controller.h" + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include SetsModel::SetsModel(CardDatabase *_db, QObject *parent) : QAbstractTableModel(parent), sets(_db->getSetList()) { diff --git a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.h b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.h index 2adf71def..354414dc8 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.h @@ -7,13 +7,24 @@ #ifndef SETSMODEL_H #define SETSMODEL_H +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/set/card_set_list.h" + #include +#include #include +#include +#include #include #include -#include +#include +#include +#include +#include +#include -class SetsProxyModel; +class CardDatabase; +class QObject; class SetsMimeData : public QMimeData { diff --git a/libcockatrice_models/libcockatrice/models/database/token/token_display_model.cpp b/libcockatrice_models/libcockatrice/models/database/token/token_display_model.cpp index 4282c6dc8..e08183576 100644 --- a/libcockatrice_models/libcockatrice/models/database/token/token_display_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/token/token_display_model.cpp @@ -1,6 +1,12 @@ #include "token_display_model.h" #include "../card_database_model.h" +#include "card_database_display_model.h" +#include "libcockatrice/card/card_info.h" + +#include + +class QObject; TokenDisplayModel::TokenDisplayModel(QObject *parent) : CardDatabaseDisplayModel(parent) { diff --git a/libcockatrice_models/libcockatrice/models/database/token/token_display_model.h b/libcockatrice_models/libcockatrice/models/database/token/token_display_model.h index c8f767189..a8625368f 100644 --- a/libcockatrice_models/libcockatrice/models/database/token/token_display_model.h +++ b/libcockatrice_models/libcockatrice/models/database/token/token_display_model.h @@ -9,6 +9,11 @@ #include "../card_database_display_model.h" +#include +#include + +class QObject; + class TokenDisplayModel : public CardDatabaseDisplayModel { Q_OBJECT diff --git a/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.cpp b/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.cpp index 89a1f71b1..9636ed665 100644 --- a/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.cpp @@ -2,9 +2,13 @@ #include "../card_database_display_model.h" #include "../card_database_model.h" +#include "libcockatrice/card/set/card_set.h" +#include #include +class QObject; + TokenEditModel::TokenEditModel(QObject *parent) : CardDatabaseDisplayModel(parent) { } diff --git a/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.h b/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.h index 92dfaadd7..2f3398899 100644 --- a/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.h +++ b/libcockatrice_models/libcockatrice/models/database/token/token_edit_model.h @@ -9,6 +9,11 @@ #include "../card_database_display_model.h" +#include +#include + +class QObject; + class TokenEditModel : public CardDatabaseDisplayModel { Q_OBJECT diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.cpp b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.cpp index a5628a844..4b4088972 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.cpp +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.cpp @@ -1,6 +1,27 @@ #include "deck_list_model.h" +#include "deck_list_model_custom_zones.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/format/format_legality_rules.h" +#include "libcockatrice/card/printing/exact_card.h" +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/deck_list_node_tree.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/tree/deck_list_card_node.h" + +#include +#include +#include +#include +#include +#include #include +#include +#include + +class QObject; DeckListModel::DeckListModel(QObject *parent) : QAbstractItemModel(parent), lastKnownColumn(1), lastKnownOrder(Qt::AscendingOrder) diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h index ce6d7f8cb..7334d48ef 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h @@ -1,18 +1,26 @@ #ifndef DECKLISTMODEL_H #define DECKLISTMODEL_H -#include "deck_list_model_custom_zones.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "libcockatrice/utility/card_ref.h" #include <../../../../libcockatrice_deck_list/libcockatrice/deck_list/tree/abstract_deck_list_card_node.h> #include <../../../../libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h> #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include -class CardDatabase; -class QPrinter; -class QTextCursor; +class AbstractDecklistNode; +class DeckList; +class ExactCard; +class QObject; /** * @namespace DeckRoles diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.cpp b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.cpp index 1dc745e63..419c38b04 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.cpp +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.cpp @@ -1,10 +1,14 @@ #include "deck_list_model_custom_zones.h" #include "deck_list_model.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" #include <../../../../libcockatrice_deck_list/libcockatrice/deck_list/tree/deck_list_card_node.h> #include +#include #include +#include namespace DeckListModelCustomZones { diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.h b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.h index 518a9e1d2..53bdeaa1e 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.h +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model_custom_zones.h @@ -4,7 +4,10 @@ #include <../../../../libcockatrice_deck_list/libcockatrice/deck_list/tree/inner_deck_list_node.h> #include #include -#include +#include +#include + +class AbstractDecklistNode; /** * @class DecklistModelSubZoneNode diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.cpp b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.cpp index 3d433153a..dcb294ec8 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.cpp +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.cpp @@ -1,6 +1,16 @@ #include "deck_list_sort_filter_proxy_model.h" #include "deck_list_model.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_manager.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/printing/exact_card.h" + +#include +#include +#include +#include +#include bool DeckListSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.h b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.h index 1565417f0..522ed1e23 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.h +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_sort_filter_proxy_model.h @@ -7,8 +7,13 @@ #ifndef COCKATRICE_DECK_LIST_SORT_FILTER_PROXY_MODEL_H #define COCKATRICE_DECK_LIST_SORT_FILTER_PROXY_MODEL_H +#include #include -#include +#include +#include +#include + +class QObject; class DeckListSortFilterProxyModel : public QSortFilterProxyModel { diff --git a/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.cpp b/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.cpp index 687d93666..d66653fb1 100644 --- a/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.cpp +++ b/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.cpp @@ -1,6 +1,25 @@ #include "abstract_client.h" +#include "libcockatrice/protocol/pb/admin_commands.pb.h" +#include "libcockatrice/protocol/pb/developer_commands.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/moderator_commands.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_commands.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" + +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include #include diff --git a/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.h b/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.h index af22a5c9d..442e96eb2 100644 --- a/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.h +++ b/libcockatrice_network/libcockatrice/network/client/abstract/abstract_client.h @@ -11,10 +11,27 @@ #include #include +#include #include -#include -#include +#include +#include +#include + +// IWYU pragma: keep +// ServerInfo_User appears in signal signatures, including inside QList, so the +// moc-generated code needs the complete type. +#include #include +#include + +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google +template class QList; inline Q_LOGGING_CATEGORY(AbstractClientLog, "abstract_client"); @@ -36,7 +53,6 @@ class Event_NotifyUser; class Event_ConnectionClosed; class Event_ServerShutdown; class Event_ReplayAdded; -class FeatureSet; enum ClientStatus { diff --git a/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.cpp b/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.cpp index 98b353fdf..bc6230621 100644 --- a/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.cpp +++ b/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.cpp @@ -1,7 +1,10 @@ #include "latency_tracker.h" +#include +#include #include #include +#include void LatencyTracker::addSample(qint64 ms) { diff --git a/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.h b/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.h index 75f18ac0c..cae11ea4d 100644 --- a/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.h +++ b/libcockatrice_network/libcockatrice/network/client/abstract/latency_tracker.h @@ -6,8 +6,10 @@ #ifndef LATENCY_TRACKER_H #define LATENCY_TRACKER_H +#include #include #include +#include #include /** diff --git a/libcockatrice_network/libcockatrice/network/client/local/local_client.cpp b/libcockatrice_network/libcockatrice/network/client/local/local_client.cpp index eefa3a2f3..c1c1cc976 100644 --- a/libcockatrice_network/libcockatrice/network/client/local/local_client.cpp +++ b/libcockatrice_network/libcockatrice/network/client/local/local_client.cpp @@ -1,9 +1,17 @@ #include "local_client.h" #include "../../server/local/local_server_interface.h" +#include "abstract_client.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" +#include +#include #include #include +#include + +class QObject; LocalClient::LocalClient(LocalServerInterface *_lsi, const QString &_playerName, diff --git a/libcockatrice_network/libcockatrice/network/client/local/local_client.h b/libcockatrice_network/libcockatrice/network/client/local/local_client.h index 9e1c89ddd..3ae570255 100644 --- a/libcockatrice_network/libcockatrice/network/client/local/local_client.h +++ b/libcockatrice_network/libcockatrice/network/client/local/local_client.h @@ -10,6 +10,11 @@ #include "../abstract/abstract_client.h" #include +#include +#include + +class QObject; +class ServerMessage; inline Q_LOGGING_CATEGORY(LocalClientLog, "local_client"); diff --git a/libcockatrice_network/libcockatrice/network/client/remote/remote_client.cpp b/libcockatrice_network/libcockatrice/network/client/remote/remote_client.cpp index de2cc720f..feda9e3f4 100644 --- a/libcockatrice_network/libcockatrice/network/client/remote/remote_client.cpp +++ b/libcockatrice_network/libcockatrice/network/client/remote/remote_client.cpp @@ -1,5 +1,8 @@ #include "remote_client.h" +#include "abstract_client.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "version_string.h" #include @@ -7,13 +10,21 @@ #include #include #include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include #include #include #include -#include #include #include #include @@ -22,6 +33,10 @@ #include #include #include +#include + +class Event_ConnectionClosed; +class QObject; static const unsigned int protocolVersion = 14; diff --git a/libcockatrice_network/libcockatrice/network/client/remote/remote_client.h b/libcockatrice_network/libcockatrice/network/client/remote/remote_client.h index 862dac06e..4d8c24fd2 100644 --- a/libcockatrice_network/libcockatrice/network/client/remote/remote_client.h +++ b/libcockatrice_network/libcockatrice/network/client/remote/remote_client.h @@ -8,11 +8,23 @@ #define REMOTECLIENT_H #include "../abstract/abstract_client.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include +#include #include +#include +#include #include -#include -#include +#include +#include + +class Event_ConnectionClosed; +class Event_ServerIdentification; +class INetworkSettingsProvider; +class QObject; +template class QList; inline Q_LOGGING_CATEGORY(RemoteClientLog, "remote_client"); diff --git a/libcockatrice_network/libcockatrice/network/server/local/local_server.cpp b/libcockatrice_network/libcockatrice/network/server/local/local_server.cpp index 8f9d82aa4..ebfc9bdeb 100644 --- a/libcockatrice_network/libcockatrice/network/server/local/local_server.cpp +++ b/libcockatrice_network/libcockatrice/network/server/local/local_server.cpp @@ -1,8 +1,17 @@ #include "local_server.h" +#include "../remote/server.h" +#include "../remote/server_database_interface.h" +#include "../remote/server_protocolhandler.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "local_server_interface.h" #include <../remote/server_room.h> +#include +#include +#include + +class QObject; LocalServer::LocalServer(QObject *parent) : Server(parent) { diff --git a/libcockatrice_network/libcockatrice/network/server/local/local_server.h b/libcockatrice_network/libcockatrice/network/server/local/local_server.h index 0112afa72..ee8d487d2 100644 --- a/libcockatrice_network/libcockatrice/network/server/local/local_server.h +++ b/libcockatrice_network/libcockatrice/network/server/local/local_server.h @@ -9,8 +9,11 @@ #include <../remote/server.h> #include <../remote/server_database_interface.h> +#include +#include class LocalServerInterface; +class QObject; class LocalServer : public Server { diff --git a/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.cpp b/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.cpp index bb86198af..b7c8d4bfa 100644 --- a/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.cpp +++ b/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.cpp @@ -1,8 +1,10 @@ #include "local_server_interface.h" +#include "../remote/server_protocolhandler.h" #include "local_server.h" -#include +class CommandContainer; +class Server_DatabaseInterface; LocalServerInterface::LocalServerInterface(LocalServer *_server, Server_DatabaseInterface *_databaseInterface) : Server_ProtocolHandler(_server, _databaseInterface, _server) diff --git a/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.h b/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.h index 44e3b3e53..8aadb40ca 100644 --- a/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.h +++ b/libcockatrice_network/libcockatrice/network/server/local/local_server_interface.h @@ -8,8 +8,13 @@ #define LOCALSERVERINTERFACE_H #include <../remote/server_protocolhandler.h> +#include +#include class LocalServer; +class CommandContainer; +class ServerMessage; +class Server_DatabaseInterface; class LocalServerInterface : public Server_ProtocolHandler { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.cpp index a6280ffa1..5b8d901bb 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.cpp @@ -4,10 +4,16 @@ #include "../server_abstractuserinterface.h" #include "../server_database_interface.h" #include "../server_room.h" -#include "server_card.h" +#include "game/server_abstract_player.h" +#include "libcockatrice/protocol/pb/event_leave.pb.h" +#include "libcockatrice/protocol/pb/game_commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" #include "server_game.h" -#include "server_player.h" +#include "server_response_containers.h" +#include "serverinfo_user_container.h" +#include +#include #include #include #include @@ -50,6 +56,7 @@ #include #include #include +#include Server_AbstractParticipant::Server_AbstractParticipant(Server_Game *_game, int _playerId, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.h index c78ae78c1..195da9b7f 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_participant.h @@ -5,8 +5,8 @@ #include "server_arrowtarget.h" #include -#include #include +#include class Server_Game; class Server_AbstractUserInterface; @@ -17,7 +17,6 @@ class GameEventContainer; class GameEventStorage; class ResponseContainer; class GameCommand; - class Command_KickFromGame; class Command_LeaveGame; class Command_GameSay; diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.cpp index 6b4101a99..47c810d0d 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.cpp @@ -1,14 +1,33 @@ #include "server_abstract_player.h" +#include "game/server_abstract_participant.h" +#include "game/server_arrowtarget.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" +#include "libcockatrice/protocol/pb/color.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_arrow.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_card.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_cardcounter.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_zone.pb.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" #include "server_arrow.h" #include "server_card.h" #include "server_cardzone.h" #include "server_game.h" #include "server_move_card_struct.h" +#include "server_response_containers.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include @@ -50,8 +69,11 @@ #include #include #include -#include #include +#include +#include + +class Server_AbstractUserInterface; Server_AbstractPlayer::Server_AbstractPlayer(Server_Game *_game, int _playerId, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.h index 4cc79c5fe..eff5034b4 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_abstract_player.h @@ -1,25 +1,32 @@ #ifndef ABSTRACT_PLAYER_H #define ABSTRACT_PLAYER_H -#include "../serverinfo_user_container.h" +#include "libcockatrice/protocol/pb/response.pb.h" #include "server_abstract_participant.h" #include #include +#include class CardToMove; class DeckList; class Server_Arrow; class Server_Card; class Server_CardZone; -class Server_Counter; struct MoveCardStruct; +class GameEventStorage; +class ServerInfo_User; +class Server_AbstractUserInterface; +class Server_Game; +enum CardAttribute : int; +template class QList; class Server_AbstractPlayer : public Server_AbstractParticipant { Q_OBJECT private: class MoveCardCompareFunctor; + QMap arrows; void sendCreateTokenEvents(Server_CardZone *zone, Server_Card *card, int xCoord, int yCoord, GameEventStorage &ges); diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrow.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrow.cpp index 2ad38b977..b5ccff8fe 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrow.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrow.cpp @@ -1,10 +1,16 @@ #include "server_arrow.h" +#include "game/server_abstract_player.h" +#include "game/server_arrowtarget.h" +#include "libcockatrice/protocol/pb/color.pb.h" #include "server_card.h" #include "server_cardzone.h" #include "server_player.h" +#include +#include #include +#include Server_Arrow::Server_Arrow(int _id, Server_Card *_startCard, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrowtarget.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrowtarget.h index 5a080018d..c4da725c2 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrowtarget.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_arrowtarget.h @@ -2,6 +2,7 @@ #define SERVER_ARROWTARGET_H #include +#include class Server_ArrowTarget : public QObject { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.cpp index 8c7feadba..c79f13634 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.cpp @@ -19,16 +19,22 @@ ***************************************************************************/ #include "server_card.h" +#include "game/server_abstract_player.h" +#include "libcockatrice/protocol/pb/card_attributes.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_cardcounter.pb.h" +#include "libcockatrice/utility/card_ref.h" #include "server_cardzone.h" -#include "server_player.h" +#include +#include #include +#include #include #include #include #include #include -#include +#include Server_Card::Server_Card(const CardRef &cardRef, int _id, int _coord_x, int _coord_y, Server_CardZone *_zone) : zone(_zone), id(_id), coord_x(_coord_x), coord_y(_coord_y), cardRef(cardRef), tapped(false), attacking(false), diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.h index a2698ad61..cffd9eb40 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_card.h @@ -22,15 +22,18 @@ #include "server_arrowtarget.h" +#include #include #include -#include -#include +#include #include +#include class Server_CardZone; class Event_SetCardCounter; class Event_SetCardAttr; +class ServerInfo_Card; +enum CardAttribute : int; class Server_Card : public Server_ArrowTarget { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.cpp index 1db4f9c4c..5f40aa480 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.cpp @@ -19,13 +19,21 @@ ***************************************************************************/ #include "server_cardzone.h" +#include "libcockatrice/protocol/pb/serverinfo_zone.pb.h" #include "server_abstract_player.h" #include "server_card.h" #include +#include +#include +#include #include +#include +#include #include #include +#include +#include Server_CardZone::Server_CardZone(Server_AbstractPlayer *_player, const QString &_name, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.h index 77fea54ca..9ed39a159 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_cardzone.h @@ -20,15 +20,16 @@ #ifndef SERVER_CARDZONE_H #define SERVER_CARDZONE_H +#include #include #include #include +#include #include class Server_Card; class Server_AbstractPlayer; class Server_AbstractParticipant; -class Server_Game; class GameEventStorage; class Server_CardZone diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_counter.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_counter.cpp index b18e11c2b..f3dcb0fb1 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_counter.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_counter.cpp @@ -1,6 +1,9 @@ #include "server_counter.h" +#include "libcockatrice/protocol/pb/color.pb.h" + #include +#include Server_Counter::Server_Counter(int _id, const QString &_name, const color &_counterColor, int _radius, int _count) : id(_id), name(_name), counterColor(_counterColor), radius(_radius), count(_count) diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp index 131ff1077..330d473b2 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp @@ -23,21 +23,44 @@ #include "../server_database_interface.h" #include "../server_protocolhandler.h" #include "../server_room.h" +#include "game/game_config.h" +#include "game/server_abstract_participant.h" +#include "game/server_arrowtarget.h" +#include "game/server_deck_validation_strategy.h" +#include "game/server_game_lifecycle_strategy.h" +#include "game/server_match_result_strategy.h" #include "libcockatrice/protocol/pb/command_move_card.pb.h" +#include "libcockatrice/protocol/pb/game_event.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_gametype.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay_match.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" #include "server_abstract_player.h" +#include "server_abstractuserinterface.h" #include "server_arrow.h" #include "server_card.h" #include "server_cardzone.h" #include "server_player.h" +#include "server_response_containers.h" #include "server_spectator.h" #include #include +#include +#include #include +#include +#include +#include #include #include -#include -#include +#include #include #include #include @@ -53,6 +76,9 @@ #include #include #include +#include +#include +#include Server_Game::Server_Game(const GameConfig &config, Server_Room *_room) : QObject(), room(_room), nextPlayerId(0), hostId(0), creatorInfo(new ServerInfo_User(config.creatorInfo)), diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.h index 1ed4fe4ca..c7f8d0929 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.h @@ -21,21 +21,25 @@ #define SERVERGAME_H #include "../server_response_containers.h" -#include "game_config.h" -#include "server_deck_validation_strategy.h" -#include "server_game_lifecycle_strategy.h" -#include "server_match_result_strategy.h" +#include "libcockatrice/protocol/pb/game_event_context.pb.h" +// IWYU pragma: keep +// ServerInfo_Game is passed by value to the gameInfoChanged() signal, so the +// moc-generated code needs the complete type. #include +#include #include -#include #include +#include #include #include -#include +#include +#include +#include #include #include #include +#include class QTimer; class GameEventContainer; @@ -47,6 +51,17 @@ class ServerInfo_User; class ServerInfo_Game; class Server_AbstractUserInterface; class Event_GameStateChanged; +class Server_DeckValidationStrategy; +class Server_GameLifecycleStrategy; +class Server_MatchResultStrategy; +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google +struct GameConfig; class Server_Game : public QObject { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.cpp index cafa33c07..a4c904c01 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.cpp @@ -1,23 +1,34 @@ #include "server_player.h" #include "../server.h" -#include "../server_abstractuserinterface.h" #include "../server_database_interface.h" #include "../server_room.h" +#include "game/server_abstract_participant.h" +#include "game/server_abstract_player.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" +#include "libcockatrice/protocol/pb/color.pb.h" +#include "libcockatrice/protocol/pb/move_card_to_zone.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_card.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_counter.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_zone.pb.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" #include "server_card.h" #include "server_cardzone.h" #include "server_counter.h" #include "server_game.h" #include "server_move_card_struct.h" +#include "server_response_containers.h" -#include -#include -#include +#include +#include +#include +#include +#include +#include #include -#include -#include #include -#include #include #include #include @@ -43,13 +54,15 @@ #include #include #include -#include #include #include -#include #include #include #include +#include +#include + +class Server_AbstractUserInterface; Server_Player::Server_Player(Server_Game *_game, int _playerId, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.h index c35428480..5d514a344 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_player.h @@ -1,8 +1,19 @@ #ifndef PLAYER_H #define PLAYER_H +#include "libcockatrice/protocol/pb/response.pb.h" #include "server_abstract_player.h" +#include +#include +#include + +class GameEventStorage; +class ServerInfo_User; +class Server_AbstractUserInterface; +class Server_Counter; +class Server_Game; + class Server_Player : public Server_AbstractPlayer { Q_OBJECT diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.cpp index bc873e386..d1c369949 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.cpp @@ -1,5 +1,11 @@ #include "server_spectator.h" +#include "game/server_abstract_participant.h" + +class ServerInfo_User; +class Server_AbstractUserInterface; +class Server_Game; + Server_Spectator::Server_Spectator(Server_Game *_game, int _playerId, const ServerInfo_User &_userInfo, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.h b/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.h index 4d3928a63..2a8995ec3 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_spectator.h @@ -3,6 +3,12 @@ #include "server_abstract_participant.h" +#include + +class ServerInfo_User; +class Server_AbstractUserInterface; +class Server_Game; + class Server_Spectator : public Server_AbstractParticipant { Q_OBJECT diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server.cpp b/libcockatrice_network/libcockatrice/network/server/remote/server.cpp index 7abccfca8..73b13e23e 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/server.cpp @@ -19,16 +19,36 @@ ***************************************************************************/ #include "server.h" +#include "game/server_abstract_participant.h" #include "game/server_game.h" -#include "game/server_player.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/game_commands.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_commands.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_ban.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_room.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "server_abstractuserinterface.h" #include "server_database_interface.h" #include "server_protocolhandler.h" #include "server_remoteuserinterface.h" +#include "server_response_containers.h" #include "server_room.h" +#include "serverinfo_user_container.h" -#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include @@ -36,6 +56,10 @@ #include #include #include +#include +#include +#include +#include Server::Server(QObject *parent) : QObject(parent), nextLocalGameId(0), tcpUserCount(0), webSocketUserCount(0) { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server.h b/libcockatrice_network/libcockatrice/network/server/remote/server.h index 3d27f4210..99247bb67 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server.h @@ -3,30 +3,32 @@ #include "server_player_reference.h" +#include +#include #include #include +#include #include #include -#include -#include -#include +#include +#include +#include class Server_DatabaseInterface; -class Server_Game; class Server_Room; class Server_ProtocolHandler; class Server_AbstractUserInterface; -class GameReplay; class IslMessage; class SessionEvent; class RoomEvent; -class DeckList; class ServerInfo_Game; class ServerInfo_Room; class Response; class GameEventContainer; class CommandContainer; class Command_JoinGame; +class QThread; +class ServerInfo_User; enum AuthenticationResult { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.cpp b/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.cpp index 31fa13d81..25aa415fc 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.cpp @@ -1,7 +1,13 @@ #include "server_abstractuserinterface.h" +#include "game/server_abstract_participant.h" #include "game/server_game.h" -#include "game/server_player.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" #include "server.h" #include "server_player_reference.h" #include "server_response_containers.h" @@ -9,8 +15,13 @@ #include #include +#include +#include +#include #include -#include +#include +#include +#include void Server_AbstractUserInterface::sendProtocolItemByType(ServerMessage::MessageType type, const ::google::protobuf::Message &item) diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.h b/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.h index 2da72c01d..a19475e34 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_abstractuserinterface.h @@ -5,6 +5,8 @@ #include #include +#include +#include #include #include @@ -12,9 +14,15 @@ class SessionEvent; class GameEventContainer; class RoomEvent; class ResponseContainer; - class Server; class Server_Game; +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google class Server_AbstractUserInterface : public ServerInfo_User_Container { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_database_interface.h b/libcockatrice_network/libcockatrice/network/server/remote/server_database_interface.h index 1e4fc990b..e0be7990b 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_database_interface.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_database_interface.h @@ -1,9 +1,22 @@ #ifndef SERVER_DATABASE_INTERFACE_H #define SERVER_DATABASE_INTERFACE_H +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" #include "server.h" +#include #include +#include +#include +#include +#include + +class DeckList; +class GameReplay; +class ServerInfo_Game; +class Server_ProtocolHandler; +template class QList; +template class QSet; class Server_DatabaseInterface : public QObject { diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.cpp b/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.cpp index 8422d703d..fc5cfa148 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.cpp @@ -1,20 +1,43 @@ #include "server_protocolhandler.h" #include "game/game_config.h" +#include "game/server_abstract_participant.h" #include "game/server_game.h" -#include "game/server_player.h" +#include "libcockatrice/protocol/pb/admin_commands.pb.h" +#include "libcockatrice/protocol/pb/developer_commands.pb.h" +#include "libcockatrice/protocol/pb/game_commands.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/moderator_commands.pb.h" +#include "libcockatrice/protocol/pb/room_commands.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_chat_message.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" #include "server_database_interface.h" +#include "server_response_containers.h" #include "server_room.h" +#include "serverinfo_user_container.h" +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include #include #include #include #include -#include #include #include #include @@ -28,6 +51,9 @@ #include #include #include +#include +#include +#include Server_ProtocolHandler::Server_ProtocolHandler(Server *_server, Server_DatabaseInterface *_databaseInterface, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.h b/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.h index 2c8efe50e..a12706757 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_protocolhandler.h @@ -4,34 +4,24 @@ #include "server.h" #include "server_abstractuserinterface.h" +#include +#include #include +#include #include -#include +#include -class Features; class Server_DatabaseInterface; -class Server_Player; -class ServerInfo_User; class Server_Room; -class QTimer; -class FeatureSet; - class ServerMessage; -class Response; -class SessionEvent; -class GameEventContainer; -class RoomEvent; class ResponseContainer; - class CommandContainer; class SessionCommand; class ModeratorCommand; class AdminCommand; class DeveloperCommand; - class Command_Ping; class Command_Login; -class Command_Register; class Command_Message; class Command_ListUsers; class Command_GetGamesOfUser; diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_remoteuserinterface.h b/libcockatrice_network/libcockatrice/network/server/remote/server_remoteuserinterface.h index d68656b9d..3bdf04220 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_remoteuserinterface.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_remoteuserinterface.h @@ -3,6 +3,9 @@ #include "server_abstractuserinterface.h" +class Server; +class ServerInfo_User_Container; + class Server_RemoteUserInterface : public Server_AbstractUserInterface { public: diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.cpp b/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.cpp index 22fb199fb..4c4f351c9 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.cpp @@ -1,8 +1,13 @@ #include "server_response_containers.h" #include "game/server_game.h" +#include "libcockatrice/protocol/pb/game_event.pb.h" +#include "libcockatrice/protocol/pb/game_event_container.pb.h" +#include "libcockatrice/protocol/pb/game_event_context.pb.h" #include +#include +#include GameEventStorageItem::GameEventStorageItem(const ::google::protobuf::Message &_event, int _playerId, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.h b/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.h index 118b32d38..32b7a80a2 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_response_containers.h @@ -1,10 +1,14 @@ #ifndef SERVER_RESPONSE_CONTAINERS_H #define SERVER_RESPONSE_CONTAINERS_H +#include #include #include +#include #include +class GameEvent; + namespace google { namespace protobuf diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_room.cpp b/libcockatrice_network/libcockatrice/network/server/remote/server_room.cpp index 1f29e62fb..614de8d63 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_room.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_room.cpp @@ -1,11 +1,26 @@ #include "server_room.h" #include "game/server_game.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_gametype.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "server.h" +#include "server_abstractuserinterface.h" #include "server_protocolhandler.h" +#include "server_response_containers.h" +#include "serverinfo_user_container.h" #include -#include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include @@ -16,6 +31,10 @@ #include #include #include +#include +#include +#include +#include Server_Room::Server_Room(int _id, int _chatHistorySize, diff --git a/libcockatrice_network/libcockatrice/network/server/remote/server_room.h b/libcockatrice_network/libcockatrice/network/server/remote/server_room.h index 3d9988f20..5933894d5 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/server_room.h +++ b/libcockatrice_network/libcockatrice/network/server/remote/server_room.h @@ -1,16 +1,16 @@ #ifndef SERVER_ROOM_H #define SERVER_ROOM_H -#include "serverinfo_user_container.h" - +#include #include -#include #include #include +#include +#include #include #include +#include -class Server_DatabaseInterface; class Server_ProtocolHandler; class RoomEvent; class ServerInfo_User; @@ -18,10 +18,17 @@ class ServerInfo_Room; class ServerInfo_Game; class Server_Game; class Server; - class Command_JoinGame; class ResponseContainer; class Server_AbstractUserInterface; +class ServerInfo_User_Container; +namespace google +{ +namespace protobuf +{ +class Message; +} // namespace protobuf +} // namespace google class Server_Room : public QObject { diff --git a/libcockatrice_protocol/libcockatrice/protocol/debug_pb_message.cpp b/libcockatrice_protocol/libcockatrice/protocol/debug_pb_message.cpp index 4d4889323..f892c3f15 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/debug_pb_message.cpp +++ b/libcockatrice_protocol/libcockatrice/protocol/debug_pb_message.cpp @@ -1,11 +1,13 @@ #include "debug_pb_message.h" -#include #include #include #include +#include #include #include +#include +#include // FastFieldValuePrinter is added in protobuf 3.4, going out of our way to add the old FieldValuePrinter is not worth it #if GOOGLE_PROTOBUF_VERSION > 3004000 diff --git a/libcockatrice_protocol/libcockatrice/protocol/featureset.cpp b/libcockatrice_protocol/libcockatrice/protocol/featureset.cpp index 3e687ef56..0f8fd4210 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/featureset.cpp +++ b/libcockatrice_protocol/libcockatrice/protocol/featureset.cpp @@ -1,6 +1,7 @@ #include "featureset.h" #include +#include FeatureSet::FeatureSet() { diff --git a/libcockatrice_protocol/libcockatrice/protocol/get_pb_extension.cpp b/libcockatrice_protocol/libcockatrice/protocol/get_pb_extension.cpp index a693ea5a7..b9d2f18d0 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/get_pb_extension.cpp +++ b/libcockatrice_protocol/libcockatrice/protocol/get_pb_extension.cpp @@ -2,6 +2,7 @@ #include #include +#include int getPbExtension(const ::google::protobuf::Message &message) { diff --git a/libcockatrice_protocol/libcockatrice/protocol/pending_command.cpp b/libcockatrice_protocol/libcockatrice/protocol/pending_command.cpp index 62d35313e..4a23fb6ef 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pending_command.cpp +++ b/libcockatrice_protocol/libcockatrice/protocol/pending_command.cpp @@ -1,5 +1,8 @@ #include "pending_command.h" +class CommandContainer; +class Response; + PendingCommand::PendingCommand(const CommandContainer &_commandContainer, QVariant _extraData) : commandContainer(_commandContainer), extraData(_extraData), ticks(0) { diff --git a/libcockatrice_protocol/libcockatrice/protocol/pending_command.h b/libcockatrice_protocol/libcockatrice/protocol/pending_command.h index b8f861d08..9ed8a863c 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pending_command.h +++ b/libcockatrice_protocol/libcockatrice/protocol/pending_command.h @@ -8,9 +8,13 @@ #define PENDING_COMMAND_H #include +#include #include +#include #include -#include +#include + +class Response; class PendingCommand : public QObject { diff --git a/libcockatrice_rng/libcockatrice/rng/rng_abstract.cpp b/libcockatrice_rng/libcockatrice/rng/rng_abstract.cpp index 82404d351..34a778ca9 100644 --- a/libcockatrice_rng/libcockatrice/rng/rng_abstract.cpp +++ b/libcockatrice_rng/libcockatrice/rng/rng_abstract.cpp @@ -1,6 +1,8 @@ #include "rng_abstract.h" #include +#include +#include QVector RNG_Abstract::makeNumbersVector(int n, int min, int max) { diff --git a/libcockatrice_rng/libcockatrice/rng/rng_abstract.h b/libcockatrice_rng/libcockatrice/rng/rng_abstract.h index 903e6ef1a..49fb89612 100644 --- a/libcockatrice_rng/libcockatrice/rng/rng_abstract.h +++ b/libcockatrice_rng/libcockatrice/rng/rng_abstract.h @@ -3,6 +3,7 @@ #include #include +#include class RNG_Abstract : public QObject { diff --git a/libcockatrice_rng/libcockatrice/rng/rng_sfmt.cpp b/libcockatrice_rng/libcockatrice/rng/rng_sfmt.cpp index 4c578b4e4..13e6fe680 100644 --- a/libcockatrice_rng/libcockatrice/rng/rng_sfmt.cpp +++ b/libcockatrice_rng/libcockatrice/rng/rng_sfmt.cpp @@ -1,8 +1,13 @@ #include "rng_sfmt.h" -#include -#include +#include "libcockatrice/rng/rng_abstract.h" +#include "libcockatrice/rng/sfmt/SFMT.h" + +#include #include +#include + +class QObject; // This is from gcc sources, namely from fixincludes/inclhack.def // On C++11 systems, could be included instead. diff --git a/libcockatrice_rng/libcockatrice/rng/rng_sfmt.h b/libcockatrice_rng/libcockatrice/rng/rng_sfmt.h index a180dad99..e178812ab 100644 --- a/libcockatrice_rng/libcockatrice/rng/rng_sfmt.h +++ b/libcockatrice_rng/libcockatrice/rng/rng_sfmt.h @@ -5,7 +5,10 @@ #include "sfmt/SFMT.h" #include -#include +#include +#include + +class QObject; /** * This class encapsulates a state of the art PRNG and can be used diff --git a/libcockatrice_settings/libcockatrice/settings/appearance_settings.cpp b/libcockatrice_settings/libcockatrice/settings/appearance_settings.cpp index 839e33be4..14969dae6 100644 --- a/libcockatrice_settings/libcockatrice/settings/appearance_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/appearance_settings.cpp @@ -1,5 +1,11 @@ #include "appearance_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + AppearanceSettings::AppearanceSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "appearance.ini", "appearance", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/appearance_settings.h b/libcockatrice_settings/libcockatrice/settings/appearance_settings.h index a4504798e..9d15caddd 100644 --- a/libcockatrice_settings/libcockatrice/settings/appearance_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/appearance_settings.h @@ -9,6 +9,11 @@ #include "settings_manager.h" +#include +#include + +class QObject; + class AppearanceSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.cpp b/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.cpp index c800cc024..aaea87791 100644 --- a/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.cpp @@ -1,5 +1,11 @@ #include "cache_storage_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + CacheStorageSettings::CacheStorageSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "cache_storage.ini", "cache_storage", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.h b/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.h index 4a4e73461..a4c8a197d 100644 --- a/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/cache_storage_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; // In MB (Increments of 64) #define PIXMAPCACHE_SIZE_DEFAULT 2048 diff --git a/libcockatrice_settings/libcockatrice/settings/card_database_settings.cpp b/libcockatrice_settings/libcockatrice/settings/card_database_settings.cpp index b55c97909..acac1125f 100644 --- a/libcockatrice_settings/libcockatrice/settings/card_database_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/card_database_settings.cpp @@ -1,6 +1,16 @@ #include "card_database_settings.h" +#include "libcockatrice/interfaces/interface_card_set_priority_controller.h" +#include "libcockatrice/settings/settings_manager.h" + +#include #include +#include +#include +#include +#include + +class QObject; CardDatabaseSettings::CardDatabaseSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "cardDatabase.ini", QString(), QString(), parent) @@ -78,6 +88,20 @@ ICardSetPriorityController::SetOptions CardDatabaseSettings::getSetOptions(QStri return setOptionsCache.value(shortName); } +QStringList CardDatabaseSettings::getEnabledSetNames() const +{ + QMutexLocker lock(&setOptionsMutex); + ensureSetOptionsLoaded(); + QStringList names; + for (auto it = setOptionsCache.constBegin(); it != setOptionsCache.constEnd(); ++it) { + if (it.value().enabled) { + names << it.key(); + } + } + names.sort(); + return names; +} + void CardDatabaseSettings::saveSets(const QVector &data) { batchWrite([&](QSettings &s) { diff --git a/libcockatrice_settings/libcockatrice/settings/card_database_settings.h b/libcockatrice_settings/libcockatrice/settings/card_database_settings.h index 4553f197f..5bdf17aef 100644 --- a/libcockatrice_settings/libcockatrice/settings/card_database_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/card_database_settings.h @@ -12,7 +12,12 @@ #include #include +#include +#include #include +#include + +class QObject; class CardDatabaseSettings : public SettingsManager, public ICardSetPriorityController { @@ -30,6 +35,8 @@ public: SetOptions getSetOptions(QString shortName) const override; + QStringList getEnabledSetNames() const override; + void saveSets(const QVector &data) override; private: diff --git a/libcockatrice_settings/libcockatrice/settings/card_override_settings.cpp b/libcockatrice_settings/libcockatrice/settings/card_override_settings.cpp index a61a4693b..5a853a927 100644 --- a/libcockatrice_settings/libcockatrice/settings/card_override_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/card_override_settings.cpp @@ -1,5 +1,12 @@ #include "card_override_settings.h" +#include "libcockatrice/settings/settings_manager.h" +#include "libcockatrice/utility/card_ref.h" + +#include + +class QObject; + CardOverrideSettings::CardOverrideSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "cardPreferenceOverrides.ini", "cards", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/card_override_settings.h b/libcockatrice_settings/libcockatrice/settings/card_override_settings.h index cd515d4da..a9e8b2d69 100644 --- a/libcockatrice_settings/libcockatrice/settings/card_override_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/card_override_settings.h @@ -9,8 +9,11 @@ #include "settings_manager.h" -#include -#include +#include +#include + +class QObject; +struct CardRef; class CardOverrideSettings : public SettingsManager { diff --git a/libcockatrice_settings/libcockatrice/settings/cards_display_settings.cpp b/libcockatrice_settings/libcockatrice/settings/cards_display_settings.cpp index 3af607198..f047973f0 100644 --- a/libcockatrice_settings/libcockatrice/settings/cards_display_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/cards_display_settings.cpp @@ -1,5 +1,13 @@ #include "cards_display_settings.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; + CardsDisplaySettings::CardsDisplaySettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "cards_display.ini", "cards", QString(), parent) { @@ -35,11 +43,6 @@ int CardsDisplaySettings::getPrintingSelectorCardSize() const return getValue("printingSelector", "cards", "cardSize", 100).toInt(); } -bool CardsDisplaySettings::getIncludeRebalancedCards() const -{ - return getValue("includerebalancedcards", QString(), QString(), true).toBool(); -} - bool CardsDisplaySettings::getPrintingSelectorNavigationButtonsVisible() const { return getValue("navigationButtonsVisible", "cards", "printingSelector", true).toBool(); @@ -159,15 +162,6 @@ void CardsDisplaySettings::setPrintingSelectorCardSize(int _printingSelectorCard emit printingSelectorCardSizeChanged(); } -void CardsDisplaySettings::setIncludeRebalancedCards(bool _includeRebalancedCards) -{ - if (_includeRebalancedCards == getIncludeRebalancedCards()) { - return; - } - setValue(_includeRebalancedCards, "includerebalancedcards"); - emit includeRebalancedCardsChanged(_includeRebalancedCards); -} - void CardsDisplaySettings::setPrintingSelectorNavigationButtonsVisible(bool _navigationButtonsVisible) { setValue(_navigationButtonsVisible, "navigationButtonsVisible", "cards", "printingSelector"); diff --git a/libcockatrice_settings/libcockatrice/settings/cards_display_settings.h b/libcockatrice_settings/libcockatrice/settings/cards_display_settings.h index 77924d14c..961550d3c 100644 --- a/libcockatrice_settings/libcockatrice/settings/cards_display_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/cards_display_settings.h @@ -3,8 +3,11 @@ #include "settings_manager.h" -#include +#include #include +#include + +class QObject; class CardsDisplaySettings : public SettingsManager, public ICardsDisplaySettingsProvider { @@ -18,7 +21,6 @@ public: [[nodiscard]] bool getBumpSetsWithCardsInDeckToTop() const override; [[nodiscard]] int getPrintingSelectorSortOrder() const override; [[nodiscard]] int getPrintingSelectorCardSize() const override; - [[nodiscard]] bool getIncludeRebalancedCards() const override; [[nodiscard]] bool getPrintingSelectorNavigationButtonsVisible() const override; [[nodiscard]] bool getTapAnimation() const override; [[nodiscard]] bool getArrowDrawAnimation() const override; @@ -42,7 +44,6 @@ public: void setBumpSetsWithCardsInDeckToTop(bool _bumpSetsWithCardsInDeckToTop); void setPrintingSelectorSortOrder(int _printingSelectorSortOrder); void setPrintingSelectorCardSize(int _printingSelectorCardSize); - void setIncludeRebalancedCards(bool _includeRebalancedCards); void setPrintingSelectorNavigationButtonsVisible(bool _navigationButtonsVisible); void setTapAnimation(bool _tapAnimation); void setArrowDrawAnimation(bool _arrowDrawAnimation); @@ -67,7 +68,6 @@ signals: void bumpSetsWithCardsInDeckToTopChanged(); void printingSelectorSortOrderChanged(); void printingSelectorCardSizeChanged(); - void includeRebalancedCardsChanged(bool _includeRebalancedCards); void printingSelectorNavigationButtonsVisibleChanged(); void visualDeckStorageCardSizeChanged(); void visualDatabaseDisplayCardSizeChanged(); diff --git a/libcockatrice_settings/libcockatrice/settings/chat_settings.cpp b/libcockatrice_settings/libcockatrice/settings/chat_settings.cpp index 0ee29b4f5..d9ae0ddac 100644 --- a/libcockatrice_settings/libcockatrice/settings/chat_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/chat_settings.cpp @@ -1,5 +1,11 @@ #include "chat_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + ChatSettings::ChatSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "chat.ini", "chat", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/chat_settings.h b/libcockatrice_settings/libcockatrice/settings/chat_settings.h index d928b23b7..e00da4527 100644 --- a/libcockatrice_settings/libcockatrice/settings/chat_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/chat_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; class ChatSettings : public SettingsManager, public IChatSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.cpp b/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.cpp index 0c5f5521e..eb692fe81 100644 --- a/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.cpp @@ -1,6 +1,16 @@ #include "commander_bracket_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include #include +#include +#include +#include +#include + +class QObject; QVariantList CommanderBracketSettings::defaultDefinitions() { diff --git a/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.h b/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.h index 5a29f5dc7..ad012fc30 100644 --- a/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/commander_bracket_settings.h @@ -4,9 +4,11 @@ #include "settings_manager.h" #include -#include #include #include +#include + +class QObject; struct CommanderBracketDefinition { diff --git a/libcockatrice_settings/libcockatrice/settings/debug_settings.cpp b/libcockatrice_settings/libcockatrice/settings/debug_settings.cpp index 5bf6eca30..c36e7187e 100644 --- a/libcockatrice_settings/libcockatrice/settings/debug_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/debug_settings.cpp @@ -1,6 +1,11 @@ #include "debug_settings.h" -#include +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; DebugSettings::DebugSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "debug.ini", "debug", QString(), parent) diff --git a/libcockatrice_settings/libcockatrice/settings/debug_settings.h b/libcockatrice_settings/libcockatrice/settings/debug_settings.h index acb5cf313..9521a7738 100644 --- a/libcockatrice_settings/libcockatrice/settings/debug_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/debug_settings.h @@ -8,6 +8,11 @@ #define DEBUG_SETTINGS_H #include "settings_manager.h" +#include +#include + +class QObject; + class DebugSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.cpp b/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.cpp index 44cdcd86f..ee570ed67 100644 --- a/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.cpp @@ -1,5 +1,11 @@ #include "deck_editor_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + DeckEditorSettings::DeckEditorSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "deck_editor.ini", "deckeditor", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.h b/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.h index 0c87a270a..aa024910d 100644 --- a/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/deck_editor_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; enum commanderSpellbookIntegrationEnabledIndex { diff --git a/libcockatrice_settings/libcockatrice/settings/download_settings.cpp b/libcockatrice_settings/libcockatrice/settings/download_settings.cpp index 6e22a84f4..84a6a7509 100644 --- a/libcockatrice_settings/libcockatrice/settings/download_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/download_settings.cpp @@ -2,6 +2,14 @@ #include "settings_manager.h" +#include +#include +#include +#include +#include + +class QObject; + const QStringList DownloadSettings::DEFAULT_DOWNLOAD_URLS = { "https://cards.scryfall.io/large/!prop:side!/!set:uuid_substr_0_1!/!set:uuid_substr_1_1!/!set:uuid!.jpg", "https://api.scryfall.com/cards/!set:uuid!?format=image&face=!prop:side!&lang=!sflang!", diff --git a/libcockatrice_settings/libcockatrice/settings/download_settings.h b/libcockatrice_settings/libcockatrice/settings/download_settings.h index 7eca77df6..f7cf482e1 100644 --- a/libcockatrice_settings/libcockatrice/settings/download_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/download_settings.h @@ -10,6 +10,11 @@ #include "settings_manager.h" #include +#include +#include +#include + +class QObject; class DownloadSettings : public SettingsManager { diff --git a/libcockatrice_settings/libcockatrice/settings/game_filters_settings.cpp b/libcockatrice_settings/libcockatrice/settings/game_filters_settings.cpp index 0edba44dd..79d1bc9e2 100644 --- a/libcockatrice_settings/libcockatrice/settings/game_filters_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/game_filters_settings.cpp @@ -1,7 +1,15 @@ #include "game_filters_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include #include +#include +#include #include +#include + +class QObject; GameFiltersSettings::GameFiltersSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "gamefilters.ini", "filter_games", QString(), parent) diff --git a/libcockatrice_settings/libcockatrice/settings/game_filters_settings.h b/libcockatrice_settings/libcockatrice/settings/game_filters_settings.h index 11480d483..ec5e3fdc2 100644 --- a/libcockatrice_settings/libcockatrice/settings/game_filters_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/game_filters_settings.h @@ -10,6 +10,13 @@ #include "settings_manager.h" +#include +#include +#include +#include + +class QObject; + class GameFiltersSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/game_settings.cpp b/libcockatrice_settings/libcockatrice/settings/game_settings.cpp index dfd67c98a..c8c6463e3 100644 --- a/libcockatrice_settings/libcockatrice/settings/game_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/game_settings.cpp @@ -1,5 +1,11 @@ #include "game_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + GameSettings::GameSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "game.ini", QString(), QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/game_settings.h b/libcockatrice_settings/libcockatrice/settings/game_settings.h index e0a484bac..3e64234fc 100644 --- a/libcockatrice_settings/libcockatrice/settings/game_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/game_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; class GameSettings : public SettingsManager, public IGameSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/interface_settings.cpp b/libcockatrice_settings/libcockatrice/settings/interface_settings.cpp index b92a5fdec..256d9eb26 100644 --- a/libcockatrice_settings/libcockatrice/settings/interface_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/interface_settings.cpp @@ -1,5 +1,16 @@ #include "interface_settings.h" +#include "libcockatrice/settings/settings_manager.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" + +#include +#include +#include +#include + +class QObject; + namespace { const QChar PLAYMAT_FIELD_SEP = QChar(0x1F); ///< Separator between PlaymatInfo fields. @@ -37,7 +48,7 @@ InterfaceSettings::InterfaceSettings(const QString &settingPath, QObject *parent bool InterfaceSettings::getUseTearOffMenus() const { - return getValue("useTearOffMenus", QString(), QString(), true).toBool(); + return getValue("useTearOffMenus", QString(), QString(), false).toBool(); } int InterfaceSettings::getCardViewInitialRowsMax() const diff --git a/libcockatrice_settings/libcockatrice/settings/interface_settings.h b/libcockatrice_settings/libcockatrice/settings/interface_settings.h index 6b226f307..41bb6ee17 100644 --- a/libcockatrice_settings/libcockatrice/settings/interface_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/interface_settings.h @@ -3,7 +3,15 @@ #include "settings_manager.h" +#include +#include +#include #include +#include + +class QObject; +struct PlaymatInfo; +template class QList; class InterfaceSettings : public SettingsManager, public IInterfaceSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/layouts_settings.cpp b/libcockatrice_settings/libcockatrice/settings/layouts_settings.cpp index e914dc2d8..aba620026 100644 --- a/libcockatrice_settings/libcockatrice/settings/layouts_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/layouts_settings.cpp @@ -1,5 +1,11 @@ #include "layouts_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + const static QString STATE_PROP = "state"; const static QString GEOMETRY_PROP = "geometry"; const static QString SIZE_PROP = "widgetSize"; diff --git a/libcockatrice_settings/libcockatrice/settings/layouts_settings.h b/libcockatrice_settings/libcockatrice/settings/layouts_settings.h index d5f26b61b..91b0a2ea6 100644 --- a/libcockatrice_settings/libcockatrice/settings/layouts_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/layouts_settings.h @@ -9,7 +9,11 @@ #include "settings_manager.h" -#include +#include +#include +#include + +class QObject; class LayoutsSettings : public SettingsManager { diff --git a/libcockatrice_settings/libcockatrice/settings/message_settings.cpp b/libcockatrice_settings/libcockatrice/settings/message_settings.cpp index 50da39df6..ca77246ef 100644 --- a/libcockatrice_settings/libcockatrice/settings/message_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/message_settings.cpp @@ -1,5 +1,11 @@ #include "message_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + MessageSettings::MessageSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "messages.ini", "messages", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/message_settings.h b/libcockatrice_settings/libcockatrice/settings/message_settings.h index 8276aa39d..83513d562 100644 --- a/libcockatrice_settings/libcockatrice/settings/message_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/message_settings.h @@ -9,6 +9,11 @@ #include "settings_manager.h" +#include +#include + +class QObject; + class MessageSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/network_settings.cpp b/libcockatrice_settings/libcockatrice/settings/network_settings.cpp index 2d34d47ad..6d0fa9d1c 100644 --- a/libcockatrice_settings/libcockatrice/settings/network_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/network_settings.cpp @@ -1,5 +1,11 @@ #include "network_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + NetworkSettings::NetworkSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "network.ini", "network", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/network_settings.h b/libcockatrice_settings/libcockatrice/settings/network_settings.h index 446bb51d3..4367f9cb3 100644 --- a/libcockatrice_settings/libcockatrice/settings/network_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/network_settings.h @@ -9,6 +9,11 @@ #include "settings_manager.h" +#include +#include + +class QObject; + class NetworkSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/paths_settings.cpp b/libcockatrice_settings/libcockatrice/settings/paths_settings.cpp index 67032e38f..5f5725395 100644 --- a/libcockatrice_settings/libcockatrice/settings/paths_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/paths_settings.cpp @@ -1,7 +1,10 @@ #include "paths_settings.h" -#include -#include +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; PathsSettings::PathsSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "paths.ini", "paths", QString(), parent) diff --git a/libcockatrice_settings/libcockatrice/settings/paths_settings.h b/libcockatrice_settings/libcockatrice/settings/paths_settings.h index ab1ea05c8..399337bbb 100644 --- a/libcockatrice_settings/libcockatrice/settings/paths_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/paths_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; class PathsSettings : public SettingsManager, public IPathsSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/personal_settings.cpp b/libcockatrice_settings/libcockatrice/settings/personal_settings.cpp index d1cb74d09..682144485 100644 --- a/libcockatrice_settings/libcockatrice/settings/personal_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/personal_settings.cpp @@ -1,5 +1,12 @@ #include "personal_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; + PersonalSettings::PersonalSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "personal.ini", "personal", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/personal_settings.h b/libcockatrice_settings/libcockatrice/settings/personal_settings.h index 04eab2a8a..0819af41b 100644 --- a/libcockatrice_settings/libcockatrice/settings/personal_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/personal_settings.h @@ -3,9 +3,12 @@ #include "settings_manager.h" -#include -#include +#include #include +#include + +class QObject; +template class QList; class PersonalSettings : public SettingsManager, public IPersonalSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/recents_settings.cpp b/libcockatrice_settings/libcockatrice/settings/recents_settings.cpp index 5f16af179..4f2c06c88 100644 --- a/libcockatrice_settings/libcockatrice/settings/recents_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/recents_settings.cpp @@ -1,5 +1,12 @@ #include "recents_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; + #define MAX_RECENT_DECK_COUNT 10 RecentsSettings::RecentsSettings(const QString &settingPath, QObject *parent) diff --git a/libcockatrice_settings/libcockatrice/settings/recents_settings.h b/libcockatrice_settings/libcockatrice/settings/recents_settings.h index 01b2a37bc..dc5853908 100644 --- a/libcockatrice_settings/libcockatrice/settings/recents_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/recents_settings.h @@ -9,6 +9,12 @@ #include "settings_manager.h" +#include +#include +#include + +class QObject; + class RecentsSettings : public SettingsManager { Q_OBJECT diff --git a/libcockatrice_settings/libcockatrice/settings/servers_settings.cpp b/libcockatrice_settings/libcockatrice/settings/servers_settings.cpp index 436e260c5..c5c4b2592 100644 --- a/libcockatrice_settings/libcockatrice/settings/servers_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/servers_settings.cpp @@ -1,8 +1,17 @@ #include "servers_settings.h" +#include "libcockatrice/settings/settings_manager.h" + #include +#include +#include +#include +#include +#include #include +class QObject; + ServersSettings::ServersSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "servers.ini", "server", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/servers_settings.h b/libcockatrice_settings/libcockatrice/settings/servers_settings.h index 93651c813..40648baa9 100644 --- a/libcockatrice_settings/libcockatrice/settings/servers_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/servers_settings.h @@ -10,7 +10,12 @@ #include "settings_manager.h" #include -#include +#include +#include +#include + +class QObject; + #define SERVERSETTINGS_DEFAULT_HOST "server.cockatrice.us" #define SERVERSETTINGS_DEFAULT_PORT "4748" diff --git a/libcockatrice_settings/libcockatrice/settings/settings_manager.h b/libcockatrice_settings/libcockatrice/settings/settings_manager.h index 3d3c95d3e..8d3110106 100644 --- a/libcockatrice_settings/libcockatrice/settings/settings_manager.h +++ b/libcockatrice_settings/libcockatrice/settings/settings_manager.h @@ -7,9 +7,12 @@ #ifndef SETTINGSMANAGER_H #define SETTINGSMANAGER_H +#include #include -#include +#include #include +#include +#include class SettingsManager : public QObject { diff --git a/libcockatrice_settings/libcockatrice/settings/settings_migration.cpp b/libcockatrice_settings/libcockatrice/settings/settings_migration.cpp index c22bd3c02..c3f299f40 100644 --- a/libcockatrice_settings/libcockatrice/settings/settings_migration.cpp +++ b/libcockatrice_settings/libcockatrice/settings/settings_migration.cpp @@ -1,15 +1,25 @@ #include "settings_migration.h" +#include #include +#include #include #include #include #include +#include +#include +#include #include #include +#include #include +#include #include +#include +#include #include +#include inline Q_LOGGING_CATEGORY(SettingsMigrationLog, "settings_migration"); @@ -249,7 +259,6 @@ static void migrateCardsDisplaySettings(const QString &settingsPath, QSettings & {"cards/roundcardcorners", "cards/roundCardCorners"}, {"cards/overrideallcardartwithpersonalpreference", "cards/overrideAllCardArtWithPersonalPreference"}, {"cards/bumpsetswithcardsindecktotop", "cards/bumpSetsWithCardsInDeckToTop"}, - {"cards/includerebalancedcards", "cards/includerebalancedcards"}, {"cards/tapanimation", "cards/tapAnimation"}, {"cards/autorotatesidewayslayoutcards", "cards/autoRotateSidewaysLayoutCards"}, {"cards/scaleCards", "cards/scaleCards"}, @@ -561,9 +570,15 @@ static void migrateLegacySets(const QString &settingsPath) QSettings cardDbIni(settingsPath + "cardDatabase.ini", QSettings::IniFormat); for (const auto &shortName : groups) { legacySetting.beginGroup(shortName); - cardDbIni.setValue("sets/" + shortName + "/sortKey", legacySetting.value("sortkey")); - cardDbIni.setValue("sets/" + shortName + "/enabled", legacySetting.value("enabled")); - cardDbIni.setValue("sets/" + shortName + "/isKnown", legacySetting.value("isknown")); + if (legacySetting.contains("sortkey")) { + cardDbIni.setValue("sets/" + shortName + "/sortKey", legacySetting.value("sortkey")); + } + if (legacySetting.contains("enabled")) { + cardDbIni.setValue("sets/" + shortName + "/enabled", legacySetting.value("enabled")); + } + if (legacySetting.contains("isknown")) { + cardDbIni.setValue("sets/" + shortName + "/isKnown", legacySetting.value("isknown")); + } legacySetting.endGroup(); } legacySetting.endGroup(); diff --git a/libcockatrice_settings/libcockatrice/settings/sound_settings.cpp b/libcockatrice_settings/libcockatrice/settings/sound_settings.cpp index 82b724a07..5de7f9105 100644 --- a/libcockatrice_settings/libcockatrice/settings/sound_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/sound_settings.cpp @@ -1,5 +1,11 @@ #include "sound_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include + +class QObject; + SoundSettings::SoundSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "sound.ini", "sound", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/sound_settings.h b/libcockatrice_settings/libcockatrice/settings/sound_settings.h index ffaed2a7c..df6332cae 100644 --- a/libcockatrice_settings/libcockatrice/settings/sound_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/sound_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; class SoundSettings : public SettingsManager, public ISoundSettingsProvider { diff --git a/libcockatrice_settings/libcockatrice/settings/tabs_settings.cpp b/libcockatrice_settings/libcockatrice/settings/tabs_settings.cpp index cf5bfd81a..7ed6c4433 100644 --- a/libcockatrice_settings/libcockatrice/settings/tabs_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/tabs_settings.cpp @@ -1,5 +1,12 @@ #include "tabs_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; + TabsSettings::TabsSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "tabs.ini", "tabs", QString(), parent) { diff --git a/libcockatrice_settings/libcockatrice/settings/tabs_settings.h b/libcockatrice_settings/libcockatrice/settings/tabs_settings.h index eb78d311b..5411a6721 100644 --- a/libcockatrice_settings/libcockatrice/settings/tabs_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/tabs_settings.h @@ -3,7 +3,11 @@ #include "settings_manager.h" +#include #include +#include + +class QObject; /** * @brief The tab the application selects after launch. diff --git a/libcockatrice_settings/libcockatrice/settings/updates_settings.cpp b/libcockatrice_settings/libcockatrice/settings/updates_settings.cpp index 166bc0aa8..9ea22ed7c 100644 --- a/libcockatrice_settings/libcockatrice/settings/updates_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/updates_settings.cpp @@ -1,6 +1,13 @@ #include "updates_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include #include +#include +#include + +class QObject; UpdatesSettings::UpdatesSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "updates.ini", "updates", QString(), parent) @@ -53,6 +60,11 @@ bool UpdatesSettings::getNotifyAboutNewVersion() const return getValue("newVersionNotification", QString(), QString(), true).toBool(); } +bool UpdatesSettings::getCardDatabaseUpdateTrayNotification() const +{ + return getValue("cardDatabaseUpdateTrayNotification", QString(), QString(), true).toBool(); +} + int UpdatesSettings::getUpdateReleaseChannelIndex() const { return getValue("updateReleaseChannel", QString(), QString(), 0).toInt(); @@ -98,6 +110,11 @@ void UpdatesSettings::setNotifyAboutNewVersion(bool _notifyaboutnewversion) setValue(_notifyaboutnewversion, "newVersionNotification"); } +void UpdatesSettings::setCardDatabaseUpdateTrayNotification(bool value) +{ + setValue(value, "cardDatabaseUpdateTrayNotification"); +} + void UpdatesSettings::setUpdateReleaseChannelIndex(int value) { setValue(value, "updateReleaseChannel"); diff --git a/libcockatrice_settings/libcockatrice/settings/updates_settings.h b/libcockatrice_settings/libcockatrice/settings/updates_settings.h index 6df0f8ce4..490dca14e 100644 --- a/libcockatrice_settings/libcockatrice/settings/updates_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/updates_settings.h @@ -3,8 +3,12 @@ #include "settings_manager.h" -#include +#include #include +#include + +class QDate; +class QObject; class UpdatesSettings : public SettingsManager, public IUpdatesSettingsProvider { @@ -21,6 +25,7 @@ public: [[nodiscard]] bool getAlwaysEnableNewSets() const override; [[nodiscard]] bool getNotifyAboutUpdates() const override; [[nodiscard]] bool getNotifyAboutNewVersion() const override; + [[nodiscard]] bool getCardDatabaseUpdateTrayNotification() const; [[nodiscard]] int getUpdateReleaseChannelIndex() const override; void setCheckUpdatesOnStartup(bool value); @@ -31,6 +36,7 @@ public: void setAlwaysEnableNewSets(bool value); void setNotifyAboutUpdates(bool _notifyaboutupdate); void setNotifyAboutNewVersion(bool _notifyaboutnewversion); + void setCardDatabaseUpdateTrayNotification(bool value); void setUpdateReleaseChannelIndex(int value); public: diff --git a/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.cpp b/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.cpp index 3320598d8..4667a278c 100644 --- a/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.cpp +++ b/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.cpp @@ -1,5 +1,12 @@ #include "visual_deck_storage_settings.h" +#include "libcockatrice/settings/settings_manager.h" + +#include +#include + +class QObject; + namespace { QStringList defaultTags = { diff --git a/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.h b/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.h index 9bc9d4172..12b96fd8b 100644 --- a/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.h +++ b/libcockatrice_settings/libcockatrice/settings/visual_deck_storage_settings.h @@ -3,8 +3,12 @@ #include "settings_manager.h" +#include #include #include +#include + +class QObject; class VisualDeckStorageSettings : public SettingsManager, public IVisualDeckStorageSettingsProvider { diff --git a/libcockatrice_utility/CMakeLists.txt b/libcockatrice_utility/CMakeLists.txt index 41f1bfa0f..d986214d7 100644 --- a/libcockatrice_utility/CMakeLists.txt +++ b/libcockatrice_utility/CMakeLists.txt @@ -22,6 +22,7 @@ set(UTILITY_HEADERS libcockatrice/utility/cryptoutil.h libcockatrice/utility/expression.h libcockatrice/utility/levenshtein.h + libcockatrice/utility/local_server_name.h libcockatrice/utility/macros.h libcockatrice/utility/passwordhasher.h libcockatrice/utility/playmat_params.h diff --git a/libcockatrice_utility/libcockatrice/utility/cryptoutil.cpp b/libcockatrice_utility/libcockatrice/utility/cryptoutil.cpp index 416ef261b..fb59022de 100644 --- a/libcockatrice_utility/libcockatrice/utility/cryptoutil.cpp +++ b/libcockatrice_utility/libcockatrice/utility/cryptoutil.cpp @@ -1,6 +1,7 @@ #include "cryptoutil.h" #include +#include namespace CryptoUtil { diff --git a/libcockatrice_utility/libcockatrice/utility/expression.cpp b/libcockatrice_utility/libcockatrice/utility/expression.cpp index 718b0fe18..85d1cdddc 100644 --- a/libcockatrice_utility/libcockatrice/utility/expression.cpp +++ b/libcockatrice_utility/libcockatrice/utility/expression.cpp @@ -5,7 +5,12 @@ #include #include #include +#include #include +#include +#include +#include +#include peg::parser math(R"( EXPRESSION <- P0 diff --git a/libcockatrice_utility/libcockatrice/utility/levenshtein.cpp b/libcockatrice_utility/libcockatrice/utility/levenshtein.cpp index f39d325fb..f7d8459cb 100644 --- a/libcockatrice_utility/libcockatrice/utility/levenshtein.cpp +++ b/libcockatrice_utility/libcockatrice/utility/levenshtein.cpp @@ -1,5 +1,7 @@ #include "levenshtein.h" +#include +#include #include #include diff --git a/libcockatrice_utility/libcockatrice/utility/local_server_name.h b/libcockatrice_utility/libcockatrice/utility/local_server_name.h new file mode 100644 index 000000000..a5797fba1 --- /dev/null +++ b/libcockatrice_utility/libcockatrice/utility/local_server_name.h @@ -0,0 +1,28 @@ +#ifndef COCKATRICE_LOCAL_SERVER_NAME_H +#define COCKATRICE_LOCAL_SERVER_NAME_H + +#include +#include +#include + +/** + * @brief Builds a QLocalServer/QLocalSocket name scoped to the current user. + * + * On Linux the default local socket namespace is system-wide, so an unscoped name + * would let one user's process talk to — or hijack — another user's session. + * @param prefix application specific socket name prefix + * @return the scoped socket name + */ +inline QString scopedLocalServerName(const QString &prefix) +{ + QString userName = qEnvironmentVariable("USER"); + if (userName.isEmpty()) { + userName = qEnvironmentVariable("USERNAME"); + } + if (userName.isEmpty()) { + userName = QDir::home().dirName(); + } + return prefix + QLatin1Char('-') + userName; +} + +#endif // COCKATRICE_LOCAL_SERVER_NAME_H diff --git a/libcockatrice_utility/libcockatrice/utility/passwordhasher.cpp b/libcockatrice_utility/libcockatrice/utility/passwordhasher.cpp index 1c22fdcfa..b4a412fa6 100644 --- a/libcockatrice_utility/libcockatrice/utility/passwordhasher.cpp +++ b/libcockatrice_utility/libcockatrice/utility/passwordhasher.cpp @@ -1,5 +1,7 @@ #include "passwordhasher.h" +#include +#include #include #include diff --git a/libcockatrice_utility/libcockatrice/utility/passwordhasher.h b/libcockatrice_utility/libcockatrice/utility/passwordhasher.h index 811ecef15..8ad83f089 100644 --- a/libcockatrice_utility/libcockatrice/utility/passwordhasher.h +++ b/libcockatrice_utility/libcockatrice/utility/passwordhasher.h @@ -1,7 +1,7 @@ #ifndef PASSWORDHASHER_H #define PASSWORDHASHER_H -#include +#include class PasswordHasher { diff --git a/libcockatrice_utility/libcockatrice/utility/report_categories.cpp b/libcockatrice_utility/libcockatrice/utility/report_categories.cpp index 8551c1ca1..f3576d7fd 100644 --- a/libcockatrice_utility/libcockatrice/utility/report_categories.cpp +++ b/libcockatrice_utility/libcockatrice/utility/report_categories.cpp @@ -1,5 +1,8 @@ #include "report_categories.h" +#include +#include + namespace ReportCategories { const QStringList &keys() diff --git a/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.cpp b/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.cpp index 2a1e3b283..50340c350 100644 --- a/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.cpp +++ b/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.cpp @@ -1,5 +1,9 @@ #include "server_rate_limiter.h" +#include +#include +#include + bool ServerRateLimiter::isRateLimited(const QString &host, const QDateTime &now) const { auto it = backoffUntil.constFind(host); diff --git a/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.h b/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.h index e071b9189..cae26983d 100644 --- a/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.h +++ b/libcockatrice_utility/libcockatrice/utility/server_rate_limiter.h @@ -4,6 +4,7 @@ #include #include #include +#include /** * @class ServerRateLimiter diff --git a/libcockatrice_utility/libcockatrice/utility/translation_loader.cpp b/libcockatrice_utility/libcockatrice/utility/translation_loader.cpp index b06bcffc6..41c6107b3 100644 --- a/libcockatrice_utility/libcockatrice/utility/translation_loader.cpp +++ b/libcockatrice_utility/libcockatrice/utility/translation_loader.cpp @@ -1,13 +1,23 @@ #include "translation_loader.h" +#include #include +#include #include #include +#include #include +#include #include +#include #include +#include +#include +#include #include +#include #include +#include // Kept under the historical category name so existing QT_LOGGING_RULES filters keep working. Q_LOGGING_CATEGORY(TranslationLoaderLog, "qt_translator") diff --git a/libcockatrice_utility/libcockatrice/utility/warning_categories.cpp b/libcockatrice_utility/libcockatrice/utility/warning_categories.cpp index b5ca563ff..ad0fc86f0 100644 --- a/libcockatrice_utility/libcockatrice/utility/warning_categories.cpp +++ b/libcockatrice_utility/libcockatrice/utility/warning_categories.cpp @@ -1,5 +1,9 @@ #include "warning_categories.h" +#include +#include +#include + QList parseWarningCategories(const QString &value) { QList categories; diff --git a/oracle/src/main.cpp b/oracle/src/main.cpp index 103c72784..cae2ee37d 100644 --- a/oracle/src/main.cpp +++ b/oracle/src/main.cpp @@ -5,8 +5,12 @@ #include <../../cockatrice/src/client/settings/cache_settings.h> #include +#include #include +#include +#include #include +#include #include #include #include diff --git a/oracle/src/oracleimporter.cpp b/oracle/src/oracleimporter.cpp index 88b522197..3382e36d6 100644 --- a/oracle/src/oracleimporter.cpp +++ b/oracle/src/oracleimporter.cpp @@ -1,20 +1,35 @@ #include "oracleimporter.h" -#include "libcockatrice/interfaces/noop_card_preference_provider.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/format/format_legality_rules.h" +#include "libcockatrice/card/lazy_properties_hash.h" +#include "libcockatrice/card/relation/card_relation_type.h" #include "libcockatrice/interfaces/noop_card_set_priority_controller.h" #include "parsehelpers.h" +#include #include #include #include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include #include #include #include #include #include +#include + +class ICardSetPriorityController; static const QList kConstructedCounts = {{4, "legal"}, {0, "banned"}}; @@ -286,9 +301,9 @@ CardInfoPtr OracleImporter::addCard(QString name, static QString getJsonString(const QJsonObject &obj, const QString &key) { - // QVariant coerces numbers and booleans to text, while QJsonValue::toString() - // returns a null string for them — some MTGJSON fields (manaValue, - // convertedManaCost, isOnlineOnly, isRebalanced) carry those types. + // QVariant coerces numbers to text, while QJsonValue::toString() returns a + // null string for them — MTGJSON fields like manaValue and convertedManaCost + // carry those types. return obj.value(key).toVariant().toString(); } @@ -397,11 +412,8 @@ int OracleImporter::importCardsFromSet(const CardSetPtr ¤tSet, const QJson }; // mtgjson name => xml name - static const QMap setInfoProperties{{"number", "num"}, - {"rarity", "rarity"}, - {"isOnlineOnly", "isOnlineOnly"}, - {"isRebalanced", "isRebalanced"}, - {"artist", "artist"}}; + static const QMap setInfoProperties{ + {"number", "num"}, {"rarity", "rarity"}, {"artist", "artist"}}; // mtgjson name => xml name static const QMap identifierProperties{{"multiverseId", "muid"}, {"scryfallId", "uuid"}}; @@ -836,7 +848,7 @@ int OracleImporter::startImport() bool OracleImporter::saveToFile(const QString &fileName, const QString &sourceUrl, const QString &sourceVersion) { - CockatriceXml4Parser parser(new NoopCardPreferenceProvider(), new NoopCardSetPriorityController()); + CockatriceXml4Parser parser(new NoopCardSetPriorityController()); return parser.saveToFile(createDefaultMagicFormats(), sets, cards, fileName, sourceUrl, sourceVersion); } diff --git a/oracle/src/oracleimporter.h b/oracle/src/oracleimporter.h index c8d3a19bf..d872e184e 100644 --- a/oracle/src/oracleimporter.h +++ b/oracle/src/oracleimporter.h @@ -1,18 +1,29 @@ #ifndef ORACLEIMPORTER_H #define ORACLEIMPORTER_H +#include "libcockatrice/card/printing/printing_info.h" +#include "libcockatrice/card/set/card_set.h" #include "raw_json_scanner.h" #include #include +#include +#include #include #include +#include #include -#include -#include +#include +#include +#include #include +#include +#include #include +class CardRelation; +class QRegularExpression; + // many users prefer not to see these sets with non english arts // they will given priority PriorityLowest const QStringList nonEnglishSets = {"4BB", "FBB", "PS11", "PSAL", "REN", "RIN"}; @@ -174,9 +185,10 @@ private: /** * Whether readSetsFromByteArray() should report scan progress via - * dataReadProgress. A background run routes that signal to stdout (for the - * hosting Cockatrice client to parse); the flag exists to skip the scanner - * instrumentation entirely when no consumer needs it. + * dataReadProgress. The wizard streams that signal to stdout (for the + * hosting Cockatrice client to parse) in both interactive and background + * runs; the flag exists to skip the scanner instrumentation entirely when + * no consumer needs it. */ bool progressReporting = true; @@ -244,9 +256,9 @@ public: * @brief Controls whether readSetsFromByteArray() instruments the raw scan. * * When enabled (the default) the raw scanner reports progress via - * dataReadProgress(), which an interactive wizard shows on its progress bar - * and a background run routes to stdout for the hosting client. Switch it - * off only when nothing will consume scan progress. + * dataReadProgress(), which the wizard streams to stdout (so the hosting + * Cockatrice client can show it) and also displays on its own progress bar. + * Switch it off only when nothing will consume scan progress. */ void setProgressReporting(bool enabled) { diff --git a/oracle/src/oraclewizard.cpp b/oracle/src/oraclewizard.cpp index 9ce0d7b51..05f08ce64 100644 --- a/oracle/src/oraclewizard.cpp +++ b/oracle/src/oraclewizard.cpp @@ -6,17 +6,28 @@ #include "pages.h" #include "pagetemplates.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include + +class QWidget; OracleWizard::OracleWizard(QWidget *parent) : QWizard(parent) { @@ -64,6 +75,7 @@ OracleWizard::OracleWizard(QWidget *parent) : QWizard(parent) } retranslateUi(); + startRaiseServer(); } /** @@ -132,6 +144,54 @@ void OracleWizard::runInBackground() currentPage()->initializePage(); } +void OracleWizard::startRaiseServer() +{ + // Scope the socket name to the current user, mirroring the hosting client. + raiseServer = new QLocalServer(this); + connect(raiseServer, &QLocalServer::newConnection, this, &OracleWizard::handleRaiseRequest); + const QString serverName = scopedLocalServerName(QStringLiteral("CockatriceOracleRaise")); + if (raiseServer->listen(serverName)) { + return; + } + // A stale socket left behind by a crashed run holds the name: take it back. + QLocalServer::removeServer(serverName); + if (!raiseServer->listen(serverName)) { + qWarning() << "Oracle: could not listen for raise requests on" << serverName; + delete raiseServer; + raiseServer = nullptr; + } +} + +void OracleWizard::handleRaiseRequest() +{ + while (raiseServer && raiseServer->hasPendingConnections()) { + QLocalSocket *socket = raiseServer->nextPendingConnection(); + connect(socket, &QLocalSocket::readyRead, this, [this, socket]() { + socket->readAll(); + socket->deleteLater(); + raiseWizard(); + }); + connect(socket, &QLocalSocket::disconnected, socket, &QLocalSocket::deleteLater); + } + raiseWizard(); +} + +void OracleWizard::raiseWizard() +{ + // An ongoing background run is hidden; the user asked to see it, so promote it to a window. + if (backgroundMode && !isVisible()) { + show(); + } + if (isMinimized()) { + showNormal(); + } + raise(); + activateWindow(); + if (windowHandle()) { + windowHandle()->requestActivate(); + } +} + void OracleWizard::enableButtons() { button(QWizard::NextButton)->setDisabled(false); diff --git a/oracle/src/oraclewizard.h b/oracle/src/oraclewizard.h index 9a509ce5e..ea652bdc5 100644 --- a/oracle/src/oraclewizard.h +++ b/oracle/src/oraclewizard.h @@ -1,21 +1,17 @@ #ifndef ORACLEWIZARD_H #define ORACLEWIZARD_H +#include +#include #include +#include #include -class QCheckBox; -class QGroupBox; -class QComboBox; -class QLabel; -class QLineEdit; -class QRadioButton; -class QProgressBar; class QNetworkAccessManager; -class QTextEdit; -class QVBoxLayout; class OracleImporter; +class QLocalServer; class QSettings; +class QWidget; class OracleWizard : public QWizard { @@ -65,6 +61,7 @@ public: private slots: void updateLanguage(); + void handleRaiseRequest(); private: QByteArray tokensData; @@ -72,6 +69,13 @@ private: QString cardSourceVersion; void migrateOracleSettings(); + /** + * @brief Starts the local socket the hosting Cockatrice client uses to bring this wizard forward. + */ + void startRaiseServer(); + /** @brief Shows, raises and activates the wizard window. */ + void raiseWizard(); + QLocalServer *raiseServer = nullptr; ///< listens for raise requests from the hosting client protected: void changeEvent(QEvent *event) override; diff --git a/oracle/src/pages.cpp b/oracle/src/pages.cpp index 566c88520..8c286fb46 100644 --- a/oracle/src/pages.cpp +++ b/oracle/src/pages.cpp @@ -4,36 +4,59 @@ #include "main.h" #include "oracleimporter.h" #include "oraclewizard.h" -#include "pages.h" #include "pagetemplates.h" #include "version_string.h" -#include #include #include #include +#include #include #include +#include #include +#include #include +#include +#include +#include #include #include +#include +#include #include #include #include +#include +#include #include #include #include #include #include -#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include + +class QWidget; #ifdef HAS_LZMA #include "lzma/decompress.h" @@ -59,13 +82,12 @@ #endif /** - * @brief Emits one machine-readable background-run progress line to stdout. + * @brief Emits one machine-readable progress line to stdout. * - * Used only in background mode, so the hosting Cockatrice client can parse these - * lines to drive a determinate progress bar. stderr stays reserved for - * human-readable log output. + * The hosting Cockatrice client parses these lines to drive a determinate + * progress bar. stderr stays reserved for human-readable log output. */ -static void emitBackgroundProgress(const char *stage, qint64 done, qint64 total) +static void emitProgress(const char *stage, qint64 done, qint64 total) { QTextStream out(stdout); out << "PROGRESS " << stage << ' ' << done << ' ' << total << '\n'; @@ -450,9 +472,7 @@ void LoadSetsPage::downloadSetsFile(const QUrl &url) void LoadSetsPage::actDownloadProgressSetsFile(qint64 received, qint64 total) { - if (wizard()->backgroundMode) { - emitBackgroundProgress("download", received, total); - } + emitProgress("download", received, total); if (total > 0) { progressBar->setMaximum(static_cast(total)); progressBar->setValue(static_cast(received)); @@ -511,7 +531,7 @@ void LoadSetsPage::updateParsingProgress(int bytesRead, int totalBytes) void LoadSetsPage::scanProgressToStdout(int bytesRead, int totalBytes) { - emitBackgroundProgress("scan", bytesRead, totalBytes); + emitProgress("scan", bytesRead, totalBytes); } void LoadSetsPage::beginLoadSets(bool compressedFile) @@ -818,18 +838,18 @@ void SaveSetsPage::updateTotalProgress(int cardsImported, int setIndex, const QS const int cardCount = wizard()->importer->getCardList().size(); if (wizard()->backgroundMode) { qInfo() << tr("Import finished: %1 cards.").arg(cardCount); - emitBackgroundProgress("import", totalSets, totalSets); } else { messageLog->append("" + tr("Import finished: %1 cards.").arg(cardCount) + ""); } + emitProgress("import", totalSets, totalSets); } else { progressBar->setValue(setIndex); if (wizard()->backgroundMode) { qInfo() << tr("%1: %2 cards imported").arg(setName).arg(cardsImported); - emitBackgroundProgress("import", setIndex, totalSets); } else { messageLog->append(tr("%1: %2 cards imported").arg(setName).arg(cardsImported)); } + emitProgress("import", setIndex, totalSets); } messageLog->verticalScrollBar()->setValue(messageLog->verticalScrollBar()->maximum()); diff --git a/oracle/src/pages.h b/oracle/src/pages.h index d0a9fcd43..221f032d3 100644 --- a/oracle/src/pages.h +++ b/oracle/src/pages.h @@ -7,22 +7,20 @@ #include #include #include -#include -#include -#include +#include +#include +#include class QCheckBox; -class QGroupBox; class QComboBox; class QLabel; class QLineEdit; class QRadioButton; class QProgressBar; -class QNetworkAccessManager; class QTextEdit; -class QVBoxLayout; -class OracleImporter; -class QSettings; +class QPushButton; +class QUrl; +class QWidget; class IntroPage : public OracleWizardPage { diff --git a/oracle/src/pagetemplates.cpp b/oracle/src/pagetemplates.cpp index 0ffeabbb3..d37818dcb 100644 --- a/oracle/src/pagetemplates.cpp +++ b/oracle/src/pagetemplates.cpp @@ -3,17 +3,32 @@ #include "oraclewizard.h" #include +#include #include +#include #include +#include #include +#include #include #include +#include #include +#include #include +#include +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include + +class QWidget; SimpleDownloadFilePage::SimpleDownloadFilePage(QWidget *parent) : OracleWizardPage(parent) { diff --git a/oracle/src/pagetemplates.h b/oracle/src/pagetemplates.h index ccad7ec62..2a996801d 100644 --- a/oracle/src/pagetemplates.h +++ b/oracle/src/pagetemplates.h @@ -1,15 +1,21 @@ #ifndef PAGETEMPLATES_H #define PAGETEMPLATES_H +#include +#include #include +#include +#include -class QFile; class QRadioButton; class OracleWizard; class QCheckBox; class QLabel; class QLineEdit; class QProgressBar; +class QPushButton; +class QUrl; +class QWidget; class OracleWizardPage : public QWizardPage { diff --git a/oracle/src/parsehelpers.cpp b/oracle/src/parsehelpers.cpp index ee7c4eb2e..2c897031f 100644 --- a/oracle/src/parsehelpers.cpp +++ b/oracle/src/parsehelpers.cpp @@ -1,7 +1,11 @@ #include "parsehelpers.h" #include +#include #include +#include +#include +#include /** * Parses the card text to determine if the card should have the cipt tag diff --git a/oracle/src/raw_json_scanner.cpp b/oracle/src/raw_json_scanner.cpp index 8c4633598..2396b59ae 100644 --- a/oracle/src/raw_json_scanner.cpp +++ b/oracle/src/raw_json_scanner.cpp @@ -1,5 +1,9 @@ #include "raw_json_scanner.h" +#include +#include +#include +#include #include #include diff --git a/oracle/src/raw_json_scanner.h b/oracle/src/raw_json_scanner.h index 04fcc52e4..18030d834 100644 --- a/oracle/src/raw_json_scanner.h +++ b/oracle/src/raw_json_scanner.h @@ -1,11 +1,13 @@ #ifndef RAW_JSON_SCANNER_H #define RAW_JSON_SCANNER_H -#include #include #include +#include #include +class QByteArray; + namespace RawJson { diff --git a/qt6.imp b/qt6.imp new file mode 100644 index 000000000..4f09d6406 --- /dev/null +++ b/qt6.imp @@ -0,0 +1,2471 @@ +# Do not edit! Generated by generate_qt_mappings.py from +# /usr/include/qt6 +[ + { "symbol": [ "QAbstractAnimation", "private", "", "public"] }, + { "symbol": [ "QAbstractButton", "private", "", "public"] }, + { "symbol": [ "QAbstractEventDispatcher", "private", "", "public"] }, + { "symbol": [ "QAbstractEventDispatcherV2", "private", "", "public"] }, + { "symbol": [ "QAbstractFileIconProvider", "private", "", "public"] }, + { "symbol": [ "QAbstractGraphicsShapeItem", "private", "", "public"] }, + { "symbol": [ "QAbstractItemDelegate", "private", "", "public"] }, + { "symbol": [ "QAbstractItemModel", "private", "", "public"] }, + { "symbol": [ "QAbstractItemModelTester", "private", "", "public"] }, + { "symbol": [ "QAbstractItemView", "private", "", "public"] }, + { "symbol": [ "QAbstractListModel", "private", "", "public"] }, + { "symbol": [ "QAbstractNativeEventFilter", "private", "", "public"] }, + { "symbol": [ "QAbstractNetworkCache", "private", "", "public"] }, + { "symbol": [ "QAbstractOAuth", "private", "", "public"] }, + { "symbol": [ "QAbstractOAuth2", "private", "", "public"] }, + { "symbol": [ "QAbstractOAuthReplyHandler", "private", "", "public"] }, + { "symbol": [ "QAbstractPrintDialog", "private", "", "public"] }, + { "symbol": [ "QAbstractProxyModel", "private", "", "public"] }, + { "symbol": [ "QAbstractScrollArea", "private", "", "public"] }, + { "symbol": [ "QAbstractSlider", "private", "", "public"] }, + { "symbol": [ "QAbstractSocket", "private", "", "public"] }, + { "symbol": [ "QAbstractSpinBox", "private", "", "public"] }, + { "symbol": [ "QAbstractState", "private", "", "public"] }, + { "symbol": [ "QAbstractTableModel", "private", "", "public"] }, + { "symbol": [ "QAbstractTextDocumentLayout", "private", "", "public"] }, + { "symbol": [ "QAbstractTransition", "private", "", "public"] }, + { "symbol": [ "QAbstractUndoItem", "private", "", "public"] }, + { "symbol": [ "QAbstractVideoBuffer", "private", "", "public"] }, + { "symbol": [ "QAccessibilityHints", "private", "", "public"] }, + { "symbol": [ "QAccessible", "private", "", "public"] }, + { "symbol": [ "QAccessibleActionInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleAnnouncementEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleApplication", "private", "", "public"] }, + { "symbol": [ "QAccessibleAttributesInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleBridge", "private", "", "public"] }, + { "symbol": [ "QAccessibleBridgePlugin", "private", "", "public"] }, + { "symbol": [ "QAccessibleEditableTextInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleHyperlinkInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleImageInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleObject", "private", "", "public"] }, + { "symbol": [ "QAccessiblePlugin", "private", "", "public"] }, + { "symbol": [ "QAccessibleSelectionInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleStateChangeEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTableCellInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleTableInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleTableModelChangeEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextCursorEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextInsertEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextRemoveEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextSelectionEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleTextUpdateEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleValueChangeEvent", "private", "", "public"] }, + { "symbol": [ "QAccessibleValueInterface", "private", "", "public"] }, + { "symbol": [ "QAccessibleWidget", "private", "", "public"] }, + { "symbol": [ "QAccessibleWidgetV2", "private", "", "public"] }, + { "symbol": [ "QAction", "private", "", "public"] }, + { "symbol": [ "QActionEvent", "private", "", "public"] }, + { "symbol": [ "QActionGroup", "private", "", "public"] }, + { "symbol": [ "QAmbientSound", "private", "", "public"] }, + { "symbol": [ "QAnimationDriver", "private", "", "public"] }, + { "symbol": [ "QAnimationGroup", "private", "", "public"] }, + { "symbol": [ "QAnyStringView", "private", "", "public"] }, + { "symbol": [ "QApplication", "private", "", "public"] }, + { "symbol": [ "QApplicationStateChangeEvent", "private", "", "public"] }, + { "symbol": [ "QApplicationStatic", "private", "", "public"] }, + { "symbol": [ "QArgument", "private", "", "public"] }, + { "symbol": [ "QArrayData", "private", "", "public"] }, + { "symbol": [ "QArrayDataOps", "private", "", "public"] }, + { "symbol": [ "QArrayDataPointer", "private", "", "public"] }, + { "symbol": [ "QAssociativeConstIterator", "private", "", "public"] }, + { "symbol": [ "QAssociativeIterable", "private", "", "public"] }, + { "symbol": [ "QAssociativeIterator", "private", "", "public"] }, + { "symbol": [ "QAtomicInt", "private", "", "public"] }, + { "symbol": [ "QAtomicInteger", "private", "", "public"] }, + { "symbol": [ "QAtomicPointer", "private", "", "public"] }, + { "symbol": [ "QAtomicScopedValueRollback", "private", "", "public"] }, + { "symbol": [ "QAudio", "private", "", "public"] }, + { "symbol": [ "QAudioBuffer", "private", "", "public"] }, + { "symbol": [ "QAudioBufferInput", "private", "", "public"] }, + { "symbol": [ "QAudioBufferOutput", "private", "", "public"] }, + { "symbol": [ "QAudioDecoder", "private", "", "public"] }, + { "symbol": [ "QAudioDevice", "private", "", "public"] }, + { "symbol": [ "QAudioEngine", "private", "", "public"] }, + { "symbol": [ "QAudioFormat", "private", "", "public"] }, + { "symbol": [ "QAudioFrame", "private", "", "public"] }, + { "symbol": [ "QAudioInput", "private", "", "public"] }, + { "symbol": [ "QAudioListener", "private", "", "public"] }, + { "symbol": [ "QAudioOutput", "private", "", "public"] }, + { "symbol": [ "QAudioRoom", "private", "", "public"] }, + { "symbol": [ "QAudioSink", "private", "", "public"] }, + { "symbol": [ "QAudioSource", "private", "", "public"] }, + { "symbol": [ "QAuthenticator", "private", "", "public"] }, + { "symbol": [ "QBEInteger", "private", "", "public"] }, + { "symbol": [ "QBackingStore", "private", "", "public"] }, + { "symbol": [ "QBaseIterator", "private", "", "public"] }, + { "symbol": [ "QBasicMutex", "private", "", "public"] }, + { "symbol": [ "QBasicReadWriteLock", "private", "", "public"] }, + { "symbol": [ "QBasicTimer", "private", "", "public"] }, + { "symbol": [ "QBasicUtf8StringView", "private", "", "public"] }, + { "symbol": [ "QBigEndianStorageType", "private", "", "public"] }, + { "symbol": [ "QBinaryJson", "private", "", "public"] }, + { "symbol": [ "QBindable", "private", "", "public"] }, + { "symbol": [ "QBindingStatus", "private", "", "public"] }, + { "symbol": [ "QBindingStorage", "private", "", "public"] }, + { "symbol": [ "QBitArray", "private", "", "public"] }, + { "symbol": [ "QBitRef", "private", "", "public"] }, + { "symbol": [ "QBitmap", "private", "", "public"] }, + { "symbol": [ "QBluetoothAddress", "private", "", "public"] }, + { "symbol": [ "QBluetoothDeviceDiscoveryAgent", "private", "", "public"] }, + { "symbol": [ "QBluetoothDeviceInfo", "private", "", "public"] }, + { "symbol": [ "QBluetoothHostInfo", "private", "", "public"] }, + { "symbol": [ "QBluetoothLocalDevice", "private", "", "public"] }, + { "symbol": [ "QBluetoothPermission", "private", "", "public"] }, + { "symbol": [ "QBluetoothServer", "private", "", "public"] }, + { "symbol": [ "QBluetoothServiceDiscoveryAgent", "private", "", "public"] }, + { "symbol": [ "QBluetoothServiceInfo", "private", "", "public"] }, + { "symbol": [ "QBluetoothSocket", "private", "", "public"] }, + { "symbol": [ "QBluetoothUuid", "private", "", "public"] }, + { "symbol": [ "QBoxLayout", "private", "", "public"] }, + { "symbol": [ "QBrush", "private", "", "public"] }, + { "symbol": [ "QBrushData", "private", "", "public"] }, + { "symbol": [ "QBrushDataPointerDeleter", "private", "", "public"] }, + { "symbol": [ "QBuffer", "private", "", "public"] }, + { "symbol": [ "QButtonGroup", "private", "", "public"] }, + { "symbol": [ "QByteArray", "private", "", "public"] }, + { "symbol": [ "QByteArrayAlgorithms", "private", "", "public"] }, + { "symbol": [ "QByteArrayList", "private", "", "public"] }, + { "symbol": [ "QByteArrayListIterator", "private", "", "public"] }, + { "symbol": [ "QByteArrayMatcher", "private", "", "public"] }, + { "symbol": [ "QByteArrayView", "private", "", "public"] }, + { "symbol": [ "QCache", "private", "", "public"] }, + { "symbol": [ "QCalendar", "private", "", "public"] }, + { "symbol": [ "QCalendarPermission", "private", "", "public"] }, + { "symbol": [ "QCalendarWidget", "private", "", "public"] }, + { "symbol": [ "QCamera", "private", "", "public"] }, + { "symbol": [ "QCameraDevice", "private", "", "public"] }, + { "symbol": [ "QCameraFormat", "private", "", "public"] }, + { "symbol": [ "QCapturableWindow", "private", "", "public"] }, + { "symbol": [ "QCborArray", "private", "", "public"] }, + { "symbol": [ "QCborError", "private", "", "public"] }, + { "symbol": [ "QCborMap", "private", "", "public"] }, + { "symbol": [ "QCborParserError", "private", "", "public"] }, + { "symbol": [ "QCborStreamReader", "private", "", "public"] }, + { "symbol": [ "QCborStreamWriter", "private", "", "public"] }, + { "symbol": [ "QCborValue", "private", "", "public"] }, + { "symbol": [ "QCborValueConstRef", "private", "", "public"] }, + { "symbol": [ "QCborValueRef", "private", "", "public"] }, + { "symbol": [ "QChar", "private", "", "public"] }, + { "symbol": [ "QCheckBox", "private", "", "public"] }, + { "symbol": [ "QChildEvent", "private", "", "public"] }, + { "symbol": [ "QChildWindowEvent", "private", "", "public"] }, + { "symbol": [ "QChronoTimer", "private", "", "public"] }, + { "symbol": [ "QClipboard", "private", "", "public"] }, + { "symbol": [ "QCloseEvent", "private", "", "public"] }, + { "symbol": [ "QCollator", "private", "", "public"] }, + { "symbol": [ "QCollatorSortKey", "private", "", "public"] }, + { "symbol": [ "QColor", "private", "", "public"] }, + { "symbol": [ "QColorDialog", "private", "", "public"] }, + { "symbol": [ "QColorSpace", "private", "", "public"] }, + { "symbol": [ "QColorTransform", "private", "", "public"] }, + { "symbol": [ "QColormap", "private", "", "public"] }, + { "symbol": [ "QColumnView", "private", "", "public"] }, + { "symbol": [ "QComboBox", "private", "", "public"] }, + { "symbol": [ "QCommandLineOption", "private", "", "public"] }, + { "symbol": [ "QCommandLineParser", "private", "", "public"] }, + { "symbol": [ "QCommandLinkButton", "private", "", "public"] }, + { "symbol": [ "QCommonStyle", "private", "", "public"] }, + { "symbol": [ "QCompleter", "private", "", "public"] }, + { "symbol": [ "QCompressedHelpInfo", "private", "", "public"] }, + { "symbol": [ "QConcatenateTablesProxyModel", "private", "", "public"] }, + { "symbol": [ "QConicalGradient", "private", "", "public"] }, + { "symbol": [ "QConstIterator", "private", "", "public"] }, + { "symbol": [ "QContactsPermission", "private", "", "public"] }, + { "symbol": [ "QContextMenuEvent", "private", "", "public"] }, + { "symbol": [ "QContiguousCache", "private", "", "public"] }, + { "symbol": [ "QContiguousCacheData", "private", "", "public"] }, + { "symbol": [ "QContiguousCacheTypedData", "private", "", "public"] }, + { "symbol": [ "QCoreApplication", "private", "", "public"] }, + { "symbol": [ "QCryptographicHash", "private", "", "public"] }, + { "symbol": [ "QCursor", "private", "", "public"] }, + { "symbol": [ "QDBusAbstractAdaptor", "private", "", "public"] }, + { "symbol": [ "QDBusAbstractInterface", "private", "", "public"] }, + { "symbol": [ "QDBusAbstractInterfaceBase", "private", "", "public"] }, + { "symbol": [ "QDBusArgument", "private", "", "public"] }, + { "symbol": [ "QDBusConnection", "private", "", "public"] }, + { "symbol": [ "QDBusConnectionInterface", "private", "", "public"] }, + { "symbol": [ "QDBusContext", "private", "", "public"] }, + { "symbol": [ "QDBusError", "private", "", "public"] }, + { "symbol": [ "QDBusInterface", "private", "", "public"] }, + { "symbol": [ "QDBusMessage", "private", "", "public"] }, + { "symbol": [ "QDBusMetaType", "private", "", "public"] }, + { "symbol": [ "QDBusObjectPath", "private", "", "public"] }, + { "symbol": [ "QDBusPendingCall", "private", "", "public"] }, + { "symbol": [ "QDBusPendingCallWatcher", "private", "", "public"] }, + { "symbol": [ "QDBusPendingReply", "private", "", "public"] }, + { "symbol": [ "QDBusPendingReplyBase", "private", "", "public"] }, + { "symbol": [ "QDBusReply", "private", "", "public"] }, + { "symbol": [ "QDBusServer", "private", "", "public"] }, + { "symbol": [ "QDBusServiceWatcher", "private", "", "public"] }, + { "symbol": [ "QDBusSignature", "private", "", "public"] }, + { "symbol": [ "QDBusUnixFileDescriptor", "private", "", "public"] }, + { "symbol": [ "QDBusVariant", "private", "", "public"] }, + { "symbol": [ "QDBusVirtualObject", "private", "", "public"] }, + { "symbol": [ "QDataStream", "private", "", "public"] }, + { "symbol": [ "QDataWidgetMapper", "private", "", "public"] }, + { "symbol": [ "QDate", "private", "", "public"] }, + { "symbol": [ "QDateEdit", "private", "", "public"] }, + { "symbol": [ "QDateTime", "private", "", "public"] }, + { "symbol": [ "QDateTimeEdit", "private", "", "public"] }, + { "symbol": [ "QDeadlineTimer", "private", "", "public"] }, + { "symbol": [ "QDebug", "private", "", "public"] }, + { "symbol": [ "QDebugStateSaver", "private", "", "public"] }, + { "symbol": [ "QDesignerExportWidget", "private", "", "public"] }, + { "symbol": [ "QDesktopServices", "private", "", "public"] }, + { "symbol": [ "QDial", "private", "", "public"] }, + { "symbol": [ "QDialog", "private", "", "public"] }, + { "symbol": [ "QDialogButtonBox", "private", "", "public"] }, + { "symbol": [ "QDir", "private", "", "public"] }, + { "symbol": [ "QDirIterator", "private", "", "public"] }, + { "symbol": [ "QDirListing", "private", "", "public"] }, + { "symbol": [ "QDnsDomainNameRecord", "private", "", "public"] }, + { "symbol": [ "QDnsHostAddressRecord", "private", "", "public"] }, + { "symbol": [ "QDnsLookup", "private", "", "public"] }, + { "symbol": [ "QDnsMailExchangeRecord", "private", "", "public"] }, + { "symbol": [ "QDnsServiceRecord", "private", "", "public"] }, + { "symbol": [ "QDnsTextRecord", "private", "", "public"] }, + { "symbol": [ "QDnsTlsAssociationRecord", "private", "", "public"] }, + { "symbol": [ "QDockWidget", "private", "", "public"] }, + { "symbol": [ "QDomAttr", "private", "", "public"] }, + { "symbol": [ "QDomCDATASection", "private", "", "public"] }, + { "symbol": [ "QDomCharacterData", "private", "", "public"] }, + { "symbol": [ "QDomComment", "private", "", "public"] }, + { "symbol": [ "QDomDocument", "private", "", "public"] }, + { "symbol": [ "QDomDocumentFragment", "private", "", "public"] }, + { "symbol": [ "QDomDocumentType", "private", "", "public"] }, + { "symbol": [ "QDomElement", "private", "", "public"] }, + { "symbol": [ "QDomEntity", "private", "", "public"] }, + { "symbol": [ "QDomEntityReference", "private", "", "public"] }, + { "symbol": [ "QDomImplementation", "private", "", "public"] }, + { "symbol": [ "QDomNamedNodeMap", "private", "", "public"] }, + { "symbol": [ "QDomNode", "private", "", "public"] }, + { "symbol": [ "QDomNodeList", "private", "", "public"] }, + { "symbol": [ "QDomNotation", "private", "", "public"] }, + { "symbol": [ "QDomProcessingInstruction", "private", "", "public"] }, + { "symbol": [ "QDomText", "private", "", "public"] }, + { "symbol": [ "QDoubleSpinBox", "private", "", "public"] }, + { "symbol": [ "QDoubleValidator", "private", "", "public"] }, + { "symbol": [ "QDrag", "private", "", "public"] }, + { "symbol": [ "QDragEnterEvent", "private", "", "public"] }, + { "symbol": [ "QDragLeaveEvent", "private", "", "public"] }, + { "symbol": [ "QDragMoveEvent", "private", "", "public"] }, + { "symbol": [ "QDropEvent", "private", "", "public"] }, + { "symbol": [ "QDtls", "private", "", "public"] }, + { "symbol": [ "QDtlsClientVerifier", "private", "", "public"] }, + { "symbol": [ "QDynamicPropertyChangeEvent", "private", "", "public"] }, + { "symbol": [ "QEasingCurve", "private", "", "public"] }, + { "symbol": [ "QElapsedTimer", "private", "", "public"] }, + { "symbol": [ "QEnableSharedFromThis", "private", "", "public"] }, + { "symbol": [ "QEnterEvent", "private", "", "public"] }, + { "symbol": [ "QErrorMessage", "private", "", "public"] }, + { "symbol": [ "QEvent", "private", "", "public"] }, + { "symbol": [ "QEventLoop", "private", "", "public"] }, + { "symbol": [ "QEventLoopLocker", "private", "", "public"] }, + { "symbol": [ "QEventPoint", "private", "", "public"] }, + { "symbol": [ "QEventTransition", "private", "", "public"] }, + { "symbol": [ "QException", "private", "", "public"] }, + { "symbol": [ "QExplicitlySharedDataPointer", "private", "", "public"] }, + { "symbol": [ "QExposeEvent", "private", "", "public"] }, + { "symbol": [ "QFactoryInterface", "private", "", "public"] }, + { "symbol": [ "QFile", "private", "", "public"] }, + { "symbol": [ "QFileDevice", "private", "", "public"] }, + { "symbol": [ "QFileDialog", "private", "", "public"] }, + { "symbol": [ "QFileIconProvider", "private", "", "public"] }, + { "symbol": [ "QFileInfo", "private", "", "public"] }, + { "symbol": [ "QFileInfoList", "private", "", "public"] }, + { "symbol": [ "QFileOpenEvent", "private", "", "public"] }, + { "symbol": [ "QFileSelector", "private", "", "public"] }, + { "symbol": [ "QFileSystemModel", "private", "", "public"] }, + { "symbol": [ "QFileSystemWatcher", "private", "", "public"] }, + { "symbol": [ "QFinalState", "private", "", "public"] }, + { "symbol": [ "QFlag", "private", "", "public"] }, + { "symbol": [ "QFlags", "private", "", "public"] }, + { "symbol": [ "QFloat16", "private", "", "public"] }, + { "symbol": [ "QFocusEvent", "private", "", "public"] }, + { "symbol": [ "QFocusFrame", "private", "", "public"] }, + { "symbol": [ "QFont", "private", "", "public"] }, + { "symbol": [ "QFontComboBox", "private", "", "public"] }, + { "symbol": [ "QFontDatabase", "private", "", "public"] }, + { "symbol": [ "QFontDialog", "private", "", "public"] }, + { "symbol": [ "QFontInfo", "private", "", "public"] }, + { "symbol": [ "QFontMetrics", "private", "", "public"] }, + { "symbol": [ "QFontMetricsF", "private", "", "public"] }, + { "symbol": [ "QFontVariableAxis", "private", "", "public"] }, + { "symbol": [ "QForeach", "private", "", "public"] }, + { "symbol": [ "QFormDataBuilder", "private", "", "public"] }, + { "symbol": [ "QFormDataPartBuilder", "private", "", "public"] }, + { "symbol": [ "QFormLayout", "private", "", "public"] }, + { "symbol": [ "QFrame", "private", "", "public"] }, + { "symbol": [ "QFunctionPointer", "private", "", "public"] }, + { "symbol": [ "QFuture", "private", "", "public"] }, + { "symbol": [ "QFutureInterface", "private", "", "public"] }, + { "symbol": [ "QFutureInterfaceBase", "private", "", "public"] }, + { "symbol": [ "QFutureIterator", "private", "", "public"] }, + { "symbol": [ "QFutureSynchronizer", "private", "", "public"] }, + { "symbol": [ "QFutureWatcher", "private", "", "public"] }, + { "symbol": [ "QFutureWatcherBase", "private", "", "public"] }, + { "symbol": [ "QGenericArgument", "private", "", "public"] }, + { "symbol": [ "QGenericMatrix", "private", "", "public"] }, + { "symbol": [ "QGenericPlugin", "private", "", "public"] }, + { "symbol": [ "QGenericPluginFactory", "private", "", "public"] }, + { "symbol": [ "QGenericReturnArgument", "private", "", "public"] }, + { "symbol": [ "QGesture", "private", "", "public"] }, + { "symbol": [ "QGestureEvent", "private", "", "public"] }, + { "symbol": [ "QGestureRecognizer", "private", "", "public"] }, + { "symbol": [ "QGlobalStatic", "private", "", "public"] }, + { "symbol": [ "QGlyphRun", "private", "", "public"] }, + { "symbol": [ "QGradient", "private", "", "public"] }, + { "symbol": [ "QGradientStop", "private", "", "public"] }, + { "symbol": [ "QGradientStops", "private", "", "public"] }, + { "symbol": [ "QGraphicsAnchor", "private", "", "public"] }, + { "symbol": [ "QGraphicsAnchorLayout", "private", "", "public"] }, + { "symbol": [ "QGraphicsBlurEffect", "private", "", "public"] }, + { "symbol": [ "QGraphicsColorizeEffect", "private", "", "public"] }, + { "symbol": [ "QGraphicsDropShadowEffect", "private", "", "public"] }, + { "symbol": [ "QGraphicsEffect", "private", "", "public"] }, + { "symbol": [ "QGraphicsEllipseItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsGridLayout", "private", "", "public"] }, + { "symbol": [ "QGraphicsItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsItemAnimation", "private", "", "public"] }, + { "symbol": [ "QGraphicsItemGroup", "private", "", "public"] }, + { "symbol": [ "QGraphicsLayout", "private", "", "public"] }, + { "symbol": [ "QGraphicsLayoutItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsLineItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsLinearLayout", "private", "", "public"] }, + { "symbol": [ "QGraphicsObject", "private", "", "public"] }, + { "symbol": [ "QGraphicsOpacityEffect", "private", "", "public"] }, + { "symbol": [ "QGraphicsPathItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsPixmapItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsPolygonItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsProxyWidget", "private", "", "public"] }, + { "symbol": [ "QGraphicsRectItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsRotation", "private", "", "public"] }, + { "symbol": [ "QGraphicsScale", "private", "", "public"] }, + { "symbol": [ "QGraphicsScene", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneContextMenuEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneDragDropEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneHelpEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneHoverEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneMouseEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneMoveEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneResizeEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSceneWheelEvent", "private", "", "public"] }, + { "symbol": [ "QGraphicsSimpleTextItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsSvgItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsTextItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsTransform", "private", "", "public"] }, + { "symbol": [ "QGraphicsVideoItem", "private", "", "public"] }, + { "symbol": [ "QGraphicsView", "private", "", "public"] }, + { "symbol": [ "QGraphicsWidget", "private", "", "public"] }, + { "symbol": [ "QGridLayout", "private", "", "public"] }, + { "symbol": [ "QGroupBox", "private", "", "public"] }, + { "symbol": [ "QGuiApplication", "private", "", "public"] }, + { "symbol": [ "QHBoxLayout", "private", "", "public"] }, + { "symbol": [ "QHash", "private", "", "public"] }, + { "symbol": [ "QHashDummyValue", "private", "", "public"] }, + { "symbol": [ "QHashFunctions", "private", "", "public"] }, + { "symbol": [ "QHashHeterogeneousSearch", "private", "", "public"] }, + { "symbol": [ "QHashIterator", "private", "", "public"] }, + { "symbol": [ "QHashSeed", "private", "", "public"] }, + { "symbol": [ "QHeaderView", "private", "", "public"] }, + { "symbol": [ "QHelpContentItem", "private", "", "public"] }, + { "symbol": [ "QHelpContentModel", "private", "", "public"] }, + { "symbol": [ "QHelpContentWidget", "private", "", "public"] }, + { "symbol": [ "QHelpEngine", "private", "", "public"] }, + { "symbol": [ "QHelpEngineCore", "private", "", "public"] }, + { "symbol": [ "QHelpEvent", "private", "", "public"] }, + { "symbol": [ "QHelpFilterData", "private", "", "public"] }, + { "symbol": [ "QHelpFilterEngine", "private", "", "public"] }, + { "symbol": [ "QHelpFilterSettingsWidget", "private", "", "public"] }, + { "symbol": [ "QHelpGlobal", "private", "", "public"] }, + { "symbol": [ "QHelpIndexModel", "private", "", "public"] }, + { "symbol": [ "QHelpIndexWidget", "private", "", "public"] }, + { "symbol": [ "QHelpLink", "private", "", "public"] }, + { "symbol": [ "QHelpSearchEngine", "private", "", "public"] }, + { "symbol": [ "QHelpSearchEngineCore", "private", "", "public"] }, + { "symbol": [ "QHelpSearchQuery", "private", "", "public"] }, + { "symbol": [ "QHelpSearchQueryWidget", "private", "", "public"] }, + { "symbol": [ "QHelpSearchResult", "private", "", "public"] }, + { "symbol": [ "QHelpSearchResultWidget", "private", "", "public"] }, + { "symbol": [ "QHideEvent", "private", "", "public"] }, + { "symbol": [ "QHistoryState", "private", "", "public"] }, + { "symbol": [ "QHostAddress", "private", "", "public"] }, + { "symbol": [ "QHostInfo", "private", "", "public"] }, + { "symbol": [ "QHoverEvent", "private", "", "public"] }, + { "symbol": [ "QHstsPolicy", "private", "", "public"] }, + { "symbol": [ "QHttp1Configuration", "private", "", "public"] }, + { "symbol": [ "QHttp2Configuration", "private", "", "public"] }, + { "symbol": [ "QHttpHeaders", "private", "", "public"] }, + { "symbol": [ "QHttpMultiPart", "private", "", "public"] }, + { "symbol": [ "QHttpPart", "private", "", "public"] }, + { "symbol": [ "QIODevice", "private", "", "public"] }, + { "symbol": [ "QIODeviceBase", "private", "", "public"] }, + { "symbol": [ "QIPv6Address", "private", "", "public"] }, + { "symbol": [ "QIcon", "private", "", "public"] }, + { "symbol": [ "QIconDragEvent", "private", "", "public"] }, + { "symbol": [ "QIconEngine", "private", "", "public"] }, + { "symbol": [ "QIconEnginePlugin", "private", "", "public"] }, + { "symbol": [ "QIdentityProxyModel", "private", "", "public"] }, + { "symbol": [ "QImage", "private", "", "public"] }, + { "symbol": [ "QImageCapture", "private", "", "public"] }, + { "symbol": [ "QImageCleanupFunction", "private", "", "public"] }, + { "symbol": [ "QImageIOHandler", "private", "", "public"] }, + { "symbol": [ "QImageIOPlugin", "private", "", "public"] }, + { "symbol": [ "QImageReader", "private", "", "public"] }, + { "symbol": [ "QImageWriter", "private", "", "public"] }, + { "symbol": [ "QIncompatibleFlag", "private", "", "public"] }, + { "symbol": [ "QInputDevice", "private", "", "public"] }, + { "symbol": [ "QInputDialog", "private", "", "public"] }, + { "symbol": [ "QInputEvent", "private", "", "public"] }, + { "symbol": [ "QInputMethod", "private", "", "public"] }, + { "symbol": [ "QInputMethodEvent", "private", "", "public"] }, + { "symbol": [ "QInputMethodQueryEvent", "private", "", "public"] }, + { "symbol": [ "QIntValidator", "private", "", "public"] }, + { "symbol": [ "QInternal", "private", "", "public"] }, + { "symbol": [ "QItemDelegate", "private", "", "public"] }, + { "symbol": [ "QItemEditorCreator", "private", "", "public"] }, + { "symbol": [ "QItemEditorCreatorBase", "private", "", "public"] }, + { "symbol": [ "QItemEditorFactory", "private", "", "public"] }, + { "symbol": [ "QItemSelection", "private", "", "public"] }, + { "symbol": [ "QItemSelectionModel", "private", "", "public"] }, + { "symbol": [ "QItemSelectionRange", "private", "", "public"] }, + { "symbol": [ "QIterable", "private", "", "public"] }, + { "symbol": [ "QIterator", "private", "", "public"] }, + { "symbol": [ "QJSEngine", "private", "", "public"] }, + { "symbol": [ "QJSList", "private", "", "public"] }, + { "symbol": [ "QJSListForInIterator", "private", "", "public"] }, + { "symbol": [ "QJSListForOfIterator", "private", "", "public"] }, + { "symbol": [ "QJSListIndexClamp", "private", "", "public"] }, + { "symbol": [ "QJSManagedValue", "private", "", "public"] }, + { "symbol": [ "QJSNumberCoercion", "private", "", "public"] }, + { "symbol": [ "QJSPrimitiveValue", "private", "", "public"] }, + { "symbol": [ "QJSValue", "private", "", "public"] }, + { "symbol": [ "QJSValueIterator", "private", "", "public"] }, + { "symbol": [ "QJSValueList", "private", "", "public"] }, + { "symbol": [ "QJsonArray", "private", "", "public"] }, + { "symbol": [ "QJsonDocument", "private", "", "public"] }, + { "symbol": [ "QJsonObject", "private", "", "public"] }, + { "symbol": [ "QJsonParseError", "private", "", "public"] }, + { "symbol": [ "QJsonValue", "private", "", "public"] }, + { "symbol": [ "QJsonValueConstRef", "private", "", "public"] }, + { "symbol": [ "QJsonValueRef", "private", "", "public"] }, + { "symbol": [ "QKeyCombination", "private", "", "public"] }, + { "symbol": [ "QKeyEvent", "private", "", "public"] }, + { "symbol": [ "QKeyEventTransition", "private", "", "public"] }, + { "symbol": [ "QKeySequence", "private", "", "public"] }, + { "symbol": [ "QKeySequenceEdit", "private", "", "public"] }, + { "symbol": [ "QKeyValueIterator", "private", "", "public"] }, + { "symbol": [ "QLCDNumber", "private", "", "public"] }, + { "symbol": [ "QLEInteger", "private", "", "public"] }, + { "symbol": [ "QLabel", "private", "", "public"] }, + { "symbol": [ "QLatin1Char", "private", "", "public"] }, + { "symbol": [ "QLatin1String", "private", "", "public"] }, + { "symbol": [ "QLatin1StringMatcher", "private", "", "public"] }, + { "symbol": [ "QLatin1StringView", "private", "", "public"] }, + { "symbol": [ "QLayout", "private", "", "public"] }, + { "symbol": [ "QLayoutItem", "private", "", "public"] }, + { "symbol": [ "QLibrary", "private", "", "public"] }, + { "symbol": [ "QLibraryInfo", "private", "", "public"] }, + { "symbol": [ "QLine", "private", "", "public"] }, + { "symbol": [ "QLineEdit", "private", "", "public"] }, + { "symbol": [ "QLineF", "private", "", "public"] }, + { "symbol": [ "QLinearGradient", "private", "", "public"] }, + { "symbol": [ "QLinkedList", "private", "", "public"] }, + { "symbol": [ "QLinkedListData", "private", "", "public"] }, + { "symbol": [ "QLinkedListIterator", "private", "", "public"] }, + { "symbol": [ "QLinkedListNode", "private", "", "public"] }, + { "symbol": [ "QList", "private", "", "public"] }, + { "symbol": [ "QListIterator", "private", "", "public"] }, + { "symbol": [ "QListSpecialMethods", "private", "", "public"] }, + { "symbol": [ "QListSpecialMethodsBase", "private", "", "public"] }, + { "symbol": [ "QListView", "private", "", "public"] }, + { "symbol": [ "QListWidget", "private", "", "public"] }, + { "symbol": [ "QListWidgetItem", "private", "", "public"] }, + { "symbol": [ "QLittleEndianStorageType", "private", "", "public"] }, + { "symbol": [ "QLocalServer", "private", "", "public"] }, + { "symbol": [ "QLocalSocket", "private", "", "public"] }, + { "symbol": [ "QLocale", "private", "", "public"] }, + { "symbol": [ "QLocationPermission", "private", "", "public"] }, + { "symbol": [ "QLockFile", "private", "", "public"] }, + { "symbol": [ "QLoggingCategory", "private", "", "public"] }, + { "symbol": [ "QLowEnergyAdvertisingData", "private", "", "public"] }, + { "symbol": [ "QLowEnergyAdvertisingParameters", "private", "", "public"] }, + { "symbol": [ "QLowEnergyCharacteristic", "private", "", "public"] }, + { "symbol": [ "QLowEnergyCharacteristicData", "private", "", "public"] }, + { "symbol": [ "QLowEnergyConnectionParameters", "private", "", "public"] }, + { "symbol": [ "QLowEnergyController", "private", "", "public"] }, + { "symbol": [ "QLowEnergyDescriptor", "private", "", "public"] }, + { "symbol": [ "QLowEnergyDescriptorData", "private", "", "public"] }, + { "symbol": [ "QLowEnergyHandle", "private", "", "public"] }, + { "symbol": [ "QLowEnergyService", "private", "", "public"] }, + { "symbol": [ "QLowEnergyServiceData", "private", "", "public"] }, + { "symbol": [ "QMainWindow", "private", "", "public"] }, + { "symbol": [ "QMap", "private", "", "public"] }, + { "symbol": [ "QMapData", "private", "", "public"] }, + { "symbol": [ "QMapIterator", "private", "", "public"] }, + { "symbol": [ "QMargins", "private", "", "public"] }, + { "symbol": [ "QMarginsF", "private", "", "public"] }, + { "symbol": [ "QMaskGenerator", "private", "", "public"] }, + { "symbol": [ "QMatrix2x2", "private", "", "public"] }, + { "symbol": [ "QMatrix2x3", "private", "", "public"] }, + { "symbol": [ "QMatrix2x4", "private", "", "public"] }, + { "symbol": [ "QMatrix3x2", "private", "", "public"] }, + { "symbol": [ "QMatrix3x3", "private", "", "public"] }, + { "symbol": [ "QMatrix3x4", "private", "", "public"] }, + { "symbol": [ "QMatrix4x2", "private", "", "public"] }, + { "symbol": [ "QMatrix4x3", "private", "", "public"] }, + { "symbol": [ "QMatrix4x4", "private", "", "public"] }, + { "symbol": [ "QMdiArea", "private", "", "public"] }, + { "symbol": [ "QMdiSubWindow", "private", "", "public"] }, + { "symbol": [ "QMediaCaptureSession", "private", "", "public"] }, + { "symbol": [ "QMediaDevices", "private", "", "public"] }, + { "symbol": [ "QMediaFormat", "private", "", "public"] }, + { "symbol": [ "QMediaMetaData", "private", "", "public"] }, + { "symbol": [ "QMediaPlayer", "private", "", "public"] }, + { "symbol": [ "QMediaRecorder", "private", "", "public"] }, + { "symbol": [ "QMediaTimeRange", "private", "", "public"] }, + { "symbol": [ "QMenu", "private", "", "public"] }, + { "symbol": [ "QMenuBar", "private", "", "public"] }, + { "symbol": [ "QMessageAuthenticationCode", "private", "", "public"] }, + { "symbol": [ "QMessageBox", "private", "", "public"] }, + { "symbol": [ "QMessageLogContext", "private", "", "public"] }, + { "symbol": [ "QMessageLogger", "private", "", "public"] }, + { "symbol": [ "QMetaAssociation", "private", "", "public"] }, + { "symbol": [ "QMetaClassInfo", "private", "", "public"] }, + { "symbol": [ "QMetaContainer", "private", "", "public"] }, + { "symbol": [ "QMetaEnum", "private", "", "public"] }, + { "symbol": [ "QMetaMethod", "private", "", "public"] }, + { "symbol": [ "QMetaMethodArgument", "private", "", "public"] }, + { "symbol": [ "QMetaMethodReturnArgument", "private", "", "public"] }, + { "symbol": [ "QMetaObject", "private", "", "public"] }, + { "symbol": [ "QMetaProperty", "private", "", "public"] }, + { "symbol": [ "QMetaSequence", "private", "", "public"] }, + { "symbol": [ "QMetaType", "private", "", "public"] }, + { "symbol": [ "QMetaTypeId", "private", "", "public"] }, + { "symbol": [ "QMetaTypeId2", "private", "", "public"] }, + { "symbol": [ "QMetaTypeIdQObject", "private", "", "public"] }, + { "symbol": [ "QMethodRawArguments", "private", "", "public"] }, + { "symbol": [ "QMimeData", "private", "", "public"] }, + { "symbol": [ "QMimeDatabase", "private", "", "public"] }, + { "symbol": [ "QMimeType", "private", "", "public"] }, + { "symbol": [ "QModelIndex", "private", "", "public"] }, + { "symbol": [ "QModelIndexList", "private", "", "public"] }, + { "symbol": [ "QModelRoleData", "private", "", "public"] }, + { "symbol": [ "QModelRoleDataSpan", "private", "", "public"] }, + { "symbol": [ "QMouseEvent", "private", "", "public"] }, + { "symbol": [ "QMouseEventTransition", "private", "", "public"] }, + { "symbol": [ "QMoveEvent", "private", "", "public"] }, + { "symbol": [ "QMovie", "private", "", "public"] }, + { "symbol": [ "QMultiHash", "private", "", "public"] }, + { "symbol": [ "QMultiHashIterator", "private", "", "public"] }, + { "symbol": [ "QMultiMap", "private", "", "public"] }, + { "symbol": [ "QMultiMapIterator", "private", "", "public"] }, + { "symbol": [ "QMutableByteArrayListIterator", "private", "", "public"] }, + { "symbol": [ "QMutableFutureIterator", "private", "", "public"] }, + { "symbol": [ "QMutableHashIterator", "private", "", "public"] }, + { "symbol": [ "QMutableLinkedListIterator", "private", "", "public"] }, + { "symbol": [ "QMutableListIterator", "private", "", "public"] }, + { "symbol": [ "QMutableMapIterator", "private", "", "public"] }, + { "symbol": [ "QMutableMultiHashIterator", "private", "", "public"] }, + { "symbol": [ "QMutableMultiMapIterator", "private", "", "public"] }, + { "symbol": [ "QMutableSetIterator", "private", "", "public"] }, + { "symbol": [ "QMutableVectorIterator", "private", "", "public"] }, + { "symbol": [ "QMutex", "private", "", "public"] }, + { "symbol": [ "QMutexLocker", "private", "", "public"] }, + { "symbol": [ "QNativeGestureEvent", "private", "", "public"] }, + { "symbol": [ "QNativeIpcKey", "private", "", "public"] }, + { "symbol": [ "QNetworkAccessManager", "private", "", "public"] }, + { "symbol": [ "QNetworkAddressEntry", "private", "", "public"] }, + { "symbol": [ "QNetworkCacheMetaData", "private", "", "public"] }, + { "symbol": [ "QNetworkCookie", "private", "", "public"] }, + { "symbol": [ "QNetworkCookieJar", "private", "", "public"] }, + { "symbol": [ "QNetworkDatagram", "private", "", "public"] }, + { "symbol": [ "QNetworkDiskCache", "private", "", "public"] }, + { "symbol": [ "QNetworkInformation", "private", "", "public"] }, + { "symbol": [ "QNetworkInterface", "private", "", "public"] }, + { "symbol": [ "QNetworkProxy", "private", "", "public"] }, + { "symbol": [ "QNetworkProxyFactory", "private", "", "public"] }, + { "symbol": [ "QNetworkProxyQuery", "private", "", "public"] }, + { "symbol": [ "QNetworkReply", "private", "", "public"] }, + { "symbol": [ "QNetworkRequest", "private", "", "public"] }, + { "symbol": [ "QNetworkRequestFactory", "private", "", "public"] }, + { "symbol": [ "QNoDebug", "private", "", "public"] }, + { "symbol": [ "QNtfsPermissionCheckGuard", "private", "", "public"] }, + { "symbol": [ "QOAuth1", "private", "", "public"] }, + { "symbol": [ "QOAuth1Signature", "private", "", "public"] }, + { "symbol": [ "QOAuth2AuthorizationCodeFlow", "private", "", "public"] }, + { "symbol": [ "QOAuth2DeviceAuthorizationFlow", "private", "", "public"] }, + { "symbol": [ "QOAuthHttpServerReplyHandler", "private", "", "public"] }, + { "symbol": [ "QOAuthOobReplyHandler", "private", "", "public"] }, + { "symbol": [ "QOAuthUriSchemeReplyHandler", "private", "", "public"] }, + { "symbol": [ "QObject", "private", "", "public"] }, + { "symbol": [ "QObjectBindableProperty", "private", "", "public"] }, + { "symbol": [ "QObjectCleanupHandler", "private", "", "public"] }, + { "symbol": [ "QObjectComputedProperty", "private", "", "public"] }, + { "symbol": [ "QObjectData", "private", "", "public"] }, + { "symbol": [ "QObjectList", "private", "", "public"] }, + { "symbol": [ "QOcspResponse", "private", "", "public"] }, + { "symbol": [ "QOffscreenSurface", "private", "", "public"] }, + { "symbol": [ "QOpenGLBuffer", "private", "", "public"] }, + { "symbol": [ "QOpenGLContext", "private", "", "public"] }, + { "symbol": [ "QOpenGLContextGroup", "private", "", "public"] }, + { "symbol": [ "QOpenGLDebugLogger", "private", "", "public"] }, + { "symbol": [ "QOpenGLDebugMessage", "private", "", "public"] }, + { "symbol": [ "QOpenGLExtraFunctions", "private", "", "public"] }, + { "symbol": [ "QOpenGLExtraFunctionsPrivate", "private", "", "public"] }, + { "symbol": [ "QOpenGLFramebufferObject", "private", "", "public"] }, + { "symbol": [ "QOpenGLFramebufferObjectFormat", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctionsPrivate", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_0", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_1", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_2", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_3", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_4", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_1_5", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_2_0", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_2_1", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_0", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_1", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_2_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_2_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_3_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_3_3_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_0_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_0_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_1_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_1_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_2_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_2_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_3_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_3_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_4_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_4_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_5_Compatibility", "private", "", "public"] }, + { "symbol": [ "QOpenGLFunctions_4_5_Core", "private", "", "public"] }, + { "symbol": [ "QOpenGLPaintDevice", "private", "", "public"] }, + { "symbol": [ "QOpenGLPixelTransferOptions", "private", "", "public"] }, + { "symbol": [ "QOpenGLShader", "private", "", "public"] }, + { "symbol": [ "QOpenGLShaderProgram", "private", "", "public"] }, + { "symbol": [ "QOpenGLTexture", "private", "", "public"] }, + { "symbol": [ "QOpenGLTextureBlitter", "private", "", "public"] }, + { "symbol": [ "QOpenGLTimeMonitor", "private", "", "public"] }, + { "symbol": [ "QOpenGLTimerQuery", "private", "", "public"] }, + { "symbol": [ "QOpenGLVersionFunctions", "private", "", "public"] }, + { "symbol": [ "QOpenGLVersionFunctionsFactory", "private", "", "public"] }, + { "symbol": [ "QOpenGLVersionProfile", "private", "", "public"] }, + { "symbol": [ "QOpenGLVertexArrayObject", "private", "", "public"] }, + { "symbol": [ "QOpenGLWidget", "private", "", "public"] }, + { "symbol": [ "QOpenGLWindow", "private", "", "public"] }, + { "symbol": [ "QOperatingSystemVersion", "private", "", "public"] }, + { "symbol": [ "QOperatingSystemVersionBase", "private", "", "public"] }, + { "symbol": [ "QOperatingSystemVersionUnexported", "private", "", "public"] }, + { "symbol": [ "QPageLayout", "private", "", "public"] }, + { "symbol": [ "QPageRanges", "private", "", "public"] }, + { "symbol": [ "QPageSetupDialog", "private", "", "public"] }, + { "symbol": [ "QPageSize", "private", "", "public"] }, + { "symbol": [ "QPagedPaintDevice", "private", "", "public"] }, + { "symbol": [ "QPaintDevice", "private", "", "public"] }, + { "symbol": [ "QPaintDeviceWindow", "private", "", "public"] }, + { "symbol": [ "QPaintEngine", "private", "", "public"] }, + { "symbol": [ "QPaintEngineState", "private", "", "public"] }, + { "symbol": [ "QPaintEvent", "private", "", "public"] }, + { "symbol": [ "QPainter", "private", "", "public"] }, + { "symbol": [ "QPainterPath", "private", "", "public"] }, + { "symbol": [ "QPainterPathStroker", "private", "", "public"] }, + { "symbol": [ "QPainterStateGuard", "private", "", "public"] }, + { "symbol": [ "QPair", "private", "", "public"] }, + { "symbol": [ "QPalette", "private", "", "public"] }, + { "symbol": [ "QPanGesture", "private", "", "public"] }, + { "symbol": [ "QParallelAnimationGroup", "private", "", "public"] }, + { "symbol": [ "QPartialOrdering", "private", "", "public"] }, + { "symbol": [ "QPasswordDigestor", "private", "", "public"] }, + { "symbol": [ "QPauseAnimation", "private", "", "public"] }, + { "symbol": [ "QPdfBookmarkModel", "private", "", "public"] }, + { "symbol": [ "QPdfDocument", "private", "", "public"] }, + { "symbol": [ "QPdfDocumentRenderOptions", "private", "", "public"] }, + { "symbol": [ "QPdfLink", "private", "", "public"] }, + { "symbol": [ "QPdfLinkModel", "private", "", "public"] }, + { "symbol": [ "QPdfOutputIntent", "private", "", "public"] }, + { "symbol": [ "QPdfPageNavigator", "private", "", "public"] }, + { "symbol": [ "QPdfPageRenderer", "private", "", "public"] }, + { "symbol": [ "QPdfPageSelector", "private", "", "public"] }, + { "symbol": [ "QPdfSearchModel", "private", "", "public"] }, + { "symbol": [ "QPdfSelection", "private", "", "public"] }, + { "symbol": [ "QPdfView", "private", "", "public"] }, + { "symbol": [ "QPdfWriter", "private", "", "public"] }, + { "symbol": [ "QPen", "private", "", "public"] }, + { "symbol": [ "QPermission", "private", "", "public"] }, + { "symbol": [ "QPermissions", "private", "", "public"] }, + { "symbol": [ "QPersistentModelIndex", "private", "", "public"] }, + { "symbol": [ "QPicture", "private", "", "public"] }, + { "symbol": [ "QPinchGesture", "private", "", "public"] }, + { "symbol": [ "QPixelFormat", "private", "", "public"] }, + { "symbol": [ "QPixmap", "private", "", "public"] }, + { "symbol": [ "QPixmapCache", "private", "", "public"] }, + { "symbol": [ "QPlainTextDocumentLayout", "private", "", "public"] }, + { "symbol": [ "QPlainTextEdit", "private", "", "public"] }, + { "symbol": [ "QPlatformSurfaceEvent", "private", "", "public"] }, + { "symbol": [ "QPlaybackOptions", "private", "", "public"] }, + { "symbol": [ "QPluginLoader", "private", "", "public"] }, + { "symbol": [ "QPluginMetaData", "private", "", "public"] }, + { "symbol": [ "QPluginMetaDataV2", "private", "", "public"] }, + { "symbol": [ "QPoint", "private", "", "public"] }, + { "symbol": [ "QPointF", "private", "", "public"] }, + { "symbol": [ "QPointer", "private", "", "public"] }, + { "symbol": [ "QPointerEvent", "private", "", "public"] }, + { "symbol": [ "QPointingDevice", "private", "", "public"] }, + { "symbol": [ "QPointingDeviceUniqueId", "private", "", "public"] }, + { "symbol": [ "QPolygon", "private", "", "public"] }, + { "symbol": [ "QPolygonF", "private", "", "public"] }, + { "symbol": [ "QPrintDialog", "private", "", "public"] }, + { "symbol": [ "QPrintEngine", "private", "", "public"] }, + { "symbol": [ "QPrintPreviewDialog", "private", "", "public"] }, + { "symbol": [ "QPrintPreviewWidget", "private", "", "public"] }, + { "symbol": [ "QPrinter", "private", "", "public"] }, + { "symbol": [ "QPrinterInfo", "private", "", "public"] }, + { "symbol": [ "QProcess", "private", "", "public"] }, + { "symbol": [ "QProcessEnvironment", "private", "", "public"] }, + { "symbol": [ "QProgressBar", "private", "", "public"] }, + { "symbol": [ "QProgressDialog", "private", "", "public"] }, + { "symbol": [ "QPromise", "private", "", "public"] }, + { "symbol": [ "QProperty", "private", "", "public"] }, + { "symbol": [ "QPropertyAnimation", "private", "", "public"] }, + { "symbol": [ "QPropertyBinding", "private", "", "public"] }, + { "symbol": [ "QPropertyBindingError", "private", "", "public"] }, + { "symbol": [ "QPropertyBindingPrivatePtr", "private", "", "public"] }, + { "symbol": [ "QPropertyBindingSourceLocation", "private", "", "public"] }, + { "symbol": [ "QPropertyChangeHandler", "private", "", "public"] }, + { "symbol": [ "QPropertyData", "private", "", "public"] }, + { "symbol": [ "QPropertyNotifier", "private", "", "public"] }, + { "symbol": [ "QPropertyObserver", "private", "", "public"] }, + { "symbol": [ "QPropertyObserverBase", "private", "", "public"] }, + { "symbol": [ "QPropertyProxyBindingData", "private", "", "public"] }, + { "symbol": [ "QProxyStyle", "private", "", "public"] }, + { "symbol": [ "QPushButton", "private", "", "public"] }, + { "symbol": [ "QQmlAbstractUrlInterceptor", "private", "", "public"] }, + { "symbol": [ "QQmlApplicationEngine", "private", "", "public"] }, + { "symbol": [ "QQmlComponent", "private", "", "public"] }, + { "symbol": [ "QQmlContext", "private", "", "public"] }, + { "symbol": [ "QQmlDebuggingEnabler", "private", "", "public"] }, + { "symbol": [ "QQmlEngine", "private", "", "public"] }, + { "symbol": [ "QQmlEngineExtensionInterface", "private", "", "public"] }, + { "symbol": [ "QQmlEngineExtensionPlugin", "private", "", "public"] }, + { "symbol": [ "QQmlError", "private", "", "public"] }, + { "symbol": [ "QQmlExpression", "private", "", "public"] }, + { "symbol": [ "QQmlExtensionInterface", "private", "", "public"] }, + { "symbol": [ "QQmlExtensionPlugin", "private", "", "public"] }, + { "symbol": [ "QQmlFile", "private", "", "public"] }, + { "symbol": [ "QQmlFileSelector", "private", "", "public"] }, + { "symbol": [ "QQmlImageProviderBase", "private", "", "public"] }, + { "symbol": [ "QQmlIncubationController", "private", "", "public"] }, + { "symbol": [ "QQmlIncubator", "private", "", "public"] }, + { "symbol": [ "QQmlInfo", "private", "", "public"] }, + { "symbol": [ "QQmlListProperty", "private", "", "public"] }, + { "symbol": [ "QQmlListReference", "private", "", "public"] }, + { "symbol": [ "QQmlModuleRegistration", "private", "", "public"] }, + { "symbol": [ "QQmlNetworkAccessManagerFactory", "private", "", "public"] }, + { "symbol": [ "QQmlParserStatus", "private", "", "public"] }, + { "symbol": [ "QQmlProperties", "private", "", "public"] }, + { "symbol": [ "QQmlProperty", "private", "", "public"] }, + { "symbol": [ "QQmlPropertyMap", "private", "", "public"] }, + { "symbol": [ "QQmlPropertyValueSource", "private", "", "public"] }, + { "symbol": [ "QQmlScriptString", "private", "", "public"] }, + { "symbol": [ "QQmlTypeInfo", "private", "", "public"] }, + { "symbol": [ "QQmlTypeNotAvailable", "private", "", "public"] }, + { "symbol": [ "QQmlTypesExtensionInterface", "private", "", "public"] }, + { "symbol": [ "QQmlWebChannel", "private", "", "public"] }, + { "symbol": [ "QQuaternion", "private", "", "public"] }, + { "symbol": [ "QQueue", "private", "", "public"] }, + { "symbol": [ "QQuick3D", "private", "", "public"] }, + { "symbol": [ "QQuick3DGeometry", "private", "", "public"] }, + { "symbol": [ "QQuick3DInstancing", "private", "", "public"] }, + { "symbol": [ "QQuick3DObject", "private", "", "public"] }, + { "symbol": [ "QQuick3DRenderExtension", "private", "", "public"] }, + { "symbol": [ "QQuick3DTextureData", "private", "", "public"] }, + { "symbol": [ "QQuick3DTextureProviderExtension", "private", "", "public"] }, + { "symbol": [ "QQuickAsyncImageProvider", "private", "", "public"] }, + { "symbol": [ "QQuickAttachedPropertyPropagator", "private", "", "public"] }, + { "symbol": [ "QQuickFramebufferObject", "private", "", "public"] }, + { "symbol": [ "QQuickGraphicsConfiguration", "private", "", "public"] }, + { "symbol": [ "QQuickGraphicsDevice", "private", "", "public"] }, + { "symbol": [ "QQuickImageProvider", "private", "", "public"] }, + { "symbol": [ "QQuickImageResponse", "private", "", "public"] }, + { "symbol": [ "QQuickItem", "private", "", "public"] }, + { "symbol": [ "QQuickItemGrabResult", "private", "", "public"] }, + { "symbol": [ "QQuickOpenGLUtils", "private", "", "public"] }, + { "symbol": [ "QQuickPaintedItem", "private", "", "public"] }, + { "symbol": [ "QQuickRenderControl", "private", "", "public"] }, + { "symbol": [ "QQuickRenderTarget", "private", "", "public"] }, + { "symbol": [ "QQuickRhiItem", "private", "", "public"] }, + { "symbol": [ "QQuickRhiItemRenderer", "private", "", "public"] }, + { "symbol": [ "QQuickStyle", "private", "", "public"] }, + { "symbol": [ "QQuickTextDocument", "private", "", "public"] }, + { "symbol": [ "QQuickTextureFactory", "private", "", "public"] }, + { "symbol": [ "QQuickTransform", "private", "", "public"] }, + { "symbol": [ "QQuickView", "private", "", "public"] }, + { "symbol": [ "QQuickWebEngineDownloadRequest", "private", "", "public"] }, + { "symbol": [ "QQuickWebEngineProfile", "private", "", "public"] }, + { "symbol": [ "QQuickWidget", "private", "", "public"] }, + { "symbol": [ "QQuickWindow", "private", "", "public"] }, + { "symbol": [ "QRadialGradient", "private", "", "public"] }, + { "symbol": [ "QRadioButton", "private", "", "public"] }, + { "symbol": [ "QRandomGenerator", "private", "", "public"] }, + { "symbol": [ "QRandomGenerator64", "private", "", "public"] }, + { "symbol": [ "QRangeModel", "private", "", "public"] }, + { "symbol": [ "QRangeModelAdapter", "private", "", "public"] }, + { "symbol": [ "QRasterWindow", "private", "", "public"] }, + { "symbol": [ "QRawFont", "private", "", "public"] }, + { "symbol": [ "QReadLocker", "private", "", "public"] }, + { "symbol": [ "QReadWriteLock", "private", "", "public"] }, + { "symbol": [ "QRect", "private", "", "public"] }, + { "symbol": [ "QRectF", "private", "", "public"] }, + { "symbol": [ "QRecursiveMutex", "private", "", "public"] }, + { "symbol": [ "QRegExp", "private", "", "public"] }, + { "symbol": [ "QRegion", "private", "", "public"] }, + { "symbol": [ "QRegularExpression", "private", "", "public"] }, + { "symbol": [ "QRegularExpressionMatch", "private", "", "public"] }, + { "symbol": [ "QRegularExpressionMatchIterator", "private", "", "public"] }, + { "symbol": [ "QRegularExpressionValidator", "private", "", "public"] }, + { "symbol": [ "QResizeEvent", "private", "", "public"] }, + { "symbol": [ "QResource", "private", "", "public"] }, + { "symbol": [ "QRestAccessManager", "private", "", "public"] }, + { "symbol": [ "QRestReply", "private", "", "public"] }, + { "symbol": [ "QReturnArgument", "private", "", "public"] }, + { "symbol": [ "QRgb", "private", "", "public"] }, + { "symbol": [ "QRgba64", "private", "", "public"] }, + { "symbol": [ "QRgbaFloat", "private", "", "public"] }, + { "symbol": [ "QRgbaFloat16", "private", "", "public"] }, + { "symbol": [ "QRgbaFloat32", "private", "", "public"] }, + { "symbol": [ "QRhiWidget", "private", "", "public"] }, + { "symbol": [ "QRubberBand", "private", "", "public"] }, + { "symbol": [ "QRunnable", "private", "", "public"] }, + { "symbol": [ "QSGBasicGeometryNode", "private", "", "public"] }, + { "symbol": [ "QSGClipNode", "private", "", "public"] }, + { "symbol": [ "QSGDynamicTexture", "private", "", "public"] }, + { "symbol": [ "QSGFlatColorMaterial", "private", "", "public"] }, + { "symbol": [ "QSGGeometry", "private", "", "public"] }, + { "symbol": [ "QSGGeometryNode", "private", "", "public"] }, + { "symbol": [ "QSGImageNode", "private", "", "public"] }, + { "symbol": [ "QSGMaterial", "private", "", "public"] }, + { "symbol": [ "QSGMaterialShader", "private", "", "public"] }, + { "symbol": [ "QSGNinePatchNode", "private", "", "public"] }, + { "symbol": [ "QSGNode", "private", "", "public"] }, + { "symbol": [ "QSGNodeVisitor", "private", "", "public"] }, + { "symbol": [ "QSGOpacityNode", "private", "", "public"] }, + { "symbol": [ "QSGOpaqueTextureMaterial", "private", "", "public"] }, + { "symbol": [ "QSGRectangleNode", "private", "", "public"] }, + { "symbol": [ "QSGRenderNode", "private", "", "public"] }, + { "symbol": [ "QSGRendererInterface", "private", "", "public"] }, + { "symbol": [ "QSGRootNode", "private", "", "public"] }, + { "symbol": [ "QSGSimpleRectNode", "private", "", "public"] }, + { "symbol": [ "QSGSimpleTextureNode", "private", "", "public"] }, + { "symbol": [ "QSGTextNode", "private", "", "public"] }, + { "symbol": [ "QSGTexture", "private", "", "public"] }, + { "symbol": [ "QSGTextureMaterial", "private", "", "public"] }, + { "symbol": [ "QSGTextureProvider", "private", "", "public"] }, + { "symbol": [ "QSGTransformNode", "private", "", "public"] }, + { "symbol": [ "QSGVertexColorMaterial", "private", "", "public"] }, + { "symbol": [ "QSaveFile", "private", "", "public"] }, + { "symbol": [ "QScopeGuard", "private", "", "public"] }, + { "symbol": [ "QScopedArrayPointer", "private", "", "public"] }, + { "symbol": [ "QScopedPointer", "private", "", "public"] }, + { "symbol": [ "QScopedPointerArrayDeleter", "private", "", "public"] }, + { "symbol": [ "QScopedPointerDeleteLater", "private", "", "public"] }, + { "symbol": [ "QScopedPointerDeleter", "private", "", "public"] }, + { "symbol": [ "QScopedPointerObjectDeleteLater", "private", "", "public"] }, + { "symbol": [ "QScopedPointerPodDeleter", "private", "", "public"] }, + { "symbol": [ "QScopedPropertyUpdateGroup", "private", "", "public"] }, + { "symbol": [ "QScopedValueRollback", "private", "", "public"] }, + { "symbol": [ "QScreen", "private", "", "public"] }, + { "symbol": [ "QScreenCapture", "private", "", "public"] }, + { "symbol": [ "QScreenOrientationChangeEvent", "private", "", "public"] }, + { "symbol": [ "QScrollArea", "private", "", "public"] }, + { "symbol": [ "QScrollBar", "private", "", "public"] }, + { "symbol": [ "QScrollEvent", "private", "", "public"] }, + { "symbol": [ "QScrollPrepareEvent", "private", "", "public"] }, + { "symbol": [ "QScroller", "private", "", "public"] }, + { "symbol": [ "QScrollerProperties", "private", "", "public"] }, + { "symbol": [ "QScxmlCompiler", "private", "", "public"] }, + { "symbol": [ "QScxmlCppDataModel", "private", "", "public"] }, + { "symbol": [ "QScxmlDataModel", "private", "", "public"] }, + { "symbol": [ "QScxmlDynamicScxmlServiceFactory", "private", "", "public"] }, + { "symbol": [ "QScxmlError", "private", "", "public"] }, + { "symbol": [ "QScxmlEvent", "private", "", "public"] }, + { "symbol": [ "QScxmlInvokableService", "private", "", "public"] }, + { "symbol": [ "QScxmlInvokableServiceFactory", "private", "", "public"] }, + { "symbol": [ "QScxmlNullDataModel", "private", "", "public"] }, + { "symbol": [ "QScxmlStateMachine", "private", "", "public"] }, + { "symbol": [ "QScxmlStaticScxmlServiceFactory", "private", "", "public"] }, + { "symbol": [ "QScxmlTableData", "private", "", "public"] }, + { "symbol": [ "QSemaphore", "private", "", "public"] }, + { "symbol": [ "QSemaphoreReleaser", "private", "", "public"] }, + { "symbol": [ "QSequentialAnimationGroup", "private", "", "public"] }, + { "symbol": [ "QSequentialConstIterator", "private", "", "public"] }, + { "symbol": [ "QSequentialIterable", "private", "", "public"] }, + { "symbol": [ "QSequentialIterator", "private", "", "public"] }, + { "symbol": [ "QSessionManager", "private", "", "public"] }, + { "symbol": [ "QSet", "private", "", "public"] }, + { "symbol": [ "QSetIterator", "private", "", "public"] }, + { "symbol": [ "QSettings", "private", "", "public"] }, + { "symbol": [ "QSharedData", "private", "", "public"] }, + { "symbol": [ "QSharedDataPointer", "private", "", "public"] }, + { "symbol": [ "QSharedDataPointerBase", "private", "", "public"] }, + { "symbol": [ "QSharedMemory", "private", "", "public"] }, + { "symbol": [ "QSharedPointer", "private", "", "public"] }, + { "symbol": [ "QShortcut", "private", "", "public"] }, + { "symbol": [ "QShortcutEvent", "private", "", "public"] }, + { "symbol": [ "QShowEvent", "private", "", "public"] }, + { "symbol": [ "QSignalBlocker", "private", "", "public"] }, + { "symbol": [ "QSignalMapper", "private", "", "public"] }, + { "symbol": [ "QSignalSpy", "private", "", "public"] }, + { "symbol": [ "QSignalTransition", "private", "", "public"] }, + { "symbol": [ "QSinglePointEvent", "private", "", "public"] }, + { "symbol": [ "QSize", "private", "", "public"] }, + { "symbol": [ "QSizeF", "private", "", "public"] }, + { "symbol": [ "QSizeGrip", "private", "", "public"] }, + { "symbol": [ "QSizePolicy", "private", "", "public"] }, + { "symbol": [ "QSlider", "private", "", "public"] }, + { "symbol": [ "QSocketDescriptor", "private", "", "public"] }, + { "symbol": [ "QSocketNotifier", "private", "", "public"] }, + { "symbol": [ "QSortFilterProxyModel", "private", "", "public"] }, + { "symbol": [ "QSoundEffect", "private", "", "public"] }, + { "symbol": [ "QSpacerItem", "private", "", "public"] }, + { "symbol": [ "QSpan", "private", "", "public"] }, + { "symbol": [ "QSpatialSound", "private", "", "public"] }, + { "symbol": [ "QSpecialInteger", "private", "", "public"] }, + { "symbol": [ "QSpinBox", "private", "", "public"] }, + { "symbol": [ "QSplashScreen", "private", "", "public"] }, + { "symbol": [ "QSplitter", "private", "", "public"] }, + { "symbol": [ "QSplitterHandle", "private", "", "public"] }, + { "symbol": [ "QSpontaneKeyEvent", "private", "", "public"] }, + { "symbol": [ "QSql", "private", "", "public"] }, + { "symbol": [ "QSqlDatabase", "private", "", "public"] }, + { "symbol": [ "QSqlDatabaseDefaultConnectionName", "private", "", "public"] }, + { "symbol": [ "QSqlDriver", "private", "", "public"] }, + { "symbol": [ "QSqlDriverCreator", "private", "", "public"] }, + { "symbol": [ "QSqlDriverCreatorBase", "private", "", "public"] }, + { "symbol": [ "QSqlDriverPlugin", "private", "", "public"] }, + { "symbol": [ "QSqlError", "private", "", "public"] }, + { "symbol": [ "QSqlField", "private", "", "public"] }, + { "symbol": [ "QSqlIndex", "private", "", "public"] }, + { "symbol": [ "QSqlQuery", "private", "", "public"] }, + { "symbol": [ "QSqlQueryModel", "private", "", "public"] }, + { "symbol": [ "QSqlRecord", "private", "", "public"] }, + { "symbol": [ "QSqlRelation", "private", "", "public"] }, + { "symbol": [ "QSqlRelationalDelegate", "private", "", "public"] }, + { "symbol": [ "QSqlRelationalTableModel", "private", "", "public"] }, + { "symbol": [ "QSqlResult", "private", "", "public"] }, + { "symbol": [ "QSqlTableModel", "private", "", "public"] }, + { "symbol": [ "QSsl", "private", "", "public"] }, + { "symbol": [ "QSslCertificate", "private", "", "public"] }, + { "symbol": [ "QSslCertificateExtension", "private", "", "public"] }, + { "symbol": [ "QSslCipher", "private", "", "public"] }, + { "symbol": [ "QSslConfiguration", "private", "", "public"] }, + { "symbol": [ "QSslDiffieHellmanParameters", "private", "", "public"] }, + { "symbol": [ "QSslEllipticCurve", "private", "", "public"] }, + { "symbol": [ "QSslError", "private", "", "public"] }, + { "symbol": [ "QSslKey", "private", "", "public"] }, + { "symbol": [ "QSslPreSharedKeyAuthenticator", "private", "", "public"] }, + { "symbol": [ "QSslServer", "private", "", "public"] }, + { "symbol": [ "QSslSocket", "private", "", "public"] }, + { "symbol": [ "QStack", "private", "", "public"] }, + { "symbol": [ "QStackedLayout", "private", "", "public"] }, + { "symbol": [ "QStackedWidget", "private", "", "public"] }, + { "symbol": [ "QStandardItem", "private", "", "public"] }, + { "symbol": [ "QStandardItemEditorCreator", "private", "", "public"] }, + { "symbol": [ "QStandardItemModel", "private", "", "public"] }, + { "symbol": [ "QStandardPaths", "private", "", "public"] }, + { "symbol": [ "QState", "private", "", "public"] }, + { "symbol": [ "QStateMachine", "private", "", "public"] }, + { "symbol": [ "QStaticByteArrayMatcher", "private", "", "public"] }, + { "symbol": [ "QStaticByteArrayMatcherBase", "private", "", "public"] }, + { "symbol": [ "QStaticLatin1StringMatcher", "private", "", "public"] }, + { "symbol": [ "QStaticPlugin", "private", "", "public"] }, + { "symbol": [ "QStaticText", "private", "", "public"] }, + { "symbol": [ "QStatusBar", "private", "", "public"] }, + { "symbol": [ "QStatusTipEvent", "private", "", "public"] }, + { "symbol": [ "QStorageInfo", "private", "", "public"] }, + { "symbol": [ "QString", "private", "", "public"] }, + { "symbol": [ "QStringAlgorithms", "private", "", "public"] }, + { "symbol": [ "QStringBuilder", "private", "", "public"] }, + { "symbol": [ "QStringConverter", "private", "", "public"] }, + { "symbol": [ "QStringConverterBase", "private", "", "public"] }, + { "symbol": [ "QStringDecoder", "private", "", "public"] }, + { "symbol": [ "QStringEncoder", "private", "", "public"] }, + { "symbol": [ "QStringList", "private", "", "public"] }, + { "symbol": [ "QStringListModel", "private", "", "public"] }, + { "symbol": [ "QStringLiteral", "private", "", "public"] }, + { "symbol": [ "QStringMatcher", "private", "", "public"] }, + { "symbol": [ "QStringRef", "private", "", "public"] }, + { "symbol": [ "QStringTokenizer", "private", "", "public"] }, + { "symbol": [ "QStringTokenizerBase", "private", "", "public"] }, + { "symbol": [ "QStringTokenizerBaseBase", "private", "", "public"] }, + { "symbol": [ "QStringView", "private", "", "public"] }, + { "symbol": [ "QStyle", "private", "", "public"] }, + { "symbol": [ "QStyleFactory", "private", "", "public"] }, + { "symbol": [ "QStyleHintReturn", "private", "", "public"] }, + { "symbol": [ "QStyleHintReturnMask", "private", "", "public"] }, + { "symbol": [ "QStyleHintReturnVariant", "private", "", "public"] }, + { "symbol": [ "QStyleHints", "private", "", "public"] }, + { "symbol": [ "QStyleOption", "private", "", "public"] }, + { "symbol": [ "QStyleOptionButton", "private", "", "public"] }, + { "symbol": [ "QStyleOptionComboBox", "private", "", "public"] }, + { "symbol": [ "QStyleOptionComplex", "private", "", "public"] }, + { "symbol": [ "QStyleOptionDockWidget", "private", "", "public"] }, + { "symbol": [ "QStyleOptionFocusRect", "private", "", "public"] }, + { "symbol": [ "QStyleOptionFrame", "private", "", "public"] }, + { "symbol": [ "QStyleOptionGraphicsItem", "private", "", "public"] }, + { "symbol": [ "QStyleOptionGroupBox", "private", "", "public"] }, + { "symbol": [ "QStyleOptionHeader", "private", "", "public"] }, + { "symbol": [ "QStyleOptionHeaderV2", "private", "", "public"] }, + { "symbol": [ "QStyleOptionMenuItem", "private", "", "public"] }, + { "symbol": [ "QStyleOptionMenuItemV2", "private", "", "public"] }, + { "symbol": [ "QStyleOptionProgressBar", "private", "", "public"] }, + { "symbol": [ "QStyleOptionRubberBand", "private", "", "public"] }, + { "symbol": [ "QStyleOptionSizeGrip", "private", "", "public"] }, + { "symbol": [ "QStyleOptionSlider", "private", "", "public"] }, + { "symbol": [ "QStyleOptionSpinBox", "private", "", "public"] }, + { "symbol": [ "QStyleOptionTab", "private", "", "public"] }, + { "symbol": [ "QStyleOptionTabBarBase", "private", "", "public"] }, + { "symbol": [ "QStyleOptionTabWidgetFrame", "private", "", "public"] }, + { "symbol": [ "QStyleOptionTitleBar", "private", "", "public"] }, + { "symbol": [ "QStyleOptionToolBar", "private", "", "public"] }, + { "symbol": [ "QStyleOptionToolBox", "private", "", "public"] }, + { "symbol": [ "QStyleOptionToolButton", "private", "", "public"] }, + { "symbol": [ "QStyleOptionViewItem", "private", "", "public"] }, + { "symbol": [ "QStylePainter", "private", "", "public"] }, + { "symbol": [ "QStylePlugin", "private", "", "public"] }, + { "symbol": [ "QStyledItemDelegate", "private", "", "public"] }, + { "symbol": [ "QSurface", "private", "", "public"] }, + { "symbol": [ "QSurfaceFormat", "private", "", "public"] }, + { "symbol": [ "QSvgGenerator", "private", "", "public"] }, + { "symbol": [ "QSvgRenderer", "private", "", "public"] }, + { "symbol": [ "QSvgWidget", "private", "", "public"] }, + { "symbol": [ "QSwipeGesture", "private", "", "public"] }, + { "symbol": [ "QSyntaxHighlighter", "private", "", "public"] }, + { "symbol": [ "QSysInfo", "private", "", "public"] }, + { "symbol": [ "QSystemSemaphore", "private", "", "public"] }, + { "symbol": [ "QSystemTrayIcon", "private", "", "public"] }, + { "symbol": [ "QTabBar", "private", "", "public"] }, + { "symbol": [ "QTabWidget", "private", "", "public"] }, + { "symbol": [ "QTableView", "private", "", "public"] }, + { "symbol": [ "QTableWidget", "private", "", "public"] }, + { "symbol": [ "QTableWidgetItem", "private", "", "public"] }, + { "symbol": [ "QTableWidgetSelectionRange", "private", "", "public"] }, + { "symbol": [ "QTabletEvent", "private", "", "public"] }, + { "symbol": [ "QTaggedIterator", "private", "", "public"] }, + { "symbol": [ "QTaggedPointer", "private", "", "public"] }, + { "symbol": [ "QTapAndHoldGesture", "private", "", "public"] }, + { "symbol": [ "QTapGesture", "private", "", "public"] }, + { "symbol": [ "QTcpServer", "private", "", "public"] }, + { "symbol": [ "QTcpSocket", "private", "", "public"] }, + { "symbol": [ "QTemplatedMetaMethodReturnArgument", "private", "", "public"] }, + { "symbol": [ "QTemporaryDir", "private", "", "public"] }, + { "symbol": [ "QTemporaryFile", "private", "", "public"] }, + { "symbol": [ "QTest", "private", "", "public"] }, + { "symbol": [ "QTestAccessibility", "private", "", "public"] }, + { "symbol": [ "QTestData", "private", "", "public"] }, + { "symbol": [ "QTestDelayEvent", "private", "", "public"] }, + { "symbol": [ "QTestEvent", "private", "", "public"] }, + { "symbol": [ "QTestEventList", "private", "", "public"] }, + { "symbol": [ "QTestEventLoop", "private", "", "public"] }, + { "symbol": [ "QTestKeyClicksEvent", "private", "", "public"] }, + { "symbol": [ "QTestKeyEvent", "private", "", "public"] }, + { "symbol": [ "QTestMouseEvent", "private", "", "public"] }, + { "symbol": [ "QTextBlock", "private", "", "public"] }, + { "symbol": [ "QTextBlockFormat", "private", "", "public"] }, + { "symbol": [ "QTextBlockGroup", "private", "", "public"] }, + { "symbol": [ "QTextBlockUserData", "private", "", "public"] }, + { "symbol": [ "QTextBoundaryFinder", "private", "", "public"] }, + { "symbol": [ "QTextBrowser", "private", "", "public"] }, + { "symbol": [ "QTextCharFormat", "private", "", "public"] }, + { "symbol": [ "QTextCodec", "private", "", "public"] }, + { "symbol": [ "QTextCursor", "private", "", "public"] }, + { "symbol": [ "QTextDecoder", "private", "", "public"] }, + { "symbol": [ "QTextDocument", "private", "", "public"] }, + { "symbol": [ "QTextDocumentFragment", "private", "", "public"] }, + { "symbol": [ "QTextDocumentWriter", "private", "", "public"] }, + { "symbol": [ "QTextEdit", "private", "", "public"] }, + { "symbol": [ "QTextEncoder", "private", "", "public"] }, + { "symbol": [ "QTextFormat", "private", "", "public"] }, + { "symbol": [ "QTextFragment", "private", "", "public"] }, + { "symbol": [ "QTextFrame", "private", "", "public"] }, + { "symbol": [ "QTextFrameFormat", "private", "", "public"] }, + { "symbol": [ "QTextFrameLayoutData", "private", "", "public"] }, + { "symbol": [ "QTextImageFormat", "private", "", "public"] }, + { "symbol": [ "QTextInlineObject", "private", "", "public"] }, + { "symbol": [ "QTextItem", "private", "", "public"] }, + { "symbol": [ "QTextLayout", "private", "", "public"] }, + { "symbol": [ "QTextLength", "private", "", "public"] }, + { "symbol": [ "QTextLine", "private", "", "public"] }, + { "symbol": [ "QTextList", "private", "", "public"] }, + { "symbol": [ "QTextListFormat", "private", "", "public"] }, + { "symbol": [ "QTextObject", "private", "", "public"] }, + { "symbol": [ "QTextObjectInterface", "private", "", "public"] }, + { "symbol": [ "QTextOption", "private", "", "public"] }, + { "symbol": [ "QTextStream", "private", "", "public"] }, + { "symbol": [ "QTextStreamFunction", "private", "", "public"] }, + { "symbol": [ "QTextStreamManipulator", "private", "", "public"] }, + { "symbol": [ "QTextTable", "private", "", "public"] }, + { "symbol": [ "QTextTableCell", "private", "", "public"] }, + { "symbol": [ "QTextTableCellFormat", "private", "", "public"] }, + { "symbol": [ "QTextTableFormat", "private", "", "public"] }, + { "symbol": [ "QThread", "private", "", "public"] }, + { "symbol": [ "QThreadPool", "private", "", "public"] }, + { "symbol": [ "QThreadStorage", "private", "", "public"] }, + { "symbol": [ "QThreadStorageData", "private", "", "public"] }, + { "symbol": [ "QThreadStorageTraits", "private", "", "public"] }, + { "symbol": [ "QTileRules", "private", "", "public"] }, + { "symbol": [ "QTime", "private", "", "public"] }, + { "symbol": [ "QTimeEdit", "private", "", "public"] }, + { "symbol": [ "QTimeLine", "private", "", "public"] }, + { "symbol": [ "QTimeZone", "private", "", "public"] }, + { "symbol": [ "QTimer", "private", "", "public"] }, + { "symbol": [ "QTimerEvent", "private", "", "public"] }, + { "symbol": [ "QToolBar", "private", "", "public"] }, + { "symbol": [ "QToolBarChangeEvent", "private", "", "public"] }, + { "symbol": [ "QToolBox", "private", "", "public"] }, + { "symbol": [ "QToolButton", "private", "", "public"] }, + { "symbol": [ "QToolTip", "private", "", "public"] }, + { "symbol": [ "QTouchEvent", "private", "", "public"] }, + { "symbol": [ "QTransform", "private", "", "public"] }, + { "symbol": [ "QTranslator", "private", "", "public"] }, + { "symbol": [ "QTransposeProxyModel", "private", "", "public"] }, + { "symbol": [ "QTreeView", "private", "", "public"] }, + { "symbol": [ "QTreeWidget", "private", "", "public"] }, + { "symbol": [ "QTreeWidgetItem", "private", "", "public"] }, + { "symbol": [ "QTreeWidgetItemIterator", "private", "", "public"] }, + { "symbol": [ "QTypeInfo", "private", "", "public"] }, + { "symbol": [ "QTypeInfoMerger", "private", "", "public"] }, + { "symbol": [ "QTypeRevision", "private", "", "public"] }, + { "symbol": [ "QTypedArrayAllocationResult", "private", "", "public"] }, + { "symbol": [ "QTypedArrayData", "private", "", "public"] }, + { "symbol": [ "QUdpSocket", "private", "", "public"] }, + { "symbol": [ "QUiLoader", "private", "", "public"] }, + { "symbol": [ "QUndoCommand", "private", "", "public"] }, + { "symbol": [ "QUndoGroup", "private", "", "public"] }, + { "symbol": [ "QUndoStack", "private", "", "public"] }, + { "symbol": [ "QUndoView", "private", "", "public"] }, + { "symbol": [ "QUnhandledException", "private", "", "public"] }, + { "symbol": [ "QUntypedBindable", "private", "", "public"] }, + { "symbol": [ "QUntypedPropertyBinding", "private", "", "public"] }, + { "symbol": [ "QUntypedPropertyData", "private", "", "public"] }, + { "symbol": [ "QUrl", "private", "", "public"] }, + { "symbol": [ "QUrlQuery", "private", "", "public"] }, + { "symbol": [ "QUrlTwoFlags", "private", "", "public"] }, + { "symbol": [ "QUtf8StringView", "private", "", "public"] }, + { "symbol": [ "QUuid", "private", "", "public"] }, + { "symbol": [ "QVBoxLayout", "private", "", "public"] }, + { "symbol": [ "QValidator", "private", "", "public"] }, + { "symbol": [ "QVarLengthArray", "private", "", "public"] }, + { "symbol": [ "QVariant", "private", "", "public"] }, + { "symbol": [ "QVariantAnimation", "private", "", "public"] }, + { "symbol": [ "QVariantHash", "private", "", "public"] }, + { "symbol": [ "QVariantList", "private", "", "public"] }, + { "symbol": [ "QVariantMap", "private", "", "public"] }, + { "symbol": [ "QVector", "private", "", "public"] }, + { "symbol": [ "QVector2D", "private", "", "public"] }, + { "symbol": [ "QVector3D", "private", "", "public"] }, + { "symbol": [ "QVector4D", "private", "", "public"] }, + { "symbol": [ "QVectorIterator", "private", "", "public"] }, + { "symbol": [ "QVersionNumber", "private", "", "public"] }, + { "symbol": [ "QVideoFrame", "private", "", "public"] }, + { "symbol": [ "QVideoFrameFormat", "private", "", "public"] }, + { "symbol": [ "QVideoFrameInput", "private", "", "public"] }, + { "symbol": [ "QVideoSink", "private", "", "public"] }, + { "symbol": [ "QVideoWidget", "private", "", "public"] }, + { "symbol": [ "QVulkanDeviceFunctions", "private", "", "public"] }, + { "symbol": [ "QVulkanExtension", "private", "", "public"] }, + { "symbol": [ "QVulkanFunctions", "private", "", "public"] }, + { "symbol": [ "QVulkanInfoVector", "private", "", "public"] }, + { "symbol": [ "QVulkanInstance", "private", "", "public"] }, + { "symbol": [ "QVulkanLayer", "private", "", "public"] }, + { "symbol": [ "QVulkanWindow", "private", "", "public"] }, + { "symbol": [ "QVulkanWindowRenderer", "private", "", "public"] }, + { "symbol": [ "QWaitCondition", "private", "", "public"] }, + { "symbol": [ "QWaveDecoder", "private", "", "public"] }, + { "symbol": [ "QWaylandBufferRef", "private", "", "public"] }, + { "symbol": [ "QWaylandClient", "private", "", "public"] }, + { "symbol": [ "QWaylandClientExtension", "private", "", "public"] }, + { "symbol": [ "QWaylandClientExtensionTemplate", "private", "", "public"] }, + { "symbol": [ "QWaylandCompositor", "private", "", "public"] }, + { "symbol": [ "QWaylandCompositorExtension", "private", "", "public"] }, + { "symbol": [ "QWaylandCompositorExtensionTemplate", "private", "", "public"] }, + { "symbol": [ "QWaylandDestroyListener", "private", "", "public"] }, + { "symbol": [ "QWaylandDrag", "private", "", "public"] }, + { "symbol": [ "QWaylandIdleInhibitManagerV1", "private", "", "public"] }, + { "symbol": [ "QWaylandInputMethodControl", "private", "", "public"] }, + { "symbol": [ "QWaylandIviApplication", "private", "", "public"] }, + { "symbol": [ "QWaylandIviSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandKeyboard", "private", "", "public"] }, + { "symbol": [ "QWaylandKeymap", "private", "", "public"] }, + { "symbol": [ "QWaylandObject", "private", "", "public"] }, + { "symbol": [ "QWaylandOutput", "private", "", "public"] }, + { "symbol": [ "QWaylandOutputMode", "private", "", "public"] }, + { "symbol": [ "QWaylandPointer", "private", "", "public"] }, + { "symbol": [ "QWaylandQtTextInputMethod", "private", "", "public"] }, + { "symbol": [ "QWaylandQtTextInputMethodManager", "private", "", "public"] }, + { "symbol": [ "QWaylandQtWindowManager", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickCompositor", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickExtension", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickItem", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickOutput", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickShellIntegration", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickShellSurfaceItem", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandQuickXdgOutputV1", "private", "", "public"] }, + { "symbol": [ "QWaylandResource", "private", "", "public"] }, + { "symbol": [ "QWaylandSeat", "private", "", "public"] }, + { "symbol": [ "QWaylandShell", "private", "", "public"] }, + { "symbol": [ "QWaylandShellSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandShellSurfaceTemplate", "private", "", "public"] }, + { "symbol": [ "QWaylandShellTemplate", "private", "", "public"] }, + { "symbol": [ "QWaylandSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandSurfaceGrabber", "private", "", "public"] }, + { "symbol": [ "QWaylandSurfaceRole", "private", "", "public"] }, + { "symbol": [ "QWaylandTextInput", "private", "", "public"] }, + { "symbol": [ "QWaylandTextInputManager", "private", "", "public"] }, + { "symbol": [ "QWaylandTextInputManagerV3", "private", "", "public"] }, + { "symbol": [ "QWaylandTextInputV3", "private", "", "public"] }, + { "symbol": [ "QWaylandTouch", "private", "", "public"] }, + { "symbol": [ "QWaylandView", "private", "", "public"] }, + { "symbol": [ "QWaylandViewporter", "private", "", "public"] }, + { "symbol": [ "QWaylandWlShell", "private", "", "public"] }, + { "symbol": [ "QWaylandWlShellSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgDecorationManagerV1", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgOutputManagerV1", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgOutputV1", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgPopup", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgShell", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgSurface", "private", "", "public"] }, + { "symbol": [ "QWaylandXdgToplevel", "private", "", "public"] }, + { "symbol": [ "QWeakPointer", "private", "", "public"] }, + { "symbol": [ "QWebChannel", "private", "", "public"] }, + { "symbol": [ "QWebChannelAbstractTransport", "private", "", "public"] }, + { "symbol": [ "QWebEngineCertificateError", "private", "", "public"] }, + { "symbol": [ "QWebEngineClientCertificateSelection", "private", "", "public"] }, + { "symbol": [ "QWebEngineClientCertificateStore", "private", "", "public"] }, + { "symbol": [ "QWebEngineClientHints", "private", "", "public"] }, + { "symbol": [ "QWebEngineContextMenuRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineCookieStore", "private", "", "public"] }, + { "symbol": [ "QWebEngineDesktopMediaRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineDownloadRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineExtensionInfo", "private", "", "public"] }, + { "symbol": [ "QWebEngineExtensionManager", "private", "", "public"] }, + { "symbol": [ "QWebEngineFileSystemAccessRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineFindTextResult", "private", "", "public"] }, + { "symbol": [ "QWebEngineFrame", "private", "", "public"] }, + { "symbol": [ "QWebEngineFullScreenRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineGlobalSettings", "private", "", "public"] }, + { "symbol": [ "QWebEngineHistory", "private", "", "public"] }, + { "symbol": [ "QWebEngineHistoryItem", "private", "", "public"] }, + { "symbol": [ "QWebEngineHistoryModel", "private", "", "public"] }, + { "symbol": [ "QWebEngineHttpRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineLoadingInfo", "private", "", "public"] }, + { "symbol": [ "QWebEngineNavigationRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineNewWindowRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineNotification", "private", "", "public"] }, + { "symbol": [ "QWebEnginePage", "private", "", "public"] }, + { "symbol": [ "QWebEnginePermission", "private", "", "public"] }, + { "symbol": [ "QWebEngineProfile", "private", "", "public"] }, + { "symbol": [ "QWebEngineProfileBuilder", "private", "", "public"] }, + { "symbol": [ "QWebEngineQuotaRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineRegisterProtocolHandlerRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineScript", "private", "", "public"] }, + { "symbol": [ "QWebEngineScriptCollection", "private", "", "public"] }, + { "symbol": [ "QWebEngineSettings", "private", "", "public"] }, + { "symbol": [ "QWebEngineUrlRequestInfo", "private", "", "public"] }, + { "symbol": [ "QWebEngineUrlRequestInterceptor", "private", "", "public"] }, + { "symbol": [ "QWebEngineUrlRequestJob", "private", "", "public"] }, + { "symbol": [ "QWebEngineUrlScheme", "private", "", "public"] }, + { "symbol": [ "QWebEngineUrlSchemeHandler", "private", "", "public"] }, + { "symbol": [ "QWebEngineView", "private", "", "public"] }, + { "symbol": [ "QWebEngineWebAuthPinRequest", "private", "", "public"] }, + { "symbol": [ "QWebEngineWebAuthUxRequest", "private", "", "public"] }, + { "symbol": [ "QWebSocket", "private", "", "public"] }, + { "symbol": [ "QWebSocketCorsAuthenticator", "private", "", "public"] }, + { "symbol": [ "QWebSocketHandshakeOptions", "private", "", "public"] }, + { "symbol": [ "QWebSocketProtocol", "private", "", "public"] }, + { "symbol": [ "QWebSocketServer", "private", "", "public"] }, + { "symbol": [ "QWhatsThis", "private", "", "public"] }, + { "symbol": [ "QWhatsThisClickedEvent", "private", "", "public"] }, + { "symbol": [ "QWheelEvent", "private", "", "public"] }, + { "symbol": [ "QWidget", "private", "", "public"] }, + { "symbol": [ "QWidgetAction", "private", "", "public"] }, + { "symbol": [ "QWidgetData", "private", "", "public"] }, + { "symbol": [ "QWidgetItem", "private", "", "public"] }, + { "symbol": [ "QWidgetItemV2", "private", "", "public"] }, + { "symbol": [ "QWidgetList", "private", "", "public"] }, + { "symbol": [ "QWidgetMapper", "private", "", "public"] }, + { "symbol": [ "QWidgetSet", "private", "", "public"] }, + { "symbol": [ "QWinEventNotifier", "private", "", "public"] }, + { "symbol": [ "QWindow", "private", "", "public"] }, + { "symbol": [ "QWindowCapture", "private", "", "public"] }, + { "symbol": [ "QWindowList", "private", "", "public"] }, + { "symbol": [ "QWindowStateChangeEvent", "private", "", "public"] }, + { "symbol": [ "QWizard", "private", "", "public"] }, + { "symbol": [ "QWizardPage", "private", "", "public"] }, + { "symbol": [ "QWriteLocker", "private", "", "public"] }, + { "symbol": [ "QXmlAttributes", "private", "", "public"] }, + { "symbol": [ "QXmlContentHandler", "private", "", "public"] }, + { "symbol": [ "QXmlDTDHandler", "private", "", "public"] }, + { "symbol": [ "QXmlDeclHandler", "private", "", "public"] }, + { "symbol": [ "QXmlDefaultHandler", "private", "", "public"] }, + { "symbol": [ "QXmlEntityResolver", "private", "", "public"] }, + { "symbol": [ "QXmlErrorHandler", "private", "", "public"] }, + { "symbol": [ "QXmlInputSource", "private", "", "public"] }, + { "symbol": [ "QXmlLexicalHandler", "private", "", "public"] }, + { "symbol": [ "QXmlLocator", "private", "", "public"] }, + { "symbol": [ "QXmlNamespaceSupport", "private", "", "public"] }, + { "symbol": [ "QXmlParseException", "private", "", "public"] }, + { "symbol": [ "QXmlReader", "private", "", "public"] }, + { "symbol": [ "QXmlSimpleReader", "private", "", "public"] }, + { "symbol": [ "QXmlStreamAttribute", "private", "", "public"] }, + { "symbol": [ "QXmlStreamAttributes", "private", "", "public"] }, + { "symbol": [ "QXmlStreamEntityDeclaration", "private", "", "public"] }, + { "symbol": [ "QXmlStreamEntityDeclarations", "private", "", "public"] }, + { "symbol": [ "QXmlStreamEntityResolver", "private", "", "public"] }, + { "symbol": [ "QXmlStreamNamespaceDeclaration", "private", "", "public"] }, + { "symbol": [ "QXmlStreamNamespaceDeclarations", "private", "", "public"] }, + { "symbol": [ "QXmlStreamNotationDeclaration", "private", "", "public"] }, + { "symbol": [ "QXmlStreamNotationDeclarations", "private", "", "public"] }, + { "symbol": [ "QXmlStreamReader", "private", "", "public"] }, + { "symbol": [ "QXmlStreamWriter", "private", "", "public"] }, + { "symbol": [ "Q_IPV6ADDR", "private", "", "public"] }, + { "symbol": [ "Qt", "private", "", "public"] }, + { "symbol": [ "QtAlgorithms", "private", "", "public"] }, + { "symbol": [ "QtAudio", "private", "", "public"] }, + { "symbol": [ "QtBluetoothVersion", "private", "", "public"] }, + { "symbol": [ "QtCborCommon", "private", "", "public"] }, + { "symbol": [ "QtCleanUpFunction", "private", "", "public"] }, + { "symbol": [ "QtCompare", "private", "", "public"] }, + { "symbol": [ "QtCompilerDetection", "private", "", "public"] }, + { "symbol": [ "QtConcurrentFilter", "private", "", "public"] }, + { "symbol": [ "QtConcurrentMap", "private", "", "public"] }, + { "symbol": [ "QtConcurrentRun", "private", "", "public"] }, + { "symbol": [ "QtConcurrentTask", "private", "", "public"] }, + { "symbol": [ "QtConcurrentVersion", "private", "", "public"] }, + { "symbol": [ "QtConfig", "private", "", "public"] }, + { "symbol": [ "QtConnectivityVersion", "private", "", "public"] }, + { "symbol": [ "QtConstructorMacros", "private", "", "public"] }, + { "symbol": [ "QtContainerFwd", "private", "", "public"] }, + { "symbol": [ "QtCore5CompatVersion", "private", "", "public"] }, + { "symbol": [ "QtCoreGlobal", "private", "", "public"] }, + { "symbol": [ "QtCoreVersion", "private", "", "public"] }, + { "symbol": [ "QtCoverageScanner", "private", "", "public"] }, + { "symbol": [ "QtDBusVersion", "private", "", "public"] }, + { "symbol": [ "QtDarwinHelpers", "private", "", "public"] }, + { "symbol": [ "QtDebug", "private", "", "public"] }, + { "symbol": [ "QtDeprecationMarkers", "private", "", "public"] }, + { "symbol": [ "QtDeviceDiscoverySupportVersion", "private", "", "public"] }, + { "symbol": [ "QtEndian", "private", "", "public"] }, + { "symbol": [ "QtEvents", "private", "", "public"] }, + { "symbol": [ "QtExceptionHandling", "private", "", "public"] }, + { "symbol": [ "QtFFmpegMediaPluginImplVersion", "private", "", "public"] }, + { "symbol": [ "QtFbSupportVersion", "private", "", "public"] }, + { "symbol": [ "QtGlobal", "private", "", "public"] }, + { "symbol": [ "QtGuiVersion", "private", "", "public"] }, + { "symbol": [ "QtHelpVersion", "private", "", "public"] }, + { "symbol": [ "QtInputSupportVersion", "private", "", "public"] }, + { "symbol": [ "QtKmsSupportVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsAnimationVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsFolderListModelVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsPlatformVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsQmlModelsVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsSettingsVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsSharedImageVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsStyleKitImplVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsStyleKitVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsSynchronizerVersion", "private", "", "public"] }, + { "symbol": [ "QtLabsWavefrontMeshVersion", "private", "", "public"] }, + { "symbol": [ "QtLogging", "private", "", "public"] }, + { "symbol": [ "QtMalloc", "private", "", "public"] }, + { "symbol": [ "QtMath", "private", "", "public"] }, + { "symbol": [ "QtMessageHandler", "private", "", "public"] }, + { "symbol": [ "QtMultimediaQuickVersion", "private", "", "public"] }, + { "symbol": [ "QtMultimediaTestLibVersion", "private", "", "public"] }, + { "symbol": [ "QtMultimediaVersion", "private", "", "public"] }, + { "symbol": [ "QtMultimediaWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtNetworkAuthVersion", "private", "", "public"] }, + { "symbol": [ "QtNetworkVersion", "private", "", "public"] }, + { "symbol": [ "QtNumeric", "private", "", "public"] }, + { "symbol": [ "QtOpenGLVersion", "private", "", "public"] }, + { "symbol": [ "QtOpenGLWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtPacketProtocolVersion", "private", "", "public"] }, + { "symbol": [ "QtPdfQuickVersion", "private", "", "public"] }, + { "symbol": [ "QtPdfVersion", "private", "", "public"] }, + { "symbol": [ "QtPdfWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtPlugin", "private", "", "public"] }, + { "symbol": [ "QtPluginInstanceFunction", "private", "", "public"] }, + { "symbol": [ "QtPluginMetaDataFunction", "private", "", "public"] }, + { "symbol": [ "QtPrintSupportVersion", "private", "", "public"] }, + { "symbol": [ "QtPrivate", "private", "", "public"] }, + { "symbol": [ "QtProcessorDetection", "private", "", "public"] }, + { "symbol": [ "QtQmlCompilerVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlCoreVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlDebugVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlDomVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlFormatVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlIntegrationVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlLocalStorageVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlMetaVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlModelsVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlNetworkVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlToolingSettingsVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlTypeRegistrarVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlWorkerScriptVersion", "private", "", "public"] }, + { "symbol": [ "QtQmlXmlListModelVersion", "private", "", "public"] }, + { "symbol": [ "QtQmltcVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DAssetImportVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DAssetUtilsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DGlslParserVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DHelpersImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DHelpersVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DIblBakerVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DParticlesVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DRuntimeRenderVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DSpatialAudioVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DUtilsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuick3DVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2BasicStyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2BasicVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2FluentWinUI3StyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2FusionStyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2FusionVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2ImagineStyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2ImagineVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2ImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2MaterialStyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2MaterialVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2UniversalStyleImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2UniversalVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickControls2Version", "private", "", "public"] }, + { "symbol": [ "QtQuickControlsTestUtilsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickDialogs2QuickImplVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickDialogs2UtilsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickDialogs2Version", "private", "", "public"] }, + { "symbol": [ "QtQuickEffectsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickLayoutsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickParticlesVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickShapesDesignHelpersVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickShapesVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickTemplates2Version", "private", "", "public"] }, + { "symbol": [ "QtQuickTestUtilsVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickTestVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickTimelineBlendTreesVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickTimelineVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickVectorImageGeneratorVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickVectorImageHelpersVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickVectorImageVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickVersion", "private", "", "public"] }, + { "symbol": [ "QtQuickWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtResource", "private", "", "public"] }, + { "symbol": [ "QtScxmlGlobalVersion", "private", "", "public"] }, + { "symbol": [ "QtScxmlQmlVersion", "private", "", "public"] }, + { "symbol": [ "QtScxmlVersion", "private", "", "public"] }, + { "symbol": [ "QtShaderToolsVersion", "private", "", "public"] }, + { "symbol": [ "QtSpatialAudioVersion", "private", "", "public"] }, + { "symbol": [ "QtSqlVersion", "private", "", "public"] }, + { "symbol": [ "QtStartUpFunction", "private", "", "public"] }, + { "symbol": [ "QtStateMachineQmlVersion", "private", "", "public"] }, + { "symbol": [ "QtStateMachineVersion", "private", "", "public"] }, + { "symbol": [ "QtStdLibDetection", "private", "", "public"] }, + { "symbol": [ "QtSvgVersion", "private", "", "public"] }, + { "symbol": [ "QtSvgWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtSwap", "private", "", "public"] }, + { "symbol": [ "QtSystemDetection", "private", "", "public"] }, + { "symbol": [ "QtTestGui", "private", "", "public"] }, + { "symbol": [ "QtTestNetwork", "private", "", "public"] }, + { "symbol": [ "QtTestVersion", "private", "", "public"] }, + { "symbol": [ "QtTestWidgets", "private", "", "public"] }, + { "symbol": [ "QtToolsVersion", "private", "", "public"] }, + { "symbol": [ "QtTypeTraits", "private", "", "public"] }, + { "symbol": [ "QtUiPluginVersion", "private", "", "public"] }, + { "symbol": [ "QtUiToolsVersion", "private", "", "public"] }, + { "symbol": [ "QtVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandClientVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandCompositorIviapplicationVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandCompositorPresentationTimeVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandCompositorVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandCompositorWLShellVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandCompositorXdgShellVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandEglCompositorHwIntegrationVersion", "private", "", "public"] }, + { "symbol": [ "QtWaylandGlobalVersion", "private", "", "public"] }, + { "symbol": [ "QtWebChannelQuickVersion", "private", "", "public"] }, + { "symbol": [ "QtWebChannelVersion", "private", "", "public"] }, + { "symbol": [ "QtWebEngineCoreVersion", "private", "", "public"] }, + { "symbol": [ "QtWebEngineQuickVersion", "private", "", "public"] }, + { "symbol": [ "QtWebEngineWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtWebSocketsVersion", "private", "", "public"] }, + { "symbol": [ "QtWidgetsVersion", "private", "", "public"] }, + { "symbol": [ "QtWlShellIntegrationVersion", "private", "", "public"] }, + { "symbol": [ "QtXmlVersion", "private", "", "public"] }, + { "symbol": [ "operator==", "private", "", "public"] }, + { "symbol": [ "operator!=", "private", "", "public"] }, + { "symbol": [ "operator<", "private", "", "public"] }, + { "symbol": [ "operator<=", "private", "", "public"] }, + { "symbol": [ "operator>", "private", "", "public"] }, + { "symbol": [ "operator>=", "private", "", "public"] }, + { "symbol": [ "comparesEqual", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothaddress\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothdevicediscoveryagent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothdeviceinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothhostinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothlocaldevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothservicediscoveryagent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothserviceinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qbluetoothuuid\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergyadvertisingdata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergyadvertisingparameters\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergycharacteristic\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergycharacteristicdata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergyconnectionparameters\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergycontroller\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergydescriptor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergydescriptordata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergyservice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qlowenergyservicedata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtBluetooth/)?qtbluetoothversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConcurrent/)?qtconcurrentfilter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConcurrent/)?qtconcurrentmap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConcurrent/)?qtconcurrentrun\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConcurrent/)?qtconcurrenttask\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConcurrent/)?qtconcurrentversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtConnectivity/)?qtconnectivityversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qabstractanimation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qabstracteventdispatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qabstractitemmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qabstractnativeeventfilter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qabstractproxymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qanimationgroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qanystringview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qapplicationstatic\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qarraydata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qarraydataops\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qarraydatapointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qassert\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qassociativeiterable\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qatomicscopedvaluerollback\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbasictimer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbindingstorage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbitarray\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbuffer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbytearray\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbytearrayalgorithms\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbytearraylist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbytearraymatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qbytearrayview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcache\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcalendar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcborarray\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcbormap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcborstreamreader\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcborstreamwriter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcborvalue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qchar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qchronotimer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcollator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcommandlineoption\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcommandlineparser\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qconcatenatetablesproxymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcontiguouscache\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcoreapplication\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qcryptographichash\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdatastream\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdatetime\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdeadlinetimer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdebug\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdir\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdiriterator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qdirlisting\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qeasingcurve\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qelapsedtimer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qeventloop\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qexception\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfactoryinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfiledevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfileinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfileselector\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfilesystemwatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qflags\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfloat16\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qforeach\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfunctionpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfuture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfutureinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfuturesynchronizer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qfuturewatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qglobalstatic\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qhash\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qhashfunctions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qidentityproxymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qiodevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qiodevicebase\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qitemselectionmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qiterable\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qjsonarray\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qjsondocument\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qjsonobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qjsonparseerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qjsonvalue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlatin1stringmatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlatin1stringview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlibrary\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlibraryinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qline\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlocale\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qlockfile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qloggingcategory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmargins\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmessageauthenticationcode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmetaassociation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmetacontainer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmetasequence\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmetatype\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmimedata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmimedatabase\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmimetype\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qminmax\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qmutex\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qobjectcleanuphandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qoperatingsystemversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qoverload\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpair\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qparallelanimationgroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpauseanimation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpermissions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpluginloader\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpoint\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qprocess\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpromise\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qproperty\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qpropertyanimation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qqueue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qrangemodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qrangemodeladapter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qreadwritelock\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qrect\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qregularexpression\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qresource\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qrunnable\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsavefile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qscopedpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qscopedvaluerollback\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qscopeguard\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsemaphore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsequentialanimationgroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsequentialiterable\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qset\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsettings\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qshareddata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsharedmemory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsharedpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsignalmapper\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsize\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsocketnotifier\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsortfilterproxymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qspan\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstack\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstandardpaths\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstaticlatin1stringmatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstorageinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstring\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringalgorithms\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringbuilder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringconverter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringlist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringlistmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringliteral\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringmatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringtokenizer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qstringview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsysinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qsystemsemaphore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtaggedpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtclasshelpermacros\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtcoreglobal\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtcoreversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtdeprecationmarkers\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtemporarydir\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtemporaryfile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtenvironmentvariables\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtextboundaryfinder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtextstream\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qthread\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qthreadpool\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qthreadstorage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtimeline\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtimer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtimezone\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtpreprocessorsupport\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtranslator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtransposeproxymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtresource\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qttranslation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qttypetraits\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtversionchecks\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtypeinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtyperevision\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qtypes\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qurl\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qurlquery\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qutf8stringview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?quuid\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvariant\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvariantanimation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvarianthash\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvariantlist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvariantmap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvarlengtharray\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qvector\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qversionnumber\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qwaitcondition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore/)?qwineventnotifier\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qbinaryjson\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qlinkedlist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qregexp\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qstringref\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qtcore5compatversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtCore5Compat/)?qtextcodec\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusabstractadaptor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusabstractinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusargument\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusconnection\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusconnectioninterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbuscontext\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbuserror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusmessage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusmetatype\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbuspendingcall\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbuspendingreply\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusreply\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusservicewatcher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusunixfiledescriptor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qdbusvirtualobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDBus/)?qtdbusversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtDeviceDiscoverySupport/)?qtdevicediscoverysupportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtFFmpegMediaPluginImpl/)?qtffmpegmediapluginimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtFbSupport/)?qtfbsupportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qabstractfileiconprovider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qabstracttextdocumentlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaccessibilityhints\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaccessible\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaccessiblebridge\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaccessibleobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaccessibleplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qaction\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qactiongroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qbackingstore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qbitmap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qbrush\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qclipboard\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qcolor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qcolorspace\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qcolortransform\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qcursor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qdesktopservices\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qdrag\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qeventpoint\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfilesystemmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfont\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfontdatabase\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfontinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfontmetrics\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qfontvariableaxis\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qgenericmatrix\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qgenericplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qgenericpluginfactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qglyphrun\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qguiapplication\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qicon\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qiconengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qiconengineplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qimage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qimageiohandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qimagereader\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qimagewriter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qinputdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qinputmethod\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qkeysequence\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qmatrix4x4\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qmovie\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qoffscreensurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qopenglcontext\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qopenglextrafunctions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qopenglfunctions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpagedpaintdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpagelayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpageranges\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpagesize\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpaintdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpaintdevicewindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpaintengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpainter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpainterpath\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpainterstateguard\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpalette\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpdfoutputintent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpdfwriter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpen\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpicture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpixelformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpixmap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpixmapcache\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpointingdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qpolygon\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qquaternion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qrasterwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qrawfont\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qregion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qrgb\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qrgba64\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qrgbafloat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qscreen\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qsessionmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qshortcut\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qstandarditemmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qstatictext\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qstylehints\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qsurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qsurfaceformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qsyntaxhighlighter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextcursor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextdocument\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextdocumentfragment\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextdocumentwriter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextlist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtextoption\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtexttable\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtguiversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qtransform\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qundogroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qundostack\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qvalidator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qvulkanfunctions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qvulkaninstance\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qvulkanwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtGui/)?qwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qcompressedhelpinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpcontentitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpcontentwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpenginecore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpfilterdata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpfilterengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpfiltersettingswidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpindexwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelplink\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpsearchengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpsearchenginecore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpsearchquerywidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpsearchresult\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qhelpsearchresultwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtHelp/)?qthelpversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtInputSupport/)?qtinputsupportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtKmsSupport/)?qtkmssupportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsAnimation/)?qtlabsanimationversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsFolderListModel/)?qtlabsfolderlistmodelversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsPlatform/)?qtlabsplatformversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsQmlModels/)?qtlabsqmlmodelsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsSettings/)?qtlabssettingsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsSharedImage/)?qtlabssharedimageversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsStyleKit/)?qtlabsstylekitversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsStyleKitImpl/)?qtlabsstylekitimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsSynchronizer/)?qtlabssynchronizerversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtLabsWavefrontMesh/)?qtlabswavefrontmeshversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qabstractvideobuffer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudio\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiobuffer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiobufferinput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiobufferoutput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiodecoder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiodevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudioformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudioinput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiooutput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiosink\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qaudiosource\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qcamera\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qcameradevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qcapturablewindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qimagecapture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediacapturesession\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediadevices\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediaformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediametadata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediaplayer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediarecorder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qmediatimerange\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qplaybackoptions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qscreencapture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qsoundeffect\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qtaudio\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qtmultimediaversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qvideoframe\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qvideoframeformat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qvideoframeinput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qvideosink\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qwavedecoder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimedia/)?qwindowcapture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimediaQuick/)?qtmultimediaquickversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimediaTestLib/)?qtmultimediatestlibversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimediaWidgets/)?qgraphicsvideoitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimediaWidgets/)?qtmultimediawidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtMultimediaWidgets/)?qvideowidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qabstractnetworkcache\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qabstractsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qauthenticator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qdnslookup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qdtls\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qformdatabuilder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhostaddress\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhostinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhstspolicy\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhttp1configuration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhttp2configuration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhttpheaders\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qhttpmultipart\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qlocalserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qlocalsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkaccessmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkcookie\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkcookiejar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkdatagram\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkdiskcache\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkinformation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkproxy\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkreply\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qnetworkrequestfactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qocspresponse\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qpassworddigestor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qrestaccessmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qrestreply\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qssl\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslcertificate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslcertificateextension\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslcipher\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslconfiguration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qssldiffiehellmanparameters\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslellipticcurve\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslkey\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslpresharedkeyauthenticator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qsslsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qtcpserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qtcpsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qtnetworkversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetwork/)?qudpsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qabstractoauth\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qabstractoauth2\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qabstractoauthreplyhandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauth1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauth1signature\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauth2authorizationcodeflow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauth2deviceauthorizationflow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauthhttpserverreplyhandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauthoobreplyhandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qoauthurischemereplyhandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtNetworkAuth/)?qtnetworkauthversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglbuffer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglframebufferobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_0\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_2\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_3\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_4\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_1_5\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_2_0\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_2_1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_0\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_2_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_2_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_3_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_3_3_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_0_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_0_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_1_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_1_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_2_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_2_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_3_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_3_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_4_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_4_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_5_compatibility\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglfunctions_4_5_core\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglpaintdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglpixeltransferoptions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglshaderprogram\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopengltexture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopengltextureblitter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopengltimerquery\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglversionfunctions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglversionfunctionsfactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglversionprofile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglvertexarrayobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qopenglwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGL/)?qtopenglversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGLWidgets/)?qopenglwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtOpenGLWidgets/)?qtopenglwidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPacketProtocol/)?qtpacketprotocolversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfbookmarkmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfdocument\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfdocumentrenderoptions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdflink\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdflinkmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfpagenavigator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfpagerenderer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfsearchmodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qpdfselection\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdf/)?qtpdfversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdfQuick/)?qtpdfquickversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdfWidgets/)?qpdfpageselector\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdfWidgets/)?qpdfview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPdfWidgets/)?qtpdfwidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qabstractprintdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qpagesetupdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprintdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprintengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprinter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprinterinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprintpreviewdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qprintpreviewwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtPrintSupport/)?qtprintsupportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjslist\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsmanagedvalue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsnumbercoercion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsprimitivevalue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsvalue\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qjsvalueiterator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlabstracturlinterceptor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlapplicationengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlcomponent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlcontext\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlexpression\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlextensioninterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlextensionplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlfile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlfileselector\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlincubator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlmoduleregistration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlnetworkaccessmanagerfactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlparserstatus\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlproperty\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlpropertymap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlpropertyvaluesource\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qqmlscriptstring\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQml/)?qtqmlversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlCompiler/)?qtqmlcompilerversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlCore/)?qtqmlcoreversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlDebug/)?qtqmldebugversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlDom/)?qtqmldomversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlFormat/)?qtqmlformatversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlIntegration/)?qtqmlintegrationversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlLocalStorage/)?qtqmllocalstorageversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlMeta/)?qtqmlmetaversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlModels/)?qtqmlmodelsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlNetwork/)?qtqmlnetworkversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlToolingSettings/)?qtqmltoolingsettingsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlTypeRegistrar/)?qtqmltyperegistrarversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlWorkerScript/)?qtqmlworkerscriptversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmlXmlListModel/)?qtqmlxmllistmodelversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQmltc/)?qtqmltcversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickframebufferobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickgraphicsconfiguration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickgraphicsdevice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickimageprovider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickitemgrabresult\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickopenglutils\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickpainteditem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickrendercontrol\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickrendertarget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickrhiitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquicktextdocument\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qquickwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgflatcolormaterial\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsggeometry\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgimagenode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgmaterial\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgmaterialshader\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgninepatchnode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgnode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgrectanglenode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgrendererinterface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgrendernode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgsimplerectnode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgsimpletexturenode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgtextnode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgtexture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgtexturematerial\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgtextureprovider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qsgvertexcolormaterial\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick/)?qtquickversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3d\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3dgeometry\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3dinstancing\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3dobject\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3dtexturedata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qquick3dtextureproviderextension\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3D/)?qtquick3dversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DAssetImport/)?qtquick3dassetimportversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DAssetUtils/)?qtquick3dassetutilsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DGlslParser/)?qtquick3dglslparserversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DHelpers/)?qtquick3dhelpersversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DHelpersImpl/)?qtquick3dhelpersimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DIblBaker/)?qtquick3diblbakerversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DParticles/)?qtquick3dparticlesversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DRuntimeRender/)?qtquick3druntimerenderversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DSpatialAudio/)?qtquick3dspatialaudioversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuick3DUtils/)?qtquick3dutilsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2/)?qquickattachedpropertypropagator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2/)?qquickstyle\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2/)?qtquickcontrols2version\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Basic/)?qtquickcontrols2basicversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2BasicStyleImpl/)?qtquickcontrols2basicstyleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2FluentWinUI3StyleImpl/)?qtquickcontrols2fluentwinui3styleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Fusion/)?qtquickcontrols2fusionversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2FusionStyleImpl/)?qtquickcontrols2fusionstyleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Imagine/)?qtquickcontrols2imagineversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2ImagineStyleImpl/)?qtquickcontrols2imaginestyleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Impl/)?qtquickcontrols2implversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Material/)?qtquickcontrols2materialversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2MaterialStyleImpl/)?qtquickcontrols2materialstyleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2Universal/)?qtquickcontrols2universalversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControls2UniversalStyleImpl/)?qtquickcontrols2universalstyleimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickControlsTestUtils/)?qtquickcontrolstestutilsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickDialogs2/)?qtquickdialogs2version\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickDialogs2QuickImpl/)?qtquickdialogs2quickimplversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickDialogs2Utils/)?qtquickdialogs2utilsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickEffects/)?qtquickeffectsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickLayouts/)?qtquicklayoutsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickParticles/)?qtquickparticlesversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickShapes/)?qtquickshapesversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickShapesDesignHelpers/)?qtquickshapesdesignhelpersversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickTemplates2/)?qtquicktemplates2version\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickTest/)?qtquicktestversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickTestUtils/)?qtquicktestutilsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickTimeline/)?qtquicktimelineversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickTimelineBlendTrees/)?qtquicktimelineblendtreesversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickVectorImage/)?qtquickvectorimageversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickVectorImageGenerator/)?qtquickvectorimagegeneratorversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickVectorImageHelpers/)?qtquickvectorimagehelpersversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickWidgets/)?qquickwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtQuickWidgets/)?qtquickwidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlcompiler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlcppdatamodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmldatamodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlevent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlinvokableservice\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlnulldatamodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmlstatemachine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qscxmltabledata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxml/)?qtscxmlversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxmlGlobal/)?qtscxmlglobalversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtScxmlQml/)?qtscxmlqmlversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtShaderTools/)?qtshadertoolsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qambientsound\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qaudioengine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qaudiolistener\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qaudioroom\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qspatialsound\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSpatialAudio/)?qtspatialaudioversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqldatabase\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqldriver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqldriverplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlfield\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlindex\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlquery\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlquerymodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlrecord\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlrelationaldelegate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlrelationaltablemodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqlresult\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qsqltablemodel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSql/)?qtsqlversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qabstractstate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qabstracttransition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qeventtransition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qfinalstate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qhistorystate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qkeyeventtransition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qmouseeventtransition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qsignaltransition\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qstate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qstatemachine\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachine/)?qtstatemachineversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtStateMachineQml/)?qtstatemachineqmlversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvg/)?qsvggenerator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvg/)?qsvgrenderer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvg/)?qtsvgversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvgWidgets/)?qgraphicssvgitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvgWidgets/)?qsvgwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtSvgWidgets/)?qtsvgwidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qabstractitemmodeltester\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qsignalspy\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qtest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qtestdata\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qtestevent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qtesteventloop\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTest/)?qttestversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtTools/)?qttoolsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtUiPlugin/)?qdesignerexportwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtUiPlugin/)?qtuipluginversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtUiTools/)?qtuitoolsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtUiTools/)?quiloader\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandClient/)?qtwaylandclientversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandClient/)?qwaylandclientextension\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qtwaylandcompositorversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandbufferref\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandclient\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandcompositor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandcompositorextension\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylanddestroylistener\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylanddrag\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandinputmethodcontrol\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandiviapplication\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandivisurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandkeyboard\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandkeymap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandoutput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandoutputmode\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandpointer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandqttextinputmethod\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandqttextinputmethodmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandqtwindowmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickcompositor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickextension\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickoutput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickshellintegration\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickshellsurfaceitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquicksurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandquickxdgoutputv1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandresource\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandseat\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandshell\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandshellsurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandsurface\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandsurfacegrabber\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandtextinput\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandtextinputmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandtextinputmanagerv3\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandtextinputv3\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandtouch\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandviewporter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandwlshell\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandxdgoutputv1\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositor/)?qwaylandxdgshell\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositorIviapplication/)?qtwaylandcompositoriviapplicationversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositorPresentationTime/)?qtwaylandcompositorpresentationtimeversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositorWLShell/)?qtwaylandcompositorwlshellversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandCompositorXdgShell/)?qtwaylandcompositorxdgshellversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandEglCompositorHwIntegration/)?qtwaylandeglcompositorhwintegrationversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWaylandGlobal/)?qtwaylandglobalversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebChannel/)?qtwebchannelversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebChannel/)?qwebchannel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebChannel/)?qwebchannelabstracttransport\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebChannelQuick/)?qqmlwebchannel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebChannelQuick/)?qtwebchannelquickversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qtwebenginecoreversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginecertificateerror\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineclientcertificateselection\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineclientcertificatestore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineclienthints\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginecontextmenurequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginecookiestore\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginedesktopmediarequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginedownloadrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineextensioninfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineextensionmanager\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginefilesystemaccessrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginefindtextresult\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineframe\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginefullscreenrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineglobalsettings\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginehistory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginehttprequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineloadinginfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginenavigationrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginenewwindowrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginenotification\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginepage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginepermission\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineprofile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineprofilebuilder\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginequotarequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineregisterprotocolhandlerrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginescript\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginescriptcollection\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginesettings\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineurlrequestinfo\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineurlrequestinterceptor\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineurlrequestjob\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineurlscheme\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebengineurlschemehandler\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineCore/)?qwebenginewebauthuxrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineQuick/)?qquickwebenginedownloadrequest\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineQuick/)?qquickwebengineprofile\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineQuick/)?qtwebenginequickversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineWidgets/)?qtwebenginewidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebEngineWidgets/)?qwebengineview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qmaskgenerator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qtwebsocketsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qwebsocket\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qwebsocketcorsauthenticator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qwebsockethandshakeoptions\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qwebsocketprotocol\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWebSockets/)?qwebsocketserver\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractbutton\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractitemdelegate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractitemview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractscrollarea\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractslider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qabstractspinbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qaccessiblewidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qapplication\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qboxlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qbuttongroup\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcalendarwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcheckbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcolordialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcolormap\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcolumnview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcombobox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcommandlinkbutton\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcommonstyle\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qcompleter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdatawidgetmapper\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdatetimeedit\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdial\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdialogbuttonbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qdockwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qerrormessage\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qfiledialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qfileiconprovider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qfocusframe\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qfontcombobox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qfontdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qformlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qframe\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgesture\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgesturerecognizer\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsanchorlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicseffect\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsgridlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsitemanimation\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicslayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicslayoutitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicslinearlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsproxywidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsscene\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicssceneevent\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicstransform\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicsview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgraphicswidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgridlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qgroupbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qheaderview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qinputdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qitemdelegate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qitemeditorfactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qkeysequenceedit\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlabel\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlayoutitem\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlcdnumber\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlineedit\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlistview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qlistwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmainwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmdiarea\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmdisubwindow\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmenu\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmenubar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qmessagebox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qplaintextedit\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qprogressbar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qprogressdialog\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qproxystyle\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qpushbutton\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qradiobutton\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qrhiwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qrubberband\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qscrollarea\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qscrollbar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qscroller\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qscrollerproperties\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qsizegrip\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qsizepolicy\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qslider\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qspinbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qsplashscreen\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qsplitter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstackedlayout\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstackedwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstatusbar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstyle\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstyleditemdelegate\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstylefactory\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstyleoption\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstylepainter\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qstyleplugin\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qsystemtrayicon\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtabbar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtableview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtablewidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtabwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtextbrowser\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtextedit\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtoolbar\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtoolbox\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtoolbutton\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtooltip\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtreeview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtreewidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtreewidgetitemiterator\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qtwidgetsversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qundoview\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qwhatsthis\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qwidget\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qwidgetaction\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWidgets/)?qwizard\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtWlShellIntegration/)?qtwlshellintegrationversion\\.h[\">]", "private", "", "public"] }, + { "include": [ "@[\"<](QtXml/)?qtxmlversion\\.h[\">]", "private", "", "public"] } +] diff --git a/servatrice/servatrice.ini.example b/servatrice/servatrice.ini.example index ccd4f3c3f..c625705da 100644 --- a/servatrice/servatrice.ini.example +++ b/servatrice/servatrice.ini.example @@ -41,6 +41,12 @@ websocket_host=any ; The TCP port number servatrice will listen on for websockets clients; default is 4748 websocket_port=4748 +; If websockets are served through a reverse proxy (e.g. nginx), the real client address can be +; read from an HTTP header such as X-Forwarded-For. The header is ONLY trusted when the websocket +; connection itself originates from an address listed in security/trusted_sources (default 127.0.0.1,::1), +; so that clients cannot spoof their address to bypass bans or rate limits. +web_socket_ip_header= + ; When database is enabled, servatrice writes the server status in the "update" database table; this ; setting defines every how many milliseconds servatrice will update its status; default is 15000 (15 secs) statusupdate=15000 diff --git a/servatrice/src/email_parser.cpp b/servatrice/src/email_parser.cpp index d8c30d852..44c788e67 100644 --- a/servatrice/src/email_parser.cpp +++ b/servatrice/src/email_parser.cpp @@ -1,6 +1,8 @@ #include "email_parser.h" #include +#include +#include #include QPair EmailParser::parseEmailAddress(const QString &dirtyEmailAddress) diff --git a/servatrice/src/event_loop_watchdog.cpp b/servatrice/src/event_loop_watchdog.cpp index e50bd4201..a2f20ff1c 100644 --- a/servatrice/src/event_loop_watchdog.cpp +++ b/servatrice/src/event_loop_watchdog.cpp @@ -8,6 +8,8 @@ #include "servatrice.h" #include +#include +#include EventLoopWatchdog::EventLoopWatchdog(Servatrice *_servatrice, QString _threadName) : QObject(nullptr), servatrice(_servatrice), threadName(std::move(_threadName)) diff --git a/servatrice/src/event_loop_watchdog.h b/servatrice/src/event_loop_watchdog.h index b9061ff97..d05430eaa 100644 --- a/servatrice/src/event_loop_watchdog.h +++ b/servatrice/src/event_loop_watchdog.h @@ -9,6 +9,7 @@ #include #include #include +#include class Servatrice; class QTimer; diff --git a/servatrice/src/isl_interface.cpp b/servatrice/src/isl_interface.cpp index b0ee201bf..a78ee9e72 100644 --- a/servatrice/src/isl_interface.cpp +++ b/servatrice/src/isl_interface.cpp @@ -1,11 +1,34 @@ #include "isl_interface.h" +#include "libcockatrice/protocol/pb/commands.pb.h" +#include "libcockatrice/protocol/pb/room_commands.pb.h" +#include "libcockatrice/protocol/pb/room_event.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_room.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" #include "main.h" +#include "servatrice.h" +#include "server_abstractuserinterface.h" #include "server_logger.h" +#include "serverinfo_user_container.h" +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include #include #include @@ -17,11 +40,15 @@ #include #include #include -#include #include +#include +#include #include #include +// Maximum size of a single ISL message. +static const int MAX_ISL_MESSAGE_SIZE = 4 * 1024 * 1024; + inline Q_LOGGING_CATEGORY(IslInterfaceLog, "isl_interface"); void IslInterface::sharedCtor(const QSslCertificate &cert, const QSslKey &privateKey) @@ -243,6 +270,13 @@ void IslInterface::readClient() (((quint32)(unsigned char)inputBuffer[1]) << 16) + (((quint32)(unsigned char)inputBuffer[2]) << 8) + ((quint32)(unsigned char)inputBuffer[3]); + // Reject implausible lengths instead of buffering until they arrive. + // This also handles lengths that overflow into negative int values. + if (messageLength < 0 || messageLength > MAX_ISL_MESSAGE_SIZE) { + qCWarning(IslInterfaceLog) << "Invalid message length" << messageLength << "from" << peerAddress; + socket->disconnectFromHost(); + return; + } inputBuffer.remove(0, 4); messageInProgress = true; } else { diff --git a/servatrice/src/isl_interface.h b/servatrice/src/isl_interface.h index 27e5b8293..f7680c0a2 100644 --- a/servatrice/src/isl_interface.h +++ b/servatrice/src/isl_interface.h @@ -1,21 +1,26 @@ #ifndef ISL_INTERFACE_H #define ISL_INTERFACE_H -#include "servatrice.h" - +#include +#include +#include +#include #include -#include +#include + +// IWYU pragma: keep +// ServerInfo_User and ServerInfo_Game are passed by value to signals, so the +// moc-generated code needs the complete types. +#include #include -#include #include +#include class Servatrice; class QSslSocket; class QSslKey; class IslMessage; - class Event_ServerCompleteList; -class Event_UserMessage; class Event_UserJoined; class Event_UserLeft; class Event_JoinRoom; @@ -24,6 +29,11 @@ class Event_RoomSay; class Event_ListGames; class Event_RemoveMessages; class Command_JoinGame; +class CommandContainer; +class GameEventContainer; +class Response; +class RoomEvent; +class SessionEvent; class IslInterface : public QObject { diff --git a/servatrice/src/main.cpp b/servatrice/src/main.cpp index 13bf95a82..eb019a2b7 100644 --- a/servatrice/src/main.cpp +++ b/servatrice/src/main.cpp @@ -18,6 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "libcockatrice/rng/rng_abstract.h" #include "servatrice.h" #include "server_logger.h" #include "settingscache.h" @@ -25,16 +26,29 @@ #include "smtpclient.h" #include "version_string.h" +#include #include #include #include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include +#include RNG_Abstract *rng; ServerLogger *logger; diff --git a/servatrice/src/metrics_registry.cpp b/servatrice/src/metrics_registry.cpp index 99ce390f1..51abb7e3e 100644 --- a/servatrice/src/metrics_registry.cpp +++ b/servatrice/src/metrics_registry.cpp @@ -1,6 +1,7 @@ #include "metrics_registry.h" #include +#include void MetricsRegistry::observeCommand(int typeId, qint64 elapsedMs) { diff --git a/servatrice/src/metrics_registry.h b/servatrice/src/metrics_registry.h index 4df1057c2..1175d03c4 100644 --- a/servatrice/src/metrics_registry.h +++ b/servatrice/src/metrics_registry.h @@ -7,7 +7,7 @@ #define METRICS_REGISTRY_H #include -#include +#include #include #include diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index 3dd7ab510..0329a31fd 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -22,10 +22,14 @@ #include "email_parser.h" #include "event_loop_watchdog.h" #include "isl_interface.h" +#include "libcockatrice/protocol/pb/response_report_stats.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" #include "main.h" #include "servatrice_connection_pool.h" #include "servatrice_database_interface.h" +#include "server.h" #include "server_logger.h" +#include "server_protocolhandler.h" #include "serversocketinterface.h" #include "settingscache.h" #include "smtpclient.h" @@ -33,20 +37,37 @@ #include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include #include #include +#include #include +#include #include +#include +#include +#include #include -#include -#include +#include #include #include #include #include +#include +#include +#include #include +#include Servatrice_GameServer::Servatrice_GameServer(Servatrice *_server, int _numberPools, diff --git a/servatrice/src/servatrice.h b/servatrice/src/servatrice.h index f39a44d51..242d445ad 100644 --- a/servatrice/src/servatrice.h +++ b/servatrice/src/servatrice.h @@ -22,34 +22,44 @@ #include "metrics_registry.h" +#include #include #include +#include +#include #include #include +#include #include -#include #include #include +#include + +// IWYU pragma: keep +// Q_DECLARE_METATYPE below needs the complete type. +#include #include #include +#include #include #include #include +#include #include #include +class QObject; +class QThread; +class SessionEvent; + Q_DECLARE_METATYPE(QSqlDatabase) -class QSqlQuery; class QTimer; - -class GameReplay; class Servatrice; class Servatrice_ConnectionPool; class Servatrice_DatabaseInterface; class AbstractServerSocketInterface; class IslInterface; -class FeatureSet; class Servatrice_GameServer : public QTcpServer { diff --git a/servatrice/src/servatrice_connection_pool.h b/servatrice/src/servatrice_connection_pool.h index 7479122cf..ddd12fc95 100644 --- a/servatrice/src/servatrice_connection_pool.h +++ b/servatrice/src/servatrice_connection_pool.h @@ -4,6 +4,7 @@ #include #include #include +#include class Servatrice_DatabaseInterface; diff --git a/servatrice/src/servatrice_database_interface.cpp b/servatrice/src/servatrice_database_interface.cpp index bb67d78eb..ac3a19c8e 100644 --- a/servatrice/src/servatrice_database_interface.cpp +++ b/servatrice/src/servatrice_database_interface.cpp @@ -1,24 +1,46 @@ #include "servatrice_database_interface.h" #include "deck_tag_serialization.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_chat_message.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_game.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_moderator_login.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user_alt.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_user_session.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_warning.pb.h" #include "servatrice.h" -#include "serversocketinterface.h" +#include "server.h" +#include "server_protocolhandler.h" #include "settingscache.h" +#include #include #include #include -#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include +#include #include #include #include #include +#include +#include +#include inline Q_LOGGING_CATEGORY(DatabaseInterfaceLog, "database_interface"); diff --git a/servatrice/src/servatrice_database_interface.h b/servatrice/src/servatrice_database_interface.h index ce51a2474..0509d1a03 100644 --- a/servatrice/src/servatrice_database_interface.h +++ b/servatrice/src/servatrice_database_interface.h @@ -1,18 +1,26 @@ #ifndef SERVATRICE_DATABASE_INTERFACE_H #define SERVATRICE_DATABASE_INTERFACE_H -#include +#include "libcockatrice/protocol/pb/serverinfo_user.pb.h" + #include -#include +#include #include +#include +#include +#include +#include #include #include #include #include #include +#include #include #include +class QSqlQuery; + #define DATABASE_SCHEMA_VERSION 37 class Servatrice; diff --git a/servatrice/src/server_logger.cpp b/servatrice/src/server_logger.cpp index 620780052..1972444f1 100644 --- a/servatrice/src/server_logger.cpp +++ b/servatrice/src/server_logger.cpp @@ -6,8 +6,16 @@ #include #include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include ServerLogger::ServerLogger(bool _logToConsole, QObject *parent) : QObject(parent), logToConsole(_logToConsole), flushRunning(false) diff --git a/servatrice/src/server_logger.h b/servatrice/src/server_logger.h index 0ad092b66..f2875a6a3 100644 --- a/servatrice/src/server_logger.h +++ b/servatrice/src/server_logger.h @@ -1,14 +1,14 @@ #ifndef SERVER_LOGGER_H #define SERVER_LOGGER_H +#include #include #include +#include #include -#include -#include +#include class QFile; -class Server_ProtocolHandler; class ServerLogger : public QObject { diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index a8d13675d..d46a9b0ee 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -22,28 +22,63 @@ #include "deck_tag_serialization.h" #include "email_parser.h" +#include "libcockatrice/protocol/pb/admin_commands.pb.h" +#include "libcockatrice/protocol/pb/developer_commands.pb.h" +#include "libcockatrice/protocol/pb/moderator_commands.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_deck_share_item.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_deck_share_summary.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_replay_match.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_report.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_warning.pb.h" +#include "libcockatrice/protocol/pb/session_commands.pb.h" +#include "libcockatrice/protocol/pb/session_event.pb.h" +#include "libcockatrice/utility/card_ref.h" #include "main.h" +#include "metrics_registry.h" #include "servatrice.h" #include "servatrice_database_interface.h" +#include "server.h" +#include "server_database_interface.h" #include "server_logger.h" +#include "server_protocolhandler.h" #include "settingscache.h" #include "version_string.h" +#include +#include #include #include #include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include #include #include +#include +#include +#include +#include #include -#include +#include #include +#include +#include +#include +#include #include #include #include @@ -85,8 +120,6 @@ #include #include #include -#include -#include #include #include #include @@ -131,9 +164,16 @@ #include #include #include +#include +#include +#include #include #include +#include #include +#include + +class QObject; inline Q_LOGGING_CATEGORY(AbstractServerSocketInterfaceLog, "abstract_server_socket_interface"); inline Q_LOGGING_CATEGORY(TcpServerSocketInterfaceLog, "tcp_server_socket_interface"); @@ -141,6 +181,9 @@ inline Q_LOGGING_CATEGORY(WebsocketServerSocketInterfaceLog, "websocket_server_s static const int protocolVersion = 14; +// Maximum size of a single TCP protocol message. Matches the websocket limit. +static const int MAX_TCP_MESSAGE_SIZE = 1500000; + AbstractServerSocketInterface::AbstractServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent) @@ -4186,13 +4229,21 @@ void TcpServerSocketInterface::readClient() (((quint32)(unsigned char)inputBuffer[1]) << 16) + (((quint32)(unsigned char)inputBuffer[2]) << 8) + ((quint32)(unsigned char)inputBuffer[3]); + // Reject implausible lengths instead of buffering until they arrive. + // This also handles lengths that overflow into negative int values. + if (messageLength < 0 || messageLength > MAX_TCP_MESSAGE_SIZE) { + qCWarning(TcpServerSocketInterfaceLog) + << "Invalid message length" << messageLength << "from" << getAddress(); + prepareDestroy(); + return; + } inputBuffer.remove(0, 4); messageInProgress = true; } else { return; } } - if (inputBuffer.size() < messageLength || messageLength < 0) { + if (inputBuffer.size() < messageLength) { return; } @@ -4298,10 +4349,15 @@ void WebsocketServerSocketInterface::initConnection(void *_socket) QByteArray websocketIPHeader = settingsCache->value("server/web_socket_ip_header", "").toByteArray(); if (websocketIPHeader.length() > 0 && socket->request().hasRawHeader(websocketIPHeader)) { - QString header(socket->request().rawHeader(websocketIPHeader)); - QHostAddress parsed(header); - if (!parsed.isNull()) { - address = parsed; + // Only trust the forwarded header if the connection itself comes from a trusted proxy, + // otherwise a client could spoof its address to bypass bans and rate limits. + QString trustedSources = settingsCache->value("security/trusted_sources", "127.0.0.1,::1").toString(); + if (trustedSources.contains(socket->peerAddress().toString(), Qt::CaseInsensitive)) { + QString header(socket->request().rawHeader(websocketIPHeader)); + QHostAddress parsed(header); + if (!parsed.isNull()) { + address = parsed; + } } } diff --git a/servatrice/src/serversocketinterface.h b/servatrice/src/serversocketinterface.h index 36b900d28..27708ed27 100644 --- a/servatrice/src/serversocketinterface.h +++ b/servatrice/src/serversocketinterface.h @@ -20,28 +20,26 @@ #ifndef SERVERSOCKETINTERFACE_H #define SERVERSOCKETINTERFACE_H +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" + +#include +#include #include +#include #include +#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include #include class Servatrice; class Servatrice_DatabaseInterface; class DeckList; class ServerInfo_DeckStorage_Folder; - class Command_AddToList; class Command_RemoveFromList; class Command_DeckList; @@ -64,16 +62,51 @@ class Command_ReplayModifyMatch; class Command_ReplayDeleteMatch; class Command_ReplayGetCode; class Command_ReplaySubmitCode; - class Command_BanFromServer; class Command_UpdateServerMessage; class Command_ShutdownServer; class Command_ReloadConfig; class Command_ReplayDownloadByGameId; - class Command_AccountEdit; class Command_AccountImage; class Command_AccountPassword; +class Command_Activate; +class Command_AddCardArtRule; +class Command_AdjustMod; +class Command_ForceActivateUser; +class Command_ForgotPasswordChallenge; +class Command_ForgotPasswordRequest; +class Command_ForgotPasswordReset; +class Command_GetAdminNotes; +class Command_GetBanHistory; +class Command_GetModeratorLastLogins; +class Command_GetServerStats; +class Command_GetUserAlts; +class Command_GetUserSessions; +class Command_GetWarnHistory; +class Command_GetWarnList; +class Command_GrantReplayAccess; +class Command_ListCardArtRules; +class Command_Register; +class Command_RemoveCardArtRule; +class Command_RemoveUserAvatar; +class Command_Report; +class Command_ReportAddComment; +class Command_ReportAssign; +class Command_ReportDetails; +class Command_ReportList; +class Command_ReportMyList; +class Command_ReportResolve; +class Command_ReportStats; +class Command_ReportUserInfo; +class Command_RequestPasswordSalt; +class Command_ResetUserPassword; +class Command_SetCardArtParams; +class Command_UpdateAdminNotes; +class Command_ViewLogHistory; +class Command_WarnUser; +class QObject; +class ResponseContainer; class AbstractServerSocketInterface : public Server_ProtocolHandler { diff --git a/servatrice/src/settingscache.cpp b/servatrice/src/settingscache.cpp index f6c862904..4ecac7319 100644 --- a/servatrice/src/settingscache.cpp +++ b/servatrice/src/settingscache.cpp @@ -4,6 +4,13 @@ #include #include #include +#include +#include +#include +#include +#include + +class QObject; SettingsCache::SettingsCache(const QString &fileName, QSettings::Format format, QObject *parent) : QSettings(fileName, format, parent) diff --git a/servatrice/src/settingscache.h b/servatrice/src/settingscache.h index 6922d3508..817a62bfa 100644 --- a/servatrice/src/settingscache.h +++ b/servatrice/src/settingscache.h @@ -5,6 +5,9 @@ #include #include #include +#include + +class QObject; class SettingsCache : public QSettings { diff --git a/servatrice/src/signalhandler.cpp b/servatrice/src/signalhandler.cpp index b4513979f..32cd5b206 100644 --- a/servatrice/src/signalhandler.cpp +++ b/servatrice/src/signalhandler.cpp @@ -5,6 +5,10 @@ #include "settingscache.h" #include +#include +#include +#include +#include #ifdef Q_OS_UNIX #include diff --git a/servatrice/src/signalhandler.h b/servatrice/src/signalhandler.h index bf8d9e52a..82652a43a 100644 --- a/servatrice/src/signalhandler.h +++ b/servatrice/src/signalhandler.h @@ -2,6 +2,7 @@ #define SIGNALHANDLER_H #include +#include class QSocketNotifier; diff --git a/servatrice/src/smtpclient.cpp b/servatrice/src/smtpclient.cpp index 3ec333413..a45588b8b 100644 --- a/servatrice/src/smtpclient.cpp +++ b/servatrice/src/smtpclient.cpp @@ -1,10 +1,18 @@ #include "smtpclient.h" #include "settingscache.h" +#include "smtp/qxtmailmessage.h" #include "smtp/qxtsmtp.h" +#include +#include +#include +#include #include #include +#include +#include +#include SmtpClient::SmtpClient(QObject *parent) : QObject(parent) { diff --git a/servatrice/src/smtpclient.h b/servatrice/src/smtpclient.h index be97ed44d..8fc4e35cb 100644 --- a/servatrice/src/smtpclient.h +++ b/servatrice/src/smtpclient.h @@ -2,9 +2,11 @@ #define SMTPCLIENT_H #include +#include +#include class QxtSmtp; -class QxtMailMessage; +class QByteArray; class SmtpClient : public QObject { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b51d10560..6e7ad64f7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,102 +2,10 @@ # If a new test needs additional Qt modules, add them there — not in individual test CMakeLists.txt files. enable_testing() -add_test(NAME dummy_test COMMAND dummy_test) -add_test(NAME expression_test COMMAND expression_test) -add_test(NAME clamped_arithmetic_test COMMAND clamped_arithmetic_test) -add_test(NAME test_age_formatting COMMAND test_age_formatting) -add_test(NAME password_hash_test COMMAND password_hash_test) -add_test(NAME playmat_resolver_test COMMAND playmat_resolver_test) -add_test(NAME server_card_counter_test COMMAND server_card_counter_test) -add_test(NAME server_counter_test COMMAND server_counter_test) -add_test(NAME server_rate_limiter_test COMMAND server_rate_limiter_test) -add_test(NAME server_developer_role_test COMMAND server_developer_role_test) -add_test(NAME server_game_join_test COMMAND server_game_join_test) -add_test(NAME warning_categories_test COMMAND warning_categories_test) -# The translation loader test compiles a .qm fixture, which needs lrelease from Qt Linguist. -if(TARGET Qt6::lrelease) - add_test(NAME translation_loader_test COMMAND translation_loader_test) -endif() -add_test(NAME report_categories_test COMMAND report_categories_test) -add_test(NAME lag_monitor_test COMMAND lag_monitor_test) -add_test(NAME latency_tracker_test COMMAND latency_tracker_test) -add_test(NAME metrics_registry_test COMMAND metrics_registry_test) -add_test(NAME loader_local_matching_test COMMAND loader_local_matching_test) - -add_test(NAME deck_hash_performance_test COMMAND deck_hash_performance_test) -set_tests_properties(deck_hash_performance_test PROPERTIES TIMEOUT 15) +include(GoogleTest) # Find GTest -add_executable(dummy_test dummy_test.cpp) -add_executable(expression_test expression_test.cpp) -add_executable(clamped_arithmetic_test clamped_arithmetic_test.cpp) -add_executable(test_age_formatting test_age_formatting.cpp) -add_executable(password_hash_test password_hash_test.cpp) -add_executable(playmat_resolver_test playmat_resolver_test.cpp) -add_executable(deck_hash_performance_test deck_hash_performance_test.cpp) -add_executable(server_card_counter_test server_card_counter_test.cpp) -add_executable(server_counter_test server_counter_test.cpp) -add_executable(server_rate_limiter_test server_rate_limiter_test.cpp) -add_executable(server_developer_role_test server_developer_role_test.cpp) -add_executable(server_game_join_test server_game_join_test.cpp) -add_executable(warning_categories_test warning_categories_test.cpp) -if(TARGET Qt6::lrelease) - add_executable(translation_loader_test translation_loader_test.cpp) - - # QTranslator only accepts real .qm files, so the translation loader test gets one compiled from its - # own .ts fixture rather than a stub. - set(TRANSLATION_LOADER_TEST_QM "${CMAKE_CURRENT_BINARY_DIR}/translation_loader_test_de.qm") - add_custom_command( - OUTPUT "${TRANSLATION_LOADER_TEST_QM}" - COMMAND Qt6::lrelease "${CMAKE_CURRENT_SOURCE_DIR}/translation_loader_test.ts" -qm "${TRANSLATION_LOADER_TEST_QM}" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/translation_loader_test.ts" - COMMENT "Compiling translation_loader_test.ts" - ) - add_custom_target(translation_loader_test_qm DEPENDS "${TRANSLATION_LOADER_TEST_QM}") - add_dependencies(translation_loader_test translation_loader_test_qm) - target_compile_definitions(translation_loader_test PRIVATE TRANSLATION_LOADER_TEST_DIR="${CMAKE_CURRENT_BINARY_DIR}") - - # A multi-config generator (MSBuild, Xcode) puts the executable in a per-config subdirectory while - # the .qm stays in the current binary directory, so copy the fixture next to the binary: that is the - # layout ABuildTreeFindsTheTranslationsNextToTheExecutable is about, and the only one it finds on - # those generators. - add_custom_command( - TARGET translation_loader_test - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${TRANSLATION_LOADER_TEST_QM}" - "$/" - VERBATIM - ) -endif() -add_executable(report_categories_test report_categories_test.cpp) -add_executable(lag_monitor_test ${CMAKE_SOURCE_DIR}/cockatrice/src/client/lag_monitor.cpp lag_monitor_test.cpp) -target_include_directories(lag_monitor_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src) -add_executable(latency_tracker_test latency_tracker_test.cpp) -add_executable(metrics_registry_test ../servatrice/src/metrics_registry.cpp metrics_registry_test.cpp) -add_executable( - loader_local_matching_test - ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp - ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/cache_settings.cpp - ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/card_counter_settings.cpp - ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/shortcuts_settings.cpp - ${CMAKE_SOURCE_DIR}/cockatrice/src/client/network/update/client/release_channel.cpp - ${VERSION_STRING_CPP} - loader_local_matching_test.cpp -) -target_include_directories(loader_local_matching_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src) - -# Guard must match the condition for src/single_instance_manager.cpp in cockatrice/CMakeLists.txt. -if(WITH_CLIENT) - add_executable( - single_instance_manager_test ${CMAKE_SOURCE_DIR}/cockatrice/src/single_instance_manager.cpp - single_instance_manager_test.cpp - ) - target_include_directories(single_instance_manager_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src) - - add_test(NAME single_instance_manager_test COMMAND single_instance_manager_test) -endif() - find_package(GTest) if(NOT GTEST_FOUND) @@ -122,91 +30,313 @@ if(NOT GTEST_FOUND) target_include_directories(gtest INTERFACE "$") set(GTEST_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/gtest-src/include") - set(GTEST_BOTH_LIBRARIES gtest) - add_dependencies(dummy_test gtest) - add_dependencies(expression_test gtest) - add_dependencies(clamped_arithmetic_test gtest) - add_dependencies(test_age_formatting gtest) - add_dependencies(password_hash_test gtest) - add_dependencies(playmat_resolver_test gtest) - add_dependencies(deck_hash_performance_test gtest) - add_dependencies(server_card_counter_test gtest) - add_dependencies(server_counter_test gtest) - add_dependencies(server_rate_limiter_test gtest) - add_dependencies(server_developer_role_test gtest) - add_dependencies(server_game_join_test gtest) - add_dependencies(warning_categories_test gtest) - if(TARGET translation_loader_test) - add_dependencies(translation_loader_test gtest) - endif() - add_dependencies(report_categories_test gtest) - add_dependencies(lag_monitor_test gtest) - add_dependencies(latency_tracker_test gtest) - add_dependencies(metrics_registry_test gtest) - add_dependencies(loader_local_matching_test gtest) - add_dependencies(single_instance_manager_test gtest) + # gtest_main is not optional here. FindGTest sets GTEST_BOTH_LIBRARIES to both halves, so this + # has to match it or the two paths disagree about what provides main(). A test source that + # defines its own main() gets away with the omission; one that does not fails at link with + # `undefined reference to main` pointing at crt1.o, which names neither gtest nor this line. + set(GTEST_BOTH_LIBRARIES gtest gtest_main) endif() +# Directory-scoped on purpose: the test subdirectories below add targets that include the +# fetched gtest headers and do not repeat this path themselves. include_directories(${GTEST_INCLUDE_DIRS}) -target_link_libraries(dummy_test Threads::Threads ${GTEST_BOTH_LIBRARIES}) -target_link_libraries(expression_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) -target_link_libraries( - clamped_arithmetic_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - test_age_formatting libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - password_hash_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - playmat_resolver_test libcockatrice_deck_list libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} -) -target_link_libraries( - deck_hash_performance_test libcockatrice_deck_list libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} -) -target_link_libraries( - server_card_counter_test libcockatrice_network Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - server_counter_test libcockatrice_network Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - server_rate_limiter_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries( - server_developer_role_test libcockatrice_network libcockatrice_rng Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} -) -target_link_libraries( - server_game_join_test libcockatrice_network_server_remote libcockatrice_rng Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} -) -target_link_libraries( - warning_categories_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -if(TARGET translation_loader_test) + +# --- Test registration ---------------------------------------------------------- +# +# Every test target needs the same four steps: build the executable, depend on gtest when it +# was fetched from source, link the shared test libraries, and hand the cases to CTest. The +# `if(NOT GTEST_FOUND)` branch is the easy one to forget — omit it and the link fails with +# undefined gtest symbols — so it lives here once instead of being repeated per test. +# +# This also replaces `add_test(NAME x COMMAND x)`. Naming the binary as a single CTest entry +# hides which case failed and makes `ctest -R Suite.Case` impossible; discovery exposes each +# TEST() as its own CTest entry instead. +# +# Labels: exactly one per test, because gtest_discover_tests() cannot carry more than one. +# GoogleTestAddTests.cmake accumulates the generated script with `foreach(arg ${ARGN})`, so a +# label list serialises as bare `LABELS ci server` in the CTestTestfile, and CTest reads only +# the first value of a property and silently discards the rest. A label therefore classifies a +# test into exactly one group, and the three groups cover every selection worth making: +# +# ci the default hermetic set, so `ctest -LE bench` runs everything but benchmarks +# server servatrice-facing tests, so `ctest -L server` works +# bench the slow suites, kept out of the default run +# +# A second label is a configure-time FATAL_ERROR rather than a line CTest quietly reads as one. +# Anything orthogonal to a test's kind belongs in a helper flag beside the label, so it +# composes with the group instead of competing for the single slot. +# +# TIMEOUT is bounded per test because CTest's implicit default is 1500s: one hung socket wait +# would otherwise stall CI for 25 minutes. +# +# EXTRA_LIBS is appended after the shared libraries so a caller adding a static archive (zlib, +# lzma) keeps it last, which is where the linker needs it. + +function(cockatrice_add_test) + cmake_parse_arguments(PARSE_ARGV 0 ARG "MANUAL" "NAME" "SOURCES;LIBS;LABELS;DEFINITIONS;INCLUDE_DIRS;EXTRA_LIBS") + + if(NOT ARG_NAME OR NOT ARG_SOURCES) + message(FATAL_ERROR "cockatrice_add_test requires at least NAME and SOURCES") + endif() + + add_executable(${ARG_NAME} ${ARG_SOURCES}) + + if(ARG_INCLUDE_DIRS) + target_include_directories(${ARG_NAME} PRIVATE ${ARG_INCLUDE_DIRS}) + endif() + + if(ARG_DEFINITIONS) + target_compile_definitions(${ARG_NAME} PRIVATE ${ARG_DEFINITIONS}) + endif() + target_link_libraries( - translation_loader_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} + ${ARG_NAME} ${ARG_LIBS} Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} ${ARG_EXTRA_LIBS} + ) + + # Only needed when gtest was downloaded and add_subdirectory'd above. An imported gtest + # target already carries its own dependency, so this must stay conditional. + if(NOT GTEST_FOUND) + add_dependencies(${ARG_NAME} gtest gtest_main) + endif() + + # MANUAL targets are built but deliberately kept out of ctest: benchmarks that need a card + # database, hit the network, or measure RAM. Leaving them unregistered keeps CI hermetic + # and fast. They still link gtest so they can use TEST() without a second code path. + if(ARG_MANUAL) + return() + endif() + + # One label only, per the note above. Rejecting a second loudly beats emitting a + # CTestTestfile line that CTest will quietly read as one label. + list(LENGTH ARG_LABELS _label_count) + if(_label_count GREATER 1) + message(FATAL_ERROR "${ARG_NAME}: pass at most one label, got '${ARG_LABELS}'") + endif() + if(NOT ARG_LABELS) + set(ARG_LABELS ci) + endif() + + # GoogleTestAddTests defaults DISCOVERY_TIMEOUT to 5s. A plain debug binary answers + # --gtest_list_tests in 0.04s, but that budget is thin once several binaries discover + # concurrently behind a -j build, and being over it fails at the *link* step with a bare + # "Process terminated due to timeout" that points nowhere near the cause. + gtest_discover_tests( + ${ARG_NAME} DISCOVERY_MODE POST_BUILD DISCOVERY_TIMEOUT 60 + PROPERTIES LABELS "${ARG_LABELS}" + TIMEOUT 60 + ) +endfunction() + +# Same wiring for targets that are built but deliberately kept out of ctest: benchmarks that +# need a card database, hit the network, or measure RAM. A separate name rather than a MANUAL +# flag spelled out at each call site, so "this is not in the CI suite" is visible in the CMake +# file. Note the unquoted expansions: an unset multi-value keyword expands to zero arguments, +# which is what lets this forward a caller's keywords verbatim without tripping the FATAL_ERROR +# guard above on an empty list. +function(cockatrice_add_manual_test) + cmake_parse_arguments(PARSE_ARGV 0 ARG "" "NAME" "SOURCES;LIBS;DEFINITIONS;INCLUDE_DIRS;EXTRA_LIBS") + + cockatrice_add_test( + NAME + ${ARG_NAME} + SOURCES + ${ARG_SOURCES} + LIBS + ${ARG_LIBS} + DEFINITIONS + ${ARG_DEFINITIONS} + INCLUDE_DIRS + ${ARG_INCLUDE_DIRS} + EXTRA_LIBS + ${ARG_EXTRA_LIBS} + MANUAL + ) +endfunction() + +# --- Unit tests ------------------------------------------------------------------ + +cockatrice_add_test(NAME expression_test SOURCES expression_test.cpp LIBS libcockatrice_utility) +cockatrice_add_test(NAME clamped_arithmetic_test SOURCES clamped_arithmetic_test.cpp LIBS libcockatrice_utility) +cockatrice_add_test(NAME test_age_formatting SOURCES test_age_formatting.cpp LIBS libcockatrice_utility) +cockatrice_add_test(NAME password_hash_test SOURCES password_hash_test.cpp LIBS libcockatrice_utility) +cockatrice_add_test(NAME report_categories_test SOURCES report_categories_test.cpp LIBS libcockatrice_utility) +cockatrice_add_test(NAME warning_categories_test SOURCES warning_categories_test.cpp LIBS libcockatrice_utility) +cockatrice_add_test( + NAME + playmat_resolver_test + SOURCES + playmat_resolver_test.cpp + LIBS + libcockatrice_deck_list + libcockatrice_utility +) +cockatrice_add_test( + NAME + server_rate_limiter_test + SOURCES + server_rate_limiter_test.cpp + LIBS + libcockatrice_utility + LABELS + server +) +cockatrice_add_test( + NAME + server_card_counter_test + SOURCES + server_card_counter_test.cpp + LIBS + libcockatrice_network + LABELS + server +) +cockatrice_add_test( + NAME + server_counter_test + SOURCES + server_counter_test.cpp + LIBS + libcockatrice_network + LABELS + server +) +cockatrice_add_test( + NAME + server_developer_role_test + SOURCES + server_developer_role_test.cpp + LIBS + libcockatrice_network + libcockatrice_rng + LABELS + server +) +cockatrice_add_test( + NAME + server_game_join_test + SOURCES + server_game_join_test.cpp + LIBS + libcockatrice_network_server_remote + libcockatrice_rng + LABELS + server +) +cockatrice_add_test( + NAME + latency_tracker_test + SOURCES + latency_tracker_test.cpp + LIBS + libcockatrice_network + LABELS + server +) +cockatrice_add_test( + NAME + lag_monitor_test + SOURCES + ${CMAKE_SOURCE_DIR}/cockatrice/src/client/lag_monitor.cpp + lag_monitor_test.cpp + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src +) +cockatrice_add_test( + NAME + metrics_registry_test + SOURCES + ${CMAKE_SOURCE_DIR}/servatrice/src/metrics_registry.cpp + metrics_registry_test.cpp + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/servatrice/src + LABELS + server +) +cockatrice_add_test( + NAME + card_update_progress_test + SOURCES + ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/card_database_update/card_update_progress.cpp + card_update_progress_test.cpp + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src +) +cockatrice_add_test( + NAME + loader_local_matching_test + SOURCES + ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp + ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/cache_settings.cpp + ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/card_counter_settings.cpp + ${CMAKE_SOURCE_DIR}/cockatrice/src/client/settings/shortcuts_settings.cpp + ${CMAKE_SOURCE_DIR}/cockatrice/src/client/network/update/client/release_channel.cpp + ${VERSION_STRING_CPP} + loader_local_matching_test.cpp + LIBS + libcockatrice_settings + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src +) +cockatrice_add_test( + NAME + deck_hash_performance_test + SOURCES + deck_hash_performance_test.cpp + LIBS + libcockatrice_deck_list + libcockatrice_utility + LABELS + bench +) + +# The translation loader test compiles a .qm fixture, which needs lrelease from Qt Linguist. +if(TARGET Qt6::lrelease) + set(TRANSLATION_LOADER_TEST_QM "${CMAKE_CURRENT_BINARY_DIR}/translation_loader_test_de.qm") + add_custom_command( + OUTPUT "${TRANSLATION_LOADER_TEST_QM}" + COMMAND Qt6::lrelease "${CMAKE_CURRENT_SOURCE_DIR}/translation_loader_test.ts" -qm "${TRANSLATION_LOADER_TEST_QM}" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/translation_loader_test.ts" + COMMENT "Compiling translation_loader_test.ts" + ) + add_custom_target(translation_loader_test_qm DEPENDS "${TRANSLATION_LOADER_TEST_QM}") + + cockatrice_add_test( + NAME + translation_loader_test + SOURCES + translation_loader_test.cpp + LIBS + libcockatrice_utility + DEFINITIONS + TRANSLATION_LOADER_TEST_DIR="${CMAKE_CURRENT_BINARY_DIR}" + ) + add_dependencies(translation_loader_test translation_loader_test_qm) + + # A multi-config generator (MSBuild, Xcode) puts the executable in a per-config subdirectory while + # the .qm stays in the current binary directory, so copy the fixture next to the binary: that is the + # layout ABuildTreeFindsTheTranslationsNextToTheExecutable is about, and the only one it finds on + # those generators. + add_custom_command( + TARGET translation_loader_test + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${TRANSLATION_LOADER_TEST_QM}" + "$/" + VERBATIM ) endif() -target_link_libraries( - report_categories_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_link_libraries(lag_monitor_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) -target_link_libraries( - latency_tracker_test libcockatrice_network Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_include_directories(metrics_registry_test PRIVATE ${CMAKE_SOURCE_DIR}/servatrice/src) -target_link_libraries(metrics_registry_test ${TEST_QT_MODULES} Threads::Threads ${GTEST_BOTH_LIBRARIES}) -target_link_libraries( - loader_local_matching_test libcockatrice_settings Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) +# Guard must match the condition for src/single_instance_manager.cpp in cockatrice/CMakeLists.txt. if(WITH_CLIENT) - target_link_libraries(single_instance_manager_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) + cockatrice_add_test( + NAME + single_instance_manager_test + SOURCES + ${CMAKE_SOURCE_DIR}/cockatrice/src/single_instance_manager.cpp + single_instance_manager_test.cpp + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src + ${CMAKE_SOURCE_DIR}/libcockatrice_utility + ) endif() add_subdirectory(card_zone_algorithms) diff --git a/tests/card_update_progress_test.cpp b/tests/card_update_progress_test.cpp new file mode 100644 index 000000000..849cf623c --- /dev/null +++ b/tests/card_update_progress_test.cpp @@ -0,0 +1,93 @@ +#include "interface/card_database_update/card_update_progress.h" + +#include +#include +#include + +namespace +{ +std::optional parseLine(const QByteArray &line) +{ + return CardUpdateProgress::fromProtocolLine(line); +} +} // namespace + +TEST(CardUpdateProgressTest, ParsesAValidDownloadLine) +{ + const std::optional progress = parseLine("PROGRESS download 42 100"); + ASSERT_TRUE(progress.has_value()); + EXPECT_EQ(CardUpdateStage::Download, progress->stage); + EXPECT_EQ(42, progress->done); + EXPECT_EQ(100, progress->total); +} + +TEST(CardUpdateProgressTest, ParsesTrailingNewline) +{ + const std::optional progress = parseLine("PROGRESS scan 7 99\n"); + ASSERT_TRUE(progress.has_value()); + EXPECT_EQ(CardUpdateStage::Scan, progress->stage); + EXPECT_EQ(7, progress->done); + EXPECT_EQ(99, progress->total); +} + +TEST(CardUpdateProgressTest, ParsesWithSurroundingWhitespace) +{ + const std::optional progress = parseLine(QByteArray(" PROGRESS import 3 10 ")); + ASSERT_TRUE(progress.has_value()); + EXPECT_EQ(CardUpdateStage::Import, progress->stage); + EXPECT_EQ(3, progress->done); + EXPECT_EQ(10, progress->total); +} + +TEST(CardUpdateProgressTest, AcceptsZeroProgress) +{ + const std::optional progress = parseLine("PROGRESS download 0 0"); + ASSERT_TRUE(progress.has_value()); + EXPECT_EQ(0, progress->done); + EXPECT_EQ(0, progress->total); +} + +TEST(CardUpdateProgressTest, RejectsLinesWithoutProgressPrefix) +{ + EXPECT_FALSE(parseLine("download 42 100").has_value()); + EXPECT_FALSE(parseLine("PROGRESSdownload 42 100").has_value()); + EXPECT_FALSE(parseLine("").has_value()); +} + +TEST(CardUpdateProgressTest, RejectsMalformedLines) +{ + EXPECT_FALSE(parseLine("PROGRESS").has_value()); + EXPECT_FALSE(parseLine("PROGRESS download").has_value()); + EXPECT_FALSE(parseLine("PROGRESS download 42 100 extra").has_value()); + EXPECT_FALSE(parseLine("PROGRESS download 42").has_value()); + EXPECT_FALSE(parseLine("PROGRESS download notANumber 100").has_value()); +} + +TEST(CardUpdateProgressTest, RejectsNegativeValues) +{ + EXPECT_FALSE(parseLine("PROGRESS download -1 100").has_value()); + EXPECT_FALSE(parseLine("PROGRESS download 42 -100").has_value()); +} + +TEST(CardUpdateProgressTest, AcceptsUnknownStagesSchemalessly) +{ + const std::optional progress = parseLine("PROGRESS spoilers 1 2"); + ASSERT_TRUE(progress.has_value()); + EXPECT_EQ(CardUpdateStage::Unknown, progress->stage); + EXPECT_EQ(1, progress->done); + EXPECT_EQ(2, progress->total); +} + +TEST(CardUpdateProgressTest, StageTokensRoundTrip) +{ + EXPECT_EQ("download", CardUpdateProgress{CardUpdateStage::Download}.stageToken()); + EXPECT_EQ("scan", CardUpdateProgress{CardUpdateStage::Scan}.stageToken()); + EXPECT_EQ("import", CardUpdateProgress{CardUpdateStage::Import}.stageToken()); + EXPECT_EQ("unknown", CardUpdateProgress{CardUpdateStage::Unknown}.stageToken()); +} + +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/tests/card_zone_algorithms/CMakeLists.txt b/tests/card_zone_algorithms/CMakeLists.txt index e03d8f77d..945f8a0ed 100644 --- a/tests/card_zone_algorithms/CMakeLists.txt +++ b/tests/card_zone_algorithms/CMakeLists.txt @@ -1,15 +1,4 @@ -add_executable(card_zone_algorithms_test card_zone_algorithms_test.cpp) - -target_include_directories(card_zone_algorithms_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src/game/zones) - -target_link_libraries( - card_zone_algorithms_test - PRIVATE Threads::Threads - PRIVATE ${GTEST_BOTH_LIBRARIES} +cockatrice_add_test( + NAME card_zone_algorithms_test SOURCES card_zone_algorithms_test.cpp INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src/game/zones ) - -add_test(NAME card_zone_algorithms_test COMMAND card_zone_algorithms_test) - -if(NOT GTEST_FOUND) - add_dependencies(card_zone_algorithms_test gtest) -endif() diff --git a/tests/card_zone_algorithms/card_zone_algorithms_test.cpp b/tests/card_zone_algorithms/card_zone_algorithms_test.cpp index 8fab42566..4f5282235 100644 --- a/tests/card_zone_algorithms/card_zone_algorithms_test.cpp +++ b/tests/card_zone_algorithms/card_zone_algorithms_test.cpp @@ -1,6 +1,7 @@ #include "card_zone_algorithms.h" #include +#include #include struct MockCardRef diff --git a/tests/carddatabase/CMakeLists.txt b/tests/carddatabase/CMakeLists.txt index 811cebc1d..22171a9e8 100644 --- a/tests/carddatabase/CMakeLists.txt +++ b/tests/carddatabase/CMakeLists.txt @@ -9,61 +9,46 @@ add_definitions("-DCARDDB_DATADIR=\"${CMAKE_CURRENT_SOURCE_DIR}/data/\"") # ------------------------ # Card Database Test # ------------------------ -add_executable(carddatabase_test ${MOCKS_SOURCES} ${VERSION_STRING_CPP} carddatabase_test.cpp mocks.cpp) - -target_link_libraries( +cockatrice_add_test( + NAME carddatabase_test - PRIVATE libcockatrice_card - PRIVATE Threads::Threads - PRIVATE ${GTEST_BOTH_LIBRARIES} - PRIVATE ${TEST_QT_MODULES} + SOURCES + ${VERSION_STRING_CPP} + carddatabase_test.cpp + mocks.cpp + LIBS + libcockatrice_card ) -add_test(NAME carddatabase_test COMMAND carddatabase_test) - -# ------------------------ -# Load Benchmark (manual, not run in CI) -# ------------------------ -add_executable(load_benchmark ${MOCKS_SOURCES} ${VERSION_STRING_CPP} load_benchmark.cpp mocks.cpp) - -target_link_libraries( - load_benchmark - PRIVATE libcockatrice_card - PRIVATE libcockatrice_models - PRIVATE Threads::Threads - PRIVATE ${GTEST_BOTH_LIBRARIES} - PRIVATE ${TEST_QT_MODULES} -) - -if(NOT GTEST_FOUND) - add_dependencies(load_benchmark gtest) -endif() - # ------------------------ # Filter String Test # (guard must match the condition for libcockatrice_filters in the root CMakeLists.txt) # ------------------------ if(WITH_ORACLE OR WITH_CLIENT) - add_executable(filter_string_test ${MOCKS_SOURCES} ${VERSION_STRING_CPP} filter_string_test.cpp mocks.cpp) - - target_link_libraries( + cockatrice_add_test( + NAME filter_string_test - PRIVATE libcockatrice_filters - PRIVATE Threads::Threads - PRIVATE ${GTEST_BOTH_LIBRARIES} - PRIVATE ${TEST_QT_MODULES} + SOURCES + ${VERSION_STRING_CPP} + filter_string_test.cpp + mocks.cpp + LIBS + libcockatrice_filters ) - - add_test(NAME filter_string_test COMMAND filter_string_test) - - if(NOT GTEST_FOUND) - add_dependencies(filter_string_test gtest) - endif() endif() # ------------------------ -# Dependencies on gtest +# Load Benchmark (manual, not run in CI) # ------------------------ -if(NOT GTEST_FOUND) - add_dependencies(carddatabase_test gtest) -endif() +cockatrice_add_manual_test( + NAME + load_benchmark + SOURCES + ${VERSION_STRING_CPP} + load_benchmark.cpp + mocks.cpp + LIBS + libcockatrice_card + libcockatrice_models + MANUAL +) diff --git a/tests/carddatabase/carddatabase_test.cpp b/tests/carddatabase/carddatabase_test.cpp index 392f6395a..1ac259d9b 100644 --- a/tests/carddatabase/carddatabase_test.cpp +++ b/tests/carddatabase/carddatabase_test.cpp @@ -1,15 +1,36 @@ -#include "mocks.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/set/card_set.h" +#include "libcockatrice/card/set/card_set_list.h" #include "test_card_database_path_provider.h" #include "gtest/gtest.h" +#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 { @@ -64,12 +85,11 @@ TEST(CardDatabaseTest, Xml4LocalizedDataRoundTrip) QTemporaryDir tempDir; const QString fileName = tempDir.filePath("cards.xml"); - NoopCardPreferenceProvider prefProvider; - CockatriceXml4Parser writer(&prefProvider, &controller); + CockatriceXml4Parser writer(&controller); ASSERT_TRUE(writer.saveToFile({}, sets, cards, fileName)); CardDatabaseData data; - CockatriceXml4Parser parser(&prefProvider, &controller); + CockatriceXml4Parser parser(&controller); QFile file(fileName); ASSERT_TRUE(file.open(QIODevice::ReadOnly)); parser.parseFileInto(file, data); @@ -81,6 +101,280 @@ TEST(CardDatabaseTest, Xml4LocalizedDataRoundTrip) ASSERT_EQ(loaded->getLocalizedText("de"), "Blitzschlag fügt 3 Schadenspunkte zu."); ASSERT_EQ(loaded->getLocalizedText("fr"), "Deal 3 damage."); } + +/** + * @brief Path provider serving a sandboxed copy of the test card database. + */ +class SandboxPathProvider : public ICardDatabasePathProvider +{ +public: + explicit SandboxPathProvider(const QString &_root) : root(_root) + { + } + + QString getCardDatabasePath() const override + { + return root + "/cards.xml"; + } + + QString getCustomCardDatabasePath() const override + { + return root + "/customsets/"; + } + + QString getTokenDatabasePath() const override + { + return root + "/tokens.xml"; + } + + QString getSpoilerCardDatabasePath() const override + { + return root + "/spoiler.xml"; + } + +private: + QString root; +}; + +/** + * @brief Set priority controller whose enablement state the test drives directly. + * + * Seeded short names behave like entries present in cardDatabase.ini (enabled, + * known). Anything the parser discovers but the test did not seed falls back to + * the default SetOptions, i.e. disabled and unknown, mirroring + * CardDatabaseSettings for sets without an ini group. + */ +class SeededSetPriorityController : public ICardSetPriorityController +{ +public: + void seed(const QStringList &shortNames) + { + for (const QString &shortName : shortNames) { + SetOptions options; + options.enabled = true; + options.isKnown = true; + setOptions.insert(shortName, options); + } + } + + void setSortKey(QString shortName, unsigned int sortKey) override + { + setOptions[shortName].sortKey = sortKey; + } + + void setEnabled(QString shortName, bool enabled) override + { + setOptions[shortName].enabled = enabled; + } + + void setIsKnown(QString shortName, bool isknown) override + { + setOptions[shortName].isKnown = isknown; + } + + unsigned int getSortKey(QString shortName) const override + { + return setOptions.value(shortName).sortKey; + } + + bool isEnabled(QString shortName) const override + { + return setOptions.value(shortName).enabled; + } + + bool isKnown(QString shortName) const override + { + return setOptions.value(shortName).isKnown; + } + + SetOptions getSetOptions(QString shortName) const override + { + return setOptions.value(shortName); + } + + QStringList getEnabledSetNames() const override + { + QStringList names; + for (auto it = setOptions.constBegin(); it != setOptions.constEnd(); ++it) { + if (it.value().enabled) { + names << it.key(); + } + } + names.sort(); + return names; + } + + void saveSets(const QVector &data) override + { + for (const SetSaveData &entry : data) { + setOptions[entry.shortName].sortKey = entry.sortKey; + setOptions[entry.shortName].enabled = entry.enabled; + } + } + +private: + QHash setOptions; +}; + +/** + * @brief Sandboxed card database plus enablement controller for cache tests. + * + * Copies the checked-in fixture XML into a temporary directory so each test + * owns the files (and the binary cache written next to them). + */ +class CardDatabaseCacheInvalidationTest : public ::testing::Test +{ +protected: + void SetUp() override + { + ASSERT_TRUE(tempDir.isValid()); + root = tempDir.path(); + ASSERT_TRUE(QFile::copy(QString(CARDDB_DATADIR) + "cards.xml", root + "/cards.xml")); + ASSERT_TRUE(QFile::copy(QString(CARDDB_DATADIR) + "tokens.xml", root + "/tokens.xml")); + ASSERT_TRUE(QDir(root).mkpath("customsets")); + ASSERT_TRUE( + QFile::copy(QString(CARDDB_DATADIR) + "customsets/customset1.xml", root + "/customsets/customset1.xml")); + controller.seed({"CAT", "DOG", "WHO", " Not a Card", "BRD"}); + } + + /** + * @brief Contents of the binary cache written next to cards.xml. + * @return The cache file bytes, or an empty array if no cache exists. + */ + QByteArray cacheContents() const + { + QFile file(root + "/cards.xml.cache"); + if (!file.open(QIODevice::ReadOnly)) { + return {}; + } + return file.readAll(); + } + + QTemporaryDir tempDir; + QString root; + SeededSetPriorityController controller; +}; + +TEST_F(CardDatabaseCacheInvalidationTest, DisablingSetBustsCacheAndDropsPrintings) +{ + NoopCardPreferenceProvider prefs; + SandboxPathProvider pathProvider(root); + CardDatabase db(nullptr, &prefs, &pathProvider, &controller); + + db.loadCardDatabases(); + const QByteArray initialCache = cacheContents(); + ASSERT_FALSE(initialCache.isEmpty()) << "first load must write the binary cache"; + ASSERT_FALSE(db.getCardList().value("Cat").isNull()); + ASSERT_TRUE(db.getCardList().value("Cat")->getSets().contains("CAT")); + + // A cache-aware load with unchanged inputs keeps the cache: the parse + // result would be identical, so there is nothing to invalidate. + db.loadCardDatabases(); + EXPECT_EQ(initialCache, cacheContents()) << "load with unchanged inputs must keep the cache"; + + // Disabling a set changes the source hash, so the next load re-parses and + // the set's printings disappear everywhere. + controller.setEnabled("CAT", false); + db.reloadCardDatabasesAndNotify(); + EXPECT_NE(initialCache, cacheContents()) << "toggling set enablement must bust the cache"; + ASSERT_FALSE(db.getCardList().value("Cat").isNull()); + EXPECT_FALSE(db.getCardList().value("Cat")->getSets().contains("CAT")) << "disabled set printings must be dropped"; + ASSERT_FALSE(db.getCardList().value("Kitten").isNull()); + EXPECT_FALSE(db.getCardList().value("Kitten")->getSets().contains("CAT")); +} + +TEST_F(CardDatabaseCacheInvalidationTest, AddingAndEnablingCustomSetBustsCache) +{ + NoopCardPreferenceProvider prefs; + SandboxPathProvider pathProvider(root); + CardDatabase db(nullptr, &prefs, &pathProvider, &controller); + + db.loadCardDatabases(); + const QByteArray initialCache = cacheContents(); + ASSERT_FALSE(initialCache.isEmpty()) << "first load must write the binary cache"; + + // Drop a new custom set in: the input file list changes, so the next load + // must re-parse. BRD2 is unknown, so its set starts disabled. + QFile customSetFile(root + "/customsets/customset2.xml"); + ASSERT_TRUE(customSetFile.open(QIODevice::WriteOnly | QIODevice::Truncate)); + customSetFile.write("\n" + "\n" + " \n" + " \n" + " Finch\n" + " BRD2\n" + " 0\n" + " Chirp!\n" + " \n" + " \n" + "\n"); + customSetFile.close(); + + db.reloadCardDatabasesAndNotify(); + const QByteArray afterCustomSetAdded = cacheContents(); + EXPECT_NE(initialCache, afterCustomSetAdded) << "adding a custom card database must bust the cache"; + ASSERT_FALSE(db.getCardList().value("Finch").isNull()) << "the custom card must be loaded"; + EXPECT_TRUE(db.getCardList().value("Finch")->getSets().isEmpty()) + << "BRD2 starts disabled, so Finch has no printings yet"; + + // Enabling the freshly discovered set busts the cache again, so the next + // load finally parses its printings (#7455). + controller.setEnabled("BRD2", true); + db.reloadCardDatabasesAndNotify(); + EXPECT_NE(afterCustomSetAdded, cacheContents()) << "enabling a set must bust the cache"; + ASSERT_FALSE(db.getCardList().value("Finch").isNull()); + EXPECT_TRUE(db.getCardList().value("Finch")->getSets().contains("BRD2")); +} + +TEST_F(CardDatabaseCacheInvalidationTest, ExplicitReloadBypassesCache) +{ + NoopCardPreferenceProvider prefs; + SandboxPathProvider pathProvider(root); + CardDatabase db(nullptr, &prefs, &pathProvider, &controller); + + db.loadCardDatabases(); + ASSERT_FALSE(db.getCardList().value("Cat").isNull()); + ASSERT_TRUE(db.getCardList().value("Cat")->getSets().contains("CAT")); + + // Move Cat to the DOG set in place, keeping the file size identical and + // restoring the modification time afterwards: the source hash (path, size, + // mtime) still matches, so the cache stays valid by construction and only + // an explicit reload can pick the edit up. + const QString cardsPath = root + "/cards.xml"; + QFile file(cardsPath); + ASSERT_TRUE(file.open(QIODevice::ReadOnly)); + const qint64 stampedSecs = QFileInfo(cardsPath).lastModified().toSecsSinceEpoch(); + QByteArray contents = file.readAll(); + file.close(); + const QByteArray oldSetCode("CAT"); + const QByteArray newSetCode("DOG"); + ASSERT_EQ(contents.count(oldSetCode), 1) << "fixture must contain exactly one CAT printing"; + contents.replace(contents.indexOf(oldSetCode), oldSetCode.size(), newSetCode); + ASSERT_TRUE(file.open(QIODevice::ReadWrite)); + ASSERT_EQ(file.write(contents), contents.size()); + // Flush the pending write before stamping the time: close() would otherwise + // flush it afterwards and bump the modification time again, invalidating the + // cache on platforms that buffer writes (e.g. macOS). + ASSERT_TRUE(file.flush()); + ASSERT_TRUE(file.setFileTime(QDateTime::fromSecsSinceEpoch(stampedSecs), QFileDevice::FileModificationTime)); + file.close(); + ASSERT_EQ(QFileInfo(cardsPath).lastModified().toSecsSinceEpoch(), stampedSecs) + << "the sandbox file's modification time must be restored for the cache to stay valid"; + + // The cache is still valid for a regular load, which serves the stale data. + db.loadCardDatabases(); + ASSERT_FALSE(db.getCardList().value("Cat").isNull()); + EXPECT_TRUE(db.getCardList().value("Cat")->getSets().contains("CAT")) << "regular load must hit the cache"; + EXPECT_FALSE(db.getCardList().value("Cat")->getSets().contains("DOG")); + + // The explicit reload ignores the cache and re-reads the file. + const QByteArray staleCache = cacheContents(); + db.reloadCardDatabasesAndNotify(); + EXPECT_NE(staleCache, cacheContents()) << "explicit reload must rewrite the cache from disk"; + ASSERT_FALSE(db.getCardList().value("Cat").isNull()); + EXPECT_FALSE(db.getCardList().value("Cat")->getSets().contains("CAT")); + EXPECT_TRUE(db.getCardList().value("Cat")->getSets().contains("DOG")); +} } // namespace int main(int argc, char **argv) diff --git a/tests/carddatabase/filter_string_test.cpp b/tests/carddatabase/filter_string_test.cpp index dcf1cf0a2..95225e28c 100644 --- a/tests/carddatabase/filter_string_test.cpp +++ b/tests/carddatabase/filter_string_test.cpp @@ -1,13 +1,29 @@ -#include "mocks.h" +#include "libcockatrice/card/card_localization.h" +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/card/database/card_database_querier.h" +#include "libcockatrice/card/set/card_set.h" #include "test_card_database_path_provider.h" #include "gtest/gtest.h" +#include +#include +#include +#include +#include +#include #include #include #include #include #include #include +#include +#include + +namespace +{ +class CardQuery; +} #define QUERY(name, card, query, match) \ TEST_F(CardQuery, name) \ diff --git a/tests/carddatabase/load_benchmark.cpp b/tests/carddatabase/load_benchmark.cpp index 8e9e80e4d..5492b9531 100644 --- a/tests/carddatabase/load_benchmark.cpp +++ b/tests/carddatabase/load_benchmark.cpp @@ -12,25 +12,30 @@ * (~/.local/share/Cockatrice/Cockatrice/...). */ -#include "mocks.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/set/card_set_list.h" -#include "gtest/gtest.h" #include #include -#include +#include #include #include -#include #include +#include +#include #include +#include +#include +#include #include -#include +#include #include #include #include #include #include #include +#include static QString defaultXdgPath(const QString &file) { diff --git a/tests/carddatabase/mocks.h b/tests/carddatabase/mocks.h index 016642005..b7cfe8243 100644 --- a/tests/carddatabase/mocks.h +++ b/tests/carddatabase/mocks.h @@ -7,7 +7,7 @@ #define PICTURELOADER_H -#include +#include "libcockatrice/card/card_info.h" class CardPictureLoader { diff --git a/tests/clamped_arithmetic_test.cpp b/tests/clamped_arithmetic_test.cpp index 2471d5870..e5fd070b0 100644 --- a/tests/clamped_arithmetic_test.cpp +++ b/tests/clamped_arithmetic_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include TEST(AddClamped, AddsWithinBounds) { diff --git a/tests/deck_hash_performance_test.cpp b/tests/deck_hash_performance_test.cpp index 154283e8e..135c218c5 100644 --- a/tests/deck_hash_performance_test.cpp +++ b/tests/deck_hash_performance_test.cpp @@ -1,6 +1,10 @@ #include "gtest/gtest.h" -#include +#include +#include +#include +#include #include +#include static constexpr int amount = 1e5; QString repeatDeck; diff --git a/tests/deck_list_model/CMakeLists.txt b/tests/deck_list_model/CMakeLists.txt index e3096c559..cd7d693f3 100644 --- a/tests/deck_list_model/CMakeLists.txt +++ b/tests/deck_list_model/CMakeLists.txt @@ -1,33 +1,23 @@ -add_executable(deck_list_model_custom_zones_test ${VERSION_STRING_CPP} deck_list_model_custom_zones_test.cpp) - -if(NOT GTEST_FOUND) - add_dependencies(deck_list_model_custom_zones_test gtest) -endif() - -target_link_libraries( +cockatrice_add_test( + NAME deck_list_model_custom_zones_test + SOURCES + ${VERSION_STRING_CPP} + deck_list_model_custom_zones_test.cpp + LIBS libcockatrice_models libcockatrice_card libcockatrice_deck_list - Threads::Threads - ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} ) -add_test(NAME deck_list_model_custom_zones_test COMMAND deck_list_model_custom_zones_test) -add_executable(deck_list_model_zone_integration_test ${VERSION_STRING_CPP} deck_list_model_zone_integration_test.cpp) - -if(NOT GTEST_FOUND) - add_dependencies(deck_list_model_zone_integration_test gtest) -endif() - -target_link_libraries( +cockatrice_add_test( + NAME deck_list_model_zone_integration_test + SOURCES + ${VERSION_STRING_CPP} + deck_list_model_zone_integration_test.cpp + LIBS libcockatrice_models libcockatrice_card libcockatrice_deck_list - Threads::Threads - ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} ) -add_test(NAME deck_list_model_zone_integration_test COMMAND deck_list_model_zone_integration_test) diff --git a/tests/deck_list_model/deck_list_model_custom_zones_test.cpp b/tests/deck_list_model/deck_list_model_custom_zones_test.cpp index 7f4ab81e1..95df74702 100644 --- a/tests/deck_list_model/deck_list_model_custom_zones_test.cpp +++ b/tests/deck_list_model/deck_list_model_custom_zones_test.cpp @@ -9,10 +9,19 @@ * full model and card database machinery. */ +#include "deck_list_model_custom_zones.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" + +#include +#include +#include #include #include #include #include +#include +#include +#include namespace { diff --git a/tests/deck_list_model/deck_list_model_zone_integration_test.cpp b/tests/deck_list_model/deck_list_model_zone_integration_test.cpp index a4562c95d..63c904910 100644 --- a/tests/deck_list_model/deck_list_model_zone_integration_test.cpp +++ b/tests/deck_list_model/deck_list_model_zone_integration_test.cpp @@ -1,3 +1,12 @@ +#include "libcockatrice/card/database/card_database.h" +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" + +#include +#include +#include +#include +#include +#include #include #include #include @@ -8,6 +17,10 @@ #include #include #include +#include +#include + +class QModelIndex; namespace { diff --git a/tests/deck_list_zones/CMakeLists.txt b/tests/deck_list_zones/CMakeLists.txt index 0710be94d..7af8fd187 100644 --- a/tests/deck_list_zones/CMakeLists.txt +++ b/tests/deck_list_zones/CMakeLists.txt @@ -1,10 +1 @@ -add_executable(deck_list_zones_test deck_list_zones_test.cpp) - -if(NOT GTEST_FOUND) - add_dependencies(deck_list_zones_test gtest) -endif() - -target_link_libraries( - deck_list_zones_test libcockatrice_deck_list Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -add_test(NAME deck_list_zones_test COMMAND deck_list_zones_test) +cockatrice_add_test(NAME deck_list_zones_test SOURCES deck_list_zones_test.cpp LIBS libcockatrice_deck_list) diff --git a/tests/deck_list_zones/deck_list_zones_test.cpp b/tests/deck_list_zones/deck_list_zones_test.cpp index 801f226a9..1903b70df 100644 --- a/tests/deck_list_zones/deck_list_zones_test.cpp +++ b/tests/deck_list_zones/deck_list_zones_test.cpp @@ -7,12 +7,20 @@ * "main" are still mainboard cards for hashing, sideboard size, legality and export. */ +#include "libcockatrice/deck_list/tree/abstract_deck_list_node.h" + +#include +#include +#include +#include #include +#include #include #include #include #include #include +#include namespace { diff --git a/tests/dummy_test.cpp b/tests/dummy_test.cpp deleted file mode 100644 index 31a01bcff..000000000 --- a/tests/dummy_test.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "gtest/gtest.h" - -namespace -{ -class FooTest : public ::testing::Test -{ -}; - -TEST(DummyTest, Works) -{ - ASSERT_EQ(1, 1) << "One is not equal to one"; -} -} // namespace - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} \ No newline at end of file diff --git a/tests/expression_test.cpp b/tests/expression_test.cpp index 4fbe98cb9..b3c4b586c 100644 --- a/tests/expression_test.cpp +++ b/tests/expression_test.cpp @@ -1,6 +1,7 @@ #include "gtest/gtest.h" #include #include +#include #define TEST_EXPR(name, a, b) \ TEST(ExpressionTest, name) \ diff --git a/tests/lag_monitor_test.cpp b/tests/lag_monitor_test.cpp index 9948eeabb..b404a2c9e 100644 --- a/tests/lag_monitor_test.cpp +++ b/tests/lag_monitor_test.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include namespace { diff --git a/tests/latency_tracker_test.cpp b/tests/latency_tracker_test.cpp index 68631b7ca..a77051799 100644 --- a/tests/latency_tracker_test.cpp +++ b/tests/latency_tracker_test.cpp @@ -1,5 +1,9 @@ +#include +#include #include +#include #include +#include TEST(LatencyTrackerTest, EmptyTrackerYieldsZeroedStats) { diff --git a/tests/loader_local_matching_test.cpp b/tests/loader_local_matching_test.cpp index 6ce684fdd..13d3e5bb3 100644 --- a/tests/loader_local_matching_test.cpp +++ b/tests/loader_local_matching_test.cpp @@ -1,7 +1,11 @@ #include "client/settings/cache_settings.h" #include "interface/card_picture_loader/card_picture_loader_local.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/printing/printing_info.h" #include "gtest/gtest.h" +#include +#include #include #include #include @@ -9,13 +13,18 @@ #include #include #include +#include #include +#include #include +#include #include #include #include #include #include +#include +#include namespace { diff --git a/tests/loading_from_clipboard/CMakeLists.txt b/tests/loading_from_clipboard/CMakeLists.txt index 719d62f45..88711e457 100644 --- a/tests/loading_from_clipboard/CMakeLists.txt +++ b/tests/loading_from_clipboard/CMakeLists.txt @@ -1,12 +1,13 @@ add_definitions("-DCARDDB_DATADIR=\"${CMAKE_CURRENT_SOURCE_DIR}/data/\"") -add_executable(loading_from_clipboard_test ${VERSION_STRING_CPP} clipboard_testing.cpp loading_from_clipboard_test.cpp) -if(NOT GTEST_FOUND) - add_dependencies(loading_from_clipboard_test gtest) -endif() - -target_link_libraries( - loading_from_clipboard_test libcockatrice_deck_list libcockatrice_card Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} +cockatrice_add_test( + NAME + loading_from_clipboard_test + SOURCES + ${VERSION_STRING_CPP} + clipboard_testing.cpp + loading_from_clipboard_test.cpp + LIBS + libcockatrice_deck_list + libcockatrice_card ) -add_test(NAME loading_from_clipboard_test COMMAND loading_from_clipboard_test) diff --git a/tests/loading_from_clipboard/clipboard_testing.cpp b/tests/loading_from_clipboard/clipboard_testing.cpp index a9977b800..3f652a495 100644 --- a/tests/loading_from_clipboard/clipboard_testing.cpp +++ b/tests/loading_from_clipboard/clipboard_testing.cpp @@ -1,6 +1,12 @@ #include "clipboard_testing.h" +#include "libcockatrice/deck_list/deck_list.h" +#include "libcockatrice/deck_list/tree/inner_deck_list_node.h" + +#include #include +#include +#include #include #include diff --git a/tests/loading_from_clipboard/clipboard_testing.h b/tests/loading_from_clipboard/clipboard_testing.h index 41d8ea794..c9852e5d7 100644 --- a/tests/loading_from_clipboard/clipboard_testing.h +++ b/tests/loading_from_clipboard/clipboard_testing.h @@ -1,8 +1,11 @@ #ifndef CLIPBOARD_TESTING_H #define CLIPBOARD_TESTING_H -#include "gtest/gtest.h" -#include +#include +#include +#include +#include +#include // using std types because qt types aren't understood by gtest (without this you'll get less nice errors) using CardRows = QVector>; diff --git a/tests/loading_from_clipboard/loading_from_clipboard_test.cpp b/tests/loading_from_clipboard/loading_from_clipboard_test.cpp index fcfbb22db..840d926ff 100644 --- a/tests/loading_from_clipboard/loading_from_clipboard_test.cpp +++ b/tests/loading_from_clipboard/loading_from_clipboard_test.cpp @@ -1,5 +1,11 @@ #include "clipboard_testing.h" +#include +#include +#include +#include +#include + // Testing is done by using the DeckList::loadFromString_Plain function in common/decklist.h // It does not check if cards are in the database at all, so no comparisons to the database will be made. diff --git a/tests/metrics_registry_test.cpp b/tests/metrics_registry_test.cpp index 1abef58e1..39a8f8aaf 100644 --- a/tests/metrics_registry_test.cpp +++ b/tests/metrics_registry_test.cpp @@ -2,6 +2,7 @@ #include #include #include +#include TEST(MetricsRegistryTest, EmptyRegistryHasZeroedCounters) { diff --git a/tests/movecard_tests/CMakeLists.txt b/tests/movecard_tests/CMakeLists.txt index 769047148..68d8fc84c 100755 --- a/tests/movecard_tests/CMakeLists.txt +++ b/tests/movecard_tests/CMakeLists.txt @@ -1,16 +1,11 @@ -add_executable(reverse_card_move_test reverse_card_move_test.cpp) - -if(NOT GTEST_FOUND) - add_dependencies(reverse_card_move_test gtest) -endif() - -target_link_libraries( +cockatrice_add_test( + NAME reverse_card_move_test - PRIVATE libcockatrice_network_server_remote - PRIVATE libcockatrice_rng - PRIVATE Threads::Threads - PRIVATE ${GTEST_BOTH_LIBRARIES} - PRIVATE ${TEST_QT_MODULES} + SOURCES + reverse_card_move_test.cpp + LIBS + libcockatrice_network_server_remote + libcockatrice_rng + LABELS + server ) - -add_test(NAME reverse_card_move_test COMMAND reverse_card_move_test) diff --git a/tests/movecard_tests/reverse_card_move_test.cpp b/tests/movecard_tests/reverse_card_move_test.cpp index 64c93078c..6bed20d18 100644 --- a/tests/movecard_tests/reverse_card_move_test.cpp +++ b/tests/movecard_tests/reverse_card_move_test.cpp @@ -3,15 +3,20 @@ #include "game/server_card.h" #include "game/server_cardzone.h" #include "game/server_game.h" +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/serverinfo_zone.pb.h" #include "server_response_containers.h" #include "server_room.h" #include "server_test_helpers.h" +#include +#include #include #include #include #include #include +#include RNG_Abstract *rng = nullptr; // this needs to be defined due to other functions in server diff --git a/tests/oracle/CMakeLists.txt b/tests/oracle/CMakeLists.txt index 9bc5ee5be..bbd0f932a 100644 --- a/tests/oracle/CMakeLists.txt +++ b/tests/oracle/CMakeLists.txt @@ -1,33 +1,26 @@ -add_executable(parse_cipt_test ../../oracle/src/parsehelpers.cpp parse_cipt_test.cpp) - -if(NOT GTEST_FOUND) - add_dependencies(parse_cipt_test gtest) -endif() - -target_link_libraries(parse_cipt_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}) - -add_test(NAME parse_cipt_test COMMAND parse_cipt_test) +cockatrice_add_test(NAME parse_cipt_test SOURCES ../../oracle/src/parsehelpers.cpp parse_cipt_test.cpp) # Oracle importer unit tests -add_executable( - oracle_importer_test ${VERSION_STRING_CPP} ../../oracle/src/oracleimporter.cpp ../../oracle/src/parsehelpers.cpp - ../../oracle/src/raw_json_scanner.cpp oracle_importer_test.cpp +cockatrice_add_test( + NAME + oracle_importer_test + SOURCES + ${VERSION_STRING_CPP} + ../../oracle/src/oracleimporter.cpp + ../../oracle/src/parsehelpers.cpp + ../../oracle/src/raw_json_scanner.cpp + oracle_importer_test.cpp + LIBS + libcockatrice_card + libcockatrice_interfaces ) -if(NOT GTEST_FOUND) - add_dependencies(oracle_importer_test gtest) -endif() - -target_link_libraries( - oracle_importer_test libcockatrice_card libcockatrice_interfaces Threads::Threads ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} -) - -add_test(NAME oracle_importer_test COMMAND oracle_importer_test) - # Oracle importer benchmark tests (manual, not run in CI, incl. RAM benchmark) # Optional compression libs, mirrored from oracle/CMakeLists.txt, so the benchmark # can download and decompress whatever AllPrintings format the default URL selects. +# add_definitions() is directory-scoped and order-independent, so HAS_ZLIB/HAS_LZMA also +# reach the two unit tests above. That is harmless: those macros gate code only in +# oracle/src/pages.cpp and oracle/src/pagetemplates.cpp, which no test target compiles. find_package(ZLIB) if(ZLIB_FOUND) add_definitions("-DHAS_ZLIB") @@ -48,22 +41,20 @@ else() message(STATUS "Oracle tests: LibLZMA not found; xz download benchmark disabled") endif() -add_executable( - oracle_importer_benchmark_test - ${VERSION_STRING_CPP} ../../oracle/src/oracleimporter.cpp ../../oracle/src/parsehelpers.cpp - ../../oracle/src/raw_json_scanner.cpp oracle_importer_benchmark_test.cpp ${_ORACLE_BENCH_EXTRA_SOURCES} -) - -if(NOT GTEST_FOUND) - add_dependencies(oracle_importer_benchmark_test gtest) -endif() - -target_link_libraries( +cockatrice_add_manual_test( + NAME oracle_importer_benchmark_test + SOURCES + ${VERSION_STRING_CPP} + ../../oracle/src/oracleimporter.cpp + ../../oracle/src/parsehelpers.cpp + ../../oracle/src/raw_json_scanner.cpp + oracle_importer_benchmark_test.cpp + ${_ORACLE_BENCH_EXTRA_SOURCES} + LIBS libcockatrice_card libcockatrice_interfaces - Threads::Threads - ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} + EXTRA_LIBS ${_ORACLE_BENCH_EXTRA_LIBRARIES} + MANUAL ) diff --git a/tests/oracle/oracle_importer_benchmark_test.cpp b/tests/oracle/oracle_importer_benchmark_test.cpp index 633c9e40a..c2a4aaf4b 100644 --- a/tests/oracle/oracle_importer_benchmark_test.cpp +++ b/tests/oracle/oracle_importer_benchmark_test.cpp @@ -1,21 +1,37 @@ #include "../../oracle/src/oracleimporter.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/set/card_set.h" #include "gtest/gtest.h" #include +#include +#include #include #include #include #include #include +#include #include #include #include +#include +#include +#include #include #include #include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include #if defined(HAS_LZMA) #include "../../oracle/src/lzma/decompress.h" @@ -46,12 +62,10 @@ static QByteArray buildSyntheticData(int numSets, int cardsPerSet) card["colors"] = QJsonArray{"W"}; card["colorIdentity"] = QJsonArray{"W"}; card["types"] = QJsonArray{"Creature"}; - // Real MTGJSON types: floats and booleans, not strings. This + // Real MTGJSON types: floats, not strings. This // exercises the QVariant coercion in the property reader. card["convertedManaCost"] = 1.0; card["manaValue"] = 1.0; - card["isOnlineOnly"] = false; - card["isRebalanced"] = false; QJsonObject legalities; legalities["standard"] = "legal"; diff --git a/tests/oracle/oracle_importer_test.cpp b/tests/oracle/oracle_importer_test.cpp index f66616e37..83d77d465 100644 --- a/tests/oracle/oracle_importer_test.cpp +++ b/tests/oracle/oracle_importer_test.cpp @@ -1,15 +1,34 @@ #include "../../oracle/src/oracleimporter.h" +#include "../../oracle/src/raw_json_scanner.h" +#include "libcockatrice/card/card_info.h" #include "gtest/gtest.h" +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include class OracleImporterTest : public ::testing::Test { diff --git a/tests/oracle/parse_cipt_test.cpp b/tests/oracle/parse_cipt_test.cpp index f5036f962..10268d659 100644 --- a/tests/oracle/parse_cipt_test.cpp +++ b/tests/oracle/parse_cipt_test.cpp @@ -1,6 +1,7 @@ #include "../../oracle/src/parsehelpers.h" #include "gtest/gtest.h" +#include TEST(ParseCiptTest, parsesThisEntersTapped) { diff --git a/tests/password_hash_test.cpp b/tests/password_hash_test.cpp index 2b8f8bdb7..2a504b81c 100644 --- a/tests/password_hash_test.cpp +++ b/tests/password_hash_test.cpp @@ -1,6 +1,9 @@ #include "gtest/gtest.h" +#include +#include #include #include +#include namespace { diff --git a/tests/picture_loader_benchmark/CMakeLists.txt b/tests/picture_loader_benchmark/CMakeLists.txt index a3b75fe88..0684f58f4 100644 --- a/tests/picture_loader_benchmark/CMakeLists.txt +++ b/tests/picture_loader_benchmark/CMakeLists.txt @@ -1,8 +1,10 @@ -# Manual benchmark hitting the real card image hosts. Not registered with -# add_test(): it requires a cards.xml, touches the network for minutes at a -# time, and needs network access. Build it explicitly and run by hand. -add_executable( +# Manual benchmark hitting the real card image hosts. Not registered with CTest: it requires a +# cards.xml, touches the network for minutes at a time, and needs network access. Build it +# explicitly and run by hand. +cockatrice_add_manual_test( + NAME picture_loader_benchmark_test + SOURCES ${VERSION_STRING_CPP} ../../cockatrice/src/interface/card_picture_loader/card_picture_loader_local.cpp ../../cockatrice/src/interface/card_picture_loader/card_picture_to_load.cpp @@ -11,16 +13,12 @@ add_executable( ../../cockatrice/src/client/settings/cache_settings.h picture_loader_benchmark.cpp settings_cache_mock.cpp -) - -target_include_directories(picture_loader_benchmark_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src) - -target_link_libraries( - picture_loader_benchmark_test + LIBS libcockatrice_card libcockatrice_settings libcockatrice_interfaces libcockatrice_utility - Threads::Threads - ${TEST_QT_MODULES} + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src + MANUAL ) diff --git a/tests/picture_loader_benchmark/picture_loader_benchmark.cpp b/tests/picture_loader_benchmark/picture_loader_benchmark.cpp index f991f2ec0..587cef65f 100644 --- a/tests/picture_loader_benchmark/picture_loader_benchmark.cpp +++ b/tests/picture_loader_benchmark/picture_loader_benchmark.cpp @@ -25,22 +25,34 @@ #include "client/settings/cache_settings.h" #include "interface/card_picture_loader/card_picture_loader_worker.h" #include "interface/card_picture_loader/card_picture_to_load.h" +#include "libcockatrice/card/card_info.h" +#include "libcockatrice/card/database/card_database_loader.h" +#include #include #include #include #include #include +#include #include +#include #include #include #include #include +#include +#include +#include +#include +#include +#include #include #include #include #include -#include +#include +#include #include #include #include @@ -51,6 +63,8 @@ #include #include #include +#include +#include class BenchmarkCardDatabasePathProvider : public ICardDatabasePathProvider { diff --git a/tests/picture_loader_benchmark/settings_cache_mock.cpp b/tests/picture_loader_benchmark/settings_cache_mock.cpp index d93c7e002..13e831b62 100644 --- a/tests/picture_loader_benchmark/settings_cache_mock.cpp +++ b/tests/picture_loader_benchmark/settings_cache_mock.cpp @@ -17,15 +17,21 @@ #include "client/settings/cache_settings.h" #include "interface/card_picture_loader/card_picture_loader_cache_method.h" +#include #include #include +#include +#include #include +#include #include +#include +#include #include #include #include #include -#include +#include QString SettingsCache::getDataPath() { diff --git a/tests/playmat_resolver_test.cpp b/tests/playmat_resolver_test.cpp index a931c0647..6730ec137 100644 --- a/tests/playmat_resolver_test.cpp +++ b/tests/playmat_resolver_test.cpp @@ -1,6 +1,15 @@ +#include "libcockatrice/interfaces/interface_interface_settings_provider.h" +#include "libcockatrice/utility/card_ref.h" +#include "libcockatrice/utility/playmat_params.h" + +#include +#include +#include +#include #include #include #include +#include namespace { diff --git a/tests/report_categories_test.cpp b/tests/report_categories_test.cpp index 790b2cff6..1e08938db 100644 --- a/tests/report_categories_test.cpp +++ b/tests/report_categories_test.cpp @@ -3,6 +3,7 @@ #include #include #include +#include TEST(ReportCategoriesTest, CanonicalListIsNonEmptyAndStable) { diff --git a/tests/server_card_counter_test.cpp b/tests/server_card_counter_test.cpp index c8bc43f8f..6308d80b9 100644 --- a/tests/server_card_counter_test.cpp +++ b/tests/server_card_counter_test.cpp @@ -3,12 +3,14 @@ * @ingroup Tests */ +#include +#include #include #include #include #include #include -#include +#include TEST(ServerCardCounter, IncrementNewCounter) { diff --git a/tests/server_counter_test.cpp b/tests/server_counter_test.cpp index 0f41f2cbd..492aecf66 100644 --- a/tests/server_counter_test.cpp +++ b/tests/server_counter_test.cpp @@ -3,9 +3,13 @@ * @ingroup Tests */ +#include "libcockatrice/protocol/pb/color.pb.h" + +#include #include #include #include +#include TEST(ServerCounter, IncrementDoesNotOverflow) { diff --git a/tests/server_developer_role_test.cpp b/tests/server_developer_role_test.cpp index 127f606a8..c77fc5b21 100644 --- a/tests/server_developer_role_test.cpp +++ b/tests/server_developer_role_test.cpp @@ -3,6 +3,10 @@ * @ingroup Tests */ +#include "libcockatrice/protocol/pb/response.pb.h" +#include "libcockatrice/protocol/pb/server_message.pb.h" + +#include #include #include #include @@ -11,6 +15,8 @@ #include #include #include +#include +#include // The server_remote library references the global RNG, which is normally // defined by the servatrice/client executable main(). Provide a stub so the diff --git a/tests/server_game_join_test.cpp b/tests/server_game_join_test.cpp index c84e4e066..8a2ae8c45 100644 --- a/tests/server_game_join_test.cpp +++ b/tests/server_game_join_test.cpp @@ -3,14 +3,19 @@ * @ingroup Tests */ +#include "game/game_config.h" #include "game/server_game.h" +#include "libcockatrice/protocol/pb/response.pb.h" #include "server.h" #include "server_database_interface.h" #include "server_room.h" +#include +#include #include #include #include +#include RNG_Abstract *rng = nullptr; // referenced by the server_remote library diff --git a/tests/server_rate_limiter_test.cpp b/tests/server_rate_limiter_test.cpp index bc15ca421..8459c9690 100644 --- a/tests/server_rate_limiter_test.cpp +++ b/tests/server_rate_limiter_test.cpp @@ -1,7 +1,11 @@ #include "gtest/gtest.h" #include +#include #include +#include +#include #include +#include namespace { diff --git a/tests/settings/CMakeLists.txt b/tests/settings/CMakeLists.txt index 7ee32a645..98bed1f4b 100644 --- a/tests/settings/CMakeLists.txt +++ b/tests/settings/CMakeLists.txt @@ -1,26 +1,14 @@ -add_executable(settings_manager_test settings_manager_test.cpp) -add_executable(settings_defaults_test settings_defaults_test.cpp) -add_executable(settings_migration_test settings_migration_test.cpp) +cockatrice_add_test(NAME settings_manager_test SOURCES settings_manager_test.cpp LIBS libcockatrice_settings) -target_link_libraries( - settings_manager_test libcockatrice_settings Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} +cockatrice_add_test( + NAME + settings_defaults_test + SOURCES + settings_defaults_test.cpp + LIBS + libcockatrice_settings + DEFINITIONS + SETTINGS_UNIT_TEST ) -target_link_libraries( - settings_defaults_test libcockatrice_settings Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) -target_compile_definitions(settings_defaults_test PRIVATE SETTINGS_UNIT_TEST) - -target_link_libraries( - settings_migration_test libcockatrice_settings Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES} -) - -add_test(NAME settings_manager_test COMMAND settings_manager_test) -add_test(NAME settings_defaults_test COMMAND settings_defaults_test) -add_test(NAME settings_migration_test COMMAND settings_migration_test) - -if(NOT GTEST_FOUND) - add_dependencies(settings_manager_test gtest) - add_dependencies(settings_defaults_test gtest) - add_dependencies(settings_migration_test gtest) -endif() +cockatrice_add_test(NAME settings_migration_test SOURCES settings_migration_test.cpp LIBS libcockatrice_settings) diff --git a/tests/settings/settings_defaults_test.cpp b/tests/settings/settings_defaults_test.cpp index 379f6cd84..65e41af76 100644 --- a/tests/settings/settings_defaults_test.cpp +++ b/tests/settings/settings_defaults_test.cpp @@ -1,5 +1,10 @@ +#include "libcockatrice/card/card_localization.h" + #include "gtest/gtest.h" -#include +#include +#include +#include +#include #include #include #include @@ -15,6 +20,8 @@ #include #include #include +#include +#include namespace { @@ -159,6 +166,12 @@ TEST_F(SettingsDefaultsTest, Updates_NotifyAboutNewVersion_Default) ASSERT_EQ(s.getNotifyAboutNewVersion(), true); } +TEST_F(SettingsDefaultsTest, Updates_CardDatabaseUpdateTrayNotification_Default) +{ + UpdatesSettings s(settingsPath, nullptr); + ASSERT_EQ(s.getCardDatabaseUpdateTrayNotification(), true); +} + TEST_F(SettingsDefaultsTest, Updates_UpdateReleaseChannelIndex_Default) { UpdatesSettings s(settingsPath, nullptr); diff --git a/tests/settings/settings_manager_test.cpp b/tests/settings/settings_manager_test.cpp index 51eb66dbb..23d27aa78 100644 --- a/tests/settings/settings_manager_test.cpp +++ b/tests/settings/settings_manager_test.cpp @@ -1,7 +1,11 @@ #include "gtest/gtest.h" #include +#include #include +#include +#include #include +#include namespace { diff --git a/tests/settings/settings_migration_test.cpp b/tests/settings/settings_migration_test.cpp index 84b948d2e..440e49b74 100644 --- a/tests/settings/settings_migration_test.cpp +++ b/tests/settings/settings_migration_test.cpp @@ -1,13 +1,24 @@ #include "gtest/gtest.h" +#include +#include +#include #include #include #include #include #include +#include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include namespace { @@ -225,7 +236,6 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups) g.setValue("cards/roundcardcorners", false); g.setValue("cards/overrideallcardartwithpersonalpreference", true); g.setValue("cards/bumpsetswithcardsindecktotop", false); - g.setValue("cards/includerebalancedcards", false); g.setValue("cards/autorotatesidewayslayoutcards", false); g.setValue("cards/tapanimation", true); g.setValue("cards/scaleCards", false); @@ -384,7 +394,6 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups) ASSERT_EQ(readFromIni("cards_display.ini", "cards/roundCardCorners"), QVariant(false)); ASSERT_EQ(readFromIni("cards_display.ini", "cards/overrideAllCardArtWithPersonalPreference"), QVariant(true)); ASSERT_EQ(readFromIni("cards_display.ini", "cards/bumpSetsWithCardsInDeckToTop"), QVariant(false)); - ASSERT_EQ(readFromIni("cards_display.ini", "cards/includerebalancedcards"), QVariant(false)); ASSERT_EQ(readFromIni("cards_display.ini", "cards/autoRotateSidewaysLayoutCards"), QVariant(false)); ASSERT_EQ(readFromIni("cards_display.ini", "cards/tapAnimation"), QVariant(true)); ASSERT_EQ(readFromIni("cards_display.ini", "cards/scaleCards"), QVariant(false)); diff --git a/tests/single_instance_manager_test.cpp b/tests/single_instance_manager_test.cpp index 49193850d..bc8074580 100644 --- a/tests/single_instance_manager_test.cpp +++ b/tests/single_instance_manager_test.cpp @@ -1,12 +1,18 @@ #include "single_instance_manager.h" +#include #include #include #include +#include +#include #include #include +#include #include +#include #include +#include namespace { diff --git a/tests/test_age_formatting.cpp b/tests/test_age_formatting.cpp index 6a9d5d4af..8602ffdc0 100644 --- a/tests/test_age_formatting.cpp +++ b/tests/test_age_formatting.cpp @@ -1,5 +1,8 @@ #include "gtest/gtest.h" +#include +#include #include +#include namespace { diff --git a/tests/theme_migration/CMakeLists.txt b/tests/theme_migration/CMakeLists.txt index ac202210e..93493ee5f 100644 --- a/tests/theme_migration/CMakeLists.txt +++ b/tests/theme_migration/CMakeLists.txt @@ -1,5 +1,7 @@ -add_executable( +cockatrice_add_test( + NAME theme_migration_test + SOURCES ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/theme_manager.cpp ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/theme_config.cpp ${CMAKE_SOURCE_DIR}/cockatrice/src/interface/pixel_map_generator.cpp @@ -9,22 +11,11 @@ add_executable( ${CMAKE_SOURCE_DIR}/cockatrice/src/client/network/update/client/release_channel.cpp ${VERSION_STRING_CPP} theme_migration_test.cpp -) -target_include_directories(theme_migration_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src) - -target_link_libraries( - theme_migration_test + LIBS libcockatrice_settings libcockatrice_network libcockatrice_network_server_remote libcockatrice_protocol - Threads::Threads - ${GTEST_BOTH_LIBRARIES} - ${TEST_QT_MODULES} + INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/cockatrice/src ) - -add_test(NAME theme_migration_test COMMAND theme_migration_test) - -if(NOT GTEST_FOUND) - add_dependencies(theme_migration_test gtest) -endif() diff --git a/tests/theme_migration/theme_migration_test.cpp b/tests/theme_migration/theme_migration_test.cpp index 147833630..d77c2f62d 100644 --- a/tests/theme_migration/theme_migration_test.cpp +++ b/tests/theme_migration/theme_migration_test.cpp @@ -1,11 +1,15 @@ #include "interface/theme_manager.h" +#include #include #include #include +#include #include +#include #include #include +#include // Owned by main.cpp in the real application; pixel_map_generator.cpp references // it, so the test binary needs a definition even though it never renders. diff --git a/tests/translation_loader_test.cpp b/tests/translation_loader_test.cpp index d54001ad3..745cd04bc 100644 --- a/tests/translation_loader_test.cpp +++ b/tests/translation_loader_test.cpp @@ -1,12 +1,17 @@ #include "gtest/gtest.h" +#include #include #include #include +#include #include #include +#include +#include #include #include #include +#include // The directory holding translation_loader_test_de.qm, compiled from translation_loader_test.ts by the // build. QTranslator rejects anything that is not a real .qm file, so a stub cannot stand in here. diff --git a/tests/warning_categories_test.cpp b/tests/warning_categories_test.cpp index 432885dd9..549c373b5 100644 --- a/tests/warning_categories_test.cpp +++ b/tests/warning_categories_test.cpp @@ -1,6 +1,8 @@ #include "gtest/gtest.h" +#include #include #include +#include TEST(WarningCategoriesTest, EmptyValueYieldsNoCategories) { diff --git a/tools/generate_qt_mappings.py b/tools/generate_qt_mappings.py new file mode 100755 index 000000000..42836b6da --- /dev/null +++ b/tools/generate_qt_mappings.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python3 +"""Generate an include-what-you-use mapping file for Qt 6 headers. + +Qt 6 ships a capital forwarding header (e.g. ) for each lowercase +private header (e.g. qwidget.h). include-what-you-use resolves symbols to the +lowercase header by default, so this script emits a mapping that makes IWYU +prefer the canonical capital includes, mirroring the qt5_11.imp bundled with +IWYU but adapted to the Qt 6 module layout. + +For every capital header that forwards to exactly one lowercase header: + +* a "symbol" mapping is emitted so IWYU suggests when the definition + of a class is needed, and +* an "include" mapping is emitted so a literal `#include ` in source + is rewritten to its canonical capital header. + +A lowercase header can be forwarded to by several capital headers (e.g. +qevent.h provides QCloseEvent, QMouseEvent, ...). In that case the include +mapping targets the primary class, i.e. the capital header whose lowercased +name equals the private header (QWidget for qwidget.h); headers with no such +primary (aggregates like qevent.h) get no include mapping and are left alone. + +Usage: + tools/generate_qt_mappings.py [QT_INSTALL_HEADERS] + +QT_INSTALL_HEADERS defaults to `qmake6 -query QT_INSTALL_HEADERS` (falling back +to common locations). The mapping is written to stdout. +""" + +import argparse +import os +import re +import subprocess +import sys + +INCLUDE_RE = re.compile(r'^\s*#include\s*<\s*Qt[A-Za-z0-9_]+/+\s*([^>\s]+)>') +CAPITAL_NAME_RE = re.compile(r'^Q[A-Za-z0-9_]+$') +PRIVATE_NAME_RE = re.compile(r'^q[a-z0-9_]+\.h$') + +# Private Qt headers whose public spelling has to be named explicitly. Keep an +# entry here only if the target header exists in every Qt we support; IWYU would +# otherwise keep suggesting the private lowercase include, which is correct only +# for headers that have shipped publicly since Qt 5. +PORTABLE_WRAPPERS = { + # Qt 6.5 split the declarations that used to live in qglobal.h out into + # separate headers, under both a QtFoo wrapper and a qfoo.h private name. + # Neither spelling exists on the oldest Qt we support (6.4.2), and qtypes.h + # itself only appeared in Qt 6.9, so all of them are hard compile errors + # there. QtGlobal has been public since Qt 5, defines these declarations + # itself up to Qt 6.4, and includes the split headers from Qt 6.5 on, so it + # is the one spelling that resolves across the whole supported range. + 'qtypes.h': 'QtGlobal', + 'qtpreprocessorsupport.h': 'QtGlobal', + 'qtversionchecks.h': 'QtGlobal', + 'qassert.h': 'QtGlobal', + 'qminmax.h': 'QtGlobal', + 'qtclasshelpermacros.h': 'QtGlobal', + 'qtenvironmentvariables.h': 'QtGlobal', + 'qttranslation.h': 'QtGlobal', + 'qoverload.h': 'QtGlobal', +} + + +def run_or_empty(cmd): + try: + return subprocess.run(cmd, capture_output=True, text=True, + check=True).stdout.strip() + except (OSError, subprocess.CalledProcessError): + return '' + + +def default_qt_headers_dir(): + for cmd in (['qmake6', '-query', 'QT_INSTALL_HEADERS'], + ['qmake', '-query', 'QT_INSTALL_HEADERS']): + path = run_or_empty(cmd) + if path: + return path + for path in ('/usr/include/qt6', '/usr/lib64/qt6/include', + '/usr/local/include/qt6'): + if os.path.isdir(path): + return path + return '' + + +def collect_mappings(qt_headers_dir): + forwarders = {} # (module_dir, private) -> [capital names] + symbols = {} # capital name -> (module_dir, private) + for entry in sorted(os.listdir(qt_headers_dir)): + module_dir = os.path.join(qt_headers_dir, entry) + if not entry.startswith('Qt') or not os.path.isdir(module_dir): + continue + for name in sorted(os.listdir(module_dir)): + path = os.path.join(module_dir, name) + if not os.path.isfile(path) or not CAPITAL_NAME_RE.match(name): + continue + forwarded = [] + with open(path, 'r', encoding='utf-8', errors='replace') as f: + for line in f: + match = INCLUDE_RE.match(line) + if match: + forwarded.append(match.group(1)) + if len(forwarded) > 1: + break + if len(forwarded) != 1: + continue + private = forwarded[0] + if not PRIVATE_NAME_RE.match(private): + continue + forwarders.setdefault((module_dir, private), []).append(name) + symbols[name] = (module_dir, private) + return forwarders, symbols + + +def primary_include_mappings(forwarders): + mappings = {} + for (module_dir, private), names in sorted(forwarders.items()): + # Curated overrides win over the name rule below. They exist to redirect + # an include to a header that is valid across our whole supported Qt + # range, which the name rule cannot know about because it is generated + # from whatever Qt happens to be installed. + curated = PORTABLE_WRAPPERS.get(private) + if curated is not None: + mappings[(module_dir, private)] = curated + continue + # Prefer the forwarder whose name mirrors the private header + # (QAbstractAnimation -> qabstractanimation.h). + primary = next((n for n in names if n.lower() + '.h' == private), None) + if primary is not None: + mappings[(module_dir, private)] = primary + return mappings + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('qt_headers_dir', nargs='?', default=None, + help='Qt 6 headers dir (default: qmake query)') + args = parser.parse_args() + + qt_headers_dir = args.qt_headers_dir or default_qt_headers_dir() + if not qt_headers_dir or not os.path.isdir(qt_headers_dir): + sys.stderr.write('error: could not locate Qt headers, pass the include ' + 'dir\n') + return 1 + + forwarders, symbols = collect_mappings(qt_headers_dir) + includes = primary_include_mappings(forwarders) + + # A curated key that matches nothing is almost always a typo, and it fails + # silently: the entry just falls back to the name rule and emits the + # version-incompatible wrapper the override was meant to prevent. + known_private = {private for (_module_dir, private) in forwarders} + unknown = sorted(set(PORTABLE_WRAPPERS) - known_private) + if unknown: + sys.stderr.write('error: PORTABLE_WRAPPERS keys not found in the Qt ' + 'headers: %s\n' % ', '.join(unknown)) + return 1 + + entries = [] + # Headers we redirect in PORTABLE_WRAPPERS do not exist on the oldest + # supported Qt, so do not advertise them as the home of a symbol either. + redirected = {name + for (module_dir, private), names in forwarders.items() + if private in PORTABLE_WRAPPERS + for name in names} + for name in sorted(symbols): + if name in redirected: + continue + entries.append( + f' {{ "symbol": [ "{name}", "private", "<{name}>", "public"] }},') + + # Free operators of QSharedPointer/QWeakPointer live in qsharedpointer.h. + # IWYU does not apply "include" mappings when *adding* an include for an + # operator or other non-class symbol, so map them to the canonical capital + # header explicitly. A use is only reported when the operator is not + # already covered by an included header, so this does not mis-attribute + # comparison operators of other types (which are provided by their own + # type headers). + for name in ('operator==', 'operator!=', 'operator<', 'operator<=', + 'operator>', 'operator>=', 'comparesEqual'): + entries.append( + f' {{ "symbol": [ "{name}", "private", "", "public"] }},') + for (module_dir, private), public in sorted(includes.items()): + module = os.path.basename(module_dir) + # IWYU's .imp tokenizer treats the value as a JSON-ish string: + # '\"' becomes a quote and '\\' becomes a backslash for the regex. + quoted = '\\"' # \" -- a JSON-escaped double quote in the .imp file + dotted = re.escape(private).replace('\\', '\\\\') + pattern = ('@[' + quoted + '<](' + re.escape(module) + r'/)?' + + dotted + '[' + quoted + '>]') + entries.append( + f' {{ "include": [ "{pattern}", "private", "<{public}>", "public"] }},') + + if not entries: + sys.stderr.write('error: no Qt header mappings found\n') + return 1 + + print(f'# Do not edit! Generated by {os.path.basename(__file__)} from') + print(f'# {qt_headers_dir}') + print('[') + for entry in entries[:-1]: + print(entry) + print(entries[-1].rstrip(',')) + print(']') + return 0 + + +if __name__ == '__main__': + sys.exit(main())