diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3baf82a --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +*pch +.vscode +*pch +Build/x64 +.vs +.vscode/ +Build/.cmake/ +Build/.qt +Build/Build/ +KeyboardColor GUI/build +**generic +**/iconengine +**/imageformat +**/networkinformation +CppKeyboardColour/x64 +**/platforms +**/styles +**/CMakeFiles +*CKC.exe + diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..a83716d --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,23 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/KeyboardColor GUI/**", + "D:/Qt/6.9.2/mingw_64/include/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ], + "windowsSdkVersion": "10.0.19041.0", + "compilerPath": "cl.exe", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "windows-msvc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..0d89ebc --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/Build/KeyboardColor.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}/build", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "miDebuggerPath": "D:\\Qt\\Tools\\mingw1310_64\\bin\\gdb.exe", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cba258a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "cmake.sourceDirectory": "C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI", + "cmake.configureSettings": { + "CMAKE_PREFIX_PATH": "D:/Qt/6.9.2/mingw_64" + }, + "files.associations": { + "*.dbclient-js": "javascript", + "*.ejs": "html", + "qprocess": "cpp" + } +} \ No newline at end of file diff --git a/Build/CLEVO_KeyboardColour.exe b/Build/CLEVO_KeyboardColour.exe index 619be38..5773219 100644 Binary files a/Build/CLEVO_KeyboardColour.exe and b/Build/CLEVO_KeyboardColour.exe differ diff --git a/Build/CMakeCache.txt b/Build/CMakeCache.txt new file mode 100644 index 0000000..d057e62 --- /dev/null +++ b/Build/CMakeCache.txt @@ -0,0 +1,1340 @@ +# This is the CMakeCache file. +# For build in directory: c:/Programmation/Git/CppKeyboardColour/Build +# It was generated by CMake: D:/Qt/Tools/CMake_64/bin/cmake.exe +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/addr2line.exe + +//Path to a program. +CMAKE_AR:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/ar.exe + +//No help, variable specified on the command line. +CMAKE_BUILD_TYPE:STRING=Debug + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//No help, variable specified on the command line. +CMAKE_CXX_COMPILER:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/g++.exe + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/gcc-ar.exe + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/gcc-ranlib.exe + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Libraries linked by default with all C++ applications. +CMAKE_CXX_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 + +//No help, variable specified on the command line. +CMAKE_C_COMPILER:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/gcc.exe + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/dlltool.exe + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//No help, variable specified on the command line. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=C:/Programmation/Git/CppKeyboardColour/Build/CMakeFiles/pkgRedirects + +//Convert GNU import libraries to MS format (requires Visual Studio) +CMAKE_GNUtoMS:BOOL=OFF + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/KeyboardColor + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/ld.exe + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/mingw32-make.exe + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/nm.exe + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/objcopy.exe + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/objdump.exe + +//No help, variable specified on the command line. +CMAKE_PREFIX_PATH:STRING=D:/Qt/6.9.2/mingw_64 + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=KeyboardColor + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=0.1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/ranlib.exe + +//RC compiler +CMAKE_RC_COMPILER:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/windres.exe + +//Flags for Windows Resource Compiler during all build types. +CMAKE_RC_FLAGS:STRING= + +//Flags for Windows Resource Compiler during DEBUG builds. +CMAKE_RC_FLAGS_DEBUG:STRING= + +//Flags for Windows Resource Compiler during MINSIZEREL builds. +CMAKE_RC_FLAGS_MINSIZEREL:STRING= + +//Flags for Windows Resource Compiler during RELEASE builds. +CMAKE_RC_FLAGS_RELEASE:STRING= + +//Flags for Windows Resource Compiler during RELWITHDEBINFO builds. +CMAKE_RC_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_READELF:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/readelf.exe + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=D:/Qt/Tools/mingw1310_64/bin/strip.exe + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Value Computed by CMake +KeyboardColor_BINARY_DIR:STATIC=C:/Programmation/Git/CppKeyboardColour/Build + +//Value Computed by CMake +KeyboardColor_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +KeyboardColor_SOURCE_DIR:STATIC=C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI + +//Additional directories where find(Qt6 ...) host Qt components +// are searched +QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH:STRING= + +//Additional directories where find(Qt6 ...) components are searched +QT_ADDITIONAL_PACKAGES_PREFIX_PATH:STRING= + +//The directory containing a CMake configuration file for Qt6CorePrivate. +Qt6CorePrivate_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6CorePrivate + +//The directory containing a CMake configuration file for Qt6CoreTools. +Qt6CoreTools_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6CoreTools + +//The directory containing a CMake configuration file for Qt6Core. +Qt6Core_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6Core + +//The directory containing a CMake configuration file for Qt6EntryPointPrivate. +Qt6EntryPointPrivate_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6EntryPointPrivate + +//The directory containing a CMake configuration file for Qt6GuiPrivate. +Qt6GuiPrivate_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6GuiPrivate + +//The directory containing a CMake configuration file for Qt6GuiTools. +Qt6GuiTools_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6GuiTools + +//The directory containing a CMake configuration file for Qt6Gui. +Qt6Gui_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6Gui + +//The directory containing a CMake configuration file for Qt6WidgetsPrivate. +Qt6WidgetsPrivate_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6WidgetsPrivate + +//The directory containing a CMake configuration file for Qt6WidgetsTools. +Qt6WidgetsTools_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6WidgetsTools + +//The directory containing a CMake configuration file for Qt6Widgets. +Qt6Widgets_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6Widgets + +//The directory containing a CMake configuration file for Qt6ZlibPrivate. +Qt6ZlibPrivate_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6ZlibPrivate + +//The directory containing a CMake configuration file for Qt6. +Qt6_DIR:PATH=D:/Qt/6.9.2/mingw_64/lib/cmake/Qt6 + +//Path to a program. +Vulkan_GLSLANG_VALIDATOR_EXECUTABLE:FILEPATH=Vulkan_GLSLANG_VALIDATOR_EXECUTABLE-NOTFOUND + +//Path to a program. +Vulkan_GLSLC_EXECUTABLE:FILEPATH=Vulkan_GLSLC_EXECUTABLE-NOTFOUND + +//Path to a file. +Vulkan_INCLUDE_DIR:PATH=Vulkan_INCLUDE_DIR-NOTFOUND + +//Path to a library. +Vulkan_LIBRARY:FILEPATH=Vulkan_LIBRARY-NOTFOUND + +//Path to a program. +WINDEPLOYQT_EXECUTABLE:FILEPATH=D:/Qt/6.9.2/mingw_64/bin/windeployqt.exe + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=c:/Programmation/Git/CppKeyboardColour/Build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=30 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=5 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=D:/Qt/Tools/CMake_64/bin/cmake.exe +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=D:/Qt/Tools/CMake_64/bin/cpack.exe +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=D:/Qt/Tools/CMake_64/bin/ctest.exe +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES +CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=D:/Qt/Tools/CMake_64/bin/cmake-gui.exe +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=MinGW Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_COMPILER +CMAKE_RC_COMPILER-ADVANCED:INTERNAL=1 +CMAKE_RC_COMPILER_WORKS:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_FLAGS +CMAKE_RC_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_FLAGS_DEBUG +CMAKE_RC_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_FLAGS_MINSIZEREL +CMAKE_RC_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_FLAGS_RELEASE +CMAKE_RC_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RC_FLAGS_RELWITHDEBINFO +CMAKE_RC_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=D:/Qt/Tools/CMake_64/share/cmake-3.30 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//Details about finding WrapAtomic +FIND_PACKAGE_MESSAGE_DETAILS_WrapAtomic:INTERNAL=[1][v()] +//Test HAVE_STDATOMIC +HAVE_STDATOMIC:INTERNAL=1 +//Qt feature: abstractbutton (from target Qt6::Widgets) +QT_FEATURE_abstractbutton:INTERNAL=ON +//Qt feature: abstractslider (from target Qt6::Widgets) +QT_FEATURE_abstractslider:INTERNAL=ON +//Qt feature: accept4 (from target Qt6::Core) +QT_FEATURE_accept4:INTERNAL=OFF +//Qt feature: accessibility (from target Qt6::Gui) +QT_FEATURE_accessibility:INTERNAL=ON +//Qt feature: accessibility_atspi_bridge (from target Qt6::Gui) +QT_FEATURE_accessibility_atspi_bridge:INTERNAL=OFF +//Qt feature: action (from target Qt6::Gui) +QT_FEATURE_action:INTERNAL=ON +//Qt feature: aesni (from target Qt6::Core) +QT_FEATURE_aesni:INTERNAL=ON +//Qt feature: android_style_assets (from target Qt6::Core) +QT_FEATURE_android_style_assets:INTERNAL=OFF +//Qt feature: animation (from target Qt6::Core) +QT_FEATURE_animation:INTERNAL=ON +//Qt feature: appstore_compliant (from target Qt6::Core) +QT_FEATURE_appstore_compliant:INTERNAL=OFF +//Qt feature: arm_crc32 (from target Qt6::Core) +QT_FEATURE_arm_crc32:INTERNAL=OFF +//Qt feature: arm_crypto (from target Qt6::Core) +QT_FEATURE_arm_crypto:INTERNAL=OFF +//Qt feature: arm_sve (from target Qt6::Core) +QT_FEATURE_arm_sve:INTERNAL=OFF +//Qt feature: avx (from target Qt6::Core) +QT_FEATURE_avx:INTERNAL=ON +//Qt feature: avx2 (from target Qt6::Core) +QT_FEATURE_avx2:INTERNAL=ON +//Qt feature: avx512bw (from target Qt6::Core) +QT_FEATURE_avx512bw:INTERNAL=ON +//Qt feature: avx512cd (from target Qt6::Core) +QT_FEATURE_avx512cd:INTERNAL=ON +//Qt feature: avx512dq (from target Qt6::Core) +QT_FEATURE_avx512dq:INTERNAL=ON +//Qt feature: avx512er (from target Qt6::Core) +QT_FEATURE_avx512er:INTERNAL=ON +//Qt feature: avx512f (from target Qt6::Core) +QT_FEATURE_avx512f:INTERNAL=ON +//Qt feature: avx512ifma (from target Qt6::Core) +QT_FEATURE_avx512ifma:INTERNAL=ON +//Qt feature: avx512pf (from target Qt6::Core) +QT_FEATURE_avx512pf:INTERNAL=ON +//Qt feature: avx512vbmi (from target Qt6::Core) +QT_FEATURE_avx512vbmi:INTERNAL=ON +//Qt feature: avx512vbmi2 (from target Qt6::Core) +QT_FEATURE_avx512vbmi2:INTERNAL=ON +//Qt feature: avx512vl (from target Qt6::Core) +QT_FEATURE_avx512vl:INTERNAL=ON +//Qt feature: backtrace (from target Qt6::Core) +QT_FEATURE_backtrace:INTERNAL=OFF +//Qt feature: broken_threadlocal_dtors (from target Qt6::Core) +QT_FEATURE_broken_threadlocal_dtors:INTERNAL=ON +//Qt feature: buttongroup (from target Qt6::Widgets) +QT_FEATURE_buttongroup:INTERNAL=ON +//Qt feature: calendarwidget (from target Qt6::Widgets) +QT_FEATURE_calendarwidget:INTERNAL=ON +//Qt feature: cborstreamreader (from target Qt6::Core) +QT_FEATURE_cborstreamreader:INTERNAL=ON +//Qt feature: cborstreamwriter (from target Qt6::Core) +QT_FEATURE_cborstreamwriter:INTERNAL=ON +//Qt feature: checkbox (from target Qt6::Widgets) +QT_FEATURE_checkbox:INTERNAL=ON +//Qt feature: clipboard (from target Qt6::Gui) +QT_FEATURE_clipboard:INTERNAL=ON +//Qt feature: clock_gettime (from target Qt6::Core) +QT_FEATURE_clock_gettime:INTERNAL=OFF +//Qt feature: clock_monotonic (from target Qt6::Core) +QT_FEATURE_clock_monotonic:INTERNAL=OFF +//Qt feature: colordialog (from target Qt6::Widgets) +QT_FEATURE_colordialog:INTERNAL=ON +//Qt feature: colornames (from target Qt6::Gui) +QT_FEATURE_colornames:INTERNAL=ON +//Qt feature: columnview (from target Qt6::Widgets) +QT_FEATURE_columnview:INTERNAL=ON +//Qt feature: combobox (from target Qt6::Widgets) +QT_FEATURE_combobox:INTERNAL=ON +//Qt feature: commandlineparser (from target Qt6::Core) +QT_FEATURE_commandlineparser:INTERNAL=ON +//Qt feature: commandlinkbutton (from target Qt6::Widgets) +QT_FEATURE_commandlinkbutton:INTERNAL=ON +//Qt feature: completer (from target Qt6::Widgets) +QT_FEATURE_completer:INTERNAL=ON +//Qt feature: concatenatetablesproxymodel (from target Qt6::Core) +QT_FEATURE_concatenatetablesproxymodel:INTERNAL=ON +//Qt feature: concurrent (from target Qt6::Core) +QT_FEATURE_concurrent:INTERNAL=ON +//Qt feature: contextmenu (from target Qt6::Widgets) +QT_FEATURE_contextmenu:INTERNAL=ON +//Qt feature: cpp_winrt (from target Qt6::Core) +QT_FEATURE_cpp_winrt:INTERNAL=OFF +//Qt feature: cross_compile (from target Qt6::Core) +QT_FEATURE_cross_compile:INTERNAL=OFF +//Qt feature: cssparser (from target Qt6::Gui) +QT_FEATURE_cssparser:INTERNAL=ON +//Qt feature: ctf (from target Qt6::Core) +QT_FEATURE_ctf:INTERNAL=OFF +//Qt feature: cursor (from target Qt6::Gui) +QT_FEATURE_cursor:INTERNAL=ON +//Qt feature: cxx11_future (from target Qt6::Core) +QT_FEATURE_cxx11_future:INTERNAL=ON +//Qt feature: cxx17_filesystem (from target Qt6::Core) +QT_FEATURE_cxx17_filesystem:INTERNAL=ON +//Qt feature: cxx20 (from target Qt6::Core) +QT_FEATURE_cxx20:INTERNAL=OFF +//Qt feature: cxx20_format (from target Qt6::Core) +QT_FEATURE_cxx20_format:INTERNAL=ON +//Qt feature: cxx23_stacktrace (from target Qt6::Core) +QT_FEATURE_cxx23_stacktrace:INTERNAL=OFF +//Qt feature: cxx2a (from target Qt6::Core) +QT_FEATURE_cxx2a:INTERNAL=OFF +//Qt feature: cxx2b (from target Qt6::Core) +QT_FEATURE_cxx2b:INTERNAL=OFF +//Qt feature: cxx2c (from target Qt6::Core) +QT_FEATURE_cxx2c:INTERNAL=OFF +//Qt feature: datawidgetmapper (from target Qt6::Widgets) +QT_FEATURE_datawidgetmapper:INTERNAL=ON +//Qt feature: datestring (from target Qt6::Core) +QT_FEATURE_datestring:INTERNAL=ON +//Qt feature: datetimeedit (from target Qt6::Widgets) +QT_FEATURE_datetimeedit:INTERNAL=ON +//Qt feature: datetimeparser (from target Qt6::Core) +QT_FEATURE_datetimeparser:INTERNAL=ON +//Qt feature: dbus (from target Qt6::Core) +QT_FEATURE_dbus:INTERNAL=ON +//Qt feature: dbus_linked (from target Qt6::Core) +QT_FEATURE_dbus_linked:INTERNAL=OFF +//Qt feature: debug (from target Qt6::Core) +QT_FEATURE_debug:INTERNAL=OFF +//Qt feature: debug_and_release (from target Qt6::Core) +QT_FEATURE_debug_and_release:INTERNAL=OFF +//Qt feature: desktopservices (from target Qt6::Gui) +QT_FEATURE_desktopservices:INTERNAL=ON +//Qt feature: developer_build (from target Qt6::Core) +QT_FEATURE_developer_build:INTERNAL=OFF +//Qt feature: dial (from target Qt6::Widgets) +QT_FEATURE_dial:INTERNAL=ON +//Qt feature: dialog (from target Qt6::Widgets) +QT_FEATURE_dialog:INTERNAL=ON +//Qt feature: dialogbuttonbox (from target Qt6::Widgets) +QT_FEATURE_dialogbuttonbox:INTERNAL=ON +//Qt feature: direct2d (from target Qt6::Gui) +QT_FEATURE_direct2d:INTERNAL=ON +//Qt feature: direct2d1_1 (from target Qt6::Gui) +QT_FEATURE_direct2d1_1:INTERNAL=ON +//Qt feature: directfb (from target Qt6::Gui) +QT_FEATURE_directfb:INTERNAL=OFF +//Qt feature: directwrite (from target Qt6::Gui) +QT_FEATURE_directwrite:INTERNAL=ON +//Qt feature: directwrite3 (from target Qt6::Gui) +QT_FEATURE_directwrite3:INTERNAL=ON +//Qt feature: directwritecolrv1 (from target Qt6::Gui) +QT_FEATURE_directwritecolrv1:INTERNAL=OFF +//Qt feature: dladdr (from target Qt6::Core) +QT_FEATURE_dladdr:INTERNAL=OFF +//Qt feature: dlopen (from target Qt6::Core) +QT_FEATURE_dlopen:INTERNAL=OFF +//Qt feature: doc_snippets (from target Qt6::Core) +QT_FEATURE_doc_snippets:INTERNAL=OFF +//Qt feature: dockwidget (from target Qt6::Widgets) +QT_FEATURE_dockwidget:INTERNAL=ON +//Qt feature: doubleconversion (from target Qt6::Core) +QT_FEATURE_doubleconversion:INTERNAL=ON +//Qt feature: draganddrop (from target Qt6::Gui) +QT_FEATURE_draganddrop:INTERNAL=ON +//Qt feature: drm_atomic (from target Qt6::Gui) +QT_FEATURE_drm_atomic:INTERNAL=OFF +//Qt feature: dup3 (from target Qt6::Core) +QT_FEATURE_dup3:INTERNAL=OFF +//Qt feature: dynamicgl (from target Qt6::Gui) +QT_FEATURE_dynamicgl:INTERNAL=ON +//Qt feature: easingcurve (from target Qt6::Core) +QT_FEATURE_easingcurve:INTERNAL=ON +//Qt feature: effects (from target Qt6::Widgets) +QT_FEATURE_effects:INTERNAL=ON +//Qt feature: egl (from target Qt6::Gui) +QT_FEATURE_egl:INTERNAL=OFF +//Qt feature: egl_x11 (from target Qt6::Gui) +QT_FEATURE_egl_x11:INTERNAL=OFF +//Qt feature: eglfs (from target Qt6::Gui) +QT_FEATURE_eglfs:INTERNAL=OFF +//Qt feature: eglfs_brcm (from target Qt6::Gui) +QT_FEATURE_eglfs_brcm:INTERNAL=OFF +//Qt feature: eglfs_egldevice (from target Qt6::Gui) +QT_FEATURE_eglfs_egldevice:INTERNAL=OFF +//Qt feature: eglfs_gbm (from target Qt6::Gui) +QT_FEATURE_eglfs_gbm:INTERNAL=OFF +//Qt feature: eglfs_mali (from target Qt6::Gui) +QT_FEATURE_eglfs_mali:INTERNAL=OFF +//Qt feature: eglfs_openwfd (from target Qt6::Gui) +QT_FEATURE_eglfs_openwfd:INTERNAL=OFF +//Qt feature: eglfs_rcar (from target Qt6::Gui) +QT_FEATURE_eglfs_rcar:INTERNAL=OFF +//Qt feature: eglfs_viv (from target Qt6::Gui) +QT_FEATURE_eglfs_viv:INTERNAL=OFF +//Qt feature: eglfs_viv_wl (from target Qt6::Gui) +QT_FEATURE_eglfs_viv_wl:INTERNAL=OFF +//Qt feature: eglfs_vsp2 (from target Qt6::Gui) +QT_FEATURE_eglfs_vsp2:INTERNAL=OFF +//Qt feature: eglfs_x11 (from target Qt6::Gui) +QT_FEATURE_eglfs_x11:INTERNAL=OFF +//Qt feature: elf_private_full_version (from target Qt6::Core) +QT_FEATURE_elf_private_full_version:INTERNAL=OFF +//Qt feature: emojisegmenter (from target Qt6::Gui) +QT_FEATURE_emojisegmenter:INTERNAL=ON +//Qt feature: errormessage (from target Qt6::Widgets) +QT_FEATURE_errormessage:INTERNAL=ON +//Qt feature: etw (from target Qt6::Core) +QT_FEATURE_etw:INTERNAL=OFF +//Qt feature: evdev (from target Qt6::Gui) +QT_FEATURE_evdev:INTERNAL=OFF +//Qt feature: f16c (from target Qt6::Core) +QT_FEATURE_f16c:INTERNAL=ON +//Qt feature: filedialog (from target Qt6::Widgets) +QT_FEATURE_filedialog:INTERNAL=ON +//Qt feature: filesystemiterator (from target Qt6::Core) +QT_FEATURE_filesystemiterator:INTERNAL=ON +//Qt feature: filesystemmodel (from target Qt6::Gui) +QT_FEATURE_filesystemmodel:INTERNAL=ON +//Qt feature: filesystemwatcher (from target Qt6::Core) +QT_FEATURE_filesystemwatcher:INTERNAL=ON +//Qt feature: fontcombobox (from target Qt6::Widgets) +QT_FEATURE_fontcombobox:INTERNAL=ON +//Qt feature: fontconfig (from target Qt6::Gui) +QT_FEATURE_fontconfig:INTERNAL=OFF +//Qt feature: fontdialog (from target Qt6::Widgets) +QT_FEATURE_fontdialog:INTERNAL=ON +//Qt feature: force_asserts (from target Qt6::Core) +QT_FEATURE_force_asserts:INTERNAL=OFF +//Qt feature: force_bundled_libs (from target Qt6::Core) +QT_FEATURE_force_bundled_libs:INTERNAL=OFF +//Qt feature: force_debug_info (from target Qt6::Core) +QT_FEATURE_force_debug_info:INTERNAL=ON +//Qt feature: force_system_libs (from target Qt6::Core) +QT_FEATURE_force_system_libs:INTERNAL=OFF +//Qt feature: forkfd_pidfd (from target Qt6::Core) +QT_FEATURE_forkfd_pidfd:INTERNAL=OFF +//Qt feature: formlayout (from target Qt6::Widgets) +QT_FEATURE_formlayout:INTERNAL=ON +//Qt feature: framework (from target Qt6::Core) +QT_FEATURE_framework:INTERNAL=OFF +//Qt feature: freetype (from target Qt6::Gui) +QT_FEATURE_freetype:INTERNAL=ON +//Qt feature: fscompleter (from target Qt6::Widgets) +QT_FEATURE_fscompleter:INTERNAL=ON +//Qt feature: futimens (from target Qt6::Core) +QT_FEATURE_futimens:INTERNAL=OFF +//Qt feature: future (from target Qt6::Core) +QT_FEATURE_future:INTERNAL=ON +//Qt feature: gc_binaries (from target Qt6::Core) +QT_FEATURE_gc_binaries:INTERNAL=OFF +//Qt feature: gestures (from target Qt6::Core) +QT_FEATURE_gestures:INTERNAL=ON +//Qt feature: getauxval (from target Qt6::Core) +QT_FEATURE_getauxval:INTERNAL=OFF +//Qt feature: getentropy (from target Qt6::Core) +QT_FEATURE_getentropy:INTERNAL=OFF +//Qt feature: gif (from target Qt6::Gui) +QT_FEATURE_gif:INTERNAL=ON +//Qt feature: glib (from target Qt6::Core) +QT_FEATURE_glib:INTERNAL=OFF +//Qt feature: glibc_fortify_source (from target Qt6::Core) +QT_FEATURE_glibc_fortify_source:INTERNAL=OFF +//Qt feature: graphicseffect (from target Qt6::Widgets) +QT_FEATURE_graphicseffect:INTERNAL=ON +//Qt feature: graphicsframecapture (from target Qt6::Gui) +QT_FEATURE_graphicsframecapture:INTERNAL=OFF +//Qt feature: graphicsview (from target Qt6::Widgets) +QT_FEATURE_graphicsview:INTERNAL=ON +//Qt feature: groupbox (from target Qt6::Widgets) +QT_FEATURE_groupbox:INTERNAL=ON +//Qt feature: gtk3 (from target Qt6::Widgets) +QT_FEATURE_gtk3:INTERNAL=OFF +//Qt feature: gui (from target Qt6::Core) +QT_FEATURE_gui:INTERNAL=ON +//Qt feature: harfbuzz (from target Qt6::Gui) +QT_FEATURE_harfbuzz:INTERNAL=ON +//Qt feature: highdpiscaling (from target Qt6::Gui) +QT_FEATURE_highdpiscaling:INTERNAL=ON +//Qt feature: hijricalendar (from target Qt6::Core) +QT_FEATURE_hijricalendar:INTERNAL=ON +//Qt feature: ico (from target Qt6::Gui) +QT_FEATURE_ico:INTERNAL=ON +//Qt feature: icu (from target Qt6::Core) +QT_FEATURE_icu:INTERNAL=OFF +//Qt feature: identityproxymodel (from target Qt6::Core) +QT_FEATURE_identityproxymodel:INTERNAL=ON +//Qt feature: im (from target Qt6::Gui) +QT_FEATURE_im:INTERNAL=ON +//Qt feature: image_heuristic_mask (from target Qt6::Gui) +QT_FEATURE_image_heuristic_mask:INTERNAL=ON +//Qt feature: image_text (from target Qt6::Gui) +QT_FEATURE_image_text:INTERNAL=ON +//Qt feature: imageformat_bmp (from target Qt6::Gui) +QT_FEATURE_imageformat_bmp:INTERNAL=ON +//Qt feature: imageformat_jpeg (from target Qt6::Gui) +QT_FEATURE_imageformat_jpeg:INTERNAL=ON +//Qt feature: imageformat_png (from target Qt6::Gui) +QT_FEATURE_imageformat_png:INTERNAL=ON +//Qt feature: imageformat_ppm (from target Qt6::Gui) +QT_FEATURE_imageformat_ppm:INTERNAL=ON +//Qt feature: imageformat_xbm (from target Qt6::Gui) +QT_FEATURE_imageformat_xbm:INTERNAL=ON +//Qt feature: imageformat_xpm (from target Qt6::Gui) +QT_FEATURE_imageformat_xpm:INTERNAL=ON +//Qt feature: imageformatplugin (from target Qt6::Gui) +QT_FEATURE_imageformatplugin:INTERNAL=ON +//Qt feature: imageio_text_loading (from target Qt6::Gui) +QT_FEATURE_imageio_text_loading:INTERNAL=ON +//Qt feature: inotify (from target Qt6::Core) +QT_FEATURE_inotify:INTERNAL=OFF +//Qt feature: inputdialog (from target Qt6::Widgets) +QT_FEATURE_inputdialog:INTERNAL=ON +//Qt feature: integrityfb (from target Qt6::Gui) +QT_FEATURE_integrityfb:INTERNAL=OFF +//Qt feature: integrityhid (from target Qt6::Gui) +QT_FEATURE_integrityhid:INTERNAL=OFF +//Qt feature: intelcet (from target Qt6::Core) +QT_FEATURE_intelcet:INTERNAL=ON +//Qt feature: islamiccivilcalendar (from target Qt6::Core) +QT_FEATURE_islamiccivilcalendar:INTERNAL=ON +//Qt feature: itemmodel (from target Qt6::Core) +QT_FEATURE_itemmodel:INTERNAL=ON +//Qt feature: itemviews (from target Qt6::Widgets) +QT_FEATURE_itemviews:INTERNAL=ON +//Qt feature: jalalicalendar (from target Qt6::Core) +QT_FEATURE_jalalicalendar:INTERNAL=ON +//Qt feature: journald (from target Qt6::Core) +QT_FEATURE_journald:INTERNAL=OFF +//Qt feature: jpeg (from target Qt6::Gui) +QT_FEATURE_jpeg:INTERNAL=ON +//Qt feature: keysequenceedit (from target Qt6::Widgets) +QT_FEATURE_keysequenceedit:INTERNAL=ON +//Qt feature: kms (from target Qt6::Gui) +QT_FEATURE_kms:INTERNAL=OFF +//Qt feature: label (from target Qt6::Widgets) +QT_FEATURE_label:INTERNAL=ON +//Qt feature: largefile (from target Qt6::Core) +QT_FEATURE_largefile:INTERNAL=ON +//Qt feature: lasx (from target Qt6::Core) +QT_FEATURE_lasx:INTERNAL=OFF +//Qt feature: lcdnumber (from target Qt6::Widgets) +QT_FEATURE_lcdnumber:INTERNAL=ON +//Qt feature: libcpp_hardening (from target Qt6::Core) +QT_FEATURE_libcpp_hardening:INTERNAL=OFF +//Qt feature: libinput (from target Qt6::Gui) +QT_FEATURE_libinput:INTERNAL=OFF +//Qt feature: libinput_axis_api (from target Qt6::Gui) +QT_FEATURE_libinput_axis_api:INTERNAL=OFF +//Qt feature: libinput_hires_wheel_support (from target Qt6::Gui) +QT_FEATURE_libinput_hires_wheel_support:INTERNAL=OFF +//Qt feature: library (from target Qt6::Core) +QT_FEATURE_library:INTERNAL=ON +//Qt feature: libstdcpp_assertions (from target Qt6::Core) +QT_FEATURE_libstdcpp_assertions:INTERNAL=ON +//Qt feature: libudev (from target Qt6::Core) +QT_FEATURE_libudev:INTERNAL=OFF +//Qt feature: lineedit (from target Qt6::Widgets) +QT_FEATURE_lineedit:INTERNAL=ON +//Qt feature: linkat (from target Qt6::Core) +QT_FEATURE_linkat:INTERNAL=OFF +//Qt feature: linuxfb (from target Qt6::Gui) +QT_FEATURE_linuxfb:INTERNAL=OFF +//Qt feature: listview (from target Qt6::Widgets) +QT_FEATURE_listview:INTERNAL=ON +//Qt feature: listwidget (from target Qt6::Widgets) +QT_FEATURE_listwidget:INTERNAL=ON +//Qt feature: localtime_r (from target Qt6::Core) +QT_FEATURE_localtime_r:INTERNAL=OFF +//Qt feature: localtime_s (from target Qt6::Core) +QT_FEATURE_localtime_s:INTERNAL=ON +//Qt feature: lsx (from target Qt6::Core) +QT_FEATURE_lsx:INTERNAL=OFF +//Qt feature: lttng (from target Qt6::Core) +QT_FEATURE_lttng:INTERNAL=OFF +//Qt feature: mainwindow (from target Qt6::Widgets) +QT_FEATURE_mainwindow:INTERNAL=ON +//Qt feature: mdiarea (from target Qt6::Widgets) +QT_FEATURE_mdiarea:INTERNAL=ON +//Qt feature: memmem (from target Qt6::Core) +QT_FEATURE_memmem:INTERNAL=OFF +//Qt feature: memrchr (from target Qt6::Core) +QT_FEATURE_memrchr:INTERNAL=OFF +//Qt feature: menu (from target Qt6::Widgets) +QT_FEATURE_menu:INTERNAL=ON +//Qt feature: menubar (from target Qt6::Widgets) +QT_FEATURE_menubar:INTERNAL=ON +//Qt feature: messagebox (from target Qt6::Widgets) +QT_FEATURE_messagebox:INTERNAL=ON +//Qt feature: metal (from target Qt6::Gui) +QT_FEATURE_metal:INTERNAL=OFF +//Qt feature: mimetype (from target Qt6::Core) +QT_FEATURE_mimetype:INTERNAL=ON +//Qt feature: mimetype_database (from target Qt6::Core) +QT_FEATURE_mimetype_database:INTERNAL=ON +//Qt feature: mips_dsp (from target Qt6::Core) +QT_FEATURE_mips_dsp:INTERNAL=OFF +//Qt feature: mips_dspr2 (from target Qt6::Core) +QT_FEATURE_mips_dspr2:INTERNAL=OFF +//Qt feature: movie (from target Qt6::Gui) +QT_FEATURE_movie:INTERNAL=ON +//Qt feature: mtdev (from target Qt6::Gui) +QT_FEATURE_mtdev:INTERNAL=OFF +//Qt feature: multiprocess (from target Qt6::Gui) +QT_FEATURE_multiprocess:INTERNAL=ON +//Qt feature: neon (from target Qt6::Core) +QT_FEATURE_neon:INTERNAL=OFF +//Qt feature: network (from target Qt6::Core) +QT_FEATURE_network:INTERNAL=ON +//Qt feature: no_direct_extern_access (from target Qt6::Core) +QT_FEATURE_no_direct_extern_access:INTERNAL=OFF +//Qt feature: no_pkg_config (from target Qt6::Core) +QT_FEATURE_no_pkg_config:INTERNAL=ON +//Qt feature: opengl (from target Qt6::Gui) +QT_FEATURE_opengl:INTERNAL=ON +//Qt feature: opengles2 (from target Qt6::Gui) +QT_FEATURE_opengles2:INTERNAL=OFF +//Qt feature: opengles3 (from target Qt6::Gui) +QT_FEATURE_opengles3:INTERNAL=OFF +//Qt feature: opengles31 (from target Qt6::Gui) +QT_FEATURE_opengles31:INTERNAL=OFF +//Qt feature: opengles32 (from target Qt6::Gui) +QT_FEATURE_opengles32:INTERNAL=OFF +//Qt feature: openssl (from target Qt6::Core) +QT_FEATURE_openssl:INTERNAL=ON +//Qt feature: openssl_hash (from target Qt6::Core) +QT_FEATURE_openssl_hash:INTERNAL=OFF +//Qt feature: openssl_linked (from target Qt6::Core) +QT_FEATURE_openssl_linked:INTERNAL=OFF +//Qt feature: opensslv11 (from target Qt6::Core) +QT_FEATURE_opensslv11:INTERNAL=OFF +//Qt feature: opensslv30 (from target Qt6::Core) +QT_FEATURE_opensslv30:INTERNAL=ON +//Qt feature: openvg (from target Qt6::Gui) +QT_FEATURE_openvg:INTERNAL=OFF +//Qt feature: pcre2 (from target Qt6::Core) +QT_FEATURE_pcre2:INTERNAL=ON +//Qt feature: pdf (from target Qt6::Gui) +QT_FEATURE_pdf:INTERNAL=ON +//Qt feature: permissions (from target Qt6::Core) +QT_FEATURE_permissions:INTERNAL=ON +//Qt feature: picture (from target Qt6::Gui) +QT_FEATURE_picture:INTERNAL=ON +//Qt feature: pkg_config (from target Qt6::Core) +QT_FEATURE_pkg_config:INTERNAL=OFF +//Qt feature: plugin_manifest (from target Qt6::Core) +QT_FEATURE_plugin_manifest:INTERNAL=ON +//Qt feature: png (from target Qt6::Gui) +QT_FEATURE_png:INTERNAL=ON +//Qt feature: poll_exit_on_error (from target Qt6::Core) +QT_FEATURE_poll_exit_on_error:INTERNAL=OFF +//Qt feature: poll_poll (from target Qt6::Core) +QT_FEATURE_poll_poll:INTERNAL=OFF +//Qt feature: poll_pollts (from target Qt6::Core) +QT_FEATURE_poll_pollts:INTERNAL=OFF +//Qt feature: poll_ppoll (from target Qt6::Core) +QT_FEATURE_poll_ppoll:INTERNAL=OFF +//Qt feature: poll_select (from target Qt6::Core) +QT_FEATURE_poll_select:INTERNAL=OFF +//Qt feature: posix_fallocate (from target Qt6::Core) +QT_FEATURE_posix_fallocate:INTERNAL=OFF +//Qt feature: posix_sem (from target Qt6::Core) +QT_FEATURE_posix_sem:INTERNAL=ON +//Qt feature: posix_shm (from target Qt6::Core) +QT_FEATURE_posix_shm:INTERNAL=OFF +//Qt feature: precompile_header (from target Qt6::Core) +QT_FEATURE_precompile_header:INTERNAL=ON +//Qt feature: printsupport (from target Qt6::Core) +QT_FEATURE_printsupport:INTERNAL=ON +//Qt feature: private_tests (from target Qt6::Core) +QT_FEATURE_private_tests:INTERNAL=OFF +//Qt feature: process (from target Qt6::Core) +QT_FEATURE_process:INTERNAL=ON +//Qt feature: processenvironment (from target Qt6::Core) +QT_FEATURE_processenvironment:INTERNAL=ON +//Qt feature: progressbar (from target Qt6::Widgets) +QT_FEATURE_progressbar:INTERNAL=ON +//Qt feature: progressdialog (from target Qt6::Widgets) +QT_FEATURE_progressdialog:INTERNAL=ON +//Qt feature: proxymodel (from target Qt6::Core) +QT_FEATURE_proxymodel:INTERNAL=ON +//Qt feature: pthread_clockjoin (from target Qt6::Core) +QT_FEATURE_pthread_clockjoin:INTERNAL=OFF +//Qt feature: pthread_condattr_setclock (from target Qt6::Core) +QT_FEATURE_pthread_condattr_setclock:INTERNAL=OFF +//Qt feature: pthread_timedjoin (from target Qt6::Core) +QT_FEATURE_pthread_timedjoin:INTERNAL=OFF +//Qt feature: pushbutton (from target Qt6::Widgets) +QT_FEATURE_pushbutton:INTERNAL=ON +//Qt feature: qqnx_imf (from target Qt6::Gui) +QT_FEATURE_qqnx_imf:INTERNAL=OFF +//Qt feature: qqnx_pps (from target Qt6::Core) +QT_FEATURE_qqnx_pps:INTERNAL=OFF +//Qt feature: qtgui_threadpool (from target Qt6::Gui) +QT_FEATURE_qtgui_threadpool:INTERNAL=ON +//Qt feature: radiobutton (from target Qt6::Widgets) +QT_FEATURE_radiobutton:INTERNAL=ON +//Qt feature: raster_64bit (from target Qt6::Gui) +QT_FEATURE_raster_64bit:INTERNAL=ON +//Qt feature: raster_fp (from target Qt6::Gui) +QT_FEATURE_raster_fp:INTERNAL=ON +//Qt feature: rdrnd (from target Qt6::Core) +QT_FEATURE_rdrnd:INTERNAL=ON +//Qt feature: rdseed (from target Qt6::Core) +QT_FEATURE_rdseed:INTERNAL=ON +//Qt feature: reduce_exports (from target Qt6::Core) +QT_FEATURE_reduce_exports:INTERNAL=ON +//Qt feature: reduce_relocations (from target Qt6::Core) +QT_FEATURE_reduce_relocations:INTERNAL=OFF +//Qt feature: regularexpression (from target Qt6::Core) +QT_FEATURE_regularexpression:INTERNAL=ON +//Qt feature: relocatable (from target Qt6::Core) +QT_FEATURE_relocatable:INTERNAL=ON +//Qt feature: relro_now_linker (from target Qt6::Core) +QT_FEATURE_relro_now_linker:INTERNAL=OFF +//Qt feature: renameat2 (from target Qt6::Core) +QT_FEATURE_renameat2:INTERNAL=OFF +//Qt feature: resizehandler (from target Qt6::Widgets) +QT_FEATURE_resizehandler:INTERNAL=ON +//Qt feature: rpath (from target Qt6::Core) +QT_FEATURE_rpath:INTERNAL=OFF +//Qt feature: rubberband (from target Qt6::Widgets) +QT_FEATURE_rubberband:INTERNAL=ON +//Qt feature: run_opengl_tests (from target Qt6::Gui) +QT_FEATURE_run_opengl_tests:INTERNAL=ON +//Qt feature: scrollarea (from target Qt6::Widgets) +QT_FEATURE_scrollarea:INTERNAL=ON +//Qt feature: scrollbar (from target Qt6::Widgets) +QT_FEATURE_scrollbar:INTERNAL=ON +//Qt feature: scroller (from target Qt6::Widgets) +QT_FEATURE_scroller:INTERNAL=ON +//Qt feature: separate_debug_info (from target Qt6::Core) +QT_FEATURE_separate_debug_info:INTERNAL=ON +//Qt feature: sessionmanager (from target Qt6::Gui) +QT_FEATURE_sessionmanager:INTERNAL=ON +//Qt feature: settings (from target Qt6::Core) +QT_FEATURE_settings:INTERNAL=ON +//Qt feature: sha3_fast (from target Qt6::Core) +QT_FEATURE_sha3_fast:INTERNAL=ON +//Qt feature: shani (from target Qt6::Core) +QT_FEATURE_shani:INTERNAL=ON +//Qt feature: shared (from target Qt6::Core) +QT_FEATURE_shared:INTERNAL=ON +//Qt feature: sharedmemory (from target Qt6::Core) +QT_FEATURE_sharedmemory:INTERNAL=ON +//Qt feature: shortcut (from target Qt6::Core) +QT_FEATURE_shortcut:INTERNAL=ON +//Qt feature: signaling_nan (from target Qt6::Core) +QT_FEATURE_signaling_nan:INTERNAL=ON +//Qt feature: simulator_and_device (from target Qt6::Core) +QT_FEATURE_simulator_and_device:INTERNAL=OFF +//Qt feature: sizegrip (from target Qt6::Widgets) +QT_FEATURE_sizegrip:INTERNAL=ON +//Qt feature: slider (from target Qt6::Widgets) +QT_FEATURE_slider:INTERNAL=ON +//Qt feature: slog2 (from target Qt6::Core) +QT_FEATURE_slog2:INTERNAL=OFF +//Qt feature: sortfilterproxymodel (from target Qt6::Core) +QT_FEATURE_sortfilterproxymodel:INTERNAL=ON +//Qt feature: spinbox (from target Qt6::Widgets) +QT_FEATURE_spinbox:INTERNAL=ON +//Qt feature: splashscreen (from target Qt6::Widgets) +QT_FEATURE_splashscreen:INTERNAL=ON +//Qt feature: splitter (from target Qt6::Widgets) +QT_FEATURE_splitter:INTERNAL=ON +//Qt feature: sql (from target Qt6::Core) +QT_FEATURE_sql:INTERNAL=ON +//Qt feature: sse2 (from target Qt6::Core) +QT_FEATURE_sse2:INTERNAL=ON +//Qt feature: sse3 (from target Qt6::Core) +QT_FEATURE_sse3:INTERNAL=ON +//Qt feature: sse4_1 (from target Qt6::Core) +QT_FEATURE_sse4_1:INTERNAL=ON +//Qt feature: sse4_2 (from target Qt6::Core) +QT_FEATURE_sse4_2:INTERNAL=ON +//Qt feature: ssse3 (from target Qt6::Core) +QT_FEATURE_ssse3:INTERNAL=ON +//Qt feature: stack_clash_protection (from target Qt6::Core) +QT_FEATURE_stack_clash_protection:INTERNAL=ON +//Qt feature: stack_protector (from target Qt6::Core) +QT_FEATURE_stack_protector:INTERNAL=ON +//Qt feature: stackedwidget (from target Qt6::Widgets) +QT_FEATURE_stackedwidget:INTERNAL=ON +//Qt feature: standarditemmodel (from target Qt6::Gui) +QT_FEATURE_standarditemmodel:INTERNAL=ON +//Qt feature: static (from target Qt6::Core) +QT_FEATURE_static:INTERNAL=OFF +//Qt feature: statusbar (from target Qt6::Widgets) +QT_FEATURE_statusbar:INTERNAL=ON +//Qt feature: statustip (from target Qt6::Widgets) +QT_FEATURE_statustip:INTERNAL=ON +//Qt feature: std_atomic64 (from target Qt6::Core) +QT_FEATURE_std_atomic64:INTERNAL=ON +//Qt feature: stdlib_libcpp (from target Qt6::Core) +QT_FEATURE_stdlib_libcpp:INTERNAL=OFF +//Qt feature: stringlistmodel (from target Qt6::Core) +QT_FEATURE_stringlistmodel:INTERNAL=ON +//Qt feature: style_android (from target Qt6::Widgets) +QT_FEATURE_style_android:INTERNAL=OFF +//Qt feature: style_fusion (from target Qt6::Widgets) +QT_FEATURE_style_fusion:INTERNAL=ON +//Qt feature: style_mac (from target Qt6::Widgets) +QT_FEATURE_style_mac:INTERNAL=OFF +//Qt feature: style_stylesheet (from target Qt6::Widgets) +QT_FEATURE_style_stylesheet:INTERNAL=ON +//Qt feature: style_windows (from target Qt6::Widgets) +QT_FEATURE_style_windows:INTERNAL=ON +//Qt feature: style_windows11 (from target Qt6::Widgets) +QT_FEATURE_style_windows11:INTERNAL=ON +//Qt feature: style_windowsvista (from target Qt6::Widgets) +QT_FEATURE_style_windowsvista:INTERNAL=ON +//Qt feature: syntaxhighlighter (from target Qt6::Widgets) +QT_FEATURE_syntaxhighlighter:INTERNAL=ON +//Qt feature: syslog (from target Qt6::Core) +QT_FEATURE_syslog:INTERNAL=OFF +//Qt feature: system_doubleconversion (from target Qt6::Core) +QT_FEATURE_system_doubleconversion:INTERNAL=OFF +//Qt feature: system_freetype (from target Qt6::Gui) +QT_FEATURE_system_freetype:INTERNAL=OFF +//Qt feature: system_harfbuzz (from target Qt6::Gui) +QT_FEATURE_system_harfbuzz:INTERNAL=OFF +//Qt feature: system_jpeg (from target Qt6::Gui) +QT_FEATURE_system_jpeg:INTERNAL=OFF +//Qt feature: system_libb2 (from target Qt6::Core) +QT_FEATURE_system_libb2:INTERNAL=OFF +//Qt feature: system_pcre2 (from target Qt6::Core) +QT_FEATURE_system_pcre2:INTERNAL=OFF +//Qt feature: system_png (from target Qt6::Gui) +QT_FEATURE_system_png:INTERNAL=OFF +//Qt feature: system_textmarkdownreader (from target Qt6::Gui) +QT_FEATURE_system_textmarkdownreader:INTERNAL=OFF +//Qt feature: system_xcb_xinput (from target Qt6::Gui) +QT_FEATURE_system_xcb_xinput:INTERNAL=OFF +//Qt feature: system_zlib (from target Qt6::Core) +QT_FEATURE_system_zlib:INTERNAL=OFF +//Qt feature: systemsemaphore (from target Qt6::Core) +QT_FEATURE_systemsemaphore:INTERNAL=ON +//Qt feature: systemtrayicon (from target Qt6::Gui) +QT_FEATURE_systemtrayicon:INTERNAL=ON +//Qt feature: sysv_sem (from target Qt6::Core) +QT_FEATURE_sysv_sem:INTERNAL=OFF +//Qt feature: sysv_shm (from target Qt6::Core) +QT_FEATURE_sysv_shm:INTERNAL=OFF +//Qt feature: tabbar (from target Qt6::Widgets) +QT_FEATURE_tabbar:INTERNAL=ON +//Qt feature: tabletevent (from target Qt6::Gui) +QT_FEATURE_tabletevent:INTERNAL=ON +//Qt feature: tableview (from target Qt6::Widgets) +QT_FEATURE_tableview:INTERNAL=ON +//Qt feature: tablewidget (from target Qt6::Widgets) +QT_FEATURE_tablewidget:INTERNAL=ON +//Qt feature: tabwidget (from target Qt6::Widgets) +QT_FEATURE_tabwidget:INTERNAL=ON +//Qt feature: temporaryfile (from target Qt6::Core) +QT_FEATURE_temporaryfile:INTERNAL=ON +//Qt feature: test_gui (from target Qt6::Core) +QT_FEATURE_test_gui:INTERNAL=ON +//Qt feature: testlib (from target Qt6::Core) +QT_FEATURE_testlib:INTERNAL=ON +//Qt feature: textbrowser (from target Qt6::Widgets) +QT_FEATURE_textbrowser:INTERNAL=ON +//Qt feature: textdate (from target Qt6::Core) +QT_FEATURE_textdate:INTERNAL=ON +//Qt feature: textedit (from target Qt6::Widgets) +QT_FEATURE_textedit:INTERNAL=ON +//Qt feature: texthtmlparser (from target Qt6::Gui) +QT_FEATURE_texthtmlparser:INTERNAL=ON +//Qt feature: textmarkdownreader (from target Qt6::Gui) +QT_FEATURE_textmarkdownreader:INTERNAL=ON +//Qt feature: textmarkdownwriter (from target Qt6::Gui) +QT_FEATURE_textmarkdownwriter:INTERNAL=ON +//Qt feature: textodfwriter (from target Qt6::Gui) +QT_FEATURE_textodfwriter:INTERNAL=ON +//Qt feature: thread (from target Qt6::Core) +QT_FEATURE_thread:INTERNAL=ON +//Qt feature: timezone (from target Qt6::Core) +QT_FEATURE_timezone:INTERNAL=ON +//Qt feature: timezone_locale (from target Qt6::Core) +QT_FEATURE_timezone_locale:INTERNAL=ON +//Qt feature: timezone_tzdb (from target Qt6::Core) +QT_FEATURE_timezone_tzdb:INTERNAL=OFF +//Qt feature: toolbar (from target Qt6::Widgets) +QT_FEATURE_toolbar:INTERNAL=ON +//Qt feature: toolbox (from target Qt6::Widgets) +QT_FEATURE_toolbox:INTERNAL=ON +//Qt feature: toolbutton (from target Qt6::Widgets) +QT_FEATURE_toolbutton:INTERNAL=ON +//Qt feature: tooltip (from target Qt6::Widgets) +QT_FEATURE_tooltip:INTERNAL=ON +//Qt feature: translation (from target Qt6::Core) +QT_FEATURE_translation:INTERNAL=ON +//Qt feature: transposeproxymodel (from target Qt6::Core) +QT_FEATURE_transposeproxymodel:INTERNAL=ON +//Qt feature: treeview (from target Qt6::Widgets) +QT_FEATURE_treeview:INTERNAL=ON +//Qt feature: treewidget (from target Qt6::Widgets) +QT_FEATURE_treewidget:INTERNAL=ON +//Qt feature: trivial_auto_var_init_pattern (from target Qt6::Core) +QT_FEATURE_trivial_auto_var_init_pattern:INTERNAL=OFF +//Qt feature: tslib (from target Qt6::Gui) +QT_FEATURE_tslib:INTERNAL=OFF +//Qt feature: tuiotouch (from target Qt6::Gui) +QT_FEATURE_tuiotouch:INTERNAL=ON +//Qt feature: undocommand (from target Qt6::Gui) +QT_FEATURE_undocommand:INTERNAL=ON +//Qt feature: undogroup (from target Qt6::Gui) +QT_FEATURE_undogroup:INTERNAL=ON +//Qt feature: undostack (from target Qt6::Gui) +QT_FEATURE_undostack:INTERNAL=ON +//Qt feature: undoview (from target Qt6::Widgets) +QT_FEATURE_undoview:INTERNAL=ON +//Qt feature: use_bfd_linker (from target Qt6::Core) +QT_FEATURE_use_bfd_linker:INTERNAL=OFF +//Qt feature: use_gold_linker (from target Qt6::Core) +QT_FEATURE_use_gold_linker:INTERNAL=OFF +//Qt feature: use_lld_linker (from target Qt6::Core) +QT_FEATURE_use_lld_linker:INTERNAL=OFF +//Qt feature: use_mold_linker (from target Qt6::Core) +QT_FEATURE_use_mold_linker:INTERNAL=OFF +//Qt feature: vaes (from target Qt6::Core) +QT_FEATURE_vaes:INTERNAL=ON +//Qt feature: validator (from target Qt6::Gui) +QT_FEATURE_validator:INTERNAL=ON +//Qt feature: version_tagging (from target Qt6::Core) +QT_FEATURE_version_tagging:INTERNAL=ON +//Qt feature: vkgen (from target Qt6::Gui) +QT_FEATURE_vkgen:INTERNAL=ON +//Qt feature: vkkhrdisplay (from target Qt6::Gui) +QT_FEATURE_vkkhrdisplay:INTERNAL=OFF +//Qt feature: vnc (from target Qt6::Gui) +QT_FEATURE_vnc:INTERNAL=OFF +//Qt feature: vsp2 (from target Qt6::Gui) +QT_FEATURE_vsp2:INTERNAL=OFF +//Qt feature: vulkan (from target Qt6::Gui) +QT_FEATURE_vulkan:INTERNAL=ON +//Qt feature: vxpipedrv (from target Qt6::Core) +QT_FEATURE_vxpipedrv:INTERNAL=OFF +//Qt feature: vxworksevdev (from target Qt6::Gui) +QT_FEATURE_vxworksevdev:INTERNAL=OFF +//Qt feature: wasm_exceptions (from target Qt6::Core) +QT_FEATURE_wasm_exceptions:INTERNAL=OFF +//Qt feature: wasm_jspi (from target Qt6::Core) +QT_FEATURE_wasm_jspi:INTERNAL=OFF +//Qt feature: wasm_simd128 (from target Qt6::Core) +QT_FEATURE_wasm_simd128:INTERNAL=OFF +//Qt feature: wayland (from target Qt6::Gui) +QT_FEATURE_wayland:INTERNAL=OFF +//Qt feature: whatsthis (from target Qt6::Gui) +QT_FEATURE_whatsthis:INTERNAL=ON +//Qt feature: wheelevent (from target Qt6::Gui) +QT_FEATURE_wheelevent:INTERNAL=ON +//Qt feature: widgets (from target Qt6::Core) +QT_FEATURE_widgets:INTERNAL=ON +//Qt feature: widgettextcontrol (from target Qt6::Widgets) +QT_FEATURE_widgettextcontrol:INTERNAL=ON +//Qt feature: wizard (from target Qt6::Widgets) +QT_FEATURE_wizard:INTERNAL=ON +//Qt feature: x86intrin (from target Qt6::Core) +QT_FEATURE_x86intrin:INTERNAL=ON +//Qt feature: xcb (from target Qt6::Gui) +QT_FEATURE_xcb:INTERNAL=OFF +//Qt feature: xcb_egl_plugin (from target Qt6::Gui) +QT_FEATURE_xcb_egl_plugin:INTERNAL=OFF +//Qt feature: xcb_glx (from target Qt6::Gui) +QT_FEATURE_xcb_glx:INTERNAL=OFF +//Qt feature: xcb_glx_plugin (from target Qt6::Gui) +QT_FEATURE_xcb_glx_plugin:INTERNAL=OFF +//Qt feature: xcb_native_painting (from target Qt6::Gui) +QT_FEATURE_xcb_native_painting:INTERNAL=OFF +//Qt feature: xcb_sm (from target Qt6::Gui) +QT_FEATURE_xcb_sm:INTERNAL=OFF +//Qt feature: xcb_xlib (from target Qt6::Gui) +QT_FEATURE_xcb_xlib:INTERNAL=OFF +//Qt feature: xkbcommon (from target Qt6::Gui) +QT_FEATURE_xkbcommon:INTERNAL=OFF +//Qt feature: xkbcommon_x11 (from target Qt6::Gui) +QT_FEATURE_xkbcommon_x11:INTERNAL=OFF +//Qt feature: xlib (from target Qt6::Gui) +QT_FEATURE_xlib:INTERNAL=OFF +//Qt feature: xml (from target Qt6::Core) +QT_FEATURE_xml:INTERNAL=ON +//Qt feature: xmlstream (from target Qt6::Core) +QT_FEATURE_xmlstream:INTERNAL=ON +//Qt feature: xmlstreamreader (from target Qt6::Core) +QT_FEATURE_xmlstreamreader:INTERNAL=ON +//Qt feature: xmlstreamwriter (from target Qt6::Core) +QT_FEATURE_xmlstreamwriter:INTERNAL=ON +//Qt feature: xrender (from target Qt6::Gui) +QT_FEATURE_xrender:INTERNAL=OFF +//Qt feature: zstd (from target Qt6::Core) +QT_FEATURE_zstd:INTERNAL=OFF +//ADVANCED property for variable: Vulkan_GLSLANG_VALIDATOR_EXECUTABLE +Vulkan_GLSLANG_VALIDATOR_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_GLSLC_EXECUTABLE +Vulkan_GLSLC_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_INCLUDE_DIR +Vulkan_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_LIBRARY +Vulkan_LIBRARY-ADVANCED:INTERNAL=1 +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=C:/Program Files (x86)/KeyboardColor + diff --git a/Build/D3Dcompiler_47.dll b/Build/D3Dcompiler_47.dll new file mode 100644 index 0000000..56512f5 Binary files /dev/null and b/Build/D3Dcompiler_47.dll differ diff --git a/Build/KeyboardColor.exe b/Build/KeyboardColor.exe new file mode 100644 index 0000000..60278be Binary files /dev/null and b/Build/KeyboardColor.exe differ diff --git a/Build/Makefile b/Build/Makefile new file mode 100644 index 0000000..5fc4ebe --- /dev/null +++ b/Build/Makefile @@ -0,0 +1,298 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "MinGW Makefiles" Generator, CMake Version 3.30 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +SHELL = cmd.exe + +# The CMake executable. +CMAKE_COMMAND = D:\Qt\Tools\CMake_64\bin\cmake.exe + +# The command to remove a file. +RM = D:\Qt\Tools\CMake_64\bin\cmake.exe -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "C:\Programmation\Git\CppKeyboardColour\KeyboardColor GUI" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = C:\Programmation\Git\CppKeyboardColour\Build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + D:\Qt\Tools\CMake_64\bin\cmake-gui.exe -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + D:\Qt\Tools\CMake_64\bin\cmake.exe --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start C:\Programmation\Git\CppKeyboardColour\Build\CMakeFiles C:\Programmation\Git\CppKeyboardColour\Build\\CMakeFiles\progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start C:\Programmation\Git\CppKeyboardColour\Build\CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named KeyboardColor + +# Build rule for target. +KeyboardColor: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 KeyboardColor +.PHONY : KeyboardColor + +# fast build rule for target. +KeyboardColor/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/build +.PHONY : KeyboardColor/fast + +#============================================================================= +# Target rules for targets named KeyboardColor_autogen_timestamp_deps + +# Build rule for target. +KeyboardColor_autogen_timestamp_deps: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 KeyboardColor_autogen_timestamp_deps +.PHONY : KeyboardColor_autogen_timestamp_deps + +# fast build rule for target. +KeyboardColor_autogen_timestamp_deps/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor_autogen_timestamp_deps.dir\build.make CMakeFiles/KeyboardColor_autogen_timestamp_deps.dir/build +.PHONY : KeyboardColor_autogen_timestamp_deps/fast + +#============================================================================= +# Target rules for targets named KeyboardColor_autogen + +# Build rule for target. +KeyboardColor_autogen: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 KeyboardColor_autogen +.PHONY : KeyboardColor_autogen + +# fast build rule for target. +KeyboardColor_autogen/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor_autogen.dir\build.make CMakeFiles/KeyboardColor_autogen.dir/build +.PHONY : KeyboardColor_autogen/fast + +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.obj: KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.obj +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.obj + +# target to build an object file +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.obj: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.obj +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.obj + +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.i: KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.i +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.i + +# target to preprocess a source file +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.i +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.i + +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.s: KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.s +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.s + +# target to generate assembly for a file +KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.s +.PHONY : KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.s + +KeyboardColor_autogen/mocs_compilation.obj: KeyboardColor_autogen/mocs_compilation.cpp.obj +.PHONY : KeyboardColor_autogen/mocs_compilation.obj + +# target to build an object file +KeyboardColor_autogen/mocs_compilation.cpp.obj: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/mocs_compilation.cpp.obj +.PHONY : KeyboardColor_autogen/mocs_compilation.cpp.obj + +KeyboardColor_autogen/mocs_compilation.i: KeyboardColor_autogen/mocs_compilation.cpp.i +.PHONY : KeyboardColor_autogen/mocs_compilation.i + +# target to preprocess a source file +KeyboardColor_autogen/mocs_compilation.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/mocs_compilation.cpp.i +.PHONY : KeyboardColor_autogen/mocs_compilation.cpp.i + +KeyboardColor_autogen/mocs_compilation.s: KeyboardColor_autogen/mocs_compilation.cpp.s +.PHONY : KeyboardColor_autogen/mocs_compilation.s + +# target to generate assembly for a file +KeyboardColor_autogen/mocs_compilation.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/mocs_compilation.cpp.s +.PHONY : KeyboardColor_autogen/mocs_compilation.cpp.s + +appicon.obj: appicon.rc.obj +.PHONY : appicon.obj + +# target to build an object file +appicon.rc.obj: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/appicon.rc.obj +.PHONY : appicon.rc.obj + +keyboardcoulour.obj: keyboardcoulour.cpp.obj +.PHONY : keyboardcoulour.obj + +# target to build an object file +keyboardcoulour.cpp.obj: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/keyboardcoulour.cpp.obj +.PHONY : keyboardcoulour.cpp.obj + +keyboardcoulour.i: keyboardcoulour.cpp.i +.PHONY : keyboardcoulour.i + +# target to preprocess a source file +keyboardcoulour.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/keyboardcoulour.cpp.i +.PHONY : keyboardcoulour.cpp.i + +keyboardcoulour.s: keyboardcoulour.cpp.s +.PHONY : keyboardcoulour.s + +# target to generate assembly for a file +keyboardcoulour.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/keyboardcoulour.cpp.s +.PHONY : keyboardcoulour.cpp.s + +main.obj: main.cpp.obj +.PHONY : main.obj + +# target to build an object file +main.cpp.obj: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/main.cpp.obj +.PHONY : main.cpp.obj + +main.i: main.cpp.i +.PHONY : main.i + +# target to preprocess a source file +main.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/main.cpp.i +.PHONY : main.cpp.i + +main.s: main.cpp.s +.PHONY : main.s + +# target to generate assembly for a file +main.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles\KeyboardColor.dir\build.make CMakeFiles/KeyboardColor.dir/main.cpp.s +.PHONY : main.cpp.s + +# Help Target +help: + @echo The following are some of the valid targets for this Makefile: + @echo ... all (the default if no target is provided) + @echo ... clean + @echo ... depend + @echo ... edit_cache + @echo ... rebuild_cache + @echo ... KeyboardColor_autogen + @echo ... KeyboardColor_autogen_timestamp_deps + @echo ... KeyboardColor + @echo ... KeyboardColor_autogen/EWIEGA46WW/qrc_resources.obj + @echo ... KeyboardColor_autogen/EWIEGA46WW/qrc_resources.i + @echo ... KeyboardColor_autogen/EWIEGA46WW/qrc_resources.s + @echo ... KeyboardColor_autogen/mocs_compilation.obj + @echo ... KeyboardColor_autogen/mocs_compilation.i + @echo ... KeyboardColor_autogen/mocs_compilation.s + @echo ... appicon.obj + @echo ... keyboardcoulour.obj + @echo ... keyboardcoulour.i + @echo ... keyboardcoulour.s + @echo ... main.obj + @echo ... main.i + @echo ... main.s +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/Build/Qt6Core.dll b/Build/Qt6Core.dll new file mode 100644 index 0000000..5af786a Binary files /dev/null and b/Build/Qt6Core.dll differ diff --git a/Build/Qt6Gui.dll b/Build/Qt6Gui.dll new file mode 100644 index 0000000..0512449 Binary files /dev/null and b/Build/Qt6Gui.dll differ diff --git a/Build/Qt6Network.dll b/Build/Qt6Network.dll new file mode 100644 index 0000000..054f878 Binary files /dev/null and b/Build/Qt6Network.dll differ diff --git a/Build/Qt6Svg.dll b/Build/Qt6Svg.dll new file mode 100644 index 0000000..05309f2 Binary files /dev/null and b/Build/Qt6Svg.dll differ diff --git a/Build/Qt6Widgets.dll b/Build/Qt6Widgets.dll new file mode 100644 index 0000000..1748dc5 Binary files /dev/null and b/Build/Qt6Widgets.dll differ diff --git a/Build/README.md b/Build/README.md new file mode 100644 index 0000000..4507bf5 --- /dev/null +++ b/Build/README.md @@ -0,0 +1,123 @@ +# CLEVO Keyboard Colour Program (C++) + +**A C++ version of the original "keyboard-colour-program" developed in C#.** + +This is a cleaner, more organized, and efficient version of the initial program. It is designed to provide enhanced features for customizing CLEVO keyboards with **RGB** lighting, supporting both **3-zone** and **1-zone** keyboards. The program also includes a variety of animated effects to enhance your keyboard’s visual experience. + +--- + +## 🎨 Current Features + +- **Support for CLEVO keyboards:** + - **RGB 3-zone keyboards**. + - **RGB 1-zone keyboards**. +- **Predefined Animated Effects:** + - 🌈 **Fading Colors:** Smooth color transitions (predefined themes). + - 🎥 **Optimized Animations:** Enhanced visual effects using animation objects. + +⚠️ **Important Note:** Ensure you run this program **as an administrator**, as Windows Management Instrumentation (WMI) requires administrative privileges to function properly. + +⚠️ **Warning:** The predefined fading theme may utilize **15% to 20% of CPU** at certain times. This will be optimized in future updates. + +⚠️ **Warning (2):** Ensure that the **InsydeDHCU.dll** file is in the same directory as `CLEVO_KeyboardColour.exe` if you're using a **Single-Zone** keyboard. + +--- + +## 🔧 Functional Commands + +The following commands are supported and can be executed via the **Command Prompt**. + +### 🖥️ General Syntax: +Navigate to the folder containing the executable files (e.g., `CppKeyboardColour/Build/`) and run the commands in **administrator mode**. To execute the `.exe` files, prepend the `.\` before the command. + +```bash +.\CLEVO_KeyboardColour.exe theme [themeName] +``` + +### 🎨 Supported Themes: + +- **Turn Backlight Off:** + ```bash + .\CLEVO_KeyboardColour.exe theme off + ``` + 🖤 Turns off the keyboard backlight. + +- **Default Backlight:** + ```bash + .\CLEVO_KeyboardColour.exe theme default + ``` + 💙 Enables the default keyboard backlight colour (Solid Blue). + +- **Breathing Effect:** + ```bash + .\CLEVO_KeyboardColour.exe theme breathe + ``` + 🌬️ Enables a breathing effect (smooth pulsing transitions between colors). + +- **Colourshift:** + ```bash + .\CLEVO_KeyboardColour.exe theme colourshift + ``` + 🔄 Alternates colors for **RGB** keyboards (designed for 3-zone keyboards only!). + +- **Fresh Breathe:** + ```bash + .\CLEVO_KeyboardColour.exe theme freshbreathe + ``` + 🌀 A custom theme designed by **@mehrshad315**, featuring an additional blue tone. + +- **Colour Transform (Rainbow Sweep):** + ```bash + .\CLEVO_KeyboardColour.exe theme colourtransform + ``` + 🌈 Creates a rainbow sweep effect with smooth transitions. + +- **Blink (Pulsating Blink):** + ```bash + .\CLEVO_KeyboardColour.exe theme blink + ``` + ✨ Makes the keyboard lights blink in a pulsating pattern. + +--- + +## 🛠️ How to Use + +1. Navigate to the folder containing the executable files: + ``` + CppKeyboardColour/Build/ + ``` + +2. Open a **Command Prompt** in Administrator mode: + - Search for "Command Prompt" in the Windows search bar. + - Right-click and select **Run as Administrator**. + +3. **Again, be sure that the **InsydeDHCU.dll** file is in the same directory as `CLEVO_KeyboardColour.exe` if you're using a **Single-Zone** keyboard**. + +4. Run the desired command using the syntax: + ``` + .\CLEVO_KeyboardColour.exe theme [themeName] + ``` + +Example: +To activate the breathing effect, run: +```bash +.\CLEVO_KeyboardColour.exe theme breathe +``` + +--- + +## 📋 Requirements + +- **Compatible CLEVO keyboards:** + - **RGB 1-zone** or **3-zone** lighting. + - For **1-zone keyboards**, the **InsydeDHCU.dll** file must be in the same directory as `CLEVO_KeyboardColour.exe`. +- **Administrator Permissions:** Ensure the program is run as administrator to avoid WMI failures. + +--- + +## 📌 Final Notes + +- This is an initial version of the program, and more features (including better optimization for 1-zone keyboards) will be added in future updates. +- Feedback, suggestions, and contributions are highly appreciated to help improve the project. + +--- diff --git a/Build/cmake_install.cmake b/Build/cmake_install.cmake new file mode 100644 index 0000000..252dbf1 --- /dev/null +++ b/Build/cmake_install.cmake @@ -0,0 +1,57 @@ +# Install script for directory: C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/KeyboardColor") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "D:/Qt/Tools/mingw1310_64/bin/objdump.exe") +endif() + +if(CMAKE_INSTALL_COMPONENT) + if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") + else() + string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt") + unset(CMAKE_INST_COMP_HASH) + endif() +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") + file(WRITE "C:/Programmation/Git/CppKeyboardColour/Build/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/Build/compile_commands.json b/Build/compile_commands.json new file mode 100644 index 0000000..f84c7a5 --- /dev/null +++ b/Build/compile_commands.json @@ -0,0 +1,26 @@ +[ +{ + "directory": "C:/Programmation/Git/CppKeyboardColour/Build", + "command": "D:\\Qt\\Tools\\mingw1310_64\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NEEDS_QMAIN -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/KeyboardColor.dir/includes_CXX.rsp -g -std=gnu++17 -o CMakeFiles\\KeyboardColor.dir\\KeyboardColor_autogen\\mocs_compilation.cpp.obj -c C:\\Programmation\\Git\\CppKeyboardColour\\Build\\KeyboardColor_autogen\\mocs_compilation.cpp", + "file": "C:/Programmation/Git/CppKeyboardColour/Build/KeyboardColor_autogen/mocs_compilation.cpp", + "output": "CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/mocs_compilation.cpp.obj" +}, +{ + "directory": "C:/Programmation/Git/CppKeyboardColour/Build", + "command": "D:\\Qt\\Tools\\mingw1310_64\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NEEDS_QMAIN -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/KeyboardColor.dir/includes_CXX.rsp -g -std=gnu++17 -o CMakeFiles\\KeyboardColor.dir\\main.cpp.obj -c \"C:\\Programmation\\Git\\CppKeyboardColour\\KeyboardColor GUI\\main.cpp\"", + "file": "C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI/main.cpp", + "output": "CMakeFiles/KeyboardColor.dir/main.cpp.obj" +}, +{ + "directory": "C:/Programmation/Git/CppKeyboardColour/Build", + "command": "D:\\Qt\\Tools\\mingw1310_64\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NEEDS_QMAIN -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/KeyboardColor.dir/includes_CXX.rsp -g -std=gnu++17 -o CMakeFiles\\KeyboardColor.dir\\keyboardcoulour.cpp.obj -c \"C:\\Programmation\\Git\\CppKeyboardColour\\KeyboardColor GUI\\keyboardcoulour.cpp\"", + "file": "C:/Programmation/Git/CppKeyboardColour/KeyboardColor GUI/keyboardcoulour.cpp", + "output": "CMakeFiles/KeyboardColor.dir/keyboardcoulour.cpp.obj" +}, +{ + "directory": "C:/Programmation/Git/CppKeyboardColour/Build", + "command": "D:\\Qt\\Tools\\mingw1310_64\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NEEDS_QMAIN -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/KeyboardColor.dir/includes_CXX.rsp -g -std=gnu++17 -o CMakeFiles\\KeyboardColor.dir\\KeyboardColor_autogen\\EWIEGA46WW\\qrc_resources.cpp.obj -c C:\\Programmation\\Git\\CppKeyboardColour\\Build\\KeyboardColor_autogen\\EWIEGA46WW\\qrc_resources.cpp", + "file": "C:/Programmation/Git/CppKeyboardColour/Build/KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp", + "output": "CMakeFiles/KeyboardColor.dir/KeyboardColor_autogen/EWIEGA46WW/qrc_resources.cpp.obj" +} +] \ No newline at end of file diff --git a/Build/iconengines/qsvgicon.dll b/Build/iconengines/qsvgicon.dll new file mode 100644 index 0000000..0ec0401 Binary files /dev/null and b/Build/iconengines/qsvgicon.dll differ diff --git a/Build/imageformats/qgif.dll b/Build/imageformats/qgif.dll new file mode 100644 index 0000000..5ebc354 Binary files /dev/null and b/Build/imageformats/qgif.dll differ diff --git a/Build/imageformats/qico.dll b/Build/imageformats/qico.dll new file mode 100644 index 0000000..30c9d02 Binary files /dev/null and b/Build/imageformats/qico.dll differ diff --git a/Build/imageformats/qjpeg.dll b/Build/imageformats/qjpeg.dll new file mode 100644 index 0000000..e68b476 Binary files /dev/null and b/Build/imageformats/qjpeg.dll differ diff --git a/Build/imageformats/qsvg.dll b/Build/imageformats/qsvg.dll new file mode 100644 index 0000000..5ecdc22 Binary files /dev/null and b/Build/imageformats/qsvg.dll differ diff --git a/Build/libgcc_s_seh-1.dll b/Build/libgcc_s_seh-1.dll new file mode 100644 index 0000000..089a1a6 Binary files /dev/null and b/Build/libgcc_s_seh-1.dll differ diff --git a/Build/libstdc++-6.dll b/Build/libstdc++-6.dll new file mode 100644 index 0000000..4191c7a Binary files /dev/null and b/Build/libstdc++-6.dll differ diff --git a/Build/libwinpthread-1.dll b/Build/libwinpthread-1.dll new file mode 100644 index 0000000..55456fe Binary files /dev/null and b/Build/libwinpthread-1.dll differ diff --git a/Build/opengl32sw.dll b/Build/opengl32sw.dll new file mode 100644 index 0000000..1bf3581 Binary files /dev/null and b/Build/opengl32sw.dll differ diff --git a/Build/platforms/qwindows.dll b/Build/platforms/qwindows.dll new file mode 100644 index 0000000..196194d Binary files /dev/null and b/Build/platforms/qwindows.dll differ diff --git a/Build/styles/qmodernwindowsstyle.dll b/Build/styles/qmodernwindowsstyle.dll new file mode 100644 index 0000000..8bf4196 Binary files /dev/null and b/Build/styles/qmodernwindowsstyle.dll differ diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..a3f604f --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,16 @@ +{ + "version": 4, + "configurePresets": [ + { + "name": "default-config", + "displayName": "Default Configuration", + "description": "Default configuration for the project", + "generator": "MinGW Makefiles", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "CMAKE_PREFIX_PATH": "D:/Qt/6.5.3/mingw_64", + "CMAKE_TOOLCHAIN_FILE": "D:/Qt/6.5.3/mingw_64/lib/cmake/Qt6/qt.toolchain.cmake" + } + } + ] +} \ No newline at end of file diff --git a/CppKeyboardColour/Animations.h b/CppKeyboardColour/Animations.h index 4935806..2f235ca 100644 --- a/CppKeyboardColour/Animations.h +++ b/CppKeyboardColour/Animations.h @@ -6,6 +6,6 @@ #include "BreatheAnimation.h" #include "ColourShiftAnimation.h" -#include "FreshBreatheAnimation.h" +#include "BreatheAnimationNewColours.h" #include "ColourTransformAnimation.h" #include "PulsatingBlinkAnimation.h" \ No newline at end of file diff --git a/CppKeyboardColour/BreatheAnimation.cpp b/CppKeyboardColour/BreatheAnimation.cpp index 884b872..ab97f55 100644 --- a/CppKeyboardColour/BreatheAnimation.cpp +++ b/CppKeyboardColour/BreatheAnimation.cpp @@ -5,7 +5,7 @@ #include "BreatheAnimation.h" constexpr size_t STEPS = 40.0f; -constexpr size_t FRAME_DURATION_MS = 25; +constexpr size_t FRAME_DURATION_MS = 45; BreatheAnimation::BreatheAnimation() { @@ -43,11 +43,16 @@ void BreatheAnimation::GeneratePhase1() { for (size_t i = 0; i < STEPS; ++i) { - const auto currentStep = (180.0f / STEPS) * i; + Colour colour{}; + + const auto val = (180.0f / STEPS) * i; // Generate a sine wave for a breathing effect. - const auto colour = m_factory.Create(255 * std::sin(currentStep * (MATH_PI / 180.0f)), 0 ,0); - + colour[INDEX_COLOUR_RED] = 255 * std::sin(val * (MATH_PI / 180.0f)); + colour[INDEX_COLOUR_GREEN] = 0; + colour[INDEX_COLOUR_GRAY] = 0; + colour[INDEX_COLOUR_BLUE] = 0; + m_frames.AddFrame(Zone::ALL, colour, FRAME_DURATION_MS); } } @@ -56,11 +61,15 @@ void BreatheAnimation::GeneratePhase2() { for (size_t i = 0; i < STEPS; ++i) { - const auto currentStep = (180.0f / STEPS) * i; + Colour colour{}; + const auto val = (180.0f / STEPS) * i; // Generate a sine wave for a breathing effect. - const auto colour = m_factory.Create(0, 255 * std::sin(currentStep * (MATH_PI / 180.0f)), 0); - + colour[INDEX_COLOUR_GREEN] = 255 * std::sin(val * (MATH_PI / 180.0f)); + colour[INDEX_COLOUR_RED] = 0; + colour[INDEX_COLOUR_BLUE] = 0; + colour[INDEX_COLOUR_GRAY] = 0; + m_frames.AddFrame(Zone::ALL, colour, FRAME_DURATION_MS); } } @@ -69,9 +78,32 @@ void BreatheAnimation::GeneratePhase3() { for (size_t i = 0; i < STEPS; ++i) { - const auto currentStep = (180.0f / STEPS) * i; + Colour colour{}; + + const auto val = (180.0f / STEPS) * i; + + // Generate a sine wave for a breathing effect. + colour[INDEX_COLOUR_BLUE] = 255 * std::sin(val * (MATH_PI / 180.0f)); + colour[INDEX_COLOUR_RED] = 0; + colour[INDEX_COLOUR_GRAY] = 0; + colour[INDEX_COLOUR_GREEN] = 0; + + m_frames.AddFrame(Zone::ALL, colour, FRAME_DURATION_MS); + } +} +void BreatheAnimation::GeneratePhase4() +{ + for (size_t i = 0; i < STEPS; ++i) + { + Colour colour{}; - const auto colour = m_factory.Create(0, 0, 255 * std::sin(currentStep * (MATH_PI / 180.0f))); + const auto val = (180.0f / STEPS) * i; + + // Generate a sine wave for a breathing effect. + colour[INDEX_COLOUR_GRAY] = 255 * std::sin(val * (MATH_PI / 180.0f)); + colour[INDEX_COLOUR_BLUE] = + colour[INDEX_COLOUR_RED] = 0; + colour[INDEX_COLOUR_GREEN] = 0; m_frames.AddFrame(Zone::ALL, colour, FRAME_DURATION_MS); } diff --git a/CppKeyboardColour/BreatheAnimation.h b/CppKeyboardColour/BreatheAnimation.h index f9bac3d..40b83e9 100644 --- a/CppKeyboardColour/BreatheAnimation.h +++ b/CppKeyboardColour/BreatheAnimation.h @@ -4,7 +4,6 @@ #include "Frame.h" #include "FrameCollection.h" -#include "ColourFactory.h" #include "IAnimation.h" @@ -29,9 +28,9 @@ class BreatheAnimation private: FrameCollection m_frames; - ColourFactory m_factory{}; void GeneratePhase1(); void GeneratePhase2(); void GeneratePhase3(); + void GeneratePhase4(); }; \ No newline at end of file diff --git a/CppKeyboardColour/BreatheAnimationNewColours.cpp b/CppKeyboardColour/BreatheAnimationNewColours.cpp new file mode 100644 index 0000000..08e161a --- /dev/null +++ b/CppKeyboardColour/BreatheAnimationNewColours.cpp @@ -0,0 +1,200 @@ +/*#include "stdafx.h" +#include "MathConstants.h" +#include "BreatheAnimationNewColours.h" +#include "ColourFactory.h" + +// +// rgb(255 255, 0) yellow +// rgb(255, 0, 30) red +// rgb(60, 0, 255) Purple +// rgb(0, 255, 60) green +// rgb(0, 255, 120) green - Why is there duplication? +// rgb(255, 255, 255) white +// rgb(255, 0, 255) purple - Why is there duplication? +// rgb(255, 120, 120) Brown +// + +constexpr size_t STEPS = 40.0f; +constexpr size_t FRAME_DURATION_MS = 25; + +FreshBreatheAnimation::FreshBreatheAnimation() +{ + ColourFactory factory{}; + + // Breathe yellow + GenerateBreathe(factory.Create(255, 255, 0), STEPS, FRAME_DURATION_MS); + + // Breathe red + GenerateBreathe(factory.Create(255, 0, 0), STEPS, FRAME_DURATION_MS); + + // Breathe purple + GenerateBreathe(factory.Create(255, 0, 255), STEPS, FRAME_DURATION_MS); + + // Breathe green + GenerateBreathe(factory.Create(0, 255, 0), STEPS, FRAME_DURATION_MS); + + // Breathe white + GenerateBreathe(factory.Create(255, 255, 255), STEPS, FRAME_DURATION_MS); + + // Breathe blue + GenerateBreathe(factory.Create(0, 0, 255), STEPS, FRAME_DURATION_MS); + + // Breathe brown + GenerateBreathe(factory.Create(255, 120, 120), STEPS, FRAME_DURATION_MS); +} + +std::wstring FreshBreatheAnimation::GetName() const +{ + return L"Fresh Breathe"; +} + +std::optional FreshBreatheAnimation::GetFrame(uint32_t idx) +{ + return m_frames.GetFrame(idx); +} + +bool FreshBreatheAnimation::IsSupportedKB(KeyboardType kbType) const +{ + return (kbType != KeyboardType::PER_KEY && kbType != KeyboardType::NONE); +} + +uint32_t FreshBreatheAnimation::Size() const +{ + return m_frames.Size(); +} + +void FreshBreatheAnimation::AddFrame(const Frame& frame) +{ + m_frames.AddFrame(frame); +} + +void FreshBreatheAnimation::GenerateBreathe(const Colour& targetColour, uint32_t steps, uint32_t stepTimeMs) +{ + for (size_t i = 0; i < steps; ++i) + { + Colour currentColour{}; + const auto channelBrightness = (180.0f / steps) * i; + + for (size_t channel = 0; channel < targetColour.size(); ++channel) + { + currentColour[channel] = targetColour[channel] * std::sin(channelBrightness * (MATH_PI / 180.0f)); + } + + Frame frame(Zone::ALL, currentColour, stepTimeMs); + + this->AddFrame(frame); + } +}*/ +#include "stdafx.h" +#include "MathConstants.h" +#include "BreatheAnimationNewColours.h" +#include "ColourFactory.h" + +// +// rgb(255, 255, 0) : Yellow 🟡 +// rgb(255, 0, 0) : Red 🔴 +// rgb(255, 0, 255) : Magenta 🌸 +// rgb(0, 255, 0) : Lime Green 🟢 +// rgb(255, 255, 255) : White ⚪ +// rgb(0, 0, 255) : Blue 🔵 +// rgb(255, 120, 120) : Pastel Red 🍑 +// rgb(255, 165, 0) : Orange 🟠 +// rgb(128, 0, 128) : Purple 🍇 +// rgb(0, 255, 255) : Cyan 🧊 +// rgb(255, 20, 147) : Deep Pink 🎀 +// rgb(139, 69, 19) : Saddle Brown 🟫 +// rgb(255, 192, 203) : Pink 💖 +// rgb(173, 216, 230) : Light Blue 💧 +// rgb(144, 238, 144) : Light Green 🍃 +// rgb(240, 230, 140) : Khaki 🌾 +// rgb(75, 0, 130) : Indigo 🌌 +// rgb(0, 100, 0) : Dark Green 🌲 +// rgb(139, 0, 0) : Dark Red 🍷 +// rgb(100, 149, 237) : Cornflower Blue 🥣 +// rgb(192, 192, 192) : Silver 🩶 +// rgb(128, 128, 128) : Gray 🗿 +// + +constexpr size_t STEPS = 40.0f; +constexpr size_t FRAME_DURATION_MS = 45; + +FreshBreatheAnimation::FreshBreatheAnimation() +{ + ColourFactory factory{}; + + GenerateBreathe(factory.Create(255, 255, 0), STEPS, FRAME_DURATION_MS); // Yellow + GenerateBreathe(factory.Create(255, 0, 0), STEPS, FRAME_DURATION_MS); // Red + GenerateBreathe(factory.Create(255, 0, 255), STEPS, FRAME_DURATION_MS); // Magenta + GenerateBreathe(factory.Create(0, 255, 0), STEPS, FRAME_DURATION_MS); // Lime Green + GenerateBreathe(factory.Create(255, 255, 255), STEPS, FRAME_DURATION_MS); // White + GenerateBreathe(factory.Create(0, 0, 255), STEPS, FRAME_DURATION_MS); // Blue + GenerateBreathe(factory.Create(255, 120, 120), STEPS, FRAME_DURATION_MS); // Pastel Red + + // --- New colors added below --- + + // Vibrant colors + GenerateBreathe(factory.Create(255, 165, 0), STEPS, FRAME_DURATION_MS); // Orange 🟠 + GenerateBreathe(factory.Create(128, 0, 128), STEPS, FRAME_DURATION_MS); // Purple 🍇 + GenerateBreathe(factory.Create(0, 255, 255), STEPS, FRAME_DURATION_MS); // Cyan 🧊 + GenerateBreathe(factory.Create(255, 20, 147), STEPS, FRAME_DURATION_MS); // Deep Pink 🎀 + GenerateBreathe(factory.Create(139, 69, 19), STEPS, FRAME_DURATION_MS); // Saddle Brown 🟫 + + // Pastel colors + GenerateBreathe(factory.Create(255, 192, 203), STEPS, FRAME_DURATION_MS); // Pink 💖 + GenerateBreathe(factory.Create(173, 216, 230), STEPS, FRAME_DURATION_MS); // Light Blue 💧 + GenerateBreathe(factory.Create(144, 238, 144), STEPS, FRAME_DURATION_MS); // Light Green 🍃 + GenerateBreathe(factory.Create(240, 230, 140), STEPS, FRAME_DURATION_MS); // Khaki 🌾 + + // Darker shades + GenerateBreathe(factory.Create(75, 0, 130), STEPS, FRAME_DURATION_MS); // Indigo 🌌 + GenerateBreathe(factory.Create(0, 100, 0), STEPS, FRAME_DURATION_MS); // Dark Green 🌲 + GenerateBreathe(factory.Create(139, 0, 0), STEPS, FRAME_DURATION_MS); // Dark Red 🍷 + GenerateBreathe(factory.Create(100, 149, 237), STEPS, FRAME_DURATION_MS); // Cornflower Blue 🥣 + + // Monochrome shades + GenerateBreathe(factory.Create(192, 192, 192), STEPS, FRAME_DURATION_MS); // Silver 🩶 + GenerateBreathe(factory.Create(128, 128, 128), STEPS, FRAME_DURATION_MS); // Gray 🗿 +} + +std::wstring FreshBreatheAnimation::GetName() const +{ + return L"Fresh Breathe"; +} + +std::optional FreshBreatheAnimation::GetFrame(uint32_t idx) +{ + return m_frames.GetFrame(idx); +} + +bool FreshBreatheAnimation::IsSupportedKB(KeyboardType kbType) const +{ + return (kbType != KeyboardType::PER_KEY && kbType != KeyboardType::NONE); +} + +uint32_t FreshBreatheAnimation::Size() const +{ + return m_frames.Size(); +} + +void FreshBreatheAnimation::AddFrame(const Frame& frame) +{ + m_frames.AddFrame(frame); +} + +void FreshBreatheAnimation::GenerateBreathe(const Colour& targetColour, uint32_t steps, uint32_t stepTimeMs) +{ + for (size_t i = 0; i < steps; ++i) + { + Colour currentColour{}; + const auto channelBrightness = (180.0f / steps) * i; + + for (size_t channel = 0; channel < targetColour.size(); ++channel) + { + currentColour[channel] = targetColour[channel] * std::sin(channelBrightness * (MATH_PI / 180.0f)); + } + + Frame frame(Zone::ALL, currentColour, stepTimeMs); + + this->AddFrame(frame); + } +} \ No newline at end of file diff --git a/CppKeyboardColour/FreshBreatheAnimation.h b/CppKeyboardColour/BreatheAnimationNewColours.h similarity index 100% rename from CppKeyboardColour/FreshBreatheAnimation.h rename to CppKeyboardColour/BreatheAnimationNewColours.h diff --git a/CppKeyboardColour/Colour.h b/CppKeyboardColour/Colour.h index fb36118..bbc747f 100644 --- a/CppKeyboardColour/Colour.h +++ b/CppKeyboardColour/Colour.h @@ -8,5 +8,6 @@ #define INDEX_COLOUR_RED 0 #define INDEX_COLOUR_GREEN 1 #define INDEX_COLOUR_BLUE 2 +#define INDEX_COLOUR_GRAY 3 -using Colour = std::array; \ No newline at end of file +using Colour = std::array; \ No newline at end of file diff --git a/CppKeyboardColour/ColourFactory.cpp b/CppKeyboardColour/ColourFactory.cpp index 54431d3..17a995a 100644 --- a/CppKeyboardColour/ColourFactory.cpp +++ b/CppKeyboardColour/ColourFactory.cpp @@ -1,14 +1,57 @@ -// Created by DeviceIoControl - #include "stdafx.h" #include "ColourFactory.h" +std::map ColourFactory::CreateInitialMap() +{ + std::map colours; + colours[L"red"] = { 255, 0, 0 }; + colours[L"green"] = { 0, 255, 0 }; + colours[L"blue"] = { 0, 0, 255 }; + colours[L"yellow"] = { 255, 255, 0 }; + colours[L"cyan"] = { 0, 255, 255 }; + colours[L"magenta"] = { 255, 0, 255 }; + colours[L"white"] = { 255, 255, 255 }; + colours[L"black"] = { 0, 0, 0 }; + colours[L"orange"] = { 255, 165, 0 }; + colours[L"purple"] = { 128, 0, 128 }; + colours[L"pink"] = { 255, 192, 203 }; + colours[L"brown"] = { 165, 42, 42 }; + colours[L"gray"] = { 128, 128, 128 }; + colours[L"lime"] = { 50, 205, 50 }; + colours[L"gold"] = { 255, 215, 0 }; + colours[L"silver"] = { 192, 192, 192 }; + return colours; +} + +// Implements the ColourFactory constructor using the static helper. +ColourFactory::ColourFactory() : m_colours(CreateInitialMap()) {} + +// Implements other methods Colour ColourFactory::Create(uint8_t r, uint8_t g, uint8_t b) const { - Colour colour{}; - colour[INDEX_COLOUR_RED] = r; - colour[INDEX_COLOUR_GREEN] = g; - colour[INDEX_COLOUR_BLUE] = b; + Colour colour{}; + colour[INDEX_COLOUR_RED] = r; + colour[INDEX_COLOUR_GREEN] = g; + colour[INDEX_COLOUR_BLUE] = b; + return colour; +} - return colour; +std::optional ColourFactory::Create(const std::wstring& name) const +{ + auto it = m_colours.find(name); + if (it != m_colours.end()) + { + return it->second; + } + return {}; +} + +std::wstring ColourFactory::GetAvailableColors() const +{ + std::wstring names; + for (const auto& pair : m_colours) + { + names += pair.first + L" "; + } + return names; } \ No newline at end of file diff --git a/CppKeyboardColour/ColourFactory.h b/CppKeyboardColour/ColourFactory.h index 3fe1a52..48144e7 100644 --- a/CppKeyboardColour/ColourFactory.h +++ b/CppKeyboardColour/ColourFactory.h @@ -1,14 +1,27 @@ -// Created by DeviceIoControl - #pragma once +#include "stdafx.h" #include "Colour.h" +#include +#include +#include +#include +#include +#include class ColourFactory { public: - ColourFactory() = default; - ~ColourFactory() = default; + ColourFactory(); Colour Create(uint8_t r, uint8_t g, uint8_t b) const; + std::optional Create(const std::wstring& name) const; + std::wstring GetAvailableColors() const; + +private: + // A map to store named colors. It's populated by a static helper function. + std::map m_colours; + + // A static helper function to create and return the map of colors. + static std::map CreateInitialMap(); }; \ No newline at end of file diff --git a/CppKeyboardColour/ColourTransformAnimation.cpp b/CppKeyboardColour/ColourTransformAnimation.cpp index 4038be9..c82f465 100644 --- a/CppKeyboardColour/ColourTransformAnimation.cpp +++ b/CppKeyboardColour/ColourTransformAnimation.cpp @@ -1,36 +1,47 @@ -// Created by DeviceIoControl - +// Edited by BenRango #include "stdafx.h" #include "ColourFactory.h" #include "ColourTransformAnimation.h" - -constexpr size_t STEPS = 40; -constexpr size_t FRAME_DURATION_MS = 25; + +constexpr size_t STEPS = 40.0f; +constexpr size_t FRAME_DURATION_MS = 2; ColourTransformAnimation::ColourTransformAnimation() { ColourFactory factory{}; const auto red = factory.Create(255, 0, 0); + const auto orange = factory.Create(255, 165, 0); + const auto yellow = factory.Create(255, 255, 0); const auto green = factory.Create(0, 255, 0); + const auto cyan = factory.Create(0, 255, 255); const auto blue = factory.Create(0, 0, 255); - - // Transform Red -> Green - this->GenerateColourTransform(red, green, STEPS, FRAME_DURATION_MS); - - // Transform Green -> Blue - this->GenerateColourTransform(green, blue, STEPS, FRAME_DURATION_MS); - - // Transform Blue -> Red - this->GenerateColourTransform(blue, red, STEPS, FRAME_DURATION_MS); + const auto indigo = factory.Create(75, 0, 130); + const auto magenta = factory.Create(255, 0, 255); + const auto pink = factory.Create(255, 192, 203); + const auto white = factory.Create(255, 255, 255); + const auto gray = factory.Create(128, 128, 128); + + // Creating a continuous, looping colour transition + this->GenerateColourTransform(red, orange, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(orange, yellow, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(yellow, green, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(green, cyan, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(cyan, blue, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(blue, indigo, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(indigo, magenta, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(magenta, pink, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(pink, white, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(white, gray, STEPS, FRAME_DURATION_MS); + this->GenerateColourTransform(gray, red, STEPS, FRAME_DURATION_MS); } -std::wstring ColourTransformAnimation::GetName() const +std::wstring ColourTransformAnimation::GetName() const { return L"Colour Transform"; } -void ColourTransformAnimation::AddFrame(const Frame& frame) +void ColourTransformAnimation::AddFrame(const Frame& frame) { return m_frames.AddFrame(frame); } @@ -40,12 +51,12 @@ std::optional ColourTransformAnimation::GetFrame(uint32_t idx) return m_frames.GetFrame(idx); } -bool ColourTransformAnimation::IsSupportedKB(KeyboardType kbType) const +bool ColourTransformAnimation::IsSupportedKB(KeyboardType kbType) const { return kbType != KeyboardType::PER_KEY && kbType != KeyboardType::NONE; } -uint32_t ColourTransformAnimation::Size() const +uint32_t ColourTransformAnimation::Size() const { return m_frames.Size(); } @@ -80,7 +91,7 @@ void ColourTransformAnimation::GenerateColourTransform(const Colour& startColour currentColour[channel] = endColour[channel]; } - const Frame currentFrame(Zone::ALL, currentColour, stepTimeMs); + Frame currentFrame(Zone::ALL, currentColour, stepTimeMs); m_frames.AddFrame(currentFrame); } -} +} \ No newline at end of file diff --git a/CppKeyboardColour/CommandLine.cpp b/CppKeyboardColour/CommandLine.cpp deleted file mode 100644 index c3d3fba..0000000 --- a/CppKeyboardColour/CommandLine.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "CommandLine.h" - -/*static*/ std::vector CommandLine::GetCommandLines(size_t argc, const wchar_t** argv) -{ - std::vector cmdLines{}; - - for (size_t i = 1; i < argc; ++i) - { - cmdLines.emplace_back(argv[i]); - } - - return cmdLines; -} - -/*static*/ bool CommandLine::Contains(const std::wstring& toFind, const std::vector& cmdlines) -{ - return std::find_if(cmdlines.cbegin(), cmdlines.cend(), [&toFind](const auto& cmdLine) { - return _wcsicmp(cmdLine.c_str(), toFind.c_str()) == 0; - }) != cmdlines.cend(); -} diff --git a/CppKeyboardColour/CommandLine.h b/CppKeyboardColour/CommandLine.h index c6e94fe..58ce5ac 100644 --- a/CppKeyboardColour/CommandLine.h +++ b/CppKeyboardColour/CommandLine.h @@ -1,10 +1,46 @@ -// Created by DeviceIoControl - #pragma once +#include "stdafx.h" +#include +#include +#include + class CommandLine { public: - static std::vector GetCommandLines(size_t argc, const wchar_t** argv); - static bool Contains(const std::wstring& toFind, const std::vector& cmdlines); + // Rcupre tous les arguments de ligne de commande dans un vecteur de chanes. + static std::vector GetCommandLines(size_t argc, const wchar_t** argv) + { + std::vector cmdLines{}; + + for (size_t i = 1; i < argc; ++i) + { + cmdLines.emplace_back(argv[i]); + } + + return cmdLines; + } + + // Vrifie si un argument donn est prsent dans la ligne de commande. + static bool Contains(const std::wstring& toFind, const std::vector& cmdlines) + { + return std::find_if(cmdlines.cbegin(), cmdlines.cend(), [&toFind](const auto& cmdLine) { + return _wcsicmp(cmdLine.c_str(), toFind.c_str()) == 0; + }) != cmdlines.cend(); + } + + // Rcupre la valeur d'un argument. Renvoie une chane vide si l'argument ou sa valeur n'est pas trouv. + static std::wstring GetArgumentValue(const std::wstring& name, const std::vector& cmdLines) + { + auto it = std::find_if(cmdLines.cbegin(), cmdLines.cend(), [&name](const auto& cmdLine) { + return _wcsicmp(cmdLine.c_str(), name.c_str()) == 0; + }); + + if (it != cmdLines.cend() && std::next(it) != cmdLines.cend()) + { + return *std::next(it); + } + + return L""; + } }; \ No newline at end of file diff --git a/CppKeyboardColour/CppKeyboardColour.aps b/CppKeyboardColour/CppKeyboardColour.aps new file mode 100644 index 0000000..108163e Binary files /dev/null and b/CppKeyboardColour/CppKeyboardColour.aps differ diff --git a/CppKeyboardColour/CppKeyboardColour.cpp b/CppKeyboardColour/CppKeyboardColour.cpp index c01cb6e..2910356 100644 Binary files a/CppKeyboardColour/CppKeyboardColour.cpp and b/CppKeyboardColour/CppKeyboardColour.cpp differ diff --git a/CppKeyboardColour/CppKeyboardColour.rc b/CppKeyboardColour/CppKeyboardColour.rc new file mode 100644 index 0000000..521e31f Binary files /dev/null and b/CppKeyboardColour/CppKeyboardColour.rc differ diff --git a/CppKeyboardColour/CppKeyboardColour.vcxproj b/CppKeyboardColour/CppKeyboardColour.vcxproj index 657e8a3..e1f693e 100644 --- a/CppKeyboardColour/CppKeyboardColour.vcxproj +++ b/CppKeyboardColour/CppKeyboardColour.vcxproj @@ -160,7 +160,7 @@ - + @@ -181,33 +181,35 @@ + + - + + + + + - + - - - - CppCode - + Create Create @@ -215,7 +217,9 @@ Create - + + + diff --git a/CppKeyboardColour/CppKeyboardColour.vcxproj.filters b/CppKeyboardColour/CppKeyboardColour.vcxproj.filters index 619b613..2583c16 100644 --- a/CppKeyboardColour/CppKeyboardColour.vcxproj.filters +++ b/CppKeyboardColour/CppKeyboardColour.vcxproj.filters @@ -45,12 +45,24 @@ Header Files + + Header Files + Header Files Header Files + + Header Files + + + Header Files + + + Header Files + Header Files @@ -87,7 +99,7 @@ Header Files - + Header Files @@ -105,10 +117,10 @@ Header Files - + Header Files - + Header Files @@ -134,7 +146,7 @@ Source Files - + Source Files @@ -143,26 +155,5 @@ Source Files - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - \ No newline at end of file diff --git a/CppKeyboardColour/CppKeyboardColour.vcxproj.user b/CppKeyboardColour/CppKeyboardColour.vcxproj.user index 68992b3..d1c1e42 100644 --- a/CppKeyboardColour/CppKeyboardColour.vcxproj.user +++ b/CppKeyboardColour/CppKeyboardColour.vcxproj.user @@ -8,4 +8,8 @@ theme breathe WindowsLocalDebugger + + theme colourtransform + WindowsLocalDebugger + \ No newline at end of file diff --git a/CppKeyboardColour/DeviceIdRetriever.cpp b/CppKeyboardColour/DeviceIdRetriever.cpp deleted file mode 100644 index 1b77869..0000000 --- a/CppKeyboardColour/DeviceIdRetriever.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "DeviceIdRetriever.h" - -DeviceIdRetriever::DeviceIdRetriever() -{ - m_hGetProductDLL = LoadGetProductDLL(); - m_pfnGetProductID = reinterpret_cast(GetProcAddress(m_hGetProductDLL, "GetProductID_PCI")); -} - -uint32_t DeviceIdRetriever::GetDeviceID() const -{ - if (m_pfnGetProductID) - { - // Call this function on a seperate thread to avoid causing COM issues on our thread - // as this DLL (GetProductID64!GetProductID_PCI specifically) is buggy. - return std::async(std::launch::async, DoGetProductID, m_pfnGetProductID).get(); - } - - return 0xFFFFFFFF; -} - -DeviceIdRetriever::~DeviceIdRetriever() -{ - m_pfnGetProductID = nullptr; - FreeLibrary(m_hGetProductDLL); -} - -/* static */ uint32_t DeviceIdRetriever::DoGetProductID(const Detail::T_GetProductID_PCI& fnGetProductID) -{ - CoInitializeEx(nullptr, COINIT::COINIT_APARTMENTTHREADED); - CoInitializeEx(nullptr, COINIT::COINIT_APARTMENTTHREADED); - - return fnGetProductID(); -} - -HMODULE DeviceIdRetriever::LoadGetProductDLL() const -{ - auto const hModule = LoadLibraryW(GET_PRODUCT_DLL); - - if (!hModule || hModule == INVALID_HANDLE_VALUE) - { - std::wcout << L"Cannot load " << GET_PRODUCT_DLL << L". Please ensure the DLL is within the same directory!\n"; - std::exit(STATUS_DLL_NOT_FOUND); - } - - return hModule; -} diff --git a/CppKeyboardColour/DeviceIdRetriever.h b/CppKeyboardColour/DeviceIdRetriever.h index 1d73521..cbcc214 100644 --- a/CppKeyboardColour/DeviceIdRetriever.h +++ b/CppKeyboardColour/DeviceIdRetriever.h @@ -2,6 +2,8 @@ // Created by DeviceIoControl +#include "stdafx.h" + #define GET_PRODUCT_DLL L"GetProductID64.dll" namespace Detail @@ -12,11 +14,29 @@ namespace Detail class DeviceIdRetriever { public: - DeviceIdRetriever(); + DeviceIdRetriever() + { + m_hGetProductDLL = LoadGetProductDLL(); + m_pfnGetProductID = reinterpret_cast(GetProcAddress(m_hGetProductDLL, "GetProductID_PCI")); + } + + uint32_t GetDeviceID() const + { + if (m_pfnGetProductID) + { + // Call this function on a seperate thread to avoid causing COM issues on our thread + // as this DLL (GetProductID64!GetProductID_PCI specifically) is buggy. + return std::async(std::launch::async, DoGetProductID, m_pfnGetProductID).get(); + } - uint32_t GetDeviceID() const; + return 0xFFFFFFFF; + } - ~DeviceIdRetriever(); + ~DeviceIdRetriever() + { + m_pfnGetProductID = nullptr; + FreeLibrary(m_hGetProductDLL); + } private: HMODULE m_hGetProductDLL = nullptr; @@ -24,7 +44,24 @@ class DeviceIdRetriever // NOTE: GetProductID64 (A.K.A GetProductdll.dll) is buggy and unintializes COM multiples times, // even though only one call to CoInitialize succeeds. - static uint32_t DoGetProductID(const Detail::T_GetProductID_PCI& fnGetProductID); + static uint32_t DoGetProductID(const Detail::T_GetProductID_PCI& fnGetProductID) + { + CoInitializeEx(nullptr, COINIT::COINIT_APARTMENTTHREADED); + CoInitializeEx(nullptr, COINIT::COINIT_APARTMENTTHREADED); + + return fnGetProductID(); + } + + HMODULE LoadGetProductDLL() + { + auto const hModule = LoadLibraryW(GET_PRODUCT_DLL); + + if (!hModule || hModule == INVALID_HANDLE_VALUE) + { + std::wcout << L"Cannot load " << GET_PRODUCT_DLL << L". Please ensure the DLL is within the same directory!\n"; + std::exit(STATUS_DLL_NOT_FOUND); + } - HMODULE LoadGetProductDLL() const; + return hModule; + } }; \ No newline at end of file diff --git a/CppKeyboardColour/FakeKeyboardCommunicator.cpp b/CppKeyboardColour/FakeKeyboardCommunicator.cpp deleted file mode 100644 index aa761aa..0000000 --- a/CppKeyboardColour/FakeKeyboardCommunicator.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "FakeKeyboardCommunicator.h" - -bool FakeKeyboardCommunicator::SendKBCode(uint32_t code) -{ - std::cout << "Code: 0x" << (void*)code << "\n"; - return true; -} - -bool FakeKeyboardCommunicator::SetKBColour(Zone zone, const Colour& colour) -{ - std::cout << "Zone: 0x" << (void*)zone << ", Colour: " - << "(RED - 0x" << (void*)colour[INDEX_COLOUR_RED] << "), " - << "(GREEN - 0x" << (void*)colour[INDEX_COLOUR_GREEN] << "), " - << "(BLUE - 0x" << (void*)colour[INDEX_COLOUR_BLUE] << ") \n\n"; - - return true; -} \ No newline at end of file diff --git a/CppKeyboardColour/FakeKeyboardCommunicator.h b/CppKeyboardColour/FakeKeyboardCommunicator.h index 332ebf3..3478832 100644 --- a/CppKeyboardColour/FakeKeyboardCommunicator.h +++ b/CppKeyboardColour/FakeKeyboardCommunicator.h @@ -1,7 +1,6 @@ -// Created by DeviceIoControl - #pragma once +#include "stdafx.h" #include "IKeyboardCommunicator.h" class FakeKeyboardCommunicator @@ -10,9 +9,21 @@ class FakeKeyboardCommunicator public: FakeKeyboardCommunicator() = default; - bool SendKBCode(uint32_t code) override; + bool SendKeyboardData(uint32_t data) override + { + std::cout << "Data: 0x" << (void*)data << "\n"; + return true; + } + + bool SetKeyboardColour(Zone zone, const Colour& colour) override + { + std::cout << "Zone: 0x" << (void*)zone << ", Colour: " + << "(RED - 0x" << (void*)colour[INDEX_COLOUR_RED] << "), " + << "(GREEN - 0x" << (void*)colour[INDEX_COLOUR_GREEN] << "), " + << "(BLUE - 0x" << (void*)colour[INDEX_COLOUR_BLUE] << ") \n\n"; - bool SetKBColour(Zone zone, const Colour& colour) override; + return true; + } ~FakeKeyboardCommunicator() override = default; }; \ No newline at end of file diff --git a/CppKeyboardColour/FreshBreatheAnimation.cpp b/CppKeyboardColour/FreshBreatheAnimation.cpp deleted file mode 100644 index b5b1a57..0000000 --- a/CppKeyboardColour/FreshBreatheAnimation.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "MathConstants.h" -#include "FreshBreatheAnimation.h" -#include "ColourFactory.h" - -// -// rgb(255 255, 0) yellow -// rgb(255, 0, 30) red -// rgb(60, 0, 255) Purple -// rgb(0, 255, 60) green -// rgb(0, 255, 120) green - Why is there duplication? -// rgb(255, 255, 255) white -// rgb(255, 0, 255) purple - Why is there duplication? -// rgb(255, 120, 120) Brown -// - -constexpr size_t STEPS = 40.0f; -constexpr size_t FRAME_DURATION_MS = 25; - -FreshBreatheAnimation::FreshBreatheAnimation() -{ - ColourFactory factory{}; - - // Breathe yellow - GenerateBreathe(factory.Create(255, 255, 0), STEPS, FRAME_DURATION_MS); - - // Breathe red - GenerateBreathe(factory.Create(255, 0, 0), STEPS, FRAME_DURATION_MS); - - // Breathe purple - GenerateBreathe(factory.Create(255, 0, 255), STEPS, FRAME_DURATION_MS); - - // Breathe green - GenerateBreathe(factory.Create(0, 255, 0), STEPS, FRAME_DURATION_MS); - - // Breathe white - GenerateBreathe(factory.Create(255, 255, 255), STEPS, FRAME_DURATION_MS); - - // Breathe blue - GenerateBreathe(factory.Create(0, 0, 255), STEPS, FRAME_DURATION_MS); - - // Breathe brown - GenerateBreathe(factory.Create(255, 120, 120), STEPS, FRAME_DURATION_MS); -} - -std::wstring FreshBreatheAnimation::GetName() const -{ - return L"Fresh Breathe"; -} - -std::optional FreshBreatheAnimation::GetFrame(uint32_t idx) -{ - return m_frames.GetFrame(idx); -} - -bool FreshBreatheAnimation::IsSupportedKB(KeyboardType kbType) const -{ - return (kbType != KeyboardType::PER_KEY && kbType != KeyboardType::NONE); -} - -uint32_t FreshBreatheAnimation::Size() const -{ - return m_frames.Size(); -} - -void FreshBreatheAnimation::AddFrame(const Frame& frame) -{ - m_frames.AddFrame(frame); -} - -void FreshBreatheAnimation::GenerateBreathe(const Colour& targetColour, uint32_t steps, uint32_t stepTimeMs) -{ - for (size_t i = 0; i < steps; ++i) - { - Colour currentColour{}; - const auto channelBrightness = (180.0f / steps) * i; - - for (size_t channel = 0; channel < targetColour.size(); ++channel) - { - currentColour[channel] = targetColour[channel] * std::sin(channelBrightness * (MATH_PI / 180.0f)); - } - - Frame frame(Zone::ALL, currentColour, stepTimeMs); - - this->AddFrame(frame); - } -} \ No newline at end of file diff --git a/CppKeyboardColour/IAnimation.h b/CppKeyboardColour/IAnimation.h index 48e0a51..0b0223c 100644 --- a/CppKeyboardColour/IAnimation.h +++ b/CppKeyboardColour/IAnimation.h @@ -1,5 +1,3 @@ -// Created by DeviceIoControl - #pragma once #include "stdafx.h" diff --git a/CppKeyboardColour/IDeviceIdTranslator.h b/CppKeyboardColour/IDeviceIdTranslator.h index 6bb9044..646d8db 100644 --- a/CppKeyboardColour/IDeviceIdTranslator.h +++ b/CppKeyboardColour/IDeviceIdTranslator.h @@ -1,5 +1,3 @@ -// Created by DeviceIoControl - #pragma once #include "stdafx.h" diff --git a/CppKeyboardColour/IKeyboard.h b/CppKeyboardColour/IKeyboard.h index 823fefa..ec799d6 100644 --- a/CppKeyboardColour/IKeyboard.h +++ b/CppKeyboardColour/IKeyboard.h @@ -1,18 +1,15 @@ -// Created by DeviceIoControl - #pragma once #include "stdafx.h" #include "IAnimation.h" +#include "SystemAnimation.h" #include "KeyboardType.h" class IKeyboard { public: - virtual void SendCode(uint32_t code) = 0; + virtual void SysAnimation(SystemAnimation animation) = 0; virtual void SetColour(uint8_t r, uint8_t g, uint8_t b, Zone zone) = 0; - virtual void SetBacklightOff() = 0; - virtual void SetBacklightOn() = 0; virtual void PlayAnimation(IAnimation& animation, bool bShouldLoop) = 0; virtual KeyboardType GetKBType() const = 0; diff --git a/CppKeyboardColour/IKeyboardCommunicator.h b/CppKeyboardColour/IKeyboardCommunicator.h index 799a631..34204cc 100644 --- a/CppKeyboardColour/IKeyboardCommunicator.h +++ b/CppKeyboardColour/IKeyboardCommunicator.h @@ -10,8 +10,8 @@ class IKeyboardCommunicator { public: - virtual bool SendKBCode(uint32_t code) = 0; - virtual bool SetKBColour(Zone zone, const Colour& colour) = 0; + virtual bool SendKeyboardData(uint32_t data) = 0; + virtual bool SetKeyboardColour(Zone zone, const Colour& colour) = 0; virtual ~IKeyboardCommunicator() = default; }; diff --git a/CppKeyboardColour/InsydeKBCommunicator.cpp b/CppKeyboardColour/InsydeKBCommunicator.cpp deleted file mode 100644 index 291bc4d..0000000 --- a/CppKeyboardColour/InsydeKBCommunicator.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "InsydeKBCommunicator.h" - -#define INSYDE_DLL L"InsydeDCHU.dll" - -InsydeKBCommunicator::InsydeKBCommunicator() -{ - m_hInsydeDHCU = LoadInsydeDCHU_DLL(); - - m_pfnSetDCHU_Data = reinterpret_cast(GetProcAddress(m_hInsydeDHCU, "SetDCHU_Data")); - m_pfnWriteAppSettings = reinterpret_cast(GetProcAddress(m_hInsydeDHCU, "WriteAppSettings")); -} - -bool InsydeKBCommunicator::SetKBColour(Zone zone, const Colour& colour) -{ - if (zone != Zone::ALL) - { - return false; - } - - // Found in CLEVO Control Center v6.053 - const uint8_t mode = 8; - - const std::array dchuData{ - colour[INDEX_COLOUR_GREEN], - colour[INDEX_COLOUR_RED], - colour[INDEX_COLOUR_BLUE], - 0xF0 - }; - - m_pfnSetDCHU_Data(103, dchuData.data(), dchuData.size()); - m_pfnWriteAppSettings(2, 81, colour.size(), colour.data()); - m_pfnWriteAppSettings(2, 32, 1, &mode); - - return true; -} - -// Unsupported for now. -bool InsydeKBCommunicator::SendKBCode(uint32_t /* code */) -{ - return false; -} - -InsydeKBCommunicator::~InsydeKBCommunicator() -{ - if (IS_HANDLE_VALID(m_hInsydeDHCU)) - { - FreeLibrary(m_hInsydeDHCU); - m_pfnSetDCHU_Data = nullptr; - m_pfnWriteAppSettings = nullptr; - } -} - -HMODULE InsydeKBCommunicator::LoadInsydeDCHU_DLL() const -{ - auto const hModule = LoadLibraryW(INSYDE_DLL); - - if (!hModule || hModule == INVALID_HANDLE_VALUE) - { - std::wcout << L"Cannot load " << INSYDE_DLL << L". Please ensure the DLL is within the same directory!\n"; - std::exit(STATUS_DLL_NOT_FOUND); - } - - return hModule; -} diff --git a/CppKeyboardColour/InsydeKBCommunicator.h b/CppKeyboardColour/InsydeKBCommunicator.h index 12618f0..c4ec852 100644 --- a/CppKeyboardColour/InsydeKBCommunicator.h +++ b/CppKeyboardColour/InsydeKBCommunicator.h @@ -2,8 +2,11 @@ #pragma once +#include "stdafx.h" #include "IKeyboardCommunicator.h" +#define INSYDE_DLL L"InsydeDCHU.dll" + namespace Detail { using T_SetDCHU_Data = DWORD(__stdcall*)(DWORD command, const UINT8* buffer, DWORD length); @@ -14,18 +17,69 @@ class InsydeKBCommunicator : public IKeyboardCommunicator { public: - InsydeKBCommunicator(); - ~InsydeKBCommunicator() override; + InsydeKBCommunicator() + { + m_hInsydeDHCU = LoadInsydeDCHU_DLL(); + + m_pfnSetDCHU_Data = reinterpret_cast(GetProcAddress(m_hInsydeDHCU, "SetDCHU_Data")); + m_pfnWriteAppSettings = reinterpret_cast(GetProcAddress(m_hInsydeDHCU, "WriteAppSettings")); + } + + bool SetKeyboardColour(Zone zone, const Colour& colour) override + { + if (zone != Zone::ALL) + { + return false; + } + + // Found in CLEVO Control Center v6.053 + const uint8_t mode = 8; + + const std::array dchuData { + colour[INDEX_COLOUR_GREEN], + colour[INDEX_COLOUR_RED], + colour[INDEX_COLOUR_BLUE], + 0xF0 + }; + + m_pfnSetDCHU_Data(103, dchuData.data(), dchuData.size()); + m_pfnWriteAppSettings(2, 81, colour.size(), colour.data()); + m_pfnWriteAppSettings(2, 32, 1, &mode); - bool SetKBColour(Zone zone, const Colour& colour) override; + return true; + } // Unsupported for now. - bool SendKBCode(uint32_t data) override; + bool SendKeyboardData(uint32_t data) override + { + return false; + } + + HMODULE LoadInsydeDCHU_DLL() + { + auto const hModule = LoadLibraryW(INSYDE_DLL); + + if (!hModule || hModule == INVALID_HANDLE_VALUE) + { + std::wcout << L"Cannot load " << INSYDE_DLL << L". Please ensure the DLL is within the same directory!\n"; + std::exit(STATUS_DLL_NOT_FOUND); + } + + return hModule; + } + + ~InsydeKBCommunicator() override + { + if (IS_HANDLE_VALID(m_hInsydeDHCU)) + { + FreeLibrary(m_hInsydeDHCU); + m_pfnSetDCHU_Data = nullptr; + m_pfnWriteAppSettings = nullptr; + } + } private: HMODULE m_hInsydeDHCU = nullptr; Detail::T_SetDCHU_Data m_pfnSetDCHU_Data = nullptr; Detail::T_WriteAppSettings m_pfnWriteAppSettings = nullptr; - - HMODULE LoadInsydeDCHU_DLL() const; }; \ No newline at end of file diff --git a/CppKeyboardColour/Keyboard.cpp b/CppKeyboardColour/Keyboard.cpp index 62fb412..0d4b4bf 100644 --- a/CppKeyboardColour/Keyboard.cpp +++ b/CppKeyboardColour/Keyboard.cpp @@ -2,7 +2,6 @@ #include "stdafx.h" #include "Keyboard.h" -#include "ColourFactory.h" #include "DeviceIdRetriever.h" #include "DeviceIdTranslator.h" #include "KeyboardCommunicatorFactory.h" @@ -23,8 +22,13 @@ Keyboard::Keyboard() void Keyboard::SetColour(uint8_t r, uint8_t g, uint8_t b, Zone zone) { - ColourFactory factory{}; - m_ptrKbComms->SetKBColour(zone, factory.Create(r, g, b)); + Colour colour{}; + + colour[INDEX_COLOUR_RED] = r; + colour[INDEX_COLOUR_GREEN] = g; + colour[INDEX_COLOUR_BLUE] = b; + + m_ptrKbComms->SetKeyboardColour(zone, colour); } KeyboardType Keyboard::GetKBType() const @@ -32,19 +36,18 @@ KeyboardType Keyboard::GetKBType() const return m_kbType; }; -void Keyboard::SendCode(uint32_t code) +void Keyboard::SysAnimation(SystemAnimation animation) { - m_ptrKbComms->SendKBCode(code); -} + switch (animation) + { + case SystemAnimation::KB_MODE_OFF: + return this->SetColour(0x00, 0x00, 0x00, Zone::ALL); -void Keyboard::SetBacklightOff() -{ - this->SetColour(0x00, 0x00, 0x00, Zone::ALL); -} + case SystemAnimation::KB_MODE_STANDARD: + return this->SetColour(0x00, 0x00, 0xFF, Zone::ALL); + } -void Keyboard::SetBacklightOn() -{ - this->SetColour(0x00, 0x00, 0xFF, Zone::ALL); + m_ptrKbComms->SendKeyboardData(static_cast(animation)); } void Keyboard::Animate(IAnimation& animation) @@ -65,7 +68,7 @@ void Keyboard::Animate(IAnimation& animation) } } -void Keyboard::PlayAnimation(IAnimation& animation, bool bShouldLoop /* = true */) +void Keyboard::PlayAnimation(IAnimation& animation, bool bShouldLoop /*= true */) { if (!animation.IsSupportedKB(this->GetKBType())) { diff --git a/CppKeyboardColour/Keyboard.h b/CppKeyboardColour/Keyboard.h index b5e87b9..ebb6f5e 100644 --- a/CppKeyboardColour/Keyboard.h +++ b/CppKeyboardColour/Keyboard.h @@ -4,6 +4,7 @@ #include "IKeyboard.h" #include "IAnimation.h" +#include "SystemAnimation.h" #include "IKeyboardCommunicator.h" class Keyboard @@ -12,12 +13,8 @@ class Keyboard public: Keyboard(); - void SendCode(uint32_t code) override; void SetColour(uint8_t r, uint8_t g, uint8_t b, Zone zone) override; - - // Turns the keyboard backlight to its default colour (which is blue for all CLEVO laptops) - void SetBacklightOn() override; - void SetBacklightOff() override; + void SysAnimation(SystemAnimation animation) override; void PlayAnimation(IAnimation& animation, bool bShouldLoop = true) override; KeyboardType GetKBType() const; diff --git a/CppKeyboardColour/KeyboardCommunicatorFactory.cpp b/CppKeyboardColour/KeyboardCommunicatorFactory.cpp deleted file mode 100644 index 840ed4f..0000000 --- a/CppKeyboardColour/KeyboardCommunicatorFactory.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "KeyboardCommunicatorFactory.h" - -#include "WmiKBCommunicator.h" -#include "InsydeKBCommunicator.h" -#include "FakeKeyboardCommunicator.h" - -KeyboardCommunicatorFactory::KeyboardCommunicatorFactory(std::unique_ptr pDeviceIdTranslator) - : m_pDeviceIdTranslator(std::move(pDeviceIdTranslator)) -{ -} - -IKeyboardCommunicatorPtr KeyboardCommunicatorFactory::Create(uint32_t deviceId) -{ - if (!m_pDeviceIdTranslator) - { - return nullptr; - } - - switch (m_pDeviceIdTranslator->DeviceIdToKBCommunicatorType(deviceId)) - { - case KBCommunicatorType::Fake: - return std::make_shared(); - - case KBCommunicatorType::Wmi: - return std::make_shared(); - - case KBCommunicatorType::Insyde: - return std::make_shared(); - } - - return nullptr; -} diff --git a/CppKeyboardColour/KeyboardCommunicatorFactory.h b/CppKeyboardColour/KeyboardCommunicatorFactory.h index 68fffb2..4aa2ece 100644 --- a/CppKeyboardColour/KeyboardCommunicatorFactory.h +++ b/CppKeyboardColour/KeyboardCommunicatorFactory.h @@ -1,16 +1,47 @@ // Created by DeviceIoControl + #pragma once +#include "stdafx.h" +#include "xstl.h" #include "IKeyboardCommunicator.h" + +#include "WmiKBCommunicator.h" +#include "InsydeKBCommunicator.h" +#include "FakeKeyboardCommunicator.h" + #include "IDeviceIdTranslator.h" class KeyboardCommunicatorFactory { public: - KeyboardCommunicatorFactory(std::unique_ptr pDeviceIdTranslator); + KeyboardCommunicatorFactory(std::unique_ptr pDeviceIdTranslator) + : m_pDeviceIdTranslator(std::move(pDeviceIdTranslator)) + { + } + + IKeyboardCommunicatorPtr Create(uint32_t deviceId) + { + if (!m_pDeviceIdTranslator) + { + return nullptr; + } + + switch (m_pDeviceIdTranslator->DeviceIdToKBCommunicatorType(deviceId)) + { + case KBCommunicatorType::Fake: + return std::make_shared(); + + case KBCommunicatorType::Wmi: + return std::make_shared(); - IKeyboardCommunicatorPtr Create(uint32_t deviceId); + case KBCommunicatorType::Insyde: + return std::make_shared(); + } + return nullptr; + } + ~KeyboardCommunicatorFactory() = default; private: diff --git a/CppKeyboardColour/MathConstants.h b/CppKeyboardColour/MathConstants.h index 1a9272c..110b25a 100644 --- a/CppKeyboardColour/MathConstants.h +++ b/CppKeyboardColour/MathConstants.h @@ -1,4 +1,2 @@ -// Created by DeviceIoControl - #pragma once constexpr float MATH_PI = 3.14159f; diff --git a/CppKeyboardColour/NamedPipe.h b/CppKeyboardColour/NamedPipe.h new file mode 100644 index 0000000..4a07879 --- /dev/null +++ b/CppKeyboardColour/NamedPipe.h @@ -0,0 +1,43 @@ +#pragma once + +#include "stdafx.h" + +class NamedPipe +{ +public: + NamedPipe(const std::wstring& strPipeName, uint32_t uiBufferLength) + : m_dwMessageLength(uiBufferLength) + { + m_hPipe = CreatePipeInternal(strPipeName, uiBufferLength, 4); + } + + bool Write(const uint8_t* pData, uint32_t uiBytes) + { + DWORD dwBytesWritten = NULL; + return WriteFile(m_hPipe, pData, uiBytes, &dwBytesWritten, nullptr); + } + + bool Read(uint8_t* pData, uint32_t uiBytes) + { + DWORD dwBytesRead = NULL; + return ReadFile(m_hPipe, pData, uiBytes, &dwBytesRead, nullptr); + } + + DWORD MessageLength() const { return m_dwMessageLength; } + + ~NamedPipe() + { + CloseHandle(m_hPipe); + } + +private: + HANDLE m_hPipe = nullptr; + DWORD m_dwMessageLength = NULL; + + HANDLE CreatePipeInternal(const std::wstring& strPipeName, uint32_t uiBufferLength, uint16_t maxInstances) + { + return CreateNamedPipeW(strPipeName.c_str(), PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT | PIPE_REJECT_REMOTE_CLIENTS, maxInstances, + uiBufferLength, uiBufferLength, NMPWAIT_USE_DEFAULT_WAIT, nullptr); + } +}; \ No newline at end of file diff --git a/CppKeyboardColour/PulsatingBlinkAnimation.cpp b/CppKeyboardColour/PulsatingBlinkAnimation.cpp index 9d7cea4..ecf3f85 100644 --- a/CppKeyboardColour/PulsatingBlinkAnimation.cpp +++ b/CppKeyboardColour/PulsatingBlinkAnimation.cpp @@ -1,5 +1,3 @@ -// Created by DeviceIoControl - #include "stdafx.h" #include "PulsatingBlinkAnimation.h" #include "ColourFactory.h" diff --git a/CppKeyboardColour/PulsatingBlinkAnimation.h b/CppKeyboardColour/PulsatingBlinkAnimation.h index e186afa..eadddf2 100644 --- a/CppKeyboardColour/PulsatingBlinkAnimation.h +++ b/CppKeyboardColour/PulsatingBlinkAnimation.h @@ -1,5 +1,3 @@ -// Created by DeviceIoControl - #pragma once #include "Colour.h" diff --git a/CppKeyboardColour/Service.h b/CppKeyboardColour/Service.h new file mode 100644 index 0000000..b32768e --- /dev/null +++ b/CppKeyboardColour/Service.h @@ -0,0 +1,88 @@ +// Created by DeviceIoControl + +#pragma once + +#include "stdafx.h" + +class ServiceControlHandler +{ +public: + ServiceControlHandler(const std::wstring& strServiceName, DWORD dwControlsAccepted, const std::vector& arguments) + { + if (this->OnInitialise(arguments)) + { + m_hServiceStatus = RegisterServiceCtrlHandlerExW(strServiceName.c_str(), &ServiceControlDispatcher, this); + + SERVICE_STATUS svcStatus{}; + + svcStatus.dwWaitHint = 5000; + svcStatus.dwCurrentState = SERVICE_ACTIVE; + svcStatus.dwControlsAccepted = dwControlsAccepted; + svcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + + SetServiceStatus(m_hServiceStatus, &svcStatus); + } + } + + bool OnContinue(DWORD dwEventType, LPVOID lpEventData) + { + return false; + } + + bool OnPause(DWORD dwEventType, LPVOID lpEventData) + { + return false; + } + + bool OnShutdown(DWORD dwEventType, LPVOID lpEventData) + { + return false; + } + + bool OnStop(DWORD dwEventType, LPVOID lpEventData) + { + return false; + } + + bool OnInterrogate(DWORD dwEventType, LPVOID lpEventData) + { + return false; + } + + ~ServiceControlHandler() = default; + +private: + SERVICE_STATUS_HANDLE m_hServiceStatus; // Does not need to be closed. + + bool OnInitialise(const std::vector& strArguments) + { + return false; + } + + static DWORD __stdcall ServiceControlDispatcher(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext) + { + auto pThis = static_cast(lpContext); + + switch (dwControl) + { + case SERVICE_CONTROL_CONTINUE: + return pThis->OnContinue(dwEventType, lpEventData) ? NO_ERROR : GetLastError(); + + case SERVICE_CONTROL_PAUSE: + return pThis->OnPause(dwEventType, lpEventData) ? NO_ERROR : GetLastError(); + + case SERVICE_CONTROL_SHUTDOWN: + return pThis->OnShutdown(dwEventType, lpEventData) ? NO_ERROR : GetLastError(); + + case SERVICE_CONTROL_STOP: + return pThis->OnStop(dwEventType, lpEventData) ? NO_ERROR : GetLastError(); + + case SERVICE_CONTROL_INTERROGATE: + return pThis->OnInterrogate(dwEventType, lpEventData) ? NO_ERROR : GetLastError(); + } + + return ERROR_CALL_NOT_IMPLEMENTED; + } +}; + +using ServiceControlHandlerPtr = std::shared_ptr; \ No newline at end of file diff --git a/CppKeyboardColour/ServiceMain.h b/CppKeyboardColour/ServiceMain.h new file mode 100644 index 0000000..69013d4 --- /dev/null +++ b/CppKeyboardColour/ServiceMain.h @@ -0,0 +1,22 @@ +// Created by DeviceIoControl + +#pragma once + +#include "stdafx.h" +#include "Service.h" + +static std::wstring g_strServiceName = L"CLEVO Keyboard Colour"; +static ServiceControlHandlerPtr g_pServiceControlHandler; + +VOID WINAPI ServiceMain(DWORD dwNumberOfArgs, LPWSTR* lpServiceArguments) +{ + std::vector serviceArguments(dwNumberOfArgs); + + for (size_t i = 0; i < dwNumberOfArgs; ++i) + { + serviceArguments[i].assign(lpServiceArguments[i]); + } + + constexpr DWORD dwControlAccepted = SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP; + g_pServiceControlHandler = std::make_shared(g_strServiceName, dwControlAccepted, serviceArguments); +} \ No newline at end of file diff --git a/CppKeyboardColour/SingleColourBreatheAnimation.cpp b/CppKeyboardColour/SingleColourBreatheAnimation.cpp new file mode 100644 index 0000000..de8477e --- /dev/null +++ b/CppKeyboardColour/SingleColourBreatheAnimation.cpp @@ -0,0 +1,72 @@ +//Created by BenRango + +#include "stdafx.h" +#include "MathConstants.h" +#include "SingleColourBreatheAnimation.h" +#include "ColourFactory.h" + +constexpr size_t STEPS = 40.0f; +constexpr size_t FRAME_DURATION_MS = 45; + +SingleColourBreatheAnimation::SingleColourBreatheAnimation(const Colour& targetColour) +{ + GenerateBreathe(targetColour, STEPS, FRAME_DURATION_MS); +} + +std::wstring SingleColourBreatheAnimation::GetName() const +{ + return L"Single Colour Breathe"; +} + +std::optional SingleColourBreatheAnimation::GetFrame(uint32_t idx) +{ + return m_frames.GetFrame(idx); +} + +bool SingleColourBreatheAnimation::IsSupportedKB(KeyboardType kbType) const +{ + return (kbType != KeyboardType::PER_KEY && kbType != KeyboardType::NONE); +} + +uint32_t SingleColourBreatheAnimation::Size() const +{ + return m_frames.Size(); +} + +void SingleColourBreatheAnimation::AddFrame(const Frame& frame) +{ + m_frames.AddFrame(frame); +} + +void SingleColourBreatheAnimation::GenerateBreathe(const Colour& targetColour, uint32_t steps, uint32_t stepTimeMs) +{ + // Fade in + for (size_t i = 0; i < steps; ++i) + { + Colour currentColour{}; + const auto channelBrightness = (180.0f / steps) * i; + + for (size_t channel = 0; channel < targetColour.size(); ++channel) + { + currentColour[channel] = targetColour[channel] * std::sin(channelBrightness * (MATH_PI / 180.0f)); + } + + Frame frame(Zone::ALL, currentColour, stepTimeMs); + this->AddFrame(frame); + } + + // Fade out + for (size_t i = steps; i > 0; --i) + { + Colour currentColour{}; + const auto channelBrightness = (180.0f / steps) * i; + + for (size_t channel = 0; channel < targetColour.size(); ++channel) + { + currentColour[channel] = targetColour[channel] * std::sin(channelBrightness * (MATH_PI / 180.0f)); + } + + Frame frame(Zone::ALL, currentColour, stepTimeMs); + this->AddFrame(frame); + } +} \ No newline at end of file diff --git a/CppKeyboardColour/SingleColourBreatheAnimation.h b/CppKeyboardColour/SingleColourBreatheAnimation.h new file mode 100644 index 0000000..8ad3397 --- /dev/null +++ b/CppKeyboardColour/SingleColourBreatheAnimation.h @@ -0,0 +1,28 @@ +//Created by BenRango + +#pragma once + +#include "IAnimation.h" +#include "FrameCollection.h" + + +class SingleColourBreatheAnimation : public IAnimation +{ +public: + SingleColourBreatheAnimation(const Colour& targetColour); + + std::wstring GetName() const override; + + std::optional GetFrame(uint32_t idx) override; + + bool IsSupportedKB(KeyboardType kbType) const override; + + uint32_t Size() const override; + +private: + FrameCollection m_frames; + + void AddFrame(const Frame& frame); + + void GenerateBreathe(const Colour& targetColour, uint32_t steps, uint32_t stepTimeMs); +}; \ No newline at end of file diff --git a/CppKeyboardColour/SingleInstanceEvent.h b/CppKeyboardColour/SingleInstanceEvent.h deleted file mode 100644 index fb13b5e..0000000 --- a/CppKeyboardColour/SingleInstanceEvent.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include "stdafx.h" - -#define SINGLE_INSTANCE_NAME L"Global\\CLEVO_KBC_INSTANCE" - -bool IsSingleInstance() -{ - // NOTE: Do not close this handle. We want to leak this as it will last the entirely of the programs lifetime. - HANDLE hInstance = CreateEventExW(nullptr, SINGLE_INSTANCE_NAME, CREATE_EVENT_INITIAL_SET, EVENT_ALL_ACCESS); - return !(GetLastError() == ERROR_ALREADY_EXISTS); -} diff --git a/CppKeyboardColour/SystemAnimation.h b/CppKeyboardColour/SystemAnimation.h index 9c36e8d..8c93486 100644 --- a/CppKeyboardColour/SystemAnimation.h +++ b/CppKeyboardColour/SystemAnimation.h @@ -7,6 +7,8 @@ // In-built keyboard animations. enum class SystemAnimation : uint32_t { + KB_MODE_OFF = 0xFFFFFFFE, + KB_MODE_STANDARD = 0xEFFFFFFF, KB_MODE_WAVE = 0xB0000000, // Works but has side-effects. KB_MODE_CYCLE = 0x33010000, KB_MODE_DANCE = 0x80000000, diff --git a/CppKeyboardColour/Test.h b/CppKeyboardColour/Test.h new file mode 100644 index 0000000..f9305f4 --- /dev/null +++ b/CppKeyboardColour/Test.h @@ -0,0 +1,35 @@ +#pragma once + +#include "stdafx.h" +#include "WbemService.h" + +#define GET_PRODUCT_DLL_PATH L"C:\\Program Files (x86)\\HotKey\\GetProductdll.dll" +#define IS_HANDLE_VALID(handle) (handle && handle != INVALID_HANDLE_VALUE) + +using T_GetProductID_PCI = uint32_t(__stdcall*)(); + +void Test() +{ + auto const hGetProductDLL = LoadLibraryW(GET_PRODUCT_DLL_PATH); + + if (!IS_HANDLE_VALID(hGetProductDLL)) + { + FreeLibrary(hGetProductDLL); + + std::wcout << L"Failed to load: " << GET_PRODUCT_DLL_PATH << L"\n"; + std::cout << "Please run as Administrator. Press enter to exit.\n"; + + std::getchar(); + + std::exit(0); + } + + T_GetProductID_PCI pfnGetProductID_PCI = (decltype(pfnGetProductID_PCI))GetProcAddress(hGetProductDLL, "GetProductID_PCI"); + + std::cout << "Product PCI Device ID: 0x" << (void*)pfnGetProductID_PCI() << "\n"; + std::cout << "Press Enter to exit.\n"; + + std::getchar(); + + std::exit(0); +} diff --git a/CppKeyboardColour/WmiKBCommunicator.cpp b/CppKeyboardColour/WmiKBCommunicator.cpp deleted file mode 100644 index fdcf0e1..0000000 --- a/CppKeyboardColour/WmiKBCommunicator.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Created by DeviceIoControl - -#include "stdafx.h" -#include "WmiKBCommunicator.h" -#include "WbemService.h" - -#define CLEVO_WMI_OBJECT_NAME L"CLEVO_GET" -#define CLEVO_WMI_KB_FUNCTION_NAME L"SetKBLED" -#define CLEVO_WMI_INSTANCE_NAME L"CLEVO_GET.InstanceName='ACPI\\PNP0C14\\0_0'" - -WmiKBCommunicator::WmiKBCommunicator() -{ - m_pClevoGetObject = WMI::Get()->GetWbemClassObject(CLEVO_WMI_OBJECT_NAME); - - IWbemClassObject* pDataParameter = nullptr; - m_pClevoGetObject->GetMethod(CLEVO_WMI_KB_FUNCTION_NAME, NULL, &pDataParameter, nullptr); - - m_pDataParameter.Reset(pDataParameter); -} - -bool WmiKBCommunicator::SetKBColour(Zone zone, const Colour& colour) -{ - if (zone == Zone::ALL) - { - for (int i = 0; i < 3; ++i) - { - const std::array parameterData - { - colour[INDEX_COLOUR_GREEN], - colour[INDEX_COLOUR_RED], - colour[INDEX_COLOUR_BLUE], - 0xF0 + i - }; - - this->SendKBCode(*reinterpret_cast(parameterData.data())); - } - - return true; - } - else - { - const std::array parameterData - { - colour[INDEX_COLOUR_GREEN], - colour[INDEX_COLOUR_RED], - colour[INDEX_COLOUR_BLUE], - 0xF0 + static_cast(zone) - }; - - return this->SendKBCode(*reinterpret_cast(parameterData.data())); - } - - return false; -} - -bool WmiKBCommunicator::SendKBCode(uint32_t code) -{ - VARIANT parameters = { 0 }; - parameters.vt = VT_I4; - parameters.uintVal = code; - - const auto hr = m_pDataParameter->Put((BSTR)L"Data", NULL, ¶meters, CIM_UINT32); - std::ignore = WMI::Get()->ExecuteMethod(CLEVO_WMI_INSTANCE_NAME, CLEVO_WMI_KB_FUNCTION_NAME, m_pDataParameter.Get()); - - return SUCCEEDED(hr); -} \ No newline at end of file diff --git a/CppKeyboardColour/WmiKBCommunicator.h b/CppKeyboardColour/WmiKBCommunicator.h index 8131f5d..56b2b76 100644 --- a/CppKeyboardColour/WmiKBCommunicator.h +++ b/CppKeyboardColour/WmiKBCommunicator.h @@ -2,18 +2,77 @@ #pragma once +#include "stdafx.h" +#include "WbemService.h" #include "ScopedComPtr.h" #include "IKeyboardCommunicator.h" +#define CLEVO_WMI_OBJECT_NAME L"CLEVO_GET" +#define CLEVO_WMI_KB_FUNCTION_NAME L"SetKBLED" +#define CLEVO_WMI_INSTANCE_NAME L"CLEVO_GET.InstanceName='ACPI\\PNP0C14\\0_0'" + class WmiKBCommunicator : public IKeyboardCommunicator { public: - WmiKBCommunicator(); - ~WmiKBCommunicator() = default; + WmiKBCommunicator() + { + m_pClevoGetObject = WMI::Get()->GetWbemClassObject(CLEVO_WMI_OBJECT_NAME); + + IWbemClassObject* pDataParameter = nullptr; + m_pClevoGetObject->GetMethod(CLEVO_WMI_KB_FUNCTION_NAME, NULL, &pDataParameter, nullptr); + + m_pDataParameter.Reset(pDataParameter); + } + + bool SetKeyboardColour(Zone zone, const Colour& colour) override + { + if (zone == Zone::ALL) + { + for (int i = 0; i < 3; ++i) + { + const std::array parameterData + { + colour[INDEX_COLOUR_GREEN], + colour[INDEX_COLOUR_RED], + colour[INDEX_COLOUR_BLUE], + 0xF0 + i + }; + + this->SendKeyboardData(*reinterpret_cast(parameterData.data())); + } + + return true; + } + else + { + const std::array parameterData + { + colour[INDEX_COLOUR_GREEN], + colour[INDEX_COLOUR_RED], + colour[INDEX_COLOUR_BLUE], + 0xF0 + static_cast(zone) + }; - bool SetKBColour(Zone zone, const Colour& colour) override; - bool SendKBCode(uint32_t code) override; + return this->SendKeyboardData(*reinterpret_cast(parameterData.data())); + } + + return false; + } + + bool SendKeyboardData(uint32_t data) override + { + VARIANT parameters = { 0 }; + parameters.vt = VT_I4; + parameters.uintVal = data; + + const auto hr = m_pDataParameter->Put((BSTR)L"Data", NULL, ¶meters, CIM_UINT32); + std::ignore = WMI::Get()->ExecuteMethod(CLEVO_WMI_INSTANCE_NAME, CLEVO_WMI_KB_FUNCTION_NAME, m_pDataParameter.Get()); + + return SUCCEEDED(hr); + } + + ~WmiKBCommunicator() = default; private: ScopedComPtr m_pDataParameter; diff --git a/CppKeyboardColour/resource.h b/CppKeyboardColour/resource.h new file mode 100644 index 0000000..09ff4fb --- /dev/null +++ b/CppKeyboardColour/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by CppKeyboardColour.rc + +// Valeurs par dfaut suivantes des nouveaux objets +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/CppKeyboardColour/xstl.h b/CppKeyboardColour/xstl.h new file mode 100644 index 0000000..f34494f --- /dev/null +++ b/CppKeyboardColour/xstl.h @@ -0,0 +1,11 @@ +#pragma once +#include "stdafx.h" + +namespace xstd +{ + template + auto to_underlying(T enumType) + { + return static_cast>(enumType); + } +} // namespace xstd \ No newline at end of file diff --git a/KeyboardColor GUI/CMakeLists.txt b/KeyboardColor GUI/CMakeLists.txt new file mode 100644 index 0000000..d200703 --- /dev/null +++ b/KeyboardColor GUI/CMakeLists.txt @@ -0,0 +1,40 @@ +#//Created by BenRango + +cmake_minimum_required(VERSION 3.16) + +project(KeyboardColor VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Qt6 REQUIRED COMPONENTS Widgets) + +set(PROJECT_SOURCES + main.cpp + keyboardcoulour.cpp + keyboardcoulour.h + keyboardcoulour.ui + ui_keyboardcoulour.h + appicon.rc +) + + +qt_add_executable(KeyboardColor + ${PROJECT_SOURCES} + resources.qrc +) + + +target_link_libraries(KeyboardColor PRIVATE Qt6::Widgets) + + +set(ICON_FILE_NAME "favicon.ico") +set_target_properties(KeyboardColor PROPERTIES + WIN32_EXECUTABLE ON + WIN32_ICON "${ICON_FILE_NAME}" +) + diff --git a/KeyboardColor GUI/CMakeLists.txt.user b/KeyboardColor GUI/CMakeLists.txt.user new file mode 100644 index 0000000..5a90554 --- /dev/null +++ b/KeyboardColor GUI/CMakeLists.txt.user @@ -0,0 +1,438 @@ + + + + + + EnvironmentId + {fd4ef708-b0c6-46d9-af8c-4316f9988463} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.2 MinGW 64-bit + Desktop Qt 6.9.2 MinGW 64-bit + qt.qt6.692.win64_mingw_kit + 0 + 0 + 0 + + Debug + 2 + false + + -DQT_MAINTENANCE_TOOL:FILEPATH=D:/Qt/MaintenanceTool.exe +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + 0 + C:\Programmation\Qt\KeyboardColor\build\Desktop_Qt_6_9_2_MinGW_64_bit-Debug + + + + + all + + false + + true + Compiler + CMakeProjectManager.MakeStep + + 1 + Compiler + Compiler + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + Compiler + CMakeProjectManager.MakeStep + + 1 + Nettoyer + Nettoyer + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + 0 + 0 + + + 0 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + + + + + + + + false + + true + ApplicationManagerPlugin.Deploy.CMakePackageStep + + + install-package --acknowledge + true + Installer le paquet Application Manager + ApplicationManagerPlugin.Deploy.InstallPackageStep + + + + + + + + 2 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ApplicationManagerPlugin.Deploy.Configuration + + 2 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + KeyboardColor + CMakeProjectManager.CMakeRunConfiguration. + KeyboardColor + false + true + true + true + C:/Programmation/Qt/KeyboardColor/build/Desktop_Qt_6_9_2_MinGW_64_bit-Debug + + 1 + + + Release + 2 + false + + -DQT_MAINTENANCE_TOOL:FILEPATH=D:/Qt/MaintenanceTool.exe +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + C:\Programmation\Qt\KeyboardColor\build\Desktop_Qt_6_9_2_MinGW_64_bit-Release + + + + + all + + false + + true + Compiler + CMakeProjectManager.MakeStep + + 1 + Compiler + Compiler + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + Compiler + CMakeProjectManager.MakeStep + + 1 + Nettoyer + Nettoyer + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + 0 + 0 + + + 0 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + + + + + + + + false + + true + ApplicationManagerPlugin.Deploy.CMakePackageStep + + + install-package --acknowledge + true + Installer le paquet Application Manager + ApplicationManagerPlugin.Deploy.InstallPackageStep + + + + + + + + 2 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ApplicationManagerPlugin.Deploy.Configuration + + 2 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + KeyboardColor + CMakeProjectManager.CMakeRunConfiguration. + KeyboardColor + false + true + true + true + + 1 + + 2 + + + 0 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + + + + + + + + false + + true + ApplicationManagerPlugin.Deploy.CMakePackageStep + + + install-package --acknowledge + true + Installer le paquet Application Manager + ApplicationManagerPlugin.Deploy.InstallPackageStep + + + + + + + + 2 + Déploiement + Déploiement + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ApplicationManagerPlugin.Deploy.Configuration + + 2 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + KeyboardColor + CMakeProjectManager.CMakeRunConfiguration. + KeyboardColor + false + true + true + true + C:/Programmation/Qt/KeyboardColor/build/Desktop_Qt_6_9_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/KeyboardColor GUI/appicon.rc b/KeyboardColor GUI/appicon.rc new file mode 100644 index 0000000..da3e7bc --- /dev/null +++ b/KeyboardColor GUI/appicon.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "favicon.ico" \ No newline at end of file diff --git a/KeyboardColor GUI/favicon.ico b/KeyboardColor GUI/favicon.ico new file mode 100644 index 0000000..e584a12 Binary files /dev/null and b/KeyboardColor GUI/favicon.ico differ diff --git a/KeyboardColor GUI/keyboardcoulour - Copie.ui b/KeyboardColor GUI/keyboardcoulour - Copie.ui new file mode 100644 index 0000000..f266efd --- /dev/null +++ b/KeyboardColor GUI/keyboardcoulour - Copie.ui @@ -0,0 +1,97 @@ + + + KeyboardCoulour + + + + 0 + 0 + 800 + 600 + + + + KeyboardCoulour + + + background-color: rgb(9, 9, 162); + + + + + + 360 + 160 + 121 + 111 + + + + font: 16pt "Verdana"; +background-color: rgb(0, 0, 47); +radius : 5cm; + + + Breathe + + + + + + 600 + 160 + 131 + 101 + + + + Colour Transform + + + + + + 90 + 50 + 191 + 51 + + + + font: 16pt "Verdana"; +background-color: rgb(43, 89, 255); +radius : 2cm; + + + Keyboard Colour + + + + + + 630 + 60 + 121 + 24 + + + + Run Animation + + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/KeyboardColor GUI/keyboardcoulour.cpp b/KeyboardColor GUI/keyboardcoulour.cpp new file mode 100644 index 0000000..e6c30f0 --- /dev/null +++ b/KeyboardColor GUI/keyboardcoulour.cpp @@ -0,0 +1,194 @@ +//Created by BenRango + +#include "keyboardcoulour.h" +#include "ui_keyboardcoulour.h" +#include +#include +#include + +KeyboardCoulour::KeyboardCoulour(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::KeyboardCoulour) +{ + this->process = new QProcess(this); + ui->setupUi(this); + + trayIcon = new QSystemTrayIcon(this); + trayIcon->setIcon(QIcon(":/icons/favicon.ico")); + trayIcon->setToolTip("KeyboardColor"); + + QMenu *trayMenu = new QMenu(this); + QAction *restoreAction = new QAction("Ouvrir", this); + QAction *quitAction = new QAction("Quitter", this); + connect(restoreAction, &QAction::triggered, this, &QWidget::showNormal); + connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); + + + trayMenu->addAction(restoreAction); + trayMenu->addAction(quitAction); + trayIcon->setContextMenu(trayMenu); + + connect(trayIcon, &QSystemTrayIcon::activated, this, [this](QSystemTrayIcon::ActivationReason reason) { + if (reason == QSystemTrayIcon::DoubleClick) { + this->showNormal(); + } + }); + + trayIcon->show(); +// QtAwesome* awesome = new QtAwesome(this); +// awesome->initFontAwesome(); + +// ui->breathePushButton->setIcon(awesome->icon(fa::tint)); +// ui->colourTfPushButton->setIcon(awesome->icon(fa::exchangalt)); +// ui->runPushButton->setIcon(awesome->icon(fa::playcircle)); +// ui->stopPushButton->setIcon(awesome->icon(fa::stopcircle)); + + connect(ui->redPushButton, &QPushButton::clicked, this, [this]() { + setColour("red"); + }); + + connect(ui->bluePushButton, &QPushButton::clicked, this, [this]() { + setColour("blue"); + }); + + connect(ui->greenPushButton, &QPushButton::clicked, this, [this]() { + setColour("green"); + }); + connect(ui->cyanPushButton, &QPushButton::clicked, this, [this]() { + setColour("cyan"); + }); + connect(ui->grayPushButton, &QPushButton::clicked, this, [this]() { + setColour("gray"); + }); + connect(ui->greenPushButton, &QPushButton::clicked, this, [this]() { + setColour("green"); + }); + connect(ui->breathePushButton, &QPushButton::clicked, this, &KeyboardCoulour::setBreathe); + connect(ui->colourTfPushButton, &QPushButton::clicked, this, &KeyboardCoulour::setColourTF); + connect(ui->stopPushButton, &QPushButton::clicked, this, &KeyboardCoulour::stopAnimation); + connect(ui->staticPushButton, &QPushButton::clicked, this, &KeyboardCoulour::setStatic); + setColourTF(); + this->setWindowIcon(QIcon(":icons/logo2.png")); + this->colour = "none"; +} + + +void KeyboardCoulour::setAnimation() +{ + if (this->process->state() == QProcess::Running) { + this->process->kill(); + this->process->waitForFinished(1000); + } + + QString current_path = QString::fromStdString(std::filesystem::current_path().string()); + current_path = current_path.replace("\\", "/"); + QDir dir(current_path); + dir.cdUp(); + dir.cd("Build"); + qDebug() <<"dir = "<< dir; + QString CKD_path = dir.filePath("CLEVO_KeyboardColour.exe"); + CKD_path = CKD_path.replace("\\", "/"); + qDebug() <<"CKD_path = "<< CKD_path; + + QString commande = "\"" + CKD_path + "\""+ " theme " + this->animation; + + //this->process->setStandardOutputProcessChannelMode(QProcess::MergedChannels); + //this->process->setReadChannel(QProcess::MergedChannels); + + this->process->start(commande); + + if (this->process->state() == QProcess::Running) { + qDebug() << "Animation is running : " << commande; + } else { + qDebug() << "Failed to run the animation ."; + qDebug() << "Error : " << this->process->errorString(); + } +} +void KeyboardCoulour::setColour(QString colour){ + ui->breathePushButton->setStyleSheet("background-color: #22223b;"); + ui->breathePushButton->setEnabled(true); + this->colour = "red"; + ui->selectedColorLabel->setText("Couleur s\303\251lectionn\303\251e : " + colour); + this->animation = "singlecolour " + colour; +} +void KeyboardCoulour::stopAnimation() +{ + if (this->process->state() == QProcess::Running) { + ui->staticPushButton->setStyleSheet("background-color : #22223b"); + ui->staticPushButton->setEnabled(true); + this->colour = "none"; + ui->colourTfPushButton->setStyleSheet("background-color : #22223b"); + ui->colourTfPushButton->setEnabled(true); + + ui->breathePushButton->setStyleSheet("background-color: #22223b;"); + ui->breathePushButton->setEnabled(true); + + this->process->kill(); + qDebug() << "Animation stopped."; + } +} + +void KeyboardCoulour::changeAnimation(QString animation) +{ + this->animation = animation; + return; +} +void KeyboardCoulour::setColourTF() +{ + this->animation = "colourtransform"; + this->colour == "none"; + ui->breathePushButton->setEnabled(true); + ui->breathePushButton->setStyleSheet("background-color: #22223b;"); + ui->staticPushButton->setStyleSheet("background-color : #22223b"); + ui->staticPushButton->setEnabled(true); + ui->colourTfPushButton->setEnabled(false); + ui->colourTfPushButton->setStyleSheet("background-color: gray;"); + setAnimation(); + return; +} +void KeyboardCoulour::setStatic() +{ + + this->colour == "none"; + if (this->process->state() == QProcess::Running) { + ui->colourTfPushButton->setEnabled(true); + ui->breathePushButton->setEnabled(true); + ui->breathePushButton->setStyleSheet("background-color: #22223b;"); + this->process->kill(); + qDebug() << "Animation arrêtée."; + } + ui->staticPushButton->setStyleSheet("background-color : gray"); + ui->staticPushButton->setEnabled(false); + ui->breathePushButton->setEnabled(true); + ui->breathePushButton->setStyleSheet("background-color: #22223b;"); + ui->colourTfPushButton->setEnabled(true); + ui->colourTfPushButton->setStyleSheet("background-color: #22223b;"); + return; +} +void KeyboardCoulour::setBreathe() +{ + if (this->colour != "none" || !this->colour.isEmpty()){ + this->animation = "singlebreathe "+ this->colour; + } + else{ + this->animation = "freshbreathe"; + ui->breathePushButton->setEnabled(false); + ui->breathePushButton->setStyleSheet("background-color: gray;"); + } + ui->staticPushButton->setStyleSheet("background-color : #22223b"); + ui->staticPushButton->setEnabled(true); + ui->colourTfPushButton->setEnabled(true); + ui->colourTfPushButton->setStyleSheet("background-color: #22223b;"); + setAnimation(); + return; +} + +void KeyboardCoulour::closeEvent(QCloseEvent *event) +{ + this->hide(); + event->ignore(); +} +KeyboardCoulour::~KeyboardCoulour() +{ + delete ui; +} diff --git a/KeyboardColor GUI/keyboardcoulour.h b/KeyboardColor GUI/keyboardcoulour.h new file mode 100644 index 0000000..257ac8d --- /dev/null +++ b/KeyboardColor GUI/keyboardcoulour.h @@ -0,0 +1,43 @@ +//Created by BenRango + +#ifndef KEYBOARDCOULOUR_H +#define KEYBOARDCOULOUR_H +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class KeyboardCoulour; +} +QT_END_NAMESPACE + +class KeyboardCoulour : public QMainWindow +{ + Q_OBJECT + + + + public: + KeyboardCoulour(QWidget *parent = nullptr); + void setBreathe(); + void setColour(QString colour); + void setColourTF(); + void setStatic(); + void setAnimation(); + void stopAnimation(); + void changeAnimation(QString); + ~KeyboardCoulour(); + + protected: + void closeEvent(QCloseEvent *event) override; + + private: + QSystemTrayIcon *trayIcon; + QProcess *process; + Ui::KeyboardCoulour *ui; + QString animation; + QString colour; +}; +#endif // KEYBOARDCOULOUR_H diff --git a/KeyboardColor GUI/keyboardcoulour.ui b/KeyboardColor GUI/keyboardcoulour.ui new file mode 100644 index 0000000..b07c08c --- /dev/null +++ b/KeyboardColor GUI/keyboardcoulour.ui @@ -0,0 +1,368 @@ + + + KeyboardCoulour + + + + 0 + 0 + 1164 + 600 + + + + Keyboard Colour Controller + + + + /* Variables de style */ + QWidget#centralwidget { + background-color: #1a1a2e; + color: #e0e0f0; + } + + /* Styles des boutons d'animation (cartes) */ + QPushButton { + background-color: #22223b; + border: 2px solid transparent; + border-radius: 15px; + padding: 30px; + color: #e0e0f0; + font-family: 'Verdana'; + font-weight: 600; + text-align: center; + } + QPushButton:hover { + border: 2px solid #e94560; + } + QPushButton:checked { + border: 2px solid #007bff; + } + + /* Styles des boutons d'action */ + QPushButton#runPushButton { + background-color: #2ecc71; + color: white; + font-size: 16px; + border-radius: 8px; + padding: 10px 20px; + } + QPushButton#stopPushButton { + background-color: #e74c3c; + color: white; + font-size: 16px; + border-radius: 8px; + padding: 10px 20px; + } + + /* Style du QLabel (titre) */ + QLabel { + font: 24pt "Verdana"; + font-weight: 600; + color: #e94560; + } + + /* Style de la barre latérale */ + QWidget#sidebar { + background-color: #22223b; + border-right: 1px solid #3b3a4d; + } + + /* Style des boutons de couleur */ + .colorButton { + min-width: 50px; + min-height: 50px; + max-width: 50px; + max-height: 50px; + border-radius: 25px; + padding: 0; + } + /* Styles des couleurs individuelles */ + QPushButton#redPushButton { background-color: rgb(255, 0, 0); } + QPushButton#greenPushButton { background-color: rgb(0, 255, 0); } + QPushButton#bluePushButton { background-color: rgb(0, 0, 255); } + QPushButton#yellowPushButton { background-color: rgb(255, 255, 0); } + QPushButton#cyanPushButton { background-color: rgb(0, 255, 255); } + QPushButton#magentaPushButton { background-color: rgb(255, 0, 255); } + QPushButton#whitePushButton { background-color: rgb(255, 255, 255); } + QPushButton#blackPushButton { background-color: rgb(0, 0, 0); } + QPushButton#orangePushButton { background-color: rgb(255, 165, 0); } + QPushButton#purplePushButton { background-color: rgb(128, 0, 128); } + QPushButton#pinkPushButton { background-color: rgb(255, 192, 203); } + QPushButton#brownPushButton { background-color: rgb(165, 42, 42); } + QPushButton#grayPushButton { background-color: rgb(128, 128, 128); } + QPushButton#limePushButton { background-color: rgb(50, 205, 50); } + QPushButton#goldPushButton { background-color: rgb(255, 215, 0); } + QPushButton#silverPushButton { background-color: rgb(192, 192, 192); } + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 30 + + + 30 + + + 30 + + + 30 + + + + + Keyboard Colour + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + padding: 40px; + + + + 40 + + + 40 + + + 40 + + + 40 + + + 40 + + + + + + + font-size: 1.6rem; font-weight: 600; color: #e0e0f0; + + + Lighting Effects + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 16777215 + 70 + + + + padding: 5px 8px; +width : 80px; +margin-left : 30px + + + Stop + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 20 + + + + + Breathe + + + + + + + Colour Transform + + + + + + + Static Colours + + + + + + + Select a color for Breathe: + + + font-size: 14pt; color: #e0e0f0; margin-bottom: 10px; + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Selected Color: None + + + font-size: 14pt; color: #e94560; + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + 1164 + 21 + + + + + + + + \ No newline at end of file diff --git a/KeyboardColor GUI/logo.png b/KeyboardColor GUI/logo.png new file mode 100644 index 0000000..5992eff Binary files /dev/null and b/KeyboardColor GUI/logo.png differ diff --git a/KeyboardColor GUI/logo2.png b/KeyboardColor GUI/logo2.png new file mode 100644 index 0000000..7e90665 Binary files /dev/null and b/KeyboardColor GUI/logo2.png differ diff --git a/KeyboardColor GUI/main.cpp b/KeyboardColor GUI/main.cpp new file mode 100644 index 0000000..e860cb7 --- /dev/null +++ b/KeyboardColor GUI/main.cpp @@ -0,0 +1,25 @@ +//Created by BenRango + +#include +#include +#include + +#include "keyboardcoulour.h" + +int main(int argc, char *argv[]) +{ + const char *mutexName = "votre_app_unique_mutex_3A4B5C6D"; + + HANDLE hMutex = CreateMutexA(nullptr, TRUE, mutexName); + + if (GetLastError() == ERROR_ALREADY_EXISTS) { + QMessageBox::warning(nullptr, "Application déjà en cours d'exécution", + "Une instance de l'application est déjà en cours d'exécution."); + CloseHandle(hMutex); + return 0; + } + QApplication a(argc, argv); + KeyboardCoulour w; + w.show(); + return a.exec(); +} diff --git a/KeyboardColor GUI/resources.qrc b/KeyboardColor GUI/resources.qrc new file mode 100644 index 0000000..4f3af7b --- /dev/null +++ b/KeyboardColor GUI/resources.qrc @@ -0,0 +1,8 @@ + + + + + logo2.png + favicon.ico + + diff --git a/KeyboardColor GUI/singleappinstance.cpp b/KeyboardColor GUI/singleappinstance.cpp new file mode 100644 index 0000000..9d366b4 --- /dev/null +++ b/KeyboardColor GUI/singleappinstance.cpp @@ -0,0 +1,31 @@ +//Created by BenRango + +#include "singleappinstance.h" +#include +#include +#include + +SingleAppInstance::SingleAppInstance(QObject *parent) + : QObject(parent), m_server(new QTcpServer(this)), m_socket(new QTcpSocket(this)) { + connect(m_server, &QTcpServer::newConnection, this, [=]() { + QTcpSocket *clientSocket = m_server->nextPendingConnection(); + qDebug() << "New instance connected"; + emit newInstanceConnected(); + clientSocket->disconnectFromHost(); + }); +} + +bool SingleAppInstance::tryToConnect() { + m_socket->connectToHost(QHostAddress::LocalHost, 4567); + return m_socket->waitForConnected(100); +} + +void SingleAppInstance::startListening() { + if (!m_server->listen(QHostAddress::LocalHost, 4567)) { + qCritical() << "Impossible de démarrer le serveur: " << m_server->errorString(); + } +} +SingleAppInstance::~SingleAppInstance() +{ + +} \ No newline at end of file diff --git a/KeyboardColor GUI/singleappinstance.h b/KeyboardColor GUI/singleappinstance.h new file mode 100644 index 0000000..c4848a6 --- /dev/null +++ b/KeyboardColor GUI/singleappinstance.h @@ -0,0 +1,27 @@ +//Created by BenRango + +#ifndef SINGLEAPPINSTANCE_H +#define SINGLEAPPINSTANCE_H + +#include +#include +#include + +class SingleAppInstance : public QObject { + Q_OBJECT + +public: + explicit SingleAppInstance(QObject *parent = nullptr); + bool tryToConnect(); + void startListening(); + ~SingleAppInstance(); + +signals: + void newInstanceConnected(); + +private: + QTcpServer *m_server; + QTcpSocket *m_socket; +}; + +#endif // SINGLEAPPINSTANCE_H \ No newline at end of file diff --git a/KeyboardColor GUI/ui_keyboardcoulour.h b/KeyboardColor GUI/ui_keyboardcoulour.h new file mode 100644 index 0000000..244a63a --- /dev/null +++ b/KeyboardColor GUI/ui_keyboardcoulour.h @@ -0,0 +1,377 @@ +/******************************************************************************** +** Form generated from reading UI file 'keyboardcoulour.ui' +** +** Created by: Qt User Interface Compiler version 6.9.2 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_KEYBOARDCOULOUR_H +#define UI_KEYBOARDCOULOUR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_KeyboardCoulour +{ +public: + QWidget *centralwidget; + QHBoxLayout *horizontalLayout; + QWidget *sidebar; + QVBoxLayout *verticalLayout; + QLabel *appTitleLabel; + QSpacerItem *verticalSpacer; + QWidget *mainContent; + QVBoxLayout *verticalLayout_2; + QHBoxLayout *headerLayout; + QLabel *effectsLabel; + QSpacerItem *horizontalSpacer; + QPushButton *stopPushButton; + QSpacerItem *horizontalSpacer_2; + QGridLayout *animationsGrid; + QPushButton *breathePushButton; + QPushButton *colourTfPushButton; + QPushButton *staticPushButton; + QLabel *selectColorLabel; + QGridLayout *colorButtonsGrid; + QPushButton *redPushButton; + QPushButton *greenPushButton; + QPushButton *bluePushButton; + QPushButton *yellowPushButton; + QPushButton *cyanPushButton; + QPushButton *magentaPushButton; + QPushButton *whitePushButton; + QPushButton *blackPushButton; + QPushButton *orangePushButton; + QPushButton *purplePushButton; + QPushButton *pinkPushButton; + QPushButton *brownPushButton; + QPushButton *grayPushButton; + QPushButton *limePushButton; + QPushButton *goldPushButton; + QPushButton *silverPushButton; + QLabel *selectedColorLabel; + QSpacerItem *verticalSpacer_2; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *KeyboardCoulour) + { + if (KeyboardCoulour->objectName().isEmpty()) + KeyboardCoulour->setObjectName("KeyboardCoulour"); + KeyboardCoulour->resize(1164, 600); + KeyboardCoulour->setStyleSheet(QString::fromUtf8("\n" +" /* Variables de style */\n" +" QWidget#centralwidget {\n" +" background-color: #1a1a2e;\n" +" color: #e0e0f0;\n" +" }\n" +" \n" +" /* Styles des boutons d'animation (cartes) */\n" +" QPushButton {\n" +" background-color: #22223b;\n" +" border: 2px solid transparent;\n" +" border-radius: 15px;\n" +" padding: 30px;\n" +" color: #e0e0f0;\n" +" font-family: 'Verdana';\n" +" font-weight: 600;\n" +" text-align: center;\n" +" }\n" +" QPushButton:hover {\n" +" border: 2px solid #e94560;\n" +" }\n" +" QPushButton:checked {\n" +" border: 2px solid #007bff;\n" +" }\n" +" \n" +" /* Styles des boutons d'action */\n" +" QPushButton#runPushButton {\n" +" background-color: #2ecc71;\n" +" color: white;\n" +" font-size: 16px;\n" +" border-radius: 8px;\n" +" padding: 10px 20px;\n" +" }\n" +" QPushButton#stopPushButton {\n" +" background-color: #e74c3c;\n" +" color: white;\n" +" font-size:" + " 16px;\n" +" border-radius: 8px;\n" +" padding: 10px 20px;\n" +" }\n" +"\n" +" /* Style du QLabel (titre) */\n" +" QLabel {\n" +" font: 24pt \"Verdana\";\n" +" font-weight: 600;\n" +" color: #e94560;\n" +" }\n" +" \n" +" /* Style de la barre lat\303\251rale */\n" +" QWidget#sidebar {\n" +" background-color: #22223b;\n" +" border-right: 1px solid #3b3a4d;\n" +" }\n" +"\n" +" /* Style des boutons de couleur */\n" +" .colorButton {\n" +" min-width: 50px;\n" +" min-height: 50px;\n" +" max-width: 50px;\n" +" max-height: 50px;\n" +" border-radius: 25px;\n" +" padding: 0;\n" +" }\n" +" /* Styles des couleurs individuelles */\n" +" QPushButton#redPushButton { background-color: rgb(255, 0, 0); }\n" +" QPushButton#greenPushButton { background-color: rgb(0, 255, 0); }\n" +" QPushButton#bluePushButton { background-color: rgb(0, 0, 255); }\n" +" QPushButton#yellowPushButton { background-color: rgb(255, 255, 0); }\n" +" QPushButton#cyanPu" + "shButton { background-color: rgb(0, 255, 255); }\n" +" QPushButton#magentaPushButton { background-color: rgb(255, 0, 255); }\n" +" QPushButton#whitePushButton { background-color: rgb(255, 255, 255); }\n" +" QPushButton#blackPushButton { background-color: rgb(0, 0, 0); }\n" +" QPushButton#orangePushButton { background-color: rgb(255, 165, 0); }\n" +" QPushButton#purplePushButton { background-color: rgb(128, 0, 128); }\n" +" QPushButton#pinkPushButton { background-color: rgb(255, 192, 203); }\n" +" QPushButton#brownPushButton { background-color: rgb(165, 42, 42); }\n" +" QPushButton#grayPushButton { background-color: rgb(128, 128, 128); }\n" +" QPushButton#limePushButton { background-color: rgb(50, 205, 50); }\n" +" QPushButton#goldPushButton { background-color: rgb(255, 215, 0); }\n" +" QPushButton#silverPushButton { background-color: rgb(192, 192, 192); }\n" +" ")); + centralwidget = new QWidget(KeyboardCoulour); + centralwidget->setObjectName("centralwidget"); + horizontalLayout = new QHBoxLayout(centralwidget); + horizontalLayout->setSpacing(0); + horizontalLayout->setObjectName("horizontalLayout"); + horizontalLayout->setContentsMargins(0, 0, 0, 0); + sidebar = new QWidget(centralwidget); + sidebar->setObjectName("sidebar"); + verticalLayout = new QVBoxLayout(sidebar); + verticalLayout->setObjectName("verticalLayout"); + verticalLayout->setContentsMargins(30, 30, 30, 30); + appTitleLabel = new QLabel(sidebar); + appTitleLabel->setObjectName("appTitleLabel"); + + verticalLayout->addWidget(appTitleLabel); + + verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding); + + verticalLayout->addItem(verticalSpacer); + + + horizontalLayout->addWidget(sidebar); + + mainContent = new QWidget(centralwidget); + mainContent->setObjectName("mainContent"); + mainContent->setStyleSheet(QString::fromUtf8("padding: 40px;")); + verticalLayout_2 = new QVBoxLayout(mainContent); + verticalLayout_2->setSpacing(40); + verticalLayout_2->setObjectName("verticalLayout_2"); + verticalLayout_2->setContentsMargins(40, 40, 40, 40); + headerLayout = new QHBoxLayout(); + headerLayout->setObjectName("headerLayout"); + effectsLabel = new QLabel(mainContent); + effectsLabel->setObjectName("effectsLabel"); + effectsLabel->setStyleSheet(QString::fromUtf8("font-size: 1.6rem; font-weight: 600; color: #e0e0f0;")); + + headerLayout->addWidget(effectsLabel); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum); + + headerLayout->addItem(horizontalSpacer); + + stopPushButton = new QPushButton(mainContent); + stopPushButton->setObjectName("stopPushButton"); + stopPushButton->setMaximumSize(QSize(16777215, 70)); + stopPushButton->setStyleSheet(QString::fromUtf8("padding: 5px 8px;\n" +"width : 80px;\n" +"margin-left : 30px")); + + headerLayout->addWidget(stopPushButton); + + horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum); + + headerLayout->addItem(horizontalSpacer_2); + + + verticalLayout_2->addLayout(headerLayout); + + animationsGrid = new QGridLayout(); + animationsGrid->setSpacing(20); + animationsGrid->setObjectName("animationsGrid"); + breathePushButton = new QPushButton(mainContent); + breathePushButton->setObjectName("breathePushButton"); + + animationsGrid->addWidget(breathePushButton, 0, 0, 1, 1); + + colourTfPushButton = new QPushButton(mainContent); + colourTfPushButton->setObjectName("colourTfPushButton"); + + animationsGrid->addWidget(colourTfPushButton, 0, 1, 1, 1); + + staticPushButton = new QPushButton(mainContent); + staticPushButton->setObjectName("staticPushButton"); + + animationsGrid->addWidget(staticPushButton, 0, 2, 1, 1); + + selectColorLabel = new QLabel(mainContent); + selectColorLabel->setObjectName("selectColorLabel"); + selectColorLabel->setStyleSheet(QString::fromUtf8("font-size: 14pt; color: #e0e0f0; margin-bottom: 10px;")); + + animationsGrid->addWidget(selectColorLabel, 1, 0, 1, 3); + + colorButtonsGrid = new QGridLayout(); + colorButtonsGrid->setSpacing(10); + colorButtonsGrid->setObjectName("colorButtonsGrid"); + redPushButton = new QPushButton(mainContent); + redPushButton->setObjectName("redPushButton"); + + colorButtonsGrid->addWidget(redPushButton, 0, 0, 1, 1); + + greenPushButton = new QPushButton(mainContent); + greenPushButton->setObjectName("greenPushButton"); + + colorButtonsGrid->addWidget(greenPushButton, 0, 1, 1, 1); + + bluePushButton = new QPushButton(mainContent); + bluePushButton->setObjectName("bluePushButton"); + + colorButtonsGrid->addWidget(bluePushButton, 0, 2, 1, 1); + + yellowPushButton = new QPushButton(mainContent); + yellowPushButton->setObjectName("yellowPushButton"); + + colorButtonsGrid->addWidget(yellowPushButton, 0, 3, 1, 1); + + cyanPushButton = new QPushButton(mainContent); + cyanPushButton->setObjectName("cyanPushButton"); + + colorButtonsGrid->addWidget(cyanPushButton, 0, 4, 1, 1); + + magentaPushButton = new QPushButton(mainContent); + magentaPushButton->setObjectName("magentaPushButton"); + + colorButtonsGrid->addWidget(magentaPushButton, 0, 5, 1, 1); + + whitePushButton = new QPushButton(mainContent); + whitePushButton->setObjectName("whitePushButton"); + + colorButtonsGrid->addWidget(whitePushButton, 0, 6, 1, 1); + + blackPushButton = new QPushButton(mainContent); + blackPushButton->setObjectName("blackPushButton"); + + colorButtonsGrid->addWidget(blackPushButton, 0, 7, 1, 1); + + orangePushButton = new QPushButton(mainContent); + orangePushButton->setObjectName("orangePushButton"); + + colorButtonsGrid->addWidget(orangePushButton, 1, 0, 1, 1); + + purplePushButton = new QPushButton(mainContent); + purplePushButton->setObjectName("purplePushButton"); + + colorButtonsGrid->addWidget(purplePushButton, 1, 1, 1, 1); + + pinkPushButton = new QPushButton(mainContent); + pinkPushButton->setObjectName("pinkPushButton"); + + colorButtonsGrid->addWidget(pinkPushButton, 1, 2, 1, 1); + + brownPushButton = new QPushButton(mainContent); + brownPushButton->setObjectName("brownPushButton"); + + colorButtonsGrid->addWidget(brownPushButton, 1, 3, 1, 1); + + grayPushButton = new QPushButton(mainContent); + grayPushButton->setObjectName("grayPushButton"); + + colorButtonsGrid->addWidget(grayPushButton, 1, 4, 1, 1); + + limePushButton = new QPushButton(mainContent); + limePushButton->setObjectName("limePushButton"); + + colorButtonsGrid->addWidget(limePushButton, 1, 5, 1, 1); + + goldPushButton = new QPushButton(mainContent); + goldPushButton->setObjectName("goldPushButton"); + + colorButtonsGrid->addWidget(goldPushButton, 1, 6, 1, 1); + + silverPushButton = new QPushButton(mainContent); + silverPushButton->setObjectName("silverPushButton"); + + colorButtonsGrid->addWidget(silverPushButton, 1, 7, 1, 1); + + + animationsGrid->addLayout(colorButtonsGrid, 2, 0, 1, 3); + + selectedColorLabel = new QLabel(mainContent); + selectedColorLabel->setObjectName("selectedColorLabel"); + selectedColorLabel->setStyleSheet(QString::fromUtf8("font-size: 14pt; color: #e94560;")); + + animationsGrid->addWidget(selectedColorLabel, 3, 0, 1, 3); + + + verticalLayout_2->addLayout(animationsGrid); + + verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding); + + verticalLayout_2->addItem(verticalSpacer_2); + + + horizontalLayout->addWidget(mainContent); + + KeyboardCoulour->setCentralWidget(centralwidget); + menubar = new QMenuBar(KeyboardCoulour); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 1164, 21)); + KeyboardCoulour->setMenuBar(menubar); + statusbar = new QStatusBar(KeyboardCoulour); + statusbar->setObjectName("statusbar"); + KeyboardCoulour->setStatusBar(statusbar); + + retranslateUi(KeyboardCoulour); + + QMetaObject::connectSlotsByName(KeyboardCoulour); + } // setupUi + + void retranslateUi(QMainWindow *KeyboardCoulour) + { + KeyboardCoulour->setWindowTitle(QCoreApplication::translate("KeyboardCoulour", "Keyboard Colour Controller", nullptr)); + appTitleLabel->setText(QCoreApplication::translate("KeyboardCoulour", "Keyboard Colour", nullptr)); + effectsLabel->setText(QCoreApplication::translate("KeyboardCoulour", "Lighting Effects", nullptr)); + stopPushButton->setText(QCoreApplication::translate("KeyboardCoulour", "Stop", nullptr)); + breathePushButton->setText(QCoreApplication::translate("KeyboardCoulour", "Breathe", nullptr)); + colourTfPushButton->setText(QCoreApplication::translate("KeyboardCoulour", "Colour Transform", nullptr)); + staticPushButton->setText(QCoreApplication::translate("KeyboardCoulour", "Static Colours", nullptr)); + selectColorLabel->setText(QCoreApplication::translate("KeyboardCoulour", "Select a color for Breathe:", nullptr)); + selectedColorLabel->setText(QCoreApplication::translate("KeyboardCoulour", "Selected Color: None", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class KeyboardCoulour: public Ui_KeyboardCoulour {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_KEYBOARDCOULOUR_H diff --git a/README.md b/README.md index 4507bf5..79976b7 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,9 @@ This is a cleaner, more organized, and efficient version of the initial program. - **Predefined Animated Effects:** - 🌈 **Fading Colors:** Smooth color transitions (predefined themes). - 🎥 **Optimized Animations:** Enhanced visual effects using animation objects. +- **New Graphical User Interface (GUI):** +  - Simplifies control with **buttons and a color picker**. +  - Includes the **new 'Single Breathe' animation** with custom color selection. ⚠️ **Important Note:** Ensure you run this program **as an administrator**, as Windows Management Instrumentation (WMI) requires administrative privileges to function properly. @@ -23,6 +26,21 @@ This is a cleaner, more organized, and efficient version of the initial program. --- +## 🖥️ New: Graphical User Interface (GUI) + +The program now includes a dedicated **Graphical User Interface (GUI)** named `KeyboardColor.exe` for simplified control, eliminating the need to use the command line for basic features. + +### ✨ GUI Features + +The GUI offers a simplified way to manage your keyboard lighting: + +* **Animation Selection:** Easily switch between the **Breathe** and **Colour Transform** modes using dedicated buttons. +* **New Single Breathe Mode:** Perform a smooth breathing animation using **one user-selected custom color**. +* **Color Picker:** A graphical tool is available to select the custom color for the **Single Breathe** mode. +* **Color Enhancements:** All newly added colors for the `colourtransform` and `freshbreathe` effects are available. + +--- + ## 🔧 Functional Commands The following commands are supported and can be executed via the **Command Prompt**. @@ -77,6 +95,14 @@ Navigate to the folder containing the executable files (e.g., `CppKeyboardColour .\CLEVO_KeyboardColour.exe theme blink ``` ✨ Makes the keyboard lights blink in a pulsating pattern. +- **Single Breathe Effect (New):** +```bash   + .\CLEVO_KeyboardColour.exe theme singlebreathe [color]   +``` + 🔵 Enables a breathing effect using a single custom color. Replace [color] with the name if your chosen color (e.g., + ``` .\CLEVO_KeyboardColour.exe theme singlebreathe blue ``` + for blue + ). --- @@ -93,11 +119,24 @@ Navigate to the folder containing the executable files (e.g., `CppKeyboardColour 3. **Again, be sure that the **InsydeDHCU.dll** file is in the same directory as `CLEVO_KeyboardColour.exe` if you're using a **Single-Zone** keyboard**. -4. Run the desired command using the syntax: +4. Option 1: Using the GUI (Recommended) +To launch the graphical interface, run: +```Bash +.\KeyboardColor.exe +``` + +**GUI Preview :** +![Screenshot of the KeyboardColor GUI](gui_screenshots/screenshot1.png) +![Screenshot of the KeyboardColor GUI](gui_screenshots/screenshot2.png) +![Screenshot of the KeyboardColor GUI](gui_screenshots/screenshot3.png) + + + +5. Option 2 Run the desired command using the syntax: ``` .\CLEVO_KeyboardColour.exe theme [themeName] ``` - + Example: To activate the breathing effect, run: ```bash @@ -106,6 +145,8 @@ To activate the breathing effect, run: --- +--- + ## 📋 Requirements - **Compatible CLEVO keyboards:** diff --git a/UpgradeLog.htm b/UpgradeLog.htm new file mode 100644 index 0000000..1f9c9e0 --- /dev/null +++ b/UpgradeLog.htm @@ -0,0 +1,273 @@ + + + + Rapport de migration +

