mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-07 18:43:26 -08:00
Compare commits
23 commits
976a4a9a7e
...
72aa830e7c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72aa830e7c | ||
|
|
3f9d6d7087 | ||
|
|
e8739e175e | ||
|
|
b9063a7b86 | ||
|
|
3a36b5eea4 | ||
|
|
efc7e7a079 | ||
|
|
be2c16eca5 | ||
|
|
b8e8f2c738 | ||
|
|
1e1f79db0d | ||
|
|
bb61617d42 | ||
|
|
a44757bd11 | ||
|
|
6bed5d6f67 | ||
|
|
205e1ecebf | ||
|
|
aaafa72c0e | ||
|
|
56c456414b | ||
|
|
95f02ac0a1 | ||
|
|
d0fc27e3a8 | ||
|
|
514014dc00 | ||
|
|
870ab23608 | ||
|
|
d603a2bb6a | ||
|
|
b1f4d1e99d | ||
|
|
d0991b68f6 | ||
|
|
08a608992d |
1119 changed files with 14062 additions and 2884 deletions
|
|
@ -306,7 +306,11 @@ fi
|
||||||
|
|
||||||
if [[ $MAKE_TEST ]]; then
|
if [[ $MAKE_TEST ]]; then
|
||||||
echo "::group::Run tests"
|
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::"
|
echo "::endgroup::"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -353,15 +357,21 @@ if [[ $MAKE_PACKAGE ]]; then
|
||||||
fi
|
fi
|
||||||
echo "Installer content is clean"
|
echo "Installer content is clean"
|
||||||
|
|
||||||
# Fail the build if the installer is missing a Qt runtime the applications
|
# Fail the build if the installer does not carry the runtime the
|
||||||
# link against. The DLLs reach the package by globbing every *.dll out of
|
# applications link against - a file that must be there, or a DLL that must
|
||||||
# the build output directories, so a module the client links statically
|
# not be. The runtime DLLs reach the package by globbing every *.dll out of
|
||||||
# (Qt6Multimedia.dll, Qt6QuickWidgets.dll) can be left out without anything
|
# the build output directories, so anything that build produced can ride
|
||||||
# else noticing, and the only symptom is a client that refuses to start
|
# along and nothing else in the build objects to it: a Qt module the client
|
||||||
# after an update. required-qt-runtime.txt is written by the top level
|
# links statically (Qt6Multimedia.dll, Qt6QuickWidgets.dll) can be left out,
|
||||||
# CMakeLists.txt from the same module list the targets are built against.
|
# and the test framework's gtest.dll can be shipped. Either only surfaces on
|
||||||
if [[ ! -f required-qt-runtime.txt ]]; then
|
# a user's machine after an update has already replaced their install, as
|
||||||
echo "::error file=$0::required-qt-runtime.txt not found in the build dir, cannot verify the Qt runtime"
|
# "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
|
exit 1
|
||||||
fi
|
fi
|
||||||
# 7-Zip writes CRLF on Windows, so the \r has to come off before any
|
# 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 -
|
# being a wildcard; -i because that is how the installed tree behaves -
|
||||||
# the uninstaller clears both $INSTDIR\plugins and $INSTDIR\Plugins.
|
# the uninstaller clears both $INSTDIR\plugins and $INSTDIR\Plugins.
|
||||||
# The archive side and the manifest side have to agree on line endings.
|
# 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
|
# 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
|
# defeats the whole-line match - every entry then reads as missing even
|
||||||
# though the listing holds it verbatim.
|
# though the listing holds it verbatim.
|
||||||
|
|
@ -380,7 +390,7 @@ if [[ $MAKE_PACKAGE ]]; then
|
||||||
installer_paths="$("$seven_zip" l -slt "$package" | tr -d '\r' |
|
installer_paths="$("$seven_zip" l -slt "$package" | tr -d '\r' |
|
||||||
sed -n 's/^Path = //p' |
|
sed -n 's/^Path = //p' |
|
||||||
sed -e 's|\\|/|g' -e 's|^[$]INSTDIR/||' -e 's|^[$]OUTDIR/||' -e 's|^[$]PLUGINSDIR/||' -e 's|^\./||' -e 's|^/||')"
|
sed -e 's|\\|/|g' -e 's|^[$]INSTDIR/||' -e 's|^[$]OUTDIR/||' -e 's|^[$]PLUGINSDIR/||' -e 's|^\./||' -e 's|^/||')"
|
||||||
manifest="$(tr -d '\r' <required-qt-runtime.txt)"
|
manifest="$(tr -d '\r' <required-runtime.txt)"
|
||||||
missing=""
|
missing=""
|
||||||
checked=0
|
checked=0
|
||||||
while IFS= read -r entry; do
|
while IFS= read -r entry; do
|
||||||
|
|
@ -393,11 +403,11 @@ if [[ $MAKE_PACKAGE ]]; then
|
||||||
fi
|
fi
|
||||||
done <<<"$manifest"
|
done <<<"$manifest"
|
||||||
if [[ -n $missing ]]; then
|
if [[ -n $missing ]]; then
|
||||||
echo "::error file=$0::Installer is missing required Qt runtime files:$missing"
|
echo "::error file=$0::Installer is missing required runtime files:$missing"
|
||||||
# Print both sides of the comparison. A mismatch here has twice been
|
# Print both sides of the comparison. A mismatch here has twice been
|
||||||
# caused by the shape of 7-Zip's output rather than by a missing file,
|
# caused by the shape of 7-Zip's output rather than by a missing file,
|
||||||
# and a bare "missing" line cannot tell those apart.
|
# and a bare "missing" line cannot tell those apart.
|
||||||
echo "required-qt-runtime.txt asked for $checked path(s); 7-Zip listed $(grep -c '' <<<"$installer_paths") path(s)"
|
echo "required-runtime.txt asked for $checked path(s); 7-Zip listed $(grep -c '' <<<"$installer_paths") path(s)"
|
||||||
# Indent with parameter expansion rather than sed 's/^/ /', which the
|
# Indent with parameter expansion rather than sed 's/^/ /', which the
|
||||||
# linter reports as SC2001.
|
# linter reports as SC2001.
|
||||||
echo "--- required ---"
|
echo "--- required ---"
|
||||||
|
|
@ -407,7 +417,66 @@ if [[ $MAKE_PACKAGE ]]; then
|
||||||
echo "${listed_head//$'\n'/$'\n '}"
|
echo "${listed_head//$'\n'/$'\n '}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "Installer contains the full Qt runtime ($checked files)"
|
echo "Installer carries the Qt runtime of every module the three applications link ($checked files)"
|
||||||
|
|
||||||
|
# Now the other direction: a top level DLL in the package that the manifest
|
||||||
|
# does not name. The missing check above cannot see a runtime that was
|
||||||
|
# never expected.
|
||||||
|
#
|
||||||
|
# Two things are reported here and neither may fail the build.
|
||||||
|
#
|
||||||
|
# The test framework is a fact rather than a guess - no shipped executable
|
||||||
|
# links gtest or gmock, and the build output directories the "*.dll" glob
|
||||||
|
# reads are shared with the test targets, so gtest.dll and gmock.dll are
|
||||||
|
# one filter away from shipping in every release. Even so it is reported
|
||||||
|
# instead of enforced: a check that has never passed on a real package has
|
||||||
|
# not earned the right to block a release, and the first Windows run of an
|
||||||
|
# enforcing version is exactly when its own wrong assumptions show up.
|
||||||
|
#
|
||||||
|
# Everything else is expected to be there. required-runtime.txt names the
|
||||||
|
# Qt modules the three applications link, and the protobuf, Abseil,
|
||||||
|
# OpenSSL, liblzma, ffmpeg and Qt debug DLLs in the package come in on the
|
||||||
|
# build output glob instead, because nothing in the build declares them by
|
||||||
|
# name. So this list is a report of what the package carries, not a verdict.
|
||||||
|
# Read it when a dependency is added; do not fail on it.
|
||||||
|
forbidden=""
|
||||||
|
unexpected=""
|
||||||
|
while IFS= read -r entry; do
|
||||||
|
[[ -z $entry ]] && continue
|
||||||
|
# Top level only. A DLL under Plugins/ or a nested image format plugin is
|
||||||
|
# a plugin the platform loads by name, not a runtime the executable
|
||||||
|
# imports, and requiring one here would list all of them every run.
|
||||||
|
[[ $entry == */* ]] && continue
|
||||||
|
if grep -qxiF "$entry" <<<"$manifest"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# NSIS extracts its plugins to $PLUGINSDIR, which the path normalization
|
||||||
|
# above strips, so they arrive here looking like payload files. They are
|
||||||
|
# part of the installer, not of the installed tree.
|
||||||
|
if [[ $entry == [Nn][Ss][Dd][Ii][Aa][Ll][Oo][Gg][Ss].dll ||
|
||||||
|
$entry == [Nn][Ss][Ee][Xx][Ee][Cc].dll ||
|
||||||
|
$entry == [Ss][Yy][Ss][Tt][Ee][Mm].dll ||
|
||||||
|
$entry == [Uu][Ss][Ee][Rr][Ii][Nn][Ff][Oo].dll ||
|
||||||
|
$entry == [Ii][Nn][Ee][Tt].dll ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ $entry == [Gg][Tt][Ee][Ss][Tt]* || $entry == [Gg][Mm][Oo][Cc][Kk]* ]]; then
|
||||||
|
forbidden+=" $entry"
|
||||||
|
else
|
||||||
|
unexpected+=" $entry"
|
||||||
|
fi
|
||||||
|
done < <(grep -i '\.dll$' <<<"$installer_paths")
|
||||||
|
if [[ -n $forbidden ]]; then
|
||||||
|
echo "::warning file=$0::Installer contains test framework DLLs that no shipped executable links:$forbidden"
|
||||||
|
echo "A build output directory shared with the test targets has leaked into the package."
|
||||||
|
fi
|
||||||
|
if [[ -n $unexpected ]]; then
|
||||||
|
echo "Top level DLLs in the package beyond the linked Qt modules:$unexpected"
|
||||||
|
echo "These arrive on the build output glob, not from required-runtime.txt, so they are reported and not required."
|
||||||
|
fi
|
||||||
|
if [[ -z $forbidden && -z $unexpected ]]; then
|
||||||
|
echo "Installer carries no runtime files beyond the linked Qt modules"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
echo "::endgroup::"
|
echo "::endgroup::"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ endif()
|
||||||
|
|
||||||
# A project name is needed for CPack
|
# A project name is needed for CPack
|
||||||
# Version can be overriden by git tags, see cmake/getversion.cmake
|
# Version can be overriden by git tags, see cmake/getversion.cmake
|
||||||
project("Cockatrice" VERSION 3.1.0)
|
project("Cockatrice" VERSION 3.1.1)
|
||||||
|
|
||||||
# Set release name if not provided via env/cmake var
|
# Set release name if not provided via env/cmake var
|
||||||
if(NOT DEFINED GIT_TAG_RELEASENAME)
|
if(NOT DEFINED GIT_TAG_RELEASENAME)
|
||||||
|
|
@ -326,38 +326,54 @@ elseif(WIN32)
|
||||||
# Configure file with custom definitions for NSIS.
|
# Configure file with custom definitions for NSIS.
|
||||||
configure_file("${COCKATRICE_CMAKE_PATH}/NSIS.definitions.nsh.in" "${PROJECT_BINARY_DIR}/NSIS.definitions.nsh")
|
configure_file("${COCKATRICE_CMAKE_PATH}/NSIS.definitions.nsh.in" "${PROJECT_BINARY_DIR}/NSIS.definitions.nsh")
|
||||||
|
|
||||||
# Every Qt module the client links against, as the DLL names a Windows install
|
# Every runtime DLL a Windows install has to contain, as paths relative to the
|
||||||
# has to contain, plus the platform plugin without which the client cannot
|
# install root. .ci/compile.sh reads this and fails the build when the packaged
|
||||||
# start. .ci/compile.sh reads this and fails the build when the packaged
|
# installer is missing one of them, or carries a runtime it does not know about.
|
||||||
# installer is missing one of them.
|
|
||||||
#
|
#
|
||||||
# Only the client is packaged on Windows, so this is the client's module list
|
# All three applications are packaged into the same directory on Windows, so
|
||||||
# rather than the union across server, client and Oracle: demanding Oracle's or
|
# this is the union of their Qt module lists, not just the client's: Servatrice
|
||||||
# Servatrice's modules of the client installer checks nothing about the client.
|
# contributes Qt6Sql.dll and Oracle contributes nothing the client lacks, and a
|
||||||
|
# client-only manifest leaves Qt6Sql.dll unasserted even though servatrice.exe
|
||||||
|
# is installed next to cockatrice.exe and cannot start without it.
|
||||||
#
|
#
|
||||||
# A statically linked Qt module ships no runtime DLL, so requiring one would
|
# A statically linked Qt module ships no runtime DLL, so requiring one would
|
||||||
# fail the package check on a static build for no reason. cockatrice/CMakeLists.txt
|
# fail the package check on a static build for no reason. cockatrice/CMakeLists.txt
|
||||||
# installs the runtime of every module listed here, and skips static ones the
|
# installs the runtime of every module listed here, and skips static ones the
|
||||||
# same way, so the two can never disagree.
|
# same way, so the two can never disagree.
|
||||||
#
|
#
|
||||||
# A DLL missing from the package only surfaces on a user's machine, after an
|
# Only the Qt modules, and that is deliberate. protobuf, Abseil, liblzma, zlib
|
||||||
# update has already replaced their install, as "The code execution cannot
|
# and OpenSSL also ride in on the "*.dll" glob, and a client whose runtime is
|
||||||
# proceed because Qt6Multimedia.dll was not found" or as a missing procedure
|
# absent, stale or of the wrong architecture fails to start with "abseil_dll.dll
|
||||||
# entry point in a Qt6QuickWidgets.dll left over from the previous version.
|
# is either not designed to run on Windows or it contains an error", so they
|
||||||
# Assert it while the installer is still being built instead.
|
# are exactly the files worth asserting.
|
||||||
set(_required_qt_runtime "")
|
#
|
||||||
foreach(_qt_module IN LISTS COCKATRICE_QT_MODULES)
|
# Their names cannot be derived from the vcpkg bin directory, which is what a
|
||||||
|
# first attempt did and what a Windows build immediately refuted: bin holds
|
||||||
|
# everything vcpkg installed, not everything the applications import. It also
|
||||||
|
# contains gmock.dll, libprotobuf-lite.dll, libprotoc.dll, legacy.dll and three
|
||||||
|
# pthreadVC*.dll FindThreads probes, none of which any shipped executable
|
||||||
|
# links, so requiring them failed a build over a package that was correct.
|
||||||
|
#
|
||||||
|
# Deriving them from the executables' own import tables is the real answer,
|
||||||
|
# and fixup_bundle already walks it to decide what to copy. Until that result
|
||||||
|
# is available to CMake, requiring the vcpkg half would mean guessing names
|
||||||
|
# again, which is what produced this bug report in the first place. So assert
|
||||||
|
# what is derived from the build's own link lists and leave the rest to the
|
||||||
|
# purge in cmake/NSIS.template.in, which removes every DLL regardless of name.
|
||||||
|
set(_required_runtime "")
|
||||||
|
foreach(_qt_module IN LISTS COCKATRICE_QT_MODULES SERVATRICE_QT_MODULES ORACLE_QT_MODULES)
|
||||||
get_target_property(_qt_module_type ${_qt_module} TYPE)
|
get_target_property(_qt_module_type ${_qt_module} TYPE)
|
||||||
if(_qt_module_type STREQUAL "SHARED_LIBRARY")
|
if(_qt_module_type STREQUAL "SHARED_LIBRARY")
|
||||||
string(REGEX REPLACE "^Qt6::" "" _qt_component "${_qt_module}")
|
string(REGEX REPLACE "^Qt6::" "" _qt_component "${_qt_module}")
|
||||||
list(APPEND _required_qt_runtime "Qt6${_qt_component}.dll")
|
list(APPEND _required_runtime "Qt6${_qt_component}.dll")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
list(APPEND _required_qt_runtime "Plugins/platforms/qwindows.dll")
|
list(APPEND _required_runtime "Plugins/platforms/qwindows.dll")
|
||||||
list(REMOVE_DUPLICATES _required_qt_runtime)
|
|
||||||
list(SORT _required_qt_runtime)
|
list(REMOVE_DUPLICATES _required_runtime)
|
||||||
string(REPLACE ";" "\n" _required_qt_runtime "${_required_qt_runtime}")
|
list(SORT _required_runtime)
|
||||||
file(WRITE "${PROJECT_BINARY_DIR}/required-qt-runtime.txt" "${_required_qt_runtime}\n")
|
string(REPLACE ";" "\n" _required_runtime "${_required_runtime}")
|
||||||
|
file(WRITE "${PROJECT_BINARY_DIR}/required-runtime.txt" "${_required_runtime}\n")
|
||||||
|
|
||||||
# include vcredist into the package; NSIS will take care of running it
|
# include vcredist into the package; NSIS will take care of running it
|
||||||
if(VCREDISTRUNTIME_FOUND)
|
if(VCREDISTRUNTIME_FOUND)
|
||||||
|
|
|
||||||
2
Doxyfile
2
Doxyfile
|
|
@ -2667,7 +2667,7 @@ DOT_NUM_THREADS = 0
|
||||||
# Minimum value: 1, maximum value: 1000, default value: 50.
|
# Minimum value: 1, maximum value: 1000, default value: 50.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
DOT_BATCH_SIZE = 500
|
DOT_BATCH_SIZE = 50
|
||||||
|
|
||||||
# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
|
# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
|
||||||
# subgraphs. When you want a differently looking font in the dot files that
|
# subgraphs. When you want a differently looking font in the dot files that
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,12 @@
|
||||||
# Output: ORACLE_QT_MODULES
|
# Output: ORACLE_QT_MODULES
|
||||||
# Output: TEST_QT_MODULES
|
# Output: TEST_QT_MODULES
|
||||||
|
|
||||||
|
# Every Qt module an application links against, as the DLL names a Windows
|
||||||
|
# install has to contain. Core is listed explicitly rather than left to arrive
|
||||||
|
# transitively: it is the one module nothing can do without, and required-runtime.txt
|
||||||
|
# is built from these lists, so a module missing here is a runtime the package
|
||||||
|
# check never asserts. That is how Qt6Core.dll went unasserted while every other
|
||||||
|
# Qt module was checked.
|
||||||
set(REQUIRED_QT_COMPONENTS Core)
|
set(REQUIRED_QT_COMPONENTS Core)
|
||||||
if(WITH_SERVER)
|
if(WITH_SERVER)
|
||||||
set(_SERVATRICE_NEEDED Network Sql WebSockets)
|
set(_SERVATRICE_NEEDED Network Sql WebSockets)
|
||||||
|
|
@ -14,6 +20,7 @@ endif()
|
||||||
if(WITH_CLIENT)
|
if(WITH_CLIENT)
|
||||||
set(_COCKATRICE_NEEDED
|
set(_COCKATRICE_NEEDED
|
||||||
Concurrent
|
Concurrent
|
||||||
|
Core
|
||||||
Gui
|
Gui
|
||||||
Multimedia
|
Multimedia
|
||||||
Network
|
Network
|
||||||
|
|
@ -33,7 +40,9 @@ endif()
|
||||||
if(TEST)
|
if(TEST)
|
||||||
# Union of Qt modules required across all test targets (independent of application targets).
|
# Union of Qt modules required across all test targets (independent of application targets).
|
||||||
# When adding a new test that needs additional Qt modules, add them here rather than in the test's CMakeLists.txt.
|
# When adding a new test that needs additional Qt modules, add them here rather than in the test's CMakeLists.txt.
|
||||||
set(_TEST_NEEDED Concurrent Network Svg Widgets)
|
# Test is QtTest: it brings QAbstractItemModelTester and QSignalSpy, which are how the Qt model
|
||||||
|
# and signal contracts get verified without standing up a GUI.
|
||||||
|
set(_TEST_NEEDED Concurrent Network Svg Widgets Test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(REQUIRED_QT_COMPONENTS ${REQUIRED_QT_COMPONENTS} ${_SERVATRICE_NEEDED} ${_COCKATRICE_NEEDED} ${_ORACLE_NEEDED}
|
set(REQUIRED_QT_COMPONENTS ${REQUIRED_QT_COMPONENTS} ${_SERVATRICE_NEEDED} ${_COCKATRICE_NEEDED} ${_ORACLE_NEEDED}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,13 @@ Var IsUpgrade
|
||||||
Var AbortReason
|
Var AbortReason
|
||||||
Var WaitPid
|
Var WaitPid
|
||||||
Var LauncherExited
|
Var LauncherExited
|
||||||
|
Var InstallLogPath
|
||||||
|
Var LogHandle
|
||||||
|
Var LogMessage
|
||||||
|
Var LogFindHandle
|
||||||
|
Var LogFindName
|
||||||
|
Var LogMatchLabel
|
||||||
|
Var LogMatchPattern
|
||||||
|
|
||||||
!include LogicLib.nsh
|
!include LogicLib.nsh
|
||||||
!include FileFunc.nsh
|
!include FileFunc.nsh
|
||||||
|
|
@ -64,8 +71,67 @@ Page Custom PortableModePageCreate PortableModePageLeave
|
||||||
|
|
||||||
!insertmacro MUI_LANGUAGE English
|
!insertmacro MUI_LANGUAGE English
|
||||||
|
|
||||||
|
; Installer log
|
||||||
|
; Every run appends a step-by-step trace to a file so a failed upgrade on a
|
||||||
|
; user's machine can be diagnosed after the fact. Kept in $TEMP rather than in
|
||||||
|
; $INSTDIR because the previous version's uninstaller removes the whole install
|
||||||
|
; directory part-way through an upgrade. Read it back with:
|
||||||
|
; notepad %TEMP%\Cockatrice-installer.log
|
||||||
|
!macro CockLog text
|
||||||
|
Push "${text}"
|
||||||
|
Call CockLogWrite
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
Function CockLogWrite
|
||||||
|
Pop $LogMessage
|
||||||
|
FileOpen $LogHandle "$InstallLogPath" a
|
||||||
|
${If} $LogHandle == ""
|
||||||
|
Return
|
||||||
|
${EndIf}
|
||||||
|
; FileOpen places the pointer at the start of the file in every mode, so
|
||||||
|
; 'a' alone would overwrite the log from the beginning on each line. Seek
|
||||||
|
; past the existing content first to actually append.
|
||||||
|
FileSeek $LogHandle 0 END
|
||||||
|
FileWrite $LogHandle "$LogMessage$\r$\n"
|
||||||
|
FileClose $LogHandle
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
; Logs every file matching $INSTDIR\<mask>. 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
|
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
|
${If} ${NSIS_IS_64_BIT} == 1 #NSIS 64bit
|
||||||
${IfNot} ${RunningX64}
|
${IfNot} ${RunningX64}
|
||||||
MessageBox MB_OK|MB_ICONSTOP "This version of Cockatrice requires a 64-bit Windows system."
|
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
|
; Now that $PortableMode reflects reality, commit InstDir into the correct slot
|
||||||
Call SetModeDestinationFromInstdir
|
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
|
; 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
|
; 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
|
; 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
|
; interactive installs the section re-checks after the directory page, when
|
||||||
; $INSTDIR is the directory the user actually picked.
|
; $INSTDIR is the directory the user actually picked.
|
||||||
${If} $ReinstallMode = 1
|
${If} $ReinstallMode = 1
|
||||||
|
!insertmacro CockLog "reinstall: waiting for launcher and other instances"
|
||||||
Call WaitForLauncherToExit
|
Call WaitForLauncherToExit
|
||||||
Call EnsureAppsNotRunning
|
Call EnsureAppsNotRunning
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
${If} $ReinstallMode = 1
|
${If} $ReinstallMode = 1
|
||||||
${AndIf} $PortableMode = 0
|
${AndIf} $PortableMode = 0
|
||||||
|
!insertmacro CockLog "reinstall: auto-uninstalling previous version"
|
||||||
Call AutoUninstallIfNeeded
|
Call AutoUninstallIfNeeded
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
|
|
@ -226,13 +301,22 @@ Function AutoUninstallIfNeeded
|
||||||
|
|
||||||
SetShellVarContext all
|
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 ---
|
; --- 32-bit uninstall ---
|
||||||
SetRegView 32
|
SetRegView 32
|
||||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||||
|
|
||||||
|
!insertmacro CockLog "uninstall (32-bit): '$R0 _?=$INSTDIR'"
|
||||||
StrCmp $R0 "" done32
|
StrCmp $R0 "" done32
|
||||||
DetailPrint "Removing previous version (32-bit)..."
|
DetailPrint "Removing previous version (32-bit)..."
|
||||||
ExecWait '$R0'
|
ExecWait '$R0 _?=$INSTDIR'
|
||||||
|
|
||||||
done32:
|
done32:
|
||||||
|
|
||||||
|
|
@ -241,9 +325,10 @@ ${If} ${RunningX64}
|
||||||
SetRegView 64
|
SetRegView 64
|
||||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||||
|
|
||||||
|
!insertmacro CockLog "uninstall (64-bit): '$R0 _?=$INSTDIR'"
|
||||||
StrCmp $R0 "" done64
|
StrCmp $R0 "" done64
|
||||||
DetailPrint "Removing previous version (64-bit)..."
|
DetailPrint "Removing previous version (64-bit)..."
|
||||||
ExecWait '$R0'
|
ExecWait '$R0 _?=$INSTDIR'
|
||||||
|
|
||||||
done64:
|
done64:
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -360,6 +445,7 @@ Function WaitForAppToClose
|
||||||
; usage: set $R1 to the display name (e.g. "cockatrice.exe") and $R2 to the
|
; usage: set $R1 to the display name (e.g. "cockatrice.exe") and $R2 to the
|
||||||
; base image name (e.g. "cockatrice")
|
; base image name (e.g. "cockatrice")
|
||||||
Call IsAppRunning
|
Call IsAppRunning
|
||||||
|
!insertmacro CockLog "guard $R1: state=$R0 (dir=$GuardDir)"
|
||||||
; Only a definite "running" is worth waiting for. "Not running" is done, and
|
; 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
|
; "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
|
; will never get - but it cannot simply be waved through either, see
|
||||||
|
|
@ -384,6 +470,7 @@ Function WaitForAppToClose
|
||||||
Sleep 500
|
Sleep 500
|
||||||
Call IsAppRunning
|
Call IsAppRunning
|
||||||
${If} $R0 = 0
|
${If} $R0 = 0
|
||||||
|
!insertmacro CockLog "guard $R1: closed gracefully"
|
||||||
DetailPrint "$R1 closed."
|
DetailPrint "$R1 closed."
|
||||||
Return
|
Return
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -402,6 +489,7 @@ Function WaitForAppToClose
|
||||||
; deck, and nothing has been replaced yet, so aborting just defers the
|
; deck, and nothing has been replaced yet, so aborting just defers the
|
||||||
; update and preserves the user's data.
|
; update and preserves the user's data.
|
||||||
${If} $AllowForceClose = 0
|
${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."
|
DetailPrint "$R1 is still running after 60 s; aborting the update so that no data is lost."
|
||||||
StrCpy $AbortReason \
|
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."
|
"$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()
|
; Oracle and Servatrice are console applications: CloseMainWindow()
|
||||||
; returned false for them and waiting longer cannot help. They hold no
|
; returned false for them and waiting longer cannot help. They hold no
|
||||||
; unsaved user data, so stop them by PID.
|
; unsaved user data, so stop them by PID.
|
||||||
|
!insertmacro CockLog "guard $R1: still running after 60s, force-stopping"
|
||||||
DetailPrint "Force-stopping $R1 ..."
|
DetailPrint "Force-stopping $R1 ..."
|
||||||
Call ForceCloseApps
|
Call ForceCloseApps
|
||||||
Sleep 2000
|
Sleep 2000
|
||||||
Call IsAppRunning
|
Call IsAppRunning
|
||||||
${If} $R0 = 0
|
${If} $R0 = 0
|
||||||
|
!insertmacro CockLog "guard $R1: force-stopped"
|
||||||
DetailPrint "$R1 closed."
|
DetailPrint "$R1 closed."
|
||||||
Return
|
Return
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -422,6 +512,7 @@ Function WaitForAppToClose
|
||||||
Call HandleUnknownAppState
|
Call HandleUnknownAppState
|
||||||
Return
|
Return
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
!insertmacro CockLog "guard $R1: could not be stopped, aborting"
|
||||||
DetailPrint "$R1 is still running after 60 s; aborting the update."
|
DetailPrint "$R1 is still running after 60 s; aborting the update."
|
||||||
StrCpy $AbortReason \
|
StrCpy $AbortReason \
|
||||||
"$R1 could not be stopped, so the installation was aborted.$\r$\n$\r$\nPlease close $R1 and run the installer again."
|
"$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
|
; Only the first of those two gets a dialog; the second reports through the log
|
||||||
; and the exit code.
|
; and the exit code.
|
||||||
Function AbortInstall
|
Function AbortInstall
|
||||||
${IfNot} ${Silent}
|
!insertmacro CockLog "ABORT: $AbortReason"
|
||||||
MessageBox MB_OK|MB_ICONEXCLAMATION "$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}
|
${EndIf}
|
||||||
SetErrorLevel 1
|
SetErrorLevel 1
|
||||||
Abort
|
Abort
|
||||||
|
|
@ -510,17 +609,33 @@ FunctionEnd
|
||||||
; falls back to the name based guard.
|
; falls back to the name based guard.
|
||||||
Function WaitForLauncherToExit
|
Function WaitForLauncherToExit
|
||||||
StrCpy $LauncherExited 0
|
StrCpy $LauncherExited 0
|
||||||
|
!insertmacro CockLog "wait-launcher: pid='$WaitPid'"
|
||||||
${If} $WaitPid == ""
|
${If} $WaitPid == ""
|
||||||
|
!insertmacro CockLog "wait-launcher: no pid given, falling back to name check"
|
||||||
Return
|
Return
|
||||||
${EndIf}
|
${EndIf}
|
||||||
; PROCESS_SYNCHRONIZE is the only access this needs - enough to wait on the
|
; 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
|
; handle, and the least likely to be refused for a reason that has nothing to
|
||||||
; do with the upgrade.
|
; 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
|
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}
|
${If} ${Errors}
|
||||||
|
StrCpy $R0 0
|
||||||
|
${EndIf}
|
||||||
|
${If} $R0 == 0
|
||||||
; The launcher is gone - OpenProcess cannot open a dead process - which is
|
; The launcher is gone - OpenProcess cannot open a dead process - which is
|
||||||
; exactly the state the wait was for.
|
; exactly the state the wait was for.
|
||||||
|
!insertmacro CockLog "wait-launcher: already exited"
|
||||||
DetailPrint "The application that started this installer has already exited."
|
DetailPrint "The application that started this installer has already exited."
|
||||||
StrCpy $LauncherExited 1
|
StrCpy $LauncherExited 1
|
||||||
Return
|
Return
|
||||||
|
|
@ -529,14 +644,16 @@ Function WaitForLauncherToExit
|
||||||
; Same 60 s grace period the name based check uses, so a client that is slow
|
; 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.
|
; 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.
|
; 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::WaitForSingleObject(p R0, i 60000) i.R1'
|
||||||
System::Call 'kernel32::CloseHandle(p r0)'
|
System::Call 'kernel32::CloseHandle(p R0)'
|
||||||
${If} $R1 != 0
|
${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."
|
DetailPrint "The application that started this installer did not exit within 60 s."
|
||||||
StrCpy $AbortReason \
|
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."
|
"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
|
Call AbortInstall
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
!insertmacro CockLog "wait-launcher: launcher exited"
|
||||||
DetailPrint "The application that started this installer has exited."
|
DetailPrint "The application that started this installer has exited."
|
||||||
StrCpy $LauncherExited 1
|
StrCpy $LauncherExited 1
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
@ -562,9 +679,11 @@ FunctionEnd
|
||||||
Function GuardAppsNotRunning
|
Function GuardAppsNotRunning
|
||||||
; usage: set $GuardDir to the directory to guard, then call this
|
; usage: set $GuardDir to the directory to guard, then call this
|
||||||
Call IsProcessLookupAvailable
|
Call IsProcessLookupAvailable
|
||||||
|
!insertmacro CockLog "guard: powershell available=$R0 dir=$GuardDir launcherExited=$LauncherExited"
|
||||||
${If} $R0 = 0
|
${If} $R0 = 0
|
||||||
; Without PowerShell we cannot tell whether a running instance is
|
; Without PowerShell we cannot tell whether a running instance is
|
||||||
; holding locks on the files we are about to replace.
|
; 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."
|
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
|
; 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
|
; left the very process that launched the installer free to go on
|
||||||
|
|
@ -587,7 +706,8 @@ Function GuardAppsNotRunning
|
||||||
${EndIf}
|
${EndIf}
|
||||||
; The user has to be told to close the applications by hand, but a /S
|
; 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.
|
; 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."
|
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}
|
${EndIf}
|
||||||
Return
|
Return
|
||||||
|
|
@ -633,7 +753,11 @@ Function IsExistingCockatriceInstall
|
||||||
; there to prove that it is one. Every Qt module Cockatrice links is part of
|
; 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
|
; 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
|
; 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"
|
StrCpy $R3 "Qt6*.dll"
|
||||||
Call CheckStaleRuntimeMask
|
Call CheckStaleRuntimeMask
|
||||||
${If} ${FileExists} "$INSTDIR\qt.conf"
|
${If} ${FileExists} "$INSTDIR\qt.conf"
|
||||||
|
|
@ -645,36 +769,23 @@ FunctionEnd
|
||||||
; the purge. NSIS silently skips whatever it cannot delete, so one surviving file
|
; 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.
|
; 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
|
; Any DLL at all counts, not a list of expected ones. The purge removes every
|
||||||
; probed named files could not see a locked Qt6Multimedia.dll or a Plugins
|
; top-level DLL, so after it has run the only DLL that can still be there is one
|
||||||
; directory the purge was unable to remove, so the exact files that broke the
|
; it failed to delete, whatever its name. A mask per library family (Qt, then
|
||||||
; install were also the ones this check was blind to.
|
; 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
|
Function HasStaleRuntimeFiles
|
||||||
StrCpy $R0 0
|
StrCpy $R0 0
|
||||||
StrCpy $R3 "Qt*.dll"
|
StrCpy $R3 "*.dll"
|
||||||
Call CheckStaleRuntimeMask
|
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
|
; IfFileExists takes wildcards, so a Plugins directory the purge could not
|
||||||
; remove counts as a leftover too.
|
; remove counts as a leftover too.
|
||||||
${If} ${FileExists} "$INSTDIR\Plugins\*.*"
|
${If} ${FileExists} "$INSTDIR\Plugins\*.*"
|
||||||
|
!insertmacro CockLog "stale-runtime: Plugins directory survived the purge"
|
||||||
StrCpy $R0 1
|
StrCpy $R0 1
|
||||||
${EndIf}
|
${EndIf}
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
@ -687,6 +798,7 @@ Function CheckStaleRuntimeMask
|
||||||
${EndIf}
|
${EndIf}
|
||||||
FindFirst $StaleFindHandle $StaleFindName "$INSTDIR\$R3"
|
FindFirst $StaleFindHandle $StaleFindName "$INSTDIR\$R3"
|
||||||
${If} $StaleFindHandle != ""
|
${If} $StaleFindHandle != ""
|
||||||
|
!insertmacro CockLog "stale-runtime: '$StaleFindName' matched $R3 in $INSTDIR"
|
||||||
StrCpy $R0 1
|
StrCpy $R0 1
|
||||||
FindClose $StaleFindHandle
|
FindClose $StaleFindHandle
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -925,9 +1037,10 @@ ${If} $PortableMode = 0
|
||||||
; directory before letting it delete anything. The uninstall string is
|
; directory before letting it delete anything. The uninstall string is
|
||||||
; stashed away first, the check works on $R0.
|
; stashed away first, the check works on $R0.
|
||||||
StrCpy $OldUninstallString $R0
|
StrCpy $OldUninstallString $R0
|
||||||
|
!insertmacro CockLog "componentsPagePre: old 32-bit uninstall '$OldUninstallString _?=$INSTDIR'"
|
||||||
Call EnsureOldInstallNotRunning
|
Call EnsureOldInstallNotRunning
|
||||||
ClearErrors
|
ClearErrors
|
||||||
ExecWait "$OldUninstallString"
|
ExecWait "$OldUninstallString _?=$INSTDIR"
|
||||||
|
|
||||||
done32:
|
done32:
|
||||||
|
|
||||||
|
|
@ -947,9 +1060,10 @@ ${If} $PortableMode = 0
|
||||||
|
|
||||||
uninst64:
|
uninst64:
|
||||||
StrCpy $OldUninstallString $R0
|
StrCpy $OldUninstallString $R0
|
||||||
|
!insertmacro CockLog "componentsPagePre: old 64-bit uninstall '$OldUninstallString _?=$INSTDIR'"
|
||||||
Call EnsureOldInstallNotRunning
|
Call EnsureOldInstallNotRunning
|
||||||
ClearErrors
|
ClearErrors
|
||||||
ExecWait "$OldUninstallString"
|
ExecWait "$OldUninstallString _?=$INSTDIR"
|
||||||
|
|
||||||
done64:
|
done64:
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -964,15 +1078,19 @@ Section "Application" SecApplication
|
||||||
SetShellVarContext all
|
SetShellVarContext all
|
||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
|
!insertmacro CockLog "section: InstDir=$INSTDIR PortableMode=$PortableMode ReinstallMode=$ReinstallMode"
|
||||||
|
|
||||||
; No application instance may be running while any file below is deleted or
|
; No application instance may be running while any file below is deleted or
|
||||||
; replaced: both upgrade blocks start by removing the old executables and
|
; replaced: both upgrade blocks start by removing the old executables and
|
||||||
; runtime DLLs, and NSIS silently skips whatever is locked, which is how an
|
; 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
|
; install ends up with a mix of old and new runtimes next to the new executable.
|
||||||
; ("The procedure entry point X could not be located in the dynamic link
|
; The next start then fails with "The procedure entry point X could not be
|
||||||
; library ...Qt6Network.dll"). So the check has to come before the first
|
; located in the dynamic link library ...Qt6Network.dll" for the Qt ones, or
|
||||||
; Delete/RMDir and not after it - an interactive install into an existing
|
; "abseil_dll.dll is either not designed to run on Windows or it contains an
|
||||||
; portable directory with cockatrice.exe still running would otherwise delete
|
; error" for the protobuf ones. So the check has to come before the first
|
||||||
; the old files under its feet.
|
; 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
|
; It is skipped on the /R path: .onInit already ran it before
|
||||||
; AutoUninstallIfNeeded removed the previous installation, so by the time this
|
; AutoUninstallIfNeeded removed the previous installation, so by the time this
|
||||||
|
|
@ -987,6 +1105,8 @@ ${EndIf}
|
||||||
${If} $PortableMode = 1
|
${If} $PortableMode = 1
|
||||||
${AndIf} ${FileExists} "$INSTDIR\portable.dat"
|
${AndIf} ${FileExists} "$INSTDIR\portable.dat"
|
||||||
; upgrade portable mode
|
; upgrade portable mode
|
||||||
|
!insertmacro CockLog "section: portable upgrade purge"
|
||||||
|
!insertmacro CockLogListing "before-portable-purge" "*.dll"
|
||||||
RMDir /r "$INSTDIR\plugins"
|
RMDir /r "$INSTDIR\plugins"
|
||||||
RMDir /r "$INSTDIR\sounds"
|
RMDir /r "$INSTDIR\sounds"
|
||||||
RMDir /r "$INSTDIR\themes"
|
RMDir /r "$INSTDIR\themes"
|
||||||
|
|
@ -995,24 +1115,24 @@ ${AndIf} ${FileExists} "$INSTDIR\portable.dat"
|
||||||
Delete "$INSTDIR\cockatrice.exe"
|
Delete "$INSTDIR\cockatrice.exe"
|
||||||
Delete "$INSTDIR\oracle.exe"
|
Delete "$INSTDIR\oracle.exe"
|
||||||
Delete "$INSTDIR\servatrice.exe"
|
Delete "$INSTDIR\servatrice.exe"
|
||||||
Delete "$INSTDIR\Qt*.dll"
|
; Every top-level DLL, not a list of expected ones. The payload is written
|
||||||
Delete "$INSTDIR\libmysql.dll"
|
; after this block, so a DLL the new build still needs is put straight back;
|
||||||
Delete "$INSTDIR\icu*.dll"
|
; what this has to guarantee is that nothing from the previous build is left
|
||||||
Delete "$INSTDIR\libcrypto*.dll"
|
; to be loaded next to the new executables. Naming the families by hand is
|
||||||
Delete "$INSTDIR\libssl*.dll"
|
; what let abseil_dll.dll through; see HasStaleRuntimeFiles.
|
||||||
Delete "$INSTDIR\libeay32.dll"
|
Delete "$INSTDIR\*.dll"
|
||||||
Delete "$INSTDIR\ssleay32.dll"
|
|
||||||
Delete "$INSTDIR\qt.conf"
|
Delete "$INSTDIR\qt.conf"
|
||||||
Delete "$INSTDIR\qdebug.txt"
|
Delete "$INSTDIR\qdebug.txt"
|
||||||
Delete "$INSTDIR\servatrice.sql"
|
Delete "$INSTDIR\servatrice.sql"
|
||||||
Delete "$INSTDIR\servatrice.ini.example"
|
Delete "$INSTDIR\servatrice.ini.example"
|
||||||
Delete "$INSTDIR\zlib*.dll"
|
|
||||||
RMDir "$INSTDIR"
|
RMDir "$INSTDIR"
|
||||||
|
!insertmacro CockLogListing "after-portable-purge" "*.dll"
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
; Remove any runtime DLLs left over from older versions, so a mismatched
|
; 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
|
Call IsExistingCockatriceInstall
|
||||||
|
!insertmacro CockLog "section: IsExistingCockatriceInstall=$R0"
|
||||||
; Remembered because the stale-runtime check below must only ever fire for a
|
; Remembered because the stale-runtime check below must only ever fire for a
|
||||||
; directory this installer recognised as a Cockatrice install. Scanning for
|
; directory this installer recognised as a Cockatrice install. Scanning for
|
||||||
; leftovers in an unrelated directory (a first-time install into a folder that
|
; leftovers in an unrelated directory (a first-time install into a folder that
|
||||||
|
|
@ -1021,48 +1141,48 @@ Call IsExistingCockatriceInstall
|
||||||
StrCpy $IsUpgrade $R0
|
StrCpy $IsUpgrade $R0
|
||||||
${If} $PortableMode = 0
|
${If} $PortableMode = 0
|
||||||
${AndIf} $R0 = 1
|
${AndIf} $R0 = 1
|
||||||
|
!insertmacro CockLog "section: non-portable upgrade purge"
|
||||||
|
!insertmacro CockLogListing "before-purge" "*.dll"
|
||||||
RMDir /r "$INSTDIR\Plugins"
|
RMDir /r "$INSTDIR\Plugins"
|
||||||
Delete "$INSTDIR\Qt*.dll"
|
Delete "$INSTDIR\*.dll"
|
||||||
Delete "$INSTDIR\libcrypto*.dll"
|
!insertmacro CockLogListing "after-purge" "*.dll"
|
||||||
Delete "$INSTDIR\libssl*.dll"
|
!insertmacro CockLogListing "after-plugins" "Plugins\*.*"
|
||||||
Delete "$INSTDIR\zlib*.dll"
|
|
||||||
Delete "$INSTDIR\libmysql.dll"
|
|
||||||
Delete "$INSTDIR\icu*.dll"
|
|
||||||
Delete "$INSTDIR\libeay32.dll"
|
|
||||||
Delete "$INSTDIR\ssleay32.dll"
|
|
||||||
${EndIf}
|
${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
|
; 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
|
; 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
|
; "The procedure entry point X could not be located in the dynamic link library
|
||||||
; ...Qt6QuickWidgets.dll" or "The code execution cannot proceed because
|
; ...Qt6QuickWidgets.dll", "The code execution cannot proceed because
|
||||||
; Qt6Multimedia.dll was not found", so stop here instead of compounding it.
|
; Qt6Multimedia.dll was not found", or "abseil_dll.dll is either not designed to
|
||||||
; Nothing of the new payload has been written at this point, so the next run -
|
; run on Windows or it contains an error", so stop here instead of compounding
|
||||||
; with the applications closed - gets a clean install.
|
; 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
|
${If} $IsUpgrade = 1
|
||||||
Call HasStaleRuntimeFiles
|
Call HasStaleRuntimeFiles
|
||||||
|
!insertmacro CockLog "section: HasStaleRuntimeFiles=$R0"
|
||||||
${Else}
|
${Else}
|
||||||
StrCpy $R0 0
|
StrCpy $R0 0
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${If} $R0 = 1
|
${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."
|
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
|
; 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
|
; 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
|
; box there would block forever, so that case only reports through the log
|
||||||
; and the exit code.
|
; and the exit code. AbortInstall owns that decision.
|
||||||
${IfNot} ${Silent}
|
StrCpy $AbortReason \
|
||||||
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."
|
||||||
"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}
|
|
||||||
SetErrorLevel 1
|
|
||||||
Abort
|
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
@CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
|
@CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
|
||||||
|
!insertmacro CockLog "section: writing payload to $INSTDIR"
|
||||||
@CPACK_NSIS_FULL_INSTALL@
|
@CPACK_NSIS_FULL_INSTALL@
|
||||||
|
!insertmacro CockLog "section: payload written"
|
||||||
|
!insertmacro CockLogListing "final" "Qt6*.dll"
|
||||||
|
|
||||||
${If} $PortableMode = 0
|
${If} $PortableMode = 0
|
||||||
WriteUninstaller "$INSTDIR\uninstall.exe"
|
WriteUninstaller "$INSTDIR\uninstall.exe"
|
||||||
|
|
@ -1126,6 +1246,7 @@ ${If} $ReinstallMode = 1
|
||||||
Exec '"$INSTDIR\cockatrice.exe"'
|
Exec '"$INSTDIR\cockatrice.exe"'
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
|
!insertmacro CockLog "section: application install complete"
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
Section "Start menu item" SecStartMenu
|
Section "Start menu item" SecStartMenu
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,10 @@ set(cockatrice_SOURCES
|
||||||
src/game_graphics/zones/view_zone.cpp
|
src/game_graphics/zones/view_zone.cpp
|
||||||
src/game_graphics/zones/view_zone_widget.cpp
|
src/game_graphics/zones/view_zone_widget.cpp
|
||||||
src/game_graphics/board/abstract_graphics_item.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.cpp
|
||||||
src/interface/card_picture_loader/card_picture_loader_local.cpp
|
src/interface/card_picture_loader/card_picture_loader_local.cpp
|
||||||
src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.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
|
# 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
|
# to the executable. Qt6::Concurrent is linked but never imported - QtConcurrent::run
|
||||||
# and QFutureWatcher are header-only in Qt 6 - so neither step ships
|
# 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.
|
# Windows package check then fails on a package that is fine to run.
|
||||||
# Qt6::ShaderTools is skipped for the same reason.
|
# Qt6::ShaderTools is skipped for the same reason.
|
||||||
#
|
#
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,4 @@ Name=Cockatrice
|
||||||
Exec=cockatrice %U
|
Exec=cockatrice %U
|
||||||
Icon=cockatrice
|
Icon=cockatrice
|
||||||
Categories=Game;CardGame;
|
Categories=Game;CardGame;
|
||||||
MimeType=application/x-cockatrice;
|
MimeType=application/x-cockatrice;x-scheme-handler/cockatrice;
|
||||||
X-Scheme-Handler/cockatrice=true
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
#include "lag_monitor.h"
|
#include "lag_monitor.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QDateTime>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
#include <QMessageLogger>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
LagMonitor::LagMonitor(QObject *parent) : QObject(parent)
|
LagMonitor::LagMonitor(QObject *parent) : QObject(parent)
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,15 @@
|
||||||
#ifndef LAG_MONITOR_H
|
#ifndef LAG_MONITOR_H
|
||||||
#define LAG_MONITOR_H
|
#define LAG_MONITOR_H
|
||||||
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(LagMonitorLog, "lag_monitor");
|
inline Q_LOGGING_CATEGORY(LagMonitorLog, "lag_monitor");
|
||||||
|
|
||||||
class QEvent;
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,11 @@
|
||||||
|
|
||||||
#include "latency_graph_widget.h"
|
#include "latency_graph_widget.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QRectF>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qnumeric.h>
|
||||||
|
|
||||||
LatencyGraphWidget::LatencyGraphWidget(QWidget *parent) : QWidget(parent)
|
LatencyGraphWidget::LatencyGraphWidget(QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Bar graph of recent network round-trip samples.
|
* @brief Bar graph of recent network round-trip samples.
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,15 @@
|
||||||
#include "latency_status_widget.h"
|
#include "latency_status_widget.h"
|
||||||
|
|
||||||
#include "latency_graph_widget.h"
|
#include "latency_graph_widget.h"
|
||||||
|
#include "latency_tracker.h"
|
||||||
|
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QPoint>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
LatencyStatusWidget::LatencyStatusWidget(QWidget *parent) : QWidget(parent)
|
LatencyStatusWidget::LatencyStatusWidget(QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,10 @@
|
||||||
#define LATENCY_STATUS_WIDGET_H
|
#define LATENCY_STATUS_WIDGET_H
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QString>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <libcockatrice/network/client/abstract/latency_tracker.h>
|
#include <libcockatrice/network/client/abstract/latency_tracker.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class LatencyGraphWidget;
|
class LatencyGraphWidget;
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,25 @@
|
||||||
#include "../interface/widgets/dialogs/dlg_forgot_password_reset.h"
|
#include "../interface/widgets/dialogs/dlg_forgot_password_reset.h"
|
||||||
#include "../interface/widgets/dialogs/dlg_register.h"
|
#include "../interface/widgets/dialogs/dlg_register.h"
|
||||||
#include "../interface/widgets/utility/get_text_with_max.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 <QChar>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QDebug>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
|
#include <QList>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QStringLiteral>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <libcockatrice/network/client/remote/remote_client.h>
|
#include <libcockatrice/network/client/remote/remote_client.h>
|
||||||
#include <libcockatrice/protocol/pb/response.pb.h>
|
#include <libcockatrice/protocol/pb/response.pb.h>
|
||||||
#include <libcockatrice/settings/servers_settings.h>
|
#include <libcockatrice/settings/servers_settings.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
ConnectionController::ConnectionController(QWidget *dialogParent, QObject *parent)
|
ConnectionController::ConnectionController(QWidget *dialogParent, QObject *parent)
|
||||||
: QObject(parent), dialogParent(dialogParent)
|
: QObject(parent), dialogParent(dialogParent)
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,22 @@
|
||||||
#define COCKATRICE_REMOTE_CONNECTION_CONTROLLER_H
|
#define COCKATRICE_REMOTE_CONNECTION_CONTROLLER_H
|
||||||
|
|
||||||
#include "abstract_client.h"
|
#include "abstract_client.h"
|
||||||
|
#include "latency_tracker.h"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QThread>
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/protocol/pb/event_connection_closed.pb.h>
|
#include <qtmetamacros.h>
|
||||||
#include <libcockatrice/protocol/pb/event_server_shutdown.pb.h>
|
|
||||||
|
|
||||||
class RemoteClient;
|
class RemoteClient;
|
||||||
class ServerInfo_User;
|
class ServerInfo_User;
|
||||||
class DlgConnect;
|
class DlgConnect;
|
||||||
|
class Event_ConnectionClosed;
|
||||||
|
class Event_ServerShutdown;
|
||||||
|
class QThread;
|
||||||
|
class QWidget;
|
||||||
|
template <typename T> class QList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Owns the RemoteClient and its worker thread.
|
* Owns the RemoteClient and its worker thread.
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,22 @@
|
||||||
#include "deck_stats_interface.h"
|
#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 <QByteArray>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QRegularExpressionMatch>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QString>
|
||||||
|
#include <QUrl>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
|
#include <functional>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/deck_list/deck_list.h>
|
#include <libcockatrice/deck_list/deck_list.h>
|
||||||
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@
|
||||||
#ifndef DECKSTATS_INTERFACE_H
|
#ifndef DECKSTATS_INTERFACE_H
|
||||||
#define DECKSTATS_INTERFACE_H
|
#define DECKSTATS_INTERFACE_H
|
||||||
|
|
||||||
#include <libcockatrice/deck_list/deck_list.h>
|
#include <QObject>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class QByteArray;
|
class QByteArray;
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,28 @@
|
||||||
#include "tapped_out_interface.h"
|
#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 <QByteArray>
|
||||||
|
#include <QDebug>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
#include <QList>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QRegularExpressionMatch>
|
||||||
|
#include <QRegularExpressionMatchIterator>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QUrl>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <functional>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/deck_list/deck_list.h>
|
#include <libcockatrice/deck_list/deck_list.h>
|
||||||
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface");
|
inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "deck_link_to_api_transformer.h"
|
#include "deck_link_to_api_transformer.h"
|
||||||
|
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QRegularExpressionMatch>
|
||||||
|
|
||||||
namespace DeckLinkToApiTransformer
|
namespace DeckLinkToApiTransformer
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,35 @@
|
||||||
#include "spoiler_background_updater.h"
|
#include "spoiler_background_updater.h"
|
||||||
|
|
||||||
#include "../../../../interface/window_main.h"
|
|
||||||
#include "../../../../main.h"
|
#include "../../../../main.h"
|
||||||
#include "../../../settings/cache_settings.h"
|
#include "../../../settings/cache_settings.h"
|
||||||
|
|
||||||
|
#include <QChar>
|
||||||
#include <QCryptographicHash>
|
#include <QCryptographicHash>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include <QList>
|
||||||
#include <QLocale>
|
#include <QLocale>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QTimeZone>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrentRun>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <functional>
|
||||||
#include <libcockatrice/card/database/card_database.h>
|
#include <libcockatrice/card/database/card_database.h>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/settings/download_settings.h>
|
#include <libcockatrice/settings/download_settings.h>
|
||||||
#include <libcockatrice/settings/paths_settings.h>
|
#include <libcockatrice/settings/paths_settings.h>
|
||||||
|
#include <tuple>
|
||||||
|
#include <utility>
|
||||||
#include <version_string.h>
|
#include <version_string.h>
|
||||||
|
|
||||||
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
|
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,11 @@
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QProcess>
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class QProcess;
|
||||||
|
class QUrl;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(SpoilerBackgroundUpdaterLog, "spoiler_background_updater");
|
inline Q_LOGGING_CATEGORY(SpoilerBackgroundUpdaterLog, "spoiler_background_updater");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,12 @@
|
||||||
|
|
||||||
#ifndef CLIENT_UPDATE_CHECKER_H
|
#ifndef CLIENT_UPDATE_CHECKER_H
|
||||||
#define CLIENT_UPDATE_CHECKER_H
|
#define CLIENT_UPDATE_CHECKER_H
|
||||||
#include <QObject>
|
#include "release_channel.h"
|
||||||
|
|
||||||
class Release;
|
#include <QMetaObject>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We use a singleton instance of UpdateChannel, which can cause interference and feedback loops when multiple objects
|
* We use a singleton instance of UpdateChannel, which can cause interference and feedback loops when multiple objects
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,27 @@
|
||||||
|
|
||||||
#include "version_string.h"
|
#include "version_string.h"
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QDebug>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QMessageBox>
|
#include <QJsonParseError>
|
||||||
|
#include <QJsonValue>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
|
#include <QNetworkRequest>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QSysInfo>
|
#include <QRegularExpressionMatch>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QVariantMap>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
#include <qprocessordetection.h>
|
||||||
|
|
||||||
#if defined(Q_OS_MACOS)
|
#if defined(Q_OS_MACOS)
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,9 @@
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVariantMap>
|
#include <QVariantList>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(ReleaseChannelLog, "release_channel");
|
inline Q_LOGGING_CATEGORY(ReleaseChannelLog, "release_channel");
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,14 @@
|
||||||
#include "update_downloader.h"
|
#include "update_downloader.h"
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QChar>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
UpdateDownloader::UpdateDownloader(QObject *parent) : QObject(parent), response(nullptr)
|
UpdateDownloader::UpdateDownloader(QObject *parent) : QObject(parent), response(nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,14 @@
|
||||||
#ifndef COCKATRICE_UPDATEDOWNLOADER_H
|
#ifndef COCKATRICE_UPDATEDOWNLOADER_H
|
||||||
#define COCKATRICE_UPDATEDOWNLOADER_H
|
#define COCKATRICE_UPDATEDOWNLOADER_H
|
||||||
|
|
||||||
|
#include <QNetworkReply>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QtNetwork>
|
#include <QString>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class QNetworkAccessManager;
|
||||||
|
|
||||||
class UpdateDownloader : public QObject
|
class UpdateDownloader : public QObject
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,20 @@
|
||||||
|
|
||||||
#include "../network/update/client/release_channel.h"
|
#include "../network/update/client/release_channel.h"
|
||||||
#include "card_counter_settings.h"
|
#include "card_counter_settings.h"
|
||||||
|
#include "libcockatrice/interfaces/interface_card_database_path_provider.h"
|
||||||
#include "shortcuts_settings.h"
|
#include "shortcuts_settings.h"
|
||||||
#include "version_string.h"
|
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QGlobalStatic>
|
#include <QGlobalStatic>
|
||||||
|
#include <QMessageLogger>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QSharedPointer>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/settings/appearance_settings.h>
|
#include <libcockatrice/settings/appearance_settings.h>
|
||||||
#include <libcockatrice/settings/cache_storage_settings.h>
|
#include <libcockatrice/settings/cache_storage_settings.h>
|
||||||
#include <libcockatrice/settings/card_database_settings.h>
|
#include <libcockatrice/settings/card_database_settings.h>
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,13 @@
|
||||||
#ifndef SETTINGSCACHE_H
|
#ifndef SETTINGSCACHE_H
|
||||||
#define SETTINGSCACHE_H
|
#define SETTINGSCACHE_H
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <libcockatrice/interfaces/interface_card_database_path_provider.h>
|
#include <libcockatrice/interfaces/interface_card_database_path_provider.h>
|
||||||
#include <libcockatrice/interfaces/interface_network_settings_provider.h>
|
#include <libcockatrice/interfaces/interface_network_settings_provider.h>
|
||||||
#include <libcockatrice/utility/macros.h>
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(SettingsCacheLog, "settings_cache");
|
inline Q_LOGGING_CATEGORY(SettingsCacheLog, "settings_cache");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,15 @@
|
||||||
#include "card_counter_settings.h"
|
#include "card_counter_settings.h"
|
||||||
|
|
||||||
|
#include "libcockatrice/settings/settings_manager.h"
|
||||||
|
|
||||||
|
#include <QChar>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QVariant>
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
class QObject;
|
||||||
|
|
||||||
CardCounterSettings::CardCounterSettings(const QString &settingsPath, QObject *parent)
|
CardCounterSettings::CardCounterSettings(const QString &settingsPath, QObject *parent)
|
||||||
: SettingsManager(settingsPath + "card_counters.ini", "cards", "counters", parent)
|
: SettingsManager(settingsPath + "card_counters.ini", "cards", "counters", parent)
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,12 @@
|
||||||
#ifndef CARD_COUNTER_SETTINGS_H
|
#ifndef CARD_COUNTER_SETTINGS_H
|
||||||
#define CARD_COUNTER_SETTINGS_H
|
#define CARD_COUNTER_SETTINGS_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
#include <libcockatrice/settings/settings_manager.h>
|
#include <libcockatrice/settings/settings_manager.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class QSettings;
|
|
||||||
class QColor;
|
class QColor;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class CardCounterSettings : public SettingsManager
|
class CardCounterSettings : public SettingsManager
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,24 @@
|
||||||
#include "cache_settings.h"
|
#include "cache_settings.h"
|
||||||
#include "shortcuts_settings.h"
|
#include "shortcuts_settings.h"
|
||||||
|
|
||||||
|
#include <QAbstractItemModel>
|
||||||
|
#include <QAbstractItemView>
|
||||||
|
#include <QFont>
|
||||||
|
#include <QHash>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
|
#include <QList>
|
||||||
|
#include <QModelIndex>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
|
class QObject;
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
ShortcutFilterProxyModel::ShortcutFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
|
ShortcutFilterProxyModel::ShortcutFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,13 @@
|
||||||
#define SHORTCUT_TREEVIEW_H
|
#define SHORTCUT_TREEVIEW_H
|
||||||
|
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QStandardItemModel>
|
#include <QString>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class QObject;
|
||||||
|
class QStandardItemModel;
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom implementation of QSortFilterProxyModel that appends the source and parent strings together when filtering
|
* Custom implementation of QSortFilterProxyModel that appends the source and parent strings together when filtering
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,13 @@
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QMap>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QSharedPointer>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <utility>
|
#include <QVariant>
|
||||||
|
|
||||||
ShortcutKey::ShortcutKey(const QString &_name, QList<QKeySequence> _sequence, ShortcutGroup::Groups _group)
|
ShortcutKey::ShortcutKey(const QString &_name, QList<QKeySequence> _sequence, ShortcutGroup::Groups _group)
|
||||||
: QList<QKeySequence>(_sequence), name(_name), group(_group)
|
: QList<QKeySequence>(_sequence), name(_name), group(_group)
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,18 @@
|
||||||
#define SHORTCUTSSETTINGS_H
|
#define SHORTCUTSSETTINGS_H
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QChar>
|
||||||
|
#include <QHash>
|
||||||
#include <QKeySequence>
|
#include <QKeySequence>
|
||||||
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QSettings>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(ShortcutsSettingsLog, "shortcuts_settings");
|
inline Q_LOGGING_CATEGORY(ShortcutsSettingsLog, "shortcuts_settings");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,15 @@
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QAudioOutput>
|
#include <QAudioOutput>
|
||||||
|
#include <QDebug>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QList>
|
||||||
#include <QMediaPlayer>
|
#include <QMediaPlayer>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/settings/sound_settings.h>
|
#include <libcockatrice/settings/sound_settings.h>
|
||||||
|
|
||||||
#define DEFAULT_THEME_NAME "Default"
|
#define DEFAULT_THEME_NAME "Default"
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,17 @@
|
||||||
#ifndef SOUNDENGINE_H
|
#ifndef SOUNDENGINE_H
|
||||||
#define SOUNDENGINE_H
|
#define SOUNDENGINE_H
|
||||||
|
|
||||||
#include <QAudioOutput>
|
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QMediaPlayer>
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class QAudioOutput;
|
||||||
|
class QMediaPlayer;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(SoundEngineLog, "sound_engine");
|
inline Q_LOGGING_CATEGORY(SoundEngineLog, "sound_engine");
|
||||||
|
|
||||||
class QBuffer;
|
|
||||||
|
|
||||||
typedef QMap<QString, QString> QStringMap;
|
typedef QMap<QString, QString> QStringMap;
|
||||||
|
|
||||||
class SoundEngine : public QObject
|
class SoundEngine : public QObject
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,6 @@ public:
|
||||||
{
|
{
|
||||||
return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
|
return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool getIncludeRebalancedCards() const override
|
|
||||||
{
|
|
||||||
return SettingsCache::instance().cardsDisplay().getIncludeRebalancedCards();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
|
#endif // COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,27 @@
|
||||||
#include "deck_filter_string.h"
|
#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 <QByteArray>
|
||||||
|
#include <QDebug>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
#include <QList>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <any>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/filters/filter_string.h>
|
#include <libcockatrice/filters/filter_string.h>
|
||||||
#include <libcockatrice/utility/peglib.h>
|
#include <libcockatrice/utility/peglib.h>
|
||||||
|
#include <mutex>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
static peg::parser search(R"(
|
static peg::parser search(R"(
|
||||||
Start <- QueryPartList
|
Start <- QueryPartList
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,14 @@
|
||||||
#ifndef DECK_FILTER_STRING_H
|
#ifndef DECK_FILTER_STRING_H
|
||||||
#define DECK_FILTER_STRING_H
|
#define DECK_FILTER_STRING_H
|
||||||
|
|
||||||
#include "../interface/deck_loader/loaded_deck.h"
|
|
||||||
|
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <libcockatrice/card/card_localization.h>
|
#include <libcockatrice/card/card_localization.h>
|
||||||
|
|
||||||
|
struct CardSearchLanguage;
|
||||||
|
struct LoadedDeck;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(DeckFilterStringLog, "deck_filter_string");
|
inline Q_LOGGING_CATEGORY(DeckFilterStringLog, "deck_filter_string");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,15 @@
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
|
#include <QIcon>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QSizePolicy>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringLiteral>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/filters/filter_card.h>
|
#include <libcockatrice/filters/filter_card.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
FilterBuilder::FilterBuilder(QWidget *parent) : QWidget(parent)
|
FilterBuilder::FilterBuilder(QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
#define FILTERBUILDER_H
|
#define FILTERBUILDER_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class QCheckBox;
|
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
class LineEditUnfocusable;
|
class LineEditUnfocusable;
|
||||||
class CardFilter;
|
class CardFilter;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,15 @@
|
||||||
#include "filter_tree_model.h"
|
#include "filter_tree_model.h"
|
||||||
|
|
||||||
|
#include <QFlags>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
|
#include <QString>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <functional>
|
||||||
#include <libcockatrice/filters/filter_card.h>
|
#include <libcockatrice/filters/filter_card.h>
|
||||||
#include <libcockatrice/filters/filter_tree.h>
|
#include <libcockatrice/filters/filter_tree.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
class QObject;
|
||||||
|
|
||||||
FilterTreeModel::FilterTreeModel(QObject *parent) : QAbstractItemModel(parent)
|
FilterTreeModel::FilterTreeModel(QObject *parent) : QAbstractItemModel(parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,15 @@
|
||||||
#define FILTERTREEMODEL_H
|
#define FILTERTREEMODEL_H
|
||||||
|
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
|
#include <QList>
|
||||||
|
#include <QModelIndex>
|
||||||
#include <libcockatrice/filters/filter_card.h>
|
#include <libcockatrice/filters/filter_card.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class FilterTree;
|
class FilterTree;
|
||||||
class CardFilter;
|
|
||||||
class FilterTreeNode;
|
class FilterTreeNode;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class FilterTreeModel : public QAbstractItemModel
|
class FilterTreeModel : public QAbstractItemModel
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,21 @@
|
||||||
#include "syntax_help.h"
|
#include "syntax_help.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QFlags>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QObject>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QSize>
|
||||||
|
#include <QString>
|
||||||
|
#include <QTextBrowser>
|
||||||
|
#include <QTextDocument>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the card search syntax help window
|
* Creates the card search syntax help window
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,10 @@
|
||||||
#ifndef SEARCH_SYNTAX_HELP_H
|
#ifndef SEARCH_SYNTAX_HELP_H
|
||||||
#define SEARCH_SYNTAX_HELP_H
|
#define SEARCH_SYNTAX_HELP_H
|
||||||
|
|
||||||
#include <QLineEdit>
|
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QTextBrowser>
|
|
||||||
|
class QLineEdit;
|
||||||
|
class QTextBrowser;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(SyntaxHelpLog, "syntax_help");
|
inline Q_LOGGING_CATEGORY(SyntaxHelpLog, "syntax_help");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,18 @@
|
||||||
#include "abstract_game.h"
|
#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_logic.h"
|
||||||
|
#include "player/player_manager.h"
|
||||||
|
#include "zones/card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
|
#include <QMap>
|
||||||
|
|
||||||
|
class AbstractClient;
|
||||||
|
|
||||||
AbstractGame::AbstractGame(QObject *_parent) : QObject(_parent)
|
AbstractGame::AbstractGame(QObject *_parent) : QObject(_parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,18 @@
|
||||||
#ifndef COCKATRICE_ABSTRACT_GAME_H
|
#ifndef COCKATRICE_ABSTRACT_GAME_H
|
||||||
#define 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 <QObject>
|
#include <QObject>
|
||||||
#include <libcockatrice/protocol/pb/game_replay.pb.h>
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class CardItem;
|
class CardItem;
|
||||||
|
class AbstractClient;
|
||||||
|
class GameEventHandler;
|
||||||
|
class GameMetaInfo;
|
||||||
|
class GameReplay;
|
||||||
|
class GameState;
|
||||||
|
class PlayerManager;
|
||||||
|
|
||||||
class AbstractGame : public QObject
|
class AbstractGame : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
#include "arrow_registry.h"
|
#include "arrow_registry.h"
|
||||||
|
|
||||||
#include "../game_graphics/board/arrow_item.h"
|
#include "../game_graphics/board/arrow_item.h"
|
||||||
|
#include "board/arrow_data.h"
|
||||||
|
|
||||||
|
#include <QSharedPointer>
|
||||||
|
|
||||||
void ArrowRegistry::insert(QSharedPointer<ArrowData> data, ArrowItem *arrow)
|
void ArrowRegistry::insert(QSharedPointer<ArrowData> data, ArrowItem *arrow)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
#ifndef COCKATRICE_ARROW_REGISTRY_H
|
#ifndef COCKATRICE_ARROW_REGISTRY_H
|
||||||
#define COCKATRICE_ARROW_REGISTRY_H
|
#define COCKATRICE_ARROW_REGISTRY_H
|
||||||
|
|
||||||
#include "board/arrow_data.h"
|
#include <QList>
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QSharedPointer>
|
|
||||||
|
|
||||||
class ArrowItem;
|
class ArrowItem;
|
||||||
|
struct ArrowData;
|
||||||
|
template <class T> class QSharedPointer;
|
||||||
|
|
||||||
struct ArrowKey
|
struct ArrowKey
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
#include "arrow_data.h"
|
#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 ArrowData::fromProto(const ServerInfo_Arrow &arrow, int creatorId, bool isLocalCreator)
|
||||||
{
|
{
|
||||||
ArrowData data;
|
ArrowData data;
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_arrow.pb.h>
|
|
||||||
#include <libcockatrice/utility/color.h>
|
class ServerInfo_Arrow;
|
||||||
|
|
||||||
struct ArrowData
|
struct ArrowData
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
#include "card_list.h"
|
#include "card_list.h"
|
||||||
|
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
|
#include "libcockatrice/card/printing/exact_card.h"
|
||||||
|
|
||||||
|
#include <QChar>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QSharedPointer>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <compare>
|
||||||
#include <libcockatrice/card/card_info.h>
|
#include <libcockatrice/card/card_info.h>
|
||||||
|
|
||||||
CardList::CardList(bool _contentsKnown) : QList<CardItem *>(), contentsKnown(_contentsKnown)
|
CardList::CardList(bool _contentsKnown) : QList<CardItem *>(), contentsKnown(_contentsKnown)
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
|
#include <QString>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(CardListLog, "card_list");
|
inline Q_LOGGING_CATEGORY(CardListLog, "card_list");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#include "card_state.h"
|
#include "card_state.h"
|
||||||
|
|
||||||
|
#include <QSharedPointer>
|
||||||
|
|
||||||
void CardState::resetState(bool keepAnnotations)
|
void CardState::resetState(bool keepAnnotations)
|
||||||
{
|
{
|
||||||
attacking = false;
|
attacking = false;
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,12 @@
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class CardZoneLogic;
|
class CardZoneLogic;
|
||||||
class CardItem;
|
class CardItem;
|
||||||
|
|
||||||
class CardState : public QObject
|
class CardState : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#include "counter_state.h"
|
#include "counter_state.h"
|
||||||
|
|
||||||
|
#include "libcockatrice/protocol/pb/serverinfo_counter.pb.h"
|
||||||
|
|
||||||
#include <libcockatrice/utility/color.h>
|
#include <libcockatrice/utility/color.h>
|
||||||
|
|
||||||
CounterState::CounterState(int id, const QString &name, const QColor &color, int radius, int value, QObject *parent)
|
CounterState::CounterState(int id, const QString &name, const QColor &color, int radius, int value, QObject *parent)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_counter.pb.h>
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class ServerInfo_Counter;
|
||||||
|
|
||||||
class CounterState : public QObject
|
class CounterState : public QObject
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,17 @@
|
||||||
#include "game.h"
|
#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 <QList>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/event_game_joined.pb.h>
|
#include <libcockatrice/protocol/pb/event_game_joined.pb.h>
|
||||||
|
|
||||||
|
class AbstractClient;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
Game::Game(QObject *_parent,
|
Game::Game(QObject *_parent,
|
||||||
bool isLocalGame,
|
bool isLocalGame,
|
||||||
QList<AbstractClient *> &_clients,
|
QList<AbstractClient *> &_clients,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,14 @@
|
||||||
|
|
||||||
#include "abstract_game.h"
|
#include "abstract_game.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class AbstractClient;
|
||||||
|
class Event_GameJoined;
|
||||||
|
class QObject;
|
||||||
|
class QString;
|
||||||
|
template <class Key, class T> class QMap;
|
||||||
|
template <typename T> class QList;
|
||||||
|
|
||||||
class Game : public AbstractGame
|
class Game : public AbstractGame
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,30 @@
|
||||||
#include "game_event_handler.h"
|
#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 "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 <QList>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QMapIterator>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <google/protobuf/descriptor.h>
|
||||||
|
#include <google/protobuf/message.h>
|
||||||
|
#include <google/protobuf/stubs/port.h>
|
||||||
#include <libcockatrice/network/client/abstract/abstract_client.h>
|
#include <libcockatrice/network/client/abstract/abstract_client.h>
|
||||||
#include <libcockatrice/protocol/get_pb_extension.h>
|
#include <libcockatrice/protocol/get_pb_extension.h>
|
||||||
#include <libcockatrice/protocol/pb/command_concede.pb.h>
|
#include <libcockatrice/protocol/pb/command_concede.pb.h>
|
||||||
|
|
@ -13,7 +34,6 @@
|
||||||
#include <libcockatrice/protocol/pb/command_next_turn.pb.h>
|
#include <libcockatrice/protocol/pb/command_next_turn.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_reverse_turn.pb.h>
|
#include <libcockatrice/protocol/pb/command_reverse_turn.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_set_active_phase.pb.h>
|
#include <libcockatrice/protocol/pb/command_set_active_phase.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/context_connection_state_changed.pb.h>
|
|
||||||
#include <libcockatrice/protocol/pb/context_deck_select.pb.h>
|
#include <libcockatrice/protocol/pb/context_deck_select.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/event_game_closed.pb.h>
|
#include <libcockatrice/protocol/pb/event_game_closed.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/event_game_host_changed.pb.h>
|
#include <libcockatrice/protocol/pb/event_game_host_changed.pb.h>
|
||||||
|
|
@ -28,6 +48,8 @@
|
||||||
#include <libcockatrice/protocol/pb/event_set_active_player.pb.h>
|
#include <libcockatrice/protocol/pb/event_set_active_player.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/game_event_container.pb.h>
|
#include <libcockatrice/protocol/pb/game_event_container.pb.h>
|
||||||
#include <libcockatrice/protocol/pending_command.h>
|
#include <libcockatrice/protocol/pending_command.h>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
GameEventHandler::GameEventHandler(AbstractGame *_game) : QObject(_game), game(_game)
|
GameEventHandler::GameEventHandler(AbstractGame *_game) : QObject(_game), game(_game)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,23 +19,29 @@
|
||||||
|
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QPair>
|
||||||
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
#include <libcockatrice/protocol/pb/event_leave.pb.h>
|
#include <libcockatrice/protocol/pb/event_leave.pb.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
// 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 <libcockatrice/protocol/pb/game_event_context.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
|
||||||
|
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
|
||||||
|
|
||||||
class AbstractClient;
|
class AbstractClient;
|
||||||
class AbstractGame;
|
class AbstractGame;
|
||||||
class CommandContainer;
|
|
||||||
class GameCommand;
|
|
||||||
class GameEventContainer;
|
class GameEventContainer;
|
||||||
class GameEventContext;
|
class GameEventContext;
|
||||||
class PendingCommand;
|
class PendingCommand;
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
class Response;
|
class Response;
|
||||||
|
|
||||||
class Event_GameStateChanged;
|
class Event_GameStateChanged;
|
||||||
class Event_PlayerPropertiesChanged;
|
class Event_PlayerPropertiesChanged;
|
||||||
class Event_Join;
|
class Event_Join;
|
||||||
class Event_Leave;
|
|
||||||
class Event_GameHostChanged;
|
class Event_GameHostChanged;
|
||||||
class Event_GameClosed;
|
class Event_GameClosed;
|
||||||
class Event_SetActivePlayer;
|
class Event_SetActivePlayer;
|
||||||
|
|
@ -44,6 +50,15 @@ class Event_GameSay;
|
||||||
class Event_Kicked;
|
class Event_Kicked;
|
||||||
class Event_ReverseTurn;
|
class Event_ReverseTurn;
|
||||||
class Event_Ping;
|
class Event_Ping;
|
||||||
|
class ServerInfo_PlayerProperties;
|
||||||
|
namespace google
|
||||||
|
{
|
||||||
|
namespace protobuf
|
||||||
|
{
|
||||||
|
class Message;
|
||||||
|
} // namespace protobuf
|
||||||
|
} // namespace google
|
||||||
|
template <typename T> class QList;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(GameEventHandlerLog, "game_event_handler");
|
inline Q_LOGGING_CATEGORY(GameEventHandlerLog, "game_event_handler");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,16 @@
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
// Translation layer class to expose protobuf safely and hook it up to Qt Signals.
|
// 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.
|
// 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.
|
// If the network object changes, only this class needs to be adjusted.
|
||||||
|
|
||||||
class AbstractGame;
|
class AbstractGame;
|
||||||
|
|
||||||
class GameMetaInfo : public QObject
|
class GameMetaInfo : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
#include "abstract_game.h"
|
#include "abstract_game.h"
|
||||||
|
|
||||||
|
#include <QChar>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
class AbstractClient;
|
||||||
|
|
||||||
GameState::GameState(AbstractGame *parent,
|
GameState::GameState(AbstractGame *parent,
|
||||||
int _secondsElapsed,
|
int _secondsElapsed,
|
||||||
int _hostId,
|
int _hostId,
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,14 @@
|
||||||
#ifndef COCKATRICE_GAME_STATE_H
|
#ifndef COCKATRICE_GAME_STATE_H
|
||||||
#define COCKATRICE_GAME_STATE_H
|
#define COCKATRICE_GAME_STATE_H
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QList>
|
||||||
#include <libcockatrice/network/client/abstract/abstract_client.h>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class AbstractGame;
|
class AbstractGame;
|
||||||
class ServerInfo_PlayerProperties;
|
class AbstractClient;
|
||||||
class ServerInfo_User;
|
class QTimer;
|
||||||
|
|
||||||
class GameState : public QObject
|
class GameState : public QObject
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,10 @@
|
||||||
#include "phase.h"
|
#include "phase.h"
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QList>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
Phase::Phase(const QString &_name, const QString &_color, const QString &_soundFileName)
|
Phase::Phase(const QString &_name, const QString &_color, const QString &_soundFileName)
|
||||||
: name(_name), color(_color), soundFileName(_soundFileName)
|
: name(_name), color(_color), soundFileName(_soundFileName)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,9 @@
|
||||||
#ifndef PHASE_H
|
#ifndef PHASE_H
|
||||||
#define PHASE_H
|
#define PHASE_H
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QCoreApplication>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
class Phase
|
class Phase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,54 @@
|
||||||
#include "player_actions.h"
|
#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_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/player/card_menu_action_type.h"
|
||||||
#include "../../game_graphics/zones/hand_zone.h"
|
|
||||||
#include "../../game_graphics/zones/table_zone.h"
|
#include "../../game_graphics/zones/table_zone.h"
|
||||||
#include "../../interface/widgets/tabs/tab_game.h"
|
#include "../../interface/deck_loader/loaded_deck.h"
|
||||||
#include "../../interface/widgets/utility/get_text_with_max.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 "../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 <QAction>
|
||||||
|
#include <QChar>
|
||||||
|
#include <QColor>
|
||||||
|
#include <QFlags>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
#include <QList>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QMapIterator>
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QPoint>
|
||||||
|
#include <QPointF>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QVariantList>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <functional>
|
||||||
|
#include <google/protobuf/descriptor.h>
|
||||||
|
#include <google/protobuf/message.h>
|
||||||
|
#include <google/protobuf/stubs/port.h>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/card/relation/card_relation.h>
|
#include <libcockatrice/card/relation/card_relation.h>
|
||||||
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
|
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
|
||||||
|
|
@ -26,13 +66,16 @@
|
||||||
#include <libcockatrice/protocol/pb/command_set_card_counter.pb.h>
|
#include <libcockatrice/protocol/pb/command_set_card_counter.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_shuffle.pb.h>
|
#include <libcockatrice/protocol/pb/command_shuffle.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_undo_draw.pb.h>
|
#include <libcockatrice/protocol/pb/command_undo_draw.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
|
|
||||||
#include <libcockatrice/settings/card_override_settings.h>
|
#include <libcockatrice/settings/card_override_settings.h>
|
||||||
#include <libcockatrice/settings/interface_settings.h>
|
#include <libcockatrice/settings/interface_settings.h>
|
||||||
#include <libcockatrice/utility/clamped_arithmetic.h>
|
#include <libcockatrice/utility/clamped_arithmetic.h>
|
||||||
#include <libcockatrice/utility/counter_limits.h>
|
#include <libcockatrice/utility/counter_limits.h>
|
||||||
#include <libcockatrice/utility/expression.h>
|
#include <libcockatrice/utility/expression.h>
|
||||||
#include <libcockatrice/utility/zone_names.h>
|
#include <libcockatrice/utility/zone_names.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
#include <qnumeric.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
// milliseconds in between triggers of the move top cards until action
|
// milliseconds in between triggers of the move top cards until action
|
||||||
static constexpr int MOVE_TOP_CARD_UNTIL_INTERVAL = 100;
|
static constexpr int MOVE_TOP_CARD_UNTIL_INTERVAL = 100;
|
||||||
|
|
|
||||||
|
|
@ -8,17 +8,25 @@
|
||||||
#ifndef COCKATRICE_PLAYER_ACTIONS_H
|
#ifndef COCKATRICE_PLAYER_ACTIONS_H
|
||||||
#define 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<CardItem *>, which Qt 6.4 needs complete
|
||||||
#include "../../game_graphics/dialogs/dlg_create_token.h"
|
#include "../../game_graphics/dialogs/dlg_create_token.h"
|
||||||
#include "../../game_graphics/dialogs/dlg_move_top_cards_until.h"
|
#include "../../game_graphics/dialogs/dlg_move_top_cards_until.h"
|
||||||
#include "../../game_graphics/player/card_menu_action_type.h"
|
#include "../../game_graphics/player/card_menu_action_type.h"
|
||||||
#include "event_processing_options.h"
|
#include "../board/card_list.h"
|
||||||
#include "player_logic.h"
|
#include "libcockatrice/card/card_info.h"
|
||||||
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
#include <libcockatrice/card/relation/card_relation_type.h>
|
#include <libcockatrice/card/relation/card_relation_type.h>
|
||||||
#include <libcockatrice/filters/filter_string.h>
|
#include <libcockatrice/filters/filter_string.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class CardItem;
|
||||||
|
class CardRelation;
|
||||||
|
class QAction;
|
||||||
|
class QTimer;
|
||||||
|
template <typename T> class QList;
|
||||||
|
|
||||||
namespace google
|
namespace google
|
||||||
{
|
{
|
||||||
|
|
@ -29,9 +37,9 @@ class Message;
|
||||||
} // namespace google
|
} // namespace google
|
||||||
|
|
||||||
class Command_MoveCard;
|
class Command_MoveCard;
|
||||||
class GameEventContext;
|
|
||||||
class PendingCommand;
|
class PendingCommand;
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
|
|
||||||
class PlayerActions : public QObject
|
class PlayerActions : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,32 @@
|
||||||
#include "player_event_handler.h"
|
#include "player_event_handler.h"
|
||||||
|
|
||||||
#include "../../game_graphics/board/arrow_item.h"
|
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
#include "../../game_graphics/zones/view_zone.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/arrow_data.h"
|
||||||
#include "../board/card_list.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_actions.h"
|
||||||
|
#include "player_info.h"
|
||||||
#include "player_logic.h"
|
#include "player_logic.h"
|
||||||
|
#include "player_manager.h"
|
||||||
|
|
||||||
#include <libcockatrice/protocol/pb/command_set_card_attr.pb.h>
|
#include <QDebug>
|
||||||
|
#include <QList>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <algorithm>
|
||||||
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
|
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/context_undo_draw.pb.h>
|
#include <libcockatrice/protocol/pb/context_undo_draw.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/event_attach_card.pb.h>
|
#include <libcockatrice/protocol/pb/event_attach_card.pb.h>
|
||||||
|
|
@ -32,8 +49,9 @@
|
||||||
#include <libcockatrice/protocol/pb/event_set_card_counter.pb.h>
|
#include <libcockatrice/protocol/pb/event_set_card_counter.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/event_set_counter.pb.h>
|
#include <libcockatrice/protocol/pb/event_set_counter.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/event_shuffle.pb.h>
|
#include <libcockatrice/protocol/pb/event_shuffle.pb.h>
|
||||||
#include <libcockatrice/utility/color.h>
|
|
||||||
#include <libcockatrice/utility/zone_names.h>
|
#include <libcockatrice/utility/zone_names.h>
|
||||||
|
#include <qlogging.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
PlayerEventHandler::PlayerEventHandler(PlayerLogic *_player) : QObject(_player), player(_player)
|
PlayerEventHandler::PlayerEventHandler(PlayerLogic *_player) : QObject(_player), player(_player)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,14 @@
|
||||||
#include "event_processing_options.h"
|
#include "event_processing_options.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <libcockatrice/protocol/pb/card_attributes.pb.h>
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/game_event.pb.h>
|
#include <libcockatrice/protocol/pb/game_event.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/game_event_context.pb.h>
|
#include <qtmetamacros.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
class CardItem;
|
class CardItem;
|
||||||
class CardZoneLogic;
|
class CardZoneLogic;
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
|
|
||||||
class Event_AttachCard;
|
class Event_AttachCard;
|
||||||
class Event_ChangeZoneProperties;
|
class Event_ChangeZoneProperties;
|
||||||
class Event_CreateArrow;
|
class Event_CreateArrow;
|
||||||
|
|
@ -50,6 +50,9 @@ class Event_SetCardCounter;
|
||||||
class Event_SetCounter;
|
class Event_SetCounter;
|
||||||
class Event_Shuffle;
|
class Event_Shuffle;
|
||||||
class Event_GameLogNotice;
|
class Event_GameLogNotice;
|
||||||
|
class GameEventContext;
|
||||||
|
enum CardAttribute : int;
|
||||||
|
template <typename T> class QList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class PlayerEventHandler
|
* @class PlayerEventHandler
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#include "player_info.h"
|
#include "player_info.h"
|
||||||
|
|
||||||
|
#include "libcockatrice/protocol/pb/serverinfo_user.pb.h"
|
||||||
|
|
||||||
PlayerInfo::PlayerInfo(const ServerInfo_User &info, int _id, bool _local, bool _judge)
|
PlayerInfo::PlayerInfo(const ServerInfo_User &info, int _id, bool _local, bool _judge)
|
||||||
: id(_id), local(_local), judge(_judge)
|
: id(_id), local(_local), judge(_judge)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,10 @@
|
||||||
#ifndef COCKATRICE_PLAYER_INFO_H
|
#ifndef COCKATRICE_PLAYER_INFO_H
|
||||||
#define COCKATRICE_PLAYER_INFO_H
|
#define COCKATRICE_PLAYER_INFO_H
|
||||||
|
|
||||||
#include "../../game_graphics/player/player_target.h"
|
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class PlayerInfo : public QObject
|
class PlayerInfo : public QObject
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,37 @@
|
||||||
#include "player_logic.h"
|
#include "player_logic.h"
|
||||||
|
|
||||||
#include "../../game_graphics/board/arrow_item.h"
|
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
#include "../../game_graphics/board/counter_general.h"
|
#include "../abstract_game.h"
|
||||||
#include "../../game_graphics/game_scene.h"
|
#include "../board/arrow_data.h"
|
||||||
#include "../../game_graphics/player/player_target.h"
|
#include "../board/counter_state.h"
|
||||||
#include "../../game_graphics/zones/hand_zone.h"
|
#include "../game_meta_info.h"
|
||||||
#include "../../game_graphics/zones/pile_zone.h"
|
#include "../zones/hand_zone_logic.h"
|
||||||
#include "../../game_graphics/zones/stack_zone.h"
|
#include "../zones/pile_zone_logic.h"
|
||||||
#include "../../game_graphics/zones/table_zone.h"
|
#include "../zones/stack_zone_logic.h"
|
||||||
#include "../../interface/theme_manager.h"
|
#include "../zones/table_zone_logic.h"
|
||||||
#include "../../interface/widgets/tabs/tab_game.h"
|
#include "libcockatrice/protocol/pb/serverinfo_card.pb.h"
|
||||||
#include "../board/card_list.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_actions.h"
|
||||||
|
#include "player_event_handler.h"
|
||||||
|
#include "player_info.h"
|
||||||
|
#include "player_manager.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMenu>
|
#include <QMapIterator>
|
||||||
#include <QMetaType>
|
#include <QMessageLogger>
|
||||||
#include <QPainter>
|
#include <QMutableMapIterator>
|
||||||
#include <QtConcurrent>
|
#include <QSet>
|
||||||
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
|
#include <QSharedPointer>
|
||||||
#include <libcockatrice/protocol/pb/command_set_card_counter.pb.h>
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/protocol/pb/event_create_arrow.pb.h>
|
|
||||||
#include <libcockatrice/protocol/pb/event_create_counter.pb.h>
|
|
||||||
#include <libcockatrice/protocol/pb/event_draw_cards.pb.h>
|
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_zone.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_zone.pb.h>
|
||||||
|
#include <libcockatrice/utility/card_ref.h>
|
||||||
#include <libcockatrice/utility/color.h>
|
#include <libcockatrice/utility/color.h>
|
||||||
|
#include <qalgorithms.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
PlayerLogic::PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
|
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)),
|
: QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)),
|
||||||
|
|
|
||||||
|
|
@ -7,57 +7,48 @@
|
||||||
#ifndef PLAYER_H
|
#ifndef PLAYER_H
|
||||||
#define PLAYER_H
|
#define PLAYER_H
|
||||||
|
|
||||||
#include "../../game_graphics/player/player_area.h"
|
#include "../zones/card_zone_logic.h"
|
||||||
#include "../../interface/widgets/menus/tearoff_menu.h"
|
|
||||||
#include "../board/arrow_data.h"
|
|
||||||
#include "../interface/deck_loader/loaded_deck.h"
|
|
||||||
#include "../zones/hand_zone_logic.h"
|
#include "../zones/hand_zone_logic.h"
|
||||||
#include "../zones/pile_zone_logic.h"
|
#include "../zones/pile_zone_logic.h"
|
||||||
#include "../zones/stack_zone_logic.h"
|
#include "../zones/stack_zone_logic.h"
|
||||||
#include "../zones/table_zone_logic.h"
|
#include "../zones/table_zone_logic.h"
|
||||||
#include "player_event_handler.h"
|
#include "libcockatrice/deck_list/deck_list.h"
|
||||||
#include "player_info.h"
|
#include "libcockatrice/utility/card_ref.h"
|
||||||
#include "player_manager.h"
|
#include "libcockatrice/utility/playmat_params.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QTimer>
|
#include <QObject>
|
||||||
#include <libcockatrice/filters/filter_string.h>
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/card_attributes.pb.h>
|
|
||||||
#include <libcockatrice/protocol/pb/game_event.pb.h>
|
|
||||||
#include <libcockatrice/utility/zone_names.h>
|
#include <libcockatrice/utility/zone_names.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
// IWYU pragma: keep
|
||||||
|
// ServerInfo_Card appears inside QList<...> in signal and slot
|
||||||
|
// signatures, which the moc-generated code needs to be complete.
|
||||||
|
#include <libcockatrice/protocol/pb/serverinfo_card.pb.h>
|
||||||
|
|
||||||
|
class CardItem;
|
||||||
|
class CounterState;
|
||||||
|
class QWidget;
|
||||||
|
class ServerInfo_PlayerProperties;
|
||||||
|
struct ArrowData;
|
||||||
|
struct LoadedDeck;
|
||||||
|
template <class T> class QSharedPointer;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(PlayerLog, "player");
|
inline Q_LOGGING_CATEGORY(PlayerLog, "player");
|
||||||
|
|
||||||
namespace google
|
|
||||||
{
|
|
||||||
namespace protobuf
|
|
||||||
{
|
|
||||||
class Message;
|
|
||||||
}
|
|
||||||
} // namespace google
|
|
||||||
class AbstractCardItem;
|
class AbstractCardItem;
|
||||||
class AbstractGame;
|
class AbstractGame;
|
||||||
class ArrowItem;
|
|
||||||
class ArrowTarget;
|
|
||||||
class CardDatabase;
|
|
||||||
class CardZone;
|
|
||||||
class CommandContainer;
|
|
||||||
class GameCommand;
|
|
||||||
class GameEvent;
|
|
||||||
class PlayerInfo;
|
class PlayerInfo;
|
||||||
class PlayerEventHandler;
|
class PlayerEventHandler;
|
||||||
class PlayerActions;
|
class PlayerActions;
|
||||||
class PlayerMenu;
|
|
||||||
class QAction;
|
|
||||||
class QMenu;
|
|
||||||
class ServerInfo_Arrow;
|
|
||||||
class ServerInfo_Card;
|
class ServerInfo_Card;
|
||||||
class ServerInfo_Counter;
|
class ServerInfo_Counter;
|
||||||
class ServerInfo_Player;
|
class ServerInfo_Player;
|
||||||
class ServerInfo_User;
|
class ServerInfo_User;
|
||||||
class TabGame;
|
|
||||||
|
|
||||||
const int MAX_TOKENS_PER_DIALOG = 99;
|
const int MAX_TOKENS_PER_DIALOG = 99;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,14 @@
|
||||||
#include "player_manager.h"
|
#include "player_manager.h"
|
||||||
|
|
||||||
#include "../abstract_game.h"
|
#include "../abstract_game.h"
|
||||||
|
#include "../game_state.h"
|
||||||
|
#include "player_info.h"
|
||||||
#include "player_logic.h"
|
#include "player_logic.h"
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
|
#include <QMapIterator>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
|
||||||
PlayerManager::PlayerManager(AbstractGame *_game,
|
PlayerManager::PlayerManager(AbstractGame *_game,
|
||||||
int _localPlayerId,
|
int _localPlayerId,
|
||||||
bool _localPlayerIsJudge,
|
bool _localPlayerIsJudge,
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,17 @@
|
||||||
#ifndef COCKATRICE_PLAYER_MANAGER_H
|
#ifndef COCKATRICE_PLAYER_MANAGER_H
|
||||||
#define COCKATRICE_PLAYER_MANAGER_H
|
#define COCKATRICE_PLAYER_MANAGER_H
|
||||||
|
|
||||||
|
#include "libcockatrice/protocol/pb/serverinfo_user.pb.h"
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
#include <libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h>
|
#include <libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class AbstractGame;
|
class AbstractGame;
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
|
|
||||||
class PlayerManager : public QObject
|
class PlayerManager : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
#include "replay.h"
|
#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 <QList>
|
||||||
|
|
||||||
|
class GameReplay;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
Replay::Replay(QObject *_parent, const GameReplay *_replay, bool isLocalGame) : AbstractGame(_parent)
|
Replay::Replay(QObject *_parent, const GameReplay *_replay, bool isLocalGame) : AbstractGame(_parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,11 @@
|
||||||
|
|
||||||
#include "abstract_game.h"
|
#include "abstract_game.h"
|
||||||
|
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class GameReplay;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class Replay : public AbstractGame
|
class Replay : public AbstractGame
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,25 @@
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include "../../client/translation.h"
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
|
#include "../../game_graphics/zones/card_zone.h"
|
||||||
#include "../../game_graphics/zones/view_zone.h"
|
#include "../../game_graphics/zones/view_zone.h"
|
||||||
|
#include "../board/card_list.h"
|
||||||
#include "../player/player_actions.h"
|
#include "../player/player_actions.h"
|
||||||
|
#include "../player/player_info.h"
|
||||||
#include "../player/player_logic.h"
|
#include "../player/player_logic.h"
|
||||||
|
#include "libcockatrice/card/database/card_database.h"
|
||||||
#include "view_zone_logic.h"
|
#include "view_zone_logic.h"
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QMessageLogger>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QVariant>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
|
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
|
||||||
#include <libcockatrice/utility/zone_names.h>
|
#include <libcockatrice/utility/zone_names.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param _player the player that the zone belongs to
|
* @param _player the player that the zone belongs to
|
||||||
|
|
|
||||||
|
|
@ -10,17 +10,18 @@
|
||||||
#include "../../client/translation.h"
|
#include "../../client/translation.h"
|
||||||
#include "../board/card_list.h"
|
#include "../board/card_list.h"
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class CardItem;
|
||||||
|
|
||||||
inline Q_LOGGING_CATEGORY(CardZoneLogicLog, "card_zone_logic");
|
inline Q_LOGGING_CATEGORY(CardZoneLogicLog, "card_zone_logic");
|
||||||
|
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
class ZoneViewZone;
|
class ZoneViewZone;
|
||||||
class QMenu;
|
|
||||||
class QAction;
|
|
||||||
class QPainter;
|
|
||||||
class CardDragItem;
|
|
||||||
|
|
||||||
class CardZoneLogic : public QObject
|
class CardZoneLogic : public QObject
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,9 @@
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
#include "card_zone_algorithms.h"
|
#include "card_zone_algorithms.h"
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
HandZoneLogic::HandZoneLogic(PlayerLogic *_player,
|
HandZoneLogic::HandZoneLogic(PlayerLogic *_player,
|
||||||
const QString &_name,
|
const QString &_name,
|
||||||
bool _hasCardAttr,
|
bool _hasCardAttr,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,12 @@
|
||||||
#define COCKATRICE_HAND_ZONE_LOGIC_H
|
#define COCKATRICE_HAND_ZONE_LOGIC_H
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class HandZoneLogic : public CardZoneLogic
|
class HandZoneLogic : public CardZoneLogic
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
#include "pile_zone_logic.h"
|
#include "pile_zone_logic.h"
|
||||||
|
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
|
#include "../board/card_list.h"
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
PileZoneLogic::PileZoneLogic(PlayerLogic *_player,
|
PileZoneLogic::PileZoneLogic(PlayerLogic *_player,
|
||||||
const QString &_name,
|
const QString &_name,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,12 @@
|
||||||
#define COCKATRICE_PILE_ZONE_LOGIC_H
|
#define COCKATRICE_PILE_ZONE_LOGIC_H
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class PileZoneLogic : public CardZoneLogic
|
class PileZoneLogic : public CardZoneLogic
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,9 @@
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
#include "card_zone_algorithms.h"
|
#include "card_zone_algorithms.h"
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
StackZoneLogic::StackZoneLogic(PlayerLogic *_player,
|
StackZoneLogic::StackZoneLogic(PlayerLogic *_player,
|
||||||
const QString &_name,
|
const QString &_name,
|
||||||
bool _hasCardAttr,
|
bool _hasCardAttr,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,12 @@
|
||||||
#define COCKATRICE_STACK_ZONE_LOGIC_H
|
#define COCKATRICE_STACK_ZONE_LOGIC_H
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class StackZoneLogic : public CardZoneLogic
|
class StackZoneLogic : public CardZoneLogic
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
#include "table_zone_logic.h"
|
#include "table_zone_logic.h"
|
||||||
|
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
|
#include "../board/card_list.h"
|
||||||
|
#include "libcockatrice/card/card_info.h"
|
||||||
|
|
||||||
|
#include <QPoint>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
TableZoneLogic::TableZoneLogic(PlayerLogic *_player,
|
TableZoneLogic::TableZoneLogic(PlayerLogic *_player,
|
||||||
const QString &_name,
|
const QString &_name,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,12 @@
|
||||||
#define COCKATRICE_TABLE_ZONE_LOGIC_H
|
#define COCKATRICE_TABLE_ZONE_LOGIC_H
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class TableZoneLogic : public CardZoneLogic
|
class TableZoneLogic : public CardZoneLogic
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,14 @@
|
||||||
|
|
||||||
#include "../../client/settings/cache_settings.h"
|
#include "../../client/settings/cache_settings.h"
|
||||||
#include "../../game_graphics/board/card_item.h"
|
#include "../../game_graphics/board/card_item.h"
|
||||||
|
#include "../board/card_list.h"
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/settings/interface_settings.h>
|
#include <libcockatrice/settings/interface_settings.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param _player the player that the cards are revealed to.
|
* @param _player the player that the cards are revealed to.
|
||||||
* @param _origZone the zone the cards were revealed from.
|
* @param _origZone the zone the cards were revealed from.
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,11 @@
|
||||||
#define COCKATRICE_VIEW_ZONE_LOGIC_H
|
#define COCKATRICE_VIEW_ZONE_LOGIC_H
|
||||||
#include "card_zone_logic.h"
|
#include "card_zone_logic.h"
|
||||||
|
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class PlayerLogic;
|
||||||
|
class QObject;
|
||||||
|
|
||||||
class ZoneViewZoneLogic : public CardZoneLogic
|
class ZoneViewZoneLogic : public CardZoneLogic
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,20 @@
|
||||||
|
|
||||||
#include "../../client/settings/cache_settings.h"
|
#include "../../client/settings/cache_settings.h"
|
||||||
#include "../z_values.h"
|
#include "../z_values.h"
|
||||||
|
#include "abstract_card_item.h"
|
||||||
|
|
||||||
|
#include <QBrush>
|
||||||
|
#include <QColor>
|
||||||
#include <QCursor>
|
#include <QCursor>
|
||||||
#include <QDebug>
|
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QPainterPath>
|
||||||
|
#include <QTransform>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/settings/cards_display_settings.h>
|
#include <libcockatrice/settings/cards_display_settings.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
|
class QPointF;
|
||||||
|
|
||||||
const QColor GHOST_MASK = QColor(255, 255, 255, 50);
|
const QColor GHOST_MASK = QColor(255, 255, 255, 50);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,17 @@
|
||||||
#ifndef ABSTRACTCARDDRAGITEM_H
|
#ifndef ABSTRACTCARDDRAGITEM_H
|
||||||
#define ABSTRACTCARDDRAGITEM_H
|
#define ABSTRACTCARDDRAGITEM_H
|
||||||
|
|
||||||
#include "abstract_card_item.h"
|
#include "../card_dimensions.h"
|
||||||
|
#include "graphics_item_type.h"
|
||||||
|
|
||||||
class QGraphicsScene;
|
#include <QGraphicsItem>
|
||||||
class CardZone;
|
#include <QList>
|
||||||
class CardInfo;
|
#include <QObject>
|
||||||
|
#include <QPointF>
|
||||||
|
#include <QRectF>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class AbstractCardItem;
|
||||||
|
|
||||||
class AbstractCardDragItem : public QObject, public QGraphicsItem
|
class AbstractCardDragItem : public QObject, public QGraphicsItem
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,42 @@
|
||||||
#include "../../client/settings/cache_settings.h"
|
#include "../../client/settings/cache_settings.h"
|
||||||
#include "../../interface/card_localization.h"
|
#include "../../interface/card_localization.h"
|
||||||
#include "../../interface/card_picture_loader/card_picture_loader.h"
|
#include "../../interface/card_picture_loader/card_picture_loader.h"
|
||||||
|
#include "../card_dimensions.h"
|
||||||
#include "../game_scene.h"
|
#include "../game_scene.h"
|
||||||
#include "../z_values.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 <QBrush>
|
||||||
|
#include <QChar>
|
||||||
#include <QCursor>
|
#include <QCursor>
|
||||||
|
#include <QFlags>
|
||||||
|
#include <QFont>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
|
#include <QHash>
|
||||||
|
#include <QLineF>
|
||||||
|
#include <QList>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QPainterPath>
|
||||||
|
#include <QPen>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QPointF>
|
||||||
|
#include <QRectF>
|
||||||
|
#include <QTransform>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <libcockatrice/card/database/card_database.h>
|
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
#include <libcockatrice/settings/appearance_settings.h>
|
#include <libcockatrice/settings/appearance_settings.h>
|
||||||
#include <libcockatrice/settings/cards_display_settings.h>
|
#include <libcockatrice/settings/cards_display_settings.h>
|
||||||
#include <libcockatrice/settings/debug_settings.h>
|
#include <libcockatrice/settings/debug_settings.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
|
class QSizeF;
|
||||||
|
|
||||||
AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, PlayerLogic *_owner, int _id)
|
AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, PlayerLogic *_owner, int _id)
|
||||||
: ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0),
|
: ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0),
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,22 @@
|
||||||
#define ABSTRACTCARDITEM_H
|
#define ABSTRACTCARDITEM_H
|
||||||
|
|
||||||
#include "../animated_item.h"
|
#include "../animated_item.h"
|
||||||
#include "../card_dimensions.h"
|
|
||||||
#include "arrow_target.h"
|
#include "arrow_target.h"
|
||||||
#include "graphics_item_type.h"
|
#include "graphics_item_type.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
|
#include <QGraphicsItem>
|
||||||
|
#include <QSizeF>
|
||||||
|
#include <QString>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/card/printing/exact_card.h>
|
#include <libcockatrice/card/printing/exact_card.h>
|
||||||
#include <libcockatrice/utility/card_ref.h>
|
#include <libcockatrice/utility/card_ref.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
|
class CardInfo;
|
||||||
|
class QPainter;
|
||||||
|
class QPoint;
|
||||||
|
|
||||||
class AbstractCardItem : public ArrowTarget, public IAnimatedItem
|
class AbstractCardItem : public ArrowTarget, public IAnimatedItem
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,21 +2,33 @@
|
||||||
|
|
||||||
#include "../../client/settings/cache_settings.h"
|
#include "../../client/settings/cache_settings.h"
|
||||||
#include "../../client/settings/shortcuts_settings.h"
|
#include "../../client/settings/shortcuts_settings.h"
|
||||||
|
#include "../../game/board/counter_state.h"
|
||||||
#include "../../game/player/player_actions.h"
|
#include "../../game/player/player_actions.h"
|
||||||
|
#include "../../game/player/player_info.h"
|
||||||
#include "../../game/player/player_logic.h"
|
#include "../../game/player/player_logic.h"
|
||||||
#include "../../game_graphics/board/translate_counter_name.h"
|
#include "../../game_graphics/board/translate_counter_name.h"
|
||||||
#include "../../interface/widgets/tabs/tab_game.h"
|
#include "../../interface/widgets/menus/tearoff_menu.h"
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QFlags>
|
||||||
|
#include <QGraphicsScene>
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
#include <QGraphicsView>
|
#include <QGraphicsView>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QMenu>
|
#include <QKeySequence>
|
||||||
|
#include <QList>
|
||||||
|
#include <QSharedPointer>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QVariant>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <libcockatrice/protocol/pb/command_inc_counter.pb.h>
|
#include <libcockatrice/protocol/pb/command_inc_counter.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_set_counter.pb.h>
|
#include <libcockatrice/protocol/pb/command_set_counter.pb.h>
|
||||||
#include <libcockatrice/utility/expression.h>
|
#include <libcockatrice/utility/expression.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
AbstractCounter::AbstractCounter(CounterState *state,
|
AbstractCounter::AbstractCounter(CounterState *state,
|
||||||
PlayerLogic *_player,
|
PlayerLogic *_player,
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,21 @@
|
||||||
#ifndef COUNTER_H
|
#ifndef COUNTER_H
|
||||||
#define COUNTER_H
|
#define COUNTER_H
|
||||||
|
|
||||||
#include "../../game/board/counter_state.h"
|
|
||||||
#include "../../interface/widgets/menus/tearoff_menu.h"
|
#include "../../interface/widgets/menus/tearoff_menu.h"
|
||||||
#include "../player/menu/abstract_player_component.h"
|
#include "../player/menu/abstract_player_component.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
#include <QGraphicsItem>
|
#include <QGraphicsItem>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
class PlayerLogic;
|
class PlayerLogic;
|
||||||
class QAction;
|
class QAction;
|
||||||
class QKeyEvent;
|
|
||||||
class QMenu;
|
class QMenu;
|
||||||
class QString;
|
class CounterState;
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
class AbstractCounter : public QObject, public QGraphicsItem, public AbstractPlayerComponent
|
class AbstractCounter : public QObject, public QGraphicsItem, public AbstractPlayerComponent
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,14 @@
|
||||||
#include "abstract_graphics_item.h"
|
#include "abstract_graphics_item.h"
|
||||||
|
|
||||||
|
#include <QBrush>
|
||||||
|
#include <QFont>
|
||||||
|
#include <QFontMetrics>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QRectF>
|
||||||
|
#include <QString>
|
||||||
|
#include <QTransform>
|
||||||
|
#include <QtGlobal>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
void AbstractGraphicsItem::paintNumberEllipse(int number,
|
void AbstractGraphicsItem::paintNumberEllipse(int number,
|
||||||
int fontSize,
|
int fontSize,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,12 @@
|
||||||
#ifndef ABSTRACTGRAPHICSITEM_H
|
#ifndef ABSTRACTGRAPHICSITEM_H
|
||||||
#define ABSTRACTGRAPHICSITEM_H
|
#define ABSTRACTGRAPHICSITEM_H
|
||||||
|
|
||||||
#include <QGraphicsItem>
|
#include <QColor>
|
||||||
|
#include <QGraphicsObject>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class QGraphicsItem;
|
||||||
|
class QPainter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parent class of all objects that appear in a game.
|
* Parent class of all objects that appear in a game.
|
||||||
|
|
|
||||||
|
|
@ -2,28 +2,42 @@
|
||||||
#include "arrow_item.h"
|
#include "arrow_item.h"
|
||||||
|
|
||||||
#include "../../client/settings/cache_settings.h"
|
#include "../../client/settings/cache_settings.h"
|
||||||
|
#include "../../game/board/arrow_data.h"
|
||||||
#include "../../game/player/player_actions.h"
|
#include "../../game/player/player_actions.h"
|
||||||
|
#include "../../game/player/player_info.h"
|
||||||
#include "../../game/player/player_logic.h"
|
#include "../../game/player/player_logic.h"
|
||||||
|
#include "../../game/zones/card_zone_logic.h"
|
||||||
#include "../game_scene.h"
|
#include "../game_scene.h"
|
||||||
#include "../player/player_target.h"
|
#include "../player/player_target.h"
|
||||||
#include "../z_values.h"
|
#include "../z_values.h"
|
||||||
#include "../zones/card_zone.h"
|
|
||||||
#include "card_item.h"
|
#include "card_item.h"
|
||||||
|
#include "libcockatrice/card/printing/exact_card.h"
|
||||||
|
#include "libcockatrice/protocol/pb/color.pb.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QBrush>
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
|
#include <QLineF>
|
||||||
|
#include <QLinearGradient>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QPen>
|
||||||
|
#include <QPoint>
|
||||||
|
#include <QString>
|
||||||
|
#include <QTransform>
|
||||||
|
#include <QtGlobal>
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
#include <libcockatrice/card/card_info.h>
|
#include <libcockatrice/card/card_info.h>
|
||||||
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
|
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_create_arrow.pb.h>
|
#include <libcockatrice/protocol/pb/command_create_arrow.pb.h>
|
||||||
#include <libcockatrice/protocol/pb/command_delete_arrow.pb.h>
|
|
||||||
#include <libcockatrice/settings/cards_display_settings.h>
|
#include <libcockatrice/settings/cards_display_settings.h>
|
||||||
#include <libcockatrice/settings/interface_settings.h>
|
#include <libcockatrice/settings/interface_settings.h>
|
||||||
#include <libcockatrice/utility/color.h>
|
#include <libcockatrice/utility/color.h>
|
||||||
#include <libcockatrice/utility/zone_names.h>
|
#include <libcockatrice/utility/zone_names.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue