From a3f375c9efdc8271c02dc0f1ad7c43e99a73a959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=AD=90=E6=A5=9A=5Czhuzi?= Date: Thu, 11 Apr 2024 14:51:43 +0800 Subject: [PATCH] update --- CMakeLists.txt | 8 +- example/CMakeLists.txt | 151 +- example/example.qrc | 2 + example/example_en_US.ts | 28 +- example/example_zh_CN.ts | 18 +- example/qml/global/ItemsOriginal.qml | 4 +- example/src/AppInfo.cpp | 6 +- example/src/AppInfo.h | 20 +- example/src/app_dmp.h | 73 +- example/src/component/CircularReveal.cpp | 24 +- example/src/component/CircularReveal.h | 32 +- example/src/component/FileWatcher.cpp | 17 +- example/src/component/FileWatcher.h | 17 +- example/src/component/FpsItem.cpp | 14 +- example/src/component/FpsItem.h | 14 +- example/src/helper/InitializrHelper.cpp | 86 +- example/src/helper/InitializrHelper.h | 38 +- example/src/helper/Log.cpp | 121 +- example/src/helper/Log.h | 12 +- example/src/helper/Network.cpp | 648 +++-- example/src/helper/Network.h | 234 +- example/src/helper/SettingsHelper.cpp | 15 +- example/src/helper/SettingsHelper.h | 45 +- example/src/helper/TranslateHelper.cpp | 15 +- example/src/helper/TranslateHelper.h | 34 +- example/src/main.cpp | 4 + example/src/singleton.h | 15 +- example/src/stdafx.h | 61 +- src/CMakeLists.txt | 136 +- src/Def.cpp | 1 - src/Def.h | 3071 +++++++++++----------- src/FluAccentColor.cpp | 3 +- src/FluAccentColor.h | 25 +- src/FluApp.cpp | 14 +- src/FluApp.h | 39 +- src/FluCaptcha.cpp | 74 +- src/FluCaptcha.h | 26 +- src/FluColors.cpp | 101 +- src/FluColors.h | 89 +- src/FluFrameless.cpp | 330 +-- src/FluFrameless.h | 65 +- src/FluQrCodeItem.cpp | 44 +- src/FluQrCodeItem.h | 22 +- src/FluRectangle.cpp | 14 +- src/FluRectangle.h | 17 +- src/FluTableSortProxyModel.cpp | 52 +- src/FluTableSortProxyModel.h | 33 +- src/FluTextStyle.cpp | 2 +- src/FluTextStyle.h | 35 +- src/FluTheme.cpp | 83 +- src/FluTheme.h | 57 +- src/FluTools.cpp | 115 +- src/FluTools.h | 84 +- src/FluTreeModel.cpp | 228 +- src/FluTreeModel.h | 134 +- src/FluWatermark.cpp | 40 +- src/FluWatermark.h | 25 +- src/FluentUI.cpp | 257 +- src/FluentUI.h | 33 +- src/fluentuiplugin.cpp | 14 +- src/fluentuiplugin.h | 17 +- src/singleton.h | 15 +- src/stdafx.h | 61 +- 63 files changed, 3666 insertions(+), 3446 deletions(-) delete mode 100644 src/Def.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ef5a1d8..9863d2ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,11 +2,11 @@ cmake_minimum_required(VERSION 3.20) project(FluentUI VERSION 1.0) -if(MSVC) +if (MSVC) #让Release也生成pdb文件 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") -endif() +endif () list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/.cmake/) @@ -22,8 +22,8 @@ add_subdirectory(src) #Release也支持日志打印代码位置 target_compile_definitions(fluentuiplugin - PRIVATE - QT_MESSAGELOGCONTEXT + PRIVATE + QT_MESSAGELOGCONTEXT ) if (FLUENTUI_BUILD_EXAMPLES) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index c1e8f99a..b4b028bf 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -10,18 +10,18 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) #判断FluentUI库类型 -if(FLUENTUI_BUILD_STATIC_LIB) +if (FLUENTUI_BUILD_STATIC_LIB) add_definitions(-DFLUENTUI_BUILD_STATIC_LIB) -endif() +endif () #设置可执行文件输出目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}) -if(APPLE) +if (APPLE) set(APPLICATION_DIR_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.app/Contents/MacOS) -else() +else () set(APPLICATION_DIR_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) -endif() +endif () #导入Qt相关依赖包 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Quick Svg Network) @@ -32,46 +32,46 @@ find_program(QT_LUPDATE NAMES lupdate) find_program(QT_LRELEASE NAMES lrelease) file(GLOB TS_FILE_PATHS ${CMAKE_CURRENT_LIST_DIR}/ *.ts) add_custom_target(Script-UpdateTranslations - COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory ${APPLICATION_DIR_PATH}/i18n - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_NAME}_en_US.qm ${PROJECT_NAME}_zh_CN.qm ${APPLICATION_DIR_PATH}/i18n - SOURCES ${TS_FILE_PATHS} + COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${APPLICATION_DIR_PATH}/i18n + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_NAME}_en_US.qm ${PROJECT_NAME}_zh_CN.qm ${APPLICATION_DIR_PATH}/i18n + SOURCES ${TS_FILE_PATHS} ) ##生成版本信息头文件 set(HEADER_FILE_VERSION_PATH ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Version.h) configure_file( - ${CMAKE_SOURCE_DIR}/.cmake/Version.h.in - ${HEADER_FILE_VERSION_PATH} + ${CMAKE_SOURCE_DIR}/.cmake/Version.h.in + ${HEADER_FILE_VERSION_PATH} ) #遍历所有Cpp文件 file(GLOB_RECURSE CPP_FILES *.cpp *.h) -foreach(filepath ${CPP_FILES}) +foreach (filepath ${CPP_FILES}) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) list(APPEND sources_files ${filename}) -endforeach(filepath) +endforeach (filepath) -if(WIN32) +if (WIN32) list(APPEND sources_files "src/app_dmp.h") -endif() +endif () #如果是Windows平台,则生成rc文件,还有inno setup脚本文件 set(EXAMPLE_VERSION_RC_PATH "") -if(WIN32) +if (WIN32) set(EXAMPLE_VERSION_RC_PATH ${CMAKE_CURRENT_BINARY_DIR}/version_${PROJECT_NAME}.rc) configure_file( - ${CMAKE_SOURCE_DIR}/.cmake/version_exe.rc.in - ${EXAMPLE_VERSION_RC_PATH} + ${CMAKE_SOURCE_DIR}/.cmake/version_exe.rc.in + ${EXAMPLE_VERSION_RC_PATH} ) -configure_file( - ${CMAKE_SOURCE_DIR}/.cmake/InstallerScript.iss.in - ${CMAKE_SOURCE_DIR}/action-cli/InstallerScript.iss -) -endif() + configure_file( + ${CMAKE_SOURCE_DIR}/.cmake/InstallerScript.iss.in + ${CMAKE_SOURCE_DIR}/action-cli/InstallerScript.iss + ) +endif () #加快qrc编译 qt_add_big_resources(QRC_RESOURCES ${PROJECT_NAME}.qrc) @@ -80,34 +80,34 @@ set_property(SOURCE ${PROJECT_NAME}.qrc PROPERTY SKIP_AUTORCC ON) list(APPEND sources_files ${QRC_RESOURCES}) #添加可执行文件 -if(WIN32) +if (WIN32) list(APPEND sources_files ${EXAMPLE_VERSION_RC_PATH}) -endif() -if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) +endif () +if (${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(${PROJECT_NAME} - MANUAL_FINALIZATION - ${sources_files} + MANUAL_FINALIZATION + ${sources_files} ) -else() +else () add_executable(${PROJECT_NAME} - ${sources_files} + ${sources_files} ) -endif() +endif () add_dependencies(${PROJECT_NAME} Script-UpdateTranslations) #复制程序运行所需要的动态库 -if(WIN32) - if(MSVC) - if(CMAKE_SIZEOF_VOID_P EQUAL 4) +if (WIN32) + if (MSVC) + if (CMAKE_SIZEOF_VOID_P EQUAL 4) file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/msvc/x86/*.dll) - elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/msvc/x64/*.dll) - endif() - elseif(MINGW) + endif () + elseif (MINGW) file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/mingw/*.dll) - endif() + endif () file(COPY ${3RDPARTY_DLL_DIR} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) -endif() +endif () #复制FluentUI源码到运行目录下,用于脚手架生成 file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/source/) @@ -115,37 +115,37 @@ file(COPY ${CMAKE_SOURCE_DIR}/src/ DESTINATION ${APPLICATION_DIR_PATH}/source/) #导入component头文件,不然通过QML_NAMED_ELEMENT生成的c++类会找不到头文件报错 target_include_directories(${PROJECT_NAME} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src/component + ${CMAKE_CURRENT_SOURCE_DIR}/src/component ) #如果是静态库则需要手动注册插件,导入FluentUI.h头文件 -if(FLUENTUI_BUILD_STATIC_LIB) +if (FLUENTUI_BUILD_STATIC_LIB) target_include_directories(${PROJECT_NAME} PRIVATE - ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/src ) -endif() +endif () #设置属性 set_target_properties(${PROJECT_NAME} PROPERTIES - MACOSX_BUNDLE_GUI_IDENTIFIER my.${PROJECT_NAME}.com - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} - MACOSX_BUNDLE TRUE - WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE_GUI_IDENTIFIER my.${PROJECT_NAME}.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE ) #Release也支持日志打印代码位置 target_compile_definitions(${PROJECT_NAME} - PRIVATE - QT_MESSAGELOGCONTEXT + PRIVATE + QT_MESSAGELOGCONTEXT ) #目标文件链接库 target_link_libraries(${PROJECT_NAME} PRIVATE - Qt${QT_VERSION_MAJOR}::Quick - Qt${QT_VERSION_MAJOR}::Svg - Qt${QT_VERSION_MAJOR}::Network - fluentuiplugin + Qt${QT_VERSION_MAJOR}::Quick + Qt${QT_VERSION_MAJOR}::Svg + Qt${QT_VERSION_MAJOR}::Network + fluentuiplugin ) #添加部署脚本 @@ -153,23 +153,28 @@ if (CMAKE_BUILD_TYPE MATCHES "Release") if (APPLE) find_program(QT_DEPLOY_QT NAMES macdeployqt) add_custom_target(Script-DeployRelease - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist - COMMAND ${QT_DEPLOY_QT} ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.app -qmldir=${CMAKE_CURRENT_LIST_DIR} - COMMENT "MacOs Deploying Qt Dependencies After Build........." - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist + COMMAND ${QT_DEPLOY_QT} ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.app -qmldir=${CMAKE_CURRENT_LIST_DIR} + COMMENT "MacOs Deploying Qt Dependencies After Build........." + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - endif() - if(WIN32) + endif () + if (WIN32) find_program(QT_DEPLOY_QT NAMES windeployqt) add_custom_target(Script-DeployRelease - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist - COMMAND ${QT_DEPLOY_QT} --qmldir=${CMAKE_CURRENT_LIST_DIR} --plugindir ${CMAKE_SOURCE_DIR}/dist/plugins --no-translations --compiler-runtime ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.exe - COMMENT "Windows Deploying Qt Dependencies After Build........." - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist + COMMAND ${QT_DEPLOY_QT} --qmldir=${CMAKE_CURRENT_LIST_DIR} --plugindir ${CMAKE_SOURCE_DIR}/dist/plugins --no-translations --compiler-runtime ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.exe + COMMENT "Windows Deploying Qt Dependencies After Build........." + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) -endif() -endif() + + target_sources(Script-DeployRelease + PRIVATE + src/component/OpenGLItem.h src/component/OpenGLItem.cpp + ) + endif () +endif () diff --git a/example/example.qrc b/example/example.qrc index 527028cd..646ef145 100644 --- a/example/example.qrc +++ b/example/example.qrc @@ -209,5 +209,7 @@ qml/page/T_GroupBox.qml res/image/bg_scenic.jpg qml/window/FluentInitializrWindow.qml + qml/page/T_OpenGL.qml + diff --git a/example/example_en_US.ts b/example/example_en_US.ts index 47476754..b3d08a52 100644 --- a/example/example_en_US.ts +++ b/example/example_en_US.ts @@ -87,22 +87,22 @@ InitializrHelper - + The name cannot be empty - + The creation path cannot be empty - + The path does not exist - + %1 folder already exists @@ -475,7 +475,7 @@ - CodeEditor + OpenGL @@ -550,11 +550,6 @@ MainWindow - - - Dark Mode - - @@ -617,6 +612,11 @@ Previous + + + Dark Mode + + Here you can switch to night mode. @@ -1626,6 +1626,14 @@ My only desire is to be permitted to drive out the traitors and restore the Han. + + T_OpenGL + + + OpenGL + + + T_Pagination diff --git a/example/example_zh_CN.ts b/example/example_zh_CN.ts index 8ae59fac..7ecd333f 100644 --- a/example/example_zh_CN.ts +++ b/example/example_zh_CN.ts @@ -87,22 +87,22 @@ InitializrHelper - + The name cannot be empty 名称不能为空 - + The creation path cannot be empty 创建路径不能为空 - + The path does not exist 路径不存在 - + %1 folder already exists %1 文件夹已经存在 @@ -475,7 +475,7 @@ - CodeEditor + OpenGL @@ -1665,6 +1665,14 @@ My only desire is to be permitted to drive out the traitors and restore the Han. 网络 + + T_OpenGL + + + OpenGL + + + T_Pagination diff --git a/example/qml/global/ItemsOriginal.qml b/example/qml/global/ItemsOriginal.qml index 8e96b2e0..cbd84e99 100644 --- a/example/qml/global/ItemsOriginal.qml +++ b/example/qml/global/ItemsOriginal.qml @@ -427,9 +427,9 @@ FluObject{ title: qsTr("Other") icon: FluentIcons.Shop FluPaneItem{ - title: qsTr("CodeEditor") + title: qsTr("OpenGL") menuDelegate: paneItemMenu - url: "qrc:/example/qml/page/T_CodeEditor.qml" + url: "qrc:/example/qml/page/T_OpenGL.qml" onTap: { navigationView.push(url) } } FluPaneItem{ diff --git a/example/src/AppInfo.cpp b/example/src/AppInfo.cpp index 8668e5bc..57e39130 100644 --- a/example/src/AppInfo.cpp +++ b/example/src/AppInfo.cpp @@ -1,17 +1,15 @@ #include "AppInfo.h" #include -#include #include #include "Version.h" AppInfo::AppInfo(QObject *parent) - : QObject{parent} -{ + : QObject{parent} { version(APPLICATION_VERSION); } -void AppInfo::testCrash(){ +[[maybe_unused]] void AppInfo::testCrash() { auto *crash = reinterpret_cast(0); *crash = 0; } diff --git a/example/src/AppInfo.h b/example/src/AppInfo.h index 541d7a4c..f8bb0719 100644 --- a/example/src/AppInfo.h +++ b/example/src/AppInfo.h @@ -1,20 +1,18 @@ -#ifndef APPINFO_H -#define APPINFO_H +#pragma once #include #include #include "stdafx.h" #include "singleton.h" -class AppInfo : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(QString,version) +class AppInfo : public QObject { +Q_OBJECT +Q_PROPERTY_AUTO(QString, version) private: explicit AppInfo(QObject *parent = nullptr); -public: - SINGLETON(AppInfo) - Q_INVOKABLE void testCrash(); -}; -#endif // APPINFO_H +public: +SINGLETON(AppInfo) + + Q_INVOKABLE [[maybe_unused]] void testCrash(); +}; diff --git a/example/src/app_dmp.h b/example/src/app_dmp.h index 1ca52ae4..9fee040f 100644 --- a/example/src/app_dmp.h +++ b/example/src/app_dmp.h @@ -1,5 +1,6 @@ -#ifndef APP_DUMP_H -#define APP_DUMP_H +#pragma once +#pragma clang diagnostic push +#pragma ide diagnostic ignored "misc-misplaced-const" #include #include @@ -12,71 +13,71 @@ #pragma comment(lib, "Dbghelp.lib") -static void miniDumpWriteDump(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam){ - typedef HRESULT (WINAPI* MiniDumpWriteDumpPtr)(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); +static void +miniDumpWriteDump(HANDLE hProcess, DWORD ProcessId, HANDLE hFile, CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam) { + typedef HRESULT (WINAPI *MiniDumpWriteDumpPtr)(HANDLE hProcess, DWORD ProcessId, HANDLE hFile, MINIDUMP_TYPE DumpType, CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, + CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); HMODULE module = LoadLibraryW(L"Dbghelp.dll"); - if (module) - { + if (module) { MiniDumpWriteDumpPtr mini_dump_write_dump; - mini_dump_write_dump= reinterpret_cast(GetProcAddress(module, "MiniDumpWriteDump")); - if (mini_dump_write_dump) - { - mini_dump_write_dump(hProcess,ProcessId,hFile,DumpType,ExceptionParam,UserStreamParam,CallbackParam); + mini_dump_write_dump = reinterpret_cast(GetProcAddress(module, "MiniDumpWriteDump")); + if (mini_dump_write_dump) { + mini_dump_write_dump(hProcess, ProcessId, hFile, static_cast(80), ExceptionParam, nullptr, CallbackParam); } } } BOOL CALLBACK MyMiniDumpCallback(PVOID, const PMINIDUMP_CALLBACK_INPUT input, PMINIDUMP_CALLBACK_OUTPUT output) { - if (input == NULL || output == NULL) + if (input == nullptr || output == nullptr) return FALSE; BOOL ret = FALSE; switch (input->CallbackType) { - case IncludeModuleCallback: - case IncludeThreadCallback: - case ThreadCallback: - case ThreadExCallback: - ret = TRUE; - break; - case ModuleCallback: { - if (!(output->ModuleWriteFlags & ModuleReferencedByMemory)) { - output->ModuleWriteFlags &= ~ModuleWriteModule; + case IncludeModuleCallback: + case IncludeThreadCallback: + case ThreadCallback: + case ThreadExCallback: + ret = TRUE; + break; + case ModuleCallback: { + if (!(output->ModuleWriteFlags & ModuleReferencedByMemory)) { + output->ModuleWriteFlags &= ~ModuleWriteModule; + } + ret = TRUE; } - ret = TRUE; - } break; - default: - break; + break; + default: + break; } return ret; } -void WriteDump(EXCEPTION_POINTERS* exp, const std::wstring& path) { - HANDLE h = ::CreateFileW(path.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +void WriteDump(EXCEPTION_POINTERS *exp, const std::wstring &path) { + HANDLE h = ::CreateFileW(path.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); MINIDUMP_EXCEPTION_INFORMATION info; info.ThreadId = ::GetCurrentThreadId(); info.ExceptionPointers = exp; info.ClientPointers = FALSE; MINIDUMP_CALLBACK_INFORMATION mci; - mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MyMiniDumpCallback; - mci.CallbackParam = 0; - MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithIndirectlyReferencedMemory | MiniDumpScanMemory); - miniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), h, mdt, &info, NULL, &mci); + mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE) MyMiniDumpCallback; + mci.CallbackParam = nullptr; + miniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), h, &info, &mci); ::CloseHandle(h); } -LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* exp) { - const QString dumpFileName = QString("%1_%2.dmp").arg("crash",QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss")); - const QString dumpDirPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)+"/dmp"; +LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS *exp) { + const QString dumpFileName = QString("%1_%2.dmp").arg("crash", QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss")); + const QString dumpDirPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/dmp"; const QDir dumpDir(dumpDirPath); - if(!dumpDir.exists()){ + if (!dumpDir.exists()) { dumpDir.mkpath(dumpDirPath); } QString dumpFilePath = dumpDir.filePath(dumpFileName); WriteDump(exp, dumpFilePath.toStdWString()); QStringList arguments; arguments << "-crashed=" + dumpFilePath; - QProcess::startDetached(qApp->applicationFilePath(), arguments); + QProcess::startDetached(QGuiApplication::applicationFilePath(), arguments); return EXCEPTION_EXECUTE_HANDLER; } -#endif // APP_DUMP_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/component/CircularReveal.cpp b/example/src/component/CircularReveal.cpp index 7b5d60da..ada137b0 100644 --- a/example/src/component/CircularReveal.cpp +++ b/example/src/component/CircularReveal.cpp @@ -3,43 +3,43 @@ #include #include -CircularReveal::CircularReveal(QQuickItem* parent) : QQuickPaintedItem(parent) -{ +CircularReveal::CircularReveal(QQuickItem *parent) : QQuickPaintedItem(parent) { + _target = nullptr; + _radius = 0; _anim = new QPropertyAnimation(this, "radius", this); - setVisible(false); _anim->setDuration(333); _anim->setEasingCurve(QEasingCurve::OutCubic); - connect(_anim, &QPropertyAnimation::finished,this,[=](){ + setVisible(false); + connect(_anim, &QPropertyAnimation::finished, this, [=]() { update(); setVisible(false); Q_EMIT animationFinished(); }); - connect(this,&CircularReveal::radiusChanged,this,[=](){ + connect(this, &CircularReveal::radiusChanged, this, [=]() { update(); }); } -void CircularReveal::paint(QPainter* painter) -{ +void CircularReveal::paint(QPainter *painter) { painter->save(); painter->drawImage(QRect(0, 0, static_cast(width()), static_cast(height())), _source); QPainterPath path; - path.moveTo(_center.x(),_center.y()); - path.addEllipse(QPointF(_center.x(),_center.y()), _radius, _radius); + path.moveTo(_center.x(), _center.y()); + path.addEllipse(QPointF(_center.x(), _center.y()), _radius, _radius); painter->setCompositionMode(QPainter::CompositionMode_Clear); painter->fillPath(path, Qt::black); painter->restore(); } -void CircularReveal::start(int w,int h,const QPoint& center,int radius){ +[[maybe_unused]] void CircularReveal::start(int w, int h, const QPoint ¢er, int radius) { _anim->setStartValue(0); _anim->setEndValue(radius); _center = center; - _grabResult = _target->grabToImage(QSize(w,h)); + _grabResult = _target->grabToImage(QSize(w, h)); connect(_grabResult.data(), &QQuickItemGrabResult::ready, this, &CircularReveal::handleGrabResult); } -void CircularReveal::handleGrabResult(){ +void CircularReveal::handleGrabResult() { _grabResult.data()->image().swap(_source); update(); setVisible(true); diff --git a/example/src/component/CircularReveal.h b/example/src/component/CircularReveal.h index 589205fa..540d4876 100644 --- a/example/src/component/CircularReveal.h +++ b/example/src/component/CircularReveal.h @@ -1,5 +1,6 @@ -#ifndef CIRCULARREVEAL_H -#define CIRCULARREVEAL_H +#pragma once +#pragma clang diagnostic push +#pragma ide diagnostic ignored "NotImplementedFunctions" #include #include @@ -7,23 +8,28 @@ #include #include "src/stdafx.h" -class CircularReveal : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(QQuickItem*,target) - Q_PROPERTY_AUTO(int,radius) +class CircularReveal : public QQuickPaintedItem { +Q_OBJECT +Q_PROPERTY_AUTO_P(QQuickItem*, target) +Q_PROPERTY_AUTO(int, radius) public: - CircularReveal(QQuickItem* parent = nullptr); - void paint(QPainter* painter) override; - Q_INVOKABLE void start(int w,int h,const QPoint& center,int radius); + explicit CircularReveal(QQuickItem *parent = nullptr); + + void paint(QPainter *painter) override; + + Q_INVOKABLE [[maybe_unused]] void start(int w, int h, const QPoint ¢er, int radius); + Q_SIGNAL void imageChanged(); + Q_SIGNAL void animationFinished(); + Q_SLOT void handleGrabResult(); + private: - QPropertyAnimation* _anim = nullptr; + QPropertyAnimation *_anim = nullptr; QImage _source; QPoint _center; - QSharedPointer _grabResult; + QSharedPointer _grabResult; }; -#endif // CIRCULARREVEAL_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/component/FileWatcher.cpp b/example/src/component/FileWatcher.cpp index a7a664a0..8b13cd27 100644 --- a/example/src/component/FileWatcher.cpp +++ b/example/src/component/FileWatcher.cpp @@ -1,24 +1,23 @@ #include "FileWatcher.h" -FileWatcher::FileWatcher(QObject *parent) - : QObject{parent} -{ - connect(&_watcher, &QFileSystemWatcher::fileChanged, this, [=](const QString &path){ +FileWatcher::FileWatcher(QObject *parent) : QObject{parent} { + connect(&_watcher, &QFileSystemWatcher::fileChanged, this, [=](const QString &path) { Q_EMIT fileChanged(); clean(); _watcher.addPath(_path); }); - connect(this,&FileWatcher::pathChanged,this,[=](){ + connect(this, &FileWatcher::pathChanged, this, [=]() { clean(); - _watcher.addPath(_path.replace("file:///","")); + _watcher.addPath(_path.replace("file:///", "")); }); - if(!_path.isEmpty()){ + if (!_path.isEmpty()) { _watcher.addPath(_path); } } -void FileWatcher::clean(){ - foreach (const QString &item, _watcher.files()) { +void FileWatcher::clean() { + for (int i = 0; i <= _watcher.files().size() - 1; ++i) { + auto item = _watcher.files().at(i); _watcher.removePath(item); } } diff --git a/example/src/component/FileWatcher.h b/example/src/component/FileWatcher.h index d3bb95cc..14f40fb5 100644 --- a/example/src/component/FileWatcher.h +++ b/example/src/component/FileWatcher.h @@ -1,22 +1,25 @@ -#ifndef FILEWATCHER_H -#define FILEWATCHER_H +#pragma once +#pragma clang diagnostic push +#pragma ide diagnostic ignored "NotImplementedFunctions" #include #include #include #include "src/stdafx.h" -class FileWatcher : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(QString,path); +class FileWatcher : public QObject { +Q_OBJECT +Q_PROPERTY_AUTO(QString, path); public: explicit FileWatcher(QObject *parent = nullptr); + Q_SIGNAL void fileChanged(); + private: void clean(); + private: QFileSystemWatcher _watcher; }; -#endif // FILEWATCHER_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/component/FpsItem.cpp b/example/src/component/FpsItem.cpp index 23ceb37a..84a5fd66 100644 --- a/example/src/component/FpsItem.cpp +++ b/example/src/component/FpsItem.cpp @@ -3,16 +3,16 @@ #include #include -FpsItem::FpsItem() -{ - QTimer *timer = new QTimer(this); - connect(timer, &QTimer::timeout, this, [this]{ +FpsItem::FpsItem() { + _fps = 0; + auto *timer = new QTimer(this); + connect(timer, &QTimer::timeout, this, [this] { fps(_frameCount); _frameCount = 0; }); - connect(this, &QQuickItem::windowChanged, this, [this]{ - if (window()){ - connect(window(), &QQuickWindow::afterRendering, this, [this]{ _frameCount++; }, Qt::DirectConnection); + connect(this, &QQuickItem::windowChanged, this, [this] { + if (window()) { + connect(window(), &QQuickWindow::afterRendering, this, [this] { _frameCount++; }, Qt::DirectConnection); } }); timer->start(1000); diff --git a/example/src/component/FpsItem.h b/example/src/component/FpsItem.h index 4b51cdaf..e30f63bc 100644 --- a/example/src/component/FpsItem.h +++ b/example/src/component/FpsItem.h @@ -1,19 +1,15 @@ -#ifndef FPSITEM_H -#define FPSITEM_H +#pragma once #include #include "src/stdafx.h" -class FpsItem : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(int,fps) +class FpsItem : public QQuickItem { +Q_OBJECT +Q_PROPERTY_AUTO(int, fps) public: FpsItem(); private: int _frameCount = 0; -}; - -#endif // FPSITEM_H +}; \ No newline at end of file diff --git a/example/src/helper/InitializrHelper.cpp b/example/src/helper/InitializrHelper.cpp index 4567c81b..59904bbd 100644 --- a/example/src/helper/InitializrHelper.cpp +++ b/example/src/helper/InitializrHelper.cpp @@ -3,55 +3,47 @@ #include #include -InitializrHelper::InitializrHelper(QObject *parent) : QObject(parent) -{ +[[maybe_unused]] InitializrHelper::InitializrHelper(QObject *parent) : QObject(parent) { } InitializrHelper::~InitializrHelper() = default; -bool InitializrHelper::copyDir(const QDir& fromDir, const QDir& toDir, bool coverIfFileExists){ - QDir _formDir = fromDir; +bool InitializrHelper::copyDir(const QDir &fromDir, const QDir &toDir, bool coverIfFileExists) { + const QDir &_formDir = fromDir; QDir _toDir = toDir; - if(!_toDir.exists()) - { - if(!_toDir.mkdir(toDir.absolutePath())) + if (!_toDir.exists()) { + if (!_toDir.mkdir(toDir.absolutePath())) return false; } QFileInfoList fileInfoList = _formDir.entryInfoList(); - foreach(QFileInfo fileInfo, fileInfoList) - { - if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") - continue; - if(fileInfo.isDir()) - { - if(!copyDir(fileInfo.filePath(), _toDir.filePath(fileInfo.fileName()),true)) - return false; - } - else - { - if(coverIfFileExists && _toDir.exists(fileInfo.fileName())) - { - _toDir.remove(fileInfo.fileName()); - } - if(!QFile::copy(fileInfo.filePath(), _toDir.filePath(fileInfo.fileName()))) - { - return false; + foreach(QFileInfo fileInfo, fileInfoList) { + if (fileInfo.fileName() == "." || fileInfo.fileName() == "..") + continue; + if (fileInfo.isDir()) { + if (!copyDir(fileInfo.filePath(), _toDir.filePath(fileInfo.fileName()), true)) + return false; + } else { + if (coverIfFileExists && _toDir.exists(fileInfo.fileName())) { + _toDir.remove(fileInfo.fileName()); + } + if (!QFile::copy(fileInfo.filePath(), _toDir.filePath(fileInfo.fileName()))) { + return false; + } } } - } return true; } -template -void InitializrHelper::templateToFile(const QString& source,const QString& dest,Args &&...args){ +template +void InitializrHelper::templateToFile(const QString &source, const QString &dest, Args &&...args) { QFile file(source); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); QString content = in.readAll().arg(std::forward(args)...); file.close(); QDir outputDir = QFileInfo(dest).absoluteDir(); - if(!outputDir.exists()){ + if (!outputDir.exists()) { outputDir.mkpath(outputDir.absolutePath()); } QFile outputFile(dest); @@ -67,43 +59,43 @@ void InitializrHelper::templateToFile(const QString& source,const QString& dest, } } -void InitializrHelper::copyFile(const QString& source,const QString& dest){ - QFile::copy(source,dest); +void InitializrHelper::copyFile(const QString &source, const QString &dest) { + QFile::copy(source, dest); QFile::setPermissions(dest, QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther); } -void InitializrHelper::generate(const QString& name,const QString& path){ - if(name.isEmpty()){ +[[maybe_unused]] void InitializrHelper::generate(const QString &name, const QString &path) { + if (name.isEmpty()) { error(tr("The name cannot be empty")); return; } - if(path.isEmpty()){ + if (path.isEmpty()) { error(tr("The creation path cannot be empty")); return; } QDir projectRootDir(path); - if(!projectRootDir.exists()){ + if (!projectRootDir.exists()) { error(tr("The path does not exist")); return; } QString projectPath = projectRootDir.filePath(name); QDir projectDir(projectPath); - if(projectDir.exists()){ + if (projectDir.exists()) { error(tr("%1 folder already exists").arg(name)); return; } projectDir.mkpath(projectPath); QDir fluentDir(projectDir.filePath("FluentUI")); - copyDir(QDir(QGuiApplication::applicationDirPath()+"/source"),fluentDir); - templateToFile(":/example/res/template/CMakeLists.txt.in",projectDir.filePath("CMakeLists.txt"),name); - templateToFile(":/example/res/template/src/CMakeLists.txt.in",projectDir.filePath("src/CMakeLists.txt"),name); - templateToFile(":/example/res/template/src/main.cpp.in",projectDir.filePath("src/main.cpp"),name); - templateToFile(":/example/res/template/src/main.qml.in",projectDir.filePath("src/main.qml"),name); - templateToFile(":/example/res/template/src/en_US.ts.in",projectDir.filePath("src/"+name+"_en_US.ts"),name); - templateToFile(":/example/res/template/src/zh_CN.ts.in",projectDir.filePath("src/"+name+"_zh_CN.ts"),name); - copyFile(":/example/res/template/src/App.qml.in",projectDir.filePath("src/App.qml")); - copyFile(":/example/res/template/src/qml.qrc.in",projectDir.filePath("src/qml.qrc")); - copyFile(":/example/res/template/src/logo.ico.in",projectDir.filePath("src/logo.ico")); - copyFile(":/example/res/template/src/README.md.in",projectDir.filePath("src/README.md")); + copyDir(QDir(QGuiApplication::applicationDirPath() + "/source"), fluentDir); + templateToFile(":/example/res/template/CMakeLists.txt.in", projectDir.filePath("CMakeLists.txt"), name); + templateToFile(":/example/res/template/src/CMakeLists.txt.in", projectDir.filePath("src/CMakeLists.txt"), name); + templateToFile(":/example/res/template/src/main.cpp.in", projectDir.filePath("src/main.cpp"), name); + templateToFile(":/example/res/template/src/main.qml.in", projectDir.filePath("src/main.qml"), name); + templateToFile(":/example/res/template/src/en_US.ts.in", projectDir.filePath("src/" + name + "_en_US.ts"), name); + templateToFile(":/example/res/template/src/zh_CN.ts.in", projectDir.filePath("src/" + name + "_zh_CN.ts"), name); + copyFile(":/example/res/template/src/App.qml.in", projectDir.filePath("src/App.qml")); + copyFile(":/example/res/template/src/qml.qrc.in", projectDir.filePath("src/qml.qrc")); + copyFile(":/example/res/template/src/logo.ico.in", projectDir.filePath("src/logo.ico")); + copyFile(":/example/res/template/src/README.md.in", projectDir.filePath("src/README.md")); return this->success(projectPath); } diff --git a/example/src/helper/InitializrHelper.h b/example/src/helper/InitializrHelper.h index 7daea951..2a9c250d 100644 --- a/example/src/helper/InitializrHelper.h +++ b/example/src/helper/InitializrHelper.h @@ -1,26 +1,34 @@ -#ifndef INITIALIZRHELPER_H -#define INITIALIZRHELPER_H +#pragma clang diagnostic push +#pragma ide diagnostic ignored "NotImplementedFunctions" +#pragma once #include #include #include #include "src/singleton.h" -class InitializrHelper : public QObject -{ - Q_OBJECT +class InitializrHelper : public QObject { +Q_OBJECT private: - explicit InitializrHelper(QObject* parent = nullptr); - bool copyDir(const QDir& fromDir, const QDir& toDir, bool coverIfFileExists = true); - void copyFile(const QString& source,const QString& dest); - template - void templateToFile(const QString& source,const QString& dest,Args &&...args); + [[maybe_unused]] explicit InitializrHelper(QObject *parent = nullptr); + + bool copyDir(const QDir &fromDir, const QDir &toDir, bool coverIfFileExists = true); + + static void copyFile(const QString &source, const QString &dest); + + template + void templateToFile(const QString &source, const QString &dest, Args &&...args); + public: - SINGLETON(InitializrHelper) +SINGLETON(InitializrHelper) + ~InitializrHelper() override; - Q_INVOKABLE void generate(const QString& name,const QString& path); - Q_SIGNAL void error(const QString& message); - Q_SIGNAL void success(const QString& path); + + Q_INVOKABLE [[maybe_unused]] void generate(const QString &name, const QString &path); + + Q_SIGNAL void error(const QString &message); + + Q_SIGNAL void success(const QString &path); }; -#endif // INITIALIZRHELPER_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/helper/Log.cpp b/example/src/helper/Log.cpp index 688db453..3f9ddd66 100644 --- a/example/src/helper/Log.cpp +++ b/example/src/helper/Log.cpp @@ -11,8 +11,11 @@ #include #include #include "Version.h" + #ifdef WIN32 + #include + #else #include #endif @@ -26,7 +29,7 @@ #endif static QString g_app = {}; -static QString g_file_path= {}; +static QString g_file_path = {}; static bool g_logError = false; static std::unique_ptr g_logFile = nullptr; @@ -35,15 +38,14 @@ static std::unique_ptr g_logStream = nullptr; static int g_logLevel = 4; std::map logLevelMap = { - {QtFatalMsg,0}, - {QtCriticalMsg,1}, - {QtWarningMsg,2}, - {QtInfoMsg,3}, - {QtDebugMsg,4} + {QtFatalMsg, 0}, + {QtCriticalMsg, 1}, + {QtWarningMsg, 2}, + {QtInfoMsg, 3}, + {QtDebugMsg, 4} }; -QString Log::prettyProductInfoWrapper() -{ +QString Log::prettyProductInfoWrapper() { auto productName = QSysInfo::prettyProductName(); #if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) #if defined(Q_OS_MACOS) @@ -70,20 +72,17 @@ QString Log::prettyProductInfoWrapper() #endif #endif #if defined(Q_OS_WIN) - QSettings regKey {QString::fromUtf8("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), QSettings::NativeFormat}; + QSettings regKey{QString::fromUtf8(R"(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)"), QSettings::NativeFormat}; if (regKey.contains(QString::fromUtf8("CurrentBuildNumber"))) { auto buildNumber = regKey.value(QString::fromUtf8("CurrentBuildNumber")).toInt(); if (buildNumber > 0) { if (buildNumber < 9200) { productName = QString::fromUtf8("Windows 7 build %1").arg(buildNumber); - } - else if (buildNumber < 10240) { + } else if (buildNumber < 10240) { productName = QString::fromUtf8("Windows 8 build %1").arg(buildNumber); - } - else if (buildNumber < 22000) { + } else if (buildNumber < 22000) { productName = QString::fromUtf8("Windows 10 build %1").arg(buildNumber); - } - else { + } else { productName = QString::fromUtf8("Windows 11 build %1").arg(buildNumber); } } @@ -92,56 +91,55 @@ QString Log::prettyProductInfoWrapper() return productName; } -static inline void messageHandler(const QtMsgType type, const QMessageLogContext &context, const QString &message) -{ - if(message == "Could not get the INetworkConnection instance for the adapter GUID."){ +static inline void messageHandler(const QtMsgType type, const QMessageLogContext &context, const QString &message) { + if (message == "Could not get the INetworkConnection instance for the adapter GUID.") { return; } - if(logLevelMap[type]>g_logLevel){ + if (logLevelMap[type] > g_logLevel) { return; } if (!message.isEmpty()) { QString levelName; switch (type) { - case QtDebugMsg: - levelName = QStringLiteral("Debug"); - break; - case QtInfoMsg: - levelName = QStringLiteral("Info"); - break; - case QtWarningMsg: - levelName = QStringLiteral("Warning"); - break; - case QtCriticalMsg: - levelName = QStringLiteral("Critical"); - break; - case QtFatalMsg: - levelName = QStringLiteral("Fatal"); - break; + case QtDebugMsg: + levelName = QStringLiteral("Debug"); + break; + case QtInfoMsg: + levelName = QStringLiteral("Info"); + break; + case QtWarningMsg: + levelName = QStringLiteral("Warning"); + break; + case QtCriticalMsg: + levelName = QStringLiteral("Critical"); + break; + case QtFatalMsg: + levelName = QStringLiteral("Fatal"); + break; } QString fileAndLineLogStr; - if(context.file){ + if (context.file) { std::string strFileTmp = context.file; - const char* ptr = strrchr(strFileTmp.c_str(), '/'); + const char *ptr = strrchr(strFileTmp.c_str(), '/'); if (nullptr != ptr) { char fn[512] = {0}; sprintf(fn, "%s", ptr + 1); strFileTmp = fn; } - const char* ptrTmp = strrchr(strFileTmp.c_str(), '\\'); + const char *ptrTmp = strrchr(strFileTmp.c_str(), '\\'); if (nullptr != ptrTmp) { char fn[512] = {0}; sprintf(fn, "%s", ptrTmp + 1); strFileTmp = fn; } - fileAndLineLogStr = QString::fromStdString("[%1:%2]").arg(QString::fromStdString(strFileTmp),QString::number(context.line)); + fileAndLineLogStr = QString::fromStdString("[%1:%2]").arg(QString::fromStdString(strFileTmp), QString::number(context.line)); } const QString finalMessage = QString::fromStdString("%1[%2]%3[%4]:%5").arg( - QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss.zzz"), - levelName, - fileAndLineLogStr, - QString::number(reinterpret_cast(QThread::currentThreadId())), - message); + QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss.zzz"), + levelName, + fileAndLineLogStr, + QString::number(reinterpret_cast(QThread::currentThreadId())), + message); if ((type == QtInfoMsg) || (type == QtDebugMsg)) { std::cout << qPrintable(finalMessage) << std::endl; } else { @@ -168,8 +166,7 @@ static inline void messageHandler(const QtMsgType type, const QMessageLogContext } } -void Log::setup(char *argv[],const QString &app,int level) -{ +void Log::setup(char *argv[], const QString &app, int level) { Q_ASSERT(!app.isEmpty()); if (app.isEmpty()) { return; @@ -182,30 +179,30 @@ void Log::setup(char *argv[],const QString &app,int level) QString applicationPath = QString::fromStdString(argv[0]); once = true; g_app = app; - const QString logFileName = QString("%1_%2.log").arg(g_app,QDateTime::currentDateTime().toString("yyyyMMdd")); - const QString logDirPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)+"/log"; + const QString logFileName = QString("%1_%2.log").arg(g_app, QDateTime::currentDateTime().toString("yyyyMMdd")); + const QString logDirPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/log"; const QDir logDir(logDirPath); - if(!logDir.exists()){ + if (!logDir.exists()) { logDir.mkpath(logDirPath); } g_file_path = logDir.filePath(logFileName); qInstallMessageHandler(messageHandler); - qInfo()<<"==================================================="; - qInfo()<<"[AppName]"< -namespace Log -{ +namespace Log { QString prettyProductInfoWrapper(); - void setup(char *argv[], const QString &app,int level = 4); -} -#endif // LOG_H + void setup(char *argv[], const QString &app, int level = 4); +} \ No newline at end of file diff --git a/example/src/helper/Network.cpp b/example/src/helper/Network.cpp index 5d345fc9..7f2ebc04 100644 --- a/example/src/helper/Network.cpp +++ b/example/src/helper/Network.cpp @@ -1,3 +1,7 @@ +#pragma clang diagnostic push +#pragma ide diagnostic ignored "UnusedParameter" +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" + #include "Network.h" #include @@ -17,175 +21,174 @@ #include #include #include +#include -NetworkCallable::NetworkCallable(QObject *parent):QObject{parent}{ + +NetworkCallable::NetworkCallable(QObject *parent) : QObject{parent} { } -QString NetworkParams::method2String(){ +QString NetworkParams::method2String() const { switch (_method) { - case METHOD_GET: - return "GET"; - case METHOD_HEAD: - return "HEAD"; - case METHOD_POST: - return "POST"; - case METHOD_PUT: - return "PUT"; - case METHOD_PATCH: - return "PATCH"; - case METHOD_DELETE: - return "DELETE"; - default: - return ""; + case METHOD_GET: + return "GET"; + case METHOD_HEAD: + return "HEAD"; + case METHOD_POST: + return "POST"; + case METHOD_PUT: + return "PUT"; + case METHOD_PATCH: + return "PATCH"; + case METHOD_DELETE: + return "DELETE"; + default: + return ""; } } -int NetworkParams::getTimeout(){ - if(_timeout != -1){ +int NetworkParams::getTimeout() const { + if (_timeout != -1) { return _timeout; } return Network::getInstance()->timeout(); } -int NetworkParams::getRetry(){ - if(_retry != -1){ +int NetworkParams::getRetry() const { + if (_retry != -1) { return _retry; } return Network::getInstance()->retry(); } -bool NetworkParams::getOpenLog(){ - if(!_openLog.isNull()){ +bool NetworkParams::getOpenLog() const { + if (!_openLog.isNull()) { return _openLog.toBool(); } return Network::getInstance()->openLog(); } FluDownloadParam::FluDownloadParam(QObject *parent) - : QObject{parent} -{ + : QObject{parent} { } -FluDownloadParam::FluDownloadParam(QString destPath,bool append,QObject *parent) - : QObject{parent} -{ - this->_destPath = destPath; +FluDownloadParam::FluDownloadParam(QString destPath, bool append, QObject *parent) + : QObject{parent} { + this->_destPath = std::move(destPath); this->_append = append; } -NetworkParams::NetworkParams(QObject *parent) - : QObject{parent} -{ +NetworkParams::NetworkParams(QObject *parent) : QObject{parent} { + _method = NetworkParams::Method::METHOD_GET; + _type = NetworkParams::Type::TYPE_BODY; } -NetworkParams::NetworkParams(QString url,Type type,Method method,QObject *parent) - : QObject{parent} -{ +NetworkParams::NetworkParams(QString url, Type type, Method method, QObject *parent) + : QObject{parent} { this->_method = method; - this->_url = url; + this->_url = std::move(url); this->_type = type; } -NetworkParams* NetworkParams::add(QString key,QVariant val){ - _paramMap.insert(key,val); +NetworkParams *NetworkParams::add(const QString &key, const QVariant &val) { + _paramMap.insert(key, val); return this; } -NetworkParams* NetworkParams::addFile(QString key,QVariant val){ - _fileMap.insert(key,val); +NetworkParams *NetworkParams::addFile(const QString &key, const QVariant &val) { + _fileMap.insert(key, val); return this; } -NetworkParams* NetworkParams::addHeader(QString key,QVariant val){ - _headerMap.insert(key,val); +NetworkParams *NetworkParams::addHeader(const QString &key, const QVariant &val) { + _headerMap.insert(key, val); return this; } -NetworkParams* NetworkParams::addQuery(QString key,QVariant val){ - _queryMap.insert(key,val); +NetworkParams *NetworkParams::addQuery(const QString &key, const QVariant &val) { + _queryMap.insert(key, val); return this; } -NetworkParams* NetworkParams::setBody(QString val){ - _body = val; +NetworkParams *NetworkParams::setBody(QString val) { + _body = std::move(val); return this; } -NetworkParams* NetworkParams::setTimeout(int val){ +NetworkParams *NetworkParams::setTimeout(int val) { _timeout = val; return this; } -NetworkParams* NetworkParams::setRetry(int val){ +NetworkParams *NetworkParams::setRetry(int val) { _retry = val; return this; } -NetworkParams* NetworkParams::setCacheMode(int val){ +NetworkParams *NetworkParams::setCacheMode(int val) { _cacheMode = val; return this; } -NetworkParams* NetworkParams::toDownload(QString destPath,bool append){ - _downloadParam = new FluDownloadParam(destPath,append,this); +NetworkParams *NetworkParams::toDownload(QString destPath, bool append) { + _downloadParam = new FluDownloadParam(std::move(destPath), append, this); return this; } -NetworkParams* NetworkParams::bind(QObject* target){ +NetworkParams *NetworkParams::bind(QObject *target) { _target = target; return this; } -NetworkParams* NetworkParams::openLog(QVariant val){ - _openLog = val; +NetworkParams *NetworkParams::openLog(QVariant val) { + _openLog = std::move(val); return this; } -QString NetworkParams::buildCacheKey(){ +QString NetworkParams::buildCacheKey() const { QJsonObject obj; - obj.insert("url",_url); - obj.insert("method",method2String()); - obj.insert("body",_body); - obj.insert("query",QJsonDocument::fromVariant(_queryMap).object()); - obj.insert("param",QJsonDocument::fromVariant(_paramMap).object()); - obj.insert("header",QJsonDocument::fromVariant(_headerMap).object()); - obj.insert("file",QJsonDocument::fromVariant(_fileMap).object()); - if(_downloadParam){ + obj.insert("url", _url); + obj.insert("method", method2String()); + obj.insert("body", _body); + obj.insert("query", QJsonDocument::fromVariant(_queryMap).object()); + obj.insert("param", QJsonDocument::fromVariant(_paramMap).object()); + obj.insert("header", QJsonDocument::fromVariant(_headerMap).object()); + obj.insert("file", QJsonDocument::fromVariant(_fileMap).object()); + if (_downloadParam) { QJsonObject downObj; - downObj.insert("destPath",_downloadParam->_destPath); - downObj.insert("append",_downloadParam->_append); - obj.insert("download",downObj); + downObj.insert("destPath", _downloadParam->_destPath); + downObj.insert("append", _downloadParam->_append); + obj.insert("download", downObj); } QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact); return QCryptographicHash::hash(data, QCryptographicHash::Sha256).toHex(); } -void NetworkParams::go(NetworkCallable* callable){ +void NetworkParams::go(NetworkCallable *callable) { QJSValueList data; - data<newQObject(this); + data << qjsEngine(callable)->newQObject(this); Network::getInstance()->_interceptor.call(data); - if(_downloadParam){ - Network::getInstance()->handleDownload(this,callable); - }else{ - Network::getInstance()->handle(this,callable); + if (_downloadParam) { + Network::getInstance()->handleDownload(this, callable); + } else { + Network::getInstance()->handle(this, callable); } } -void Network::handle(NetworkParams* params,NetworkCallable* c){ +void Network::handle(NetworkParams *params, NetworkCallable *c) { QPointer callable(c); - QThreadPool::globalInstance()->start([=](){ - if(!callable.isNull()){ + QThreadPool::globalInstance()->start([=]() { + if (!callable.isNull()) { callable->start(); } QString cacheKey = params->buildCacheKey(); - if(params->_cacheMode == NetworkType::CacheMode::FirstCacheThenRequest && cacheExists(cacheKey)){ - if(!callable.isNull()){ + if (params->_cacheMode == NetworkType::CacheMode::FirstCacheThenRequest && cacheExists(cacheKey)) { + if (!callable.isNull()) { callable->cache(readCache(cacheKey)); } } - if(params->_cacheMode == NetworkType::CacheMode::IfNoneCacheRequest && cacheExists(cacheKey)){ - if(!callable.isNull()){ + if (params->_cacheMode == NetworkType::CacheMode::IfNoneCacheRequest && cacheExists(cacheKey)) { + if (!callable.isNull()) { callable->cache(readCache(cacheKey)); callable->finish(); params->deleteLater(); @@ -195,131 +198,130 @@ void Network::handle(NetworkParams* params,NetworkCallable* c){ QNetworkAccessManager manager; manager.setTransferTimeout(params->getTimeout()); QEventLoop loop; - connect(&manager,&QNetworkAccessManager::finished,&manager,[&loop](QNetworkReply *reply){loop.quit();}); - for (int i = 0; i < params->getRetry(); ++i) { + connect(&manager, &QNetworkAccessManager::finished, &manager, [&loop](QNetworkReply *reply) { loop.quit(); }); + for (int i = 0; i <= params->getRetry() - 1; ++i) { QUrl url(params->_url); - addQueryParam(&url,params->_queryMap); + addQueryParam(&url, params->_queryMap); QNetworkRequest request(url); - addHeaders(&request,params->_headerMap); - QNetworkReply* reply; - sendRequest(&manager,request,params,reply,i==0,callable); - if(!QPointer(qApp)){ + addHeaders(&request, params->_headerMap); + QNetworkReply *reply; + sendRequest(&manager, request, params, reply, i == 0, callable); + if (!QPointer(QGuiApplication::instance())) { reply->deleteLater(); reply = nullptr; return; } - auto abortCallable = [&loop,reply,&i,params]{ - if(reply){ + auto abortCallable = [reply, &i, params] { + if (reply) { i = params->getRetry(); reply->abort(); } }; QMetaObject::Connection conn_destroyed = {}; QMetaObject::Connection conn_quit = {}; - if(params->_target){ - conn_destroyed = connect(params->_target,&QObject::destroyed,&manager,abortCallable); + if (params->_target) { + conn_destroyed = connect(params->_target, &QObject::destroyed, &manager, abortCallable); } - conn_quit = connect(qApp,&QGuiApplication::aboutToQuit,&manager, abortCallable); + conn_quit = connect(QGuiApplication::instance(), &QGuiApplication::aboutToQuit, &manager, abortCallable); loop.exec(); - if(conn_destroyed){ + if (conn_destroyed) { disconnect(conn_destroyed); } - if(conn_quit){ + if (conn_quit) { disconnect(conn_quit); } QString response; - if(params->_method == NetworkParams::METHOD_HEAD){ + if (params->_method == NetworkParams::METHOD_HEAD) { response = headerList2String(reply->rawHeaderPairs()); - }else{ - if(reply->isOpen()){ + } else { + if (reply->isOpen()) { response = QString::fromUtf8(reply->readAll()); } } int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if(httpStatus == 200){ - if(!callable.isNull()){ - if(params->_cacheMode != NetworkType::CacheMode::NoCache){ - saveResponse(cacheKey,response); + if (httpStatus == 200) { + if (!callable.isNull()) { + if (params->_cacheMode != NetworkType::CacheMode::NoCache) { + saveResponse(cacheKey, response); } callable->success(response); } - printRequestEndLog(request,params,reply,response); + printRequestEndLog(request, params, reply, response); break; - }else{ - if(i == params->getRetry()-1){ - if(!callable.isNull()){ - if(params->_cacheMode == NetworkType::CacheMode::RequestFailedReadCache && cacheExists(cacheKey)){ - if(!callable.isNull()){ + } else { + if (i == params->getRetry() - 1) { + if (!callable.isNull()) { + if (params->_cacheMode == NetworkType::CacheMode::RequestFailedReadCache && cacheExists(cacheKey)) { + if (!callable.isNull()) { callable->cache(readCache(cacheKey)); } } - callable->error(httpStatus,reply->errorString(),response); + callable->error(httpStatus, reply->errorString(), response); } - printRequestEndLog(request,params,reply,response); + printRequestEndLog(request, params, reply, response); } } reply->deleteLater(); } params->deleteLater(); - if(!callable.isNull()){ + if (!callable.isNull()) { callable->finish(); } }); } -void Network::handleDownload(NetworkParams* params,NetworkCallable* c){ +void Network::handleDownload(NetworkParams *params, NetworkCallable *c) { QPointer callable(c); - QThreadPool::globalInstance()->start([=](){ - if(!callable.isNull()){ + QThreadPool::globalInstance()->start([=]() { + if (!callable.isNull()) { callable->start(); } QString cacheKey = params->buildCacheKey(); QUrl url(params->_url); QNetworkAccessManager manager; manager.setTransferTimeout(params->getTimeout()); - addQueryParam(&url,params->_queryMap); + addQueryParam(&url, params->_queryMap); QNetworkRequest request(url); - addHeaders(&request,params->_headerMap); + addHeaders(&request, params->_headerMap); QString cachePath = getCacheFilePath(cacheKey); QString destPath = params->_downloadParam->_destPath; - QFile* destFile = new QFile(destPath); - QFile* cacheFile = new QFile(cachePath); - bool isOpen = false; - qint64 seek = 0; - if(cacheFile->exists() && destFile->exists() && params->_downloadParam->_append){ + auto *destFile = new QFile(destPath); + auto *cacheFile = new QFile(cachePath); + bool isOpen; + qint64 seek; + if (cacheFile->exists() && destFile->exists() && params->_downloadParam->_append) { QJsonObject cacheInfo = QJsonDocument::fromJson(readCache(cacheKey).toUtf8()).object(); - qint64 fileSize = cacheInfo.value("fileSize").toDouble(); - qint64 contentLength = cacheInfo.value("contentLength").toDouble(); - if(fileSize == contentLength && destFile->size() == contentLength){ - if(!callable.isNull()){ - callable->downloadProgress(fileSize,contentLength); + qint64 fileSize = qRound(cacheInfo.value("fileSize").toDouble()); + qint64 contentLength = qRound(cacheInfo.value("contentLength").toDouble()); + if (fileSize == contentLength && destFile->size() == contentLength) { + if (!callable.isNull()) { + callable->downloadProgress(fileSize, contentLength); callable->success(destPath); callable->finish(); } return; } - if(fileSize==destFile->size()){ + if (fileSize == destFile->size()) { request.setRawHeader("Range", QString("bytes=%1-").arg(fileSize).toUtf8()); seek = fileSize; - isOpen = destFile->open(QIODevice::WriteOnly|QIODevice::Append); - }else{ - isOpen = destFile->open(QIODevice::WriteOnly|QIODevice::Truncate); + isOpen = destFile->open(QIODevice::WriteOnly | QIODevice::Append); + } else { + isOpen = destFile->open(QIODevice::WriteOnly | QIODevice::Truncate); } - }else{ - isOpen = destFile->open(QIODevice::WriteOnly|QIODevice::Truncate); + } else { + isOpen = destFile->open(QIODevice::WriteOnly | QIODevice::Truncate); } - if(!isOpen){ - if(!callable.isNull()){ - callable->error(-1,"device not open",""); + if (!isOpen) { + if (!callable.isNull()) { + callable->error(-1, "device not open", ""); callable->finish(); } return; } - if(params->_downloadParam->_append){ - if (!cacheFile->open(QIODevice::WriteOnly|QIODevice::Truncate)) - { - if(!callable.isNull()){ - callable->error(-1,"cache file device not open",""); + if (params->_downloadParam->_append) { + if (!cacheFile->open(QIODevice::WriteOnly | QIODevice::Truncate)) { + if (!callable.isNull()) { + callable->error(-1, "cache file device not open", ""); callable->finish(); } return; @@ -329,73 +331,72 @@ void Network::handleDownload(NetworkParams* params,NetworkCallable* c){ QNetworkReply *reply = manager.get(request); destFile->setParent(reply); cacheFile->setParent(reply); - auto abortCallable = [&loop,reply,params]{ - if(reply){ + auto abortCallable = [reply] { + if (reply) { reply->abort(); } }; - connect(&manager,&QNetworkAccessManager::finished,&manager,[&loop](QNetworkReply *reply){loop.quit();}); - connect(qApp,&QGuiApplication::aboutToQuit,&manager, [&loop,reply](){reply->abort(),loop.quit();}); + connect(&manager, &QNetworkAccessManager::finished, &manager, [&loop](QNetworkReply *reply) { loop.quit(); }); + connect(QGuiApplication::instance(), &QGuiApplication::aboutToQuit, &manager, [&loop, reply]() { reply->abort(), loop.quit(); }); QMetaObject::Connection conn_destroyed = {}; QMetaObject::Connection conn_quit = {}; - if(params->_target){ - conn_destroyed = connect(params->_target,&QObject::destroyed,&manager,abortCallable); + if (params->_target) { + conn_destroyed = connect(params->_target, &QObject::destroyed, &manager, abortCallable); } - conn_quit = connect(qApp,&QGuiApplication::aboutToQuit,&manager, abortCallable); - connect(reply,&QNetworkReply::readyRead,reply,[reply,seek,destFile,cacheFile,callable]{ - if (!reply || !destFile || reply->error() != QNetworkReply::NoError) - { + conn_quit = connect(QGuiApplication::instance(), &QGuiApplication::aboutToQuit, &manager, abortCallable); + connect(reply, &QNetworkReply::readyRead, reply, [reply, seek, destFile, cacheFile, callable] { + if (!reply || !destFile || reply->error() != QNetworkReply::NoError) { return; } QMap downInfo; - qint64 contentLength = reply->header(QNetworkRequest::ContentLengthHeader).toLongLong()+seek; - downInfo.insert("contentLength",contentLength); + qint64 contentLength = reply->header(QNetworkRequest::ContentLengthHeader).toLongLong() + seek; + downInfo.insert("contentLength", contentLength); QString eTag = reply->header(QNetworkRequest::ETagHeader).toString(); - downInfo.insert("eTag",eTag); + downInfo.insert("eTag", eTag); destFile->write(reply->readAll()); destFile->flush(); - downInfo.insert("fileSize",destFile->size()); - if(cacheFile->isOpen()){ + downInfo.insert("fileSize", destFile->size()); + if (cacheFile->isOpen()) { cacheFile->resize(0); cacheFile->write(QJsonDocument::fromVariant(QVariant(downInfo)).toJson().toBase64()); cacheFile->flush(); } - if(!callable.isNull()){ - callable->downloadProgress(destFile->size(),contentLength); + if (!callable.isNull()) { + callable->downloadProgress(destFile->size(), contentLength); } }); loop.exec(); int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if(httpStatus == 200){ - if(!callable.isNull()){ + if (httpStatus == 200) { + if (!callable.isNull()) { callable->success(destPath); } - printRequestEndLog(request,params,reply,destPath); - }else{ - if(!callable.isNull()){ - callable->error(httpStatus,reply->errorString(),destPath); + printRequestEndLog(request, params, reply, destPath); + } else { + if (!callable.isNull()) { + callable->error(httpStatus, reply->errorString(), destPath); } - printRequestEndLog(request,params,reply,destPath); + printRequestEndLog(request, params, reply, destPath); } - if(conn_destroyed){ + if (conn_destroyed) { disconnect(conn_destroyed); } - if(conn_quit){ + if (conn_quit) { disconnect(conn_quit); } params->deleteLater(); reply->deleteLater(); - if(!callable.isNull()){ + if (!callable.isNull()) { callable->finish(); } }); } -QString Network::readCache(const QString& key){ +QString Network::readCache(const QString &key) { auto filePath = getCacheFilePath(key); QString result; QFile file(filePath); - if(!file.exists()){ + if (!file.exists()) { return result; } if (file.open(QIODevice::ReadOnly)) { @@ -405,27 +406,27 @@ QString Network::readCache(const QString& key){ return result; } -bool Network::cacheExists(const QString& key){ +bool Network::cacheExists(const QString &key) { return QFile(getCacheFilePath(key)).exists(); } -QString Network::getCacheFilePath(const QString& key){ +QString Network::getCacheFilePath(const QString &key) { QDir cacheDir(_cacheDir); - if(!cacheDir.exists()){ + if (!cacheDir.exists()) { cacheDir.mkpath(_cacheDir); } return cacheDir.absoluteFilePath(key); } -QString Network::headerList2String(const QList& data){ +QString Network::headerList2String(const QList &data) { QJsonObject object; for (auto it = data.constBegin(); it != data.constEnd(); ++it) { - object.insert(QString(it->first),QString(it->second)); + object.insert(QString(it->first), QString(it->second)); } return QJsonDocument(object).toJson(QJsonDocument::Compact); } -QString Network::map2String(const QMap& map){ +QString Network::map2String(const QMap &map) { QStringList parameters; for (auto it = map.constBegin(); it != map.constEnd(); ++it) { parameters << QString("%1=%2").arg(it.key(), it.value().toString()); @@ -433,244 +434,237 @@ QString Network::map2String(const QMap& map){ return parameters.join(" "); } -void Network::sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,bool isFirst,QPointer callable){ +void Network::sendRequest(QNetworkAccessManager *manager, QNetworkRequest request, NetworkParams *params, QNetworkReply *&reply, bool isFirst, const QPointer &callable) { QByteArray verb = params->method2String().toUtf8(); switch (params->_type) { - case NetworkParams::TYPE_FORM:{ - bool isFormData = !params->_fileMap.isEmpty(); - if(isFormData){ - QHttpMultiPart *multiPart = new QHttpMultiPart(); - multiPart->setContentType(QHttpMultiPart::FormDataType); - for (const auto& each : params->_paramMap.toStdMap()) - { - QHttpPart part; - part.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"").arg(each.first)); - part.setBody(each.second.toByteArray()); - multiPart->append(part); - } - for (const auto& each : params->_fileMap.toStdMap()) - { - QString filePath = each.second.toString(); - QString name = each.first; - QFile *file = new QFile(filePath); - QString fileName = QFileInfo(filePath).fileName(); - file->open(QIODevice::ReadOnly); - file->setParent(multiPart); - QHttpPart part; - part.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"; filename=\"%2\"").arg(name,fileName)); - part.setBodyDevice(file); - multiPart->append(part); - } - reply = manager->sendCustomRequest(request,verb,multiPart); - multiPart->setParent(reply); - connect(reply,&QNetworkReply::uploadProgress,reply,[callable](qint64 bytesSent, qint64 bytesTotal){ - if(!callable.isNull() && bytesSent!=0 && bytesTotal!=0){ - Q_EMIT callable->uploadProgress(bytesSent,bytesTotal); + case NetworkParams::TYPE_FORM: { + bool isFormData = !params->_fileMap.isEmpty(); + if (isFormData) { + auto *multiPart = new QHttpMultiPart(); + multiPart->setContentType(QHttpMultiPart::FormDataType); + for (const auto &each: params->_paramMap.toStdMap()) { + QHttpPart part; + part.setHeader(QNetworkRequest::ContentDispositionHeader, QString("form-data; name=\"%1\"").arg(each.first)); + part.setBody(each.second.toByteArray()); + multiPart->append(part); } - }); - }else{ - request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/x-www-form-urlencoded")); - QString value; - for (const auto& each : params->_paramMap.toStdMap()) - { - value += QString("%1=%2").arg(each.first,each.second.toString()); - value += "&"; + for (const auto &each: params->_fileMap.toStdMap()) { + QString filePath = each.second.toString(); + QString name = each.first; + auto *file = new QFile(filePath); + QString fileName = QFileInfo(filePath).fileName(); + file->open(QIODevice::ReadOnly); + file->setParent(multiPart); + QHttpPart part; + part.setHeader(QNetworkRequest::ContentDispositionHeader, QString(R"(form-data; name="%1"; filename="%2")").arg(name, fileName)); + part.setBodyDevice(file); + multiPart->append(part); + } + reply = manager->sendCustomRequest(request, verb, multiPart); + multiPart->setParent(reply); + connect(reply, &QNetworkReply::uploadProgress, reply, [callable](qint64 bytesSent, qint64 bytesTotal) { + if (!callable.isNull() && bytesSent != 0 && bytesTotal != 0) { + Q_EMIT callable->uploadProgress(bytesSent, bytesTotal); + } + }); + } else { + request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/x-www-form-urlencoded")); + QString value; + for (const auto &each: params->_paramMap.toStdMap()) { + value += QString("%1=%2").arg(each.first, each.second.toString()); + value += "&"; + } + if (!params->_paramMap.isEmpty()) { + value.chop(1); + } + QByteArray data = value.toUtf8(); + reply = manager->sendCustomRequest(request, verb, data); } - if(!params->_paramMap.isEmpty()){ - value.chop(1); - } - QByteArray data = value.toUtf8(); - reply = manager->sendCustomRequest(request,verb,data); + break; } - break; - } - case NetworkParams::TYPE_JSON:{ - request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/json;charset=utf-8")); - QJsonObject json; - for (const auto& each : params->_paramMap.toStdMap()) - { - json.insert(each.first,each.second.toJsonValue()); - } - QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact); - reply = manager->sendCustomRequest(request,verb,data); - break; - } - case NetworkParams::TYPE_JSONARRAY:{ - request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/json;charset=utf-8")); - QJsonArray jsonArray; - for (const auto& each : params->_paramMap.toStdMap()) - { + case NetworkParams::TYPE_JSON: { + request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/json;charset=utf-8")); QJsonObject json; - json.insert(each.first,each.second.toJsonValue()); - jsonArray.append(json); + for (const auto &each: params->_paramMap.toStdMap()) { + json.insert(each.first, each.second.toJsonValue()); + } + QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact); + reply = manager->sendCustomRequest(request, verb, data); + break; } - QByteArray data = QJsonDocument(jsonArray).toJson(QJsonDocument::Compact); - reply = manager->sendCustomRequest(request,params->method2String().toUtf8(),data); - break; + case NetworkParams::TYPE_JSONARRAY: { + request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/json;charset=utf-8")); + QJsonArray jsonArray; + for (const auto &each: params->_paramMap.toStdMap()) { + QJsonObject json; + json.insert(each.first, each.second.toJsonValue()); + jsonArray.append(json); + } + QByteArray data = QJsonDocument(jsonArray).toJson(QJsonDocument::Compact); + reply = manager->sendCustomRequest(request, params->method2String().toUtf8(), data); + break; + } + case NetworkParams::TYPE_BODY: { + request.setHeader(QNetworkRequest::ContentTypeHeader, QString("text/plain;charset=utf-8")); + QByteArray data = params->_body.toUtf8(); + reply = manager->sendCustomRequest(request, verb, data); + break; + } + default: + reply = manager->sendCustomRequest(request, verb); + break; } - case NetworkParams::TYPE_BODY:{ - request.setHeader(QNetworkRequest::ContentTypeHeader, QString("text/plain;charset=utf-8")); - QByteArray data = params->_body.toUtf8(); - reply = manager->sendCustomRequest(request,verb,data); - break; - } - default: - reply = manager->sendCustomRequest(request,verb); - break; - } - if(isFirst){ - printRequestStartLog(request,params); + if (isFirst) { + printRequestStartLog(request, params); } } -void Network::printRequestStartLog(QNetworkRequest request,NetworkParams* params){ - if(!params->getOpenLog()){ +void Network::printRequestStartLog(const QNetworkRequest &request, NetworkParams *params) { + if (!params->getOpenLog()) { return; } - qDebug()<<"<------"<"; - qDebug()<").arg(params->method2String()))<_url); + qDebug() << "<------" << qUtf8Printable(request.header(QNetworkRequest::UserAgentHeader).toString()) << "Request Start ------>"; + qDebug() << qUtf8Printable(QString::fromStdString("<%1>").arg(params->method2String())) << qUtf8Printable(params->_url); auto contentType = request.header(QNetworkRequest::ContentTypeHeader).toString(); - if(!contentType.isEmpty()){ - qDebug()< %1=%2").arg("Content-Type",contentType)); + if (!contentType.isEmpty()) { + qDebug() << qUtf8Printable(QString::fromStdString("
%1=%2").arg("Content-Type", contentType)); } QList headers = request.rawHeaderList(); - for(const QByteArray& header:headers){ - qDebug()< %1=%2").arg(header,request.rawHeader(header))); + for (const QByteArray &header: headers) { + qDebug() << qUtf8Printable(QString::fromStdString("
%1=%2").arg(header, request.rawHeader(header))); } - if(!params->_queryMap.isEmpty()){ - qDebug()<<""<_queryMap)); + if (!params->_queryMap.isEmpty()) { + qDebug() << "" << qUtf8Printable(map2String(params->_queryMap)); } - if(!params->_paramMap.isEmpty()){ - qDebug()<<""<_paramMap)); + if (!params->_paramMap.isEmpty()) { + qDebug() << "" << qUtf8Printable(map2String(params->_paramMap)); } - if(!params->_fileMap.isEmpty()){ - qDebug()<<""<_fileMap)); + if (!params->_fileMap.isEmpty()) { + qDebug() << "" << qUtf8Printable(map2String(params->_fileMap)); } - if(!params->_body.isEmpty()){ - qDebug()<<""<_body); + if (!params->_body.isEmpty()) { + qDebug() << "" << qUtf8Printable(params->_body); } } -void Network::printRequestEndLog(QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,const QString& response){ - if(!params->getOpenLog()){ +void Network::printRequestEndLog(const QNetworkRequest &request, NetworkParams *params, QNetworkReply *&reply, const QString &response) { + if (!params->getOpenLog()) { return; } - qDebug()<<"<------"<"; - qDebug()<").arg(params->method2String()))<_url); - qDebug()<<""<"; + qDebug() << qUtf8Printable(QString::fromStdString("<%1>").arg(params->method2String())) << qUtf8Printable(params->_url); + qDebug() << "" << qUtf8Printable(response); } -void Network::saveResponse(QString key,QString response){ +void Network::saveResponse(const QString &key, const QString &response) { QSharedPointer file(new QFile(getCacheFilePath(key))); - QIODevice::OpenMode mode = QIODevice::WriteOnly|QIODevice::Truncate; - if (!file->open(mode)) - { + QIODevice::OpenMode mode = QIODevice::WriteOnly | QIODevice::Truncate; + if (!file->open(mode)) { return; } file->write(response.toUtf8().toBase64()); } -void Network::addHeaders(QNetworkRequest* request,const QMap& headers){ - request->setHeader(QNetworkRequest::UserAgentHeader,QString::fromStdString("Mozilla/5.0 %1/%2").arg(QGuiApplication::applicationName(),QGuiApplication::applicationVersion())); +void Network::addHeaders(QNetworkRequest *request, const QMap &headers) { + request->setHeader(QNetworkRequest::UserAgentHeader, QString::fromStdString("Mozilla/5.0 %1/%2").arg(QGuiApplication::applicationName(), QGuiApplication::applicationVersion())); QMapIterator iter(headers); - while (iter.hasNext()) - { + while (iter.hasNext()) { iter.next(); request->setRawHeader(iter.key().toUtf8(), iter.value().toString().toUtf8()); } } -void Network::addQueryParam(QUrl* url,const QMap& params){ +void Network::addQueryParam(QUrl *url, const QMap ¶ms) { QMapIterator iter(params); QUrlQuery urlQuery(*url); - while (iter.hasNext()) - { + while (iter.hasNext()) { iter.next(); urlQuery.addQueryItem(iter.key(), iter.value().toString()); } url->setQuery(urlQuery); } -Network::Network(QObject *parent): QObject{parent} -{ - timeout(5000); - retry(3); - openLog(false); - cacheDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation).append(QDir::separator()).append("network")); +Network::Network(QObject *parent) : QObject{parent} { + _timeout = 5000; + _retry = 3; + _openLog = false; + _cacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation).append(QDir::separator()).append("network"); } -NetworkParams* Network::get(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_NONE,NetworkParams::METHOD_GET,this); +NetworkParams *Network::get(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_NONE, NetworkParams::METHOD_GET, this); } -NetworkParams* Network::head(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_NONE,NetworkParams::METHOD_HEAD,this); +NetworkParams *Network::head(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_NONE, NetworkParams::METHOD_HEAD, this); } -NetworkParams* Network::postBody(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_BODY,NetworkParams::METHOD_POST,this); +NetworkParams *Network::postBody(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_BODY, NetworkParams::METHOD_POST, this); } -NetworkParams* Network::putBody(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_BODY,NetworkParams::METHOD_PUT,this); +NetworkParams *Network::putBody(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_BODY, NetworkParams::METHOD_PUT, this); } -NetworkParams* Network::patchBody(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_BODY,NetworkParams::METHOD_PATCH,this); +NetworkParams *Network::patchBody(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_BODY, NetworkParams::METHOD_PATCH, this); } -NetworkParams* Network::deleteBody(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_BODY,NetworkParams::METHOD_DELETE,this); +NetworkParams *Network::deleteBody(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_BODY, NetworkParams::METHOD_DELETE, this); } -NetworkParams* Network::postForm(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_FORM,NetworkParams::METHOD_POST,this); +NetworkParams *Network::postForm(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_FORM, NetworkParams::METHOD_POST, this); } -NetworkParams* Network::putForm(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_FORM,NetworkParams::METHOD_PUT,this); +NetworkParams *Network::putForm(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_FORM, NetworkParams::METHOD_PUT, this); } -NetworkParams* Network::patchForm(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_FORM,NetworkParams::METHOD_PATCH,this); +NetworkParams *Network::patchForm(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_FORM, NetworkParams::METHOD_PATCH, this); } -NetworkParams* Network::deleteForm(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_FORM,NetworkParams::METHOD_DELETE,this); +NetworkParams *Network::deleteForm(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_FORM, NetworkParams::METHOD_DELETE, this); } -NetworkParams* Network::postJson(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSON,NetworkParams::METHOD_POST,this); +NetworkParams *Network::postJson(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSON, NetworkParams::METHOD_POST, this); } -NetworkParams* Network::putJson(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSON,NetworkParams::METHOD_PUT,this); +NetworkParams *Network::putJson(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSON, NetworkParams::METHOD_PUT, this); } -NetworkParams* Network::patchJson(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSON,NetworkParams::METHOD_PATCH,this); +NetworkParams *Network::patchJson(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSON, NetworkParams::METHOD_PATCH, this); } -NetworkParams* Network::deleteJson(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSON,NetworkParams::METHOD_DELETE,this); +NetworkParams *Network::deleteJson(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSON, NetworkParams::METHOD_DELETE, this); } -NetworkParams* Network::postJsonArray(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSONARRAY,NetworkParams::METHOD_POST,this); +NetworkParams *Network::postJsonArray(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSONARRAY, NetworkParams::METHOD_POST, this); } -NetworkParams* Network::putJsonArray(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSONARRAY,NetworkParams::METHOD_PUT,this); +NetworkParams *Network::putJsonArray(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSONARRAY, NetworkParams::METHOD_PUT, this); } -NetworkParams* Network::patchJsonArray(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSONARRAY,NetworkParams::METHOD_PATCH,this); +NetworkParams *Network::patchJsonArray(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSONARRAY, NetworkParams::METHOD_PATCH, this); } -NetworkParams* Network::deleteJsonArray(const QString& url){ - return new NetworkParams(url,NetworkParams::TYPE_JSONARRAY,NetworkParams::METHOD_DELETE,this); +NetworkParams *Network::deleteJsonArray(const QString &url) { + return new NetworkParams(url, NetworkParams::TYPE_JSONARRAY, NetworkParams::METHOD_DELETE, this); } -void Network::setInterceptor(QJSValue interceptor){ - this->_interceptor = interceptor; +void Network::setInterceptor(QJSValue interceptor) { + this->_interceptor = std::move(interceptor); } + +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/helper/Network.h b/example/src/helper/Network.h index 7b00a151..1e37707c 100644 --- a/example/src/helper/Network.h +++ b/example/src/helper/Network.h @@ -1,5 +1,6 @@ -#ifndef NETWORK_H -#define NETWORK_H +#pragma once +#pragma clang diagnostic push +#pragma ide diagnostic ignored "NotImplementedFunctions" #include #include @@ -12,56 +13,66 @@ #include "src/singleton.h" namespace NetworkType { -Q_NAMESPACE -enum CacheMode { - NoCache = 0x0000, - RequestFailedReadCache = 0x0001, - IfNoneCacheRequest = 0x0002, - FirstCacheThenRequest = 0x0004, -}; -Q_ENUM_NS(CacheMode) -QML_NAMED_ELEMENT(NetworkType) + Q_NAMESPACE + enum CacheMode { + NoCache = 0x0000, + RequestFailedReadCache = 0x0001, + IfNoneCacheRequest = 0x0002, + FirstCacheThenRequest = 0x0004, + }; + + Q_ENUM_NS(CacheMode) + + QML_NAMED_ELEMENT(NetworkType) } /** * @brief The NetworkCallable class */ -class NetworkCallable : public QObject{ - Q_OBJECT +class NetworkCallable : public QObject { +Q_OBJECT QML_NAMED_ELEMENT(NetworkCallable) public: explicit NetworkCallable(QObject *parent = nullptr); + Q_SIGNAL void start(); + Q_SIGNAL void finish(); - Q_SIGNAL void error(int status,QString errorString,QString result); + + Q_SIGNAL void error(int status, QString errorString, QString result); + Q_SIGNAL void success(QString result); + Q_SIGNAL void cache(QString result); + Q_SIGNAL void uploadProgress(qint64 sent, qint64 total); + Q_SIGNAL void downloadProgress(qint64 recv, qint64 total); }; /** * @brief The FluDownloadParam class */ -class FluDownloadParam : public QObject{ - Q_OBJECT +class FluDownloadParam : public QObject { +Q_OBJECT public: explicit FluDownloadParam(QObject *parent = nullptr); - FluDownloadParam(QString destPath,bool append,QObject *parent = nullptr); + + FluDownloadParam(QString destPath, bool append, QObject *parent = nullptr); + public: QString _destPath; - bool _append; + bool _append{}; }; /** * @brief The NetworkParams class */ -class NetworkParams : public QObject -{ - Q_OBJECT +class NetworkParams : public QObject { +Q_OBJECT QML_NAMED_ELEMENT(NetworkParams) public: - enum Method{ + enum Method { METHOD_GET, METHOD_HEAD, METHOD_POST, @@ -69,35 +80,55 @@ public: METHOD_PATCH, METHOD_DELETE }; - enum Type{ + enum Type { TYPE_NONE, TYPE_FORM, TYPE_JSON, TYPE_JSONARRAY, TYPE_BODY }; + explicit NetworkParams(QObject *parent = nullptr); - NetworkParams(QString url,Type type,Method method,QObject *parent = nullptr); - Q_INVOKABLE NetworkParams* addQuery(QString key,QVariant val); - Q_INVOKABLE NetworkParams* addHeader(QString key,QVariant val); - Q_INVOKABLE NetworkParams* add(QString key,QVariant val); - Q_INVOKABLE NetworkParams* addFile(QString key,QVariant val); - Q_INVOKABLE NetworkParams* setBody(QString val); - Q_INVOKABLE NetworkParams* setTimeout(int val); - Q_INVOKABLE NetworkParams* setRetry(int val); - Q_INVOKABLE NetworkParams* setCacheMode(int val); - Q_INVOKABLE NetworkParams* toDownload(QString destPath,bool append = false); - Q_INVOKABLE NetworkParams* bind(QObject* target); - Q_INVOKABLE NetworkParams* openLog(QVariant val); - Q_INVOKABLE void go(NetworkCallable* result); - QString buildCacheKey(); - QString method2String(); - int getTimeout(); - int getRetry(); - bool getOpenLog(); + + NetworkParams(QString url, Type type, Method method, QObject *parent = nullptr); + + Q_INVOKABLE NetworkParams *addQuery(const QString &key, const QVariant &val); + + Q_INVOKABLE NetworkParams *addHeader(const QString &key, const QVariant &val); + + Q_INVOKABLE NetworkParams *add(const QString &key, const QVariant &val); + + Q_INVOKABLE NetworkParams *addFile(const QString &key, const QVariant &val); + + Q_INVOKABLE NetworkParams *setBody(QString val); + + Q_INVOKABLE NetworkParams *setTimeout(int val); + + Q_INVOKABLE NetworkParams *setRetry(int val); + + Q_INVOKABLE NetworkParams *setCacheMode(int val); + + Q_INVOKABLE NetworkParams *toDownload(QString destPath, bool append = false); + + Q_INVOKABLE NetworkParams *bind(QObject *target); + + Q_INVOKABLE NetworkParams *openLog(QVariant val); + + Q_INVOKABLE void go(NetworkCallable *result); + + QString buildCacheKey() const; + + QString method2String() const; + + int getTimeout() const; + + int getRetry() const; + + bool getOpenLog() const; + public: - FluDownloadParam* _downloadParam = nullptr; - QObject* _target = nullptr; + FluDownloadParam *_downloadParam = nullptr; + QObject *_target = nullptr; Method _method; Type _type; QString _url; @@ -115,55 +146,90 @@ public: /** * @brief The Network class */ -class Network : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(int,timeout) - Q_PROPERTY_AUTO(int,retry) - Q_PROPERTY_AUTO(QString,cacheDir) - Q_PROPERTY_AUTO(bool,openLog) +class Network : public QObject { +Q_OBJECT +Q_PROPERTY_AUTO(int, timeout) +Q_PROPERTY_AUTO(int, retry) +Q_PROPERTY_AUTO(QString, cacheDir) +Q_PROPERTY_AUTO(bool, openLog) QML_NAMED_ELEMENT(Network) QML_SINGLETON + private: explicit Network(QObject *parent = nullptr); + public: - SINGLETON(Network) - static Network *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} - Q_INVOKABLE NetworkParams* get(const QString& url); - Q_INVOKABLE NetworkParams* head(const QString& url); - Q_INVOKABLE NetworkParams* postBody(const QString& url); - Q_INVOKABLE NetworkParams* putBody(const QString& url); - Q_INVOKABLE NetworkParams* patchBody(const QString& url); - Q_INVOKABLE NetworkParams* deleteBody(const QString& url); - Q_INVOKABLE NetworkParams* postForm(const QString& url); - Q_INVOKABLE NetworkParams* putForm(const QString& url); - Q_INVOKABLE NetworkParams* patchForm(const QString& url); - Q_INVOKABLE NetworkParams* deleteForm(const QString& url); - Q_INVOKABLE NetworkParams* postJson(const QString& url); - Q_INVOKABLE NetworkParams* putJson(const QString& url); - Q_INVOKABLE NetworkParams* patchJson(const QString& url); - Q_INVOKABLE NetworkParams* deleteJson(const QString& url); - Q_INVOKABLE NetworkParams* postJsonArray(const QString& url); - Q_INVOKABLE NetworkParams* putJsonArray(const QString& url); - Q_INVOKABLE NetworkParams* patchJsonArray(const QString& url); - Q_INVOKABLE NetworkParams* deleteJsonArray(const QString& url); +SINGLETON(Network) + + static Network *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) { return getInstance(); } + + Q_INVOKABLE NetworkParams *get(const QString &url); + + Q_INVOKABLE NetworkParams *head(const QString &url); + + Q_INVOKABLE NetworkParams *postBody(const QString &url); + + Q_INVOKABLE NetworkParams *putBody(const QString &url); + + Q_INVOKABLE NetworkParams *patchBody(const QString &url); + + Q_INVOKABLE NetworkParams *deleteBody(const QString &url); + + Q_INVOKABLE NetworkParams *postForm(const QString &url); + + Q_INVOKABLE NetworkParams *putForm(const QString &url); + + Q_INVOKABLE NetworkParams *patchForm(const QString &url); + + Q_INVOKABLE NetworkParams *deleteForm(const QString &url); + + Q_INVOKABLE NetworkParams *postJson(const QString &url); + + Q_INVOKABLE NetworkParams *putJson(const QString &url); + + Q_INVOKABLE NetworkParams *patchJson(const QString &url); + + Q_INVOKABLE NetworkParams *deleteJson(const QString &url); + + Q_INVOKABLE NetworkParams *postJsonArray(const QString &url); + + Q_INVOKABLE NetworkParams *putJsonArray(const QString &url); + + Q_INVOKABLE NetworkParams *patchJsonArray(const QString &url); + + Q_INVOKABLE NetworkParams *deleteJsonArray(const QString &url); + Q_INVOKABLE void setInterceptor(QJSValue interceptor); - void handle(NetworkParams* params,NetworkCallable* result); - void handleDownload(NetworkParams* params,NetworkCallable* result); + + void handle(NetworkParams *params, NetworkCallable *result); + + void handleDownload(NetworkParams *params, NetworkCallable *result); + private: - void sendRequest(QNetworkAccessManager* manager,QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,bool isFirst,QPointer callable); - void addQueryParam(QUrl* url,const QMap& params); - void addHeaders(QNetworkRequest* request,const QMap& headers); - void saveResponse(QString key,QString response); - QString readCache(const QString& key); - bool cacheExists(const QString& key); - QString getCacheFilePath(const QString& key); - QString map2String(const QMap& map); - QString headerList2String(const QList& data); - void printRequestStartLog(QNetworkRequest request,NetworkParams* params); - void printRequestEndLog(QNetworkRequest request,NetworkParams* params,QNetworkReply*& reply,const QString& response); + static void sendRequest(QNetworkAccessManager *manager, QNetworkRequest request, NetworkParams *params, QNetworkReply *&reply, bool isFirst, const QPointer& callable); + + static void addQueryParam(QUrl *url, const QMap ¶ms); + + static void addHeaders(QNetworkRequest *request, const QMap &headers); + + void saveResponse(const QString& key, const QString& response); + + QString readCache(const QString &key); + + bool cacheExists(const QString &key); + + QString getCacheFilePath(const QString &key); + + static QString headerList2String(const QList &data); + + static void printRequestStartLog(const QNetworkRequest& request, NetworkParams *params); + + static void printRequestEndLog(const QNetworkRequest& request, NetworkParams *params, QNetworkReply *&reply, const QString &response); + + static QString map2String(const QMap &map); + public: QJSValue _interceptor; }; -#endif // Network_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/helper/SettingsHelper.cpp b/example/src/helper/SettingsHelper.cpp index 1f5afdc9..af77d709 100644 --- a/example/src/helper/SettingsHelper.cpp +++ b/example/src/helper/SettingsHelper.cpp @@ -1,21 +1,22 @@ +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" + #include "SettingsHelper.h" #include #include -SettingsHelper::SettingsHelper(QObject *parent) : QObject(parent) -{ +SettingsHelper::SettingsHelper(QObject *parent) : QObject(parent) { } SettingsHelper::~SettingsHelper() = default; -void SettingsHelper::save(const QString& key,QVariant val) -{ +void SettingsHelper::save(const QString &key, QVariant val) { m_settings->setValue(key, val); } -QVariant SettingsHelper::get(const QString& key,QVariant def){ +QVariant SettingsHelper::get(const QString &key, QVariant def) { QVariant data = m_settings->value(key); if (!data.isNull() && data.isValid()) { return data; @@ -23,10 +24,12 @@ QVariant SettingsHelper::get(const QString& key,QVariant def){ return def; } -void SettingsHelper::init(char *argv[]){ +void SettingsHelper::init(char *argv[]) { QString applicationPath = QString::fromStdString(argv[0]); const QFileInfo fileInfo(applicationPath); const QString iniFileName = fileInfo.completeBaseName() + ".ini"; const QString iniFilePath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/" + iniFileName; m_settings.reset(new QSettings(iniFilePath, QSettings::IniFormat)); } + +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/helper/SettingsHelper.h b/example/src/helper/SettingsHelper.h index a8c0b8e9..ab49a49d 100644 --- a/example/src/helper/SettingsHelper.h +++ b/example/src/helper/SettingsHelper.h @@ -1,5 +1,6 @@ -#ifndef SETTINGSHELPER_H -#define SETTINGSHELPER_H +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" +#pragma once #include #include @@ -10,26 +11,36 @@ #include #include "src/singleton.h" -class SettingsHelper : public QObject -{ - Q_OBJECT +class SettingsHelper : public QObject { +Q_OBJECT private: - explicit SettingsHelper(QObject* parent = nullptr); + explicit SettingsHelper(QObject *parent = nullptr); + public: - SINGLETON(SettingsHelper) +SINGLETON(SettingsHelper) + ~SettingsHelper() override; + void init(char *argv[]); - Q_INVOKABLE void saveDarkMode(int darkModel){save("darkMode",darkModel);} - Q_INVOKABLE int getDarkMode(){return get("darkMode",QVariant(0)).toInt();} - Q_INVOKABLE void saveUseSystemAppBar(bool useSystemAppBar){save("useSystemAppBar",useSystemAppBar);} - Q_INVOKABLE bool getUseSystemAppBar(){return get("useSystemAppBar",QVariant(false)).toBool();} - Q_INVOKABLE void saveLanguage(QString language){save("language",language);} - Q_INVOKABLE QString getLanguage(){return get("language",QVariant("en_US")).toString();} + + Q_INVOKABLE void saveDarkMode(int darkModel) { save("darkMode", darkModel); } + + Q_INVOKABLE int getDarkMode() { return get("darkMode", QVariant(0)).toInt(); } + + Q_INVOKABLE void saveUseSystemAppBar(bool useSystemAppBar) { save("useSystemAppBar", useSystemAppBar); } + + Q_INVOKABLE bool getUseSystemAppBar() { return get("useSystemAppBar", QVariant(false)).toBool(); } + + Q_INVOKABLE void saveLanguage(const QString &language) { save("language", language); } + + Q_INVOKABLE QString getLanguage() { return get("language", QVariant("en_US")).toString(); } + private: - void save(const QString& key,QVariant val); - QVariant get(const QString& key,QVariant def={}); + void save(const QString &key, QVariant val); + + QVariant get(const QString &key, QVariant def = {}); + private: QScopedPointer m_settings; }; - -#endif // SETTINGSHELPER_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/example/src/helper/TranslateHelper.cpp b/example/src/helper/TranslateHelper.cpp index 178b9416..5ac3bf09 100644 --- a/example/src/helper/TranslateHelper.cpp +++ b/example/src/helper/TranslateHelper.cpp @@ -5,21 +5,20 @@ #include "SettingsHelper.h" -TranslateHelper::TranslateHelper(QObject *parent) : QObject(parent) -{ - _languages<<"en_US"; - _languages<<"zh_CN"; +[[maybe_unused]] TranslateHelper::TranslateHelper(QObject *parent) : QObject(parent) { + _languages << "en_US"; + _languages << "zh_CN"; _current = SettingsHelper::getInstance()->getLanguage(); } TranslateHelper::~TranslateHelper() = default; -void TranslateHelper::init(QQmlEngine* engine){ +void TranslateHelper::init(QQmlEngine *engine) { _engine = engine; _translator = new QTranslator(this); - qApp->installTranslator(_translator); - QString translatorPath = QGuiApplication::applicationDirPath()+"/i18n"; - if(_translator->load(QString::fromStdString("%1/example_%2.qm").arg(translatorPath,_current))){ + QGuiApplication::installTranslator(_translator); + QString translatorPath = QGuiApplication::applicationDirPath() + "/i18n"; + if (_translator->load(QString::fromStdString("%1/example_%2.qm").arg(translatorPath, _current))) { _engine->retranslate(); } } diff --git a/example/src/helper/TranslateHelper.h b/example/src/helper/TranslateHelper.h index 93e1a4cc..1476871a 100644 --- a/example/src/helper/TranslateHelper.h +++ b/example/src/helper/TranslateHelper.h @@ -1,5 +1,4 @@ -#ifndef TRANSLATEHELPER_H -#define TRANSLATEHELPER_H +#pragma once #include #include @@ -7,20 +6,21 @@ #include "src/singleton.h" #include "src/stdafx.h" -class TranslateHelper : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(QString,current) - Q_PROPERTY_READONLY_AUTO(QStringList,languages) +class TranslateHelper : public QObject { +Q_OBJECT +Q_PROPERTY_AUTO(QString, current) +Q_PROPERTY_READONLY_AUTO(QStringList, languages) private: - explicit TranslateHelper(QObject* parent = nullptr); -public: - SINGLETON(TranslateHelper) - ~TranslateHelper() override; - void init(QQmlEngine* engine); -private: - QQmlEngine* _engine = nullptr; - QTranslator* _translator = nullptr; -}; + [[maybe_unused]] explicit TranslateHelper(QObject *parent = nullptr); -#endif // TRANSLATEHELPER_H +public: +SINGLETON(TranslateHelper) + + ~TranslateHelper() override; + + void init(QQmlEngine *engine); + +private: + QQmlEngine *_engine = nullptr; + QTranslator *_translator = nullptr; +}; \ No newline at end of file diff --git a/example/src/main.cpp b/example/src/main.cpp index be38a0b5..e652ac85 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -14,6 +14,7 @@ #include "src/component/CircularReveal.h" #include "src/component/FileWatcher.h" #include "src/component/FpsItem.h" +#include "src/component/OpenGLItem.h" #include "src/helper/SettingsHelper.h" #include "src/helper/InitializrHelper.h" #include "src/helper/TranslateHelper.h" @@ -75,6 +76,9 @@ int main(int argc, char *argv[]) qmlRegisterType(uri, major, minor, "FpsItem"); qmlRegisterType(uri,major,minor,"NetworkCallable"); qmlRegisterType(uri,major,minor,"NetworkParams"); + qmlRegisterType(uri,major,minor,"OpenGLItem"); + qmlRegisterUncreatableMetaObject(NetworkType::staticMetaObject, uri, major, minor, "NetworkType", "Access to enums & flags only"); + QQmlApplicationEngine engine; TranslateHelper::getInstance()->init(&engine); engine.rootContext()->setContextProperty("AppInfo",AppInfo::getInstance()); diff --git a/example/src/singleton.h b/example/src/singleton.h index 8d6c10e6..9583c687 100644 --- a/example/src/singleton.h +++ b/example/src/singleton.h @@ -1,18 +1,17 @@ -#ifndef SINGLETON_H -#define SINGLETON_H +#pragma once /** * @brief The Singleton class */ -template +template class Singleton { public: - static T* getInstance(); + static T *getInstance(); }; -template -T* Singleton::getInstance() { - static T* instance = new T(); +template +T *Singleton::getInstance() { + static T *instance = new T(); return instance; } @@ -23,5 +22,3 @@ private: \ static Class* getInstance() { \ return Singleton::getInstance(); \ } - -#endif // SINGLETON_H diff --git a/example/src/stdafx.h b/example/src/stdafx.h index 4b4d821c..b411a82a 100644 --- a/example/src/stdafx.h +++ b/example/src/stdafx.h @@ -1,37 +1,50 @@ -#ifndef STDAFX_H -#define STDAFX_H +#pragma once -#define Q_PROPERTY_AUTO(TYPE, M) \ +#define Q_PROPERTY_AUTO_P(TYPE, M) \ Q_PROPERTY(TYPE M MEMBER _##M NOTIFY M##Changed) \ - public: \ - Q_SIGNAL void M##Changed(); \ - void M(TYPE in_##M) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(TYPE in_##M) \ { \ - _##M = in_##M; \ - Q_EMIT M##Changed(); \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ } \ - TYPE M() \ + TYPE M() \ { \ - return _##M; \ + return _##M; \ } \ - private: \ - TYPE _##M; \ + private: \ + TYPE _##M; \ + +#define Q_PROPERTY_AUTO(TYPE, M) \ +Q_PROPERTY(TYPE M MEMBER _##M NOTIFY M##Changed) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE& in_##M) \ +{ \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ +} \ + TYPE M() \ +{ \ + return _##M; \ +} \ + private: \ + TYPE _##M; \ -#define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ +#define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ Q_PROPERTY(TYPE M READ M NOTIFY M##Changed FINAL) \ - public: \ - Q_SIGNAL void M##Changed(); \ - void M(TYPE in_##M) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE& in_##M) \ { \ - _##M = in_##M; \ - Q_EMIT M##Changed(); \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ } \ - TYPE M() \ + TYPE M() \ { \ - return _##M; \ + return _##M; \ } \ - private: \ - TYPE _##M; \ - -#endif // STDAFX_H + private: \ + TYPE _##M; \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f4439bd9..bb916ab9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 3.20) if (FLUENTUI_BUILD_STATIC_LIB AND (QT_VERSION VERSION_GREATER_EQUAL "6.2")) project(fluentui VERSION 1.0) -else() +else () project(fluentuiplugin VERSION 1.0) -endif() +endif () list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/) @@ -17,31 +17,31 @@ add_definitions(-DFLUENTUI_VERSION=1,7,4,0) if (FLUENTUI_BUILD_STATIC_LIB) add_definitions(-DFLUENTUI_BUILD_STATIC_LIB) -endif() +endif () #编译参数设置 option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF) #导入Qt相关依赖包 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Quick Qml) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick Qml) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick) set(QT_SDK_DIR "${Qt${QT_VERSION_MAJOR}_DIR}/../../..") cmake_path(SET QT_SDK_DIR NORMALIZE ${QT_SDK_DIR}) #设置QML插件输出目录,可以通过外部设置,如果外部没有设置就默认到\qml\FluentUI目录下 set(FLUENTUI_QML_PLUGIN_DIRECTORY "" CACHE PATH "Path to FluentUI plugin") -if(NOT FLUENTUI_QML_PLUGIN_DIRECTORY) +if (NOT FLUENTUI_QML_PLUGIN_DIRECTORY) set(FLUENTUI_QML_PLUGIN_DIRECTORY ${QT_SDK_DIR}/qml/FluentUI) -endif() +endif () -if(QT_VERSION VERSION_GREATER_EQUAL "6.3") +if (QT_VERSION VERSION_GREATER_EQUAL "6.3") qt_standard_project_setup() -else() +else () set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif() +endif () #国际化 find_program(QT_LUPDATE NAMES lupdate) @@ -59,90 +59,90 @@ file(GLOB QM_FILE_PATHS ${CMAKE_CURRENT_LIST_DIR}/ *.qm) file(COPY ${QM_FILE_PATHS} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/Qt${QT_VERSION_MAJOR}/imports/FluentUI/i18n") #遍历所有Cpp文件 -file(GLOB_RECURSE CPP_FILES *.cpp *.h) -foreach(filepath ${CPP_FILES}) +file(GLOB_RECURSE CPP_FILES *.cpp *.h *.cxx) +foreach (filepath ${CPP_FILES}) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) list(APPEND sources_files ${filename}) -endforeach(filepath) +endforeach (filepath) -if(QT_VERSION VERSION_GREATER_EQUAL "6.2") +if (QT_VERSION VERSION_GREATER_EQUAL "6.2") #删除fluentuiplugin.cpp与fluentuiplugin.h,这些只要Qt5使用,Qt6不需要 list(REMOVE_ITEM sources_files fluentuiplugin.h fluentuiplugin.cpp) if (NOT FLUENTUI_BUILD_STATIC_LIB) list(REMOVE_ITEM sources_files FluentUI.h FluentUI.cpp) - endif() + endif () #遍历所有qml文件 file(GLOB_RECURSE QML_PATHS *.qml qmldir) - foreach(filepath ${QML_PATHS}) - if(${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/") + foreach (filepath ${QML_PATHS}) + if (${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/") string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) - if(${filename} MATCHES "qmldir") + if (${filename} MATCHES "qmldir") list(APPEND resource_files ${filename}) - else() + else () list(APPEND qml_files ${filename}) - endif() - endif() - endforeach(filepath) + endif () + endif () + endforeach (filepath) #遍历所有资源文件 file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.js *.qm) - foreach(filepath ${RES_PATHS}) - if(${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/") + foreach (filepath ${RES_PATHS}) + if (${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/") string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) list(APPEND resource_files ${filename}) - endif() - endforeach(filepath) + endif () + endforeach (filepath) #修改资源文件导出路径 - foreach(filepath IN LISTS qml_files resource_files) + foreach (filepath IN LISTS qml_files resource_files) string(REPLACE "Qt${QT_VERSION_MAJOR}/imports/FluentUI/" "" filename ${filepath}) set_source_files_properties(${filepath} PROPERTIES QT_RESOURCE_ALIAS ${filename}) - endforeach() -endif() + endforeach () +endif () if (FLUENTUI_BUILD_STATIC_LIB) set(LIB_TYPE "STATIC") -else() +else () set(LIB_TYPE "SHARED") -endif() +endif () if (FLUENTUI_BUILD_STATIC_LIB) set(PLUGIN_TARGET_NAME "") -else() +else () #如果是动态库,则使用插件目标作为其自己的支持目标来定义 QML 模块,在这种情况下,模块必须在运行时动态加载,并且不能由其他目标直接链接到 set(PLUGIN_TARGET_NAME ${PROJECT_NAME}) -endif() +endif () #如果是Windows平台,则生成rc文件 set(FLUENTUI_VERSION_RC_PATH "") -if(WIN32) +if (WIN32) set(FLUENTUI_VERSION_RC_PATH ${CMAKE_CURRENT_BINARY_DIR}/version_${PROJECT_NAME}.rc) configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/version_dll.rc.in - ${FLUENTUI_VERSION_RC_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/version_dll.rc.in + ${FLUENTUI_VERSION_RC_PATH} ) -endif() +endif () -if(QT_VERSION VERSION_GREATER_EQUAL "6.2") +if (QT_VERSION VERSION_GREATER_EQUAL "6.2") #如果是Qt6.2版本以上,则使用qt_add_library,qt_add_qml_module函数添加资源文件 - if(FLUENTUI_BUILD_STATIC_LIB) + if (FLUENTUI_BUILD_STATIC_LIB) set(FLUENTUI_QML_PLUGIN_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/FluentUI) - endif() + endif () qt_add_library(${PROJECT_NAME} ${LIB_TYPE}) qt_add_qml_module(${PROJECT_NAME} - PLUGIN_TARGET ${PLUGIN_TARGET_NAME} - OUTPUT_DIRECTORY ${FLUENTUI_QML_PLUGIN_DIRECTORY} - VERSION 1.0 - URI "FluentUI" - #修改qmltypes文件名称。默认fluentuiplugin.qmltypes,使用默认名称有时候import FluentUI 1.0会爆红,所以修改成plugins.qmltypes - TYPEINFO "plugins.qmltypes" - SOURCES ${sources_files} ${FLUENTUI_VERSION_RC_PATH} - QML_FILES ${qml_files} - RESOURCES ${resource_files} - RESOURCE_PREFIX "/qt/qml" + PLUGIN_TARGET ${PLUGIN_TARGET_NAME} + OUTPUT_DIRECTORY ${FLUENTUI_QML_PLUGIN_DIRECTORY} + VERSION 1.0 + URI "FluentUI" + #修改qmltypes文件名称。默认fluentuiplugin.qmltypes,使用默认名称有时候import FluentUI 1.0会爆红,所以修改成plugins.qmltypes + TYPEINFO "plugins.qmltypes" + SOURCES ${sources_files} ${FLUENTUI_VERSION_RC_PATH} + QML_FILES ${qml_files} + RESOURCES ${resource_files} + RESOURCE_PREFIX "/qt/qml" ) -else() +else () #加快qrc编译 set(QRC_FILE Qt5/imports/fluentui.qrc) qt_add_big_resources(QRC_RESOURCES ${QRC_FILE}) @@ -151,37 +151,37 @@ else() #如果是Qt6.2版本以下,则使用add_qmlplugin函数添加资源文件,这是个自定义的函数,详情见.cmake/QmlPlugin.cmake include(QmlPlugin) add_qmlplugin(${PROJECT_NAME} - URI "FluentUI" - VERSION 1.0 - SOURCES ${sources_files} ${FLUENTUI_VERSION_RC_PATH} ${QRC_RESOURCES} - QMLFILES ${qml_files} - QMLDIR imports/FluentUI - BINARY_DIR ${FLUENTUI_QML_PLUGIN_DIRECTORY} - LIBTYPE ${LIB_TYPE} + URI "FluentUI" + VERSION 1.0 + SOURCES ${sources_files} ${FLUENTUI_VERSION_RC_PATH} ${QRC_RESOURCES} + QMLFILES ${qml_files} + QMLDIR imports/FluentUI + BINARY_DIR ${FLUENTUI_QML_PLUGIN_DIRECTORY} + LIBTYPE ${LIB_TYPE} ) -endif() +endif () target_compile_definitions(${PROJECT_NAME} - PRIVATE - #导入qrcode配置文件 - HAVE_CONFIG_H + PRIVATE + #导入qrcode配置文件 + HAVE_CONFIG_H ) #去掉mingw生成的动态库libxxx前缀lib,不去掉前缀会导致 module "FluentUI" plugin "fluentuiplugin" not found -if(MINGW) +if (MINGW) set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") -endif() +endif () #MSVC Debug 添加后缀d,与Qt插件风格保持一致 -if(MSVC) +if (MSVC) set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d") -endif() +endif () #链接库 target_link_libraries(${PROJECT_NAME} PUBLIC - Qt${QT_VERSION_MAJOR}::Core - Qt${QT_VERSION_MAJOR}::Quick - Qt${QT_VERSION_MAJOR}::Qml + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Quick + Qt${QT_VERSION_MAJOR}::Qml ) #安装 diff --git a/src/Def.cpp b/src/Def.cpp deleted file mode 100644 index 7d0fc38e..00000000 --- a/src/Def.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "Def.h" diff --git a/src/Def.h b/src/Def.h index 12a2f371..5f2a5b19 100644 --- a/src/Def.h +++ b/src/Def.h @@ -1,1564 +1,1591 @@ -#ifndef DEF_H -#define DEF_H +#pragma once #include #include namespace FluSheetType { -Q_NAMESPACE -enum Position { - Left = 0x0000, - Top = 0x0001, - Right = 0x0002, - Bottom = 0x0004, -}; -Q_ENUM_NS(Position) -QML_NAMED_ELEMENT(FluSheetType) + Q_NAMESPACE + enum Position { + Left = 0x0000, + Top = 0x0001, + Right = 0x0002, + Bottom = 0x0004, + }; + + Q_ENUM_NS(Position) + + QML_NAMED_ELEMENT(FluSheetType) } namespace FluThemeType { -Q_NAMESPACE -enum DarkMode { - System = 0x0000, - Light = 0x0001, - Dark = 0x0002, -}; -Q_ENUM_NS(DarkMode) -QML_NAMED_ELEMENT(FluThemeType) + Q_NAMESPACE + enum DarkMode { + System = 0x0000, + Light = 0x0001, + Dark = 0x0002, + }; + + Q_ENUM_NS(DarkMode) + + QML_NAMED_ELEMENT(FluThemeType) } namespace FluTimelineType { -Q_NAMESPACE -enum Mode { - Left = 0x0000, - Right = 0x0001, - Alternate = 0x0002, -}; -Q_ENUM_NS(Mode) -QML_NAMED_ELEMENT(FluTimelineType) + Q_NAMESPACE + enum Mode { + Left = 0x0000, + Right = 0x0001, + Alternate = 0x0002, + }; + + Q_ENUM_NS(Mode) + + QML_NAMED_ELEMENT(FluTimelineType) } namespace FluPageType { -Q_NAMESPACE -enum LaunchMode { - Standard = 0x0000, - SingleTask = 0x0001, - SingleTop = 0x0002, - SingleInstance = 0x0004 -}; -Q_ENUM_NS(LaunchMode) -QML_NAMED_ELEMENT(FluPageType) + Q_NAMESPACE + enum LaunchMode { + Standard = 0x0000, + SingleTask = 0x0001, + SingleTop = 0x0002, + SingleInstance = 0x0004 + }; + + Q_ENUM_NS(LaunchMode) + + QML_NAMED_ELEMENT(FluPageType) } namespace FluWindowType { -Q_NAMESPACE -enum LaunchMode { - Standard = 0x0000, - SingleTask = 0x0001, - SingleInstance = 0x0002 -}; -Q_ENUM_NS(LaunchMode) -QML_NAMED_ELEMENT(FluWindowType) + Q_NAMESPACE + enum LaunchMode { + Standard = 0x0000, + SingleTask = 0x0001, + SingleInstance = 0x0002 + }; + + Q_ENUM_NS(LaunchMode) + + QML_NAMED_ELEMENT(FluWindowType) } namespace FluTreeViewType { -Q_NAMESPACE -enum SelectionMode { - None = 0x0000, - Single = 0x0001, - Multiple = 0x0002 -}; -Q_ENUM_NS(SelectionMode) -QML_NAMED_ELEMENT(FluTreeViewType) + Q_NAMESPACE + enum SelectionMode { + None = 0x0000, + Single = 0x0001, + Multiple = 0x0002 + }; + + Q_ENUM_NS(SelectionMode) + + QML_NAMED_ELEMENT(FluTreeViewType) } namespace FluStatusLayoutType { -Q_NAMESPACE -enum StatusMode { - Loading = 0x0000, - Empty = 0x0001, - Error = 0x0002, - Success = 0x0004 -}; -Q_ENUM_NS(StatusMode) -QML_NAMED_ELEMENT(FluStatusLayoutType) + Q_NAMESPACE + enum StatusMode { + Loading = 0x0000, + Empty = 0x0001, + Error = 0x0002, + Success = 0x0004 + }; + + Q_ENUM_NS(StatusMode) + + QML_NAMED_ELEMENT(FluStatusLayoutType) } namespace FluContentDialogType { -Q_NAMESPACE -enum ButtonFlag { - NeutralButton = 0x0001, - NegativeButton = 0x0002, - PositiveButton = 0x0004 -}; -Q_ENUM_NS(ButtonFlag) -QML_NAMED_ELEMENT(FluContentDialogType) + Q_NAMESPACE + enum ButtonFlag { + NeutralButton = 0x0001, + NegativeButton = 0x0002, + PositiveButton = 0x0004 + }; + + Q_ENUM_NS(ButtonFlag) + + QML_NAMED_ELEMENT(FluContentDialogType) } namespace FluTimePickerType { -Q_NAMESPACE -enum HourFormat { - H = 0x0000, - HH = 0x0001 -}; -Q_ENUM_NS(HourFormat) -QML_NAMED_ELEMENT(FluTimePickerType) + Q_NAMESPACE + enum HourFormat { + H = 0x0000, + HH = 0x0001 + }; + + Q_ENUM_NS(HourFormat) + + QML_NAMED_ELEMENT(FluTimePickerType) } namespace FluCalendarViewType { -Q_NAMESPACE -enum DisplayMode { - Month = 0x0000, - Year = 0x0001, - Decade = 0x0002 -}; -Q_ENUM_NS(DisplayMode) -QML_NAMED_ELEMENT(FluCalendarViewType) + Q_NAMESPACE + enum DisplayMode { + Month = 0x0000, + Year = 0x0001, + Decade = 0x0002 + }; + + Q_ENUM_NS(DisplayMode) + + QML_NAMED_ELEMENT(FluCalendarViewType) } namespace FluTabViewType { -Q_NAMESPACE -enum TabWidthBehavior { - Equal = 0x0000, - SizeToContent = 0x0001, - Compact = 0x0002 -}; -Q_ENUM_NS(TabWidthBehavior) -enum CloseButtonVisibility { - Never = 0x0000, - Always = 0x0001, - OnHover = 0x0002 -}; -Q_ENUM_NS(CloseButtonVisibility) -QML_NAMED_ELEMENT(FluTabViewType) + Q_NAMESPACE + enum TabWidthBehavior { + Equal = 0x0000, + SizeToContent = 0x0001, + Compact = 0x0002 + }; + + Q_ENUM_NS(TabWidthBehavior) + + enum CloseButtonVisibility { + Never = 0x0000, + Always = 0x0001, + OnHover = 0x0002 + }; + + Q_ENUM_NS(CloseButtonVisibility) + + QML_NAMED_ELEMENT(FluTabViewType) } namespace FluNavigationViewType { -Q_NAMESPACE -enum DisplayMode { - Open = 0x0000, - Compact = 0x0001, - Minimal = 0x0002, - Auto = 0x0004 -}; -Q_ENUM_NS(DisplayMode) -enum PageMode { - Stack = 0x0000, - NoStack = 0x0001 -}; -Q_ENUM_NS(PageMode) -QML_NAMED_ELEMENT(FluNavigationViewType) + Q_NAMESPACE + enum DisplayMode { + Open = 0x0000, + Compact = 0x0001, + Minimal = 0x0002, + Auto = 0x0004 + }; + + Q_ENUM_NS(DisplayMode) + + enum PageMode { + Stack = 0x0000, + NoStack = 0x0001 + }; + + Q_ENUM_NS(PageMode) + + QML_NAMED_ELEMENT(FluNavigationViewType) } namespace Fluent_Awesome { -Q_NAMESPACE -enum class Fluent_AwesomeType { - GlobalNavButton=0xe700, - Wifi=0xe701, - Bluetooth=0xe702, - Connect=0xe703, - InternetSharing=0xe704, - VPN=0xe705, - Brightness=0xe706, - MapPin=0xe707, - QuietHours=0xe708, - Airplane=0xe709, - Tablet=0xe70a, - QuickNote=0xe70b, - RememberedDevice=0xe70c, - ChevronDown=0xe70d, - ChevronUp=0xe70e, - Edit=0xe70f, - Add=0xe710, - Cancel=0xe711, - More=0xe712, - Settings=0xe713, - Video=0xe714, - Mail=0xe715, - People=0xe716, - Phone=0xe717, - Pin=0xe718, - Shop=0xe719, - Stop=0xe71a, - Link=0xe71b, - Filter=0xe71c, - AllApps=0xe71d, - Zoom=0xe71e, - ZoomOut=0xe71f, - Microphone=0xe720, - Search=0xe721, - Camera=0xe722, - Attach=0xe723, - Send=0xe724, - SendFill=0xe725, - WalkSolid=0xe726, - InPrivate=0xe727, - FavoriteList=0xe728, - PageSolid=0xe729, - Forward=0xe72a, - Back=0xe72b, - Refresh=0xe72c, - Share=0xe72d, - Lock=0xe72e, - ReportHacked=0xe730, - EMI=0xe731, - FavoriteStar=0xe734, - FavoriteStarFill=0xe735, - ReadingMode=0xe736, - Favicon=0xe737, - Remove=0xe738, - Checkbox=0xe739, - CheckboxComposite=0xe73a, - CheckboxFill=0xe73b, - CheckboxIndeterminate=0xe73c, - CheckboxCompositeReversed=0xe73d, - CheckMark=0xe73e, - BackToWindow=0xe73f, - FullScreen=0xe740, - ResizeTouchLarger=0xe741, - ResizeTouchSmaller=0xe742, - ResizeMouseSmall=0xe743, - ResizeMouseMedium=0xe744, - ResizeMouseWide=0xe745, - ResizeMouseTall=0xe746, - ResizeMouseLarge=0xe747, - SwitchUser=0xe748, - Print=0xe749, - Up=0xe74a, - Down=0xe74b, - OEM=0xe74c, - Delete=0xe74d, - Save=0xe74e, - Mute=0xe74f, - BackSpaceQWERTY=0xe750, - ReturnKey=0xe751, - UpArrowShiftKey=0xe752, - Cloud=0xe753, - Flashlight=0xe754, - RotationLock=0xe755, - CommandPrompt=0xe756, - SIPMove=0xe759, - SIPUndock=0xe75a, - SIPRedock=0xe75b, - EraseTool=0xe75c, - UnderscoreSpace=0xe75d, - GripperTool=0xe75e, - Dialpad=0xe75f, - PageLeft=0xe760, - PageRight=0xe761, - MultiSelect=0xe762, - KeyboardLeftHanded=0xe763, - KeyboardRightHanded=0xe764, - KeyboardClassic=0xe765, - KeyboardSplit=0xe766, - Volume=0xe767, - Play=0xe768, - Pause=0xe769, - ChevronLeft=0xe76b, - ChevronRight=0xe76c, - InkingTool=0xe76d, - Emoji2=0xe76e, - GripperBarHorizontal=0xe76f, - System=0xe770, - Personalize=0xe771, - Devices=0xe772, - SearchAndApps=0xe773, - Globe=0xe774, - TimeLanguage=0xe775, - EaseOfAccess=0xe776, - UpdateRestore=0xe777, - HangUp=0xe778, - ContactInfo=0xe779, - Unpin=0xe77a, - Contact=0xe77b, - Memo=0xe77c, - IncomingCall=0xe77e, - Paste=0xe77f, - PhoneBook=0xe780, - LEDLight=0xe781, - Error=0xe783, - GripperBarVertical=0xe784, - Unlock=0xe785, - Slideshow=0xe786, - Calendar=0xe787, - GripperResize=0xe788, - Megaphone=0xe789, - Trim=0xe78a, - NewWindow=0xe78b, - SaveLocal=0xe78c, - Color=0xe790, - DataSense=0xe791, - SaveAs=0xe792, - Light=0xe793, - AspectRatio=0xe799, - DataSenseBar=0xe7a5, - Redo=0xe7a6, - Undo=0xe7a7, - Crop=0xe7a8, - OpenWith=0xe7ac, - Rotate=0xe7ad, - RedEye=0xe7b3, - SetlockScreen=0xe7b5, - MapPin2=0xe7b7, - Package=0xe7b8, - Warning=0xe7ba, - ReadingList=0xe7bc, - Education=0xe7be, - ShoppingCart=0xe7bf, - Train=0xe7c0, - Flag=0xe7c1, - Move=0xe7c2, - Page=0xe7c3, - TaskView=0xe7c4, - BrowsePhotos=0xe7c5, - HalfStarLeft=0xe7c6, - HalfStarRight=0xe7c7, - Record=0xe7c8, - TouchPointer=0xe7c9, - LangJPN=0xe7de, - Ferry=0xe7e3, - Highlight=0xe7e6, - ActionCenterNotification=0xe7e7, - PowerButton=0xe7e8, - ResizeTouchNarrower=0xe7ea, - ResizeTouchShorter=0xe7eb, - DrivingMode=0xe7ec, - RingerSilent=0xe7ed, - OtherUser=0xe7ee, - Admin=0xe7ef, - CC=0xe7f0, - SDCard=0xe7f1, - CallForwarding=0xe7f2, - SettingsDisplaySound=0xe7f3, - TVMonitor=0xe7f4, - Speakers=0xe7f5, - Headphone=0xe7f6, - DeviceLaptopPic=0xe7f7, - DeviceLaptopNoPic=0xe7f8, - DeviceMonitorRightPic=0xe7f9, - DeviceMonitorLeftPic=0xe7fa, - DeviceMonitorNoPic=0xe7fb, - Game=0xe7fc, - HorizontalTabKey=0xe7fd, - StreetsideSplitMinimize=0xe802, - StreetsideSplitExpand=0xe803, - Car=0xe804, - Walk=0xe805, - Bus=0xe806, - TiltUp=0xe809, - TiltDown=0xe80a, - CallControl=0xe80b, - RotateMapRight=0xe80c, - RotateMapLeft=0xe80d, - Home=0xe80f, - ParkingLocation=0xe811, - MapCompassTop=0xe812, - MapCompassBottom=0xe813, - IncidentTriangle=0xe814, - Touch=0xe815, - MapDirections=0xe816, - StartPoint=0xe819, - StopPoint=0xe81a, - EndPoint=0xe81b, - History=0xe81c, - Location=0xe81d, - MapLayers=0xe81e, - Accident=0xe81f, - Work=0xe821, - Construction=0xe822, - Recent=0xe823, - Bank=0xe825, - DownloadMap=0xe826, - InkingToolFill2=0xe829, - HighlightFill2=0xe82a, - EraseToolFill=0xe82b, - EraseToolFill2=0xe82c, - Dictionary=0xe82d, - DictionaryAdd=0xe82e, - ToolTip=0xe82f, - ChromeBack=0xe830, - ProvisioningPackage=0xe835, - AddRemoteDevice=0xe836, - FolderOpen=0xe838, - Ethernet=0xe839, - ShareBroadband=0xe83a, - DirectAccess=0xe83b, - DialUp=0xe83c, - DefenderApp=0xe83d, - BatteryCharging9=0xe83e, - Battery10=0xe83f, - Pinned=0xe840, - PinFill=0xe841, - PinnedFill=0xe842, - PeriodKey=0xe843, - PuncKey=0xe844, - RevToggleKey=0xe845, - RightArrowKeyTime1=0xe846, - RightArrowKeyTime2=0xe847, - LeftQuote=0xe848, - RightQuote=0xe849, - DownShiftKey=0xe84a, - UpShiftKey=0xe84b, - PuncKey0=0xe84c, - PuncKeyLeftBottom=0xe84d, - RightArrowKeyTime3=0xe84e, - RightArrowKeyTime4=0xe84f, - Battery0=0xe850, - Battery1=0xe851, - Battery2=0xe852, - Battery3=0xe853, - Battery4=0xe854, - Battery5=0xe855, - Battery6=0xe856, - Battery7=0xe857, - Battery8=0xe858, - Battery9=0xe859, - BatteryCharging0=0xe85a, - BatteryCharging1=0xe85b, - BatteryCharging2=0xe85c, - BatteryCharging3=0xe85d, - BatteryCharging4=0xe85e, - BatteryCharging5=0xe85f, - BatteryCharging6=0xe860, - BatteryCharging7=0xe861, - BatteryCharging8=0xe862, - BatterySaver0=0xe863, - BatterySaver1=0xe864, - BatterySaver2=0xe865, - BatterySaver3=0xe866, - BatterySaver4=0xe867, - BatterySaver5=0xe868, - BatterySaver6=0xe869, - BatterySaver7=0xe86a, - BatterySaver8=0xe86b, - SignalBars1=0xe86c, - SignalBars2=0xe86d, - SignalBars3=0xe86e, - SignalBars4=0xe86f, - SignalBars5=0xe870, - SignalNotConnected=0xe871, - Wifi1=0xe872, - Wifi2=0xe873, - Wifi3=0xe874, - MobSIMLock=0xe875, - MobSIMMissing=0xe876, - Vibrate=0xe877, - RoamingInternational=0xe878, - RoamingDomestic=0xe879, - CallForwardInternational=0xe87a, - CallForwardRoaming=0xe87b, - JpnRomanji=0xe87c, - JpnRomanjiLock=0xe87d, - JpnRomanjiShift=0xe87e, - JpnRomanjiShiftLock=0xe87f, - StatusDataTransfer=0xe880, - StatusDataTransferVPN=0xe881, - StatusDualSIM2=0xe882, - StatusDualSIM2VPN=0xe883, - StatusDualSIM1=0xe884, - StatusDualSIM1VPN=0xe885, - StatusSGLTE=0xe886, - StatusSGLTECell=0xe887, - StatusSGLTEDataVPN=0xe888, - StatusVPN=0xe889, - WifiHotspot=0xe88a, - LanguageKor=0xe88b, - LanguageCht=0xe88c, - LanguageChs=0xe88d, - USB=0xe88e, - InkingToolFill=0xe88f, - View=0xe890, - HighlightFill=0xe891, - Previous=0xe892, - Next=0xe893, - Clear=0xe894, - Sync=0xe895, - Download=0xe896, - Help=0xe897, - Upload=0xe898, - Emoji=0xe899, - TwoPage=0xe89a, - LeaveChat=0xe89b, - MailForward=0xe89c, - RotateCamera=0xe89e, - ClosePane=0xe89f, - OpenPane=0xe8a0, - PreviewLink=0xe8a1, - AttachCamera=0xe8a2, - ZoomIn=0xe8a3, - Bookmarks=0xe8a4, - Document=0xe8a5, - ProtectedDocument=0xe8a6, - OpenInNewWindow=0xe8a7, - MailFill=0xe8a8, - ViewAll=0xe8a9, - VideoChat=0xe8aa, - Switch=0xe8ab, - Rename=0xe8ac, - Go=0xe8ad, - SurfaceHub=0xe8ae, - Remote=0xe8af, - Click=0xe8b0, - Shuffle=0xe8b1, - Movies=0xe8b2, - SelectAll=0xe8b3, - Orientation=0xe8b4, - Import=0xe8b5, - ImportAll=0xe8b6, - Folder=0xe8b7, - Webcam=0xe8b8, - Picture=0xe8b9, - Caption=0xe8ba, - ChromeClose=0xe8bb, - ShowResults=0xe8bc, - Message=0xe8bd, - Leaf=0xe8be, - CalendarDay=0xe8bf, - CalendarWeek=0xe8c0, - Characters=0xe8c1, - MailReplyAll=0xe8c2, - Read=0xe8c3, - ShowBcc=0xe8c4, - HideBcc=0xe8c5, - Cut=0xe8c6, - PaymentCard=0xe8c7, - Copy=0xe8c8, - Important=0xe8c9, - MailReply=0xe8ca, - Sort=0xe8cb, - MobileTablet=0xe8cc, - DisconnectDrive=0xe8cd, - MapDrive=0xe8ce, - ContactPresence=0xe8cf, - Priority=0xe8d0, - GotoToday=0xe8d1, - Font=0xe8d2, - FontColor=0xe8d3, - Contact2=0xe8d4, - FolderFill=0xe8d5, - Audio=0xe8d6, - Permissions=0xe8d7, - DisableUpdates=0xe8d8, - Unfavorite=0xe8d9, - OpenLocal=0xe8da, - Italic=0xe8db, - Underline=0xe8dc, - Bold=0xe8dd, - MoveToFolder=0xe8de, - LikeDislike=0xe8df, - Dislike=0xe8e0, - Like=0xe8e1, - AlignRight=0xe8e2, - AlignCenter=0xe8e3, - AlignLeft=0xe8e4, - OpenFile=0xe8e5, - ClearSelection=0xe8e6, - FontDecrease=0xe8e7, - FontIncrease=0xe8e8, - FontSize=0xe8e9, - CellPhone=0xe8ea, - Reshare=0xe8eb, - Tag=0xe8ec, - RepeatOne=0xe8ed, - RepeatAll=0xe8ee, - Calculator=0xe8ef, - Directions=0xe8f0, - Library=0xe8f1, - ChatBubbles=0xe8f2, - PostUpdate=0xe8f3, - NewFolder=0xe8f4, - CalendarReply=0xe8f5, - UnsyncFolder=0xe8f6, - SyncFolder=0xe8f7, - BlockContact=0xe8f8, - SwitchApps=0xe8f9, - AddFriend=0xe8fa, - Accept=0xe8fb, - GoToStart=0xe8fc, - BulletedList=0xe8fd, - Scan=0xe8fe, - Preview=0xe8ff, - Group=0xe902, - ZeroBars=0xe904, - OneBar=0xe905, - TwoBars=0xe906, - ThreeBars=0xe907, - FourBars=0xe908, - World=0xe909, - Comment=0xe90a, - MusicInfo=0xe90b, - DockLeft=0xe90c, - DockRight=0xe90d, - DockBottom=0xe90e, - Repair=0xe90f, - Accounts=0xe910, - DullSound=0xe911, - Manage=0xe912, - Street=0xe913, - Printer3D=0xe914, - RadioBullet=0xe915, - Stopwatch=0xe916, - Photo=0xe91b, - ActionCenter=0xe91c, - FullCircleMask=0xe91f, - ChromeMinimize=0xe921, - ChromeMaximize=0xe922, - ChromeRestore=0xe923, - Annotation=0xe924, - BackSpaceQWERTYSm=0xe925, - BackSpaceQWERTYMd=0xe926, - Swipe=0xe927, - Fingerprint=0xe928, - Handwriting=0xe929, - ChromeBackToWindow=0xe92c, - ChromeFullScreen=0xe92d, - KeyboardStandard=0xe92e, - KeyboardDismiss=0xe92f, - Completed=0xe930, - ChromeAnnotate=0xe931, - Label=0xe932, - IBeam=0xe933, - IBeamOutline=0xe934, - FlickDown=0xe935, - FlickUp=0xe936, - FlickLeft=0xe937, - FlickRight=0xe938, - FeedbackApp=0xe939, - MusicAlbum=0xe93c, - Streaming=0xe93e, - Code=0xe943, - ReturnToWindow=0xe944, - LightningBolt=0xe945, - Info=0xe946, - CalculatorMultiply=0xe947, - CalculatorAddition=0xe948, - CalculatorSubtract=0xe949, - CalculatorDivide=0xe94a, - CalculatorSquareroot=0xe94b, - CalculatorPercentage=0xe94c, - CalculatorNegate=0xe94d, - CalculatorEqualTo=0xe94e, - CalculatorBackspace=0xe94f, - Component=0xe950, - DMC=0xe951, - Dock=0xe952, - MultimediaDMS=0xe953, - MultimediaDVR=0xe954, - MultimediaPMP=0xe955, - PrintfaxPrinterFile=0xe956, - Sensor=0xe957, - StorageOptical=0xe958, - Communications=0xe95a, - Headset=0xe95b, - Projector=0xe95d, - Health=0xe95e, - Wire=0xe95f, - Webcam2=0xe960, - Input=0xe961, - Mouse=0xe962, - Smartcard=0xe963, - SmartcardVirtual=0xe964, - MediaStorageTower=0xe965, - ReturnKeySm=0xe966, - GameConsole=0xe967, - Network=0xe968, - StorageNetworkWireless=0xe969, - StorageTape=0xe96a, - ChevronUpSmall=0xe96d, - ChevronDownSmall=0xe96e, - ChevronLeftSmall=0xe96f, - ChevronRightSmall=0xe970, - ChevronUpMed=0xe971, - ChevronDownMed=0xe972, - ChevronLeftMed=0xe973, - ChevronRightMed=0xe974, - Devices2=0xe975, - ExpandTile=0xe976, - PC1=0xe977, - PresenceChicklet=0xe978, - PresenceChickletVideo=0xe979, - Reply=0xe97a, - SetTile=0xe97b, - Type=0xe97c, - Korean=0xe97d, - HalfAlpha=0xe97e, - FullAlpha=0xe97f, - Key12On=0xe980, - ChineseChangjie=0xe981, - QWERTYOn=0xe982, - QWERTYOff=0xe983, - ChineseQuick=0xe984, - Japanese=0xe985, - FullHiragana=0xe986, - FullKatakana=0xe987, - HalfKatakana=0xe988, - ChineseBoPoMoFo=0xe989, - ChinesePinyin=0xe98a, - ConstructionCone=0xe98f, - XboxOneConsole=0xe990, - Volume0=0xe992, - Volume1=0xe993, - Volume2=0xe994, - Volume3=0xe995, - BatteryUnknown=0xe996, - WifiAttentionOverlay=0xe998, - Robot=0xe99a, - TapAndSend=0xe9a1, - FitPage=0xe9a6, - PasswordKeyShow=0xe9a8, - PasswordKeyHide=0xe9a9, - BidiLtr=0xe9aa, - BidiRtl=0xe9ab, - ForwardSm=0xe9ac, - CommaKey=0xe9ad, - DashKey=0xe9ae, - DullSoundKey=0xe9af, - HalfDullSound=0xe9b0, - RightDoubleQuote=0xe9b1, - LeftDoubleQuote=0xe9b2, - PuncKeyRightBottom=0xe9b3, - PuncKey1=0xe9b4, - PuncKey2=0xe9b5, - PuncKey3=0xe9b6, - PuncKey4=0xe9b7, - PuncKey5=0xe9b8, - PuncKey6=0xe9b9, - PuncKey9=0xe9ba, - PuncKey7=0xe9bb, - PuncKey8=0xe9bc, - Frigid=0xe9ca, - Unknown=0xe9ce, - AreaChart=0xe9d2, - CheckList=0xe9d5, - Diagnostic=0xe9d9, - Equalizer=0xe9e9, - Process=0xe9f3, - Processing=0xe9f5, - ReportDocument=0xe9f9, - VideoSolid=0xea0c, - MixedMediaBadge=0xea0d, - DisconnectDisplay=0xea14, - Shield=0xea18, - Info2=0xea1f, - ActionCenterAsterisk=0xea21, - Beta=0xea24, - SaveCopy=0xea35, - List=0xea37, - Asterisk=0xea38, - ErrorBadge=0xea39, - CircleRing=0xea3a, - CircleFill=0xea3b, - MergeCall=0xea3c, - PrivateCall=0xea3d, - Record2=0xea3f, - AllAppsMirrored=0xea40, - BookmarksMirrored=0xea41, - BulletedListMirrored=0xea42, - CallForwardInternationalMirrored=0xea43, - CallForwardRoamingMirrored=0xea44, - ChromeBackMirrored=0xea47, - ClearSelectionMirrored=0xea48, - ClosePaneMirrored=0xea49, - ContactInfoMirrored=0xea4a, - DockRightMirrored=0xea4b, - DockLeftMirrored=0xea4c, - ExpandTileMirrored=0xea4e, - GoMirrored=0xea4f, - GripperResizeMirrored=0xea50, - HelpMirrored=0xea51, - ImportMirrored=0xea52, - ImportAllMirrored=0xea53, - LeaveChatMirrored=0xea54, - ListMirrored=0xea55, - MailForwardMirrored=0xea56, - MailReplyMirrored=0xea57, - MailReplyAllMirrored=0xea58, - OpenPaneMirrored=0xea5b, - OpenWithMirrored=0xea5c, - ParkingLocationMirrored=0xea5e, - ResizeMouseMediumMirrored=0xea5f, - ResizeMouseSmallMirrored=0xea60, - ResizeMouseTallMirrored=0xea61, - ResizeTouchNarrowerMirrored=0xea62, - SendMirrored=0xea63, - SendFillMirrored=0xea64, - ShowResultsMirrored=0xea65, - Media=0xea69, - SyncError=0xea6a, - Devices3=0xea6c, - SlowMotionOn=0xea79, - Lightbulb=0xea80, - StatusCircle=0xea81, - StatusTriangle=0xea82, - StatusError=0xea83, - StatusWarning=0xea84, - Puzzle=0xea86, - CalendarSolid=0xea89, - HomeSolid=0xea8a, - ParkingLocationSolid=0xea8b, - ContactSolid=0xea8c, - ConstructionSolid=0xea8d, - AccidentSolid=0xea8e, - Ringer=0xea8f, - PDF=0xea90, - ThoughtBubble=0xea91, - HeartBroken=0xea92, - BatteryCharging10=0xea93, - BatterySaver9=0xea94, - BatterySaver10=0xea95, - CallForwardingMirrored=0xea97, - MultiSelectMirrored=0xea98, - Broom=0xea99, - ForwardCall=0xeac2, - Trackers=0xeadf, - Market=0xeafc, - PieSingle=0xeb05, - StockUp=0xeb0f, - StockDown=0xeb11, - Design=0xeb3c, - Website=0xeb41, - Drop=0xeb42, - Radar=0xeb44, - BusSolid=0xeb47, - FerrySolid=0xeb48, - StartPointSolid=0xeb49, - StopPointSolid=0xeb4a, - EndPointSolid=0xeb4b, - AirplaneSolid=0xeb4c, - TrainSolid=0xeb4d, - WorkSolid=0xeb4e, - ReminderFill=0xeb4f, - Reminder=0xeb50, - Heart=0xeb51, - HeartFill=0xeb52, - EthernetError=0xeb55, - EthernetWarning=0xeb56, - StatusConnecting1=0xeb57, - StatusConnecting2=0xeb58, - StatusUnsecure=0xeb59, - WifiError0=0xeb5a, - WifiError1=0xeb5b, - WifiError2=0xeb5c, - WifiError3=0xeb5d, - WifiError4=0xeb5e, - WifiWarning0=0xeb5f, - WifiWarning1=0xeb60, - WifiWarning2=0xeb61, - WifiWarning3=0xeb62, - WifiWarning4=0xeb63, - Devices4=0xeb66, - NUIIris=0xeb67, - NUIFace=0xeb68, - GatewayRouter=0xeb77, - EditMirrored=0xeb7e, - NUIFPStartSlideHand=0xeb82, - NUIFPStartSlideAction=0xeb83, - NUIFPContinueSlideHand=0xeb84, - NUIFPContinueSlideAction=0xeb85, - NUIFPRollRightHand=0xeb86, - NUIFPRollRightHandAction=0xeb87, - NUIFPRollLeftHand=0xeb88, - NUIFPRollLeftAction=0xeb89, - NUIFPPressHand=0xeb8a, - NUIFPPressAction=0xeb8b, - NUIFPPressRepeatHand=0xeb8c, - NUIFPPressRepeatAction=0xeb8d, - StatusErrorFull=0xeb90, - TaskViewExpanded=0xeb91, - Certificate=0xeb95, - BackSpaceQWERTYLg=0xeb96, - ReturnKeyLg=0xeb97, - FastForward=0xeb9d, - Rewind=0xeb9e, - Photo2=0xeb9f, - MobBattery0=0xeba0, - MobBattery1=0xeba1, - MobBattery2=0xeba2, - MobBattery3=0xeba3, - MobBattery4=0xeba4, - MobBattery5=0xeba5, - MobBattery6=0xeba6, - MobBattery7=0xeba7, - MobBattery8=0xeba8, - MobBattery9=0xeba9, - MobBattery10=0xebaa, - MobBatteryCharging0=0xebab, - MobBatteryCharging1=0xebac, - MobBatteryCharging2=0xebad, - MobBatteryCharging3=0xebae, - MobBatteryCharging4=0xebaf, - MobBatteryCharging5=0xebb0, - MobBatteryCharging6=0xebb1, - MobBatteryCharging7=0xebb2, - MobBatteryCharging8=0xebb3, - MobBatteryCharging9=0xebb4, - MobBatteryCharging10=0xebb5, - MobBatterySaver0=0xebb6, - MobBatterySaver1=0xebb7, - MobBatterySaver2=0xebb8, - MobBatterySaver3=0xebb9, - MobBatterySaver4=0xebba, - MobBatterySaver5=0xebbb, - MobBatterySaver6=0xebbc, - MobBatterySaver7=0xebbd, - MobBatterySaver8=0xebbe, - MobBatterySaver9=0xebbf, - MobBatterySaver10=0xebc0, - DictionaryCloud=0xebc3, - ResetDrive=0xebc4, - VolumeBars=0xebc5, - Project=0xebc6, - AdjustHologram=0xebd2, - CloudDownload=0xebd3, - MobWifiCallBars=0xebd4, - MobWifiCall0=0xebd5, - MobWifiCall1=0xebd6, - MobWifiCall2=0xebd7, - MobWifiCall3=0xebd8, - MobWifiCall4=0xebd9, - Family=0xebda, - LockFeedback=0xebdb, - DeviceDiscovery=0xebde, - WindDirection=0xebe6, - RightArrowKeyTime0=0xebe7, - Bug=0xebe8, - TabletMode=0xebfc, - StatusCircleLeft=0xebfd, - StatusTriangleLeft=0xebfe, - StatusErrorLeft=0xebff, - StatusWarningLeft=0xec00, - MobBatteryUnknown=0xec02, - NetworkTower=0xec05, - CityNext=0xec06, - CityNext2=0xec07, - Courthouse=0xec08, - Groceries=0xec09, - Sustainable=0xec0a, - BuildingEnergy=0xec0b, - ToggleFilled=0xec11, - ToggleBorder=0xec12, - SliderThumb=0xec13, - ToggleThumb=0xec14, - MiracastLogoSmall=0xec15, - MiracastLogoLarge=0xec16, - PLAP=0xec19, - Badge=0xec1b, - SignalRoaming=0xec1e, - MobileLocked=0xec20, - InsiderHubApp=0xec24, - PersonalFolder=0xec25, - HomeGroup=0xec26, - MyNetwork=0xec27, - KeyboardFull=0xec31, - Cafe=0xec32, - MobSignal1=0xec37, - MobSignal2=0xec38, - MobSignal3=0xec39, - MobSignal4=0xec3a, - MobSignal5=0xec3b, - MobWifi1=0xec3c, - MobWifi2=0xec3d, - MobWifi3=0xec3e, - MobWifi4=0xec3f, - MobAirplane=0xec40, - MobBluetooth=0xec41, - MobActionCenter=0xec42, - MobLocation=0xec43, - MobWifiHotspot=0xec44, - LanguageJpn=0xec45, - MobQuietHours=0xec46, - MobDrivingMode=0xec47, - SpeedOff=0xec48, - SpeedMedium=0xec49, - SpeedHigh=0xec4a, - ThisPC=0xec4e, - MusicNote=0xec4f, - FileExplorer=0xec50, - FileExplorerApp=0xec51, - LeftArrowKeyTime0=0xec52, - MicOff=0xec54, - MicSleep=0xec55, - MicError=0xec56, - PlaybackRate1x=0xec57, - PlaybackRateOther=0xec58, - CashDrawer=0xec59, - BarcodeScanner=0xec5a, - ReceiptPrinter=0xec5b, - MagStripeReader=0xec5c, - CompletedSolid=0xec61, - CompanionApp=0xec64, - Favicon2=0xec6c, - SwipeRevealArt=0xec6d, - MicOn=0xec71, - MicClipping=0xec72, - TabletSelected=0xec74, - MobileSelected=0xec75, - LaptopSelected=0xec76, - TVMonitorSelected=0xec77, - DeveloperTools=0xec7a, - MobCallForwarding=0xec7e, - MobCallForwardingMirrored=0xec7f, - BodyCam=0xec80, - PoliceCar=0xec81, - Draw=0xec87, - DrawSolid=0xec88, - LowerBrightness=0xec8a, - ScrollUpDown=0xec8f, - DateTime=0xec92, - HoloLens=0xec94, - Tiles=0xeca5, - PartyLeader=0xeca7, - AppIconDefault=0xecaa, - Calories=0xecad, - POI=0xecaf, - BandBattery0=0xecb9, - BandBattery1=0xecba, - BandBattery2=0xecbb, - BandBattery3=0xecbc, - BandBattery4=0xecbd, - BandBattery5=0xecbe, - BandBattery6=0xecbf, - AddSurfaceHub=0xecc4, - DevUpdate=0xecc5, - Unit=0xecc6, - AddTo=0xecc8, - RemoveFrom=0xecc9, - RadioBtnOff=0xecca, - RadioBtnOn=0xeccb, - RadioBullet2=0xeccc, - ExploreContent=0xeccd, - Blocked2=0xece4, - ScrollMode=0xece7, - ZoomMode=0xece8, - PanMode=0xece9, - WiredUSB=0xecf0, - WirelessUSB=0xecf1, - USBSafeConnect=0xecf3, - ActionCenterNotificationMirrored=0xed0c, - ActionCenterMirrored=0xed0d, - SubscriptionAdd=0xed0e, - ResetDevice=0xed10, - SubscriptionAddMirrored=0xed11, - QRCode=0xed14, - Feedback=0xed15, - Hide=0xed1a, - Subtitles=0xed1e, - SubtitlesAudio=0xed1f, - OpenFolderHorizontal=0xed25, - CalendarMirrored=0xed28, - MobeSIM=0xed2a, - MobeSIMNoProfile=0xed2b, - MobeSIMLocked=0xed2c, - MobeSIMBusy=0xed2d, - SignalError=0xed2e, - StreamingEnterprise=0xed2f, - Headphone0=0xed30, - Headphone1=0xed31, - Headphone2=0xed32, - Headphone3=0xed33, - Apps=0xed35, - KeyboardBrightness=0xed39, - KeyboardLowerBrightness=0xed3a, - SkipBack10=0xed3c, - SkipForward30=0xed3d, - TreeFolderFolder=0xed41, - TreeFolderFolderFill=0xed42, - TreeFolderFolderOpen=0xed43, - TreeFolderFolderOpenFill=0xed44, - MultimediaDMP=0xed47, - KeyboardOneHanded=0xed4c, - Narrator=0xed4d, - EmojiTabPeople=0xed53, - EmojiTabSmilesAnimals=0xed54, - EmojiTabCelebrationObjects=0xed55, - EmojiTabFoodPlants=0xed56, - EmojiTabTransitPlaces=0xed57, - EmojiTabSymbols=0xed58, - EmojiTabTextSmiles=0xed59, - EmojiTabFavorites=0xed5a, - EmojiSwatch=0xed5b, - ConnectApp=0xed5c, - CompanionDeviceFramework=0xed5d, - Ruler=0xed5e, - FingerInking=0xed5f, - StrokeErase=0xed60, - PointErase=0xed61, - ClearAllInk=0xed62, - Pencil=0xed63, - Marker=0xed64, - InkingCaret=0xed65, - InkingColorOutline=0xed66, - InkingColorFill=0xed67, - HardDrive=0xeda2, - NetworkAdapter=0xeda3, - Touchscreen=0xeda4, - NetworkPrinter=0xeda5, - CloudPrinter=0xeda6, - KeyboardShortcut=0xeda7, - BrushSize=0xeda8, - NarratorForward=0xeda9, - NarratorForwardMirrored=0xedaa, - SyncBadge12=0xedab, - RingerBadge12=0xedac, - AsteriskBadge12=0xedad, - ErrorBadge12=0xedae, - CircleRingBadge12=0xedaf, - CircleFillBadge12=0xedb0, - ImportantBadge12=0xedb1, - MailBadge12=0xedb3, - PauseBadge12=0xedb4, - PlayBadge12=0xedb5, - PenWorkspace=0xedc6, - CaretLeft8=0xedd5, - CaretRight8=0xedd6, - CaretUp8=0xedd7, - CaretDown8=0xedd8, - CaretLeftSolid8=0xedd9, - CaretRightSolid8=0xedda, - CaretUpSolid8=0xeddb, - CaretDownSolid8=0xeddc, - Strikethrough=0xede0, - Export=0xede1, - ExportMirrored=0xede2, - ButtonMenu=0xede3, - CloudSearch=0xede4, - PinyinIMELogo=0xede5, - CalligraphyPen=0xedfb, - ReplyMirrored=0xee35, - LockscreenDesktop=0xee3f, - TaskViewSettings=0xee40, - MiniExpand2Mirrored=0xee47, - MiniContract2Mirrored=0xee49, - Play36=0xee4a, - PenPalette=0xee56, - GuestUser=0xee57, - SettingsBattery=0xee63, - TaskbarPhone=0xee64, - LockScreenGlance=0xee65, - GenericScan=0xee6f, - ImageExport=0xee71, - WifiEthernet=0xee77, - ActionCenterQuiet=0xee79, - ActionCenterQuietNotification=0xee7a, - TrackersMirrored=0xee92, - DateTimeMirrored=0xee93, - Wheel=0xee94, - VirtualMachineGroup=0xeea3, - ButtonView2=0xeeca, - PenWorkspaceMirrored=0xef15, - PenPaletteMirrored=0xef16, - StrokeEraseMirrored=0xef17, - PointEraseMirrored=0xef18, - ClearAllInkMirrored=0xef19, - BackgroundToggle=0xef1f, - Marquee=0xef20, - ChromeCloseContrast=0xef2c, - ChromeMinimizeContrast=0xef2d, - ChromeMaximizeContrast=0xef2e, - ChromeRestoreContrast=0xef2f, - TrafficLight=0xef31, - Replay=0xef3b, - Eyedropper=0xef3c, - LineDisplay=0xef3d, - PINPad=0xef3e, - SignatureCapture=0xef3f, - ChipCardCreditCardReader=0xef40, - MarketDown=0xef42, - PlayerSettings=0xef58, - LandscapeOrientation=0xef6b, - Flow=0xef90, - Touchpad=0xefa5, - Speech=0xefa9, - KnowledgeArticle=0xf000, - Relationship=0xf003, - ZipFolder=0xf012, - DefaultAPN=0xf080, - UserAPN=0xf081, - DoublePinyin=0xf085, - BlueLight=0xf08c, - CaretSolidLeft=0xf08d, - CaretSolidDown=0xf08e, - CaretSolidRight=0xf08f, - CaretSolidUp=0xf090, - ButtonA=0xf093, - ButtonB=0xf094, - ButtonY=0xf095, - ButtonX=0xf096, - ArrowUp8=0xf0ad, - ArrowDown8=0xf0ae, - ArrowRight8=0xf0af, - ArrowLeft8=0xf0b0, - QuarentinedItems=0xf0b2, - QuarentinedItemsMirrored=0xf0b3, - Protractor=0xf0b4, - ChecklistMirrored=0xf0b5, - StatusCircle7=0xf0b6, - StatusCheckmark7=0xf0b7, - StatusErrorCircle7=0xf0b8, - Connected=0xf0b9, - PencilFill=0xf0c6, - CalligraphyFill=0xf0c7, - QuarterStarLeft=0xf0ca, - QuarterStarRight=0xf0cb, - ThreeQuarterStarLeft=0xf0cc, - ThreeQuarterStarRight=0xf0cd, - QuietHoursBadge12=0xf0ce, - BackMirrored=0xf0d2, - ForwardMirrored=0xf0d3, - ChromeBackContrast=0xf0d5, - ChromeBackContrastMirrored=0xf0d6, - ChromeBackToWindowContrast=0xf0d7, - ChromeFullScreenContrast=0xf0d8, - GridView=0xf0e2, - ClipboardList=0xf0e3, - ClipboardListMirrored=0xf0e4, - OutlineQuarterStarLeft=0xf0e5, - OutlineQuarterStarRight=0xf0e6, - OutlineHalfStarLeft=0xf0e7, - OutlineHalfStarRight=0xf0e8, - OutlineThreeQuarterStarLeft=0xf0e9, - OutlineThreeQuarterStarRight=0xf0ea, - SpatialVolume0=0xf0eb, - SpatialVolume1=0xf0ec, - SpatialVolume2=0xf0ed, - SpatialVolume3=0xf0ee, - ApplicationGuard=0xf0ef, - OutlineStarLeftHalf=0xf0f7, - OutlineStarRightHalf=0xf0f8, - ChromeAnnotateContrast=0xf0f9, - DefenderBadge12=0xf0fb, - DetachablePC=0xf103, - LeftStick=0xf108, - RightStick=0xf109, - TriggerLeft=0xf10a, - TriggerRight=0xf10b, - BumperLeft=0xf10c, - BumperRight=0xf10d, - Dpad=0xf10e, - EnglishPunctuation=0xf110, - ChinesePunctuation=0xf111, - HMD=0xf119, - CtrlSpatialRight=0xf11b, - PaginationDotOutline10=0xf126, - PaginationDotSolid10=0xf127, - StrokeErase2=0xf128, - SmallErase=0xf129, - LargeErase=0xf12a, - FolderHorizontal=0xf12b, - MicrophoneListening=0xf12e, - StatusExclamationCircle7=0xf12f, - Video360=0xf131, - GiftboxOpen=0xf133, - StatusCircleOuter=0xf136, - StatusCircleInner=0xf137, - StatusCircleRing=0xf138, - StatusTriangleOuter=0xf139, - StatusTriangleInner=0xf13a, - StatusTriangleExclamation=0xf13b, - StatusCircleExclamation=0xf13c, - StatusCircleErrorX=0xf13d, - StatusCircleCheckmark=0xf13e, - StatusCircleInfo=0xf13f, - StatusCircleBlock=0xf140, - StatusCircleBlock2=0xf141, - StatusCircleQuestionMark=0xf142, - StatusCircleSync=0xf143, - Dial1=0xf146, - Dial2=0xf147, - Dial3=0xf148, - Dial4=0xf149, - Dial5=0xf14a, - Dial6=0xf14b, - Dial7=0xf14c, - Dial8=0xf14d, - Dial9=0xf14e, - Dial10=0xf14f, - Dial11=0xf150, - Dial12=0xf151, - Dial13=0xf152, - Dial14=0xf153, - Dial15=0xf154, - Dial16=0xf155, - DialShape1=0xf156, - DialShape2=0xf157, - DialShape3=0xf158, - DialShape4=0xf159, - ClosedCaptionsInternational=0xf15f, - TollSolid=0xf161, - TrafficCongestionSolid=0xf163, - ExploreContentSingle=0xf164, - CollapseContent=0xf165, - CollapseContentSingle=0xf166, - InfoSolid=0xf167, - GroupList=0xf168, - CaretBottomRightSolidCenter8=0xf169, - ProgressRingDots=0xf16a, - Checkbox14=0xf16b, - CheckboxComposite14=0xf16c, - CheckboxIndeterminateCombo14=0xf16d, - CheckboxIndeterminateCombo=0xf16e, - StatusPause7=0xf175, - CharacterAppearance=0xf17f, - Lexicon=0xf180, - ScreenTime=0xf182, - HeadlessDevice=0xf191, - NetworkSharing=0xf193, - EyeGaze=0xf19d, - ToggleLeft=0xf19e, - ToggleRight=0xf19f, - WindowsInsider=0xf1ad, - ChromeSwitch=0xf1cb, - ChromeSwitchContast=0xf1cc, - StatusCheckmark=0xf1d8, - StatusCheckmarkLeft=0xf1d9, - KeyboardLeftAligned=0xf20c, - KeyboardRightAligned=0xf20d, - KeyboardSettings=0xf210, - NetworkPhysical=0xf211, - IOT=0xf22c, - UnknownMirrored=0xf22e, - ViewDashboard=0xf246, - ExploitProtectionSettings=0xf259, - KeyboardNarrow=0xf260, - Keyboard12Key=0xf261, - KeyboardDock=0xf26b, - KeyboardUndock=0xf26c, - KeyboardLeftDock=0xf26d, - KeyboardRightDock=0xf26e, - Ear=0xf270, - PointerHand=0xf271, - Bullseye=0xf272, - DocumentApproval=0xf28b, - LocaleLanguage=0xf2b7, - PassiveAuthentication=0xf32a, - ColorSolid=0xf354, - NetworkOffline=0xf384, - NetworkConnected=0xf385, - NetworkConnectedCheckmark=0xf386, - SignOut=0xf3b1, - StatusInfo=0xf3cc, - StatusInfoLeft=0xf3cd, - NearbySharing=0xf3e2, - CtrlSpatialLeft=0xf3e7, - InteractiveDashboard=0xf404, - DeclineCall=0xf405, - ClippingTool=0xf406, - RectangularClipping=0xf407, - FreeFormClipping=0xf408, - CopyTo=0xf413, - IDBadge=0xf427, - DynamicLock=0xf439, - PenTips=0xf45e, - PenTipsMirrored=0xf45f, - HWPJoin=0xf460, - HWPInsert=0xf461, - HWPStrikeThrough=0xf462, - HWPScratchOut=0xf463, - HWPSplit=0xf464, - HWPNewLine=0xf465, - HWPOverwrite=0xf466, - MobWifiWarning1=0xf473, - MobWifiWarning2=0xf474, - MobWifiWarning3=0xf475, - MobWifiWarning4=0xf476, - MicLocationCombo=0xf47f, - Globe2=0xf49a, - SpecialEffectSize=0xf4a5, - GIF=0xf4a9, - Sticker2=0xf4aa, - SurfaceHubSelected=0xf4be, - HoloLensSelected=0xf4bf, - Earbud=0xf4c0, - MixVolumes=0xf4c3, - Safe=0xf540, - LaptopSecure=0xf552, - PrintDefault=0xf56d, - PageMirrored=0xf56e, - LandscapeOrientationMirrored=0xf56f, - ColorOff=0xf570, - PrintAllPages=0xf571, - PrintCustomRange=0xf572, - PageMarginPortraitNarrow=0xf573, - PageMarginPortraitNormal=0xf574, - PageMarginPortraitModerate=0xf575, - PageMarginPortraitWide=0xf576, - PageMarginLandscapeNarrow=0xf577, - PageMarginLandscapeNormal=0xf578, - PageMarginLandscapeModerate=0xf579, - PageMarginLandscapeWide=0xf57a, - CollateLandscape=0xf57b, - CollatePortrait=0xf57c, - CollatePortraitSeparated=0xf57d, - DuplexLandscapeOneSided=0xf57e, - DuplexLandscapeOneSidedMirrored=0xf57f, - DuplexLandscapeTwoSidedLongEdge=0xf580, - DuplexLandscapeTwoSidedLongEdgeMirrored=0xf581, - DuplexLandscapeTwoSidedShortEdge=0xf582, - DuplexLandscapeTwoSidedShortEdgeMirrored=0xf583, - DuplexPortraitOneSided=0xf584, - DuplexPortraitOneSidedMirrored=0xf585, - DuplexPortraitTwoSidedLongEdge=0xf586, - DuplexPortraitTwoSidedLongEdgeMirrored=0xf587, - DuplexPortraitTwoSidedShortEdge=0xf588, - DuplexPortraitTwoSidedShortEdgeMirrored=0xf589, - PPSOneLandscape=0xf58a, - PPSTwoLandscape=0xf58b, - PPSTwoPortrait=0xf58c, - PPSFourLandscape=0xf58d, - PPSFourPortrait=0xf58e, - HolePunchOff=0xf58f, - HolePunchPortraitLeft=0xf590, - HolePunchPortraitRight=0xf591, - HolePunchPortraitTop=0xf592, - HolePunchPortraitBottom=0xf593, - HolePunchLandscapeLeft=0xf594, - HolePunchLandscapeRight=0xf595, - HolePunchLandscapeTop=0xf596, - HolePunchLandscapeBottom=0xf597, - StaplingOff=0xf598, - StaplingPortraitTopLeft=0xf599, - StaplingPortraitTopRight=0xf59a, - StaplingPortraitBottomRight=0xf59b, - StaplingPortraitTwoLeft=0xf59c, - StaplingPortraitTwoRight=0xf59d, - StaplingPortraitTwoTop=0xf59e, - StaplingPortraitTwoBottom=0xf59f, - StaplingPortraitBookBinding=0xf5a0, - StaplingLandscapeTopLeft=0xf5a1, - StaplingLandscapeTopRight=0xf5a2, - StaplingLandscapeBottomLeft=0xf5a3, - StaplingLandscapeBottomRight=0xf5a4, - StaplingLandscapeTwoLeft=0xf5a5, - StaplingLandscapeTwoRight=0xf5a6, - StaplingLandscapeTwoTop=0xf5a7, - StaplingLandscapeTwoBottom=0xf5a8, - StaplingLandscapeBookBinding=0xf5a9, - StatusDataTransferRoaming=0xf5aa, - MobSIMError=0xf5ab, - CollateLandscapeSeparated=0xf5ac, - PPSOnePortrait=0xf5ad, - StaplingPortraitBottomLeft=0xf5ae, - PlaySolid=0xf5b0, - RepeatOff=0xf5e7, - Set=0xf5ed, - SetSolid=0xf5ee, - FuzzyReading=0xf5ef, - VerticalBattery0=0xf5f2, - VerticalBattery1=0xf5f3, - VerticalBattery2=0xf5f4, - VerticalBattery3=0xf5f5, - VerticalBattery4=0xf5f6, - VerticalBattery5=0xf5f7, - VerticalBattery6=0xf5f8, - VerticalBattery7=0xf5f9, - VerticalBattery8=0xf5fa, - VerticalBattery9=0xf5fb, - VerticalBattery10=0xf5fc, - VerticalBatteryCharging0=0xf5fd, - VerticalBatteryCharging1=0xf5fe, - VerticalBatteryCharging2=0xf5ff, - VerticalBatteryCharging3=0xf600, - VerticalBatteryCharging4=0xf601, - VerticalBatteryCharging5=0xf602, - VerticalBatteryCharging6=0xf603, - VerticalBatteryCharging7=0xf604, - VerticalBatteryCharging8=0xf605, - VerticalBatteryCharging9=0xf606, - VerticalBatteryCharging10=0xf607, - VerticalBatteryUnknown=0xf608, - SIMError=0xf618, - SIMMissing=0xf619, - SIMLock=0xf61a, - eSIM=0xf61b, - eSIMNoProfile=0xf61c, - eSIMLocked=0xf61d, - eSIMBusy=0xf61e, - NoiseCancelation=0xf61f, - NoiseCancelationOff=0xf620, - MusicSharing=0xf623, - MusicSharingOff=0xf624, - CircleShapeSolid=0xf63c, - WifiCallBars=0xf657, - WifiCall0=0xf658, - WifiCall1=0xf659, - WifiCall2=0xf65a, - WifiCall3=0xf65b, - WifiCall4=0xf65c, - CHTLanguageBar=0xf69e, - ComposeMode=0xf6a9, - ExpressiveInputEntry=0xf6b8, - EmojiTabMoreSymbols=0xf6ba, - WebSearch=0xf6fa, - Kiosk=0xf712, - RTTLogo=0xf714, - VoiceCall=0xf715, - GoToMessage=0xf716, - ReturnToCall=0xf71a, - StartPresenting=0xf71c, - StopPresenting=0xf71d, - ProductivityMode=0xf71e, - SetHistoryStatus=0xf738, - SetHistoryStatus2=0xf739, - Keyboardsettings20=0xf73d, - OneHandedRight20=0xf73e, - OneHandedLeft20=0xf73f, - Split20=0xf740, - Full20=0xf741, - Handwriting20=0xf742, - ChevronLeft20=0xf743, - ChevronLeft32=0xf744, - ChevronRight20=0xf745, - ChevronRight32=0xf746, - Event12=0xf763, - MicOff2=0xf781, - DeliveryOptimization=0xf785, - CancelMedium=0xf78a, - SearchMedium=0xf78b, - AcceptMedium=0xf78c, - RevealPasswordMedium=0xf78d, - DeleteWord=0xf7ad, - DeleteWordFill=0xf7ae, - DeleteLines=0xf7af, - DeleteLinesFill=0xf7b0, - InstertWords=0xf7b1, - InstertWordsFill=0xf7b2, - JoinWords=0xf7b3, - JoinWordsFill=0xf7b4, - OverwriteWords=0xf7b5, - OverwriteWordsFill=0xf7b6, - AddNewLine=0xf7b7, - AddNewLineFill=0xf7b8, - OverwriteWordsKorean=0xf7b9, - OverwriteWordsFillKorean=0xf7ba, - EducationIcon=0xf7bb, - WindowSnipping=0xf7ed, - VideoCapture=0xf7ee, - StatusSecured=0xf809, - NarratorApp=0xf83b, - PowerButtonUpdate=0xf83d, - RestartUpdate=0xf83e, - UpdateStatusDot=0xf83f, - Eject=0xf847, - Spelling=0xf87b, - SpellingKorean=0xf87c, - SpellingSerbian=0xf87d, - SpellingChinese=0xf87e, - FolderSelect=0xf89a, - SmartScreen=0xf8a5, - ExploitProtection=0xf8a6, - AddBold=0xf8aa, - SubtractBold=0xf8ab, - BackSolidBold=0xf8ac, - ForwardSolidBold=0xf8ad, - PauseBold=0xf8ae, - ClickSolid=0xf8af, - SettingsSolid=0xf8b0, - MicrophoneSolidBold=0xf8b1, - SpeechSolidBold=0xf8b2, - ClickedOutLoudSolidBold=0xf8b3, -}; -Q_ENUM_NS(Fluent_AwesomeType) -QML_NAMED_ELEMENT(FluentIcons) -} + Q_NAMESPACE + enum class Fluent_AwesomeType { + GlobalNavButton = 0xe700, + Wifi = 0xe701, + Bluetooth = 0xe702, + Connect = 0xe703, + InternetSharing = 0xe704, + VPN = 0xe705, + Brightness = 0xe706, + MapPin = 0xe707, + QuietHours = 0xe708, + Airplane = 0xe709, + Tablet = 0xe70a, + QuickNote = 0xe70b, + RememberedDevice = 0xe70c, + ChevronDown = 0xe70d, + ChevronUp = 0xe70e, + Edit = 0xe70f, + Add = 0xe710, + Cancel = 0xe711, + More = 0xe712, + Settings = 0xe713, + Video = 0xe714, + Mail = 0xe715, + People = 0xe716, + Phone = 0xe717, + Pin = 0xe718, + Shop = 0xe719, + Stop = 0xe71a, + Link = 0xe71b, + Filter = 0xe71c, + AllApps = 0xe71d, + Zoom = 0xe71e, + ZoomOut = 0xe71f, + Microphone = 0xe720, + Search = 0xe721, + Camera = 0xe722, + Attach = 0xe723, + Send = 0xe724, + SendFill = 0xe725, + WalkSolid = 0xe726, + InPrivate = 0xe727, + FavoriteList = 0xe728, + PageSolid = 0xe729, + Forward = 0xe72a, + Back = 0xe72b, + Refresh = 0xe72c, + Share = 0xe72d, + Lock = 0xe72e, + ReportHacked = 0xe730, + EMI = 0xe731, + FavoriteStar = 0xe734, + FavoriteStarFill = 0xe735, + ReadingMode = 0xe736, + Favicon = 0xe737, + Remove = 0xe738, + Checkbox = 0xe739, + CheckboxComposite = 0xe73a, + CheckboxFill = 0xe73b, + CheckboxIndeterminate = 0xe73c, + CheckboxCompositeReversed = 0xe73d, + CheckMark = 0xe73e, + BackToWindow = 0xe73f, + FullScreen = 0xe740, + ResizeTouchLarger = 0xe741, + ResizeTouchSmaller = 0xe742, + ResizeMouseSmall = 0xe743, + ResizeMouseMedium = 0xe744, + ResizeMouseWide = 0xe745, + ResizeMouseTall = 0xe746, + ResizeMouseLarge = 0xe747, + SwitchUser = 0xe748, + Print = 0xe749, + Up = 0xe74a, + Down = 0xe74b, + OEM = 0xe74c, + Delete = 0xe74d, + Save = 0xe74e, + Mute = 0xe74f, + BackSpaceQWERTY = 0xe750, + ReturnKey = 0xe751, + UpArrowShiftKey = 0xe752, + Cloud = 0xe753, + Flashlight = 0xe754, + RotationLock = 0xe755, + CommandPrompt = 0xe756, + SIPMove = 0xe759, + SIPUndock = 0xe75a, + SIPRedock = 0xe75b, + EraseTool = 0xe75c, + UnderscoreSpace = 0xe75d, + GripperTool = 0xe75e, + Dialpad = 0xe75f, + PageLeft = 0xe760, + PageRight = 0xe761, + MultiSelect = 0xe762, + KeyboardLeftHanded = 0xe763, + KeyboardRightHanded = 0xe764, + KeyboardClassic = 0xe765, + KeyboardSplit = 0xe766, + Volume = 0xe767, + Play = 0xe768, + Pause = 0xe769, + ChevronLeft = 0xe76b, + ChevronRight = 0xe76c, + InkingTool = 0xe76d, + Emoji2 = 0xe76e, + GripperBarHorizontal = 0xe76f, + System = 0xe770, + Personalize = 0xe771, + Devices = 0xe772, + SearchAndApps = 0xe773, + Globe = 0xe774, + TimeLanguage = 0xe775, + EaseOfAccess = 0xe776, + UpdateRestore = 0xe777, + HangUp = 0xe778, + ContactInfo = 0xe779, + Unpin = 0xe77a, + Contact = 0xe77b, + Memo = 0xe77c, + IncomingCall = 0xe77e, + Paste = 0xe77f, + PhoneBook = 0xe780, + LEDLight = 0xe781, + Error = 0xe783, + GripperBarVertical = 0xe784, + Unlock = 0xe785, + Slideshow = 0xe786, + Calendar = 0xe787, + GripperResize = 0xe788, + Megaphone = 0xe789, + Trim = 0xe78a, + NewWindow = 0xe78b, + SaveLocal = 0xe78c, + Color = 0xe790, + DataSense = 0xe791, + SaveAs = 0xe792, + Light = 0xe793, + AspectRatio = 0xe799, + DataSenseBar = 0xe7a5, + Redo = 0xe7a6, + Undo = 0xe7a7, + Crop = 0xe7a8, + OpenWith = 0xe7ac, + Rotate = 0xe7ad, + RedEye = 0xe7b3, + SetlockScreen = 0xe7b5, + MapPin2 = 0xe7b7, + Package = 0xe7b8, + Warning = 0xe7ba, + ReadingList = 0xe7bc, + Education = 0xe7be, + ShoppingCart = 0xe7bf, + Train = 0xe7c0, + Flag = 0xe7c1, + Move = 0xe7c2, + Page = 0xe7c3, + TaskView = 0xe7c4, + BrowsePhotos = 0xe7c5, + HalfStarLeft = 0xe7c6, + HalfStarRight = 0xe7c7, + Record = 0xe7c8, + TouchPointer = 0xe7c9, + LangJPN = 0xe7de, + Ferry = 0xe7e3, + Highlight = 0xe7e6, + ActionCenterNotification = 0xe7e7, + PowerButton = 0xe7e8, + ResizeTouchNarrower = 0xe7ea, + ResizeTouchShorter = 0xe7eb, + DrivingMode = 0xe7ec, + RingerSilent = 0xe7ed, + OtherUser = 0xe7ee, + Admin = 0xe7ef, + CC = 0xe7f0, + SDCard = 0xe7f1, + CallForwarding = 0xe7f2, + SettingsDisplaySound = 0xe7f3, + TVMonitor = 0xe7f4, + Speakers = 0xe7f5, + Headphone = 0xe7f6, + DeviceLaptopPic = 0xe7f7, + DeviceLaptopNoPic = 0xe7f8, + DeviceMonitorRightPic = 0xe7f9, + DeviceMonitorLeftPic = 0xe7fa, + DeviceMonitorNoPic = 0xe7fb, + Game = 0xe7fc, + HorizontalTabKey = 0xe7fd, + StreetsideSplitMinimize = 0xe802, + StreetsideSplitExpand = 0xe803, + Car = 0xe804, + Walk = 0xe805, + Bus = 0xe806, + TiltUp = 0xe809, + TiltDown = 0xe80a, + CallControl = 0xe80b, + RotateMapRight = 0xe80c, + RotateMapLeft = 0xe80d, + Home = 0xe80f, + ParkingLocation = 0xe811, + MapCompassTop = 0xe812, + MapCompassBottom = 0xe813, + IncidentTriangle = 0xe814, + Touch = 0xe815, + MapDirections = 0xe816, + StartPoint = 0xe819, + StopPoint = 0xe81a, + EndPoint = 0xe81b, + History = 0xe81c, + Location = 0xe81d, + MapLayers = 0xe81e, + Accident = 0xe81f, + Work = 0xe821, + Construction = 0xe822, + Recent = 0xe823, + Bank = 0xe825, + DownloadMap = 0xe826, + InkingToolFill2 = 0xe829, + HighlightFill2 = 0xe82a, + EraseToolFill = 0xe82b, + EraseToolFill2 = 0xe82c, + Dictionary = 0xe82d, + DictionaryAdd = 0xe82e, + ToolTip = 0xe82f, + ChromeBack = 0xe830, + ProvisioningPackage = 0xe835, + AddRemoteDevice = 0xe836, + FolderOpen = 0xe838, + Ethernet = 0xe839, + ShareBroadband = 0xe83a, + DirectAccess = 0xe83b, + DialUp = 0xe83c, + DefenderApp = 0xe83d, + BatteryCharging9 = 0xe83e, + Battery10 = 0xe83f, + Pinned = 0xe840, + PinFill = 0xe841, + PinnedFill = 0xe842, + PeriodKey = 0xe843, + PuncKey = 0xe844, + RevToggleKey = 0xe845, + RightArrowKeyTime1 = 0xe846, + RightArrowKeyTime2 = 0xe847, + LeftQuote = 0xe848, + RightQuote = 0xe849, + DownShiftKey = 0xe84a, + UpShiftKey = 0xe84b, + PuncKey0 = 0xe84c, + PuncKeyLeftBottom = 0xe84d, + RightArrowKeyTime3 = 0xe84e, + RightArrowKeyTime4 = 0xe84f, + Battery0 = 0xe850, + Battery1 = 0xe851, + Battery2 = 0xe852, + Battery3 = 0xe853, + Battery4 = 0xe854, + Battery5 = 0xe855, + Battery6 = 0xe856, + Battery7 = 0xe857, + Battery8 = 0xe858, + Battery9 = 0xe859, + BatteryCharging0 = 0xe85a, + BatteryCharging1 = 0xe85b, + BatteryCharging2 = 0xe85c, + BatteryCharging3 = 0xe85d, + BatteryCharging4 = 0xe85e, + BatteryCharging5 = 0xe85f, + BatteryCharging6 = 0xe860, + BatteryCharging7 = 0xe861, + BatteryCharging8 = 0xe862, + BatterySaver0 = 0xe863, + BatterySaver1 = 0xe864, + BatterySaver2 = 0xe865, + BatterySaver3 = 0xe866, + BatterySaver4 = 0xe867, + BatterySaver5 = 0xe868, + BatterySaver6 = 0xe869, + BatterySaver7 = 0xe86a, + BatterySaver8 = 0xe86b, + SignalBars1 = 0xe86c, + SignalBars2 = 0xe86d, + SignalBars3 = 0xe86e, + SignalBars4 = 0xe86f, + SignalBars5 = 0xe870, + SignalNotConnected = 0xe871, + Wifi1 = 0xe872, + Wifi2 = 0xe873, + Wifi3 = 0xe874, + MobSIMLock = 0xe875, + MobSIMMissing = 0xe876, + Vibrate = 0xe877, + RoamingInternational = 0xe878, + RoamingDomestic = 0xe879, + CallForwardInternational = 0xe87a, + CallForwardRoaming = 0xe87b, + JpnRomanji = 0xe87c, + JpnRomanjiLock = 0xe87d, + JpnRomanjiShift = 0xe87e, + JpnRomanjiShiftLock = 0xe87f, + StatusDataTransfer = 0xe880, + StatusDataTransferVPN = 0xe881, + StatusDualSIM2 = 0xe882, + StatusDualSIM2VPN = 0xe883, + StatusDualSIM1 = 0xe884, + StatusDualSIM1VPN = 0xe885, + StatusSGLTE = 0xe886, + StatusSGLTECell = 0xe887, + StatusSGLTEDataVPN = 0xe888, + StatusVPN = 0xe889, + WifiHotspot = 0xe88a, + LanguageKor = 0xe88b, + LanguageCht = 0xe88c, + LanguageChs = 0xe88d, + USB = 0xe88e, + InkingToolFill = 0xe88f, + View = 0xe890, + HighlightFill = 0xe891, + Previous = 0xe892, + Next = 0xe893, + Clear = 0xe894, + Sync = 0xe895, + Download = 0xe896, + Help = 0xe897, + Upload = 0xe898, + Emoji = 0xe899, + TwoPage = 0xe89a, + LeaveChat = 0xe89b, + MailForward = 0xe89c, + RotateCamera = 0xe89e, + ClosePane = 0xe89f, + OpenPane = 0xe8a0, + PreviewLink = 0xe8a1, + AttachCamera = 0xe8a2, + ZoomIn = 0xe8a3, + Bookmarks = 0xe8a4, + Document = 0xe8a5, + ProtectedDocument = 0xe8a6, + OpenInNewWindow = 0xe8a7, + MailFill = 0xe8a8, + ViewAll = 0xe8a9, + VideoChat = 0xe8aa, + Switch = 0xe8ab, + Rename = 0xe8ac, + Go = 0xe8ad, + SurfaceHub = 0xe8ae, + Remote = 0xe8af, + Click = 0xe8b0, + Shuffle = 0xe8b1, + Movies = 0xe8b2, + SelectAll = 0xe8b3, + Orientation = 0xe8b4, + Import = 0xe8b5, + ImportAll = 0xe8b6, + Folder = 0xe8b7, + Webcam = 0xe8b8, + Picture = 0xe8b9, + Caption = 0xe8ba, + ChromeClose = 0xe8bb, + ShowResults = 0xe8bc, + Message = 0xe8bd, + Leaf = 0xe8be, + CalendarDay = 0xe8bf, + CalendarWeek = 0xe8c0, + Characters = 0xe8c1, + MailReplyAll = 0xe8c2, + Read = 0xe8c3, + ShowBcc = 0xe8c4, + HideBcc = 0xe8c5, + Cut = 0xe8c6, + PaymentCard = 0xe8c7, + Copy = 0xe8c8, + Important = 0xe8c9, + MailReply = 0xe8ca, + Sort = 0xe8cb, + MobileTablet = 0xe8cc, + DisconnectDrive = 0xe8cd, + MapDrive = 0xe8ce, + ContactPresence = 0xe8cf, + Priority = 0xe8d0, + GotoToday = 0xe8d1, + Font = 0xe8d2, + FontColor = 0xe8d3, + Contact2 = 0xe8d4, + FolderFill = 0xe8d5, + Audio = 0xe8d6, + Permissions = 0xe8d7, + DisableUpdates = 0xe8d8, + Unfavorite = 0xe8d9, + OpenLocal = 0xe8da, + Italic = 0xe8db, + Underline = 0xe8dc, + Bold = 0xe8dd, + MoveToFolder = 0xe8de, + LikeDislike = 0xe8df, + Dislike = 0xe8e0, + Like = 0xe8e1, + AlignRight = 0xe8e2, + AlignCenter = 0xe8e3, + AlignLeft = 0xe8e4, + OpenFile = 0xe8e5, + ClearSelection = 0xe8e6, + FontDecrease = 0xe8e7, + FontIncrease = 0xe8e8, + FontSize = 0xe8e9, + CellPhone = 0xe8ea, + Reshare = 0xe8eb, + Tag = 0xe8ec, + RepeatOne = 0xe8ed, + RepeatAll = 0xe8ee, + Calculator = 0xe8ef, + Directions = 0xe8f0, + Library = 0xe8f1, + ChatBubbles = 0xe8f2, + PostUpdate = 0xe8f3, + NewFolder = 0xe8f4, + CalendarReply = 0xe8f5, + UnsyncFolder = 0xe8f6, + SyncFolder = 0xe8f7, + BlockContact = 0xe8f8, + SwitchApps = 0xe8f9, + AddFriend = 0xe8fa, + Accept = 0xe8fb, + GoToStart = 0xe8fc, + BulletedList = 0xe8fd, + Scan = 0xe8fe, + Preview = 0xe8ff, + Group = 0xe902, + ZeroBars = 0xe904, + OneBar = 0xe905, + TwoBars = 0xe906, + ThreeBars = 0xe907, + FourBars = 0xe908, + World = 0xe909, + Comment = 0xe90a, + MusicInfo = 0xe90b, + DockLeft = 0xe90c, + DockRight = 0xe90d, + DockBottom = 0xe90e, + Repair = 0xe90f, + Accounts = 0xe910, + DullSound = 0xe911, + Manage = 0xe912, + Street = 0xe913, + Printer3D = 0xe914, + RadioBullet = 0xe915, + Stopwatch = 0xe916, + Photo = 0xe91b, + ActionCenter = 0xe91c, + FullCircleMask = 0xe91f, + ChromeMinimize = 0xe921, + ChromeMaximize = 0xe922, + ChromeRestore = 0xe923, + Annotation = 0xe924, + BackSpaceQWERTYSm = 0xe925, + BackSpaceQWERTYMd = 0xe926, + Swipe = 0xe927, + Fingerprint = 0xe928, + Handwriting = 0xe929, + ChromeBackToWindow = 0xe92c, + ChromeFullScreen = 0xe92d, + KeyboardStandard = 0xe92e, + KeyboardDismiss = 0xe92f, + Completed = 0xe930, + ChromeAnnotate = 0xe931, + Label = 0xe932, + IBeam = 0xe933, + IBeamOutline = 0xe934, + FlickDown = 0xe935, + FlickUp = 0xe936, + FlickLeft = 0xe937, + FlickRight = 0xe938, + FeedbackApp = 0xe939, + MusicAlbum = 0xe93c, + Streaming = 0xe93e, + Code = 0xe943, + ReturnToWindow = 0xe944, + LightningBolt = 0xe945, + Info = 0xe946, + CalculatorMultiply = 0xe947, + CalculatorAddition = 0xe948, + CalculatorSubtract = 0xe949, + CalculatorDivide = 0xe94a, + CalculatorSquareroot = 0xe94b, + CalculatorPercentage = 0xe94c, + CalculatorNegate = 0xe94d, + CalculatorEqualTo = 0xe94e, + CalculatorBackspace = 0xe94f, + Component = 0xe950, + DMC = 0xe951, + Dock = 0xe952, + MultimediaDMS = 0xe953, + MultimediaDVR = 0xe954, + MultimediaPMP = 0xe955, + PrintfaxPrinterFile = 0xe956, + Sensor = 0xe957, + StorageOptical = 0xe958, + Communications = 0xe95a, + Headset = 0xe95b, + Projector = 0xe95d, + Health = 0xe95e, + Wire = 0xe95f, + Webcam2 = 0xe960, + Input = 0xe961, + Mouse = 0xe962, + Smartcard = 0xe963, + SmartcardVirtual = 0xe964, + MediaStorageTower = 0xe965, + ReturnKeySm = 0xe966, + GameConsole = 0xe967, + Network = 0xe968, + StorageNetworkWireless = 0xe969, + StorageTape = 0xe96a, + ChevronUpSmall = 0xe96d, + ChevronDownSmall = 0xe96e, + ChevronLeftSmall = 0xe96f, + ChevronRightSmall = 0xe970, + ChevronUpMed = 0xe971, + ChevronDownMed = 0xe972, + ChevronLeftMed = 0xe973, + ChevronRightMed = 0xe974, + Devices2 = 0xe975, + ExpandTile = 0xe976, + PC1 = 0xe977, + PresenceChicklet = 0xe978, + PresenceChickletVideo = 0xe979, + Reply = 0xe97a, + SetTile = 0xe97b, + Type = 0xe97c, + Korean = 0xe97d, + HalfAlpha = 0xe97e, + FullAlpha = 0xe97f, + Key12On = 0xe980, + ChineseChangjie = 0xe981, + QWERTYOn = 0xe982, + QWERTYOff = 0xe983, + ChineseQuick = 0xe984, + Japanese = 0xe985, + FullHiragana = 0xe986, + FullKatakana = 0xe987, + HalfKatakana = 0xe988, + ChineseBoPoMoFo = 0xe989, + ChinesePinyin = 0xe98a, + ConstructionCone = 0xe98f, + XboxOneConsole = 0xe990, + Volume0 = 0xe992, + Volume1 = 0xe993, + Volume2 = 0xe994, + Volume3 = 0xe995, + BatteryUnknown = 0xe996, + WifiAttentionOverlay = 0xe998, + Robot = 0xe99a, + TapAndSend = 0xe9a1, + FitPage = 0xe9a6, + PasswordKeyShow = 0xe9a8, + PasswordKeyHide = 0xe9a9, + BidiLtr = 0xe9aa, + BidiRtl = 0xe9ab, + ForwardSm = 0xe9ac, + CommaKey = 0xe9ad, + DashKey = 0xe9ae, + DullSoundKey = 0xe9af, + HalfDullSound = 0xe9b0, + RightDoubleQuote = 0xe9b1, + LeftDoubleQuote = 0xe9b2, + PuncKeyRightBottom = 0xe9b3, + PuncKey1 = 0xe9b4, + PuncKey2 = 0xe9b5, + PuncKey3 = 0xe9b6, + PuncKey4 = 0xe9b7, + PuncKey5 = 0xe9b8, + PuncKey6 = 0xe9b9, + PuncKey9 = 0xe9ba, + PuncKey7 = 0xe9bb, + PuncKey8 = 0xe9bc, + Frigid = 0xe9ca, + Unknown = 0xe9ce, + AreaChart = 0xe9d2, + CheckList = 0xe9d5, + Diagnostic = 0xe9d9, + Equalizer = 0xe9e9, + Process = 0xe9f3, + Processing = 0xe9f5, + ReportDocument = 0xe9f9, + VideoSolid = 0xea0c, + MixedMediaBadge = 0xea0d, + DisconnectDisplay = 0xea14, + Shield = 0xea18, + Info2 = 0xea1f, + ActionCenterAsterisk = 0xea21, + Beta = 0xea24, + SaveCopy = 0xea35, + List = 0xea37, + Asterisk = 0xea38, + ErrorBadge = 0xea39, + CircleRing = 0xea3a, + CircleFill = 0xea3b, + MergeCall = 0xea3c, + PrivateCall = 0xea3d, + Record2 = 0xea3f, + AllAppsMirrored = 0xea40, + BookmarksMirrored = 0xea41, + BulletedListMirrored = 0xea42, + CallForwardInternationalMirrored = 0xea43, + CallForwardRoamingMirrored = 0xea44, + ChromeBackMirrored = 0xea47, + ClearSelectionMirrored = 0xea48, + ClosePaneMirrored = 0xea49, + ContactInfoMirrored = 0xea4a, + DockRightMirrored = 0xea4b, + DockLeftMirrored = 0xea4c, + ExpandTileMirrored = 0xea4e, + GoMirrored = 0xea4f, + GripperResizeMirrored = 0xea50, + HelpMirrored = 0xea51, + ImportMirrored = 0xea52, + ImportAllMirrored = 0xea53, + LeaveChatMirrored = 0xea54, + ListMirrored = 0xea55, + MailForwardMirrored = 0xea56, + MailReplyMirrored = 0xea57, + MailReplyAllMirrored = 0xea58, + OpenPaneMirrored = 0xea5b, + OpenWithMirrored = 0xea5c, + ParkingLocationMirrored = 0xea5e, + ResizeMouseMediumMirrored = 0xea5f, + ResizeMouseSmallMirrored = 0xea60, + ResizeMouseTallMirrored = 0xea61, + ResizeTouchNarrowerMirrored = 0xea62, + SendMirrored = 0xea63, + SendFillMirrored = 0xea64, + ShowResultsMirrored = 0xea65, + Media = 0xea69, + SyncError = 0xea6a, + Devices3 = 0xea6c, + SlowMotionOn = 0xea79, + Lightbulb = 0xea80, + StatusCircle = 0xea81, + StatusTriangle = 0xea82, + StatusError = 0xea83, + StatusWarning = 0xea84, + Puzzle = 0xea86, + CalendarSolid = 0xea89, + HomeSolid = 0xea8a, + ParkingLocationSolid = 0xea8b, + ContactSolid = 0xea8c, + ConstructionSolid = 0xea8d, + AccidentSolid = 0xea8e, + Ringer = 0xea8f, + PDF = 0xea90, + ThoughtBubble = 0xea91, + HeartBroken = 0xea92, + BatteryCharging10 = 0xea93, + BatterySaver9 = 0xea94, + BatterySaver10 = 0xea95, + CallForwardingMirrored = 0xea97, + MultiSelectMirrored = 0xea98, + Broom = 0xea99, + ForwardCall = 0xeac2, + Trackers = 0xeadf, + Market = 0xeafc, + PieSingle = 0xeb05, + StockUp = 0xeb0f, + StockDown = 0xeb11, + Design = 0xeb3c, + Website = 0xeb41, + Drop = 0xeb42, + Radar = 0xeb44, + BusSolid = 0xeb47, + FerrySolid = 0xeb48, + StartPointSolid = 0xeb49, + StopPointSolid = 0xeb4a, + EndPointSolid = 0xeb4b, + AirplaneSolid = 0xeb4c, + TrainSolid = 0xeb4d, + WorkSolid = 0xeb4e, + ReminderFill = 0xeb4f, + Reminder = 0xeb50, + Heart = 0xeb51, + HeartFill = 0xeb52, + EthernetError = 0xeb55, + EthernetWarning = 0xeb56, + StatusConnecting1 = 0xeb57, + StatusConnecting2 = 0xeb58, + StatusUnsecure = 0xeb59, + WifiError0 = 0xeb5a, + WifiError1 = 0xeb5b, + WifiError2 = 0xeb5c, + WifiError3 = 0xeb5d, + WifiError4 = 0xeb5e, + WifiWarning0 = 0xeb5f, + WifiWarning1 = 0xeb60, + WifiWarning2 = 0xeb61, + WifiWarning3 = 0xeb62, + WifiWarning4 = 0xeb63, + Devices4 = 0xeb66, + NUIIris = 0xeb67, + NUIFace = 0xeb68, + GatewayRouter = 0xeb77, + EditMirrored = 0xeb7e, + NUIFPStartSlideHand = 0xeb82, + NUIFPStartSlideAction = 0xeb83, + NUIFPContinueSlideHand = 0xeb84, + NUIFPContinueSlideAction = 0xeb85, + NUIFPRollRightHand = 0xeb86, + NUIFPRollRightHandAction = 0xeb87, + NUIFPRollLeftHand = 0xeb88, + NUIFPRollLeftAction = 0xeb89, + NUIFPPressHand = 0xeb8a, + NUIFPPressAction = 0xeb8b, + NUIFPPressRepeatHand = 0xeb8c, + NUIFPPressRepeatAction = 0xeb8d, + StatusErrorFull = 0xeb90, + TaskViewExpanded = 0xeb91, + Certificate = 0xeb95, + BackSpaceQWERTYLg = 0xeb96, + ReturnKeyLg = 0xeb97, + FastForward = 0xeb9d, + Rewind = 0xeb9e, + Photo2 = 0xeb9f, + MobBattery0 = 0xeba0, + MobBattery1 = 0xeba1, + MobBattery2 = 0xeba2, + MobBattery3 = 0xeba3, + MobBattery4 = 0xeba4, + MobBattery5 = 0xeba5, + MobBattery6 = 0xeba6, + MobBattery7 = 0xeba7, + MobBattery8 = 0xeba8, + MobBattery9 = 0xeba9, + MobBattery10 = 0xebaa, + MobBatteryCharging0 = 0xebab, + MobBatteryCharging1 = 0xebac, + MobBatteryCharging2 = 0xebad, + MobBatteryCharging3 = 0xebae, + MobBatteryCharging4 = 0xebaf, + MobBatteryCharging5 = 0xebb0, + MobBatteryCharging6 = 0xebb1, + MobBatteryCharging7 = 0xebb2, + MobBatteryCharging8 = 0xebb3, + MobBatteryCharging9 = 0xebb4, + MobBatteryCharging10 = 0xebb5, + MobBatterySaver0 = 0xebb6, + MobBatterySaver1 = 0xebb7, + MobBatterySaver2 = 0xebb8, + MobBatterySaver3 = 0xebb9, + MobBatterySaver4 = 0xebba, + MobBatterySaver5 = 0xebbb, + MobBatterySaver6 = 0xebbc, + MobBatterySaver7 = 0xebbd, + MobBatterySaver8 = 0xebbe, + MobBatterySaver9 = 0xebbf, + MobBatterySaver10 = 0xebc0, + DictionaryCloud = 0xebc3, + ResetDrive = 0xebc4, + VolumeBars = 0xebc5, + Project = 0xebc6, + AdjustHologram = 0xebd2, + CloudDownload = 0xebd3, + MobWifiCallBars = 0xebd4, + MobWifiCall0 = 0xebd5, + MobWifiCall1 = 0xebd6, + MobWifiCall2 = 0xebd7, + MobWifiCall3 = 0xebd8, + MobWifiCall4 = 0xebd9, + Family = 0xebda, + LockFeedback = 0xebdb, + DeviceDiscovery = 0xebde, + WindDirection = 0xebe6, + RightArrowKeyTime0 = 0xebe7, + Bug = 0xebe8, + TabletMode = 0xebfc, + StatusCircleLeft = 0xebfd, + StatusTriangleLeft = 0xebfe, + StatusErrorLeft = 0xebff, + StatusWarningLeft = 0xec00, + MobBatteryUnknown = 0xec02, + NetworkTower = 0xec05, + CityNext = 0xec06, + CityNext2 = 0xec07, + Courthouse = 0xec08, + Groceries = 0xec09, + Sustainable = 0xec0a, + BuildingEnergy = 0xec0b, + ToggleFilled = 0xec11, + ToggleBorder = 0xec12, + SliderThumb = 0xec13, + ToggleThumb = 0xec14, + MiracastLogoSmall = 0xec15, + MiracastLogoLarge = 0xec16, + PLAP = 0xec19, + Badge = 0xec1b, + SignalRoaming = 0xec1e, + MobileLocked = 0xec20, + InsiderHubApp = 0xec24, + PersonalFolder = 0xec25, + HomeGroup = 0xec26, + MyNetwork = 0xec27, + KeyboardFull = 0xec31, + Cafe = 0xec32, + MobSignal1 = 0xec37, + MobSignal2 = 0xec38, + MobSignal3 = 0xec39, + MobSignal4 = 0xec3a, + MobSignal5 = 0xec3b, + MobWifi1 = 0xec3c, + MobWifi2 = 0xec3d, + MobWifi3 = 0xec3e, + MobWifi4 = 0xec3f, + MobAirplane = 0xec40, + MobBluetooth = 0xec41, + MobActionCenter = 0xec42, + MobLocation = 0xec43, + MobWifiHotspot = 0xec44, + LanguageJpn = 0xec45, + MobQuietHours = 0xec46, + MobDrivingMode = 0xec47, + SpeedOff = 0xec48, + SpeedMedium = 0xec49, + SpeedHigh = 0xec4a, + ThisPC = 0xec4e, + MusicNote = 0xec4f, + FileExplorer = 0xec50, + FileExplorerApp = 0xec51, + LeftArrowKeyTime0 = 0xec52, + MicOff = 0xec54, + MicSleep = 0xec55, + MicError = 0xec56, + PlaybackRate1x = 0xec57, + PlaybackRateOther = 0xec58, + CashDrawer = 0xec59, + BarcodeScanner = 0xec5a, + ReceiptPrinter = 0xec5b, + MagStripeReader = 0xec5c, + CompletedSolid = 0xec61, + CompanionApp = 0xec64, + Favicon2 = 0xec6c, + SwipeRevealArt = 0xec6d, + MicOn = 0xec71, + MicClipping = 0xec72, + TabletSelected = 0xec74, + MobileSelected = 0xec75, + LaptopSelected = 0xec76, + TVMonitorSelected = 0xec77, + DeveloperTools = 0xec7a, + MobCallForwarding = 0xec7e, + MobCallForwardingMirrored = 0xec7f, + BodyCam = 0xec80, + PoliceCar = 0xec81, + Draw = 0xec87, + DrawSolid = 0xec88, + LowerBrightness = 0xec8a, + ScrollUpDown = 0xec8f, + DateTime = 0xec92, + HoloLens = 0xec94, + Tiles = 0xeca5, + PartyLeader = 0xeca7, + AppIconDefault = 0xecaa, + Calories = 0xecad, + POI = 0xecaf, + BandBattery0 = 0xecb9, + BandBattery1 = 0xecba, + BandBattery2 = 0xecbb, + BandBattery3 = 0xecbc, + BandBattery4 = 0xecbd, + BandBattery5 = 0xecbe, + BandBattery6 = 0xecbf, + AddSurfaceHub = 0xecc4, + DevUpdate = 0xecc5, + Unit = 0xecc6, + AddTo = 0xecc8, + RemoveFrom = 0xecc9, + RadioBtnOff = 0xecca, + RadioBtnOn = 0xeccb, + RadioBullet2 = 0xeccc, + ExploreContent = 0xeccd, + Blocked2 = 0xece4, + ScrollMode = 0xece7, + ZoomMode = 0xece8, + PanMode = 0xece9, + WiredUSB = 0xecf0, + WirelessUSB = 0xecf1, + USBSafeConnect = 0xecf3, + ActionCenterNotificationMirrored = 0xed0c, + ActionCenterMirrored = 0xed0d, + SubscriptionAdd = 0xed0e, + ResetDevice = 0xed10, + SubscriptionAddMirrored = 0xed11, + QRCode = 0xed14, + Feedback = 0xed15, + Hide = 0xed1a, + Subtitles = 0xed1e, + SubtitlesAudio = 0xed1f, + OpenFolderHorizontal = 0xed25, + CalendarMirrored = 0xed28, + MobeSIM = 0xed2a, + MobeSIMNoProfile = 0xed2b, + MobeSIMLocked = 0xed2c, + MobeSIMBusy = 0xed2d, + SignalError = 0xed2e, + StreamingEnterprise = 0xed2f, + Headphone0 = 0xed30, + Headphone1 = 0xed31, + Headphone2 = 0xed32, + Headphone3 = 0xed33, + Apps = 0xed35, + KeyboardBrightness = 0xed39, + KeyboardLowerBrightness = 0xed3a, + SkipBack10 = 0xed3c, + SkipForward30 = 0xed3d, + TreeFolderFolder = 0xed41, + TreeFolderFolderFill = 0xed42, + TreeFolderFolderOpen = 0xed43, + TreeFolderFolderOpenFill = 0xed44, + MultimediaDMP = 0xed47, + KeyboardOneHanded = 0xed4c, + Narrator = 0xed4d, + EmojiTabPeople = 0xed53, + EmojiTabSmilesAnimals = 0xed54, + EmojiTabCelebrationObjects = 0xed55, + EmojiTabFoodPlants = 0xed56, + EmojiTabTransitPlaces = 0xed57, + EmojiTabSymbols = 0xed58, + EmojiTabTextSmiles = 0xed59, + EmojiTabFavorites = 0xed5a, + EmojiSwatch = 0xed5b, + ConnectApp = 0xed5c, + CompanionDeviceFramework = 0xed5d, + Ruler = 0xed5e, + FingerInking = 0xed5f, + StrokeErase = 0xed60, + PointErase = 0xed61, + ClearAllInk = 0xed62, + Pencil = 0xed63, + Marker = 0xed64, + InkingCaret = 0xed65, + InkingColorOutline = 0xed66, + InkingColorFill = 0xed67, + HardDrive = 0xeda2, + NetworkAdapter = 0xeda3, + Touchscreen = 0xeda4, + NetworkPrinter = 0xeda5, + CloudPrinter = 0xeda6, + KeyboardShortcut = 0xeda7, + BrushSize = 0xeda8, + NarratorForward = 0xeda9, + NarratorForwardMirrored = 0xedaa, + SyncBadge12 = 0xedab, + RingerBadge12 = 0xedac, + AsteriskBadge12 = 0xedad, + ErrorBadge12 = 0xedae, + CircleRingBadge12 = 0xedaf, + CircleFillBadge12 = 0xedb0, + ImportantBadge12 = 0xedb1, + MailBadge12 = 0xedb3, + PauseBadge12 = 0xedb4, + PlayBadge12 = 0xedb5, + PenWorkspace = 0xedc6, + CaretLeft8 = 0xedd5, + CaretRight8 = 0xedd6, + CaretUp8 = 0xedd7, + CaretDown8 = 0xedd8, + CaretLeftSolid8 = 0xedd9, + CaretRightSolid8 = 0xedda, + CaretUpSolid8 = 0xeddb, + CaretDownSolid8 = 0xeddc, + Strikethrough = 0xede0, + Export = 0xede1, + ExportMirrored = 0xede2, + ButtonMenu = 0xede3, + CloudSearch = 0xede4, + PinyinIMELogo = 0xede5, + CalligraphyPen = 0xedfb, + ReplyMirrored = 0xee35, + LockscreenDesktop = 0xee3f, + TaskViewSettings = 0xee40, + MiniExpand2Mirrored = 0xee47, + MiniContract2Mirrored = 0xee49, + Play36 = 0xee4a, + PenPalette = 0xee56, + GuestUser = 0xee57, + SettingsBattery = 0xee63, + TaskbarPhone = 0xee64, + LockScreenGlance = 0xee65, + GenericScan = 0xee6f, + ImageExport = 0xee71, + WifiEthernet = 0xee77, + ActionCenterQuiet = 0xee79, + ActionCenterQuietNotification = 0xee7a, + TrackersMirrored = 0xee92, + DateTimeMirrored = 0xee93, + Wheel = 0xee94, + VirtualMachineGroup = 0xeea3, + ButtonView2 = 0xeeca, + PenWorkspaceMirrored = 0xef15, + PenPaletteMirrored = 0xef16, + StrokeEraseMirrored = 0xef17, + PointEraseMirrored = 0xef18, + ClearAllInkMirrored = 0xef19, + BackgroundToggle = 0xef1f, + Marquee = 0xef20, + ChromeCloseContrast = 0xef2c, + ChromeMinimizeContrast = 0xef2d, + ChromeMaximizeContrast = 0xef2e, + ChromeRestoreContrast = 0xef2f, + TrafficLight = 0xef31, + Replay = 0xef3b, + Eyedropper = 0xef3c, + LineDisplay = 0xef3d, + PINPad = 0xef3e, + SignatureCapture = 0xef3f, + ChipCardCreditCardReader = 0xef40, + MarketDown = 0xef42, + PlayerSettings = 0xef58, + LandscapeOrientation = 0xef6b, + Flow = 0xef90, + Touchpad = 0xefa5, + Speech = 0xefa9, + KnowledgeArticle = 0xf000, + Relationship = 0xf003, + ZipFolder = 0xf012, + DefaultAPN = 0xf080, + UserAPN = 0xf081, + DoublePinyin = 0xf085, + BlueLight = 0xf08c, + CaretSolidLeft = 0xf08d, + CaretSolidDown = 0xf08e, + CaretSolidRight = 0xf08f, + CaretSolidUp = 0xf090, + ButtonA = 0xf093, + ButtonB = 0xf094, + ButtonY = 0xf095, + ButtonX = 0xf096, + ArrowUp8 = 0xf0ad, + ArrowDown8 = 0xf0ae, + ArrowRight8 = 0xf0af, + ArrowLeft8 = 0xf0b0, + QuarentinedItems = 0xf0b2, + QuarentinedItemsMirrored = 0xf0b3, + Protractor = 0xf0b4, + ChecklistMirrored = 0xf0b5, + StatusCircle7 = 0xf0b6, + StatusCheckmark7 = 0xf0b7, + StatusErrorCircle7 = 0xf0b8, + Connected = 0xf0b9, + PencilFill = 0xf0c6, + CalligraphyFill = 0xf0c7, + QuarterStarLeft = 0xf0ca, + QuarterStarRight = 0xf0cb, + ThreeQuarterStarLeft = 0xf0cc, + ThreeQuarterStarRight = 0xf0cd, + QuietHoursBadge12 = 0xf0ce, + BackMirrored = 0xf0d2, + ForwardMirrored = 0xf0d3, + ChromeBackContrast = 0xf0d5, + ChromeBackContrastMirrored = 0xf0d6, + ChromeBackToWindowContrast = 0xf0d7, + ChromeFullScreenContrast = 0xf0d8, + GridView = 0xf0e2, + ClipboardList = 0xf0e3, + ClipboardListMirrored = 0xf0e4, + OutlineQuarterStarLeft = 0xf0e5, + OutlineQuarterStarRight = 0xf0e6, + OutlineHalfStarLeft = 0xf0e7, + OutlineHalfStarRight = 0xf0e8, + OutlineThreeQuarterStarLeft = 0xf0e9, + OutlineThreeQuarterStarRight = 0xf0ea, + SpatialVolume0 = 0xf0eb, + SpatialVolume1 = 0xf0ec, + SpatialVolume2 = 0xf0ed, + SpatialVolume3 = 0xf0ee, + ApplicationGuard = 0xf0ef, + OutlineStarLeftHalf = 0xf0f7, + OutlineStarRightHalf = 0xf0f8, + ChromeAnnotateContrast = 0xf0f9, + DefenderBadge12 = 0xf0fb, + DetachablePC = 0xf103, + LeftStick = 0xf108, + RightStick = 0xf109, + TriggerLeft = 0xf10a, + TriggerRight = 0xf10b, + BumperLeft = 0xf10c, + BumperRight = 0xf10d, + Dpad = 0xf10e, + EnglishPunctuation = 0xf110, + ChinesePunctuation = 0xf111, + HMD = 0xf119, + CtrlSpatialRight = 0xf11b, + PaginationDotOutline10 = 0xf126, + PaginationDotSolid10 = 0xf127, + StrokeErase2 = 0xf128, + SmallErase = 0xf129, + LargeErase = 0xf12a, + FolderHorizontal = 0xf12b, + MicrophoneListening = 0xf12e, + StatusExclamationCircle7 = 0xf12f, + Video360 = 0xf131, + GiftboxOpen = 0xf133, + StatusCircleOuter = 0xf136, + StatusCircleInner = 0xf137, + StatusCircleRing = 0xf138, + StatusTriangleOuter = 0xf139, + StatusTriangleInner = 0xf13a, + StatusTriangleExclamation = 0xf13b, + StatusCircleExclamation = 0xf13c, + StatusCircleErrorX = 0xf13d, + StatusCircleCheckmark = 0xf13e, + StatusCircleInfo = 0xf13f, + StatusCircleBlock = 0xf140, + StatusCircleBlock2 = 0xf141, + StatusCircleQuestionMark = 0xf142, + StatusCircleSync = 0xf143, + Dial1 = 0xf146, + Dial2 = 0xf147, + Dial3 = 0xf148, + Dial4 = 0xf149, + Dial5 = 0xf14a, + Dial6 = 0xf14b, + Dial7 = 0xf14c, + Dial8 = 0xf14d, + Dial9 = 0xf14e, + Dial10 = 0xf14f, + Dial11 = 0xf150, + Dial12 = 0xf151, + Dial13 = 0xf152, + Dial14 = 0xf153, + Dial15 = 0xf154, + Dial16 = 0xf155, + DialShape1 = 0xf156, + DialShape2 = 0xf157, + DialShape3 = 0xf158, + DialShape4 = 0xf159, + ClosedCaptionsInternational = 0xf15f, + TollSolid = 0xf161, + TrafficCongestionSolid = 0xf163, + ExploreContentSingle = 0xf164, + CollapseContent = 0xf165, + CollapseContentSingle = 0xf166, + InfoSolid = 0xf167, + GroupList = 0xf168, + CaretBottomRightSolidCenter8 = 0xf169, + ProgressRingDots = 0xf16a, + Checkbox14 = 0xf16b, + CheckboxComposite14 = 0xf16c, + CheckboxIndeterminateCombo14 = 0xf16d, + CheckboxIndeterminateCombo = 0xf16e, + StatusPause7 = 0xf175, + CharacterAppearance = 0xf17f, + Lexicon = 0xf180, + ScreenTime = 0xf182, + HeadlessDevice = 0xf191, + NetworkSharing = 0xf193, + EyeGaze = 0xf19d, + ToggleLeft = 0xf19e, + ToggleRight = 0xf19f, + WindowsInsider = 0xf1ad, + ChromeSwitch = 0xf1cb, + ChromeSwitchContast = 0xf1cc, + StatusCheckmark = 0xf1d8, + StatusCheckmarkLeft = 0xf1d9, + KeyboardLeftAligned = 0xf20c, + KeyboardRightAligned = 0xf20d, + KeyboardSettings = 0xf210, + NetworkPhysical = 0xf211, + IOT = 0xf22c, + UnknownMirrored = 0xf22e, + ViewDashboard = 0xf246, + ExploitProtectionSettings = 0xf259, + KeyboardNarrow = 0xf260, + Keyboard12Key = 0xf261, + KeyboardDock = 0xf26b, + KeyboardUndock = 0xf26c, + KeyboardLeftDock = 0xf26d, + KeyboardRightDock = 0xf26e, + Ear = 0xf270, + PointerHand = 0xf271, + Bullseye = 0xf272, + DocumentApproval = 0xf28b, + LocaleLanguage = 0xf2b7, + PassiveAuthentication = 0xf32a, + ColorSolid = 0xf354, + NetworkOffline = 0xf384, + NetworkConnected = 0xf385, + NetworkConnectedCheckmark = 0xf386, + SignOut = 0xf3b1, + StatusInfo = 0xf3cc, + StatusInfoLeft = 0xf3cd, + NearbySharing = 0xf3e2, + CtrlSpatialLeft = 0xf3e7, + InteractiveDashboard = 0xf404, + DeclineCall = 0xf405, + ClippingTool = 0xf406, + RectangularClipping = 0xf407, + FreeFormClipping = 0xf408, + CopyTo = 0xf413, + IDBadge = 0xf427, + DynamicLock = 0xf439, + PenTips = 0xf45e, + PenTipsMirrored = 0xf45f, + HWPJoin = 0xf460, + HWPInsert = 0xf461, + HWPStrikeThrough = 0xf462, + HWPScratchOut = 0xf463, + HWPSplit = 0xf464, + HWPNewLine = 0xf465, + HWPOverwrite = 0xf466, + MobWifiWarning1 = 0xf473, + MobWifiWarning2 = 0xf474, + MobWifiWarning3 = 0xf475, + MobWifiWarning4 = 0xf476, + MicLocationCombo = 0xf47f, + Globe2 = 0xf49a, + SpecialEffectSize = 0xf4a5, + GIF = 0xf4a9, + Sticker2 = 0xf4aa, + SurfaceHubSelected = 0xf4be, + HoloLensSelected = 0xf4bf, + Earbud = 0xf4c0, + MixVolumes = 0xf4c3, + Safe = 0xf540, + LaptopSecure = 0xf552, + PrintDefault = 0xf56d, + PageMirrored = 0xf56e, + LandscapeOrientationMirrored = 0xf56f, + ColorOff = 0xf570, + PrintAllPages = 0xf571, + PrintCustomRange = 0xf572, + PageMarginPortraitNarrow = 0xf573, + PageMarginPortraitNormal = 0xf574, + PageMarginPortraitModerate = 0xf575, + PageMarginPortraitWide = 0xf576, + PageMarginLandscapeNarrow = 0xf577, + PageMarginLandscapeNormal = 0xf578, + PageMarginLandscapeModerate = 0xf579, + PageMarginLandscapeWide = 0xf57a, + CollateLandscape = 0xf57b, + CollatePortrait = 0xf57c, + CollatePortraitSeparated = 0xf57d, + DuplexLandscapeOneSided = 0xf57e, + DuplexLandscapeOneSidedMirrored = 0xf57f, + DuplexLandscapeTwoSidedLongEdge = 0xf580, + DuplexLandscapeTwoSidedLongEdgeMirrored = 0xf581, + DuplexLandscapeTwoSidedShortEdge = 0xf582, + DuplexLandscapeTwoSidedShortEdgeMirrored = 0xf583, + DuplexPortraitOneSided = 0xf584, + DuplexPortraitOneSidedMirrored = 0xf585, + DuplexPortraitTwoSidedLongEdge = 0xf586, + DuplexPortraitTwoSidedLongEdgeMirrored = 0xf587, + DuplexPortraitTwoSidedShortEdge = 0xf588, + DuplexPortraitTwoSidedShortEdgeMirrored = 0xf589, + PPSOneLandscape = 0xf58a, + PPSTwoLandscape = 0xf58b, + PPSTwoPortrait = 0xf58c, + PPSFourLandscape = 0xf58d, + PPSFourPortrait = 0xf58e, + HolePunchOff = 0xf58f, + HolePunchPortraitLeft = 0xf590, + HolePunchPortraitRight = 0xf591, + HolePunchPortraitTop = 0xf592, + HolePunchPortraitBottom = 0xf593, + HolePunchLandscapeLeft = 0xf594, + HolePunchLandscapeRight = 0xf595, + HolePunchLandscapeTop = 0xf596, + HolePunchLandscapeBottom = 0xf597, + StaplingOff = 0xf598, + StaplingPortraitTopLeft = 0xf599, + StaplingPortraitTopRight = 0xf59a, + StaplingPortraitBottomRight = 0xf59b, + StaplingPortraitTwoLeft = 0xf59c, + StaplingPortraitTwoRight = 0xf59d, + StaplingPortraitTwoTop = 0xf59e, + StaplingPortraitTwoBottom = 0xf59f, + StaplingPortraitBookBinding = 0xf5a0, + StaplingLandscapeTopLeft = 0xf5a1, + StaplingLandscapeTopRight = 0xf5a2, + StaplingLandscapeBottomLeft = 0xf5a3, + StaplingLandscapeBottomRight = 0xf5a4, + StaplingLandscapeTwoLeft = 0xf5a5, + StaplingLandscapeTwoRight = 0xf5a6, + StaplingLandscapeTwoTop = 0xf5a7, + StaplingLandscapeTwoBottom = 0xf5a8, + StaplingLandscapeBookBinding = 0xf5a9, + StatusDataTransferRoaming = 0xf5aa, + MobSIMError = 0xf5ab, + CollateLandscapeSeparated = 0xf5ac, + PPSOnePortrait = 0xf5ad, + StaplingPortraitBottomLeft = 0xf5ae, + PlaySolid = 0xf5b0, + RepeatOff = 0xf5e7, + Set = 0xf5ed, + SetSolid = 0xf5ee, + FuzzyReading = 0xf5ef, + VerticalBattery0 = 0xf5f2, + VerticalBattery1 = 0xf5f3, + VerticalBattery2 = 0xf5f4, + VerticalBattery3 = 0xf5f5, + VerticalBattery4 = 0xf5f6, + VerticalBattery5 = 0xf5f7, + VerticalBattery6 = 0xf5f8, + VerticalBattery7 = 0xf5f9, + VerticalBattery8 = 0xf5fa, + VerticalBattery9 = 0xf5fb, + VerticalBattery10 = 0xf5fc, + VerticalBatteryCharging0 = 0xf5fd, + VerticalBatteryCharging1 = 0xf5fe, + VerticalBatteryCharging2 = 0xf5ff, + VerticalBatteryCharging3 = 0xf600, + VerticalBatteryCharging4 = 0xf601, + VerticalBatteryCharging5 = 0xf602, + VerticalBatteryCharging6 = 0xf603, + VerticalBatteryCharging7 = 0xf604, + VerticalBatteryCharging8 = 0xf605, + VerticalBatteryCharging9 = 0xf606, + VerticalBatteryCharging10 = 0xf607, + VerticalBatteryUnknown = 0xf608, + SIMError = 0xf618, + SIMMissing = 0xf619, + SIMLock = 0xf61a, + eSIM = 0xf61b, + eSIMNoProfile = 0xf61c, + eSIMLocked = 0xf61d, + eSIMBusy = 0xf61e, + NoiseCancelation = 0xf61f, + NoiseCancelationOff = 0xf620, + MusicSharing = 0xf623, + MusicSharingOff = 0xf624, + CircleShapeSolid = 0xf63c, + WifiCallBars = 0xf657, + WifiCall0 = 0xf658, + WifiCall1 = 0xf659, + WifiCall2 = 0xf65a, + WifiCall3 = 0xf65b, + WifiCall4 = 0xf65c, + CHTLanguageBar = 0xf69e, + ComposeMode = 0xf6a9, + ExpressiveInputEntry = 0xf6b8, + EmojiTabMoreSymbols = 0xf6ba, + WebSearch = 0xf6fa, + Kiosk = 0xf712, + RTTLogo = 0xf714, + VoiceCall = 0xf715, + GoToMessage = 0xf716, + ReturnToCall = 0xf71a, + StartPresenting = 0xf71c, + StopPresenting = 0xf71d, + ProductivityMode = 0xf71e, + SetHistoryStatus = 0xf738, + SetHistoryStatus2 = 0xf739, + Keyboardsettings20 = 0xf73d, + OneHandedRight20 = 0xf73e, + OneHandedLeft20 = 0xf73f, + Split20 = 0xf740, + Full20 = 0xf741, + Handwriting20 = 0xf742, + ChevronLeft20 = 0xf743, + ChevronLeft32 = 0xf744, + ChevronRight20 = 0xf745, + ChevronRight32 = 0xf746, + Event12 = 0xf763, + MicOff2 = 0xf781, + DeliveryOptimization = 0xf785, + CancelMedium = 0xf78a, + SearchMedium = 0xf78b, + AcceptMedium = 0xf78c, + RevealPasswordMedium = 0xf78d, + DeleteWord = 0xf7ad, + DeleteWordFill = 0xf7ae, + DeleteLines = 0xf7af, + DeleteLinesFill = 0xf7b0, + InstertWords = 0xf7b1, + InstertWordsFill = 0xf7b2, + JoinWords = 0xf7b3, + JoinWordsFill = 0xf7b4, + OverwriteWords = 0xf7b5, + OverwriteWordsFill = 0xf7b6, + AddNewLine = 0xf7b7, + AddNewLineFill = 0xf7b8, + OverwriteWordsKorean = 0xf7b9, + OverwriteWordsFillKorean = 0xf7ba, + EducationIcon = 0xf7bb, + WindowSnipping = 0xf7ed, + VideoCapture = 0xf7ee, + StatusSecured = 0xf809, + NarratorApp = 0xf83b, + PowerButtonUpdate = 0xf83d, + RestartUpdate = 0xf83e, + UpdateStatusDot = 0xf83f, + Eject = 0xf847, + Spelling = 0xf87b, + SpellingKorean = 0xf87c, + SpellingSerbian = 0xf87d, + SpellingChinese = 0xf87e, + FolderSelect = 0xf89a, + SmartScreen = 0xf8a5, + ExploitProtection = 0xf8a6, + AddBold = 0xf8aa, + SubtractBold = 0xf8ab, + BackSolidBold = 0xf8ac, + ForwardSolidBold = 0xf8ad, + PauseBold = 0xf8ae, + ClickSolid = 0xf8af, + SettingsSolid = 0xf8b0, + MicrophoneSolidBold = 0xf8b1, + SpeechSolidBold = 0xf8b2, + ClickedOutLoudSolidBold = 0xf8b3, + }; -#endif // DEF_H + Q_ENUM_NS(Fluent_AwesomeType) + + QML_NAMED_ELEMENT(FluentIcons) +} \ No newline at end of file diff --git a/src/FluAccentColor.cpp b/src/FluAccentColor.cpp index 976b7912..0d789f00 100644 --- a/src/FluAccentColor.cpp +++ b/src/FluAccentColor.cpp @@ -1,4 +1,5 @@ #include "FluAccentColor.h" -FluAccentColor::FluAccentColor(QObject *parent):QObject{parent}{ +FluAccentColor::FluAccentColor(QObject *parent) : QObject{parent} { + } diff --git a/src/FluAccentColor.h b/src/FluAccentColor.h index 7ad043ea..f8c2edda 100644 --- a/src/FluAccentColor.h +++ b/src/FluAccentColor.h @@ -1,5 +1,4 @@ -#ifndef FLUACCENTCOLOR_H -#define FLUACCENTCOLOR_H +#pragma once #include #include @@ -9,19 +8,17 @@ /** * @brief The FluAccentColor class */ -class FluAccentColor : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(QColor,darkest) - Q_PROPERTY_AUTO(QColor,darker) - Q_PROPERTY_AUTO(QColor,dark) - Q_PROPERTY_AUTO(QColor,normal) - Q_PROPERTY_AUTO(QColor,light) - Q_PROPERTY_AUTO(QColor,lighter) - Q_PROPERTY_AUTO(QColor,lightest) +class FluAccentColor : public QObject { +Q_OBJECT + +Q_PROPERTY_AUTO(QColor, darkest) +Q_PROPERTY_AUTO(QColor, darker) +Q_PROPERTY_AUTO(QColor, dark) +Q_PROPERTY_AUTO(QColor, normal) +Q_PROPERTY_AUTO(QColor, light) +Q_PROPERTY_AUTO(QColor, lighter) +Q_PROPERTY_AUTO(QColor, lightest) QML_NAMED_ELEMENT(FluAccentColor) public: explicit FluAccentColor(QObject *parent = nullptr); }; - -#endif // FLUACCENTCOLOR_H diff --git a/src/FluApp.cpp b/src/FluApp.cpp index 0c5c5b41..13bf6df7 100644 --- a/src/FluApp.cpp +++ b/src/FluApp.cpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -10,22 +9,21 @@ #include #include -FluApp::FluApp(QObject *parent):QObject{parent}{ - useSystemAppBar(false); +FluApp::FluApp(QObject *parent) : QObject{parent} { + _useSystemAppBar = false; } -FluApp::~FluApp(){ -} +FluApp::~FluApp() = default; -void FluApp::init(QObject *target,QLocale locale){ +void FluApp::init(QObject *target, QLocale locale) { _locale = locale; _engine = qmlEngine(target); _translator = new QTranslator(this); qApp->installTranslator(_translator); const QStringList uiLanguages = _locale.uiLanguages(); - for (const QString &name : uiLanguages) { + for (const QString &name: uiLanguages) { const QString baseName = "fluentui_" + QLocale(name).name(); - if (_translator->load(":/qt/qml/FluentUI/i18n/"+ baseName)) { + if (_translator->load(":/qt/qml/FluentUI/i18n/" + baseName)) { _engine->retranslate(); break; } diff --git a/src/FluApp.h b/src/FluApp.h index 3af53db1..c291dbfc 100644 --- a/src/FluApp.h +++ b/src/FluApp.h @@ -1,5 +1,4 @@ -#ifndef FLUAPP_H -#define FLUAPP_H +#pragma once #include #include @@ -15,24 +14,28 @@ /** * @brief The FluApp class */ -class FluApp : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(bool,useSystemAppBar); - Q_PROPERTY_AUTO(QString,windowIcon); - Q_PROPERTY_AUTO(QLocale,locale); +class FluApp : public QObject { +Q_OBJECT + +Q_PROPERTY_AUTO(bool, useSystemAppBar) +Q_PROPERTY_AUTO(QString, windowIcon) +Q_PROPERTY_AUTO(QLocale, locale) QML_NAMED_ELEMENT(FluApp) QML_SINGLETON + private: explicit FluApp(QObject *parent = nullptr); - ~FluApp(); -public: - SINGLETON(FluApp) - static FluApp *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} - Q_INVOKABLE void init(QObject *target,QLocale locale = QLocale::system()); -private: - QQmlEngine *_engine; - QTranslator* _translator = nullptr; -}; -#endif // FLUAPP_H + ~FluApp() override; + +public: +SINGLETON(FluApp) + + static FluApp *create(QQmlEngine *, QJSEngine *) { return getInstance(); } + + Q_INVOKABLE void init(QObject *target, QLocale locale = QLocale::system()); + +private: + QQmlEngine *_engine{}; + QTranslator *_translator = nullptr; +}; \ No newline at end of file diff --git a/src/FluCaptcha.cpp b/src/FluCaptcha.cpp index 7969010b..bc849009 100644 --- a/src/FluCaptcha.cpp +++ b/src/FluCaptcha.cpp @@ -3,74 +3,64 @@ #include #include #include -#include -FluCaptcha::FluCaptcha(QQuickItem *parent):QQuickPaintedItem(parent){ - ignoreCase(true); - QFont fontStype; - fontStype.setPixelSize(28); - fontStype.setBold(true); - font(fontStype); +int generaNumber(int number) { + return QRandomGenerator::global()->bounded(0, number); +} + +FluCaptcha::FluCaptcha(QQuickItem *parent) : QQuickPaintedItem(parent) { + _ignoreCase = false; + QFont fontStyle; + fontStyle.setPixelSize(28); + fontStyle.setBold(true); + font(fontStyle); setWidth(180); setHeight(80); refresh(); } -void FluCaptcha::paint(QPainter* painter){ +void FluCaptcha::paint(QPainter *painter) { painter->save(); - painter->fillRect(boundingRect().toRect(),QColor(255,255,255,255)); + painter->fillRect(boundingRect().toRect(), QColor(255, 255, 255, 255)); QPen pen; painter->setFont(_font); - for(int i=0;i<100;i++) - { - pen = QPen(QColor(_generaNumber(256),_generaNumber(256),_generaNumber(256))); + for (int i = 0; i < 100; i++) { + pen = QPen(QColor(generaNumber(256), generaNumber(256), generaNumber(256))); painter->setPen(pen); - painter->drawPoint(_generaNumber(180),_generaNumber(80)); + painter->drawPoint(generaNumber(180), generaNumber(80)); } - for(int i=0;i<5;i++) - { - pen = QPen(QColor(_generaNumber(256),_generaNumber(256),_generaNumber(256))); + for (int i = 0; i < 5; i++) { + pen = QPen(QColor(generaNumber(256), generaNumber(256), generaNumber(256))); painter->setPen(pen); - painter->drawLine(_generaNumber(180),_generaNumber(80),_generaNumber(180),_generaNumber(80)); + painter->drawLine(generaNumber(180), generaNumber(80), generaNumber(180), generaNumber(80)); } - for(int i=0;i<4;i++) - { - pen = QPen(QColor(_generaNumber(255),_generaNumber(255),_generaNumber(255))); + for (int i = 0; i < 4; i++) { + pen = QPen(QColor(generaNumber(255), generaNumber(255), generaNumber(255))); painter->setPen(pen); - painter->drawText(15+35*i,10+_generaNumber(15),30,40,Qt::AlignCenter, QString(_code[i])); + painter->drawText(15 + 35 * i, 10 + generaNumber(15), 30, 40, Qt::AlignCenter, QString(_code[i])); } painter->restore(); } -int FluCaptcha::_generaNumber(int number){ - return QRandomGenerator::global()->bounded(0,number); -} - -void FluCaptcha::refresh(){ +void FluCaptcha::refresh() { this->_code.clear(); - for(int i = 0;i < 4;++i) - { - int num = _generaNumber(3); - if(num == 0) - { - this->_code += QString::number(_generaNumber(10)); - } - else if(num == 1) - { + for (int i = 0; i < 4; ++i) { + int num = generaNumber(3); + if (num == 0) { + this->_code += QString::number(generaNumber(10)); + } else if (num == 1) { int temp = 'A'; - this->_code += static_cast(temp + _generaNumber(26)); - } - else if(num == 2) - { + this->_code += static_cast(temp + generaNumber(26)); + } else if (num == 2) { int temp = 'a'; - this->_code += static_cast(temp + _generaNumber(26)); + this->_code += static_cast(temp + generaNumber(26)); } } update(); } -bool FluCaptcha::verify(const QString& code){ - if(_ignoreCase){ +[[maybe_unused]] bool FluCaptcha::verify(const QString &code) { + if (_ignoreCase) { return this->_code.toUpper() == code.toUpper(); } return this->_code == code; diff --git a/src/FluCaptcha.h b/src/FluCaptcha.h index 4a260c5f..ea5b7e73 100644 --- a/src/FluCaptcha.h +++ b/src/FluCaptcha.h @@ -1,5 +1,4 @@ -#ifndef FLUCAPTCHA_H -#define FLUCAPTCHA_H +#pragma once #include #include @@ -9,21 +8,22 @@ /** * @brief The FluCaptcha class */ -class FluCaptcha : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(QFont,font); - Q_PROPERTY_AUTO(bool,ignoreCase); +class FluCaptcha : public QQuickPaintedItem { +Q_OBJECT + +Q_PROPERTY_AUTO(QFont, font); +Q_PROPERTY_AUTO(bool, ignoreCase); QML_NAMED_ELEMENT(FluCaptcha) -private: - int _generaNumber(int number); + public: explicit FluCaptcha(QQuickItem *parent = nullptr); - void paint(QPainter* painter) override; + + void paint(QPainter *painter) override; + Q_INVOKABLE void refresh(); - Q_INVOKABLE bool verify(const QString& code); + + Q_INVOKABLE [[maybe_unused]] bool verify(const QString &code); + private: QString _code; }; - -#endif // FLUCAPTCHA_H diff --git a/src/FluColors.cpp b/src/FluColors.cpp index 1aef487c..b332f9d2 100644 --- a/src/FluColors.cpp +++ b/src/FluColors.cpp @@ -1,35 +1,34 @@ #include "FluColors.h" #include "FluTools.h" -FluColors::FluColors(QObject *parent):QObject{parent}{ - Transparent(QColor(0, 0, 0, 0)); - Black(QColor(0, 0, 0)); - White(QColor(255, 255, 255)); - Grey10(QColor(250, 249, 248)); - Grey20(QColor(243, 242, 241)); - Grey30(QColor(237, 235, 233)); - Grey40(QColor(225, 223, 221)); - Grey50(QColor(210, 208, 206)); - Grey60(QColor(200, 198, 196)); - Grey70(QColor(190, 185, 184)); - Grey80(QColor(179, 176, 173)); - Grey90(QColor(161, 159, 157)); - Grey100(QColor(151, 149, 146)); - Grey110(QColor(138, 136, 134)); - Grey120(QColor(121, 119, 117)); - Grey130(QColor(96, 94, 92)); - Grey140(QColor(72, 70, 68)); - Grey150(QColor(59, 58, 57)); - Grey160(QColor(50, 49, 48)); - Grey170(QColor(41, 40, 39)); - Grey180(QColor(37, 36, 35)); - Grey190(QColor(32, 31, 30)); - Grey200(QColor(27, 26, 25)); - Grey210(QColor(22, 21, 20)); - Grey220(QColor(17, 16, 15)); +FluColors::FluColors(QObject *parent) : QObject{parent} { + _Transparent = QColor(0, 0, 0, 0); + _Black = QColor(0, 0, 0); + _White = QColor(255, 255, 255); + _Grey10 = QColor(250, 249, 248); + _Grey20 = QColor(243, 242, 241); + _Grey30 = QColor(237, 235, 233); + _Grey40 = QColor(225, 223, 221); + _Grey50 = QColor(210, 208, 206); + _Grey60 = QColor(200, 198, 196); + _Grey70 = QColor(190, 185, 184); + _Grey80 = QColor(179, 176, 173); + _Grey90 = QColor(161, 159, 157); + _Grey100 = QColor(151, 149, 146); + _Grey110 = QColor(138, 136, 134); + _Grey120 = QColor(121, 119, 117); + _Grey130 = QColor(96, 94, 92); + _Grey140 = QColor(72, 70, 68); + _Grey150 = QColor(59, 58, 57); + _Grey160 = QColor(50, 49, 48); + _Grey170 = QColor(41, 40, 39); + _Grey180 = QColor(37, 36, 35); + _Grey190 = QColor(32, 31, 30); + _Grey200 = QColor(27, 26, 25); + _Grey210 = QColor(22, 21, 20); + _Grey220 = QColor(17, 16, 15); - - FluAccentColor *yellow = new FluAccentColor(this); + auto yellow = new FluAccentColor(this); yellow->darkest(QColor(249, 168, 37)); yellow->darker(QColor(251, 192, 45)); yellow->dark(QColor(253, 212, 53)); @@ -37,9 +36,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ yellow->light(QColor(255, 238, 88)); yellow->lighter(QColor(255, 241, 118)); yellow->lightest(QColor(255, 245, 155)); - Yellow(yellow); + _Yellow = yellow; - FluAccentColor *orange = new FluAccentColor(this); + auto orange = new FluAccentColor(this); orange->darkest(QColor(153, 61, 7)); orange->darker(QColor(172, 68, 8)); orange->dark(QColor(209, 88, 10)); @@ -47,9 +46,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ orange->light(QColor(248, 122, 48)); orange->lighter(QColor(249, 145, 84)); orange->lightest(QColor(250, 192, 106)); - Orange(orange); + _Orange = orange; - FluAccentColor *red = new FluAccentColor(this); + auto red = new FluAccentColor(this); red->darkest(QColor(143, 10, 21)); red->darker(QColor(162, 11, 24)); red->dark(QColor(185, 13, 28)); @@ -57,9 +56,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ red->light(QColor(236, 64, 79)); red->lighter(QColor(238, 88, 101)); red->lightest(QColor(240, 107, 118)); - Red(red); + _Red = red; - FluAccentColor *magenta = new FluAccentColor(this); + auto magenta = new FluAccentColor(this); magenta->darkest(QColor(111, 0, 79)); magenta->darker(QColor(160, 7, 108)); magenta->dark(QColor(181, 13, 125)); @@ -67,9 +66,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ magenta->light(QColor(234, 77, 168)); magenta->lighter(QColor(238, 110, 193)); magenta->lightest(QColor(241, 140, 213)); - Magenta(magenta); + _Magenta = magenta; - FluAccentColor *purple = new FluAccentColor(this); + auto purple = new FluAccentColor(this); purple->darkest(QColor(44, 15, 118)); purple->darker(QColor(61, 15, 153)); purple->dark(QColor(78, 17, 174)); @@ -77,9 +76,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ purple->light(QColor(123, 76, 157)); purple->lighter(QColor(141, 110, 189)); purple->lightest(QColor(158, 142, 217)); - Purple(purple); + _Purple = purple; - FluAccentColor *blue = new FluAccentColor(this); + auto blue = new FluAccentColor(this); blue->darkest(QColor(0, 74, 131)); blue->darker(QColor(0, 84, 148)); blue->dark(QColor(0, 102, 180)); @@ -87,9 +86,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ blue->light(QColor(38, 140, 220)); blue->lighter(QColor(76, 160, 224)); blue->lightest(QColor(96, 171, 228)); - Blue(blue); + _Blue = blue; - FluAccentColor *teal = new FluAccentColor(this); + auto teal = new FluAccentColor(this); teal->darkest(QColor(0, 110, 91)); teal->darker(QColor(0, 124, 103)); teal->dark(QColor(0, 151, 125)); @@ -97,9 +96,9 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ teal->light(QColor(38, 189, 164)); teal->lighter(QColor(77, 201, 180)); teal->lightest(QColor(96, 207, 188)); - Teal(teal); + _Teal = teal; - FluAccentColor *green = new FluAccentColor(this); + auto green = new FluAccentColor(this); green->darkest(QColor(9, 76, 9)); green->darker(QColor(12, 93, 12)); green->dark(QColor(14, 111, 14)); @@ -107,17 +106,17 @@ FluColors::FluColors(QObject *parent):QObject{parent}{ green->light(QColor(39, 137, 57)); green->lighter(QColor(76, 156, 76)); green->lightest(QColor(106, 173, 106)); - Green(green); + _Green = green; } -FluAccentColor* FluColors::createAccentColor(QColor primaryColor){ - FluAccentColor *accentColor = new FluAccentColor(this); - accentColor->darkest(FluTools::getInstance()->withOpacity(primaryColor,0.7)); - accentColor->darker(FluTools::getInstance()->withOpacity(primaryColor,0.8)); - accentColor->dark(FluTools::getInstance()->withOpacity(primaryColor,0.9)); +[[maybe_unused]] FluAccentColor *FluColors::createAccentColor(QColor primaryColor) { + auto accentColor = new FluAccentColor(this); + accentColor->darkest(FluTools::getInstance()->withOpacity(primaryColor, 0.7)); + accentColor->darker(FluTools::getInstance()->withOpacity(primaryColor, 0.8)); + accentColor->dark(FluTools::getInstance()->withOpacity(primaryColor, 0.9)); accentColor->normal(primaryColor); - accentColor->light(FluTools::getInstance()->withOpacity(primaryColor,0.9)); - accentColor->lighter(FluTools::getInstance()->withOpacity(primaryColor,0.8)); - accentColor->lightest(FluTools::getInstance()->withOpacity(primaryColor,0.7)); + accentColor->light(FluTools::getInstance()->withOpacity(primaryColor, 0.9)); + accentColor->lighter(FluTools::getInstance()->withOpacity(primaryColor, 0.8)); + accentColor->lightest(FluTools::getInstance()->withOpacity(primaryColor, 0.7)); return accentColor; } diff --git a/src/FluColors.h b/src/FluColors.h index 9dc45f23..8568ec5f 100644 --- a/src/FluColors.h +++ b/src/FluColors.h @@ -1,5 +1,4 @@ -#ifndef FLUCOLORS_H -#define FLUCOLORS_H +#pragma once #include #include @@ -11,50 +10,52 @@ /** * @brief The FluColors class */ -class FluColors : public QObject -{ - Q_OBJECT - Q_PROPERTY_AUTO(QColor,Transparent); - Q_PROPERTY_AUTO(QColor,Black); - Q_PROPERTY_AUTO(QColor,White); - Q_PROPERTY_AUTO(QColor,Grey10); - Q_PROPERTY_AUTO(QColor,Grey20); - Q_PROPERTY_AUTO(QColor,Grey30); - Q_PROPERTY_AUTO(QColor,Grey40); - Q_PROPERTY_AUTO(QColor,Grey50); - Q_PROPERTY_AUTO(QColor,Grey60); - Q_PROPERTY_AUTO(QColor,Grey70); - Q_PROPERTY_AUTO(QColor,Grey80); - Q_PROPERTY_AUTO(QColor,Grey90); - Q_PROPERTY_AUTO(QColor,Grey100); - Q_PROPERTY_AUTO(QColor,Grey110); - Q_PROPERTY_AUTO(QColor,Grey120); - Q_PROPERTY_AUTO(QColor,Grey130); - Q_PROPERTY_AUTO(QColor,Grey140); - Q_PROPERTY_AUTO(QColor,Grey150); - Q_PROPERTY_AUTO(QColor,Grey160); - Q_PROPERTY_AUTO(QColor,Grey170); - Q_PROPERTY_AUTO(QColor,Grey180); - Q_PROPERTY_AUTO(QColor,Grey190); - Q_PROPERTY_AUTO(QColor,Grey200); - Q_PROPERTY_AUTO(QColor,Grey210); - Q_PROPERTY_AUTO(QColor,Grey220); - Q_PROPERTY_AUTO(FluAccentColor*,Yellow); - Q_PROPERTY_AUTO(FluAccentColor*,Orange); - Q_PROPERTY_AUTO(FluAccentColor*,Red); - Q_PROPERTY_AUTO(FluAccentColor*,Magenta); - Q_PROPERTY_AUTO(FluAccentColor*,Purple); - Q_PROPERTY_AUTO(FluAccentColor*,Blue); - Q_PROPERTY_AUTO(FluAccentColor*,Teal); - Q_PROPERTY_AUTO(FluAccentColor*,Green); +class FluColors : public QObject { +Q_OBJECT + +Q_PROPERTY_AUTO(QColor, Transparent); +Q_PROPERTY_AUTO(QColor, Black); +Q_PROPERTY_AUTO(QColor, White); +Q_PROPERTY_AUTO(QColor, Grey10); +Q_PROPERTY_AUTO(QColor, Grey20); +Q_PROPERTY_AUTO(QColor, Grey30); +Q_PROPERTY_AUTO(QColor, Grey40); +Q_PROPERTY_AUTO(QColor, Grey50); +Q_PROPERTY_AUTO(QColor, Grey60); +Q_PROPERTY_AUTO(QColor, Grey70); +Q_PROPERTY_AUTO(QColor, Grey80); +Q_PROPERTY_AUTO(QColor, Grey90); +Q_PROPERTY_AUTO(QColor, Grey100); +Q_PROPERTY_AUTO(QColor, Grey110); +Q_PROPERTY_AUTO(QColor, Grey120); +Q_PROPERTY_AUTO(QColor, Grey130); +Q_PROPERTY_AUTO(QColor, Grey140); +Q_PROPERTY_AUTO(QColor, Grey150); +Q_PROPERTY_AUTO(QColor, Grey160); +Q_PROPERTY_AUTO(QColor, Grey170); +Q_PROPERTY_AUTO(QColor, Grey180); +Q_PROPERTY_AUTO(QColor, Grey190); +Q_PROPERTY_AUTO(QColor, Grey200); +Q_PROPERTY_AUTO(QColor, Grey210); +Q_PROPERTY_AUTO(QColor, Grey220); +Q_PROPERTY_AUTO_P(FluAccentColor*, Yellow); +Q_PROPERTY_AUTO_P(FluAccentColor*, Orange); +Q_PROPERTY_AUTO_P(FluAccentColor*, Red); +Q_PROPERTY_AUTO_P(FluAccentColor*, Magenta); +Q_PROPERTY_AUTO_P(FluAccentColor*, Purple); +Q_PROPERTY_AUTO_P(FluAccentColor*, Blue); +Q_PROPERTY_AUTO_P(FluAccentColor*, Teal); +Q_PROPERTY_AUTO_P(FluAccentColor*, Green); QML_NAMED_ELEMENT(FluColors) QML_SINGLETON + private: explicit FluColors(QObject *parent = nullptr); -public: - SINGLETON(FluColors) - Q_INVOKABLE FluAccentColor* createAccentColor(QColor primaryColor); - static FluColors *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} -}; -#endif // FLUCOLORS_H +public: +SINGLETON(FluColors) + + Q_INVOKABLE [[maybe_unused]] FluAccentColor *createAccentColor(QColor primaryColor); + + static FluColors *create(QQmlEngine *, QJSEngine *) { return getInstance(); } +}; \ No newline at end of file diff --git a/src/FluFrameless.cpp b/src/FluFrameless.cpp index ac0d1e30..7448f8ea 100644 --- a/src/FluFrameless.cpp +++ b/src/FluFrameless.cpp @@ -6,130 +6,140 @@ #include #ifdef Q_OS_WIN -#pragma comment (lib,"user32.lib") -#pragma comment (lib,"dwmapi.lib") +#pragma comment (lib, "user32.lib") +#pragma comment (lib, "dwmapi.lib") + #include #include #include -static inline QByteArray qtNativeEventType() -{ + +static inline QByteArray qtNativeEventType() { static const auto result = "windows_generic_MSG"; return result; } -static inline bool isCompositionEnabled(){ - typedef HRESULT (WINAPI* DwmIsCompositionEnabledPtr)(BOOL *pfEnabled); + +static inline bool isCompositionEnabled() { + typedef HRESULT (WINAPI *DwmIsCompositionEnabledPtr)(BOOL *pfEnabled); HMODULE module = ::LoadLibraryW(L"dwmapi.dll"); - if (module) - { + if (module) { BOOL composition_enabled = false; DwmIsCompositionEnabledPtr dwm_is_composition_enabled; - dwm_is_composition_enabled= reinterpret_cast(::GetProcAddress(module, "DwmIsCompositionEnabled")); - if (dwm_is_composition_enabled) - { + dwm_is_composition_enabled = reinterpret_cast(::GetProcAddress(module, "DwmIsCompositionEnabled")); + if (dwm_is_composition_enabled) { dwm_is_composition_enabled(&composition_enabled); } return composition_enabled; } return false; } + #endif -FluFrameless::FluFrameless(QQuickItem *parent) - : QQuickItem{parent} -{ - appbar(nullptr); - maximizeButton(nullptr); - minimizedButton(nullptr); - closeButton(nullptr); - topmost(false); - disabled(false); +bool containsCursorToItem(QQuickItem *item) { + if (!item || !item->isVisible()) { + return false; + } + auto point = QCursor::pos(); + auto rect = QRectF(item->mapToGlobal(QPoint(0, 0)), item->size()); + if (point.x() > rect.x() && point.x() < (rect.x() + rect.width()) && point.y() > rect.y() && point.y() < (rect.y() + rect.height())) { + return true; + } + return false; } -FluFrameless::~FluFrameless(){ +FluFrameless::FluFrameless(QQuickItem *parent) : QQuickItem{parent} { + _fixSize = false; + _appbar = nullptr; + _maximizeButton = nullptr; + _minimizedButton = nullptr; + _closeButton = nullptr; + _topmost = false; + _disabled = false; } -void FluFrameless::onDestruction(){ - qApp->removeNativeEventFilter(this); +FluFrameless::~FluFrameless() = default; + +[[maybe_unused]] void FluFrameless::onDestruction() { + QGuiApplication::instance()->removeNativeEventFilter(this); } -void FluFrameless::componentComplete(){ - if(_disabled){ +void FluFrameless::componentComplete() { + if (_disabled) { return; } _current = window()->winId(); - window()->setFlags(( window()->flags()) | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::FramelessWindowHint); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - if(QQuickWindow::sceneGraphBackend() == "software"){ - window()->setFlag(Qt::FramelessWindowHint,false); + window()->setFlags((window()->flags()) | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::FramelessWindowHint); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if (QQuickWindow::sceneGraphBackend() == "software") { + window()->setFlag(Qt::FramelessWindowHint, false); } #endif - if(!_fixSize){ + if (!_fixSize) { window()->setFlag(Qt::WindowMaximizeButtonHint); } window()->installEventFilter(this); - qApp->installNativeEventFilter(this); - if(_maximizeButton){ + QGuiApplication::instance()->installNativeEventFilter(this); + if (_maximizeButton) { setHitTestVisible(_maximizeButton); } - if(_minimizedButton){ + if (_minimizedButton) { setHitTestVisible(_minimizedButton); } - if(_closeButton){ + if (_closeButton) { setHitTestVisible(_closeButton); } #ifdef Q_OS_WIN HWND hwnd = reinterpret_cast(window()->winId()); DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE); - if(_fixSize){ + if (_fixSize) { ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_THICKFRAME); - for (int i = 0; i < qApp->screens().count(); ++i) { - connect( qApp->screens().at(i),&QScreen::logicalDotsPerInchChanged,this,[=]{ - SetWindowPos(hwnd,nullptr,0,0,0,0,SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_FRAMECHANGED); + for (int i = 0; i <= QGuiApplication::screens().count() - 1; ++i) { + connect(QGuiApplication::screens().at(i), &QScreen::logicalDotsPerInchChanged, this, [=] { + SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_FRAMECHANGED); }); } - }else{ + } else { ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME); } - SetWindowPos(hwnd,nullptr,0,0,0,0,SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); - connect(window(),&QQuickWindow::screenChanged,this,[hwnd]{ - ::SetWindowPos(hwnd,0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOOWNERZORDER); - ::RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW); + SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + connect(window(), &QQuickWindow::screenChanged, this, [hwnd] { + ::SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOOWNERZORDER); + ::RedrawWindow(hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_UPDATENOW); }); #endif - connect(this,&FluFrameless::topmostChanged,this,[this]{ + connect(this, &FluFrameless::topmostChanged, this, [this] { _setWindowTopmost(topmost()); }); _setWindowTopmost(topmost()); } -bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result){ +[[maybe_unused]] bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) { #ifdef Q_OS_WIN if ((eventType != qtNativeEventType()) || !message) { return false; } const auto msg = static_cast(message); - const HWND hwnd = msg->hwnd; - if (!hwnd || !msg) { + auto hwnd = msg->hwnd; + if (!hwnd) { return false; } - const qint64 wid = reinterpret_cast(hwnd); - if(wid != _current){ + const quint64 wid = reinterpret_cast(hwnd); + if (wid != _current) { return false; } - const UINT uMsg = msg->message; - const WPARAM wParam = msg->wParam; - const LPARAM lParam = msg->lParam; + const auto uMsg = msg->message; + const auto wParam = msg->wParam; + const auto lParam = msg->lParam; static QPoint offsetXY; - if(uMsg == WM_WINDOWPOSCHANGING){ - WINDOWPOS* wp = reinterpret_cast(lParam); - if (wp != nullptr && (wp->flags & SWP_NOSIZE) == 0) - { + if (uMsg == WM_WINDOWPOSCHANGING) { + auto *wp = reinterpret_cast(lParam); + if (wp != nullptr && (wp->flags & SWP_NOSIZE) == 0) { wp->flags |= SWP_NOCOPYBITS; *result = ::DefWindowProcW(hwnd, uMsg, wParam, lParam); return true; } return false; - }else if(uMsg == WM_NCCALCSIZE){ + } else if (uMsg == WM_NCCALCSIZE) { const auto clientRect = ((wParam == FALSE) ? reinterpret_cast(lParam) : &(reinterpret_cast(lParam))->rgrc[0]); const LONG originalTop = clientRect->top; const LONG originalLeft = clientRect->left; @@ -140,28 +150,35 @@ bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, *result = hitTestResult; return true; } - int offsetSize = 0; + int offsetSize; bool isMaximum = ::IsZoomed(hwnd); - offsetXY = QPoint(abs(clientRect->left - originalLeft),abs(clientRect->top - originalTop)); - if(isMaximum || _isFullScreen()){ + offsetXY = QPoint(abs(clientRect->left - originalLeft), abs(clientRect->top - originalTop)); + if (isMaximum || _isFullScreen()) { offsetSize = 0; - }else{ + } else { offsetSize = 1; } - if(!isCompositionEnabled()){ + if (!isCompositionEnabled()) { offsetSize = 0; } - if (!isMaximum || QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if (!isMaximum) { clientRect->top = originalTop + offsetSize; clientRect->bottom = originalBottom - offsetSize; clientRect->left = originalLeft + offsetSize; clientRect->right = originalRight - offsetSize; } +#else + clientRect->top = originalTop + offsetSize; + clientRect->bottom = originalBottom - offsetSize; + clientRect->left = originalLeft + offsetSize; + clientRect->right = originalRight - offsetSize; +#endif _setMaximizeHovered(false); *result = WVR_REDRAW; return true; - }else if(uMsg == WM_NCHITTEST){ - if(_hitMaximizeButton()){ + } else if (uMsg == WM_NCHITTEST) { + if (_hitMaximizeButton()) { if (*result == HTNOWHERE) { *result = HTZOOM; } @@ -176,8 +193,8 @@ bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, ::ScreenToClient(hwnd, &nativeLocalPos); RECT clientRect{0, 0, 0, 0}; ::GetClientRect(hwnd, &clientRect); - auto clientWidth = clientRect.right-clientRect.left; - auto clientHeight = clientRect.bottom-clientRect.top; + auto clientWidth = clientRect.right - clientRect.left; + auto clientHeight = clientRect.bottom - clientRect.top; bool left = nativeLocalPos.x < _margins; bool right = nativeLocalPos.x > clientWidth - _margins; bool top = nativeLocalPos.y < _margins; @@ -205,59 +222,59 @@ bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, if (0 != *result) { return true; } - if(_hitAppBar()){ + if (_hitAppBar()) { *result = HTCAPTION; return true; } *result = HTCLIENT; return true; - }else if(uMsg == WM_NCLBUTTONDBLCLK || uMsg == WM_NCLBUTTONDOWN){ - if(_hitMaximizeButton()){ + } else if (uMsg == WM_NCLBUTTONDBLCLK || uMsg == WM_NCLBUTTONDOWN) { + if (_hitMaximizeButton()) { QMouseEvent event = QMouseEvent(QEvent::MouseButtonPress, QPoint(), QPoint(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); - QGuiApplication::sendEvent(_maximizeButton,&event); + QGuiApplication::sendEvent(_maximizeButton, &event); _setMaximizePressed(true); return true; } - }else if(uMsg == WM_NCLBUTTONUP || uMsg == WM_NCRBUTTONUP){ - if(_hitMaximizeButton()){ + } else if (uMsg == WM_NCLBUTTONUP || uMsg == WM_NCRBUTTONUP) { + if (_hitMaximizeButton()) { QMouseEvent event = QMouseEvent(QEvent::MouseButtonRelease, QPoint(), QPoint(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); - QGuiApplication::sendEvent(_maximizeButton,&event); + QGuiApplication::sendEvent(_maximizeButton, &event); _setMaximizePressed(false); return true; } - }else if(uMsg == WM_NCPAINT){ + } else if (uMsg == WM_NCPAINT) { *result = FALSE; return true; - }else if(uMsg == WM_NCACTIVATE){ + } else if (uMsg == WM_NCACTIVATE) { *result = ::DefWindowProcW(hwnd, WM_NCACTIVATE, wParam, -1); return true; - }else if(uMsg == WM_GETMINMAXINFO){ - MINMAXINFO* minmaxInfo = reinterpret_cast(lParam); + } else if (uMsg == WM_GETMINMAXINFO) { + auto *minmaxInfo = reinterpret_cast(lParam); auto pixelRatio = window()->devicePixelRatio(); auto geometry = window()->screen()->availableGeometry(); RECT rect; SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0); minmaxInfo->ptMaxPosition.x = rect.left - offsetXY.x(); minmaxInfo->ptMaxPosition.y = rect.top - offsetXY.x(); - minmaxInfo->ptMaxSize.x = geometry.width()*pixelRatio + offsetXY.x() * 2; - minmaxInfo->ptMaxSize.y = geometry.height()*pixelRatio + offsetXY.y() * 2; + minmaxInfo->ptMaxSize.x = qRound(geometry.width() * pixelRatio) + offsetXY.x() * 2; + minmaxInfo->ptMaxSize.y = qRound(geometry.height() * pixelRatio) + offsetXY.y() * 2; return false; - }else if(uMsg == WM_NCRBUTTONDOWN){ + } else if (uMsg == WM_NCRBUTTONDOWN) { if (wParam == HTCAPTION) { _showSystemMenu(QCursor::pos()); } - }else if(uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN){ + } else if (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN) { const bool altPressed = ((wParam == VK_MENU) || (::GetKeyState(VK_MENU) < 0)); const bool spacePressed = ((wParam == VK_SPACE) || (::GetKeyState(VK_SPACE) < 0)); if (altPressed && spacePressed) { auto pos = window()->position(); - _showSystemMenu(QPoint(pos.x(),pos.y()+_appbar->height())); + _showSystemMenu(QPoint(pos.x(), qRound(pos.y() + _appbar->height()))); } - }else if(uMsg == WM_SYSCOMMAND){ - if(wParam == SC_MINIMIZE){ - if(window()->transientParent()){ + } else if (uMsg == WM_SYSCOMMAND) { + if (wParam == SC_MINIMIZE) { + if (window()->transientParent()) { window()->transientParent()->showMinimized(); - }else{ + } else { window()->showMinimized(); } return true; @@ -265,143 +282,136 @@ bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, return false; } return false; -#endif +#else return false; +#endif } -bool FluFrameless::_isMaximized(){ +bool FluFrameless::_isMaximized() { return window()->visibility() == QWindow::Maximized; } -bool FluFrameless::_isFullScreen(){ +bool FluFrameless::_isFullScreen() { return window()->visibility() == QWindow::FullScreen; } -void FluFrameless::_showSystemMenu(QPoint point){ +void FluFrameless::_showSystemMenu(QPoint point) { #ifdef Q_OS_WIN HWND hwnd = reinterpret_cast(window()->winId()); - DWORD style = ::GetWindowLongPtr(hwnd,GWL_STYLE); + DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE); ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_SYSMENU); - const HMENU hMenu = ::GetSystemMenu(hwnd, FALSE); - if(_isMaximized() || _isFullScreen()){ - ::EnableMenuItem(hMenu,SC_MOVE,MFS_DISABLED); - ::EnableMenuItem(hMenu,SC_RESTORE,MFS_ENABLED); - }else{ - ::EnableMenuItem(hMenu,SC_MOVE,MFS_ENABLED); - ::EnableMenuItem(hMenu,SC_RESTORE,MFS_DISABLED); + auto hMenu = ::GetSystemMenu(hwnd, FALSE); + if (_isMaximized() || _isFullScreen()) { + ::EnableMenuItem(hMenu, SC_MOVE, MFS_DISABLED); + ::EnableMenuItem(hMenu, SC_RESTORE, MFS_ENABLED); + } else { + ::EnableMenuItem(hMenu, SC_MOVE, MFS_ENABLED); + ::EnableMenuItem(hMenu, SC_RESTORE, MFS_DISABLED); } - if(!_fixSize && !_isMaximized() && !_isFullScreen()){ - ::EnableMenuItem(hMenu,SC_SIZE,MFS_ENABLED); - ::EnableMenuItem(hMenu,SC_MAXIMIZE,MFS_ENABLED); - }else{ - ::EnableMenuItem(hMenu,SC_SIZE,MFS_DISABLED); - ::EnableMenuItem(hMenu,SC_MAXIMIZE,MFS_DISABLED); + if (!_fixSize && !_isMaximized() && !_isFullScreen()) { + ::EnableMenuItem(hMenu, SC_SIZE, MFS_ENABLED); + ::EnableMenuItem(hMenu, SC_MAXIMIZE, MFS_ENABLED); + } else { + ::EnableMenuItem(hMenu, SC_SIZE, MFS_DISABLED); + ::EnableMenuItem(hMenu, SC_MAXIMIZE, MFS_DISABLED); } - const int result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), point.x()*window()->devicePixelRatio(), point.y()*window()->devicePixelRatio(), 0, hwnd, nullptr); + const int result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), qRound(point.x() * window()->devicePixelRatio()), + qRound(point.y() * window()->devicePixelRatio()), 0, hwnd, nullptr); if (result != FALSE) { ::PostMessageW(hwnd, WM_SYSCOMMAND, result, 0); } - ::SetWindowLongPtr(hwnd, GWL_STYLE, style &~ WS_SYSMENU); + ::SetWindowLongPtr(hwnd, GWL_STYLE, style & ~WS_SYSMENU); #endif } -bool FluFrameless::_containsCursorToItem(QQuickItem* item){ - if(!item || !item->isVisible()){ - return false; - } - auto point = QCursor::pos(); - auto rect = QRectF(item->mapToGlobal(QPoint(0,0)),item->size()); - if(point.x()>rect.x() && point.x()<(rect.x()+rect.width()) && point.y()>rect.y() && point.y()<(rect.y()+rect.height())){ - return true; - } - return false; -} - -bool FluFrameless::_hitAppBar(){ - foreach (auto item, _hitTestList) { - if(_containsCursorToItem(item)){ +bool FluFrameless::_hitAppBar() { + for (int i = 0; i <= _hitTestList.size() - 1; ++i) { + auto item = _hitTestList.at(i); + if (containsCursorToItem(item)) { return false; } } - if(_containsCursorToItem(_appbar)){ + if (containsCursorToItem(_appbar)) { return true; } return false; } -bool FluFrameless::_hitMaximizeButton(){ - if(_containsCursorToItem(_maximizeButton)){ +bool FluFrameless::_hitMaximizeButton() { + if (containsCursorToItem(_maximizeButton)) { return true; } return false; } -void FluFrameless::_setMaximizePressed(bool val){ - _maximizeButton->setProperty("down",val); +void FluFrameless::_setMaximizePressed(bool val) { + _maximizeButton->setProperty("down", val); } -void FluFrameless::_setMaximizeHovered(bool val){ - _maximizeButton->setProperty("hover",val); +void FluFrameless::_setMaximizeHovered(bool val) { + _maximizeButton->setProperty("hover", val); } -void FluFrameless::_updateCursor(int edges){ +void FluFrameless::_updateCursor(int edges) { switch (edges) { - case 0: - window()->setCursor(Qt::ArrowCursor); - break; - case Qt::LeftEdge: - case Qt::RightEdge: - window()->setCursor(Qt::SizeHorCursor); - break; - case Qt::TopEdge: - case Qt::BottomEdge: - window()->setCursor(Qt::SizeVerCursor); - break; - case Qt::LeftEdge | Qt::TopEdge: - case Qt::RightEdge | Qt::BottomEdge: - window()->setCursor(Qt::SizeFDiagCursor); - break; - case Qt::RightEdge | Qt::TopEdge: - case Qt::LeftEdge | Qt::BottomEdge: - window()->setCursor(Qt::SizeBDiagCursor); - break; + case 0: + window()->setCursor(Qt::ArrowCursor); + break; + case Qt::LeftEdge: + case Qt::RightEdge: + window()->setCursor(Qt::SizeHorCursor); + break; + case Qt::TopEdge: + case Qt::BottomEdge: + window()->setCursor(Qt::SizeVerCursor); + break; + case Qt::LeftEdge | Qt::TopEdge: + case Qt::RightEdge | Qt::BottomEdge: + window()->setCursor(Qt::SizeFDiagCursor); + break; + case Qt::RightEdge | Qt::TopEdge: + case Qt::LeftEdge | Qt::BottomEdge: + window()->setCursor(Qt::SizeBDiagCursor); + break; + default: + break; } } -void FluFrameless::showFullScreen(){ +[[maybe_unused]] void FluFrameless::showFullScreen() { window()->showFullScreen(); } -void FluFrameless::showMaximized(){ +void FluFrameless::showMaximized() { #ifdef Q_OS_WIN HWND hwnd = reinterpret_cast(window()->winId()); - ::ShowWindow(hwnd,3); + ::ShowWindow(hwnd, 3); #else window()->showMaximized(); #endif } -void FluFrameless::showMinimized(){ +[[maybe_unused]] void FluFrameless::showMinimized() { window()->showMinimized(); } -void FluFrameless::showNormal(){ +void FluFrameless::showNormal() { window()->showNormal(); } -void FluFrameless::setHitTestVisible(QQuickItem* val){ - if(!_hitTestList.contains(val)){ +void FluFrameless::setHitTestVisible(QQuickItem *val) { + if (!_hitTestList.contains(val)) { _hitTestList.append(val); } } -void FluFrameless::_setWindowTopmost(bool topmost){ +void FluFrameless::_setWindowTopmost(bool topmost) { #ifdef Q_OS_WIN HWND hwnd = reinterpret_cast(window()->winId()); - if(topmost){ + if (topmost) { ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - }else{ + } else { ::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } #else @@ -409,7 +419,7 @@ void FluFrameless::_setWindowTopmost(bool topmost){ #endif } -bool FluFrameless::eventFilter(QObject *obj, QEvent *ev){ +bool FluFrameless::eventFilter(QObject *obj, QEvent *ev) { #ifndef Q_OS_WIN switch (ev->type()) { case QEvent::MouseButtonPress: diff --git a/src/FluFrameless.h b/src/FluFrameless.h index cce2d0ed..60afec2f 100644 --- a/src/FluFrameless.h +++ b/src/FluFrameless.h @@ -1,5 +1,4 @@ -#ifndef FLUFRAMELESS_H -#define FLUFRAMELESS_H +#pragma once #include #include @@ -15,47 +14,63 @@ using QT_ENTER_EVENT_TYPE = QEvent; #endif -class FluFrameless : public QQuickItem,QAbstractNativeEventFilter -{ - Q_OBJECT - Q_PROPERTY_AUTO(QQuickItem*,appbar) - Q_PROPERTY_AUTO(bool,topmost) - Q_PROPERTY_AUTO(QQuickItem*,maximizeButton) - Q_PROPERTY_AUTO(QQuickItem*,minimizedButton) - Q_PROPERTY_AUTO(QQuickItem*,closeButton) - Q_PROPERTY_AUTO(bool,disabled) - Q_PROPERTY_AUTO(bool,fixSize) +class FluFrameless : public QQuickItem, QAbstractNativeEventFilter { +Q_OBJECT +Q_PROPERTY_AUTO_P(QQuickItem*, appbar) +Q_PROPERTY_AUTO_P(QQuickItem*, maximizeButton) +Q_PROPERTY_AUTO_P(QQuickItem*, minimizedButton) +Q_PROPERTY_AUTO_P(QQuickItem*, closeButton) +Q_PROPERTY_AUTO(bool, topmost) +Q_PROPERTY_AUTO(bool, disabled) +Q_PROPERTY_AUTO(bool, fixSize) QML_NAMED_ELEMENT(FluFrameless) public: - explicit FluFrameless(QQuickItem* parent = nullptr); - ~FluFrameless(); + explicit FluFrameless(QQuickItem *parent = nullptr); + + ~FluFrameless() override; + void componentComplete() override; - bool nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) override; - Q_INVOKABLE void showFullScreen(); + + [[maybe_unused]] bool nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) override; + + Q_INVOKABLE [[maybe_unused]] void showFullScreen(); + Q_INVOKABLE void showMaximized(); - Q_INVOKABLE void showMinimized(); + + Q_INVOKABLE [[maybe_unused]] void showMinimized(); + Q_INVOKABLE void showNormal(); - Q_INVOKABLE void setHitTestVisible(QQuickItem*); - Q_INVOKABLE void onDestruction(); + + Q_INVOKABLE void setHitTestVisible(QQuickItem *); + + Q_INVOKABLE [[maybe_unused]] void onDestruction(); + protected: bool eventFilter(QObject *obj, QEvent *event) override; + private: bool _isFullScreen(); + bool _isMaximized(); + void _updateCursor(int edges); + void _setWindowTopmost(bool topmost); + void _showSystemMenu(QPoint point); - bool _containsCursorToItem(QQuickItem* item); + bool _hitAppBar(); + bool _hitMaximizeButton(); + void _setMaximizePressed(bool val); + void _setMaximizeHovered(bool val); + private: - qint64 _current; + quint64 _current = 0; int _edges = 0; int _margins = 8; - qint64 _clickTimer = 0; + quint64 _clickTimer = 0; QList> _hitTestList; -}; - -#endif // FLUFRAMELESS_H +}; \ No newline at end of file diff --git a/src/FluQrCodeItem.cpp b/src/FluQrCodeItem.cpp index f8ccd9ed..5a0ce90f 100644 --- a/src/FluQrCodeItem.cpp +++ b/src/FluQrCodeItem.cpp @@ -2,51 +2,47 @@ #include "qrcode/qrencode.h" -FluQrCodeItem::FluQrCodeItem(QQuickItem* parent):QQuickPaintedItem(parent){ - color(QColor(0,0,0,255)); - bgColor(QColor(255,255,255,255)); - size(100); +FluQrCodeItem::FluQrCodeItem(QQuickItem *parent) : QQuickPaintedItem(parent) { + _color = QColor(0, 0, 0, 255); + _bgColor = QColor(255, 255, 255, 255); + _size = 100; setWidth(_size); setHeight(_size); - connect(this,&FluQrCodeItem::textChanged,this,[=]{update();}); - connect(this,&FluQrCodeItem::colorChanged,this,[=]{update();}); - connect(this,&FluQrCodeItem::bgColorChanged,this,[=]{update();}); - connect(this,&FluQrCodeItem::sizeChanged,this,[=]{ + connect(this, &FluQrCodeItem::textChanged, this, [=] { update(); }); + connect(this, &FluQrCodeItem::colorChanged, this, [=] { update(); }); + connect(this, &FluQrCodeItem::bgColorChanged, this, [=] { update(); }); + connect(this, &FluQrCodeItem::sizeChanged, this, [=] { setWidth(_size); setHeight(_size); update(); }); } - -void FluQrCodeItem::paint(QPainter* painter){ - if(_text.isEmpty()){ +void FluQrCodeItem::paint(QPainter *painter) { + if (_text.isEmpty()) { return; } - if(_text.length()>1024){ + if (_text.length() > 1024) { return; } painter->save(); QRcode *qrcode = QRcode_encodeString(_text.toUtf8().constData(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1); - qint32 w = width(); - qint32 h = height(); + auto w = qint32(width()); + auto h = qint32(height()); qint32 qrcodeW = qrcode->width > 0 ? qrcode->width : 1; - double scaleX = (double)w / (double)qrcodeW; - double scaleY = (double)h / (double)qrcodeW; + double scaleX = (double) w / (double) qrcodeW; + double scaleY = (double) h / (double) qrcodeW; QImage image = QImage(w, h, QImage::Format_ARGB32); QPainter p(&image); p.setBrush(_bgColor); p.setPen(Qt::NoPen); p.drawRect(0, 0, w, h); p.setBrush(_color); - for (qint32 y = 0; y < qrcodeW; y++) - { - for (qint32 x = 0; x < qrcodeW; x++) - { - unsigned char b = qrcode->data[y*qrcodeW + x]; - if (b & 0x01) - { - QRectF r(x * scaleX,y * scaleY, scaleX, scaleY); + for (qint32 y = 0; y < qrcodeW; y++) { + for (qint32 x = 0; x < qrcodeW; x++) { + unsigned char b = qrcode->data[y * qrcodeW + x]; + if (b & 0x01) { + QRectF r(x * scaleX, y * scaleY, scaleX, scaleY); p.drawRects(&r, 1); } } diff --git a/src/FluQrCodeItem.h b/src/FluQrCodeItem.h index 3e2a5814..0e665d61 100644 --- a/src/FluQrCodeItem.h +++ b/src/FluQrCodeItem.h @@ -1,5 +1,4 @@ -#ifndef FLUQRCODEITEM_H -#define FLUQRCODEITEM_H +#pragma once #include #include @@ -9,17 +8,16 @@ /** * @brief The FluQrCodeItem class */ -class FluQrCodeItem : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(QString,text) - Q_PROPERTY_AUTO(QColor,color) - Q_PROPERTY_AUTO(QColor,bgColor) - Q_PROPERTY_AUTO(int,size); +class FluQrCodeItem : public QQuickPaintedItem { +Q_OBJECT + +Q_PROPERTY_AUTO(QString, text) +Q_PROPERTY_AUTO(QColor, color) +Q_PROPERTY_AUTO(QColor, bgColor) +Q_PROPERTY_AUTO(int, size); QML_NAMED_ELEMENT(FluQrCodeItem) public: explicit FluQrCodeItem(QQuickItem *parent = nullptr); - void paint(QPainter* painter) override; -}; -#endif // FLUQRCODEITEM_H + void paint(QPainter *painter) override; +}; \ No newline at end of file diff --git a/src/FluRectangle.cpp b/src/FluRectangle.cpp index be711054..b6e62246 100644 --- a/src/FluRectangle.cpp +++ b/src/FluRectangle.cpp @@ -1,14 +1,14 @@ #include "FluRectangle.h" #include -FluRectangle::FluRectangle(QQuickItem* parent) : QQuickPaintedItem(parent){ - color(QColor(255,255,255,255)); - radius({0,0,0,0}); - connect(this,&FluRectangle::colorChanged,this,[=]{update();}); - connect(this,&FluRectangle::radiusChanged,this,[=]{update();}); +FluRectangle::FluRectangle(QQuickItem *parent) : QQuickPaintedItem(parent) { + color(QColor(255, 255, 255, 255)); + radius({0, 0, 0, 0}); + connect(this, &FluRectangle::colorChanged, this, [=] { update(); }); + connect(this, &FluRectangle::radiusChanged, this, [=] { update(); }); } -void FluRectangle::paint(QPainter* painter){ +void FluRectangle::paint(QPainter *painter) { painter->save(); painter->setRenderHint(QPainter::Antialiasing); QPainterPath path; @@ -22,6 +22,6 @@ void FluRectangle::paint(QPainter* painter){ path.arcTo(QRectF(QPointF(rect.bottomLeft() - QPointF(0, _radius[3] * 2)), QSize(_radius[3] * 2, _radius[3] * 2)), 180, 90); path.lineTo(rect.bottomRight() - QPointF(_radius[2], 0)); path.arcTo(QRectF(QPointF(rect.bottomRight() - QPointF(_radius[2] * 2, _radius[2] * 2)), QSize(_radius[2] * 2, _radius[2] * 2)), 270, 90); - painter->fillPath(path,_color); + painter->fillPath(path, _color); painter->restore(); } diff --git a/src/FluRectangle.h b/src/FluRectangle.h index 7a505b43..7950d0a8 100644 --- a/src/FluRectangle.h +++ b/src/FluRectangle.h @@ -1,5 +1,4 @@ -#ifndef FLURECTANGLE_H -#define FLURECTANGLE_H +#pragma once #include #include @@ -9,15 +8,13 @@ /** * @brief The FluRectangle class */ -class FluRectangle : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(QColor,color) - Q_PROPERTY_AUTO(QList,radius) +class FluRectangle : public QQuickPaintedItem { +Q_OBJECT +Q_PROPERTY_AUTO(QColor, color) +Q_PROPERTY_AUTO(QList, radius) QML_NAMED_ELEMENT(FluRectangle) public: explicit FluRectangle(QQuickItem *parent = nullptr); - void paint(QPainter* painter) override; -}; -#endif // FLURECTANGLE_H + void paint(QPainter *painter) override; +}; \ No newline at end of file diff --git a/src/FluTableSortProxyModel.cpp b/src/FluTableSortProxyModel.cpp index 4101b630..644f652a 100644 --- a/src/FluTableSortProxyModel.cpp +++ b/src/FluTableSortProxyModel.cpp @@ -2,74 +2,72 @@ #include -FluTableSortProxyModel::FluTableSortProxyModel(QSortFilterProxyModel *parent) - : QSortFilterProxyModel {parent} -{ +FluTableSortProxyModel::FluTableSortProxyModel(QSortFilterProxyModel *parent) : QSortFilterProxyModel{parent} { _model = nullptr; - connect(this,&FluTableSortProxyModel::modelChanged,this,[=]{ + connect(this, &FluTableSortProxyModel::modelChanged, this, [=] { setSourceModel(this->model()); }); } -bool FluTableSortProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const{ +bool FluTableSortProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { QJSValue filter = _filter; - if(filter.isUndefined()){ + if (filter.isUndefined()) { return true; } QJSValueList data; - data<_comparator = comparator; - if(sortOrder()==Qt::AscendingOrder){ - sort(column,Qt::DescendingOrder); - }else{ - sort(column,Qt::AscendingOrder); + if (sortOrder() == Qt::AscendingOrder) { + sort(column, Qt::DescendingOrder); + } else { + sort(column, Qt::AscendingOrder); } } -void FluTableSortProxyModel::setFilter(QJSValue filter){ +[[maybe_unused]] void FluTableSortProxyModel::setFilter(const QJSValue &filter) { this->_filter = filter; invalidateFilter(); } -QVariant FluTableSortProxyModel::getRow(int rowIndex){ +[[maybe_unused]] QVariant FluTableSortProxyModel::getRow(int rowIndex) { QVariant result; - QMetaObject::invokeMethod(_model, "getRow",Q_RETURN_ARG(QVariant, result),Q_ARG(int, mapToSource(index(rowIndex,0)).row())); + QMetaObject::invokeMethod(_model, "getRow", Q_RETURN_ARG(QVariant, result), Q_ARG(int, mapToSource(index(rowIndex, 0)).row())); return result; } -void FluTableSortProxyModel::setRow(int rowIndex,QVariant val){ - QMetaObject::invokeMethod(_model, "setRow",Q_ARG(int, mapToSource(index(rowIndex,0)).row()),Q_ARG(QVariant,val)); +[[maybe_unused]] void FluTableSortProxyModel::setRow(int rowIndex, const QVariant &val) { + QMetaObject::invokeMethod(_model, "setRow", Q_ARG(int, mapToSource(index(rowIndex, 0)).row()), Q_ARG(QVariant, val)); } -void FluTableSortProxyModel::removeRow(int rowIndex,int rows){ - QMetaObject::invokeMethod(_model, "removeRow",Q_ARG(int, mapToSource(index(rowIndex,0)).row()),Q_ARG(int,rows)); +[[maybe_unused]] void FluTableSortProxyModel::removeRow(int rowIndex, int rows) { + QMetaObject::invokeMethod(_model, "removeRow", Q_ARG(int, mapToSource(index(rowIndex, 0)).row()), Q_ARG(int, rows)); } diff --git a/src/FluTableSortProxyModel.h b/src/FluTableSortProxyModel.h index baa1b84c..0cf27849 100644 --- a/src/FluTableSortProxyModel.h +++ b/src/FluTableSortProxyModel.h @@ -1,5 +1,4 @@ -#ifndef FLUTABLESORTPROXYMODEL_H -#define FLUTABLESORTPROXYMODEL_H +#pragma once #include #include @@ -7,24 +6,30 @@ #include #include "stdafx.h" -class FluTableSortProxyModel : public QSortFilterProxyModel -{ - Q_OBJECT - Q_PROPERTY_AUTO(QAbstractTableModel*,model) +class FluTableSortProxyModel : public QSortFilterProxyModel { +Q_OBJECT +Q_PROPERTY_AUTO_P(QAbstractTableModel*, model) QML_NAMED_ELEMENT(FluTableSortProxyModel) public: explicit FluTableSortProxyModel(QSortFilterProxyModel *parent = nullptr); + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; + bool filterAcceptsColumn(int sourceColumn, const QModelIndex &sourceParent) const override; + bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override; - Q_INVOKABLE QVariant getRow(int rowIndex); - Q_INVOKABLE void setRow(int rowIndex,QVariant val); - Q_INVOKABLE void removeRow(int rowIndex,int rows); - Q_INVOKABLE void setComparator(QJSValue comparator); - Q_INVOKABLE void setFilter(QJSValue filter); + + Q_INVOKABLE [[maybe_unused]] QVariant getRow(int rowIndex); + + Q_INVOKABLE [[maybe_unused]] void setRow(int rowIndex, const QVariant &val); + + Q_INVOKABLE [[maybe_unused]] void removeRow(int rowIndex, int rows); + + Q_INVOKABLE [[maybe_unused]] [[maybe_unused]] void setComparator(const QJSValue &comparator); + + Q_INVOKABLE [[maybe_unused]] void setFilter(const QJSValue &filter); + private: QJSValue _filter; QJSValue _comparator; -}; - -#endif // FLUTABLESORTPROXYMODEL_H +}; \ No newline at end of file diff --git a/src/FluTextStyle.cpp b/src/FluTextStyle.cpp index 7e81de1a..1d453716 100644 --- a/src/FluTextStyle.cpp +++ b/src/FluTextStyle.cpp @@ -1,6 +1,6 @@ #include "FluTextStyle.h" -FluTextStyle::FluTextStyle(QObject *parent):QObject{parent}{ +FluTextStyle::FluTextStyle(QObject *parent) : QObject{parent} { _family = QFont().defaultFamily(); #ifdef Q_OS_WIN _family = "微软雅黑"; diff --git a/src/FluTextStyle.h b/src/FluTextStyle.h index 8cbabe45..defa9d1e 100644 --- a/src/FluTextStyle.h +++ b/src/FluTextStyle.h @@ -1,5 +1,4 @@ -#ifndef FLUTEXTSTYLE_H -#define FLUTEXTSTYLE_H +#pragma once #include #include @@ -10,25 +9,25 @@ /** * @brief The FluTextStyle class */ -class FluTextStyle : public QObject -{ - Q_OBJECT +class FluTextStyle : public QObject { +Q_OBJECT public: - Q_PROPERTY_AUTO(QString,family) - Q_PROPERTY_AUTO(QFont,Caption); - Q_PROPERTY_AUTO(QFont,Body); - Q_PROPERTY_AUTO(QFont,BodyStrong); - Q_PROPERTY_AUTO(QFont,Subtitle); - Q_PROPERTY_AUTO(QFont,Title); - Q_PROPERTY_AUTO(QFont,TitleLarge); - Q_PROPERTY_AUTO(QFont,Display); +Q_PROPERTY_AUTO(QString, family) +Q_PROPERTY_AUTO(QFont, Caption); +Q_PROPERTY_AUTO(QFont, Body); +Q_PROPERTY_AUTO(QFont, BodyStrong); +Q_PROPERTY_AUTO(QFont, Subtitle); +Q_PROPERTY_AUTO(QFont, Title); +Q_PROPERTY_AUTO(QFont, TitleLarge); +Q_PROPERTY_AUTO(QFont, Display); QML_NAMED_ELEMENT(FluTextStyle) QML_SINGLETON + private: explicit FluTextStyle(QObject *parent = nullptr); -public: - SINGLETON(FluTextStyle) - static FluTextStyle *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} -}; -#endif // FLUTEXTSTYLE_H +public: +SINGLETON(FluTextStyle) + + static FluTextStyle *create(QQmlEngine *, QJSEngine *) { return getInstance(); } +}; \ No newline at end of file diff --git a/src/FluTheme.cpp b/src/FluTheme.cpp index 7e3c75af..45ece456 100644 --- a/src/FluTheme.cpp +++ b/src/FluTheme.cpp @@ -5,40 +5,45 @@ #include "Def.h" #include "FluColors.h" -FluTheme::FluTheme(QObject *parent):QObject{parent}{ - connect(this,&FluTheme::darkModeChanged,this,[=]{ +bool systemDark() { + QPalette palette = QGuiApplication::palette(); + QColor color = palette.color(QPalette::Window).rgb(); + return color.red() * 0.2126 + color.green() * 0.7152 + color.blue() * 0.0722 <= 255.0f / 2; +} + +FluTheme::FluTheme(QObject *parent) : QObject{parent} { + _accentColor = FluColors::getInstance()->Blue(); + _darkMode = FluThemeType::DarkMode::Light; + _nativeText = false; + _animationEnabled = true; + _systemDark = systemDark(); + QGuiApplication::instance()->installEventFilter(this); + connect(this, &FluTheme::darkModeChanged, this, [=] { Q_EMIT darkChanged(); }); - connect(this,&FluTheme::darkChanged,this,[=]{refreshColors();}); - connect(this,&FluTheme::accentColorChanged,this,[=]{refreshColors();}); - accentColor(FluColors::getInstance()->Blue()); - darkMode(FluThemeType::DarkMode::Light); - nativeText(false); - animationEnabled(true); - _systemDark = systemDark(); - qApp->installEventFilter(this); + connect(this, &FluTheme::darkChanged, this, [=] { refreshColors(); }); + connect(this, &FluTheme::accentColorChanged, this, [=] { refreshColors(); }); + refreshColors(); } -void FluTheme::refreshColors(){ +void FluTheme::refreshColors() { auto isDark = dark(); primaryColor(isDark ? _accentColor->lighter() : _accentColor->dark()); - backgroundColor(isDark ? QColor(0,0,0,255) : QColor(255,255,255,255)); - dividerColor(isDark ? QColor(80,80,80,255) : QColor(210,210,210,255)); - windowBackgroundColor(isDark ? QColor(32,32,32,255) : QColor(237,237,237,255)); - windowActiveBackgroundColor(isDark ? QColor(26,26,26,255) : QColor(243,243,243,255)); - fontPrimaryColor(isDark ? QColor(248,248,248,255) : QColor(7,7,7,255)); - fontSecondaryColor(isDark ? QColor(222,222,222,255) : QColor(102,102,102,255)); - fontTertiaryColor(isDark ? QColor(200,200,200,255) : QColor(153,153,153,255)); - itemNormalColor(isDark ? QColor(255,255,255,0) : QColor(0,0,0,0)); - itemHoverColor(isDark ? QColor(255,255,255,255*0.06) : QColor(0,0,0,255*0.03)); - itemPressColor(isDark ? QColor(255,255,255,255*0.09) : QColor(0,0,0,255*0.06)); - itemCheckColor(isDark ? QColor(255,255,255,255*0.12) : QColor(0,0,0,255*0.09)); + backgroundColor(isDark ? QColor(0, 0, 0, 255) : QColor(255, 255, 255, 255)); + dividerColor(isDark ? QColor(80, 80, 80, 255) : QColor(210, 210, 210, 255)); + windowBackgroundColor(isDark ? QColor(32, 32, 32, 255) : QColor(237, 237, 237, 255)); + windowActiveBackgroundColor(isDark ? QColor(26, 26, 26, 255) : QColor(243, 243, 243, 255)); + fontPrimaryColor(isDark ? QColor(248, 248, 248, 255) : QColor(7, 7, 7, 255)); + fontSecondaryColor(isDark ? QColor(222, 222, 222, 255) : QColor(102, 102, 102, 255)); + fontTertiaryColor(isDark ? QColor(200, 200, 200, 255) : QColor(153, 153, 153, 255)); + itemNormalColor(isDark ? QColor(255, 255, 255, 0) : QColor(0, 0, 0, 0)); + itemHoverColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.06)) : QColor(0, 0, 0, qRound(255 * 0.03))); + itemPressColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.09)) : QColor(0, 0, 0, qRound(255 * 0.06))); + itemCheckColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.12)) : QColor(0, 0, 0, qRound(255 * 0.09))); } -bool FluTheme::eventFilter(QObject *obj, QEvent *event){ - Q_UNUSED(obj); - if (event->type() == QEvent::ApplicationPaletteChange || event->type() == QEvent::ThemeChange) - { +bool FluTheme::eventFilter(QObject *, QEvent *event) { + if (event->type() == QEvent::ApplicationPaletteChange || event->type() == QEvent::ThemeChange) { _systemDark = systemDark(); Q_EMIT darkChanged(); event->accept(); @@ -47,36 +52,28 @@ bool FluTheme::eventFilter(QObject *obj, QEvent *event){ return false; } -QJsonArray FluTheme::awesomeList(const QString& keyword){ +[[maybe_unused]] QJsonArray FluTheme::awesomeList(const QString &keyword) { QJsonArray arr; QMetaEnum enumType = Fluent_Awesome::staticMetaObject.enumerator(Fluent_Awesome::staticMetaObject.indexOfEnumerator("Fluent_AwesomeType")); - for(int i=0; i < enumType.keyCount(); ++i){ + for (int i = 0; i <= enumType.keyCount() - 1; ++i) { QString name = enumType.key(i); int icon = enumType.value(i); - if(keyword.isEmpty() || name.contains(keyword)){ + if (keyword.isEmpty() || name.contains(keyword)) { QJsonObject obj; - obj.insert("name",name); - obj.insert("icon",icon); + obj.insert("name", name); + obj.insert("icon", icon); arr.append(obj); } } return arr; } -bool FluTheme::systemDark(){ - QPalette palette = qApp->palette(); - QColor color = palette.color(QPalette::Window).rgb(); - return !(color.red() * 0.2126 + color.green() * 0.7152 + color.blue() * 0.0722 > 255 / 2); -} - -bool FluTheme::dark(){ - if(_darkMode == FluThemeType::DarkMode::Dark){ +bool FluTheme::dark() const { + if (_darkMode == FluThemeType::DarkMode::Dark) { return true; - }else if(_darkMode == FluThemeType::DarkMode::Light){ - return false; - }else if(_darkMode == FluThemeType::DarkMode::System){ + } else if (_darkMode == FluThemeType::DarkMode::System) { return _systemDark; - }else{ + } else { return false; } } diff --git a/src/FluTheme.h b/src/FluTheme.h index b36da840..6b5cf5bc 100644 --- a/src/FluTheme.h +++ b/src/FluTheme.h @@ -13,39 +13,46 @@ /** * @brief The FluTheme class */ -class FluTheme : public QObject -{ - Q_OBJECT +class FluTheme : public QObject { +Q_OBJECT Q_PROPERTY(bool dark READ dark NOTIFY darkChanged) - Q_PROPERTY_AUTO(FluAccentColor*,accentColor); - Q_PROPERTY_AUTO(QColor,primaryColor); - Q_PROPERTY_AUTO(QColor,backgroundColor); - Q_PROPERTY_AUTO(QColor,dividerColor); - Q_PROPERTY_AUTO(QColor,windowBackgroundColor); - Q_PROPERTY_AUTO(QColor,windowActiveBackgroundColor); - Q_PROPERTY_AUTO(QColor,fontPrimaryColor); - Q_PROPERTY_AUTO(QColor,fontSecondaryColor); - Q_PROPERTY_AUTO(QColor,fontTertiaryColor); - Q_PROPERTY_AUTO(QColor,itemNormalColor); - Q_PROPERTY_AUTO(QColor,itemHoverColor); - Q_PROPERTY_AUTO(QColor,itemPressColor); - Q_PROPERTY_AUTO(QColor,itemCheckColor); - Q_PROPERTY_AUTO(int,darkMode); - Q_PROPERTY_AUTO(bool,nativeText); - Q_PROPERTY_AUTO(bool,animationEnabled); +Q_PROPERTY_AUTO_P(FluAccentColor*, accentColor); +Q_PROPERTY_AUTO(QColor, primaryColor); +Q_PROPERTY_AUTO(QColor, backgroundColor); +Q_PROPERTY_AUTO(QColor, dividerColor); +Q_PROPERTY_AUTO(QColor, windowBackgroundColor); +Q_PROPERTY_AUTO(QColor, windowActiveBackgroundColor); +Q_PROPERTY_AUTO(QColor, fontPrimaryColor); +Q_PROPERTY_AUTO(QColor, fontSecondaryColor); +Q_PROPERTY_AUTO(QColor, fontTertiaryColor); +Q_PROPERTY_AUTO(QColor, itemNormalColor); +Q_PROPERTY_AUTO(QColor, itemHoverColor); +Q_PROPERTY_AUTO(QColor, itemPressColor); +Q_PROPERTY_AUTO(QColor, itemCheckColor); +Q_PROPERTY_AUTO(int, darkMode); +Q_PROPERTY_AUTO(bool, nativeText); +Q_PROPERTY_AUTO(bool, animationEnabled); QML_NAMED_ELEMENT(FluTheme) QML_SINGLETON + private: explicit FluTheme(QObject *parent = nullptr); - bool eventFilter(QObject *obj, QEvent *event); - bool systemDark(); + + bool eventFilter(QObject *obj, QEvent *event) override; + void refreshColors(); + public: - SINGLETON(FluTheme) - Q_INVOKABLE QJsonArray awesomeList(const QString& keyword = ""); +SINGLETON(FluTheme) + + Q_INVOKABLE [[maybe_unused]] static QJsonArray awesomeList(const QString &keyword = ""); + Q_SIGNAL void darkChanged(); - static FluTheme *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} - bool dark(); + + static FluTheme *create(QQmlEngine *, QJSEngine *) { return getInstance(); } + + bool dark() const; + private: bool _systemDark; }; diff --git a/src/FluTools.cpp b/src/FluTools.cpp index 47473811..22d2c85d 100644 --- a/src/FluTools.cpp +++ b/src/FluTools.cpp @@ -1,3 +1,7 @@ +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" +#pragma ide diagnostic ignored "readability-convert-member-functions-to-static" + #include "FluTools.h" #include @@ -16,19 +20,19 @@ #include #include -FluTools::FluTools(QObject *parent):QObject{parent}{ +FluTools::FluTools(QObject *parent) : QObject{parent} { } -void FluTools::clipText(const QString& text){ +void FluTools::clipText(const QString &text) { QGuiApplication::clipboard()->setText(text); } -QString FluTools::uuid(){ +QString FluTools::uuid() { return QUuid::createUuid().toString().remove('-').remove('{').remove('}'); } -QString FluTools::readFile(const QString &fileName){ +QString FluTools::readFile(const QString &fileName) { QString content; QFile file(fileName); if (file.open(QIODevice::ReadOnly)) { @@ -38,7 +42,7 @@ QString FluTools::readFile(const QString &fileName){ return content; } -bool FluTools::isMacos(){ +bool FluTools::isMacos() { #if defined(Q_OS_MACOS) return true; #else @@ -46,7 +50,7 @@ bool FluTools::isMacos(){ #endif } -bool FluTools::isLinux(){ +bool FluTools::isLinux() { #if defined(Q_OS_LINUX) return true; #else @@ -54,7 +58,7 @@ bool FluTools::isLinux(){ #endif } -bool FluTools::isWin(){ +bool FluTools::isWin() { #if defined(Q_OS_WIN) return true; #else @@ -62,95 +66,94 @@ bool FluTools::isWin(){ #endif } -int FluTools::qtMajor(){ +int FluTools::qtMajor() { const QString qtVersion = QString::fromLatin1(qVersion()); const QStringList versionParts = qtVersion.split('.'); return versionParts[0].toInt(); } -int FluTools::qtMinor(){ +int FluTools::qtMinor() { const QString qtVersion = QString::fromLatin1(qVersion()); const QStringList versionParts = qtVersion.split('.'); return versionParts[1].toInt(); } -void FluTools::setQuitOnLastWindowClosed(bool val){ - qApp->setQuitOnLastWindowClosed(val); +void FluTools::setQuitOnLastWindowClosed(bool val) { + QGuiApplication::setQuitOnLastWindowClosed(val); } -void FluTools::setOverrideCursor(Qt::CursorShape shape){ - qApp->setOverrideCursor(QCursor(shape)); +void FluTools::setOverrideCursor(Qt::CursorShape shape) { + QGuiApplication::setOverrideCursor(QCursor(shape)); } -void FluTools::restoreOverrideCursor(){ - qApp->restoreOverrideCursor(); +void FluTools::restoreOverrideCursor() { + QGuiApplication::restoreOverrideCursor(); } -void FluTools::deleteLater(QObject *p){ - if(p){ +void FluTools::deleteLater(QObject *p) { + if (p) { p->deleteLater(); - p = nullptr; } } -QString FluTools::toLocalPath(const QUrl& url){ +QString FluTools::toLocalPath(const QUrl &url) { return url.toLocalFile(); } -QString FluTools::getFileNameByUrl(const QUrl& url){ +QString FluTools::getFileNameByUrl(const QUrl &url) { return QFileInfo(url.toLocalFile()).fileName(); } -QString FluTools::html2PlantText(const QString& html){ +QString FluTools::html2PlantText(const QString &html) { QTextDocument textDocument; textDocument.setHtml(html); return textDocument.toPlainText(); } -QRect FluTools::getVirtualGeometry(){ - return qApp->primaryScreen()->virtualGeometry(); +QRect FluTools::getVirtualGeometry() { + return QGuiApplication::primaryScreen()->virtualGeometry(); } -QString FluTools::getApplicationDirPath(){ - return qApp->applicationDirPath(); +QString FluTools::getApplicationDirPath() { + return QGuiApplication::applicationDirPath(); } -QUrl FluTools::getUrlByFilePath(const QString& path){ +QUrl FluTools::getUrlByFilePath(const QString &path) { return QUrl::fromLocalFile(path); } -QColor FluTools::withOpacity(const QColor& color,qreal opacity){ +QColor FluTools::withOpacity(const QColor &color, qreal opacity) { int alpha = qRound(opacity * 255) & 0xff; return QColor::fromRgba((alpha << 24) | (color.rgba() & 0xffffff)); } -QString FluTools::md5(QString text){ +QString FluTools::md5(const QString &text) { return QCryptographicHash::hash(text.toUtf8(), QCryptographicHash::Md5).toHex(); } -QString FluTools::toBase64(QString text){ +QString FluTools::toBase64(const QString &text) { return text.toUtf8().toBase64(); } -QString FluTools::fromBase64(QString text){ +QString FluTools::fromBase64(const QString &text) { return QByteArray::fromBase64(text.toUtf8()); } -bool FluTools::removeDir(QString dirPath){ +bool FluTools::removeDir(const QString &dirPath) { QDir qDir(dirPath); return qDir.removeRecursively(); } -bool FluTools::removeFile(QString filePath){ +bool FluTools::removeFile(const QString &filePath) { QFile file(filePath); return file.remove(); } -QString FluTools::sha256(QString text){ +QString FluTools::sha256(const QString &text) { return QCryptographicHash::hash(text.toUtf8(), QCryptographicHash::Sha256).toHex(); } -void FluTools::showFileInFolder(QString path){ +void FluTools::showFileInFolder(const QString &path) { #if defined(Q_OS_WIN) QProcess::startDetached("explorer.exe", {"/select,", QDir::toNativeSeparators(path)}); #endif @@ -166,29 +169,29 @@ void FluTools::showFileInFolder(QString path){ #endif } -bool FluTools::isSoftware(){ +bool FluTools::isSoftware() { return QQuickWindow::sceneGraphBackend() == "software"; } -QPoint FluTools::cursorPos(){ +QPoint FluTools::cursorPos() { return QCursor::pos(); } -qint64 FluTools::currentTimestamp(){ +qint64 FluTools::currentTimestamp() { return QDateTime::currentMSecsSinceEpoch(); } -QIcon FluTools::windowIcon(){ +QIcon FluTools::windowIcon() { return QGuiApplication::windowIcon(); } -int FluTools::cursorScreenIndex(){ +int FluTools::cursorScreenIndex() { int screenIndex = 0; - int screenCount = qApp->screens().count(); + int screenCount = QGuiApplication::screens().count(); if (screenCount > 1) { QPoint pos = QCursor::pos(); - for (int i = 0; i < screenCount; ++i) { - if (qApp->screens().at(i)->geometry().contains(pos)) { + for (int i = 0; i <= screenCount - 1; ++i) { + if (QGuiApplication::screens().at(i)->geometry().contains(pos)) { screenIndex = i; break; } @@ -197,9 +200,9 @@ int FluTools::cursorScreenIndex(){ return screenIndex; } -int FluTools::windowBuildNumber(){ +int FluTools::windowBuildNumber() { #if defined(Q_OS_WIN) - QSettings regKey {QString::fromUtf8("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), QSettings::NativeFormat}; + QSettings regKey{QString::fromUtf8(R"(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)"), QSettings::NativeFormat}; if (regKey.contains(QString::fromUtf8("CurrentBuildNumber"))) { auto buildNumber = regKey.value(QString::fromUtf8("CurrentBuildNumber")).toInt(); return buildNumber; @@ -208,40 +211,42 @@ int FluTools::windowBuildNumber(){ return -1; } -bool FluTools::isWindows11OrGreater(){ +bool FluTools::isWindows11OrGreater() { static QVariant var; - if(var.isNull()){ + if (var.isNull()) { #if defined(Q_OS_WIN) auto buildNumber = windowBuildNumber(); - if(buildNumber>=22000){ + if (buildNumber >= 22000) { var = QVariant::fromValue(true); return true; } #endif var = QVariant::fromValue(false); - return false; - }else{ + return false; + } else { return var.toBool(); } } -bool FluTools::isWindows10OrGreater(){ +bool FluTools::isWindows10OrGreater() { static QVariant var; - if(var.isNull()){ + if (var.isNull()) { #if defined(Q_OS_WIN) auto buildNumber = windowBuildNumber(); - if(buildNumber>=10240){ + if (buildNumber >= 10240) { var = QVariant::fromValue(true); return true; } #endif var = QVariant::fromValue(false); - return false; - }else{ + return false; + } else { return var.toBool(); } } -QRect FluTools::desktopAvailableGeometry(QQuickWindow* window){ +QRect FluTools::desktopAvailableGeometry(QQuickWindow *window) { return window->screen()->availableGeometry(); } + +#pragma clang diagnostic pop \ No newline at end of file diff --git a/src/FluTools.h b/src/FluTools.h index 60b8b3a3..0b97da3a 100644 --- a/src/FluTools.h +++ b/src/FluTools.h @@ -1,5 +1,6 @@ -#ifndef FLUTOOLS_H -#define FLUTOOLS_H +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" +#pragma once #include #include @@ -11,51 +12,88 @@ /** * @brief The FluTools class */ -class FluTools : public QObject -{ - Q_OBJECT +class FluTools : public QObject { +Q_OBJECT QML_NAMED_ELEMENT(FluTools) QML_SINGLETON + private: explicit FluTools(QObject *parent = nullptr); + public: - SINGLETON(FluTools) - static FluTools *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} +SINGLETON(FluTools) + + static FluTools *create(QQmlEngine *, QJSEngine *) { return getInstance(); } + Q_INVOKABLE int qtMajor(); + Q_INVOKABLE int qtMinor(); + Q_INVOKABLE bool isMacos(); + Q_INVOKABLE bool isLinux(); + Q_INVOKABLE bool isWin(); - Q_INVOKABLE void clipText(const QString& text); + + Q_INVOKABLE void clipText(const QString &text); + Q_INVOKABLE QString uuid(); - Q_INVOKABLE QString readFile(const QString& fileName); + + Q_INVOKABLE QString readFile(const QString &fileName); + Q_INVOKABLE void setQuitOnLastWindowClosed(bool val); + Q_INVOKABLE void setOverrideCursor(Qt::CursorShape shape); + Q_INVOKABLE void restoreOverrideCursor(); - Q_INVOKABLE QString html2PlantText(const QString& html); - Q_INVOKABLE QString toLocalPath(const QUrl& url); + + Q_INVOKABLE QString html2PlantText(const QString &html); + + Q_INVOKABLE QString toLocalPath(const QUrl &url); + Q_INVOKABLE void deleteLater(QObject *p); - Q_INVOKABLE QString getFileNameByUrl(const QUrl& url); + + Q_INVOKABLE QString getFileNameByUrl(const QUrl &url); + Q_INVOKABLE QRect getVirtualGeometry(); + Q_INVOKABLE QString getApplicationDirPath(); - Q_INVOKABLE QUrl getUrlByFilePath(const QString& path); - Q_INVOKABLE QColor withOpacity(const QColor&,qreal alpha); - Q_INVOKABLE QString md5(QString text); - Q_INVOKABLE QString sha256(QString text); - Q_INVOKABLE QString toBase64(QString text); - Q_INVOKABLE QString fromBase64(QString text); - Q_INVOKABLE bool removeDir(QString dirPath); - Q_INVOKABLE bool removeFile(QString filePath); - Q_INVOKABLE void showFileInFolder(QString path); + + Q_INVOKABLE QUrl getUrlByFilePath(const QString &path); + + Q_INVOKABLE QColor withOpacity(const QColor &, qreal alpha); + + Q_INVOKABLE QString md5(const QString &text); + + Q_INVOKABLE QString sha256(const QString &text); + + Q_INVOKABLE QString toBase64(const QString &text); + + Q_INVOKABLE QString fromBase64(const QString &text); + + Q_INVOKABLE bool removeDir(const QString &dirPath); + + Q_INVOKABLE bool removeFile(const QString &filePath); + + Q_INVOKABLE void showFileInFolder(const QString &path); + Q_INVOKABLE bool isSoftware(); + Q_INVOKABLE qint64 currentTimestamp(); + Q_INVOKABLE QPoint cursorPos(); + Q_INVOKABLE QIcon windowIcon(); + Q_INVOKABLE int cursorScreenIndex(); + Q_INVOKABLE int windowBuildNumber(); + Q_INVOKABLE bool isWindows11OrGreater(); + Q_INVOKABLE bool isWindows10OrGreater(); - Q_INVOKABLE QRect desktopAvailableGeometry(QQuickWindow* window); + + Q_INVOKABLE QRect desktopAvailableGeometry(QQuickWindow *window); }; -#endif // FLUTOOLS_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/src/FluTreeModel.cpp b/src/FluTreeModel.cpp index d2c3b5b9..fd94b58d 100644 --- a/src/FluTreeModel.cpp +++ b/src/FluTreeModel.cpp @@ -1,75 +1,80 @@ +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" +#pragma ide diagnostic ignored "google-default-arguments" + #include "FluTreeModel.h" #include +#include -FluTreeNode::FluTreeNode(QObject *parent): QObject{parent}{ +FluTreeNode::FluTreeNode(QObject *parent) : QObject{parent} { } -FluTreeModel::FluTreeModel(QObject *parent): QAbstractItemModel{parent}{ - dataSourceSize(0); +FluTreeModel::FluTreeModel(QObject *parent) : QAbstractItemModel{parent} { + _dataSourceSize = 0; } -QModelIndex FluTreeModel::parent(const QModelIndex &child) const{ - return QModelIndex(); +QModelIndex FluTreeModel::parent(const QModelIndex &child) const { + return {}; } -QModelIndex FluTreeModel::index(int row, int column,const QModelIndex &parent) const{ +QModelIndex FluTreeModel::index(int row, int column, const QModelIndex &parent) const { if (!hasIndex(row, column, parent) || parent.isValid()) - return QModelIndex(); + return {}; return createIndex(row, column, _rows.at(row)); } int FluTreeModel::rowCount(const QModelIndex &parent) const { return _rows.count(); -}; +} int FluTreeModel::columnCount(const QModelIndex &parent) const { return this->_columnSource.size(); -}; +} QVariant FluTreeModel::data(const QModelIndex &index, int role) const { switch (role) { - case TreeModelRoles::RowModel: - return QVariant::fromValue(_rows.at(index.row())); - case TreeModelRoles::ColumnModel: - return QVariant::fromValue(_columnSource.at(index.column())); - default: - break; + case TreeModelRoles::RowModel: + return QVariant::fromValue(_rows.at(index.row())); + case TreeModelRoles::ColumnModel: + return QVariant::fromValue(_columnSource.at(index.column())); + default: + break; } - return QVariant(); -}; + return {}; +} QHash FluTreeModel::roleNames() const { return { - {TreeModelRoles::RowModel, "rowModel"}, - {TreeModelRoles::ColumnModel, "columnModel"} + {TreeModelRoles::RowModel, "rowModel"}, + {TreeModelRoles::ColumnModel, "columnModel"} }; -}; +} -void FluTreeModel::setData(QList data){ +void FluTreeModel::setData(QList data) { beginResetModel(); - _rows = data; + _rows = std::move(data); endResetModel(); } -void FluTreeModel::removeRows(int row,int count){ - if (row < 0 || row + count > _rows.size() || count==0) +void FluTreeModel::removeRows(int row, int count) { + if (row < 0 || row + count > _rows.size() || count == 0) return; - beginRemoveRows(QModelIndex(),row, row + count - 1); - QList firstPart = _rows.mid(0,row); - QList secondPart = _rows.mid(row + count); + beginRemoveRows(QModelIndex(), row, row + count - 1); + QList firstPart = _rows.mid(0, row); + QList secondPart = _rows.mid(row + count); _rows.clear(); _rows.append(firstPart); _rows.append(secondPart); endRemoveRows(); } -void FluTreeModel::insertRows(int row,QList data){ - if (row < 0 || row > _rows.size() || data.size() == 0) - return;; +void FluTreeModel::insertRows(int row, const QList &data) { + if (row < 0 || row > _rows.size() || data.empty()) + return; beginInsertRows(QModelIndex(), row, row + data.size() - 1); - QList firstPart = _rows.mid(0, row); - QList secondPart = _rows.mid(row); + QList firstPart = _rows.mid(0, row); + QList secondPart = _rows.mid(row); _rows.clear(); _rows.append(firstPart); _rows.append(data); @@ -77,83 +82,83 @@ void FluTreeModel::insertRows(int row,QList data){ endInsertRows(); } -QObject* FluTreeModel::getRow(int row){ +QObject *FluTreeModel::getRow(int row) { return _rows.at(row); } -void FluTreeModel::setRow(int row,QVariantMap data){ - _rows.at(row)->_data = data; - Q_EMIT dataChanged(index(row,0),index(row,columnCount()-1)); +void FluTreeModel::setRow(int row, QVariantMap data) { + _rows.at(row)->_data = std::move(data); + Q_EMIT dataChanged(index(row, 0), index(row, columnCount() - 1)); } -void FluTreeModel::checkRow(int row,bool checked){ +void FluTreeModel::checkRow(int row, bool checked) { auto itemData = _rows.at(row); - if(itemData->hasChildren()){ - QList stack = itemData->_children; + if (itemData->hasChildren()) { + QList stack = itemData->_children; std::reverse(stack.begin(), stack.end()); while (stack.count() > 0) { - auto item = stack.at(stack.count()-1); + auto item = stack.at(stack.count() - 1); stack.pop_back(); - if(!item->hasChildren()){ + if (!item->hasChildren()) { item->_checked = checked; } - QList children = item->_children; - if(!children.isEmpty()){ + QList children = item->_children; + if (!children.isEmpty()) { std::reverse(children.begin(), children.end()); - foreach (auto c, children) { - stack.append(c); - } + foreach (auto c, children) { + stack.append(c); + } } } - }else{ - if(itemData->_checked == checked){ + } else { + if (itemData->_checked == checked) { return; } itemData->_checked = checked; } - Q_EMIT dataChanged(index(0,0),index(rowCount()-1,0)); - QList data; - foreach (auto item, _dataSource) { - if(!item->hasChildren()){ - if(item->_checked){ - data.append(item); + Q_EMIT dataChanged(index(0, 0), index(rowCount() - 1, 0)); + QList data; + foreach (auto item, _dataSource) { + if (!item->hasChildren()) { + if (item->_checked) { + data.append(item); + } } } - } selectionModel(data); } -void FluTreeModel::setDataSource(QList> data){ +void FluTreeModel::setDataSource(QList> data) { _dataSource.clear(); - if(_root){ + if (_root) { delete _root; _root = nullptr; } _root = new FluTreeNode(this); std::reverse(data.begin(), data.end()); while (data.count() > 0) { - auto item = data.at(data.count()-1); + auto item = data.at(data.count() - 1); data.pop_back(); - FluTreeNode* node = new FluTreeNode(this); + auto *node = new FluTreeNode(this); node->_depth = item.value("__depth").toInt(); - node->_parent = item.value("__parent").value(); + node->_parent = item.value("__parent").value(); node->_data = item; node->_isExpanded = true; - if(node->_parent){ + if (node->_parent) { node->_parent->_children.append(node); - }else{ + } else { node->_parent = _root; _root->_children.append(node); } _dataSource.append(node); if (item.contains("children")) { QList children = item.value("children").toList(); - if(!children.isEmpty()){ + if (!children.isEmpty()) { std::reverse(children.begin(), children.end()); - for (int i = 0; i < children.count(); ++i) { + for (int i = 0; i <= children.count() - 1; ++i) { auto child = children.at(i).toMap(); - child.insert("__depth",item.value("__depth").toInt(0)+1); - child.insert("__parent",QVariant::fromValue(node)); + child.insert("__depth", item.value("__depth").toInt(nullptr) + 1); + child.insert("__parent", QVariant::fromValue(node)); data.append(child); } } @@ -165,108 +170,111 @@ void FluTreeModel::setDataSource(QList> data){ dataSourceSize(_dataSource.size()); } -void FluTreeModel::collapse(int row){ - if(!_rows.at(row)->_isExpanded){ +void FluTreeModel::collapse(int row) { + if (!_rows.at(row)->_isExpanded) { return; } _rows.at(row)->_isExpanded = false; - Q_EMIT dataChanged(index(row,0),index(row,0)); + Q_EMIT dataChanged(index(row, 0), index(row, 0)); auto modelData = _rows.at(row); int removeCount = 0; - for(int i=row+1;i<_rows.count();i++){ + for (int i = row + 1; i < _rows.count(); i++) { auto obj = _rows[i]; - if(obj->_depth<=modelData->_depth){ + if (obj->_depth <= modelData->_depth) { break; } removeCount = removeCount + 1; } - removeRows(row+1,removeCount); + removeRows(row + 1, removeCount); } -void FluTreeModel::expand(int row){ - if(_rows.at(row)->_isExpanded){ +void FluTreeModel::expand(int row) { + if (_rows.at(row)->_isExpanded) { return; } _rows.at(row)->_isExpanded = true; - Q_EMIT dataChanged(index(row,0),index(row,0)); + Q_EMIT dataChanged(index(row, 0), index(row, 0)); auto modelData = _rows.at(row); - QList insertData; - QList stack = modelData->_children; + QList insertData; + QList stack = modelData->_children; std::reverse(stack.begin(), stack.end()); while (stack.count() > 0) { - auto item = stack.at(stack.count()-1); + auto item = stack.at(stack.count() - 1); stack.pop_back(); - if(item->isShown()){ + if (item->isShown()) { insertData.append(item); } - QList children = item->_children; - if(!children.isEmpty()){ + QList children = item->_children; + if (!children.isEmpty()) { std::reverse(children.begin(), children.end()); - foreach (auto c, children) { - stack.append(c); - } + foreach (auto c, children) { + stack.append(c); + } } } - insertRows(row+1,insertData); + insertRows(row + 1, insertData); } -bool FluTreeModel::hitHasChildrenExpanded(int row){ +bool FluTreeModel::hitHasChildrenExpanded(int row) { auto itemData = _rows.at(row); - if(itemData->hasChildren() && itemData->_isExpanded){ + if (itemData->hasChildren() && itemData->_isExpanded) { return true; } return false; } -void FluTreeModel::refreshNode(int row){ - Q_EMIT dataChanged(index(row,0),index(row,0)); -}; +void FluTreeModel::refreshNode(int row) { + Q_EMIT dataChanged(index(row, 0), index(row, 0)); +} -FluTreeNode* FluTreeModel::getNode(int row){ +FluTreeNode *FluTreeModel::getNode(int row) { return _rows.at(row); } -void FluTreeModel::allExpand(){ +void FluTreeModel::allExpand() { beginResetModel(); - QList data; - QList stack = _root->_children; + QList data; + QList stack = _root->_children; std::reverse(stack.begin(), stack.end()); while (stack.count() > 0) { - auto item = stack.at(stack.count()-1); + auto item = stack.at(stack.count() - 1); stack.pop_back(); - if(item->hasChildren()){ + if (item->hasChildren()) { item->_isExpanded = true; } data.append(item); - QList children = item->_children; - if(!children.isEmpty()){ + QList children = item->_children; + if (!children.isEmpty()) { std::reverse(children.begin(), children.end()); - foreach (auto c, children) { - stack.append(c); - } + foreach (auto c, children) { + stack.append(c); + } } } _rows = data; endResetModel(); } -void FluTreeModel::allCollapse(){ + +void FluTreeModel::allCollapse() { beginResetModel(); - QList stack = _root->_children; + QList stack = _root->_children; std::reverse(stack.begin(), stack.end()); while (stack.count() > 0) { - auto item = stack.at(stack.count()-1); + auto item = stack.at(stack.count() - 1); stack.pop_back(); - if(item->hasChildren()){ + if (item->hasChildren()) { item->_isExpanded = false; } - QList children = item->_children; - if(!children.isEmpty()){ + QList children = item->_children; + if (!children.isEmpty()) { std::reverse(children.begin(), children.end()); - foreach (auto c, children) { - stack.append(c); - } + foreach (auto c, children) { + stack.append(c); + } } } _rows = _root->_children; endResetModel(); } + +#pragma clang diagnostic pop \ No newline at end of file diff --git a/src/FluTreeModel.h b/src/FluTreeModel.h index a64e1efb..d46fa250 100644 --- a/src/FluTreeModel.h +++ b/src/FluTreeModel.h @@ -1,5 +1,7 @@ -#ifndef FLUTREEMODEL_H -#define FLUTREEMODEL_H +#pragma clang diagnostic push +#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" +#pragma ide diagnostic ignored "google-default-arguments" +#pragma once #include #include @@ -11,79 +13,82 @@ /** * @brief The FluTreeNode class */ -class FluTreeNode : public QObject{ - Q_OBJECT +class FluTreeNode : public QObject { +Q_OBJECT Q_PROPERTY(QVariantMap data READ data CONSTANT) Q_PROPERTY(int depth READ depth CONSTANT) Q_PROPERTY(bool isExpanded READ isExpanded CONSTANT) Q_PROPERTY(bool checked READ checked CONSTANT) public: explicit FluTreeNode(QObject *parent = nullptr); - Q_INVOKABLE int depth(){return _depth;}; - Q_INVOKABLE bool isExpanded(){return _isExpanded;}; - Q_INVOKABLE QVariantMap data(){return _data;}; - Q_INVOKABLE bool hasChildren(){ return !_children.isEmpty();}; - Q_INVOKABLE bool hasNextNodeByIndex(int index){ - FluTreeNode* p = this; - for(int i=0;i<(_depth - index -1);i++){ + + Q_INVOKABLE [[nodiscard]] int depth() const { return _depth; }; + Q_INVOKABLE [[nodiscard]] bool isExpanded() const { return _isExpanded; }; + Q_INVOKABLE [[nodiscard]] QVariantMap data() const { return _data; }; + Q_INVOKABLE [[nodiscard]] bool hasChildren() const { return !_children.isEmpty(); }; + Q_INVOKABLE bool hasNextNodeByIndex(int index) { + FluTreeNode *p = this; + for (int i = 0; i <= _depth - index - 1; i++) { p = p->_parent; } - if(p->_parent->_children.indexOf(p) == p->_parent->_children.count()-1){ + if (p->_parent->_children.indexOf(p) == p->_parent->_children.count() - 1) { return false; } return true; } - Q_INVOKABLE bool checked(){ - if(!hasChildren()){ + + Q_INVOKABLE [[nodiscard]] bool checked() const { + if (!hasChildren()) { return _checked; } - foreach (auto item, _children) { - if(!item->checked()){ - + for (int i = 0; i <= _children.size() - 1; ++i) { + auto item = _children.at(i); + if (!item->checked()) { return false; } } return true; }; - Q_INVOKABLE bool hideLineFooter(){ - if(_parent){ - auto childIndex = _parent->_children.indexOf(this); - if(childIndex==_parent->_children.count()-1){ + Q_INVOKABLE bool hideLineFooter() { + if (_parent) { + auto childIndex = _parent->_children.indexOf(this); + if (childIndex == _parent->_children.count() - 1) { return true; } - if(_parent->_children.at(childIndex+1)->hasChildren()){ + if (_parent->_children.at(childIndex + 1)->hasChildren()) { return true; } return false; } return false; }; - bool isShown(){ + + [[nodiscard]] bool isShown() const { auto p = _parent; while (p) { - if(!p->_isExpanded){ + if (!p->_isExpanded) { return false; } p = p->_parent; } return true; } + public: - QString _title=""; - int _depth=0; + QString _title = ""; + int _depth = 0; bool _checked = false; - bool _isExpanded=true; + bool _isExpanded = true; QVariantMap _data; - QList _children; - FluTreeNode* _parent = nullptr; + QList _children; + FluTreeNode *_parent = nullptr; }; -class FluTreeModel : public QAbstractItemModel -{ - Q_OBJECT - Q_PROPERTY_AUTO(int,dataSourceSize) - Q_PROPERTY_AUTO(QList,selectionModel) - Q_PROPERTY_AUTO(QList,columnSource) +class FluTreeModel : public QAbstractItemModel { +Q_OBJECT +Q_PROPERTY_AUTO(int, dataSourceSize) +Q_PROPERTY_AUTO(QList, selectionModel) +Q_PROPERTY_AUTO(QList, columnSource) QML_NAMED_ELEMENT(FluTreeModel) QML_ADDED_IN_MINOR_VERSION(1) public: @@ -91,32 +96,53 @@ public: RowModel = 0x0101, ColumnModel = 0x0102 }; - explicit FluTreeModel(QObject *parent = nullptr); - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - QHash roleNames() const override; - QModelIndex parent(const QModelIndex &child) const override; - QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const override; - Q_INVOKABLE void removeRows(int row,int count); - Q_INVOKABLE void insertRows(int row,QList data); - Q_INVOKABLE QObject* getRow(int row); - Q_INVOKABLE void setRow(int row,QVariantMap data); - Q_INVOKABLE void setData(QList data); - Q_INVOKABLE void setDataSource(QList> data); + explicit FluTreeModel(QObject *parent = nullptr); + + [[nodiscard]] int rowCount(const QModelIndex &parent = {}) const override; + + [[nodiscard]] int columnCount(const QModelIndex &parent = {}) const override; + + [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + [[nodiscard]] QHash roleNames() const override; + + [[nodiscard]] QModelIndex parent(const QModelIndex &child) const override; + + [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override; + + Q_INVOKABLE void removeRows(int row, int count); + + Q_INVOKABLE void insertRows(int row, const QList &data); + + Q_INVOKABLE QObject *getRow(int row); + + Q_INVOKABLE void setRow(int row, QVariantMap data); + + Q_INVOKABLE void setData(QList data); + + Q_INVOKABLE void setDataSource(QList> data); + Q_INVOKABLE void collapse(int row); + Q_INVOKABLE void expand(int row); - Q_INVOKABLE FluTreeNode* getNode(int row); + + Q_INVOKABLE FluTreeNode *getNode(int row); + Q_INVOKABLE void refreshNode(int row); - Q_INVOKABLE void checkRow(int row,bool checked); + + Q_INVOKABLE void checkRow(int row, bool checked); + Q_INVOKABLE bool hitHasChildrenExpanded(int row); + Q_INVOKABLE void allExpand(); + Q_INVOKABLE void allCollapse(); + private: - QList _rows; - QList _dataSource; - FluTreeNode* _root = nullptr; + QList _rows; + QList _dataSource; + FluTreeNode *_root = nullptr; }; -#endif // FLUTREEMODEL_H +#pragma clang diagnostic pop \ No newline at end of file diff --git a/src/FluWatermark.cpp b/src/FluWatermark.cpp index 54f2405e..62a42b11 100644 --- a/src/FluWatermark.cpp +++ b/src/FluWatermark.cpp @@ -2,22 +2,22 @@ #include "FluTextStyle.h" -FluWatermark::FluWatermark(QQuickItem* parent) : QQuickPaintedItem(parent){ - gap(QPoint(100,100)); - offset(QPoint(_gap.x()/2,_gap.y()/2)); - rotate(22); +FluWatermark::FluWatermark(QQuickItem *parent) : QQuickPaintedItem(parent) { + _gap = QPoint(100, 100); + _offset = QPoint(_gap.x() / 2, _gap.y() / 2); + _rotate = 22; + _textColor = QColor(222, 222, 222, 222); + _textSize = 16; setZ(9999); - textColor(QColor(222,222,222,222)); - textSize(16); - connect(this,&FluWatermark::textColorChanged,this,[=]{update();}); - connect(this,&FluWatermark::gapChanged,this,[=]{update();}); - connect(this,&FluWatermark::offsetChanged,this,[=]{update();}); - connect(this,&FluWatermark::textChanged,this,[=]{update();}); - connect(this,&FluWatermark::rotateChanged,this,[=]{update();}); - connect(this,&FluWatermark::textSizeChanged,this,[=]{update();}); + connect(this, &FluWatermark::textColorChanged, this, [=] { update(); }); + connect(this, &FluWatermark::gapChanged, this, [=] { update(); }); + connect(this, &FluWatermark::offsetChanged, this, [=] { update(); }); + connect(this, &FluWatermark::textChanged, this, [=] { update(); }); + connect(this, &FluWatermark::rotateChanged, this, [=] { update(); }); + connect(this, &FluWatermark::textSizeChanged, this, [=] { update(); }); } -void FluWatermark::paint(QPainter* painter){ +void FluWatermark::paint(QPainter *painter) { QFont font; font.setFamily(FluTextStyle::getInstance()->family()); font.setPixelSize(_textSize); @@ -26,14 +26,12 @@ void FluWatermark::paint(QPainter* painter){ QFontMetricsF fontMetrics(font); qreal fontWidth = fontMetrics.horizontalAdvance(_text); qreal fontHeight = fontMetrics.height(); - int stepX = fontWidth + _gap.x(); - int stepY = fontHeight + _gap.y(); - int rowCount = width() / stepX+1; - int colCount = height() / stepY+1; - for (int r = 0; r < rowCount; r++) - { - for (int c = 0; c < colCount; c++) - { + int stepX = qRound(fontWidth + _gap.x()); + int stepY = qRound(fontHeight + _gap.y()); + int rowCount = qRound(width() / stepX + 1); + int colCount = qRound(height() / stepY + 1); + for (int r = 0; r < rowCount; r++) { + for (int c = 0; c < colCount; c++) { qreal centerX = stepX * r + _offset.x() + fontWidth / 2.0; qreal centerY = stepY * c + _offset.y() + fontHeight / 2.0; painter->save(); diff --git a/src/FluWatermark.h b/src/FluWatermark.h index 26381047..3acef5ad 100644 --- a/src/FluWatermark.h +++ b/src/FluWatermark.h @@ -1,5 +1,4 @@ -#ifndef FLUWATERMARK_H -#define FLUWATERMARK_H +#pragma once #include #include @@ -9,19 +8,17 @@ /** * @brief The FluWatermark class */ -class FluWatermark : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY_AUTO(QString,text) - Q_PROPERTY_AUTO(QPoint,gap) - Q_PROPERTY_AUTO(QPoint,offset); - Q_PROPERTY_AUTO(QColor,textColor); - Q_PROPERTY_AUTO(int,rotate); - Q_PROPERTY_AUTO(int,textSize); +class FluWatermark : public QQuickPaintedItem { +Q_OBJECT +Q_PROPERTY_AUTO(QString, text) +Q_PROPERTY_AUTO(QPoint, gap) +Q_PROPERTY_AUTO(QPoint, offset); +Q_PROPERTY_AUTO(QColor, textColor); +Q_PROPERTY_AUTO(int, rotate); +Q_PROPERTY_AUTO(int, textSize); QML_NAMED_ELEMENT(FluWatermark) public: explicit FluWatermark(QQuickItem *parent = nullptr); - void paint(QPainter* painter) override; -}; -#endif // FLUWATERMARK_H + void paint(QPainter *painter) override; +}; diff --git a/src/FluentUI.cpp b/src/FluentUI.cpp index ec0f525e..e4aa166e 100644 --- a/src/FluentUI.cpp +++ b/src/FluentUI.cpp @@ -15,143 +15,144 @@ #include "FluTableSortProxyModel.h" #include "FluFrameless.h" -void FluentUI::registerTypes(QQmlEngine *engine){ - initializeEngine(engine,uri); - registerTypes(uri); +void FluentUI::registerTypes(QQmlEngine *engine) { + initializeEngine(engine, _uri); + registerTypes(_uri); } -void FluentUI::registerTypes(const char *uri){ +void FluentUI::registerTypes(const char *uri) const { #if (QT_VERSION < QT_VERSION_CHECK(6, 2, 0)) Q_INIT_RESOURCE(fluentui); - + int major = _major; + int minor = _minor; //@uri FluentUI - qmlRegisterType(uri,major,minor,"FluQrCodeItem"); - qmlRegisterType(uri,major,minor,"FluCaptcha"); - qmlRegisterType(uri,major,minor,"FluWatermark"); - qmlRegisterType(uri,major,minor,"FluAccentColor"); - qmlRegisterType(uri,major,minor,"FluTreeModel"); - qmlRegisterType(uri,major,minor,"FluRectangle"); - qmlRegisterType(uri,major,minor,"FluFrameless"); - qmlRegisterType(uri,major,minor,"FluTableSortProxyModel"); + qmlRegisterType(uri, major, minor, "FluQrCodeItem"); + qmlRegisterType(uri, major, minor, "FluCaptcha"); + qmlRegisterType(uri, major, minor, "FluWatermark"); + qmlRegisterType(uri, major, minor, "FluAccentColor"); + qmlRegisterType(uri, major, minor, "FluTreeModel"); + qmlRegisterType(uri, major, minor, "FluRectangle"); + qmlRegisterType(uri, major, minor, "FluFrameless"); + qmlRegisterType(uri, major, minor, "FluTableSortProxyModel"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAcrylic.qml"),uri,major,minor,"FluAcrylic"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAppBar.qml"),uri,major,minor,"FluAppBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFrame.qml"),uri,major,minor,"FluFrame"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAutoSuggestBox.qml"),uri,major,minor,"FluAutoSuggestBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluBadge.qml"),uri,major,minor,"FluBadge"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluBreadcrumbBar.qml"),uri,major,minor,"FluBreadcrumbBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluButton.qml"),uri,major,minor,"FluButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCalendarPicker.qml"),uri,major,minor,"FluCalendarPicker"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCarousel.qml"),uri,major,minor,"FluCarousel"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluChart.qml"),uri,major,minor,"FluChart"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCheckBox.qml"),uri,major,minor,"FluCheckBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluColorPicker.qml"),uri,major,minor,"FluColorPicker"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluComboBox.qml"),uri,major,minor,"FluComboBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluContentDialog.qml"),uri,major,minor,"FluContentDialog"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluContentPage.qml"),uri,major,minor,"FluContentPage"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluControl.qml"),uri,major,minor,"FluControl"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCopyableText.qml"),uri,major,minor,"FluCopyableText"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDatePicker.qml"),uri,major,minor,"FluDatePicker"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDivider.qml"),uri,major,minor,"FluDivider"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDropDownButton.qml"),uri,major,minor,"FluDropDownButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluExpander.qml"),uri,major,minor,"FluExpander"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFilledButton.qml"),uri,major,minor,"FluFilledButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFlipView.qml"),uri,major,minor,"FluFlipView"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFocusRectangle.qml"),uri,major,minor,"FluFocusRectangle"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluIcon.qml"),uri,major,minor,"FluIcon"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluIconButton.qml"),uri,major,minor,"FluIconButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluImage.qml"),uri,major,minor,"FluImage"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluImageButton.qml"),uri,major,minor,"FluImageButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluInfoBar.qml"),uri,major,minor,"FluInfoBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluItemDelegate.qml"),uri,major,minor,"FluItemDelegate"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenu.qml"),uri,major,minor,"FluMenu"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuBar.qml"),uri,major,minor,"FluMenuBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuBarItem.qml"),uri,major,minor,"FluMenuBarItem"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuItem.qml"),uri,major,minor,"FluMenuItem"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuSeparator.qml"),uri,major,minor,"FluMenuSeparator"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMultilineTextBox.qml"),uri,major,minor,"FluMultilineTextBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluNavigationView.qml"),uri,major,minor,"FluNavigationView"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluObject.qml"),uri,major,minor,"FluObject"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPage.qml"),uri,major,minor,"FluPage"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPagination.qml"),uri,major,minor,"FluPagination"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItem.qml"),uri,major,minor,"FluPaneItem"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemEmpty.qml"),uri,major,minor,"FluPaneItemEmpty"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemExpander.qml"),uri,major,minor,"FluPaneItemExpander"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemHeader.qml"),uri,major,minor,"FluPaneItemHeader"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemSeparator.qml"),uri,major,minor,"FluPaneItemSeparator"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPasswordBox.qml"),uri,major,minor,"FluPasswordBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPivot.qml"),uri,major,minor,"FluPivot"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPivotItem.qml"),uri,major,minor,"FluPivotItem"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPopup.qml"),uri,major,minor,"FluPopup"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressBar.qml"),uri,major,minor,"FluProgressBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressRing.qml"),uri,major,minor,"FluProgressRing"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluQRCode.qml"),uri,major,minor,"FluQRCode"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRadioButton.qml"),uri,major,minor,"FluRadioButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRadioButtons.qml"),uri,major,minor,"FluRadioButtons"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRatingControl.qml"),uri,major,minor,"FluRatingControl"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRemoteLoader.qml"),uri,major,minor,"FluRemoteLoader"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollBar.qml"),uri,major,minor,"FluScrollBar"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollIndicator.qml"),uri,major,minor,"FluScrollIndicator"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollablePage.qml"),uri,major,minor,"FluScrollablePage"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluShadow.qml"),uri,major,minor,"FluShadow"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSlider.qml"),uri,major,minor,"FluSlider"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSpinBox.qml"),uri,major,minor,"FluSpinBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluStatusLayout.qml"),uri,major,minor,"FluStatusLayout"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTabView.qml"),uri,major,minor,"FluTabView"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTableView.qml"),uri,major,minor,"FluTableView"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluText.qml"),uri,major,minor,"FluText"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBox.qml"),uri,major,minor,"FluTextBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBoxBackground.qml"),uri,major,minor,"FluTextBoxBackground"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBoxMenu.qml"),uri,major,minor,"FluTextBoxMenu"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextButton.qml"),uri,major,minor,"FluTextButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTimePicker.qml"),uri,major,minor,"FluTimePicker"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTimeline.qml"),uri,major,minor,"FluTimeline"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluToggleButton.qml"),uri,major,minor,"FluToggleButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluToggleSwitch.qml"),uri,major,minor,"FluToggleSwitch"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTooltip.qml"),uri,major,minor,"FluTooltip"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTour.qml"),uri,major,minor,"FluTour"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTreeView.qml"),uri,major,minor,"FluTreeView"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindow.qml"),uri,major,minor,"FluWindow"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowDialog.qml"),uri,major,minor,"FluWindowDialog"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRangeSlider.qml"),uri,major,minor,"FluRangeSlider"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluStaggeredLayout.qml"),uri,major,minor,"FluStaggeredLayout"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressButton.qml"),uri,major,minor,"FluProgressButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLoadingButton.qml"),uri,major,minor,"FluLoadingButton"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluClip.qml"),uri,major,minor,"FluClip"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLoader.qml"),uri,major,minor,"FluLoader"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluShortcutPicker.qml"),uri,major,minor,"FluShortcutPicker"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSplitLayout.qml"),uri,major,minor,"FluSplitLayout"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowResultLauncher.qml"),uri,major,minor,"FluWindowResultLauncher"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLauncher.qml"),uri,major,minor,"FluLauncher"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEvent.qml"),uri,major,minor,"FluEvent"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSheet.qml"),uri,major,minor,"FluSheet"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluGroupBox.qml"),uri,major,minor,"FluGroupBox"); - qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluControlBackground.qml"),uri,major,minor,"FluControlBackground"); - qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRouter.qml"),uri,major,minor,"FluRouter"); - qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEventBus.qml"),uri,major,minor,"FluEventBus"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAcrylic.qml"), uri, major, minor, "FluAcrylic"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAppBar.qml"), uri, major, minor, "FluAppBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFrame.qml"), uri, major, minor, "FluFrame"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluAutoSuggestBox.qml"), uri, major, minor, "FluAutoSuggestBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluBadge.qml"), uri, major, minor, "FluBadge"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluBreadcrumbBar.qml"), uri, major, minor, "FluBreadcrumbBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluButton.qml"), uri, major, minor, "FluButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCalendarPicker.qml"), uri, major, minor, "FluCalendarPicker"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCarousel.qml"), uri, major, minor, "FluCarousel"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluChart.qml"), uri, major, minor, "FluChart"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCheckBox.qml"), uri, major, minor, "FluCheckBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluColorPicker.qml"), uri, major, minor, "FluColorPicker"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluComboBox.qml"), uri, major, minor, "FluComboBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluContentDialog.qml"), uri, major, minor, "FluContentDialog"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluContentPage.qml"), uri, major, minor, "FluContentPage"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluControl.qml"), uri, major, minor, "FluControl"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluCopyableText.qml"), uri, major, minor, "FluCopyableText"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDatePicker.qml"), uri, major, minor, "FluDatePicker"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDivider.qml"), uri, major, minor, "FluDivider"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluDropDownButton.qml"), uri, major, minor, "FluDropDownButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluExpander.qml"), uri, major, minor, "FluExpander"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFilledButton.qml"), uri, major, minor, "FluFilledButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFlipView.qml"), uri, major, minor, "FluFlipView"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluFocusRectangle.qml"), uri, major, minor, "FluFocusRectangle"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluIcon.qml"), uri, major, minor, "FluIcon"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluIconButton.qml"), uri, major, minor, "FluIconButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluImage.qml"), uri, major, minor, "FluImage"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluImageButton.qml"), uri, major, minor, "FluImageButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluInfoBar.qml"), uri, major, minor, "FluInfoBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluItemDelegate.qml"), uri, major, minor, "FluItemDelegate"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenu.qml"), uri, major, minor, "FluMenu"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuBar.qml"), uri, major, minor, "FluMenuBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuBarItem.qml"), uri, major, minor, "FluMenuBarItem"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuItem.qml"), uri, major, minor, "FluMenuItem"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMenuSeparator.qml"), uri, major, minor, "FluMenuSeparator"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluMultilineTextBox.qml"), uri, major, minor, "FluMultilineTextBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluNavigationView.qml"), uri, major, minor, "FluNavigationView"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluObject.qml"), uri, major, minor, "FluObject"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPage.qml"), uri, major, minor, "FluPage"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPagination.qml"), uri, major, minor, "FluPagination"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItem.qml"), uri, major, minor, "FluPaneItem"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemEmpty.qml"), uri, major, minor, "FluPaneItemEmpty"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemExpander.qml"), uri, major, minor, "FluPaneItemExpander"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemHeader.qml"), uri, major, minor, "FluPaneItemHeader"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPaneItemSeparator.qml"), uri, major, minor, "FluPaneItemSeparator"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPasswordBox.qml"), uri, major, minor, "FluPasswordBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPivot.qml"), uri, major, minor, "FluPivot"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPivotItem.qml"), uri, major, minor, "FluPivotItem"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluPopup.qml"), uri, major, minor, "FluPopup"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressBar.qml"), uri, major, minor, "FluProgressBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressRing.qml"), uri, major, minor, "FluProgressRing"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluQRCode.qml"), uri, major, minor, "FluQRCode"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRadioButton.qml"), uri, major, minor, "FluRadioButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRadioButtons.qml"), uri, major, minor, "FluRadioButtons"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRatingControl.qml"), uri, major, minor, "FluRatingControl"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRemoteLoader.qml"), uri, major, minor, "FluRemoteLoader"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollBar.qml"), uri, major, minor, "FluScrollBar"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollIndicator.qml"), uri, major, minor, "FluScrollIndicator"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluScrollablePage.qml"), uri, major, minor, "FluScrollablePage"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluShadow.qml"), uri, major, minor, "FluShadow"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSlider.qml"), uri, major, minor, "FluSlider"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSpinBox.qml"), uri, major, minor, "FluSpinBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluStatusLayout.qml"), uri, major, minor, "FluStatusLayout"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTabView.qml"), uri, major, minor, "FluTabView"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTableView.qml"), uri, major, minor, "FluTableView"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluText.qml"), uri, major, minor, "FluText"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBox.qml"), uri, major, minor, "FluTextBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBoxBackground.qml"), uri, major, minor, "FluTextBoxBackground"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextBoxMenu.qml"), uri, major, minor, "FluTextBoxMenu"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTextButton.qml"), uri, major, minor, "FluTextButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTimePicker.qml"), uri, major, minor, "FluTimePicker"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTimeline.qml"), uri, major, minor, "FluTimeline"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluToggleButton.qml"), uri, major, minor, "FluToggleButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluToggleSwitch.qml"), uri, major, minor, "FluToggleSwitch"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTooltip.qml"), uri, major, minor, "FluTooltip"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTour.qml"), uri, major, minor, "FluTour"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluTreeView.qml"), uri, major, minor, "FluTreeView"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindow.qml"), uri, major, minor, "FluWindow"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowDialog.qml"), uri, major, minor, "FluWindowDialog"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRangeSlider.qml"), uri, major, minor, "FluRangeSlider"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluStaggeredLayout.qml"), uri, major, minor, "FluStaggeredLayout"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluProgressButton.qml"), uri, major, minor, "FluProgressButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLoadingButton.qml"), uri, major, minor, "FluLoadingButton"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluClip.qml"), uri, major, minor, "FluClip"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLoader.qml"), uri, major, minor, "FluLoader"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluShortcutPicker.qml"), uri, major, minor, "FluShortcutPicker"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSplitLayout.qml"), uri, major, minor, "FluSplitLayout"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowResultLauncher.qml"), uri, major, minor, "FluWindowResultLauncher"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLauncher.qml"), uri, major, minor, "FluLauncher"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEvent.qml"), uri, major, minor, "FluEvent"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSheet.qml"), uri, major, minor, "FluSheet"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluGroupBox.qml"), uri, major, minor, "FluGroupBox"); + qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluControlBackground.qml"), uri, major, minor, "FluControlBackground"); + qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRouter.qml"), uri, major, minor, "FluRouter"); + qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEventBus.qml"), uri, major, minor, "FluEventBus"); - qmlRegisterUncreatableMetaObject(Fluent_Awesome::staticMetaObject, uri,major,minor,"FluentIcons", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluThemeType::staticMetaObject, uri,major,minor,"FluThemeType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluPageType::staticMetaObject, uri,major,minor,"FluPageType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluWindowType::staticMetaObject, uri,major,minor,"FluWindowType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluTreeViewType::staticMetaObject, uri,major,minor,"FluTreeViewType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluStatusLayoutType::staticMetaObject, uri,major,minor,"FluStatusLayoutType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluContentDialogType::staticMetaObject, uri,major,minor,"FluContentDialogType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluTimePickerType::staticMetaObject, uri,major,minor,"FluTimePickerType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluCalendarViewType::staticMetaObject, uri,major,minor,"FluCalendarViewType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluTabViewType::staticMetaObject, uri,major,minor,"FluTabViewType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluNavigationViewType::staticMetaObject, uri,major,minor,"FluNavigationViewType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluTimelineType::staticMetaObject, uri,major,minor,"FluTimelineType", "Access to enums & flags only"); - qmlRegisterUncreatableMetaObject(FluSheetType::staticMetaObject, uri,major,minor,"FluSheetType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(Fluent_Awesome::staticMetaObject, uri, major, minor, "FluentIcons", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluThemeType::staticMetaObject, uri, major, minor, "FluThemeType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluPageType::staticMetaObject, uri, major, minor, "FluPageType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluWindowType::staticMetaObject, uri, major, minor, "FluWindowType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluTreeViewType::staticMetaObject, uri, major, minor, "FluTreeViewType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluStatusLayoutType::staticMetaObject, uri, major, minor, "FluStatusLayoutType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluContentDialogType::staticMetaObject, uri, major, minor, "FluContentDialogType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluTimePickerType::staticMetaObject, uri, major, minor, "FluTimePickerType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluCalendarViewType::staticMetaObject, uri, major, minor, "FluCalendarViewType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluTabViewType::staticMetaObject, uri, major, minor, "FluTabViewType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluNavigationViewType::staticMetaObject, uri, major, minor, "FluNavigationViewType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluTimelineType::staticMetaObject, uri, major, minor, "FluTimelineType", "Access to enums & flags only"); + qmlRegisterUncreatableMetaObject(FluSheetType::staticMetaObject, uri, major, minor, "FluSheetType", "Access to enums & flags only"); - qmlRegisterModule(uri,major,minor); + qmlRegisterModule(uri, major, minor); #endif } -void FluentUI::initializeEngine(QQmlEngine *engine, const char *uri){ - engine->rootContext()->setContextProperty("FluApp",FluApp::getInstance()); - engine->rootContext()->setContextProperty("FluColors",FluColors::getInstance()); - engine->rootContext()->setContextProperty("FluTheme",FluTheme::getInstance()); - engine->rootContext()->setContextProperty("FluTools",FluTools::getInstance()); - engine->rootContext()->setContextProperty("FluTextStyle",FluTextStyle::getInstance()); +void FluentUI::initializeEngine(QQmlEngine *engine, [[maybe_unused]] const char *uri) { + engine->rootContext()->setContextProperty("FluApp", FluApp::getInstance()); + engine->rootContext()->setContextProperty("FluColors", FluColors::getInstance()); + engine->rootContext()->setContextProperty("FluTheme", FluTheme::getInstance()); + engine->rootContext()->setContextProperty("FluTools", FluTools::getInstance()); + engine->rootContext()->setContextProperty("FluTextStyle", FluTextStyle::getInstance()); } diff --git a/src/FluentUI.h b/src/FluentUI.h index caf6c664..eb454741 100644 --- a/src/FluentUI.h +++ b/src/FluentUI.h @@ -1,5 +1,4 @@ -#ifndef FLUENTUI_H -#define FLUENTUI_H +#pragma once #include #include @@ -8,18 +7,20 @@ /** * @brief The FluentUI class */ -class FluentUI : public QObject -{ - Q_OBJECT -public: - SINGLETON(FluentUI) - Q_DECL_EXPORT void registerTypes(QQmlEngine *engine); - void registerTypes(const char *uri); - void initializeEngine(QQmlEngine *engine, const char *uri); -private: - const int major = 1; - const int minor = 0; - const char *uri = "FluentUI"; -}; +class FluentUI : public QObject { +Q_OBJECT -#endif // FLUENTUI_H +public: +SINGLETON(FluentUI) + + Q_DECL_EXPORT void registerTypes(QQmlEngine *engine); + + void registerTypes(const char *uri) const; + + void initializeEngine(QQmlEngine *engine, [[maybe_unused]] const char *uri); + +private: + const int _major = 1; + const int _minor = 0; + const char *_uri = "FluentUI"; +}; \ No newline at end of file diff --git a/src/fluentuiplugin.cpp b/src/fluentuiplugin.cpp index 59eac0a5..55d865c5 100644 --- a/src/fluentuiplugin.cpp +++ b/src/fluentuiplugin.cpp @@ -2,18 +2,12 @@ #include "FluentUI.h" -FluentUIPlugin::FluentUIPlugin() -{ +FluentUIPlugin::FluentUIPlugin() = default; -} - -void FluentUIPlugin::registerTypes(const char *uri) -{ +void FluentUIPlugin::registerTypes(const char *uri) { FluentUI::getInstance()->registerTypes(uri); } -void FluentUIPlugin::initializeEngine(QQmlEngine *engine, const char *uri) -{ - Q_UNUSED(uri) - FluentUI::getInstance()->initializeEngine(engine,uri); +void FluentUIPlugin::initializeEngine(QQmlEngine *engine, const char *uri) { + FluentUI::getInstance()->initializeEngine(engine, uri); } diff --git a/src/fluentuiplugin.h b/src/fluentuiplugin.h index d87b9b3f..bc609baa 100644 --- a/src/fluentuiplugin.h +++ b/src/fluentuiplugin.h @@ -1,19 +1,18 @@ -#ifndef FLUENTUIPLUGIN_H -#define FLUENTUIPLUGIN_H +#pragma once #include /** * @brief The FluentUIPlugin class */ -class FluentUIPlugin : public QQmlExtensionPlugin -{ - Q_OBJECT +class FluentUIPlugin : public QQmlExtensionPlugin { +Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: FluentUIPlugin(); - void registerTypes(const char *uri) Q_DECL_OVERRIDE; - void initializeEngine(QQmlEngine *engine, const char *uri) Q_DECL_OVERRIDE; -}; -#endif // FLUENTUIPLUGIN_H + void registerTypes(const char *uri) Q_DECL_OVERRIDE; + + void initializeEngine(QQmlEngine *engine, const char *uri) Q_DECL_OVERRIDE; +}; \ No newline at end of file diff --git a/src/singleton.h b/src/singleton.h index 8d6c10e6..9583c687 100644 --- a/src/singleton.h +++ b/src/singleton.h @@ -1,18 +1,17 @@ -#ifndef SINGLETON_H -#define SINGLETON_H +#pragma once /** * @brief The Singleton class */ -template +template class Singleton { public: - static T* getInstance(); + static T *getInstance(); }; -template -T* Singleton::getInstance() { - static T* instance = new T(); +template +T *Singleton::getInstance() { + static T *instance = new T(); return instance; } @@ -23,5 +22,3 @@ private: \ static Class* getInstance() { \ return Singleton::getInstance(); \ } - -#endif // SINGLETON_H diff --git a/src/stdafx.h b/src/stdafx.h index 4b4d821c..b411a82a 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -1,37 +1,50 @@ -#ifndef STDAFX_H -#define STDAFX_H +#pragma once -#define Q_PROPERTY_AUTO(TYPE, M) \ +#define Q_PROPERTY_AUTO_P(TYPE, M) \ Q_PROPERTY(TYPE M MEMBER _##M NOTIFY M##Changed) \ - public: \ - Q_SIGNAL void M##Changed(); \ - void M(TYPE in_##M) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(TYPE in_##M) \ { \ - _##M = in_##M; \ - Q_EMIT M##Changed(); \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ } \ - TYPE M() \ + TYPE M() \ { \ - return _##M; \ + return _##M; \ } \ - private: \ - TYPE _##M; \ + private: \ + TYPE _##M; \ + +#define Q_PROPERTY_AUTO(TYPE, M) \ +Q_PROPERTY(TYPE M MEMBER _##M NOTIFY M##Changed) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE& in_##M) \ +{ \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ +} \ + TYPE M() \ +{ \ + return _##M; \ +} \ + private: \ + TYPE _##M; \ -#define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ +#define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ Q_PROPERTY(TYPE M READ M NOTIFY M##Changed FINAL) \ - public: \ - Q_SIGNAL void M##Changed(); \ - void M(TYPE in_##M) \ + public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE& in_##M) \ { \ - _##M = in_##M; \ - Q_EMIT M##Changed(); \ + _##M = in_##M; \ + Q_EMIT M##Changed(); \ } \ - TYPE M() \ + TYPE M() \ { \ - return _##M; \ + return _##M; \ } \ - private: \ - TYPE _##M; \ - -#endif // STDAFX_H + private: \ + TYPE _##M; \