+ Rapport de migration -

\ No newline at end of file diff --git a/gui_screenshots/screenshot1.png b/gui_screenshots/screenshot1.png new file mode 100644 index 0000000..ede33a3 Binary files /dev/null and b/gui_screenshots/screenshot1.png differ diff --git a/gui_screenshots/screenshot2.png b/gui_screenshots/screenshot2.png new file mode 100644 index 0000000..7a2a344 Binary files /dev/null and b/gui_screenshots/screenshot2.png differ diff --git a/gui_screenshots/screenshot3.png b/gui_screenshots/screenshot3.png new file mode 100644 index 0000000..a7b143f Binary files /dev/null and b/gui_screenshots/screenshot3.png differ diff --git a/x64/Debug/CppKeyboardColour.exe b/x64/Debug/CppKeyboardColour.exe new file mode 100644 index 0000000..ee3549e Binary files /dev/null and b/x64/Debug/CppKeyboardColour.exe differ diff --git a/x64/Debug/CppKeyboardColour.pdb b/x64/Debug/CppKeyboardColour.pdb new file mode 100644 index 0000000..9215117 Binary files /dev/null and b/x64/Debug/CppKeyboardColour.pdb differ diff --git a/x64/Release/CppKeyboardColour.exe b/x64/Release/CppKeyboardColour.exe new file mode 100644 index 0000000..497fd1a Binary files /dev/null and b/x64/Release/CppKeyboardColour.exe differ diff --git a/x64/Release/CppKeyboardColour.pdb b/x64/Release/CppKeyboardColour.pdb new file mode 100644 index 0000000..2e9a94a Binary files /dev/null and b/x64/Release/CppKeyboardColour.pdb differ diff --git a/x64/Release/GetProductID64.dll b/x64/Release/GetProductID64.dll new file mode 100644 index 0000000..a6a26d2 Binary files /dev/null and b/x64/Release/GetProductID64.dll differ diff --git a/x64/Release/InsydeDCHU.dll b/x64/Release/InsydeDCHU.dll new file mode 100644 index 0000000..c959c35 Binary files /dev/null and b/x64/Release/InsydeDCHU.dll differ